[
  {
    "path": ".changeset/README.md",
    "content": "# Changesets\n\nHello and welcome! This folder has been automatically generated by `@changesets/cli`, a build tool that works\nwith multi-package repos, or single-package repos to help you version and publish your code. You can\nfind the full documentation for it [in our repository](https://github.com/changesets/changesets)\n\nWe have a quick list of common questions to get you started engaging with this project in\n[our documentation](https://github.com/changesets/changesets/blob/main/docs/common-questions.md)\n"
  },
  {
    "path": ".changeset/config.json",
    "content": "{\n  \"$schema\": \"https://unpkg.com/@changesets/config@2.3.0/schema.json\",\n  \"changelog\": [\"@svitejs/changesets-changelog-github-compact\", { \"repo\": \"huntabyte/shadcn-svelte\" }],\n  \"commit\": false,\n  \"fixed\": [],\n  \"linked\": [],\n  \"access\": \"public\",\n  \"baseBranch\": \"main\",\n  \"updateInternalDependencies\": \"patch\",\n  \"ignore\": []\n}\n"
  },
  {
    "path": ".github/FUNDING.yml",
    "content": "# These are supported funding model platforms\n\ngithub: [huntabyte, adriangonz97, ieedan]\npatreon: # Replace with a single Patreon username\nopen_collective: # Replace with a single Open Collective username\nko_fi: huntabyte\ntidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel\ncommunity_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry\nliberapay: # Replace with a single Liberapay username\nissuehunt: # Replace with a single IssueHunt username\notechie: # Replace with a single Otechie username\ncustom: # Replace with up to 4 custom sponsorship URLs e.g., ['link1', 'link2']\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/1-documentation_change.yml",
    "content": "name: Report Docs Issue\ndescription: Suggest an addition or modification to the documentation\nlabels: [triage]\nbody:\n  - type: dropdown\n    attributes:\n      label: Change Type\n      description: What type of change are you proposing?\n      options:\n        - Addition\n        - Correction\n        - Removal\n        - Cleanup (formatting, typos, etc.)\n    validations:\n      required: true\n\n  - type: textarea\n    attributes:\n      label: Proposed Changes\n      description: Describe the proposed changes and why they are necessary\n    validations:\n      required: true\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/2-feature_request.yml",
    "content": "name: Feature request\ndescription: Request a new feature\nlabels: [triage]\nbody:\n  - type: checkboxes\n    attributes:\n      label: Prerequisites\n      description: Please make sure you have checked all of the following.\n      options:\n        - label: This feature already exists in [shadcn/ui](https://github.com/shadcn/ui) - if not, it won't be considered here so don't continue with your issue.\n          required: true\n\n  - type: markdown\n    attributes:\n      value: |\n        This project's goal is to remain aligned with [shadcn/ui](https://github.com/shadcn-ui/ui). If the feature you are requesting is not in the original shadcn/ui, it will not be considered here.\n  - type: textarea\n    id: feature-description\n    attributes:\n      label: Describe the feature\n      description: A clear and concise description of the feature. If you intend to submit a PR for this feature, tell us how in the description. Thanks!\n      placeholder: Feature description\n    validations:\n      required: true\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/3-bug_report.yml",
    "content": "name: Bug report\ndescription: Report an issue with shadcn-svelte\nlabels: [triage]\nbody:\n  - type: markdown\n    attributes:\n      value: |\n        ### Thanks for taking the time to create an issue! Please search open/closed issues before submitting, as the issue may have already been reported/addressed.\n  - type: markdown\n    attributes:\n      value: |\n        #### If you aren't sure if something is a bug or not, please do not create an issue, instead ask in one of the following channels:\n        - [Discussions](https://github.com/huntabyte/shadcn-svelte/discussions/new?category=help)\n        - [Discord](https://discord.gg/fdXy3Sk8Gq)\n  - type: textarea\n    id: bug-description\n    attributes:\n      label: Describe the bug\n      description: A clear and concise description of what the bug is. If you intend to submit a PR for this issue, tell us how in the description. Thanks!\n      placeholder: Bug description\n    validations:\n      required: true\n  - type: textarea\n    id: reproduction\n    attributes:\n      label: Reproduction\n      description: |\n        Provide a minimal reproduction of the problem. Include a StackBlitz or link to a GitHub repository that we can easily run to recreate the issue. If a report is vague and does not have a reproduction, it will be closed without warning.\n\n        To get started, you can use the following StackBlitz template:\n        https://shadcn-svelte.com/repro\n\n        ***Do not simply add a code snippet or a screenshot. We need a reproduction that we can easily run to recreate the issue.***\n      placeholder: Reproduction\n    validations:\n      required: true\n  - type: textarea\n    id: logs\n    attributes:\n      label: Logs\n      description: Please include browser console and server logs around the time this bug occurred. Optional if provided reproduction. Please try not to insert an image but copy paste the log text.\n      render: bash\n  - type: textarea\n    id: system-info\n    attributes:\n      label: System Info\n      description: Output of `npx envinfo --system --npmPackages svelte,shadcn-svelte,tailwindcss,bits-ui,vaul-svelte,sveltekit-superforms,@sveltejs/kit,mode-watcher,formsnap,cmdk-sv,svelte-radix,@lucide/svelte,svelte-sonner --binaries --browsers`\n      render: bash\n      placeholder: System, Binaries, Browsers\n    validations:\n      required: true\n  - type: dropdown\n    id: severity\n    attributes:\n      label: Severity\n      description: Select the severity of this issue\n      options:\n        - annoyance\n        - blocking an upgrade\n        - blocking all usage of shadcn-svelte\n    validations:\n      required: true\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/config.yml",
    "content": "blank_issues_enabled: false\ncontact_links:\n  - name: Get Help\n    url: https://github.com/huntabyte/shadcn-svelte/discussions/new?category=help\n    about: If you can't get something to work the way you expect, open a question in our discussion forums.\n  - name: Discord\n    url: https://discord.gg/fdXy3Sk8Gq\n    about: If you need to have a back-and-forth conversation, join the Discord server.\n"
  },
  {
    "path": ".github/PULL_REQUEST_TEMPLATE.md",
    "content": "<!--\n### Before submitting the PR, please make sure you do the following\n\n- If your PR isn't addressing a small fix (like a typo), it references an issue where it is discussed ahead of time and assigned to you. In many cases, features are absent for a reason.\n- Prefix your PR title with `feat:`, `fix:`, `chore:`, or `docs:`.\n- This message body should clearly illustrate what problems it solves.\n- Format & lint the code with `pnpm format` and `pnpm lint`\n-->\n"
  },
  {
    "path": ".github/reproduire/needs-reproduction.md",
    "content": "Please provide a [reproduction](https://shadcn-svelte.com/repro).\n\n<details>\n<summary>More info</summary>\n\n### Why do I need to provide a reproduction?\n\nThis project is maintained by a very small team, and we simply don't have the bandwidth to investigate issues that we can't easily replicate. Reproductions enable us to fix issues faster and more efficiently. If you care about getting your issue resolved, providing a reproduction is the best way to do that.\n\n### I've provided a reproduction - what happens now?\n\nOnce a reproduction is provided, we'll remove the `needs reproduction` label and review the issue to determine how to resolve it. If we can confirm it's a bug, we'll label it as such and prioritize it based on its severity.\n\nIf `needs reproduction` labeled issues don't receive any activity (e.g., a comment with a reproduction link), they'll be closed. Feel free to comment with a reproduction at any time and the issue will be reopened.\n\n### How can I create a reproduction?\n\nYou can use [this template](https://shadcn-svelte.com/repro) to create a minimal reproduction. You can also link to a GitHub repository with the reproduction.\n\nPlease ensure that the reproduction is as **minimal** as possible. If there is a ton of custom logic in your reproduction, it is difficult to determine if the issue is with your code or with the library. The more minimal the reproduction, the more likely it is that we'll be able to assist.\n\nYou might also find these other articles interesting and/or helpful:\n\n- [The Importance of Reproductions](https://antfu.me/posts/why-reproductions-are-required)\n- [How to Generate a Minimal, Complete, and Verifiable Example](https://stackoverflow.com/help/mcve)\n\n</details>\n"
  },
  {
    "path": ".github/workflows/autoformat.yml",
    "content": "name: Auto-format PR on Comment\n\non:\n  issue_comment:\n    types: [created]\n\njobs:\n  format:\n    # only run on PR comments\n    if: github.event.issue.pull_request\n\n    runs-on: macos-latest\n\n    permissions:\n      contents: write\n      pull-requests: write\n\n    steps:\n      - name: Check trigger and permissions\n        uses: actions/github-script@v7\n        id: check-permission\n        with:\n          script: |\n            const commentBody = context.payload.comment.body;\n            const hasTrigger = commentBody.includes('/format') || commentBody.includes('/autoformat');\n\n            if (!hasTrigger) {\n              console.log('Comment does not contain trigger phrase. Skipping.');\n              core.setOutput('should-continue', 'false');\n              return false;\n            }\n\n            const { data: perm } = await github.rest.repos.getCollaboratorPermissionLevel({\n              owner: context.repo.owner,\n              repo: context.repo.repo,\n              username: context.payload.comment.user.login\n            });\n\n            const hasWriteAccess = ['admin', 'write'].includes(perm.permission);\n\n            if (!hasWriteAccess) {\n              await github.rest.issues.createComment({\n                owner: context.repo.owner,\n                repo: context.repo.repo,\n                issue_number: context.issue.number,\n                body: '❌ Sorry, you need write access to trigger auto-formatting.'\n              });\n              core.setOutput('should-continue', 'false');\n              return false;\n            }\n\n            core.setOutput('should-continue', 'true');\n            return true;\n\n      - name: Get PR details\n        if: steps.check-permission.outputs.should-continue == 'true'\n        uses: actions/github-script@v7\n        id: get-pr\n        with:\n          script: |\n            const { data: pr } = await github.rest.pulls.get({\n              owner: context.repo.owner,\n              repo: context.repo.repo,\n              pull_number: context.issue.number\n            });\n\n            core.setOutput('head-ref', pr.head.ref);\n            core.setOutput('head-sha', pr.head.sha);\n            core.setOutput('base-ref', pr.base.ref);\n            core.setOutput('pr-number', pr.number);\n\n      - name: React to comment\n        if: steps.check-permission.outputs.should-continue == 'true'\n        uses: actions/github-script@v7\n        with:\n          script: |\n            await github.rest.reactions.createForIssueComment({\n              owner: context.repo.owner,\n              repo: context.repo.repo,\n              comment_id: context.payload.comment.id,\n              content: 'rocket'\n            });\n\n      - name: Checkout PR branch\n        if: steps.check-permission.outputs.should-continue == 'true'\n        uses: actions/checkout@v4\n        with:\n          ref: ${{ steps.get-pr.outputs.head-ref }}\n\n      - uses: pnpm/action-setup@v4\n        if: steps.check-permission.outputs.should-continue == 'true'\n\n      - uses: actions/setup-node@v4\n        if: steps.check-permission.outputs.should-continue == 'true'\n        with:\n          node-version: 20\n          cache: pnpm\n\n      - name: Install dependencies\n        if: steps.check-permission.outputs.should-continue == 'true'\n        run: pnpm install\n\n      - name: Run formatter\n        if: steps.check-permission.outputs.should-continue == 'true'\n        run: pnpm format .\n\n      - name: Check for changes\n        if: steps.check-permission.outputs.should-continue == 'true'\n        id: check-changes\n        run: |\n          if [[ -z $(git status --porcelain) ]]; then\n            echo \"has-changes=false\" >> $GITHUB_OUTPUT\n          else\n            echo \"has-changes=true\" >> $GITHUB_OUTPUT\n          fi\n\n      - name: Commit and push changes\n        if: steps.check-permission.outputs.should-continue == 'true' && steps.check-changes.outputs.has-changes == 'true'\n        run: |\n          git config --local user.email \"action@github.com\"\n          git config --local user.name \"GitHub Action\"\n          git add .\n          git commit -m \"chore: auto-format code via GitHub Action\n\n          Triggered by @${{ github.event.comment.user.login }} in PR #${{ steps.get-pr.outputs.pr-number }}\"\n          git push origin HEAD:${{ steps.get-pr.outputs.head-ref }}\n\n      - name: Comment on PR with result\n        uses: actions/github-script@v7\n        if: always() && steps.check-permission.outputs.should-continue == 'true'\n        with:\n          script: |\n            const hasChanges = '${{ steps.check-changes.outputs.has-changes }}' === 'true';\n            const success = '${{ job.status }}' === 'success';\n\n            let body;\n            if (!success) {\n              body = '❌ Auto-formatting failed. Please check the workflow logs.';\n            } else if (hasChanges) {\n              body = '✅ Code has been auto-formatted and changes have been pushed to this PR.';\n            } else {\n              body = '✅ No formatting changes needed. Code is already properly formatted.';\n            }\n\n            await github.rest.issues.createComment({\n              owner: context.repo.owner,\n              repo: context.repo.repo,\n              issue_number: context.issue.number,\n              body: body\n            });\n"
  },
  {
    "path": ".github/workflows/build-preview.yml",
    "content": "name: Build Preview Deployment\n\n# cancel in-progress runs on new commits to same PR (github.event.number)\nconcurrency:\n  group: ${{ github.workflow }}-${{ github.event.number || github.sha }}\n  cancel-in-progress: true\n\non:\n  pull_request:\n    types: [opened, synchronize]\n\njobs:\n  build-preview:\n    runs-on: macos-latest\n    steps:\n      - uses: actions/checkout@v4\n      - uses: pnpm/action-setup@v4\n      - uses: actions/setup-node@v4\n        with:\n          node-version: 20\n          cache: pnpm\n\n      - name: Install dependencies\n        run: pnpm install\n\n      - name: Build site\n        env:\n          NODE_OPTIONS: --max-old-space-size=8192\n        run: pnpm build\n\n      - name: Upload build artifact\n        uses: actions/upload-artifact@v4\n        with:\n          name: preview-build\n          path: docs/.svelte-kit\n          include-hidden-files: true\n"
  },
  {
    "path": ".github/workflows/ci.yml",
    "content": "name: CI\n\non:\n  pull_request:\n\nconcurrency:\n  group: ${{ github.workflow }}-${{ github.event.number || github.sha }}\n  cancel-in-progress: true\n\njobs:\n  check:\n    name: Type Check\n    runs-on: macos-latest\n    steps:\n      - uses: actions/checkout@v4\n      - uses: pnpm/action-setup@v4\n      - uses: actions/setup-node@v4\n        with:\n          node-version: 20\n          cache: pnpm\n\n      - name: Install dependencies\n        run: pnpm install\n\n      - name: Run svelte-check\n        run: pnpm check\n\n  lint:\n    name: Lint\n    runs-on: macos-latest\n    steps:\n      - uses: actions/checkout@v4\n      - uses: pnpm/action-setup@v4\n      - uses: actions/setup-node@v4\n        with:\n          node-version: 20\n          cache: pnpm\n\n      - name: Install dependencies\n        run: pnpm install\n\n      - run: pnpm lint\n\n  cli-test:\n    name: CLI-Tests\n    runs-on: ${{ matrix.os }}\n    strategy:\n      matrix:\n        os: [ubuntu-latest, windows-latest, macOS-latest]\n    steps:\n      - uses: actions/checkout@v4\n      - uses: pnpm/action-setup@v4\n      - uses: actions/setup-node@v4\n        with:\n          node-version: 20\n          cache: pnpm\n\n      - name: Install dependencies\n        run: pnpm install\n\n      - name: Build packages\n        run: pnpm build:cli\n\n      - name: Run tests\n        run: pnpm -F shadcn-svelte test\n"
  },
  {
    "path": ".github/workflows/deploy-preview.yml",
    "content": "name: Upload Preview Deployment\n\non:\n  workflow_run:\n    workflows: [Build Preview Deployment]\n    types:\n      - completed\n\npermissions:\n  actions: read\n  deployments: write\n  contents: read\n  pull-requests: write\n\njobs:\n  deploy-preview:\n    runs-on: macos-latest\n    if: ${{ github.event.workflow_run.conclusion == 'success' }}\n    steps:\n      - name: Download build artifact\n        uses: actions/download-artifact@v4\n        id: preview-build-artifact\n        with:\n          name: preview-build\n          path: build\n          github-token: ${{ secrets.GITHUB_TOKEN }}\n          run-id: ${{ github.event.workflow_run.id }}\n\n      - name: Deploy to Cloudflare Pages\n        uses: AdrianGonz97/refined-cf-pages-action@v1\n        with:\n          apiToken: ${{ secrets.CF_API_TOKEN }}\n          accountId: ${{ secrets.CF_ACCOUNT_ID }}\n          githubToken: ${{ secrets.GITHUB_TOKEN }}\n          projectName: shadcn-svelte\n          deploymentName: Preview\n          directory: ${{ steps.preview-build-artifact.outputs.download-path }}/cloudflare\n"
  },
  {
    "path": ".github/workflows/deploy-prod.yml",
    "content": "name: Production Deployment\non:\n  push:\n    branches:\n      - main\n    paths:\n      - docs/**\n      - packages/registry/**\n  workflow_dispatch:\n\njobs:\n  deploy-production:\n    runs-on: macos-latest\n    permissions:\n      contents: read\n      deployments: write\n    name: Deploy Production Site to Cloudflare Pages\n    steps:\n      - uses: actions/checkout@v4\n      - uses: pnpm/action-setup@v4\n      - uses: actions/setup-node@v4\n        with:\n          node-version: 20\n          cache: pnpm\n\n      - name: Install dependencies\n        run: pnpm install\n\n      - name: Build site\n        env:\n          NODE_OPTIONS: --max-old-space-size=8192\n        run: pnpm build\n\n      - name: Deploy to Cloudflare\n        run: pnpm -F docs exec wrangler deploy\n        env:\n          CLOUDFLARE_API_TOKEN: ${{ secrets.CF_API_TOKEN }}\n          CLOUDFLARE_ACCOUNT_ID: ${{ secrets.CF_ACCOUNT_ID }}\n"
  },
  {
    "path": ".github/workflows/deploy-svelte-4.yml",
    "content": "name: Svelte 4 Deployment\non:\n  push:\n    branches:\n      - svelte-4\n    paths:\n      - sites/docs/**\n  workflow_dispatch:\n\n\njobs:\n  deploy-production:\n    runs-on: macos-latest\n    permissions:\n      contents: read\n      deployments: write\n    name: Deploy Production Site to Cloudflare Pages\n    steps:\n      - uses: actions/checkout@v4\n      - uses: pnpm/action-setup@v4\n      - uses: actions/setup-node@v4\n        with:\n          node-version: 20\n          cache: pnpm\n\n      - name: Install dependencies\n        run: pnpm install\n\n      - name: Build site\n        env:\n          NODE_OPTIONS: --max-old-space-size=8192\n        run: pnpm build\n\n      - name: Deploy to Cloudflare Pages\n        uses: AdrianGonz97/refined-cf-pages-action@v1\n        with:\n          apiToken: ${{ secrets.CF_API_TOKEN }}\n          accountId: ${{ secrets.CF_ACCOUNT_ID }}\n          githubToken: ${{ secrets.GITHUB_TOKEN }}\n          projectName: shadcn-svelte\n          directory: ./.svelte-kit/cloudflare\n          workingDirectory: sites/docs\n          branch: ${{ github.ref_name }}\n"
  },
  {
    "path": ".github/workflows/deploy-tailwind-3.yml",
    "content": "name: Tailwind 3 Deployment\non:\n  push:\n    branches:\n      - next-tailwind-3\n    paths:\n      - sites/docs/**\n  workflow_dispatch:\n\n\njobs:\n  deploy-production:\n    runs-on: macos-latest\n    permissions:\n      contents: read\n      deployments: write\n    name: Deploy Production Site to Cloudflare Pages\n    steps:\n      - uses: actions/checkout@v4\n      - uses: pnpm/action-setup@v4\n      - uses: actions/setup-node@v4\n        with:\n          node-version: 20\n          cache: pnpm\n\n\n      - name: Install dependencies\n        run: pnpm install\n\n      - name: Build site\n        env:\n          NODE_OPTIONS: --max-old-space-size=8192\n        run: pnpm build\n\n      - name: Deploy to Cloudflare Pages\n        uses: AdrianGonz97/refined-cf-pages-action@v1\n        with:\n          apiToken: ${{ secrets.CF_API_TOKEN }}\n          accountId: ${{ secrets.CF_ACCOUNT_ID }}\n          githubToken: ${{ secrets.GITHUB_TOKEN }}\n          projectName: shadcn-svelte-tw-3\n          directory: ./.svelte-kit/cloudflare\n          workingDirectory: sites/docs\n          deploymentName: Production Tailwind 3\n"
  },
  {
    "path": ".github/workflows/pr-guard.yml",
    "content": "name: PR guard\non:\n    pull_request_target:\n        types: [opened, reopened]\n\npermissions:\n    pull-requests: write\n    issues: write\n\njobs:\n    guard:\n        uses: huntabyte/actions/.github/workflows/guard-fork-main.yml@main\n"
  },
  {
    "path": ".github/workflows/release.yml",
    "content": "name: Publish\n\non:\n  push:\n    branches:\n      - main\n      - next\n\nconcurrency: ${{ github.workflow }}-${{ github.ref }}\n\njobs:\n  release:\n    permissions:\n      contents: write # to create release (changesets/action)\n      pull-requests: write # to create pull request (changesets/action)\n      id-token: write # Required for OIDC\n    name: Build & Publish Release\n    if: github.repository == 'huntabyte/shadcn-svelte'\n    runs-on: macos-latest\n    steps:\n      - uses: actions/checkout@v4\n        with:\n          fetch-depth: 0\n      - uses: pnpm/action-setup@v4\n      - uses: actions/setup-node@v4\n        with:\n          node-version: 24\n          cache: pnpm\n\n      - run: npm install -g npm@latest\n\n      - name: Install dependencies\n        run: pnpm install\n\n      - name: Create Release Pull Request or Publish\n        id: changesets\n        uses: changesets/action@v1\n        with:\n          commit: \"chore(release): version package\"\n          title: \"chore(release): version package\"\n          publish: pnpm ci:release\n        env:\n          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}\n          NPM_CONFIG_PROVENANCE: true\n          NODE_ENV: production\n"
  },
  {
    "path": ".github/workflows/reproduire-close.yml",
    "content": "name: Close incomplete issues\non:\n  workflow_dispatch:\n  schedule:\n    - cron: \"30 1 * * *\" # run every day\n\npermissions:\n  issues: write\n\njobs:\n  stale:\n    runs-on: macos-latest\n    steps:\n      - uses: actions/stale@28ca1036281a5e5922ead5184a1bbf96e5fc984e # v9.0.0\n        with:\n          days-before-stale: -1 # Issues and PR will never be flagged stale automatically.\n          stale-issue-label: needs reproduction # Label that flags an issue as stale.\n          only-labels: needs reproduction # Only process these issues\n          days-before-issue-close: 7\n          ignore-updates: true\n          remove-stale-when-updated: false\n          close-issue-message: This issue was closed because it was open for 7 days without a reproduction.\n          close-issue-label: closed-by-bot\n"
  },
  {
    "path": ".github/workflows/reproduire.yml",
    "content": "name: Reproduire\non:\n  issues:\n    types: [labeled]\n\npermissions:\n  issues: write\n\njobs:\n  reproduire:\n    runs-on: macos-latest\n    steps:\n      - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1\n      - uses: Hebilicious/reproduire@4b686ae9cbb72dad60f001d278b6e3b2ce40a9ac # v0.0.9-mp\n        with:\n          label: needs reproduction\n"
  },
  {
    "path": ".gitignore",
    "content": ".DS_Store\nnode_modules\ndist\n/build\n/.svelte-kit\n/package\n.env\n.env.*\n!.env.example\nvite.config.js.timestamp-*\nvite.config.ts.timestamp-*\n.turbo\n\n**/.svelte-kit/**/*\n\n# Logs\nlogs\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\nlerna-debug.log*\n.pnpm-debug.log*\n\n# Diagnostic reports (https://nodejs.org/api/report.html)\nreport.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json\n\n# Runtime data\npids\n*.pid\n*.seed\n*.pid.lock\n\n# Directory for instrumented libs generated by jscoverage/JSCover\nlib-cov\n\n# Coverage directory used by tools like istanbul\ncoverage\n*.lcov\n\n# nyc test coverage\n.nyc_output\n\n# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)\n.grunt\n\n# Bower dependency directory (https://bower.io/)\nbower_components\n\n# node-waf configuration\n.lock-wscript\n\n# Compiled binary addons (https://nodejs.org/api/addons.html)\nbuild/Release\n\n# Dependency directories\nnode_modules/\njspm_packages/\n\n# Snowpack dependency directory (https://snowpack.dev/)\nweb_modules/\n\n# TypeScript cache\n*.tsbuildinfo\n\n# Optional npm cache directory\n.npm\n\n# Optional eslint cache\n.eslintcache\n\n# Optional stylelint cache\n.stylelintcache\n\n# Microbundle cache\n.rpt2_cache/\n.rts2_cache_cjs/\n.rts2_cache_es/\n.rts2_cache_umd/\n\n# Optional REPL history\n.node_repl_history\n\n# Output of 'npm pack'\n*.tgz\n\n\n# dotenv environment variable files\n.env\n.env.development.local\n.env.test.local\n.env.production.local\n.env.local\n\n\n# Stores VSCode versions used for testing VSCode extensions\n.vscode-test\n\n\n# JetBrains IDEs\n.idea/\n\n.velite\ndocs/static/registry\ndocs/static/themes.css\ndocs/static/schema/registry.json\ndocs/static/schema/registry-item.json\ndocs/src/__registry__\ndocs/static/docs\ndocs/static/llms.txt\ndocs/static/docs.md\n\nregistry-template/static/r\nrepro/src/lib/hooks\nrepro/src/lib/components/ui\n!repro/src/lib/components/ui/light-switch"
  },
  {
    "path": ".npmrc",
    "content": "engine-strict=true                  # https://pnpm.io/npmrc#engine-strict\nprefer-frozen-lockfile=false\nsupported-architecture-os=darwin,linux,win32\nsupported-architecture-cpu=x64,arm64"
  },
  {
    "path": ".nvmrc",
    "content": "v22.15.0"
  },
  {
    "path": ".prettierignore",
    "content": ".changeset\n.DS_Store\nnode_modules\n**/build\n**/.svelte-kit\n**/package\n**/dist\n.env\n.env.*\n!.env.example\n\n# Ignore files for PNPM, NPM and YARN\npnpm-lock.yaml\npackage-lock.json\nyarn.lock\nCHANGELOG.md\n\n.github/\nregistry-template\n\n# docs site specific\ndocs/other/themes/dark.json\ndocs/other/themes/light.json\ndocs/static\ndocs/.velite\ndocs/src/__registry__\npackages/cli/test/fixtures\nplaygrounds\nregistry-template/static\n.svelte-kit\ndocs/src/routes/og/*-otf.json\n**/__*__/**/*"
  },
  {
    "path": ".prettierrc",
    "content": "{\n\t\"useTabs\": true,\n\t\"tabWidth\": 4,\n\t\"singleQuote\": false,\n\t\"trailingComma\": \"es5\",\n\t\"printWidth\": 100,\n\t\"plugins\": [\"prettier-plugin-svelte\", \"prettier-plugin-tailwindcss\"],\n\t\"overrides\": [\n\t\t{\n\t\t\t\"files\": \"*.svelte\",\n\t\t\t\"options\": {\n\t\t\t\t\"parser\": \"svelte\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"files\": \"*.md\",\n\t\t\t\"options\": {\n\t\t\t\t\"tabWidth\": 2,\n\t\t\t\t\"useTabs\": false,\n\t\t\t\t\"printWidth\": 79\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"files\": \".github/**/*\",\n\t\t\t\"options\": {\n\t\t\t\t\"tabWidth\": 2,\n\t\t\t\t\"useTabs\": false\n\t\t\t}\n\t\t}\n\t],\n\t\"tailwindFunctions\": [\"clsx\", \"cn\", \"tv\"]\n}\n"
  },
  {
    "path": ".vscode/settings.json",
    "content": "{\n\t// Enable the ESlint flat config support\n\t\"eslint.useFlatConfig\": true,\n\n\t// Auto fix\n\t\"editor.codeActionsOnSave\": {\n\t\t\"source.fixAll.eslint\": \"explicit\",\n\t\t\"source.organizeImports\": \"never\",\n\t\t\"source.removeUnusedImports\": \"never\",\n\t\t\"source.removeUnused.ts\": \"never\"\n\t},\n\n\t// Enable eslint for all supported languages\n\t\"eslint.validate\": [\n\t\t\"javascript\",\n\t\t\"javascriptreact\",\n\t\t\"typescript\",\n\t\t\"typescriptreact\",\n\t\t\"vue\",\n\t\t\"svelte\",\n\t\t\"html\",\n\t\t\"markdown\",\n\t\t\"json\",\n\t\t\"jsonc\",\n\t\t\"yaml\",\n\t\t\"toml\",\n\t\t\"astro\"\n\t]\n}\n"
  },
  {
    "path": "CONTRIBUTING.md",
    "content": "# Contributing to shadcn-svelte\n\nWe appreciate your interest in contributing. This guide will help you get started with the contribution process.\n\n## Table of Contents\n\n- [Contributing to shadcn-svelte](#contributing-to-shadcn-svelte)\n  - [Table of Contents](#table-of-contents)\n  - [Ways to contribute](#ways-to-contribute)\n  - [How to contribute](#how-to-contribute)\n  - [Questions](#questions)\n  - [License](#license)\n\n## Ways to contribute\n\nWe welcome all kinds of contributions:\n\n- **Feedback** - have suggestions or ideas? [Open a discussion](https://github.com/huntabyte/shadcn-svelte/discussions) to discuss it. Just note that this project is a port of [shadcn/ui](https://github.com/shadcn/ui), meaning we won't be adding new components to this project unless they are added to `shadcn/ui` first.\n- **Help & Support** - if you enjoy helping others, join the [Discord](https://discord.gg/SRbSSrvXug) and help out in the `libs` -> `shadcn-support` channel, or answer questions asked in [Discussions](https://github.com/huntabyte/shadcn-svelte/discussions)\n- **Bug reports** - please [open an issue](https://github.com/huntabyte/shadcn-svelte/issues/new) to report a bug.\n- **Docs fixes** - spot a typo or broken link? Open a PR. If it's a larger change, please start a discussion first.\n- **Code improvements** - For anything more involved than a quick fix, start a discussion first so we can align before you dive in.\n\n## How to contribute\n\nWe try to keep the process simple to avoid wasted effort:\n\n1. **Open an issue** for bugs\n2. **Start a discussion** for feature ideas, improvements, or questions\n3. A maintainer will review and tag it (e.g. help wanted, under review, etc.)\n4. Want to work on something? Just comment on the thread or open a PR.\n\n**Quick fix?** For typos or small tweaks, feel free to skip the discussion and just open a PR.\n**Bigger change?** Open a discussion first so we can figure things out together.\n\n## Questions\n\nIf you're looking to contribute and have questions about the process or the codebase in general, feel free to ask in the [Discord](https://hbyt.us/discord) in the `libs`->`shadcn-chat` channel!\n\n## License\n\nBy contributing to this project, you agree that your contributions will be licensed under the [LICENSE](LICENSE.md) of the project.\n"
  },
  {
    "path": "LICENSE.md",
    "content": "MIT License\n\nCopyright (c) 2023 Hunter Johnston <https://github.com/huntabyte>\nCopyright (c) 2023 CokaKoala <https://github.com/adriangonz97>\nCopyright (c) 2023 shadcn\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "<p align=\"center\">\n <img align=\"center\" src=\"https://raw.githubusercontent.com/huntabyte/shadcn-svelte/main/docs/static/android-chrome-192x192.png\" height=\"96\" />\n <h1 align=\"center\">\n  shadcn-svelte\n </h1>\n</p>\n\n[![](https://dcbadge.vercel.app/api/server/fdXy3Sk8Gq?style=flat)](https://discord.gg/fdXy3Sk8Gq)\n\n[shadcn-svelte](https://www.shadcn-svelte.com/) is an unofficial community-led [Svelte](https://svelte.dev) port of [shadcn/ui](https://ui.shadcn.com/).\n\n> **Note** <br> **We are not affiliated with shadcn, but we did get his blessing prior to creating this project** <br> This is a project born out of the need for a similar project for the Svelte ecosystem.\n\nAccessible and customizable components that you can copy and paste into your apps. Free. Open Source. **Use this to build your own component library**.\n\n![hero](docs/static/opengraph-image.png)\n\n## Documentation\n\nVisit https://shadcn-svelte.com/docs to view the documentation.\n\n## Sponsors\n\nThis project is supported by the following beautiful people/organizations:\n\n<p align=\"center\">\n  <a href=\"https://github.com/sponsors/huntabyte\">\n    <img src='https://github.com/huntabyte/static/blob/main/sponsors.svg?raw=true' alt=\"Logos from Sponsors\" />\n  </a>\n</p>\n\n## License\n\n<!-- automd:contributors license=MIT author=\"huntabyte\" -->\n\nPublished under the [MIT](https://github.com/huntabyte/shadcn-svelte/blob/main/LICENSE.md) license.\nBuilt by [@huntabyte](https://github.com/huntabyte), [CokaKoala](https://github.com/adriangonz97),and [community](https://github.com/huntabyte/shadcn-svelte/graphs/contributors) 💛\n<br><br>\n<a href=\"https://github.com/huntabyte/shadcn-svelte/graphs/contributors\">\n<img src=\"https://contrib.rocks/image?repo=huntabyte/shadcn-svelte\" />\n</a>\n\n<!-- /automd -->\n\n## Community\n\nJoin the Discord server to ask questions, find collaborators, or just say hi!\n\n<a href=\"https://discord.gg/fdXy3Sk8Gq\" alt=\"Svecosystem Discord community\">\n<picture>\n  <source media=\"(prefers-color-scheme: dark)\" srcset=\"https://invidget.switchblade.xyz/fdXy3Sk8Gq\">\n  <img alt=\"Svecosystem Discord community\" src=\"https://invidget.switchblade.xyz/fdXy3Sk8Gq?theme=light\">\n</picture>\n</a>\n"
  },
  {
    "path": "docs/.gitignore",
    "content": "node_modules\n\n# Output\n.output\n.vercel\n.netlify\n.wrangler\n/.svelte-kit\n/build\n\n# OS\n.DS_Store\nThumbs.db\n\n# Env\n.env\n.env.*\n!.env.example\n!.env.test\n\n# Vite\nvite.config.js.timestamp-*\nvite.config.ts.timestamp-*\n"
  },
  {
    "path": "docs/.npmrc",
    "content": "engine-strict=true\n"
  },
  {
    "path": "docs/README.md",
    "content": "# shadcn-svelte docs\n"
  },
  {
    "path": "docs/_headers",
    "content": "/*\n  Access-Control-Allow-Origin: *\n  Access-Control-Allow-Methods: GET, OPTIONS\n  Access-Control-Allow-Headers: Content-Type, Authorization"
  },
  {
    "path": "docs/content/about.md",
    "content": "---\ntitle: About\ndescription: Powered by amazing open source projects.\n---\n\n## About\n\n[shadcn-svelte](https://github.com/huntabyte/shadcn-svelte) is a port of [shadcn/ui](https://ui.shadcn.com) for Svelte/SvelteKit. It's maintained by [Huntabyte](https://x.com/huntabyte), [CokaKoala](https://github.com/adriangonz97), and [Aidan Bleser](https://x.com/ieeeedan) and has received countless contributions from the community.\n\n## Credits\n\n- [shadcn](https://twitter.com/shadcn) - The brilliant mind behind the designs, methodology, and implementation of the original [shadcn/ui](https://ui.shadcn.com).\n- [Bits UI](https://bits-ui.com) - The headless components that power this project.\n- [Formsnap](https://formsnap.dev) - The form components that power this project.\n- [Paneforge](https://paneforge.com) - The resizable components that power this project.\n- [Vaul Svelte](https://vaul-svelte.com) - The drawer components that power this project.\n- [Radix UI](https://radix-ui.com) - The headless components and examples that the original [shadcn/ui](https://ui.shadcn.com) was built on.\n- [Shu Ding](https://shud.in) - The typography style is adapted from his work on Nextra.\n- [Cal](https://cal.com) - Where shad copied the styles for the first component: the `Button`.\n\n## License\n\nMIT © [shadcn](https://shadcn.com) & [huntabyte](https://twitter.com/huntabyte)\n"
  },
  {
    "path": "docs/content/changelog.md",
    "content": "---\ntitle: Changelog\ndescription: Latest updates and announcements.\n---\n\n<script>\n\timport Steps from '$lib/components/steps.svelte'\n\timport Callout from '$lib/components/callout.svelte'\n\timport ComponentPreview from '$lib/components/component-preview.svelte'\n</script>\n\n## October 2025 - New Components\nFor this round of components, I looked at what we build every day, the boring stuff we rebuild over and over, and made reusable abstractions you can actually use.\n\n- [Spinner](/docs/components/spinner): An indicator to show a loading state.\n- [Kbd](/docs/components/kbd): Display a keyboard key or group of keys.\n- [Button Group](/docs/components/button-group): A group of buttons for actions and split buttons.\n- [Input Group](/docs/components/input-group): Input with icons, buttons, labels and more.\n- [Field](/docs/components/field): One component. All your forms.\n- [Item](/docs/components/item): Display lists of items, cards, and more.\n- [Empty](/docs/components/empty): Use this one for empty states.\n\n---\n\n## June 2025\n\n### New Calendar Components\n\nWe've completely overhauled the `Calendar` and `RangeCalendar` components to support dropdowns for the month and year selectors, and have added 30+ Calendar blocks to help you get started building your own calendar components.\n\nCheck out the [Calendar](/docs/components/calendar) docs page and the [Calendar Blocks](/blocks/calendar) page for more.\n\n---\n\n## May 2025\n\n### Tailwind v4 Support\n\nTailwind v4 support has officially landed. You can see a full demo of the refreshed styles that come with it here: [https://v4.shadcn-svelte.com](https://v4.shadcn-svelte.com).\n\nThis release includes several key changes, all outlined in the [Tailwind v4 migration guide](/docs/migration/tailwind-v4). If you're still using Svelte v5 with Tailwind v3, your project and the CLI will continue to work as expected until you're ready to upgrade.\n\n### Charts\n\nCharts have been added as a preview component to the project. See the [Charts](/charts) page for examples.\n\nIf you're running Svelte v5 and Tailwind v4 you can add them to your project via the CLI.\n\n### Custom Registry Support\n\nWe've added support for custom/remote registries - This means you can publish your own components and share them with the community via the `shadcn-svelte` CLI.\n\nSee the [Registry documentation](/docs/registry) for more information.\n\n---\n\n## March 2024\n\n### Introducing Blocks\n\n[Blocks](/blocks) are ready-made components that you can use to build your apps. They are fully responsive, accessible, and composable, meaning they are built using the same principles as the rest of the components in shadcn-svelte.\n\n[v0](https://v0.dev) only supports React at the moment, so you can't customize them like you can the original from [shadcn/ui](https://ui.shadcn.com). However, if having support for Svelte interests you, I'm sure the v0 team would love to hear about it. :)\n\n### New Component: Breadcrumb\n\nWe've added a new component to the project, [Breadcrumb](/docs/components/breadcrumb).\n\n### New Component: Scroll Area\n\nWe've added a new component to the project, [Scroll Area](/docs/components/scroll-area), which is built on top of the [Scroll Area](https://bits-ui.com/docs/components/scroll-area) component from Bits UI.\n\nIt supports both vertical and horizontal scrolling, and is designed to provide a consistent experience across all browsers and platforms.\n\n## February 2024\n\n### New Component: Resizable\n\nWe've added a new component to the project, [Resizable](/docs/components/resizable), which is built on top of [PaneForge](https://paneforge.com). PaneForge is still in an early stage, so be sure to raise any issues you find with the library on the [PaneForge GitHub](https://github.com/svecosystem/paneforge).\n\n\n### Updated Icon Imports\n\nAfter some feedback about dev server performance, we've updated the way we import icons. With this change, we've decided to move away from the unmaintained `radix-icons-svelte` package to [svelte-radix](https://github.com/shinokada/svelte-radix) for the `new-york` style.\n\nInstead of importing icons like so:\n\n```ts\nimport { Check } from \"@lucide/svelte\";\n```\n\nWe now import them directly:\n\n```ts\nimport Check from \"@lucide/svelte/icons/check\";\n```\n\nWith deep imports, we're preventing Vite from optimizing the entire icon collections, and instead only optimizing the icons that are actually used in your project. From what we've seen, this has a massive impact on dev server performance. Enjoy! 🚀\n\n### Major Forms Update\n\nFormsnap has been completely rewritten to be more flexible, easier to use, and less opinionated. This means we've had to make some changes to the way we use it in `shadcn-svelte`, but once you get the hang of it, you'll find it's much more powerful and less restrictive than the previous iteration.\n\nSince the changes are so significant, there isn't a direct migration path from the old version to the new version. You'll need to update your components to use the new API, as well as ensure you're using the latest version of `formsnap` and `sveltekit-superforms`.\n\nAll of the `Form` components have been updated to use the new API, and you can see live examples of them on the [Forms Examples](/examples/forms) page.\n\nVisit the [Formsnap](https://formsnap.dev) documentation (which has also been updated) to learn more about the new API and how its used.\n\n## January 2024\n\nWe've added four new components to the project, [Carousel](/docs/components/carousel), [Drawer](/docs/components/drawer), [Sonner](/docs/components/sonner), & [Pagination](/docs/components/pagination).\n\n### New Component: Carousel\n\nWe've added a new component to the project, [Carousel](/docs/components/carousel).\n\n<ComponentPreview name=\"carousel-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n### New Component: Drawer\n\nThe Drawer is built on top of [vaul-svelte](https://vaul-svelte.com) and is a port of [vaul](https://vaul.emilkowalski.ski/), originally created by [Emil Kowalski](https://twitter.com/emilkowalski_) for React.\n\n<ComponentPreview name=\"drawer-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n### New Component: Sonner\n\nThe Sonner component is provided by [svelte-sonner](https://svelte-sonner.vercel.app/), which is a Svelte port of [Sonner](https://sonner.emilkowal.ski/), originally created by [Emil Kowalski](https://twitter.com/emilkowalski_) for React.\n\n<ComponentPreview name=\"sonner-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n### New Component: Pagination\n\nPagination leverages the [Pagination](https://bits-ui.com/docs/components/pagination) component from Bits UI.\n\n## December 2023\n\nWe've added three new components to the project, [Calendar](/docs/components/calendar), [Range Calendar](/docs/components/range-calendar), & [Date Picker](/docs/components/date-picker).\n\n\n## November 2023\n\n### New Component: Toggle Group\n\nWe've added a new component to the library, [Toggle Group](/docs/components/toggle-group).\n\n## October 2023\n\nWe've added two new components to the library, [Command](/docs/components/command) & [Combobox](/docs/components/combobox). We've also made some updates to the `<Form.Label />` component that you'll want to be aware of.\n\n### New Component: Command\n\nCommand is a component that allows you to create a command palette. It's built on top of [cmdk-sv](https://cmdk-sv.com), which is a Svelte port of [cmdk](https://cmdk.paco.me). The library is still in its infancy, but we're excited to see where it goes. If you notice any issues, please [open an issue](https://github.com/huntabyte/cmdk-sv) with the library.\n\nBe sure to check out the [Command](/docs/components/command) docs for more information.\n\n### New Component: Combobox\n\nCombobox is a combination of the `<Command />` & `<Popover />` components. It allows you to create a searchable dropdown menu.\n\nBe sure to check out the [Combobox](/docs/components/combobox) docs for more information.\n\n### Updates to Form\n\n#### Form.Label Changes\n\nSince we had to make some internal changes to formsnap to fix outstanding issues, there is a slight modification we have to make to the `<Form.Label />` component. The `ids` returned from `getFormField()` is now a store, so we need to prefix it with `$` when we use it.\n\n```svelte title=\"form-label.svelte\" {2}\n<Label\n  for={$ids.input}\n  class={cn($errors && \"text-destructive\", className)}\n  {...$$restProps}\n>\n  <slot />\n</Label>\n```\n\n### Form.Control\n\nFormsnap introduced a new component `<Form.Control />` which wraps non-traditional form elements. This allows us to ensure the components are accessible, and work well with the rest of the form components. You'll need to define & export that control in your `form/index.ts` file.\n\n```ts title=\"src/lib/ui/form/index.ts\"\n// ...rest\nconst Control = FormPrimitive.Control;\n\nexport {\n  // ...rest\n  Control,\n  Control as FormControl,\n};\n```\n"
  },
  {
    "path": "docs/content/cli.md",
    "content": "---\ntitle: shadcn-svelte\ndescription: Use the shadcn-svelte CLI to add components to your project.\n---\n\n<script>\n\timport PMExecute from \"$lib/components/pm-execute.svelte\";\n</script>\n\n## init\n\nUse the `init` command to initialize dependencies for a new project.\n\nThe `init` command installs dependencies, adds the `cn` util, and creates CSS variables for the project.\n\n<PMExecute command=\"shadcn-svelte@latest init\" />\n\nYou will be asked a few questions to configure `components.json`:\n\n```txt showLineNumbers\nWhich base color would you like to use? › Slate\nWhere is your global CSS file? (this file will be overwritten) › src/routes/layout.css\nConfigure the import alias for lib: › $lib\nConfigure the import alias for components: › $lib/components\nConfigure the import alias for utils: › $lib/utils\nConfigure the import alias for hooks: › $lib/hooks\nConfigure the import alias for ui: › $lib/components/ui\n```\n\n**Options**\n\n```bash\nUsage: shadcn-svelte init [options]\n\ninitialize your project and install dependencies\n\nOptions:\n  -c, --cwd <path>           the working directory (default: the current directory)\n  -o, --overwrite            overwrite existing files (default: false)\n  --no-deps                  disable adding & installing dependencies\n  --skip-preflight           ignore preflight checks and continue (default: false)\n  --base-color <name>        the base color for the components (choices: \"slate\", \"gray\", \"zinc\",\n                             \"neutral\", \"stone\")\n  --css <path>               path to the global CSS file\n  --components-alias <path>  import alias for components\n  --lib-alias <path>         import alias for lib\n  --utils-alias <path>       import alias for utils\n  --hooks-alias <path>       import alias for hooks\n  --ui-alias <path>          import alias for ui\n  --proxy <proxy>            fetch items from registry using a proxy\n  -h, --help                 display help for command\n```\n\n---\n\n## add\n\nUse the `add` command to add components and dependencies to your project.\n\n<PMExecute command=\"shadcn-svelte@latest add [component]\" />\n\n**Options**\n\n```bash\nUsage: shadcn-svelte add [options] [components...]\n\nadd components to your project\n\nArguments:\n  components         the components to add or a url to the component\n\nOptions:\n  -c, --cwd <path>   the working directory (default: the current directory)\n  --no-deps         skips adding & installing package dependencies\n  --skip-preflight  ignore preflight checks and continue (default: false)\n  -a, --all         install all components to your project (default: false)\n  -y, --yes         skip confirmation prompt (default: false)\n  -o, --overwrite   overwrite existing files (default: false)\n  --proxy <proxy>   fetch components from registry using a proxy\n  -h, --help        display help for command\n```\n\n---\n\n## registry build\n\nUse the `registry build` command to generate the registry JSON files.\n\n<PMExecute command=\"shadcn-svelte@latest registry build [registry.json]\" />\n\nThis command reads the `registry.json` file and generates the registry JSON files into the `static/r` directory.\n\n**Options**\n\n```bash\nUsage: shadcn-svelte registry build [options] [registry]\n\nbuild components for a shadcn-svelte registry\n\nArguments:\n  registry             path to registry.json file (default: ./registry.json)\n\nOptions:\n  -c, --cwd <path>     the working directory (default: the current directory)\n  -o, --output <path>  destination directory for json files (default: ./static/r)\n  -h, --help           display help for command\n```\n\n---\n\n## Outgoing Requests\n\n### Proxy\n\nThis enables the use of a proxy when sending out requests to fetch from the `shadcn-svelte` registry. If the `HTTP_PROXY` or `http_proxy` environment variables have been set, the request library underneath will respect the proxy settings.\n\n```bash\nHTTP_PROXY=\"<proxy-url>\" npx shadcn-svelte@latest init\n```\n"
  },
  {
    "path": "docs/content/components/accordion.md",
    "content": "---\ntitle: Accordion\ndescription: A vertically stacked set of interactive headings that each reveal a section of content.\ncomponent: true\nlinks:\n  source: https://github.com/huntabyte/shadcn-svelte/tree/next/sites/docs/src/lib/registry/ui/accordion\n  doc: https://bits-ui.com/docs/components/accordion\n  api: https://bits-ui.com/docs/components/accordion#api-reference\n---\n\n<script>\n\timport ComponentPreview from \"$lib/components/component-preview.svelte\";\n\timport ComponentSource from \"$lib/components/component-source.svelte\";\n\timport PMAddComp from \"$lib/components/pm-add-comp.svelte\";\n\timport PMInstall from \"$lib/components/pm-install.svelte\";\n\timport Steps from \"$lib/components/steps.svelte\";\n\timport InstallTabs from \"$lib/components/install-tabs.svelte\";\n\timport Step from \"$lib/components/step.svelte\";\n\n\tlet { viewerData } = $props();\n\n</script>\n\n<ComponentPreview name=\"accordion-demo\" class=\"[&_.preview>[data-orientation=vertical]]:sm:max-w-[80%] **:[.preview]:min-h-[400px]\" description=\"An accordion with three items\" align=\"start\">\n\n<div></div>\n\n</ComponentPreview>\n\n## Installation\n\n<InstallTabs>\n\n{#snippet cli()}\n\n<PMAddComp name=\"accordion\" />\n\n{/snippet}\n\n{#snippet manual()}\n\n<Steps>\n\n<Step>\n\nInstall `bits-ui`\n\n</Step>\n\n<PMInstall command=\"bits-ui\" />\n\n<Step>\n\nCopy and paste the following code into your project.\n\n</Step>\n\n{#if viewerData}\n<ComponentSource item={viewerData} data-llm-ignore/>\n{/if}\n\n</Steps>\n\n{/snippet}\n\n</InstallTabs>\n\n## Usage\n\n```svelte showLineNumbers\n<script lang=\"ts\">\n  import * as Accordion from \"$lib/components/ui/accordion/index.js\";\n</script>\n```\n\n```svelte showLineNumbers\n<Accordion.Root type=\"single\">\n  <Accordion.Item value=\"item-1\">\n    <Accordion.Trigger>Is it accessible?</Accordion.Trigger>\n    <Accordion.Content>\n      Yes. It adheres to the WAI-ARIA design pattern.\n    </Accordion.Content>\n  </Accordion.Item>\n</Accordion.Root>\n```\n"
  },
  {
    "path": "docs/content/components/alert-dialog.md",
    "content": "---\ntitle: Alert Dialog\ndescription: A modal dialog that interrupts the user with important content and expects a response.\ncomponent: true\nlinks:\n  source: https://github.com/huntabyte/shadcn-svelte/tree/next/sites/docs/src/lib/registry/ui/alert-dialog\n  doc: https://bits-ui.com/docs/components/alert-dialog\n  api: https://bits-ui.com/docs/components/alert-dialog#api-reference\n---\n\n<script>\n\timport ComponentPreview from \"$lib/components/component-preview.svelte\";\n\timport ComponentSource from \"$lib/components/component-source.svelte\";\n\timport PMAddComp from \"$lib/components/pm-add-comp.svelte\";\n\timport PMInstall from \"$lib/components/pm-install.svelte\";\n\timport Steps from \"$lib/components/steps.svelte\";\n\timport InstallTabs from \"$lib/components/install-tabs.svelte\";\n\n\tlet { viewerData } = $props();\n\timport Step from \"$lib/components/step.svelte\";\n</script>\n\n<ComponentPreview name=\"alert-dialog-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n## Installation\n\n<InstallTabs>\n{#snippet cli()}\n<PMAddComp name=\"alert-dialog\" />\n{/snippet}\n{#snippet manual()}\n<Steps>\n\n<Step>\n\nInstall `bits-ui`:\n\n</Step>\n\n<PMInstall command=\"bits-ui -D\" />\n\n<Step>\n\nCopy and paste the following code into your project.\n\n</Step>\n{#if viewerData}\n\t<ComponentSource item={viewerData} data-llm-ignore/>\n{/if}\n\n</Steps>\n{/snippet}\n</InstallTabs>\n\n## Usage\n\n```svelte showLineNumbersw\n<script lang=\"ts\">\n  import * as AlertDialog from \"$lib/components/ui/alert-dialog/index.js\";\n</script>\n```\n\n```svelte showLineNumbers\n<AlertDialog.Root>\n  <AlertDialog.Trigger>Open</AlertDialog.Trigger>\n  <AlertDialog.Content>\n    <AlertDialog.Header>\n      <AlertDialog.Title>Are you absolutely sure?</AlertDialog.Title>\n      <AlertDialog.Description>\n        This action cannot be undone. This will permanently delete your account\n        and remove your data from our servers.\n      </AlertDialog.Description>\n    </AlertDialog.Header>\n    <AlertDialog.Footer>\n      <AlertDialog.Cancel>Cancel</AlertDialog.Cancel>\n      <AlertDialog.Action>Continue</AlertDialog.Action>\n    </AlertDialog.Footer>\n  </AlertDialog.Content>\n</AlertDialog.Root>\n```\n"
  },
  {
    "path": "docs/content/components/alert.md",
    "content": "---\ntitle: Alert\ndescription: Displays a callout for user attention.\ncomponent: true\nlinks:\n  source: https://github.com/huntabyte/shadcn-svelte/tree/next/sites/docs/src/lib/registry/ui/alert\n---\n\n<script>\n\timport ComponentPreview from \"$lib/components/component-preview.svelte\";\n\timport ComponentSource from \"$lib/components/component-source.svelte\";\n\timport PMAddComp from \"$lib/components/pm-add-comp.svelte\";\n\timport PMInstall from \"$lib/components/pm-install.svelte\";\n\timport Steps from \"$lib/components/steps.svelte\";\n\timport InstallTabs from \"$lib/components/install-tabs.svelte\";\n\n\tlet { viewerData } = $props();\n\timport Step from \"$lib/components/step.svelte\";\n</script>\n\n<ComponentPreview name=\"alert-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n## Installation\n\n<InstallTabs>\n{#snippet cli()}\n<PMAddComp name=\"alert\" />\n{/snippet}\n{#snippet manual()}\n<Steps>\n\n<Step>\n\nCopy and paste the following code into your project.\n\n</Step>\n{#if viewerData}\n\t<ComponentSource item={viewerData} data-llm-ignore/>\n{/if}\n\n</Steps>\n{/snippet}\n</InstallTabs>\n\n## Usage\n\n```svelte showLineNumbers\n<script lang=\"ts\">\n  import * as Alert from \"$lib/components/ui/alert/index.js\";\n</script>\n```\n\n```svelte showLineNumbers\n<Alert.Root>\n  <Alert.Title>Heads up!</Alert.Title>\n  <Alert.Description>\n    You can add components to your app using the cli.\n  </Alert.Description>\n</Alert.Root>\n```\n"
  },
  {
    "path": "docs/content/components/aspect-ratio.md",
    "content": "---\ntitle: Aspect Ratio\ndescription: Displays content within a desired ratio.\ncomponent: true\nlinks:\n  source: https://github.com/huntabyte/shadcn-svelte/tree/next/sites/docs/src/lib/registry/ui/aspect-ratio\n  doc: https://bits-ui.com/docs/components/aspect-ratio\n  api: https://bits-ui.com/docs/components/aspect-ratio#api-reference\n---\n\n<script>\n\timport ComponentPreview from \"$lib/components/component-preview.svelte\";\n\timport ComponentSource from \"$lib/components/component-source.svelte\";\n\timport PMAddComp from \"$lib/components/pm-add-comp.svelte\";\n\timport PMInstall from \"$lib/components/pm-install.svelte\";\n\timport Steps from \"$lib/components/steps.svelte\";\n\timport InstallTabs from \"$lib/components/install-tabs.svelte\";\n\n\tlet { viewerData } = $props();\n\timport Step from \"$lib/components/step.svelte\";\n</script>\n\n<ComponentPreview name=\"aspect-ratio-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n## Installation\n\n<InstallTabs>\n{#snippet cli()}\n<PMAddComp name=\"aspect-ratio\" />\n{/snippet}\n{#snippet manual()}\n<Steps>\n\n<Step>\n\nInstall `bits-ui`:\n\n</Step>\n\n<PMInstall command=\"bits-ui -D\" />\n\n<Step>\n\nCopy and paste the following code into your project.\n\n</Step>\n{#if viewerData}\n\t<ComponentSource item={viewerData} data-llm-ignore/>\n{/if}\n\n</Steps>\n{/snippet}\n</InstallTabs>\n\n## Usage\n\n```svelte showLineNumbers\n<script lang=\"ts\">\n  import { AspectRatio } from \"$lib/components/ui/aspect-ratio/index.js\";\n</script>\n```\n\n```svelte showLineNumbers\n<div class=\"w-[450px]\">\n  <AspectRatio ratio={16 / 9} class=\"bg-muted\">\n    <img src=\"...\" alt=\"...\" class=\"rounded-md object-cover\" />\n  </AspectRatio>\n</div>\n```\n"
  },
  {
    "path": "docs/content/components/avatar.md",
    "content": "---\ntitle: Avatar\ndescription: An image element with a fallback for representing the user.\ncomponent: true\nlinks:\n  source: https://github.com/huntabyte/shadcn-svelte/tree/next/sites/docs/src/lib/registry/ui/avatar\n  doc: https://bits-ui.com/docs/components/avatar\n  api: https://bits-ui.com/docs/components/avatar#api-reference\n---\n\n<script>\n\timport ComponentPreview from \"$lib/components/component-preview.svelte\";\n\timport ComponentSource from \"$lib/components/component-source.svelte\";\n\timport PMAddComp from \"$lib/components/pm-add-comp.svelte\";\n\timport PMInstall from \"$lib/components/pm-install.svelte\";\n\timport Steps from \"$lib/components/steps.svelte\";\n\timport InstallTabs from \"$lib/components/install-tabs.svelte\";\n\n\tlet { viewerData } = $props();\n\timport Step from \"$lib/components/step.svelte\";\n</script>\n\n<ComponentPreview name=\"avatar-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n## Installation\n\n<InstallTabs>\n{#snippet cli()}\n<PMAddComp name=\"avatar\" />\n{/snippet}\n{#snippet manual()}\n<Steps>\n\n<Step>\n\nInstall `bits-ui`:\n\n</Step>\n\n<PMInstall command=\"bits-ui -D\" />\n\n<Step>\n\nCopy and paste the following code into your project.\n\n</Step>\n{#if viewerData}\n\t<ComponentSource item={viewerData} data-llm-ignore/>\n{/if}\n\n</Steps>\n{/snippet}\n</InstallTabs>\n\n## Usage\n\n```svelte showLineNumbers\n<script lang=\"ts\">\n  import * as Avatar from \"$lib/components/ui/avatar/index.js\";\n</script>\n```\n\n```svelte showLineNumbers\n<Avatar.Root>\n  <Avatar.Image src=\"https://github.com/shadcn.png\" alt=\"@shadcn\" />\n  <Avatar.Fallback>CN</Avatar.Fallback>\n</Avatar.Root>\n```\n"
  },
  {
    "path": "docs/content/components/badge.md",
    "content": "---\ntitle: Badge\ndescription: Displays a badge or a component that looks like a badge.\nlinks:\n  source: https://github.com/huntabyte/shadcn-svelte/tree/next/sites/docs/src/lib/registry/ui/badge\n---\n\n<script>\n\timport ComponentPreview from \"$lib/components/component-preview.svelte\";\n\timport ComponentSource from \"$lib/components/component-source.svelte\";\n\timport PMAddComp from \"$lib/components/pm-add-comp.svelte\";\n\timport PMInstall from \"$lib/components/pm-install.svelte\";\n\timport Steps from \"$lib/components/steps.svelte\";\n\timport Step from \"$lib/components/step.svelte\";\n\timport InstallTabs from \"$lib/components/install-tabs.svelte\";\n\n\tlet { viewerData } = $props();\n</script>\n\n<ComponentPreview name=\"badge-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n## Installation\n\n<InstallTabs>\n{#snippet cli()}\n<PMAddComp name=\"badge\" />\n{/snippet}\n{#snippet manual()}\n<Steps>\n\n<Step>\n\nCopy and paste the following code into your project.\n\n</Step>\n{#if viewerData}\n\t<ComponentSource item={viewerData} data-llm-ignore/>\n{/if}\n\n</Steps>\n{/snippet}\n</InstallTabs>\n\n## Usage\n\n```svelte\n<script lang=\"ts\">\n  import { Badge } from \"$lib/components/ui/badge/index.js\";\n</script>\n```\n\n```svelte\n<Badge variant=\"outline\">Badge</Badge>\n```\n\n### Link\n\nYou can use the `badgeVariants` helper to create a link that looks like a badge.\n\n```svelte\n<script lang=\"ts\">\n  import { badgeVariants } from \"$lib/components/ui/badge/index.js\";\n</script>\n\n<a href=\"/dashboard\" class={badgeVariants({ variant: \"outline\" })}>Badge</a>\n```\n"
  },
  {
    "path": "docs/content/components/breadcrumb.md",
    "content": "---\ntitle: Breadcrumb\ndescription: Displays the path to the current resource using a hierarchy of links.\ncomponent: true\nlinks:\n  source: https://github.com/huntabyte/shadcn-svelte/tree/next/sites/docs/src/lib/registry/ui/breadcrumb\n---\n\n<script>\n\timport ComponentPreview from \"$lib/components/component-preview.svelte\";\n\timport ComponentSource from \"$lib/components/component-source.svelte\";\n\timport PMAddComp from \"$lib/components/pm-add-comp.svelte\";\n\timport PMInstall from \"$lib/components/pm-install.svelte\";\n\timport Steps from \"$lib/components/steps.svelte\";\n\timport Step from \"$lib/components/step.svelte\";\n\timport InstallTabs from \"$lib/components/install-tabs.svelte\";\n\n\tlet { viewerData } = $props();\n</script>\n\n<ComponentPreview name=\"breadcrumb-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n## Installation\n\n<InstallTabs>\n{#snippet cli()}\n<PMAddComp name=\"breadcrumb\" />\n{/snippet}\n{#snippet manual()}\n<Steps>\n\n<Step>\n\nCopy and paste the following code into your project.\n\n</Step>\n{#if viewerData}\n\t<ComponentSource item={viewerData} data-llm-ignore/>\n{/if}\n\n</Steps>\n{/snippet}\n</InstallTabs>\n\n## Usage\n\n```svelte showLineNumbers\n<script lang=\"ts\">\n  import * as Breadcrumb from \"$lib/components/ui/breadcrumb/index.js\";\n</script>\n```\n\n```svelte showLineNumbers\n<Breadcrumb.Root>\n  <Breadcrumb.List>\n    <Breadcrumb.Item>\n      <Breadcrumb.Link href=\"/\">Home</Breadcrumb.Link>\n    </Breadcrumb.Item>\n    <Breadcrumb.Separator />\n    <Breadcrumb.Item>\n      <Breadcrumb.Link href=\"/components\">Components</Breadcrumb.Link>\n    </Breadcrumb.Item>\n    <Breadcrumb.Separator />\n    <Breadcrumb.Item>\n      <Breadcrumb.Page>Breadcrumb</Breadcrumb.Page>\n    </Breadcrumb.Item>\n  </Breadcrumb.List>\n</Breadcrumb.Root>\n```\n\n## Examples\n\n### Custom separator\n\nUse a custom component in the `<slot>` of `<Breadcrumb.Separator />` to create a custom separator.\n\n<ComponentPreview name=\"breadcrumb-separator\">\n\n<div></div>\n\n</ComponentPreview>\n\n```svelte showLineNumbers {2,11-13}\n<script lang=\"ts\">\n  import SlashIcon from \"@lucide/svelte/icons/slash\";\n  import * as Breadcrumb from \"$lib/components/ui/breadcrumb/index.js\";\n</script>\n\n<Breadcrumb.Root>\n  <Breadcrumb.List>\n    <Breadcrumb.Item>\n      <Breadcrumb.Link href=\"/\">Home</Breadcrumb.Link>\n    </Breadcrumb.Item>\n    <Breadcrumb.Separator>\n      <SlashIcon />\n    </Breadcrumb.Separator>\n    <Breadcrumb.Item>\n      <Breadcrumb.Link href=\"/components\">Components</Breadcrumb.Link>\n    </Breadcrumb.Item>\n  </Breadcrumb.List>\n</Breadcrumb.Root>\n```\n\n---\n\n### Dropdown\n\nYou can compose `<Breadcrumb.Item />` with a `<DropdownMenu />` to create a dropdown in the breadcrumb.\n\n<ComponentPreview name=\"breadcrumb-dropdown\">\n\n<div></div>\n\n</ComponentPreview>\n\n```svelte showLineNumbers {2-5,11-22}\n<script lang=\"ts\">\n  import ChevronDownIcon from \"@lucide/svelte/icons/chevron-down\";\n  import SlashIcon from \"@lucide/svelte/icons/slash\";\n  import * as Breadcrumb from \"$lib/components/ui/breadcrumb/index.js\";\n  import * as DropdownMenu from \"$lib/components/ui/dropdown-menu/index.js\";\n</script>\n\n<!-- ... -->\n\n<Breadcrumb.Item>\n  <DropdownMenu.Root>\n    <DropdownMenu.Trigger class=\"flex items-center gap-1\">\n      Components\n      <ChevronDownIcon class=\"size-4\" />\n    </DropdownMenu.Trigger>\n    <DropdownMenu.Content align=\"start\">\n      <DropdownMenu.Item>Documentation</DropdownMenu.Item>\n      <DropdownMenu.Item>Themes</DropdownMenu.Item>\n      <DropdownMenu.Item>GitHub</DropdownMenu.Item>\n    </DropdownMenu.Content>\n  </DropdownMenu.Root>\n</Breadcrumb.Item>\n```\n\n---\n\n### Collapsed\n\nWe provide a `<Breadcrumb.Ellipsis />` component to show a collapsed state when the breadcrumb is too long.\n\n<ComponentPreview name=\"breadcrumb-ellipsis\">\n\n<div></div>\n\n</ComponentPreview>\n\n```svelte showLineNumbers {2,9}\n<script lang=\"ts\">\n import * as Breadcrumb from \"$lib/components/ui/breadcrumb/index.js\";\n</script>\n\n<Breadcrumb.Root>\n <Breadcrumb.List>\n     {/* ... */}\n  <Breadcrumb.Item>\n   <Breadcrumb.Ellipsis />\n  </Breadcrumb.Item>\n    {/* ... */}\n </Breadcrumb.List>\n</Breadcrumb.Root>\n```\n\n---\n\n### Link component\n\nTo use a link just add the `href` prop to `<Breadcrumb.Link />`.\n\n<ComponentPreview name=\"breadcrumb-link\">\n\n<div></div>\n\n</ComponentPreview>\n\n```svelte showLineNumbers {2,7-9}\n<script lang=\"ts\">\n import * as Breadcrumb from \"$lib/components/ui/breadcrumb/index.js\";\n</script>\n\n<Breadcrumb.Root>\n <Breadcrumb.List>\n  <Breadcrumb.Item>\n   <Breadcrumb.Link href=\"/\">Home</Breadcrumb.Link>\n  </Breadcrumb.Item>\n    {/* ... */}\n </Breadcrumb.List>\n</Breadcrumb.Root>\n```\n\n---\n\n### Responsive\n\nHere's an example of a responsive breadcrumb that composes `<Breadcrumb.Item />` with `<Breadcrumb.Ellipsis />`, `<DropdownMenu />`, and `<Drawer />`.\n\nIt displays a dropdown on desktop and a drawer on mobile.\n\n<ComponentPreview name=\"breadcrumb-responsive\">\n\n<div></div>\n\n</ComponentPreview>\n"
  },
  {
    "path": "docs/content/components/button-group.md",
    "content": "---\ntitle: Button Group\ndescription: A container that groups related buttons together with consistent styling.\ncomponent: true\nlinks:\n  source: https://github.com/huntabyte/shadcn-svelte/tree/next/sites/docs/src/lib/registry/ui/button-group\n---\n\n<script>\n\timport ComponentPreview from \"$lib/components/component-preview.svelte\";\n\timport ComponentSource from \"$lib/components/component-source.svelte\";\n\timport PMAddComp from \"$lib/components/pm-add-comp.svelte\";\n\timport PMInstall from \"$lib/components/pm-install.svelte\";\n\timport Steps from \"$lib/components/steps.svelte\";\n\timport InstallTabs from \"$lib/components/install-tabs.svelte\";\n\n\tlet { viewerData } = $props();\n\timport Step from \"$lib/components/step.svelte\";\n</script>\n\n<ComponentPreview name=\"button-group-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n## Installation\n\n<InstallTabs>\n{#snippet cli()}\n<PMAddComp name=\"button-group\" />\n{/snippet}\n{#snippet manual()}\n<Steps>\n\n<Step>\n\nCopy and paste the following code into your project.\n\n</Step>\n{#if viewerData}\n\t<ComponentSource item={viewerData} data-llm-ignore/>\n{/if}\n\n</Steps>\n{/snippet}\n</InstallTabs>\n\n## Usage\n\n```svelte\n<script lang=\"ts\">\n  import * as ButtonGroup from \"$lib/components/ui/button-group/index.js\";\n</script>\n```\n\n```svelte\n<ButtonGroup.Root>\n  <Button>Button 1</Button>\n  <Button>Button 2</Button>\n</ButtonGroup.Root>\n```\n\n## Accessibility\n\n- The `ButtonGroup` component has the `role` attribute set to `group`.\n- Use `tabindex` to navigate between the buttons in the group.\n- Use `aria-label` or `aria-labelledby` to label the button group.\n\n```svelte showLineNumbers\n<ButtonGroup aria-label=\"Button group\">\n  <Button>Button 1</Button>\n  <Button>Button 2</Button>\n</ButtonGroup>\n```\n\n## ButtonGroup vs ToggleGroup\n\n- Use the `ButtonGroup` component when you want to group buttons that perform an action.\n- Use the `ToggleGroup` component when you want to group buttons that toggle a state.\n\n## Examples\n\n### Orientation\n\nSet the `orientation` prop to change the button group layout.\n\n<ComponentPreview name=\"button-group-orientation-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n### Size\n\nControl the size of buttons using the `size` prop on individual buttons.\n\n<ComponentPreview name=\"button-group-size-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n### Nested\n\nNest `ButtonGroup` components to create button groups with spacing.\n\n<ComponentPreview name=\"button-group-nested-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n### Separator\n\nThe `ButtonGroupSeparator` component visually divides buttons within a group.\n\nButtons with variant `outline` do not need a separator since they have a border. For other variants, a separator is recommended to improve the visual hierarchy.\n\n<ComponentPreview name=\"button-group-separator-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n### Split\n\nCreate a split button group by adding two buttons separated by a `ButtonGroupSeparator`.\n\n<ComponentPreview name=\"button-group-split-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n### Input\n\nWrap an `Input` component with buttons.\n\n<ComponentPreview name=\"button-group-input-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n### Input Group\n\nWrap an `InputGroup` component to create complex input layouts.\n\n<ComponentPreview name=\"button-group-input-group-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n### Dropdown Menu\n\nCreate a split button group with a `DropdownMenu` component.\n\n<ComponentPreview name=\"button-group-dropdown-menu-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n### Select\n\nPair with a `Select` component.\n\n<ComponentPreview name=\"button-group-select-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n### Popover\n\nUse with a `Popover` component.\n\n<ComponentPreview name=\"button-group-popover-demo\">\n\n<div></div>\n\n</ComponentPreview>\n"
  },
  {
    "path": "docs/content/components/button.md",
    "content": "---\ntitle: Button\ndescription: Displays a button or a component that looks like a button.\ncomponent: true\nlinks:\n  source: https://github.com/huntabyte/shadcn-svelte/tree/next/sites/docs/src/lib/registry/ui/button\n  api: https://bits-ui.com/docs/components/button#api-reference\n---\n\n<script>\n  import Callout from \"$lib/components/callout.svelte\";\n  import InfoIcon from \"@lucide/svelte/icons/info\";\n\timport ComponentPreview from \"$lib/components/component-preview.svelte\";\n\timport ComponentSource from \"$lib/components/component-source.svelte\";\n\timport PMAddComp from \"$lib/components/pm-add-comp.svelte\";\n\timport PMInstall from \"$lib/components/pm-install.svelte\";\n\timport Steps from \"$lib/components/steps.svelte\";\n\timport InstallTabs from \"$lib/components/install-tabs.svelte\";\n\timport Step from \"$lib/components/step.svelte\";\n\n\tlet { viewerData, links } = $props();\n</script>\n\n<Callout variant=\"info\" icon={InfoIcon}>\n\n**Updated:** We have updated the button component to add new sizes: `icon-sm` and `icon-lg`. See the\n[changelog](/docs/components/button#changelog) for more details. Follow the\ninstructions to update your project.\n\n</Callout>\n\n<ComponentPreview name=\"button-demo\" class=\"mb-4\">\n\n<div></div>\n\n</ComponentPreview>\n\n```svelte showLineNumbers\n<Button variant=\"outline\">Button</Button>\n<Button variant=\"outline\" size=\"icon\" aria-label=\"Submit\">\n  <ArrowUpIcon />\n</Button>\n```\n\n## Installation\n\n<InstallTabs>\n{#snippet cli()}\n<PMAddComp name=\"button\" />\n{/snippet}\n{#snippet manual()}\n<Steps>\n\n<Step>\n\nCopy and paste the following code into your project.\n\n</Step>\n{#if viewerData}\n\t<ComponentSource item={viewerData} data-llm-ignore/>\n{/if}\n\n</Steps>\n{/snippet}\n</InstallTabs>\n\n## Usage\n\n```svelte\n<script lang=\"ts\">\n  import { Button } from \"$lib/components/ui/button/index.js\";\n</script>\n\n<Button variant=\"outline\">Button</Button>\n```\n\n## Examples\n\n### Size\n\n<ComponentPreview name=\"button-size\" class=\"mb-4\" >\n\n<div></div>\n\n</ComponentPreview>\n\n```svelte\n<!-- Small -->\n<Button size=\"sm\" variant=\"outline\">Small</Button>\n<Button size=\"icon-sm\" aria-label=\"Submit\" variant=\"outline\">\n  <ArrowUpRightIcon />\n</Button>\n\n<!-- Medium -->\n<Button variant=\"outline\">Default</Button>\n<Button size=\"icon\" aria-label=\"Submit\" variant=\"outline\">\n  <ArrowUpRightIcon />\n</Button>\n\n<!-- Large -->\n<Button size=\"lg\" variant=\"outline\">Large</Button>\n<Button size=\"icon-lg\" aria-label=\"Submit\" variant=\"outline\">\n  <ArrowUpRightIcon />\n</Button>\n```\n\n### Default\n\n<ComponentPreview name=\"button-default\" description=\"A primary button\" class=\"mb-4\">\n\n<div></div>\n\n</ComponentPreview>\n\n```svelte\n<Button>Button</Button>\n```\n\n### Outline\n\n<ComponentPreview name=\"button-outline\" description=\"A button using the outline variant.\" class=\"mb-4\">\n  \n<div></div>\n\n</ComponentPreview>\n\n```svelte\n<Button variant=\"outline\">Outline</Button>\n```\n\n### Secondary\n\n<ComponentPreview name=\"button-secondary\" description=\"A secondary button\" class=\"mb-4\">\n  \n<div></div>\n  \n</ComponentPreview>\n\n```svelte\n<Button variant=\"secondary\">Secondary</Button>\n```\n\n### Ghost\n\n<ComponentPreview name=\"button-ghost\" description=\"A button using the ghost variant\" class=\"mb-4\">\n  \n<div></div>\n\n</ComponentPreview>\n\n```svelte\n<Button variant=\"ghost\">Ghost</Button>\n```\n\n### Destructive\n\n<ComponentPreview name=\"button-destructive\" description=\"A destructive button\" class=\"mb-4\">\n\n<div></div>\n\n</ComponentPreview>\n\n```svelte\n<Button variant=\"destructive\">Destructive</Button>\n```\n\n### Link\n\n<ComponentPreview name=\"button-link\" description=\"A button using the link variant.\" class=\"mb-4\">\n\n<div></div>\n\n</ComponentPreview>\n\n```svelte\n<Button variant=\"link\">Link</Button>\n```\n\n### Icon\n\n<ComponentPreview name=\"button-icon\" description=\"An icon button\" class=\"mb-4\">\n\n<div></div>\n\n</ComponentPreview>\n\n```svelte\n<Button variant=\"outline\" size=\"icon\" aria-label=\"Submit\">\n  <CircleFadingArrowUpIcon />\n</Button>\n```\n\n### With Icon\n\nThe spacing between the icon and the text is automatically adjusted based on the size of the button. You do not need any margin on the icon.\n\n<ComponentPreview name=\"button-with-icon\" description=\"A button with an icon\" class=\"mb-4\">\n\n<div></div>\n\n</ComponentPreview>\n\n```svelte\n<Button variant=\"outline\" size=\"sm\">\n  <IconGitBranch /> New Branch\n</Button>\n```\n\n### Rounded\n\nUse the `rounded-full` class to make the button rounded.\n\n<ComponentPreview name=\"button-rounded\" class=\"mb-4\" >\n\n<div></div>\n\n</ComponentPreview>\n\n```svelte\n<Button variant=\"outline\" size=\"icon\" className=\"rounded-full\">\n  <ArrowUpRightIcon />\n</Button>\n```\n\n### Spinner\n\n<ComponentPreview name=\"button-loading\" description=\"A button with a loading state.\" class=\"mb-4\">\n\n<div></div>\n\n</ComponentPreview>\n\n```svelte showLineNumbers\n<Button size=\"sm\" variant=\"outline\" disabled>\n  <Spinner />\n  Submit\n</Button>\n```\n\n### Button Group\n\nTo create a button group, use the `ButtonGroup` component. See the [Button Group](/docs/components/button-group) documentation for more details.\n\n<ComponentPreview name=\"button-group-demo\" class=\"mb-4\" >\n\n<div></div>\n\n</ComponentPreview>\n\n```svelte showLineNumbers\n<ButtonGroup.Root>\n  <ButtonGroup.Root class=\"hidden sm:flex\">\n    <Button variant=\"outline\" size=\"icon\" aria-label=\"Go Back\">\n      <ArrowLeft />\n    </Button>\n  </ButtonGroup.Root>\n  <ButtonGroup.Root>\n    <Button variant=\"outline\">Archive</Button>\n    <Button variant=\"outline\">Report</Button>\n  </ButtonGroup.Root>\n  <ButtonGroup.Root>\n    <Button variant=\"outline\">Snooze</Button>\n    <DropdownMenu.Root>\n      <DropdownMenu.Trigger>\n        {#snippet child({ props })}\n          <Button\n            {...props}\n            variant=\"outline\"\n            size=\"icon\"\n            aria-label=\"More Options\"\n          >\n            <MoreHorizontal />\n          </Button>\n        {/snippet}\n      </DropdownMenu.Trigger>\n      <DropdownMenu.Content align=\"end\" class=\"w-52\">\n        <DropdownMenu.Group>\n          <DropdownMenu.Item>\n            <MailCheck />\n            Mark as Read\n          </DropdownMenu.Item>\n          <DropdownMenu.Item>\n            <Archive />\n            Archive\n          </DropdownMenu.Item>\n        </DropdownMenu.Group>\n        <DropdownMenu.Separator />\n        <DropdownMenu.Group>\n          <DropdownMenu.Item>\n            <Clock />\n            Snooze\n          </DropdownMenu.Item>\n          <DropdownMenu.Item>\n            <CalendarPlus />\n            Add to Calendar\n          </DropdownMenu.Item>\n          <DropdownMenu.Item>\n            <ListFilter />\n            Add to List\n          </DropdownMenu.Item>\n          <DropdownMenu.Sub>\n            <DropdownMenu.SubTrigger>\n              <Tag />\n              Label As...\n            </DropdownMenu.SubTrigger>\n            <DropdownMenu.SubContent>\n              <DropdownMenu.RadioGroup bind:value={label}>\n                <DropdownMenu.RadioItem value=\"personal\">\n                  Personal\n                </DropdownMenu.RadioItem>\n                <DropdownMenu.RadioItem value=\"work\"\n                  >Work</DropdownMenu.RadioItem\n                >\n                <DropdownMenu.RadioItem value=\"other\"\n                  >Other</DropdownMenu.RadioItem\n                >\n              </DropdownMenu.RadioGroup>\n            </DropdownMenu.SubContent>\n          </DropdownMenu.Sub>\n        </DropdownMenu.Group>\n        <DropdownMenu.Separator />\n        <DropdownMenu.Group>\n          <DropdownMenu.Item class=\"text-destructive focus:text-destructive\">\n            <Trash2 />\n            Trash\n          </DropdownMenu.Item>\n        </DropdownMenu.Group>\n      </DropdownMenu.Content>\n    </DropdownMenu.Root>\n  </ButtonGroup.Root>\n</ButtonGroup.Root>\n```\n\n### Link\n\nYou can convert the `<button>` into an `<a>` element by simply passing an `href` as a prop.\n\n```svelte\n<script lang=\"ts\">\n  import { Button } from \"$lib/components/ui/button/index.js\";\n</script>\n\n<Button href=\"/dashboard\">Dashboard</Button>\n```\n\nAlternatively, you can use the `buttonVariants` helper to create a link that looks like a button.\n\n```svelte\n<script lang=\"ts\">\n  import { buttonVariants } from \"$lib/components/ui/button\";\n</script>\n\n<a href=\"/dashboard\" class={buttonVariants({ variant: \"outline\" })}>\n  Dashboard\n</a>\n```\n\n## Changelog\n\n### 2025-09-24 New sizes\n\nWe have added two new sizes to the button component: `icon-sm` and `icon-lg`. These sizes are used to create icon buttons. To add them, edit `button.svelte` and add the following code under `size` in `buttonVariants`:\n\n```ts showLineNumbers title=\"components/ui/button.svelte\"\nexport const buttonVariants = tv({\n  // ...\n  variants: {\n    // ...\n    size: {\n      // ...\n      icon: \"size-9\",\n      \"icon-sm\": \"size-8\",\n      \"icon-lg\": \"size-10\",\n    },\n  },\n});\n```\n"
  },
  {
    "path": "docs/content/components/calendar.md",
    "content": "---\ntitle: Calendar\ndescription: A calendar component that allows users to select dates.\ncomponent: true\nlinks:\n  source: https://github.com/huntabyte/shadcn-svelte/tree/next/sites/docs/src/lib/registry/ui/calendar\n  doc: https://bits-ui.com/docs/components/calendar\n  api: https://bits-ui.com/docs/components/calendar#api-reference\n---\n\n<script>\n\timport ComponentPreview from \"$lib/components/component-preview.svelte\";\n\timport ComponentSource from \"$lib/components/component-source.svelte\";\n\timport Callout from \"$lib/components/callout.svelte\";\n\timport PMAddComp from \"$lib/components/pm-add-comp.svelte\";\n\timport PMInstall from \"$lib/components/pm-install.svelte\";\n\timport Steps from \"$lib/components/steps.svelte\";\n\timport Step from \"$lib/components/step.svelte\";\n\timport InstallTabs from \"$lib/components/install-tabs.svelte\";\n\n\tlet { viewerData } = $props();\n</script>\n\n<ComponentPreview name=\"calendar-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n## Blocks\n\nWe have built a collection of 30+ calendar blocks that you can use to build your own calendar components.\n\nSee call calendar blocks in the [Blocks Library](/blocks/calendar) page.\n\n## Installation\n\n<InstallTabs>\n{#snippet cli()}\n<PMAddComp name=\"calendar\" />\n{/snippet}\n{#snippet manual()}\n<Steps>\n\n<Step>\n\nInstall `bits-ui` and `@internationalized/date`:\n\n</Step>\n\n<PMInstall command=\"bits-ui @internationalized/date -D\" />\n\n<Step>\n\nCopy and paste the following code into your project.\n\n</Step>\n{#if viewerData}\n\t<ComponentSource item={viewerData} data-llm-ignore/>\n{/if}\n\n</Steps>\n{/snippet}\n</InstallTabs>\n\n## About\n\nThe `<Calendar />` component is built on top of the [Bits UI Calendar](https://www.bits-ui.com/docs/components/calendar) component, which uses the [@internationalized/date](https://react-spectrum.adobe.com/internationalized/date/index.html) package to handle dates.\n\nIf you're looking for a range calendar, check out the [Range Calendar](/docs/components/range-calendar) component.\n\n## Date Picker\n\nYou can use the `<Calendar />` component to build a date picker. See the [Date Picker](/docs/components/date-picker) page for more information.\n\n## Examples\n\n### Range Calendar\n\n<ComponentPreview name=\"calendar-02\" class=\"**:[.preview]:h-auto lg:**:[.preview]:h-[450px]\">\n\n<div></div>\n\n</ComponentPreview>\n\n### Month and Year Selector\n\n<ComponentPreview name=\"calendar-13\">\n\n<div></div>\n\n</ComponentPreview>\n\n### Date of Birth Picker\n\n<ComponentPreview name=\"calendar-22\">\n\n<div></div>\n\n</ComponentPreview>\n\n### Date and Time Picker\n\n<ComponentPreview name=\"calendar-24\">\n\n<div></div>\n\n</ComponentPreview>\n\n### Natural Language Picker\n\nThis component uses the `chrono-node` library to parse natural language dates.\n\n<ComponentPreview name=\"calendar-29\">\n\n<div></div>\n\n</ComponentPreview>\n\n## Upgrade Guide\n\nYou can upgrade to the latest version of the `<Calendar />` component by running the following command:\n\n<PMAddComp name=\"calendar\" />\n\nWhen you're prompted to overwrite the existing files, select `Yes`. **If you have made any changes to the `Calendar` component, you will need to merge your changes with the new version.**\n\n#### Installing Blocks\n\nAfter upgrading the `Calendar` component, you can add the new blocks with the following:\n\n<PMAddComp name=\"calendar-02\" />\n\nThis will add the latest version of the calendar blocks.\n"
  },
  {
    "path": "docs/content/components/card.md",
    "content": "---\ntitle: Card\ndescription: Displays a card with header, content, and footer.\ncomponent: true\nlinks:\n  source: https://github.com/huntabyte/shadcn-svelte/tree/next/sites/docs/src/lib/registry/ui/card\n---\n\n<script>\n\timport ComponentPreview from \"$lib/components/component-preview.svelte\";\n\timport ComponentSource from \"$lib/components/component-source.svelte\";\n\timport PMAddComp from \"$lib/components/pm-add-comp.svelte\";\n\timport PMInstall from \"$lib/components/pm-install.svelte\";\n\timport Steps from \"$lib/components/steps.svelte\";\n\timport Step from \"$lib/components/step.svelte\";\n\timport InstallTabs from \"$lib/components/install-tabs.svelte\";\n\n\tlet { viewerData } = $props();\n</script>\n\n<ComponentPreview name=\"card-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n## Installation\n\n<InstallTabs>\n{#snippet cli()}\n<PMAddComp name=\"card\" />\n{/snippet}\n{#snippet manual()}\n<Steps>\n\n<Step>\n\nCopy and paste the following code into your project.\n\n</Step>\n{#if viewerData}\n\t<ComponentSource item={viewerData} data-llm-ignore/>\n{/if}\n\n</Steps>\n{/snippet}\n</InstallTabs>\n\n## Usage\n\n```svelte showLineNumbers\n<script lang=\"ts\">\n  import * as Card from \"$lib/components/ui/card/index.js\";\n</script>\n```\n\n```svelte showLineNumbers\n<Card.Root>\n  <Card.Header>\n    <Card.Title>Card Title</Card.Title>\n    <Card.Description>Card Description</Card.Description>\n  </Card.Header>\n  <Card.Content>\n    <p>Card Content</p>\n  </Card.Content>\n  <Card.Footer>\n    <p>Card Footer</p>\n  </Card.Footer>\n</Card.Root>\n```\n\n## Examples\n\n<ComponentPreview name=\"card-demo\">\n\n<div></div>\n\n</ComponentPreview>\n"
  },
  {
    "path": "docs/content/components/carousel.md",
    "content": "---\ntitle: Carousel\ndescription: A carousel with motion and swipe built using Embla.\ncomponent: true\nlinks:\n  source: https://github.com/huntabyte/shadcn-svelte/tree/next/sites/docs/src/lib/registry/ui/carousel\n  doc: https://www.embla-carousel.com/get-started/svelte\n  api: https://www.embla-carousel.com/api\n---\n\n<script>\n\timport ComponentPreview from \"$lib/components/component-preview.svelte\";\n\timport ComponentSource from \"$lib/components/component-source.svelte\";\n\timport PMAddComp from \"$lib/components/pm-add-comp.svelte\";\n\timport PMInstall from \"$lib/components/pm-install.svelte\";\n\timport Steps from \"$lib/components/steps.svelte\";\n\timport Step from \"$lib/components/step.svelte\";\n\timport InstallTabs from \"$lib/components/install-tabs.svelte\";\n\n\tlet { viewerData } = $props();\n</script>\n\n<ComponentPreview name=\"carousel-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n## About\n\nThe carousel component is built using the [Embla Carousel](https://www.embla-carousel.com/get-started/svelte/) library.\n\n## Installation\n\n<InstallTabs>\n{#snippet cli()}\n<PMAddComp name=\"carousel\" />\n{/snippet}\n{#snippet manual()}\n<Steps>\n\n<Step>\n\nInstall `embla-carousel-svelte`:\n\n</Step>\n\n<PMInstall command=\"embla-carousel-svelte -D\" />\n\n<Step>\n\nCopy and paste the following code into your project.\n\n</Step>\n{#if viewerData}\n\t<ComponentSource item={viewerData} data-llm-ignore/>\n{/if}\n\n</Steps>\n{/snippet}\n</InstallTabs>\n\n## Usage\n\n```svelte showLineNumbers\n<script lang=\"ts\">\n  import * as Carousel from \"$lib/components/ui/carousel/index.js\";\n</script>\n```\n\n```svelte showLineNumbers\n<Carousel.Root>\n  <Carousel.Content>\n    <Carousel.Item>...</Carousel.Item>\n    <Carousel.Item>...</Carousel.Item>\n    <Carousel.Item>...</Carousel.Item>\n  </Carousel.Content>\n  <Carousel.Previous />\n  <Carousel.Next />\n</Carousel.Root>\n```\n\n## Examples\n\n### Sizes\n\nTo set the size of the items, you can use the `basis` utility class on the `<Carousel.Item />`.\n\n<ComponentPreview name=\"carousel-size\">\n\n<div></div>\n\n</ComponentPreview>\n\n```svelte showLineNumbers {4-6}\n<!-- 33% of the carousel width. -->\n<Carousel.Root>\n  <Carousel.Content>\n    <Carousel.Item class=\"basis-1/3\">...</Carousel.Item>\n    <Carousel.Item class=\"basis-1/3\">...</Carousel.Item>\n    <Carousel.Item class=\"basis-1/3\">...</Carousel.Item>\n  </Carousel.Content>\n</Carousel.Root>\n```\n\n```svelte showLineNumbers {4-6}\n<!-- 50% on small screens and 33% on larger screens. -->\n<Carousel.Root>\n  <Carousel.Content>\n    <Carousel.Item class=\"md:basis-1/2 lg:basis-1/3\">...</Carousel.Item>\n    <Carousel.Item class=\"md:basis-1/2 lg:basis-1/3\">...</Carousel.Item>\n    <Carousel.Item class=\"md:basis-1/2 lg:basis-1/3\">...</Carousel.Item>\n  </Carousel.Content>\n</Carousel.Root>\n```\n\n### Spacing\n\nTo set the spacing between the items, we use a `ps-[VALUE]` utility on the `<Carousel.Item />` and a negative `-ms-[VALUE]` on the `<Carousel.Content />`.\n\n<ComponentPreview name=\"carousel-spacing\">\n\n<div></div>\n\n</ComponentPreview>\n\n```svelte showLineNumbers /-ms-4/ /ps-4/\n<Carousel.Root>\n  <Carousel.Content class=\"-ms-4\">\n    <Carousel.Item class=\"ps-4\">...</Carousel.Item>\n    <Carousel.Item class=\"ps-4\">...</Carousel.Item>\n    <Carousel.Item class=\"ps-4\">...</Carousel.Item>\n  </Carousel.Content>\n</Carousel.Root>\n```\n\n```svelte showLineNumbers /-ms-2/ /ps-2/ /md:-ms-4/ /md:ps-4/\n<Carousel.Root>\n  <Carousel.Content class=\"-ms-2 md:-ms-4\">\n    <Carousel.Item class=\"ps-2 md:ps-4\">...</Carousel.Item>\n    <Carousel.Item class=\"ps-2 md:ps-4\">...</Carousel.Item>\n    <Carousel.Item class=\"ps-2 md:ps-4\">...</Carousel.Item>\n  </Carousel.Content>\n</Carousel.Root>\n```\n\n### Orientation\n\nUse the `orientation` prop to set the orientation of the carousel.\n\n<ComponentPreview name=\"carousel-orientation\">\n\n<div></div>\n\n</ComponentPreview>\n\n```svelte showLineNumbers /vertical | horizontal/\n<Carousel.Root orientation=\"vertical | horizontal\">\n  <Carousel.Content>\n    <Carousel.Item>...</Carousel.Item>\n    <Carousel.Item>...</Carousel.Item>\n    <Carousel.Item>...</Carousel.Item>\n  </Carousel.Content>\n</Carousel.Root>\n```\n\n## Options\n\nYou can pass options to the carousel using the `opts` prop. See the [Embla Carousel docs](https://www.embla-carousel.com/api/options/) for more information.\n\n```svelte showLineNumbers {2-5}\n<Carousel.Root\n  opts={{\n    align: \"start\",\n    loop: true,\n  }}\n>\n  <Carousel.Content>\n    <Carousel.Item>...</Carousel.Item>\n    <Carousel.Item>...</Carousel.Item>\n    <Carousel.Item>...</Carousel.Item>\n  </Carousel.Content>\n</Carousel.Root>\n```\n\n## API\n\nUse reactive state and the `setApi` callback to get an instance of the carousel API.\n\n<ComponentPreview name=\"carousel-api\">\n\n<div></div>\n\n</ComponentPreview>\n\n```svelte showLineNumbers {2,5,19}\n<script lang=\"ts\">\n  import { type CarouselAPI } from \"$lib/components/ui/carousel/context.js\";\n  import * as Carousel from \"$lib/components/ui/carousel/index.js\";\n\n  let api = $state<CarouselAPI>();\n  let current = $state(0);\n  const count = $derived(api ? api.scrollSnapList().length : 0);\n\n  $effect(() => {\n    if (api) {\n      current = api.selectedScrollSnap() + 1;\n      api.on(\"select\", () => {\n        current = api!.selectedScrollSnap() + 1;\n      });\n    }\n  });\n</script>\n\n<Carousel.Root setApi={(emblaApi) => (api = emblaApi)}>\n  <Carousel.Content>\n    <Carousel.Item>...</Carousel.Item>\n    <Carousel.Item>...</Carousel.Item>\n    <Carousel.Item>...</Carousel.Item>\n  </Carousel.Content>\n</Carousel.Root>\n```\n\n## Events\n\nYou can listen to events using the api instance from `bind:api`.\n\n```svelte showLineNumbers {2,5,7-13,16}\n<script lang=\"ts\">\n  import { type CarouselAPI } from \"$lib/components/ui/carousel/context.js\";\n  import * as Carousel from \"$lib/components/ui/carousel/index.js\";\n\n  let api = $state<CarouselAPI>();\n\n  $effect(() => {\n    if (api) {\n      api.on(\"select\", () => {\n        // do something\n      });\n    }\n  });\n</script>\n\n<Carousel.Root setApi={(emblaApi) => (api = emblaApi)}>\n  <Carousel.Content>\n    <Carousel.Item>...</Carousel.Item>\n    <Carousel.Item>...</Carousel.Item>\n    <Carousel.Item>...</Carousel.Item>\n  </Carousel.Content>\n</Carousel.Root>\n```\n\n## Plugins\n\nYou can use the `plugins` prop to add plugins to the carousel.\n\n```svelte showLineNumbers {2,7-11}\n<script lang=\"ts\">\n  import Autoplay from \"embla-carousel-autoplay\";\n  import * as Carousel from \"$lib/components/ui/carousel/index.js\";\n</script>\n\n<Carousel.Root\n  plugins={[\n    Autoplay({\n      delay: 2000,\n    }),\n  ]}\n>\n  <!-- ... -->\n</Carousel.Root>\n```\n\n<ComponentPreview name=\"carousel-plugin\">\n\n<div></div>\n\n</ComponentPreview>\n\nSee the [Embla Carousel docs](https://www.embla-carousel.com/api/plugins/) for more information on using plugins.\n"
  },
  {
    "path": "docs/content/components/chart.md",
    "content": "---\ntitle: Chart\ndescription: Beautiful charts. Built using LayerChart. Copy and paste into your apps.\ncomponent: true\nlinks:\n  source: https://github.com/huntabyte/shadcn-svelte/tree/next/sites/docs/src/lib/registry/ui/chart\n---\n\n<script>\n\timport * as Alert from \"$lib/registry/ui/alert/index.js\";\n\timport TriangleAlertIcon from \"@lucide/svelte/icons/triangle-alert\";\n\timport ComponentPreview from \"$lib/components/component-preview.svelte\";\n\timport ComponentSource from \"$lib/components/component-source.svelte\";\n\timport Callout from \"$lib/components/callout.svelte\";\n\timport PMAddComp from \"$lib/components/pm-add-comp.svelte\";\n\timport PMInstall from \"$lib/components/pm-install.svelte\";\n\timport Steps from \"$lib/components/steps.svelte\";\n\timport InstallTabs from \"$lib/components/install-tabs.svelte\";\n\timport Step from \"$lib/components/step.svelte\";\n\n\tlet { viewerData } = $props();\n</script>\n\n<Callout class=\"mt-0 mb-6\">\n\n**Important:** LayerChart v2 is still in pre-release and is actively evolving. Only use if you're comfortable with potential breaking changes before stable v2.\n\nYour feedback will be invaluable in shaping the release and features. Current development status can be tracked [here](https://github.com/techniq/layerchart/pull/449).\n\n</Callout>\n\n<ComponentPreview name=\"chart-bar-interactive\" class=\"-mt-2 [&_.preview]:p-0 [&_.preview]:border-t [&_.preview>div]:shadow-none [&_.preview]:border-none [&_.preview>div]:w-full [&_.preview]:lg:min-h-[404px] [&_[data-slot='card-footer']]:hidden [&_[data-slot='card']]:py-0 [&_[data-slot='card-header'].border-b]:pb-0 [&_[data-slot='card']]:bg-background [&_[data-slot='card']]:border-none\" hideCode>\n\n<div></div>\n\n</ComponentPreview>\n\nIntroducing **Charts**. A collection of chart components that you can copy and paste into your apps.\n\nCharts are designed to look great out of the box. They work well with other components are are fully customizable to fit your project.\n\n[Browse the Charts Library](/charts)\n\n## Component\n\nWe use [LayerChart](https://next.layerchart.com) under the hood.\n\nWe designed the `Chart` component with composition in mind. **You build your charts using LayerChart components and only bring in custom components, such as `ChartTooltip`, when and where you need it**\n\n```svelte showLineNumbers /Chart.Container/ /Chart.Tooltip/\n<script lang=\"ts\">\n  import * as Chart from \"$lib/components/ui/chart/index.js\";\n  import { BarChart } from \"layerchart\";\n\n  const data = [\n    // ...\n  ];\n</script>\n\n<Chart.Container>\n  <BarChart {data} x=\"date\" y=\"value\">\n    {#snippet tooltip()}\n      <Chart.Tooltip />\n    {/snippet}\n  </BarChart>\n</Chart.Container>\n```\n\nWe do not wrap LayerChart. This means you're not locked into an abstraction. When a new LayerChart version is released, you can follow the official upgrade path to upgrade your charts.\n\n**The components are yours**.\n\n## Installation\n\n<InstallTabs>\n{#snippet cli()}\n<PMAddComp name=\"chart\" />\n{/snippet}\n{#snippet manual()}\n<Steps>\n\n<Step>\n\nInstall `layerchart`:\n\n</Step>\n\n<PMInstall command=\"layerchart@next -D\" />\n\n<Step>\n\nAdd the following colors to your CSS file\n\n</Step>\n\n```css title=\"src/app.css\" showLineNumbers\n:root {\n  --chart-1: oklch(0.646 0.222 41.116);\n  --chart-2: oklch(0.6 0.118 184.704);\n  --chart-3: oklch(0.398 0.07 227.392);\n  --chart-4: oklch(0.828 0.189 84.429);\n  --chart-5: oklch(0.769 0.188 70.08);\n}\n\n.dark {\n  --chart-1: oklch(0.488 0.243 264.376);\n  --chart-2: oklch(0.696 0.17 162.48);\n  --chart-3: oklch(0.769 0.188 70.08);\n  --chart-4: oklch(0.627 0.265 303.9);\n  --chart-5: oklch(0.645 0.246 16.439);\n}\n\n@theme inline {\n  --color-chart-1: var(--chart-1);\n  --color-chart-2: var(--chart-2);\n  --color-chart-3: var(--chart-3);\n  --color-chart-4: var(--chart-4);\n  --color-chart-5: var(--chart-5);\n}\n```\n\n<Step>\n\nCopy and paste the following code into your project.\n\n</Step>\n\n</Steps>\n{/snippet}\n</InstallTabs>\n\n## Your First Chart\n\nLet's build your first chart. We'll build a bar chart with an axis, grid, tooltip, and legend.\n\n<Steps>\n\n### Start by defining your data\n\nThe following data represents the number of desktop and mobile users for each month.\n\n<Callout class=\"mt-4\">\n\n**Note:** Your data can be in any shape. You are not limited to the shape of the data below. Use the `dataKey` prop to map your data to the chart.\n\n</Callout>\n\n```svelte title=\"lib/components/example-chart.svelte\" showLineNumbers\n<script lang=\"ts\">\n  const chartData = [\n    { month: \"January\", desktop: 186, mobile: 80 },\n    { month: \"February\", desktop: 305, mobile: 200 },\n    { month: \"March\", desktop: 237, mobile: 120 },\n    { month: \"April\", desktop: 73, mobile: 190 },\n    { month: \"May\", desktop: 209, mobile: 130 },\n    { month: \"June\", desktop: 214, mobile: 140 },\n  ];\n</script>\n```\n\n### Define your chart config\n\nThe chart config holds configuration for the chart. This is where you place human-readable strings, such as labels, icons, and color tokens for theming.\n\n```svelte title=\"lib/components/example-chart.svelte\" showLineNumbers\n<script lang=\"ts\">\n  import * as Chart from \"$lib/components/ui/chart/index.js\";\n\n  const chartConfig = {\n    desktop: {\n      label: \"Desktop\",\n      color: \"#2563eb\",\n    },\n    mobile: {\n      label: \"Mobile\",\n      color: \"#60a5fa\",\n    },\n  } satisfies Chart.ChartConfig;\n</script>\n```\n\n### Build your chart\n\nYou can now build your chart using LayerChart components. We're using the `BarChart` component in this example, which is one of LayerChart's \"Simplified Charts\".\n\nThese components handle a lot of the common chart scaffolding for you, while allowing you to customize them to your liking.\n\n{#if viewerData}\n<ComponentSource item={viewerData} data-llm-ignore/>\n{/if}\n\n<ComponentPreview name=\"chart-bar-demo\" class=\"[&_.preview]:p-4\">\n\n<div></div>\n\n</ComponentPreview>\n\n</Steps>\n\nWe now have a group-stacked bar chart with an x axis and a grid.\n\n### Adjusting the Axis Ticks\n\nOur bar chart is currently displaying the full month name for each tick on the x axis. Let's shorten it to just the first three letters.\n\n<Steps>\n\n### Add a custom formatter to the x axis\n\nThe `props` prop is how you can pass custom props to the various components that make up the chart. Here we're passing a custom formatter to the x axis.\n\n```svelte showLineNumbers {21-25}\n<Chart.Container config={chartConfig} class=\"min-h-[200px] w-full\">\n  <BarChart\n    data={chartData}\n    xScale={scaleBand().padding(0.25)}\n    x=\"month\"\n    axis=\"x\"\n    tooltip={false}\n    seriesLayout=\"group\"\n    series={[\n      {\n        key: \"desktop\",\n        label: chartConfig.desktop.label,\n        color: chartConfig.desktop.color,\n      },\n      {\n        key: \"mobile\",\n        label: chartConfig.mobile.label,\n        color: chartConfig.mobile.color,\n      },\n    ]}\n    props={{\n      xAxis: {\n        format: (d) => d.slice(0, 3),\n      },\n    }}\n  />\n</Chart.Container>\n```\n\n<ComponentPreview name=\"chart-bar-axis-tick-demo\" class=\"[&_.preview]:p-4\">\n\n<div></div>\n\n</ComponentPreview>\n\n</Steps>\n\n### Add Tooltip\n\nSo far we've only used the `BarChart` component from LayerChart. They look great out of the box thanks to some customizations in the `chart` component.\n\nTo add a tooltip, we'll use the custom `Chart.Tooltip` component from `chart`.\n\n<Steps>\n\n### Add the `Chart.Tooltip` component to the chart\n\nWe'll replace the `tooltip={false}` prop with the `tooltip` snippet where we'll place the `Chart.Tooltip` component.\n\n```svelte showLineNumbers {26-28}\n<Chart.Container config={chartConfig} class=\"min-h-[200px] w-full\">\n  <BarChart\n    data={chartData}\n    xScale={scaleBand().padding(0.25)}\n    x=\"month\"\n    axis=\"x\"\n    seriesLayout=\"group\"\n    series={[\n      {\n        key: \"desktop\",\n        label: chartConfig.desktop.label,\n        color: chartConfig.desktop.color,\n      },\n      {\n        key: \"mobile\",\n        label: chartConfig.mobile.label,\n        color: chartConfig.mobile.color,\n      },\n    ]}\n    props={{\n      xAxis: {\n        format: (d) => d.slice(0, 3),\n      },\n    }}\n  >\n    {#snippet tooltip()}\n      <Chart.Tooltip />\n    {/snippet}\n  </BarChart>\n</Chart.Container>\n```\n\n<ComponentPreview name=\"chart-bar-tooltip-demo\" class=\"[&_.preview]:p-4\">\n\n<div></div>\n\n</ComponentPreview>\n\n</Steps>\n\n### Add Legend\n\n<Steps>\n\n### Set the `legend` prop to `true`\n\nThe `legend` prop is used to show a legend for the chart. We are working with LayerChart to add a payload similar to the tooltip so we can more easily create a custom legend.\n\n```svelte showLineNumbers {8}\n<Chart.Container config={chartConfig} class=\"min-h-[200px] w-full\">\n  <BarChart\n    data={chartData}\n    xScale={scaleBand().padding(0.25)}\n    x=\"month\"\n    axis=\"x\"\n    seriesLayout=\"group\"\n    legend\n    series={[\n      {\n        key: \"desktop\",\n        label: chartConfig.desktop.label,\n        color: chartConfig.desktop.color,\n      },\n      {\n        key: \"mobile\",\n        label: chartConfig.mobile.label,\n        color: chartConfig.mobile.color,\n      },\n    ]}\n    props={{\n      xAxis: {\n        format: (d) => d.slice(0, 3),\n      },\n    }}\n  >\n    {#snippet tooltip()}\n      <Chart.Tooltip />\n    {/snippet}\n  </BarChart>\n</Chart.Container>\n```\n\n<ComponentPreview name=\"chart-bar-legend-demo\" class=\"[&_.preview]:p-4\">\n\n<div></div>\n\n</ComponentPreview>\n\n</Steps>\n\nDone. You've built your first chart! What's next?\n\n- [Themes and Colors](/docs/components/chart#theming)\n- [Tooltip](/docs/components/chart#tooltip)\n\n## Chart Config\n\nThe chart config is where you define the labels, icons and colors for a chart.\n\nIt is intentionally decoupled from chart data.\n\nThis allows you to share config and color tokens between charts. It can also works independently for cases where your data or color tokens live remotely or in a different format.\n\n```svelte\n<script lang=\"ts\">\n  import MonitorIcon from \"@lucide/svelte/icons/monitor\";\n  import * as Chart from \"$lib/components/ui/chart/index.js\";\n\n  const chartConfig = {\n    desktop: {\n      label: \"Desktop\",\n      icon: MonitorIcon,\n      // A color like 'hsl(220, 98%, 61%)' or 'var(--color-name)'\n      color: \"#2563eb\",\n      // OR a theme object with 'light' and 'dark' keys\n      theme: {\n        light: \"#2563eb\",\n        dark: \"#dc2626\",\n      },\n    },\n  } satisfies Chart.ChartConfig;\n</script>\n```\n\n## Theming\n\nCharts has built-in support for theming. You can use css variables (recommended) or color values in any color format, such as hex, hsl, or oklch.\n\n### CSS Variables\n\n<Steps>\n\n### Define your colors in your css file\n\n```css {5-6,13-14} title=\"src/routes/layout.css\" showLineNumbers\n:root {\n  --background: oklch(1 0 0);\n  --foreground: oklch(0.145 0 0);\n  /* ... */\n  --chart-1: oklch(0.646 0.222 41.116);\n  --chart-2: oklch(0.6 0.118 184.704);\n}\n\n.dark {\n  --background: oklch(0.145 0 0);\n  --foreground: oklch(0.985 0 0);\n  /* ... */\n  --chart-1: oklch(0.488 0.243 264.376);\n  --chart-2: oklch(0.696 0.17 162.48);\n}\n```\n\n### Add the color to your `chartConfig`\n\n```svelte {5,9} showLineNumbers\n<script lang=\"ts\">\n  const chartConfig = {\n    desktop: {\n      label: \"Desktop\",\n      color: \"var(--chart-1)\",\n    },\n    mobile: {\n      label: \"Mobile\",\n      color: \"var(--chart-2)\",\n    },\n  } satisfies Chart.ChartConfig;\n</script>\n```\n\n</Steps>\n\n### hex, hsl or oklch\n\nYou can also define your colors directly in the chart config. Use the color format you prefer.\n\n```svelte showLineNumbers\n<script lang=\"ts\">\n  const chartConfig = {\n    desktop: {\n      label: \"Desktop\",\n      color: \"#2563eb\",\n    },\n  } satisfies Chart.ChartConfig;\n</script>\n```\n\n### Using Colors\n\nTo use the theme colors in your chart, reference the colors using the format `var(--color-KEY)`.\n\n#### Components\n\n```svelte\n<Bar fill=\"var(--color-desktop)\" />\n```\n\n#### Chart Data\n\n```ts showLineNumbers\nconst chartData = [\n  { browser: \"chrome\", visitors: 275, color: \"var(--color-chrome)\" },\n  { browser: \"safari\", visitors: 200, color: \"var(--color-safari)\" },\n];\n```\n\n#### Tailwind\n\n```svelte\n<Label class=\"fill-(--color-desktop)\" />\n```\n\n## Tooltip\n\nA chart tooltip contains a label, name, indicator and value. You can use a combination of these to customize your tooltip.\n\n<ComponentPreview name=\"chart-tooltip-demo\" class=\"[&_.preview]:p-0\" hideCode>\n\n<div></div>\n\n</ComponentPreview>\n\nYou can turn on/off any of these using the `hideLabel`, `hideIndicator` props and customize the indicator style using the `indicator` prop.\n\nUse `labelKey` and `nameKey` to use a custom key for the tooltip label and name.\n\nChart comes with the `<Chart.Tooltip>` component. You can use this component to add custom tooltips to your chart.\n\n### Props\n\nUse the following props to customize the tooltip.\n\n| Prop             | Type                     | Description                                             |\n| :--------------- | :----------------------- | :------------------------------------------------------ |\n| `labelKey`       | string                   | The config or data key to use for the label.            |\n| `nameKey`        | string                   | The config or data key to use for the name.             |\n| `indicator`      | `dot` `line` or `dashed` | The indicator style for the tooltip.                    |\n| `hideLabel`      | boolean                  | Whether to hide the label.                              |\n| `hideIndicator`  | boolean                  | Whether to hide the indicator.                          |\n| `label`          | string                   | A custom label for the tooltip                          |\n| `labelFormatter` | function                 | A function to format the label.                         |\n| `formatter`      | Snippet                  | A snippet to provide flexible rendering of the tooltip. |\n\n### Colors\n\nColors are automatically referenced from the chart config.\n\n### Custom\n\nTo use a custom key for tooltip label and names, use the `labelKey` and `nameKey` props.\n\n```svelte showLineNumbers /browser/\n<script lang=\"ts\">\n  const chartData = [\n    { browser: \"chrome\", visitors: 187, color: \"var(--color-chrome)\" },\n    { browser: \"safari\", visitors: 200, color: \"var(--color-safari)\" },\n  ];\n\n  const chartConfig = {\n    visitors: {\n      label: \"Total Visitors\",\n    },\n    chrome: {\n      label: \"Chrome\",\n      color: \"var(--chart-1)\",\n    },\n    safari: {\n      label: \"Safari\",\n      color: \"var(--chart-2)\",\n    },\n  } satisfies ChartConfig;\n</script>\n\n<Chart.Tooltip labelKey=\"visitors\" nameKey=\"browser\" />\n```\n\nThis will use `Total Visitors` for label and `Chrome` and `Safari` for the tooltip names.\n"
  },
  {
    "path": "docs/content/components/checkbox.md",
    "content": "---\ntitle: Checkbox\ndescription: A control that allows the user to toggle between checked and not checked.\ncomponent: true\nlinks:\n  source: https://github.com/huntabyte/shadcn-svelte/tree/next/sites/docs/src/lib/registry/ui/checkbox\n  doc: https://bits-ui.com/docs/components/checkbox\n  api: https://bits-ui.com/docs/components/checkbox#api-reference\n---\n\n<script>\n\timport ComponentPreview from \"$lib/components/component-preview.svelte\";\n\timport ComponentSource from \"$lib/components/component-source.svelte\";\n\timport PMAddComp from \"$lib/components/pm-add-comp.svelte\";\n\timport PMInstall from \"$lib/components/pm-install.svelte\";\n\timport Steps from \"$lib/components/steps.svelte\";\n\timport InstallTabs from \"$lib/components/install-tabs.svelte\";\n\n\tlet { viewerData } = $props();\n\timport Step from \"$lib/components/step.svelte\";\n</script>\n\n<ComponentPreview name=\"checkbox-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n## Installation\n\n<InstallTabs>\n{#snippet cli()}\n<PMAddComp name=\"checkbox\" />\n{/snippet}\n{#snippet manual()}\n<Steps>\n\n<Step>\n\nInstall `bits-ui`:\n\n</Step>\n\n<PMInstall command=\"bits-ui -D\" />\n\n<Step>\n\nCopy and paste the following code into your project.\n\n</Step>\n{#if viewerData}\n\t<ComponentSource item={viewerData} data-llm-ignore/>\n{/if}\n\n</Steps>\n{/snippet}\n</InstallTabs>\n\n## Usage\n\n```svelte\n<script lang=\"ts\">\n  import { Checkbox } from \"$lib/components/ui/checkbox/index.js\";\n</script>\n```\n\n```svelte\n<Checkbox />\n```\n"
  },
  {
    "path": "docs/content/components/collapsible.md",
    "content": "---\ntitle: Collapsible\ndescription: An interactive component which expands/collapses a panel.\ncomponent: true\nlinks:\n  source: https://github.com/huntabyte/shadcn-svelte/tree/next/sites/docs/src/lib/registry/ui/collapsible\n  doc: https://bits-ui.com/docs/components/collapsible\n  api: https://bits-ui.com/docs/components/collapsible#api-reference\n---\n\n<script>\n\timport ComponentPreview from \"$lib/components/component-preview.svelte\";\n\timport ComponentSource from \"$lib/components/component-source.svelte\";\n\timport PMAddComp from \"$lib/components/pm-add-comp.svelte\";\n\timport PMInstall from \"$lib/components/pm-install.svelte\";\n\timport Steps from \"$lib/components/steps.svelte\";\n\timport InstallTabs from \"$lib/components/install-tabs.svelte\";\n\n\tlet { viewerData } = $props();\n\timport Step from \"$lib/components/step.svelte\";\n</script>\n\n<ComponentPreview name=\"collapsible-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n## Installation\n\n<InstallTabs>\n{#snippet cli()}\n<PMAddComp name=\"collapsible\" />\n{/snippet}\n{#snippet manual()}\n<Steps>\n\n<Step>\n\nInstall `bits-ui`:\n\n</Step>\n\n<PMInstall command=\"bits-ui -D\" />\n\n<Step>\n\nCopy and paste the following code into your project.\n\n</Step>\n{#if viewerData}\n\t<ComponentSource item={viewerData} data-llm-ignore/>\n{/if}\n\n</Steps>\n{/snippet}\n</InstallTabs>\n\n## Usage\n\n```svelte showLineNumbers\n<script lang=\"ts\">\n  import * as Collapsible from \"$lib/components/ui/collapsible/index.js\";\n</script>\n```\n\n```svelte showLineNumbers\n<Collapsible.Root>\n  <Collapsible.Trigger>Can I use this in my project?</Collapsible.Trigger>\n  <Collapsible.Content>\n    Yes. Free to use for personal and commercial projects. No attribution\n    required.\n  </Collapsible.Content>\n</Collapsible.Root>\n```\n"
  },
  {
    "path": "docs/content/components/combobox.md",
    "content": "---\ntitle: Combobox\ndescription: Autocomplete input and command palette with a list of suggestions.\ncomponent: true\n---\n\n<script>\n\timport ComponentPreview from \"$lib/components/component-preview.svelte\";\n\timport CodeCollapsibleWrapper from \"$lib/components/code-collapsible-wrapper.svelte\";\n</script>\n\n<ComponentPreview name=\"combobox-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n## Installation\n\nThe Combobox is built using a composition of the `<Popover />` and the `<Command />` components.\n\nSee installation instructions for the [Popover](/docs/components/popover#installation) and the [Command](/docs/components/command#installation) components.\n\n## Usage\n\n<CodeCollapsibleWrapper >\n\n```svelte title=\"lib/components/example-combobox.svelte\"\n<script lang=\"ts\">\n  import CheckIcon from \"@lucide/svelte/icons/check\";\n  import ChevronsUpDownIcon from \"@lucide/svelte/icons/chevrons-up-down\";\n  import { tick } from \"svelte\";\n  import * as Command from \"$lib/components/ui/command/index.js\";\n  import * as Popover from \"$lib/components/ui/popover/index.js\";\n  import { Button } from \"$lib/components/ui/button/index.js\";\n  import { cn } from \"$lib/utils.js\";\n\n  const frameworks = [\n    {\n      value: \"sveltekit\",\n      label: \"SvelteKit\",\n    },\n    {\n      value: \"next.js\",\n      label: \"Next.js\",\n    },\n    {\n      value: \"nuxt.js\",\n      label: \"Nuxt.js\",\n    },\n    {\n      value: \"remix\",\n      label: \"Remix\",\n    },\n    {\n      value: \"astro\",\n      label: \"Astro\",\n    },\n  ];\n\n  let open = $state(false);\n  let value = $state(\"\");\n  let triggerRef = $state<HTMLButtonElement>(null!);\n\n  const selectedValue = $derived(\n    frameworks.find((f) => f.value === value)?.label\n  );\n\n  // We want to refocus the trigger button when the user selects\n  // an item from the list so users can continue navigating the\n  // rest of the form with the keyboard.\n  function closeAndFocusTrigger() {\n    open = false;\n    tick().then(() => {\n      triggerRef.focus();\n    });\n  }\n</script>\n\n<Popover.Root bind:open>\n  <Popover.Trigger bind:ref={triggerRef}>\n    {#snippet child({ props })}\n      <Button\n        variant=\"outline\"\n        class=\"w-[200px] justify-between\"\n        {...props}\n        role=\"combobox\"\n        aria-expanded={open}\n      >\n        {selectedValue || \"Select a framework...\"}\n        <ChevronsUpDownIcon class=\"ms-2 size-4 shrink-0 opacity-50\" />\n      </Button>\n    {/snippet}\n  </Popover.Trigger>\n  <Popover.Content class=\"w-[200px] p-0\">\n    <Command.Root>\n      <Command.Input placeholder=\"Search framework...\" />\n      <Command.List>\n        <Command.Empty>No framework found.</Command.Empty>\n        <Command.Group>\n          {#each frameworks as framework}\n            <Command.Item\n              value={framework.value}\n              onSelect={() => {\n                value = framework.value;\n                closeAndFocusTrigger();\n              }}\n            >\n              <CheckIcon\n                class={cn(\n                  \"me-2 size-4\",\n                  value !== framework.value && \"text-transparent\"\n                )}\n              />\n              {framework.label}\n            </Command.Item>\n          {/each}\n        </Command.Group>\n      </Command.List>\n    </Command.Root>\n  </Popover.Content>\n</Popover.Root>\n```\n\n</CodeCollapsibleWrapper>\n\n## Examples\n\n### Combobox\n\n<ComponentPreview name=\"combobox-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n### Popover\n\n<ComponentPreview name=\"combobox-popover\">\n\n<div></div>\n\n</ComponentPreview>\n\n### Dropdown menu\n\n<ComponentPreview name=\"combobox-dropdown-menu\">\n\n<div></div>\n\n</ComponentPreview>\n\n### Responsive\n\nYou can create a responsive combobox by using the `<Popover />` on desktop and the `<Drawer />` components on mobile.\n\n<ComponentPreview name=\"combobox-responsive\" >\n\n<div></div>\n\n</ComponentPreview>\n"
  },
  {
    "path": "docs/content/components/command.md",
    "content": "---\ntitle: Command\ndescription: Fast, composable, unstyled command menu for Svelte.\ncomponent: true\nlinks:\n  source: https://github.com/huntabyte/shadcn-svelte/tree/next/sites/docs/src/lib/registry/ui/command\n  doc: https://bits-ui.com/docs/components/command\n  api: https://bits-ui.com/docs/components/command#api-reference\n---\n\n<script>\n\timport ComponentPreview from \"$lib/components/component-preview.svelte\";\n\timport ComponentSource from \"$lib/components/component-source.svelte\";\n\timport Callout from \"$lib/components/callout.svelte\";\n\timport PMAddComp from \"$lib/components/pm-add-comp.svelte\";\n\timport PMInstall from \"$lib/components/pm-install.svelte\";\n\timport Steps from \"$lib/components/steps.svelte\";\n\timport Step from \"$lib/components/step.svelte\";\n\timport InstallTabs from \"$lib/components/install-tabs.svelte\";\n\n\tlet { viewerData } = $props();\n</script>\n\n<ComponentPreview name=\"command-demo\" align=\"start\" class=\"[&_.preview>div]:max-w-[450px]\">\n\n<div></div>\n\n</ComponentPreview>\n\n## Installation\n\n<InstallTabs>\n{#snippet cli()}\n<PMAddComp name=\"command\" />\n{/snippet}\n{#snippet manual()}\n<Steps>\n\n<Step>\n\nInstall `bits-ui`:\n\n</Step>\n\n<PMInstall command=\"bits-ui -D\" />\n\n<Step>\n\nCopy and paste the following code into your project.\n\n</Step>\n{#if viewerData}\n\t<ComponentSource item={viewerData} data-llm-ignore/>\n{/if}\n\n</Steps>\n{/snippet}\n</InstallTabs>\n\n## Usage\n\n```svelte showLineNumbers\n<script lang=\"ts\">\n  import * as Command from \"$lib/components/ui/command/index.js\";\n</script>\n```\n\n```svelte showLineNumbers\n<Command.Root>\n  <Command.Input placeholder=\"Type a command or search...\" />\n  <Command.List>\n    <Command.Empty>No results found.</Command.Empty>\n    <Command.Group heading=\"Suggestions\">\n      <Command.Item>Calendar</Command.Item>\n      <Command.Item>Search Emoji</Command.Item>\n      <Command.Item>Calculator</Command.Item>\n    </Command.Group>\n    <Command.Separator />\n    <Command.Group heading=\"Settings\">\n      <Command.Item>Profile</Command.Item>\n      <Command.Item>Billing</Command.Item>\n      <Command.Item>Settings</Command.Item>\n    </Command.Group>\n  </Command.List>\n</Command.Root>\n```\n\n## Examples\n\n### Dialog\n\n<ComponentPreview name=\"command-dialog\">\n\n<div></div>\n\n</ComponentPreview>\n\nTo show the command menu in a dialog, use the `<Command.Dialog />` component instead of `<Command.Root />`. It accepts props for both the `<Dialog.Root />` and `<Command.Root />` components.\n\n```svelte title=\"lib/components/example-command-menu.svelte\" showLineNumbers\n<script lang=\"ts\">\n  import * as Command from \"$lib/components/ui/command/index.js\";\n  import { onMount } from \"svelte\";\n\n  let open = $state(false);\n\n  function handleKeydown(e: KeyboardEvent) {\n    if (e.key === \"k\" && (e.metaKey || e.ctrlKey)) {\n      e.preventDefault();\n      open = !open;\n    }\n  }\n</script>\n\n<svelte:document onkeydown={handleKeydown} />\n\n<Command.Dialog bind:open>\n  <Command.Input placeholder=\"Type a command or search...\" />\n  <Command.List>\n    <Command.Empty>No results found.</Command.Empty>\n    <Command.Group heading=\"Suggestions\">\n      <Command.Item>Calendar</Command.Item>\n      <Command.Item>Search Emoji</Command.Item>\n      <Command.Item>Calculator</Command.Item>\n    </Command.Group>\n  </Command.List>\n</Command.Dialog>\n```\n\n### Combobox\n\nYou can use the `<Command />` component as a combobox. See the [Combobox](/docs/components/combobox) page for more information.\n\n## Changelog\n\n### 2024-10-30 Classes for icons\n\n- Added `gap-2 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0` to the `<Command.Item>` component to automatically style the icons inside.\n"
  },
  {
    "path": "docs/content/components/context-menu.md",
    "content": "---\ntitle: Context Menu\ndescription: Displays a menu to the user — such as a set of actions or functions — triggered by right click.\ncomponent: true\nlinks:\n  source: https://github.com/huntabyte/shadcn-svelte/tree/next/sites/docs/src/lib/registry/ui/context-menu\n  doc: https://bits-ui.com/docs/components/context-menu\n  api: https://bits-ui.com/docs/components/context-menu#api-reference\n---\n\n<script>\n\timport ComponentPreview from \"$lib/components/component-preview.svelte\";\n\timport ComponentSource from \"$lib/components/component-source.svelte\";\n\timport PMAddComp from \"$lib/components/pm-add-comp.svelte\";\n\timport PMInstall from \"$lib/components/pm-install.svelte\";\n\timport Steps from \"$lib/components/steps.svelte\";\n\timport Step from \"$lib/components/step.svelte\";\n\timport InstallTabs from \"$lib/components/install-tabs.svelte\";\n\n\tlet { viewerData } = $props();\n</script>\n\n<ComponentPreview name=\"context-menu-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n## Installation\n\n<InstallTabs>\n{#snippet cli()}\n<PMAddComp name=\"context-menu\" />\n{/snippet}\n{#snippet manual()}\n<Steps>\n\n<Step>\n\nInstall `bits-ui`:\n\n</Step>\n\n<PMInstall command=\"bits-ui -D\" />\n\n<Step>\n\nCopy and paste the following code into your project.\n\n</Step>\n{#if viewerData}\n\t<ComponentSource item={viewerData} data-llm-ignore/>\n{/if}\n\n</Steps>\n{/snippet}\n</InstallTabs>\n\n## Usage\n\n```svelte showLineNumbers\n<script lang=\"ts\">\n  import * as ContextMenu from \"$lib/components/ui/context-menu/index.js\";\n</script>\n```\n\n```svelte showLineNumbers\n<ContextMenu.Root>\n  <ContextMenu.Trigger>Right click</ContextMenu.Trigger>\n  <ContextMenu.Content>\n    <ContextMenu.Item>Profile</ContextMenu.Item>\n    <ContextMenu.Item>Billing</ContextMenu.Item>\n    <ContextMenu.Item>Team</ContextMenu.Item>\n    <ContextMenu.Item>Subscription</ContextMenu.Item>\n  </ContextMenu.Content>\n</ContextMenu.Root>\n```\n"
  },
  {
    "path": "docs/content/components/data-table.md",
    "content": "---\ntitle: Data Table\ndescription: Powerful table and datagrids built using TanStack Table.\ncomponent: true\nlinks:\n  source: https://github.com/huntabyte/shadcn-svelte/tree/next/sites/docs/src/lib/registry/ui/data-table\n  doc: https://tanstack.com/table/v8/docs/introduction\n---\n\n<script>\n\timport ComponentPreview from \"$lib/components/component-preview.svelte\";\n\timport Callout from \"$lib/components/callout.svelte\";\n\timport PMAddComp from \"$lib/components/pm-add-comp.svelte\";\n\timport PMInstall from \"$lib/components/pm-install.svelte\";\n\timport Steps from \"$lib/components/steps.svelte\";\n\timport Step from \"$lib/components/step.svelte\";\n</script>\n\n<ComponentPreview name=\"data-table-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n## Introduction\n\nData tables are difficult to componentize because of the wide variety of features they support, and the uniqueness of every data set.\n\nSo instead of trying to create a one-size-fits-all solution, we've created a guide to help you build your own data tables.\n\nWe'll start with the basic `<Table />` component, and work our way up to a fully-featured data table.\n\n<Callout>\n\nTip: If you find yourself using the same table in multiple places, you can always extract it into a reusable component.\n\n</Callout>\n\n## Table of Contents\n\nThis guide will show you how to use [TanStack Table](https://tanstack.com/table) and the `<Table />` component to build your own custom data table. We'll cover the following topics:\n\n- [Basic Table](#basic-table)\n- [Row Actions](#row-actions)\n- [Pagination](#pagination)\n- [Sorting](#sorting)\n- [Filtering](#filtering)\n- [Visibility](#visibility)\n- [Row Selection](#row-selection)\n- [Reusable Components](#reusable-components)\n\n## Installation\n\n1. Add the `<Table />` component to your project along with the `data-table` helpers. These helpers enable TanStack Table v8 to work with Svelte 5 Snippets, Components, etc.\n\n<PMAddComp name=\"table data-table\" />\n\n2. Add `@tanstack/table-core` as a dependency:\n\n<PMInstall command=\"@tanstack/table-core\" />\n\n## Prerequisites\n\nWe're going to build a table to show recent payments. Here's what our data looks like:\n\n```ts showLineNumbers\ntype Payment = {\n  id: string;\n  amount: number;\n  status: \"pending\" | \"processing\" | \"success\" | \"failed\";\n  email: string;\n};\n\nexport const data: Payment[] = [\n  {\n    id: \"728ed52f\",\n    amount: 100,\n    status: \"pending\",\n    email: \"m@example.com\",\n  },\n  {\n    id: \"489e1d42\",\n    amount: 125,\n    status: \"processing\",\n    email: \"example@gmail.com\",\n  },\n  // ...\n];\n```\n\n## Project Structure\n\nStart by creating a route where your data table will live (we'll call ours payments), along with the following files:\n\n```txt\nroutes\n└── payments\n\t├── columns.ts\n    ├── data-table.svelte\n    ├── data-table-actions.svelte\n    ├── data-table-checkbox.svelte\n\t├── data-table-email-button.svelte\n    └── +page.svelte\n```\n\n- `columns.ts` will contain our column definitions.\n- `data-table.svelte` will contain the `<Table />` component and the complete `<DataTable />` component.\n- `data-table-actions.svelte` will contain the actions menu for each row.\n- `data-table-checkbox.svelte` will contain the checkbox for each row.\n- `data-table-email-button.svelte` will contain the sortable email header button.\n- `+page.svelte` is where we'll render and access `<DataTable />` component.\n\n## Basic Table\n\nLet's start by building a basic table.\n\n<Steps>\n\n### Column Definitions\n\nFirst, we'll define our columns.\n\n```ts showLineNumbers {1,12-25} title=\"routes/payments/columns.ts\"\nimport type { ColumnDef } from \"@tanstack/table-core\";\n\n// This type is used to define the shape of our data.\n// You can use a Zod schema here if you want.\nexport type Payment = {\n  id: string;\n  amount: number;\n  status: \"pending\" | \"processing\" | \"success\" | \"failed\";\n  email: string;\n};\n\nexport const columns: ColumnDef<Payment>[] = [\n  {\n    accessorKey: \"status\",\n    header: \"Status\",\n  },\n  {\n    accessorKey: \"email\",\n    header: \"Email\",\n  },\n  {\n    accessorKey: \"amount\",\n    header: \"Amount\",\n  },\n];\n```\n\n<Callout class=\"mt-4\">\n\n**Note:** Columns are where you define the core of what your table will look like. They define the data that will be displayed, how it will be formatted, sorted and filtered.\n\n</Callout>\n\n### `<DataTable />` Component\n\nNext, we'll create a `<DataTable />` component to render our table.\n\n```svelte showLineNumbers title=\"routes/payments/data-table.svelte\"\n<script lang=\"ts\" generics=\"TData, TValue\">\n  import { type ColumnDef, getCoreRowModel } from \"@tanstack/table-core\";\n  import {\n    createSvelteTable,\n    FlexRender,\n  } from \"$lib/components/ui/data-table/index.js\";\n  import * as Table from \"$lib/components/ui/table/index.js\";\n\n  type DataTableProps<TData, TValue> = {\n    columns: ColumnDef<TData, TValue>[];\n    data: TData[];\n  };\n\n  let { data, columns }: DataTableProps<TData, TValue> = $props();\n\n  const table = createSvelteTable({\n    get data() {\n      return data;\n    },\n    columns,\n    getCoreRowModel: getCoreRowModel(),\n  });\n</script>\n\n<div class=\"rounded-md border\">\n  <Table.Root>\n    <Table.Header>\n      {#each table.getHeaderGroups() as headerGroup (headerGroup.id)}\n        <Table.Row>\n          {#each headerGroup.headers as header (header.id)}\n            <Table.Head colspan={header.colSpan}>\n              {#if !header.isPlaceholder}\n                <FlexRender\n                  content={header.column.columnDef.header}\n                  context={header.getContext()}\n                />\n              {/if}\n            </Table.Head>\n          {/each}\n        </Table.Row>\n      {/each}\n    </Table.Header>\n    <Table.Body>\n      {#each table.getRowModel().rows as row (row.id)}\n        <Table.Row data-state={row.getIsSelected() && \"selected\"}>\n          {#each row.getVisibleCells() as cell (cell.id)}\n            <Table.Cell>\n              <FlexRender\n                content={cell.column.columnDef.cell}\n                context={cell.getContext()}\n              />\n            </Table.Cell>\n          {/each}\n        </Table.Row>\n      {:else}\n        <Table.Row>\n          <Table.Cell colspan={columns.length} class=\"h-24 text-center\">\n            No results.\n          </Table.Cell>\n        </Table.Row>\n      {/each}\n    </Table.Body>\n  </Table.Root>\n</div>\n```\n\n<Callout>\n\n**Tip**: If you find yourself using `<DataTable />` in multiple places, this is the component you could make reusable by extracting it to `components/ui/data-table.svelte`.\n\n`<DataTable columns={columns} data={data} />`\n\n</Callout>\n\n### Render the table\n\nFinally, we'll render our table in our page component.\n\n```ts showLineNumbers title=\"routes/payments/+page.server.ts\"\nexport async function load() {\n  // logic to fetch payments data here\n  const payments = await getPayments();\n  return {\n    payments,\n  };\n}\n```\n\n```svelte showLineNumbers {8} title=\"routes/payments/+page.svelte\"\n<script lang=\"ts\">\n  import DataTable from \"./data-table.svelte\";\n  import { columns } from \"./columns.js\";\n\n  let { data } = $props();\n</script>\n\n<DataTable data={data.payments} {columns} />\n```\n\n</Steps>\n\n## Cell Formatting\n\nLet's format the amount cell to display the dollar amount. We'll also align the cell to the right.\n\n<Steps>\n\n### Update columns definition\n\nUpdate the `header` and `cell` definitions for amount as follows:\n\n```ts showLineNumbers title=\"routes/payments/columns.ts\"\nimport type { ColumnDef } from \"@tanstack/table-core\";\nimport { createRawSnippet } from \"svelte\";\nimport { renderSnippet } from \"$lib/components/ui/data-table/index.js\";\n\nexport const columns: ColumnDef<Payment>[] = [\n  {\n    accessorKey: \"amount\",\n    header: () => {\n      const amountHeaderSnippet = createRawSnippet(() => ({\n        render: () => `<div class=\"text-end\">Amount</div>`,\n      }));\n      return renderSnippet(amountHeaderSnippet);\n    },\n    cell: ({ row }) => {\n      const formatter = new Intl.NumberFormat(\"en-US\", {\n        style: \"currency\",\n        currency: \"USD\",\n      });\n\n      const amountCellSnippet = createRawSnippet<[{ amount: number }]>(\n        (getAmount) => {\n          const { amount } = getAmount();\n          const formatted = formatter.format(amount);\n          return {\n            render: () =>\n              `<div class=\"text-end font-medium\">${formatted}</div>`,\n          };\n        }\n      );\n\n      return renderSnippet(amountCellSnippet, {\n        amount: row.original.amount,\n      });\n    },\n  },\n];\n```\n\nWe're using the `createRawSnippet` function to create a Svelte Snippet for rendering simple HTML elements that don't require full lifecycle and state capabilities like a component. We then use the `renderSnippet` helper function to render the snippet.\n\nYou can use the same approach to format other cells and headers.\n\n</Steps>\n\n## Row Actions\n\nLet's add row actions to our table. We'll use the `<DropdownMenu />` and the `<Button />` components for this, so you have install them if not done already:\n\n<PMAddComp name=\"button dropdown-menu\" />\n\n<Steps>\n\n### Create actions component\n\nWe'll start by defining the actions menu in our `data-table-actions.svelte` component.\n\n```svelte showLineNumbers title=\"routes/payments/data-table-actions.svelte\"\n<script lang=\"ts\">\n  import EllipsisIcon from \"@lucide/svelte/icons/ellipsis\";\n  import { Button } from \"$lib/components/ui/button/index.js\";\n  import * as DropdownMenu from \"$lib/components/ui/dropdown-menu/index.js\";\n\n  let { id }: { id: string } = $props();\n</script>\n\n<DropdownMenu.Root>\n  <DropdownMenu.Trigger>\n    {#snippet child({ props })}\n      <Button\n        {...props}\n        variant=\"ghost\"\n        size=\"icon\"\n        class=\"relative size-8 p-0\"\n      >\n        <span class=\"sr-only\">Open menu</span>\n        <EllipsisIcon />\n      </Button>\n    {/snippet}\n  </DropdownMenu.Trigger>\n  <DropdownMenu.Content>\n    <DropdownMenu.Group>\n      <DropdownMenu.Label>Actions</DropdownMenu.Label>\n      <DropdownMenu.Item onclick={() => navigator.clipboard.writeText(id)}>\n        Copy payment ID\n      </DropdownMenu.Item>\n    </DropdownMenu.Group>\n    <DropdownMenu.Separator />\n    <DropdownMenu.Item>View customer</DropdownMenu.Item>\n    <DropdownMenu.Item>View payment details</DropdownMenu.Item>\n  </DropdownMenu.Content>\n</DropdownMenu.Root>\n```\n\n### Update columns definition\n\nNow that we've defined the `<DataTableActions />` component, let's update our `actions` column definition to use it.\n\n```ts showLineNumbers title=\"routes/payments/columns.ts\"\nimport type { ColumnDef } from \"@tanstack/table-core\";\nimport { renderComponent } from \"$lib/components/ui/data-table/index.js\";\nimport DataTableActions from \"./data-table-actions.svelte\";\n\nexport const columns: ColumnDef<Payment>[] = [\n  // ...\n  {\n    id: \"actions\",\n    cell: ({ row }) => {\n      // You can pass whatever you need from `row.original` to the component\n      return renderComponent(DataTableActions, { id: row.original.id });\n    },\n  },\n];\n```\n\nYou can access the row data using `row.original` in the `cell` function. Use this to handle actions for your row eg. use the `id` to make a DELETE call to your API.\n\n</Steps>\n\n## Pagination\n\nNext, we'll add pagination to our table.\n\n<Steps>\n\n### Update `<DataTable />`\n\n```svelte showLineNumbers title=\"routes/payments/data-table.svelte\"\n<script lang=\"ts\" generics=\"TData, TValue\">\n  import {\n    type ColumnDef,\n    type PaginationState,\n    getCoreRowModel,\n    getPaginationRowModel,\n  } from \"@tanstack/table-core\";\n\n  type DataTableProps<TData, TValue> = {\n    data: TData[];\n    columns: ColumnDef<TData, TValue>[];\n  };\n\n  let { data, columns }: DataTableProps<TData, TValue> = $props();\n\n  let pagination = $state<PaginationState>({ pageIndex: 0, pageSize: 10 });\n\n  const table = createSvelteTable({\n    get data() {\n      return data;\n    },\n    columns,\n    state: {\n      get pagination() {\n        return pagination;\n      },\n    },\n    onPaginationChange: (updater) => {\n      if (typeof updater === \"function\") {\n        pagination = updater(pagination);\n      } else {\n        pagination = updater;\n      }\n    },\n    getCoreRowModel: getCoreRowModel(),\n    getPaginationRowModel: getPaginationRowModel(),\n  });\n</script>\n```\n\nThis will automatically paginate your rows into pages of 10. See the [pagination docs](https://tanstack.com/table/v8/docs/api/features/pagination) for more information on customizing page size and implementing manual pagination.\n\n### Adding pagination controls\n\nWe can add pagination controls to our table using the `<Button />` component and the `table.previousPage()`, `table.nextPage()` API methods.\n\n```svelte showLineNumbers title=\"routes/payments/data-table.svelte\"\n<script lang=\"ts\" generics=\"TData, TValue\">\n  import { Button } from \"$lib/components/ui/button/index.js\";\n\n  let { columns, data }: DataTableProps<TData, TValue> = $props();\n\n  let pagination = $state<PaginationState>({ pageIndex: 0, pageSize: 10 });\n\n  const table = createSvelteTable({\n    get data() {\n      return data;\n    },\n    columns,\n    state: {\n      get pagination() {\n        return pagination;\n      },\n    },\n    onPaginationChange: (updater) => {\n      if (typeof updater === \"function\") {\n        pagination = updater(pagination);\n      } else {\n        pagination = updater;\n      }\n    },\n    getCoreRowModel: getCoreRowModel(),\n    getPaginationRowModel: getPaginationRowModel(),\n  });\n</script>\n\n<div>\n  <div class=\"rounded-md border\">\n    <Table.Root>\n      <!--- ... table implementation -->\n    </Table.Root>\n  </div>\n  <div class=\"flex items-center justify-end space-x-2 py-4\">\n    <Button\n      variant=\"outline\"\n      size=\"sm\"\n      onclick={() => table.previousPage()}\n      disabled={!table.getCanPreviousPage()}\n    >\n      Previous\n    </Button>\n    <Button\n      variant=\"outline\"\n      size=\"sm\"\n      onclick={() => table.nextPage()}\n      disabled={!table.getCanNextPage()}\n    >\n      Next\n    </Button>\n  </div>\n</div>\n```\n\nSee [Reusable Components](#reusable-components) section for a more advanced pagination component.\n\n</Steps>\n\n## Sorting\n\nLet's make the email column sortable.\n\n<Steps>\n\n### Define `<DataTableEmailButton />` component\n\nWe'll start by creating a component to render a sortable email header button.\n\n```svelte showLineNumbers title=\"routes/payments/data-table-email-button.svelte\"\n<script lang=\"ts\">\n  import type { ComponentProps } from \"svelte\";\n  import ArrowUpDownIcon from \"@lucide/svelte/icons/arrow-up-down\";\n  import { Button } from \"$lib/components/ui/button/index.js\";\n\n  let { variant = \"ghost\", ...restProps }: ComponentProps<typeof Button> =\n    $props();\n</script>\n\n<Button {variant} {...restProps}>\n  Email\n  <ArrowUpDownIcon class=\"ms-2\" />\n</Button>\n```\n\n### Update `<DataTable />`\n\n```svelte showLineNumbers title=\"routes/payments/data-table.svelte\"\n<script lang=\"ts\" generics=\"TData, TValue\">\n  import {\n    type ColumnDef,\n    type PaginationState,\n    type SortingState,\n    getCoreRowModel,\n    getPaginationRowModel,\n    getSortedRowModel,\n  } from \"@tanstack/table-core\";\n\n  let { columns, data }: DataTableProps<TData, TValue> = $props();\n\n  let pagination = $state<PaginationState>({ pageIndex: 0, pageSize: 10 });\n  let sorting = $state<SortingState>([]);\n\n  const table = createSvelteTable({\n    get data() {\n      return data;\n    },\n    columns,\n    getCoreRowModel: getCoreRowModel(),\n    getPaginationRowModel: getPaginationRowModel(),\n    getSortedRowModel: getSortedRowModel(),\n    onSortingChange: (updater) => {\n      if (typeof updater === \"function\") {\n        sorting = updater(sorting);\n      } else {\n        sorting = updater;\n      }\n    },\n    onPaginationChange: (updater) => {\n      if (typeof updater === \"function\") {\n        pagination = updater(pagination);\n      } else {\n        pagination = updater;\n      }\n    },\n    state: {\n      get pagination() {\n        return pagination;\n      },\n      get sorting() {\n        return sorting;\n      },\n    },\n  });\n</script>\n```\n\n### Make header cell sortable\n\nWe can now update the `email` header cell to add sorting controls.\n\n```ts showLineNumbers title=\"src/routes/payments/columns.ts\"\nimport type { ColumnDef } from \"@tanstack/table-core\";\nimport { renderComponent } from \"$lib/components/ui/data-table/index.js\";\nimport DataTableEmailButton from \"./data-table-email-button.svelte\";\n\nexport const columns: ColumnDef<Payment>[] = [\n  // ...\n  {\n    accessorKey: \"email\",\n    header: ({ column }) =>\n      renderComponent(DataTableEmailButton, {\n        onclick: column.getToggleSortingHandler(),\n      }),\n  },\n];\n```\n\nThis will automatically sort the table (asc and desc) when the user toggles on the header cell.\n\n</Steps>\n\n## Filtering\n\nLet's add a search input to filter emails in our table.\n\n<Steps>\n\n### Update `<DataTable />`\n\n```svelte showLineNumbers title=\"routes/payments/data-table.svelte\"\n<script lang=\"ts\" generics=\"TData, TValue\">\n  import {\n    type ColumnDef,\n    type PaginationState,\n    type SortingState,\n    type ColumnFiltersState,\n    getCoreRowModel,\n    getPaginationRowModel,\n    getSortedRowModel,\n    getFilteredRowModel,\n  } from \"@tanstack/table-core\";\n  import { Input } from \"$lib/components/ui/input/index.js\";\n\n  let { columns, data }: DataTableProps<TData, TValue> = $props();\n\n  let pagination = $state<PaginationState>({ pageIndex: 0, pageSize: 10 });\n  let sorting = $state<SortingState>([]);\n  let columnFilters = $state<ColumnFiltersState>([]);\n\n  const table = createSvelteTable({\n    get data() {\n      return data;\n    },\n    columns,\n    getCoreRowModel: getCoreRowModel(),\n    getPaginationRowModel: getPaginationRowModel(),\n    getSortedRowModel: getSortedRowModel(),\n    getFilteredRowModel: getFilteredRowModel(),\n    onPaginationChange: (updater) => {\n      if (typeof updater === \"function\") {\n        pagination = updater(pagination);\n      } else {\n        pagination = updater;\n      }\n    },\n    onSortingChange: (updater) => {\n      if (typeof updater === \"function\") {\n        sorting = updater(sorting);\n      } else {\n        sorting = updater;\n      }\n    },\n    onColumnFiltersChange: (updater) => {\n      if (typeof updater === \"function\") {\n        columnFilters = updater(columnFilters);\n      } else {\n        columnFilters = updater;\n      }\n    },\n    state: {\n      get pagination() {\n        return pagination;\n      },\n      get sorting() {\n        return sorting;\n      },\n      get columnFilters() {\n        return columnFilters;\n      },\n    },\n  });\n</script>\n\n<div>\n  <div class=\"flex items-center py-4\">\n    <Input\n      placeholder=\"Filter emails...\"\n      value={(table.getColumn(\"email\")?.getFilterValue() as string) ?? \"\"}\n      onchange={(e) => {\n        table.getColumn(\"email\")?.setFilterValue(e.currentTarget.value);\n      }}\n      oninput={(e) => {\n        table.getColumn(\"email\")?.setFilterValue(e.currentTarget.value);\n      }}\n      class=\"max-w-sm\"\n    />\n  </div>\n  <div class=\"rounded-md border\">\n    <Table.Root><!-- ... --></Table.Root>\n  </div>\n</div>\n```\n\nFiltering is now enabled for the `email` column. You can add filters to other columns as well. See the [filtering docs](https://tanstack.com/table/v8/docs/guide/filters) for more information on customizing filters.\n\n</Steps>\n\n## Visibility\n\nAdding column visibility is fairly simple using `@tanstack/table-core` visibility API.\n\n<Steps>\n\n### Update `<DataTable />`\n\n```svelte showLineNumbers title=\"routes/payments/data-table.svelte\"\n<script lang=\"ts\" generics=\"TData, TValue\">\n  import {\n    type ColumnDef,\n    type PaginationState,\n    type SortingState,\n    type ColumnFiltersState,\n    type VisibilityState,\n    getCoreRowModel,\n    getPaginationRowModel,\n    getSortedRowModel,\n    getFilteredRowModel,\n  } from \"@tanstack/table-core\";\n  import * as DropdownMenu from \"$lib/components/ui/dropdown-menu/index.js\";\n\n  let { columns, data }: DataTableProps<TData, TValue> = $props();\n\n  let pagination = $state<PaginationState>({ pageIndex: 0, pageSize: 10 });\n  let sorting = $state<SortingState>([]);\n  let columnFilters = $state<ColumnFiltersState>([]);\n  let columnVisibility = $state<VisibilityState>({});\n\n  const table = createSvelteTable({\n    get data() {\n      return data;\n    },\n    columns,\n    getCoreRowModel: getCoreRowModel(),\n    getPaginationRowModel: getPaginationRowModel(),\n    getSortedRowModel: getSortedRowModel(),\n    getFilteredRowModel: getFilteredRowModel(),\n    onPaginationChange: (updater) => {\n      if (typeof updater === \"function\") {\n        pagination = updater(pagination);\n      } else {\n        pagination = updater;\n      }\n    },\n    onSortingChange: (updater) => {\n      if (typeof updater === \"function\") {\n        sorting = updater(sorting);\n      } else {\n        sorting = updater;\n      }\n    },\n    onColumnFiltersChange: (updater) => {\n      if (typeof updater === \"function\") {\n        columnFilters = updater(columnFilters);\n      } else {\n        columnFilters = updater;\n      }\n    },\n    onColumnVisibilityChange: (updater) => {\n      if (typeof updater === \"function\") {\n        columnVisibility = updater(columnVisibility);\n      } else {\n        columnVisibility = updater;\n      }\n    },\n    state: {\n      get pagination() {\n        return pagination;\n      },\n      get sorting() {\n        return sorting;\n      },\n      get columnFilters() {\n        return columnFilters;\n      },\n      get columnVisibility() {\n        return columnVisibility;\n      },\n    },\n  });\n</script>\n\n<div>\n  <div class=\"flex items-center py-4\">\n    <Input\n      placeholder=\"Filter emails...\"\n      value={table.getColumn(\"email\")?.getFilterValue() as string}\n      onchange={(e) =>\n        table.getColumn(\"email\")?.setFilterValue(e.currentTarget.value)}\n      oninput={(e) =>\n        table.getColumn(\"email\")?.setFilterValue(e.currentTarget.value)}\n      class=\"max-w-sm\"\n    />\n    <DropdownMenu.Root>\n      <DropdownMenu.Trigger>\n        {#snippet child({ props })}\n          <Button {...props} variant=\"outline\" class=\"ms-auto\">Columns</Button>\n        {/snippet}\n      </DropdownMenu.Trigger>\n      <DropdownMenu.Content align=\"end\">\n        {#each table\n          .getAllColumns()\n          .filter((col) => col.getCanHide()) as column (column.id)}\n          <DropdownMenu.CheckboxItem\n            class=\"capitalize\"\n            bind:checked={\n              () => column.getIsVisible(), (v) => column.toggleVisibility(!!v)\n            }\n          >\n            {column.id}\n          </DropdownMenu.CheckboxItem>\n        {/each}\n      </DropdownMenu.Content>\n    </DropdownMenu.Root>\n  </div>\n  <div class=\"rounded-md border\">\n    <Table.Root><!--...--></Table.Root>\n  </div>\n</div>\n```\n\nThis adds a dropdown menu that you can use to toggle column visibility.\n\n</Steps>\n\n## Row Selection\n\nNext, we're going to add row selection to our table.\n\n<Steps>\n\n### Define `<DataTableCheckbox />` component\n\nWe'll start by defining the checkbox component in our `data-table-checkbox.svelte` component.\n\n```svelte showLineNumbers title=\"routes/payments/data-table-checkbox.svelte\"\n<script lang=\"ts\">\n  import type { ComponentProps } from \"svelte\";\n  import { Checkbox } from \"$lib/components/ui/checkbox/index.js\";\n\n  let {\n    checked = false,\n    onCheckedChange = (v) => (checked = v),\n    ...restProps\n  }: ComponentProps<typeof Checkbox> = $props();\n</script>\n\n<Checkbox bind:checked={() => checked, onCheckedChange} {...restProps} />\n```\n\n### Update columns definition\n\nNow that we have a new component, we can add a `select` column definition to render a checkbox.\n\n```ts showLineNumbers title=\"routes/payments/columns.ts\"\nimport type { ColumnDef } from \"@tanstack/table-core\";\nimport { renderComponent } from \"$lib/components/ui/data-table/index.js\";\nimport { Checkbox } from \"$lib/components/ui/checkbox/index.js\";\n\nexport const columns: ColumnDef<Payment>[] = [\n  // ...\n  {\n    id: \"select\",\n    header: ({ table }) =>\n      renderComponent(Checkbox, {\n        checked: table.getIsAllPageRowsSelected(),\n        indeterminate:\n          table.getIsSomePageRowsSelected() &&\n          !table.getIsAllPageRowsSelected(),\n        onCheckedChange: (value) => table.toggleAllPageRowsSelected(!!value),\n        \"aria-label\": \"Select all\",\n      }),\n    cell: ({ row }) =>\n      renderComponent(Checkbox, {\n        checked: row.getIsSelected(),\n        onCheckedChange: (value) => row.toggleSelected(!!value),\n        \"aria-label\": \"Select row\",\n      }),\n    enableSorting: false,\n    enableHiding: false,\n  },\n];\n```\n\n### Update `<DataTable />`\n\n```svelte showLineNumbers title=\"routes/payments/data-table.svelte\"\n<script lang=\"ts\" generics=\"TData, TValue\">\n  import {\n    type ColumnDef,\n    type PaginationState,\n    type SortingState,\n    type ColumnFiltersState,\n    type VisibilityState,\n    type RowSelectionState,\n    getCoreRowModel,\n    getPaginationRowModel,\n    getSortedRowModel,\n    getFilteredRowModel,\n  } from \"@tanstack/table-core\";\n  import * as DropdownMenu from \"$lib/components/ui/dropdown-menu/index.js\";\n\n  let { columns, data }: DataTableProps<TData, TValue> = $props();\n\n  let pagination = $state<PaginationState>({ pageIndex: 0, pageSize: 10 });\n  let sorting = $state<SortingState>([]);\n  let columnFilters = $state<ColumnFiltersState>([]);\n  let columnVisibility = $state<VisibilityState>({});\n  let rowSelection = $state<RowSelectionState>({});\n\n  const table = createSvelteTable({\n    get data() {\n      return data;\n    },\n    columns,\n    getCoreRowModel: getCoreRowModel(),\n    getPaginationRowModel: getPaginationRowModel(),\n    getSortedRowModel: getSortedRowModel(),\n    getFilteredRowModel: getFilteredRowModel(),\n    onPaginationChange: (updater) => {\n      if (typeof updater === \"function\") {\n        pagination = updater(pagination);\n      } else {\n        pagination = updater;\n      }\n    },\n    onSortingChange: (updater) => {\n      if (typeof updater === \"function\") {\n        sorting = updater(sorting);\n      } else {\n        sorting = updater;\n      }\n    },\n    onColumnFiltersChange: (updater) => {\n      if (typeof updater === \"function\") {\n        columnFilters = updater(columnFilters);\n      } else {\n        columnFilters = updater;\n      }\n    },\n    onColumnVisibilityChange: (updater) => {\n      if (typeof updater === \"function\") {\n        columnVisibility = updater(columnVisibility);\n      } else {\n        columnVisibility = updater;\n      }\n    },\n    onRowSelectionChange: (updater) => {\n      if (typeof updater === \"function\") {\n        rowSelection = updater(rowSelection);\n      } else {\n        rowSelection = updater;\n      }\n    },\n    state: {\n      get pagination() {\n        return pagination;\n      },\n      get sorting() {\n        return sorting;\n      },\n      get columnFilters() {\n        return columnFilters;\n      },\n      get columnVisibility() {\n        return columnVisibility;\n      },\n      get rowSelection() {\n        return rowSelection;\n      },\n    },\n  });\n</script>\n```\n\nThis adds a checkbox to each row and a checkbox in the header to select all rows.\n\n### Show selected rows\n\nYou can show the number of selected rows using the `table.getFilteredSelectedRowModel()` API.\n\n```svelte\n<div class=\"text-muted-foreground flex-1 text-sm\">\n  {table.getFilteredSelectedRowModel().rows.length} of{\" \"}\n  {table.getFilteredRowModel().rows.length} row(s) selected.\n</div>\n```\n\n</Steps>\n\n## Reusable Components\n\nCheck out the [Tasks](/examples/tasks) example to learn about creating reusable components for your data tables.\n"
  },
  {
    "path": "docs/content/components/date-picker.md",
    "content": "---\ntitle: Date Picker\ndescription: A date picker component with range and presets.\ncomponent: true\nlinks:\n  source: https://github.com/huntabyte/shadcn-svelte/tree/next/sites/docs/src/lib/registry/examples/date-picker-demo.svelte\n---\n\n<script>\n\timport ComponentPreview from \"$lib/components/component-preview.svelte\";\n</script>\n\n<ComponentPreview name=\"calendar-22\">\n\n<div></div>\n\n</ComponentPreview>\n\n## Installation\n\nThe Date Picker is built using a composition of the `<Popover />` and either the `<Calendar />` or `<RangeCalendar />` components.\n\nSee installations instructions for the [Popover](/docs/components/popover#installation), [Calendar](/docs/components/calendar#installation), and [Range Calendar](/docs/components/range-calendar#installation) components.\n\n## Usage\n\n```svelte showLineNumbers title=\"lib/components/example-date-picker.svelte\"\n<script lang=\"ts\">\n  import CalendarIcon from \"@lucide/svelte/icons/calendar\";\n  import {\n    type DateValue,\n    DateFormatter,\n    getLocalTimeZone,\n  } from \"@internationalized/date\";\n  import { cn } from \"$lib/utils.js\";\n  import { Button } from \"$lib/components/ui/button/index.js\";\n  import { Calendar } from \"$lib/components/ui/calendar/index.js\";\n  import * as Popover from \"$lib/components/ui/popover/index.js\";\n\n  const df = new DateFormatter(\"en-US\", {\n    dateStyle: \"long\",\n  });\n\n  let value = $state<DateValue>();\n</script>\n\n<Popover.Root>\n  <Popover.Trigger>\n    {#snippet child({ props })}\n      <Button\n        variant=\"outline\"\n        class={cn(\n          \"w-[280px] justify-start text-start font-normal\",\n          !value && \"text-muted-foreground\"\n        )}\n        {...props}\n      >\n        <CalendarIcon class=\"me-2 size-4\" />\n        {value ? df.format(value.toDate(getLocalTimeZone())) : \"Select a date\"}\n      </Button>\n    {/snippet}\n  </Popover.Trigger>\n  <Popover.Content class=\"w-auto p-0\">\n    <Calendar bind:value type=\"single\" initialFocus captionLayout=\"dropdown\" />\n  </Popover.Content>\n</Popover.Root>\n```\n\n## Examples\n\n### Date of Birth Picker\n\n<ComponentPreview name=\"calendar-22\" description=\"A calendar with date of birth picker.\" >\n\n<div></div>\n\n</ComponentPreview>\n\n### Picker with Input\n\n<!--need to fix code not showing due to type-->\n\n<ComponentPreview name=\"calendar-28\" description=\"A calendar with input and picker.\" >\n\n<div></div>\n\n</ComponentPreview>\n\n### Date and Time Picker\n\n<ComponentPreview name=\"calendar-24\" description=\"A calendar with date and time picker.\" >\n<div></div>\n\n</ComponentPreview>\n\n### Natural Language Picker\n\nThis component uses the `chrono-node` library to parse natural language dates.\n\n<ComponentPreview name=\"calendar-29\" description=\"A calendar with natural language picker.\">\n\n<div></div>\n\n</ComponentPreview>\n"
  },
  {
    "path": "docs/content/components/dialog.md",
    "content": "---\ntitle: Dialog\ndescription: A window overlaid on either the primary window or another dialog window, rendering the content underneath inert.\ncomponent: true\nlinks:\n  source: https://github.com/huntabyte/shadcn-svelte/tree/next/sites/docs/src/lib/registry/ui/dialog\n  doc: https://bits-ui.com/docs/components/dialog\n  api: https://bits-ui.com/docs/components/dialog#api-reference\n---\n\n<script>\n\timport ComponentPreview from \"$lib/components/component-preview.svelte\";\n\timport ComponentSource from \"$lib/components/component-source.svelte\";\n\timport PMAddComp from \"$lib/components/pm-add-comp.svelte\";\n\timport PMInstall from \"$lib/components/pm-install.svelte\";\n\timport Steps from \"$lib/components/steps.svelte\";\n\timport Step from \"$lib/components/step.svelte\";\n\timport InstallTabs from \"$lib/components/install-tabs.svelte\";\n\n\tlet { viewerData } = $props();\n</script>\n\n<ComponentPreview name=\"dialog-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n## Installation\n\n<InstallTabs>\n{#snippet cli()}\n<PMAddComp name=\"dialog\" />\n{/snippet}\n{#snippet manual()}\n<Steps>\n\n<Step>\n\nInstall `bits-ui`:\n\n</Step>\n\n<PMInstall command=\"bits-ui -D\" />\n\n<Step>\n\nCopy and paste the following code into your project.\n\n</Step>\n{#if viewerData}\n\t<ComponentSource item={viewerData} data-llm-ignore/>\n{/if}\n\n</Steps>\n{/snippet}\n</InstallTabs>\n\n## Usage\n\n```svelte showLineNumbers\n<script lang=\"ts\">\n  import * as Dialog from \"$lib/components/ui/dialog/index.js\";\n</script>\n```\n\n```svelte showLineNumbers\n<Dialog.Root>\n  <Dialog.Trigger>Open</Dialog.Trigger>\n  <Dialog.Content>\n    <Dialog.Header>\n      <Dialog.Title>Are you sure absolutely sure?</Dialog.Title>\n      <Dialog.Description>\n        This action cannot be undone. This will permanently delete your account\n        and remove your data from our servers.\n      </Dialog.Description>\n    </Dialog.Header>\n  </Dialog.Content>\n</Dialog.Root>\n```\n\n## Examples\n\n### Custom close button\n\n<ComponentPreview name=\"dialog-close-button\" >\n\n<div></div>\n\n</ComponentPreview>\n\n<!-- Need to convert to svelte component\n## Notes\n\nTo use the `Dialog` component from within a `Context Menu` or `Dropdown Menu`, you must encase the `Context Menu` or\n`Dropdown Menu` component in the `Dialog` component.\n\n```tsx showLineNumbers title=\"components/example-dialog-context-menu.svelte\" {1, 26}\n<Dialog>\n  <ContextMenu>\n    <ContextMenuTrigger>Right click</ContextMenuTrigger>\n    <ContextMenuContent>\n      <ContextMenuItem>Open</ContextMenuItem>\n      <ContextMenuItem>Download</ContextMenuItem>\n      <DialogTrigger>\n        {#snippet child({ props })}\n          <ContextMenuItem {...props}>\n            <span>Delete</span>\n          </ContextMenuItem>\n        {/snippet}\n      </DialogTrigger>\n    </ContextMenuContent>\n  </ContextMenu>\n  <DialogContent>\n    <DialogHeader>\n      <DialogTitle>Are you absolutely sure?</DialogTitle>\n      <DialogDescription>\n        This action cannot be undone. Are you sure you want to permanently\n        delete this file from our servers?\n      </DialogDescription>\n    </DialogHeader>\n    <DialogFooter>\n      <Button type=\"submit\">Confirm</Button>\n    </DialogFooter>\n  </DialogContent>\n</Dialog>\n```\n-->\n"
  },
  {
    "path": "docs/content/components/drawer.md",
    "content": "---\ntitle: Drawer\ndescription: A drawer component for Svelte.\ncomponent: true\nlinks:\n  source: https://github.com/huntabyte/shadcn-svelte/tree/next/sites/docs/src/lib/registry/ui/drawer\n  doc: https://github.com/huntabyte/vaul-svelte\n---\n\n<script>\n\timport ComponentPreview from \"$lib/components/component-preview.svelte\";\n\timport ComponentSource from \"$lib/components/component-source.svelte\";\n\timport PMAddComp from \"$lib/components/pm-add-comp.svelte\";\n\timport PMInstall from \"$lib/components/pm-install.svelte\";\n\timport Steps from \"$lib/components/steps.svelte\";\n\timport Step from \"$lib/components/step.svelte\";\n\timport InstallTabs from \"$lib/components/install-tabs.svelte\";\n\n\tlet { viewerData } = $props();\n</script>\n\n<ComponentPreview name=\"drawer-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n## About\n\nDrawer is built on top of [Vaul Svelte](https://vaul-svelte.com), which is a Svelte port of [Vaul](https://vaul.emilkowal.ski) by [Emil Kowalski](https://twitter.com/emilkowalski_).\n\n## Installation\n\n<InstallTabs>\n{#snippet cli()}\n<PMAddComp name=\"drawer\" />\n{/snippet}\n{#snippet manual()}\n<Steps>\n\n<Step>\n\nInstall `vaul-svelte`:\n\n</Step>\n\n<PMInstall command=\"vaul-svelte@next -D\" />\n\n<Step>\n\nCopy and paste the following code into your project.\n\n</Step>\n{#if viewerData}\n\t<ComponentSource item={viewerData} data-llm-ignore/>\n{/if}\n\n</Steps>\n{/snippet}\n</InstallTabs>\n\n## Usage\n\n```svelte showLineNumbers\n<script lang=\"ts\">\n  import * as Drawer from \"$lib/components/ui/drawer/index.js\";\n</script>\n```\n\n```svelte showLineNumbers\n<Drawer.Root>\n  <Drawer.Trigger>Open</Drawer.Trigger>\n  <Drawer.Content>\n    <Drawer.Header>\n      <Drawer.Title>Are you sure absolutely sure?</Drawer.Title>\n      <Drawer.Description>This action cannot be undone.</Drawer.Description>\n    </Drawer.Header>\n    <Drawer.Footer>\n      <Button>Submit</Button>\n      <Drawer.Close>Cancel</Drawer.Close>\n    </Drawer.Footer>\n  </Drawer.Content>\n</Drawer.Root>\n```\n\n## Examples\n\n### Responsive Dialog\n\nYou can combine the `Dialog` and `Drawer` components to create a responsive dialog. This renders a `Dialog` on desktop and a `Drawer` on mobile.\n\n<ComponentPreview name=\"drawer-dialog\">\n\n<div></div>\n\n</ComponentPreview>\n"
  },
  {
    "path": "docs/content/components/dropdown-menu.md",
    "content": "---\ntitle: Dropdown Menu\ndescription: Displays a menu to the user — such as a set of actions or functions — triggered by a button.\ncomponent: true\nlinks:\n  source: https://github.com/huntabyte/shadcn-svelte/tree/next/sites/docs/src/lib/registry/ui/dropdown-menu\n  doc: https://bits-ui.com/docs/components/dropdown-menu\n  api: https://bits-ui.com/docs/components/dropdown-menu#api-reference\n---\n\n<script>\n\timport ComponentPreview from \"$lib/components/component-preview.svelte\";\n\timport ComponentSource from \"$lib/components/component-source.svelte\";\n\timport PMAddComp from \"$lib/components/pm-add-comp.svelte\";\n\timport PMInstall from \"$lib/components/pm-install.svelte\";\n\timport Steps from \"$lib/components/steps.svelte\";\n\timport Step from \"$lib/components/step.svelte\";\n\timport InstallTabs from \"$lib/components/install-tabs.svelte\";\n\n\tlet { viewerData } = $props();\n</script>\n\n<ComponentPreview name=\"dropdown-menu-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n## Installation\n\n<InstallTabs>\n{#snippet cli()}\n<PMAddComp name=\"dropdown-menu\" />\n{/snippet}\n{#snippet manual()}\n<Steps>\n\n<Step>\n\nInstall `bits-ui`:\n\n</Step>\n\n<PMInstall command=\"bits-ui -D\" />\n\n<Step>\n\nCopy and paste the following code into your project.\n\n</Step>\n{#if viewerData}\n\t<ComponentSource item={viewerData} data-llm-ignore/>\n{/if}\n\n</Steps>\n{/snippet}\n</InstallTabs>\n\n## Usage\n\n```svelte showLineNumbers\n<script lang=\"ts\">\n  import * as DropdownMenu from \"$lib/components/ui/dropdown-menu/index.js\";\n</script>\n```\n\n```svelte showLineNumbers\n<DropdownMenu.Root>\n  <DropdownMenu.Trigger>Open</DropdownMenu.Trigger>\n  <DropdownMenu.Content>\n    <DropdownMenu.Group>\n      <DropdownMenu.Label>My Account</DropdownMenu.Label>\n      <DropdownMenu.Separator />\n      <DropdownMenu.Item>Profile</DropdownMenu.Item>\n      <DropdownMenu.Item>Billing</DropdownMenu.Item>\n      <DropdownMenu.Item>Team</DropdownMenu.Item>\n      <DropdownMenu.Item>Subscription</DropdownMenu.Item>\n    </DropdownMenu.Group>\n  </DropdownMenu.Content>\n</DropdownMenu.Root>\n```\n\n## Examples\n\n### Checkboxes\n\n<ComponentPreview name=\"dropdown-menu-checkboxes\">\n\n<div></div>\n\n</ComponentPreview>\n\n### Radio Group\n\n<ComponentPreview name=\"dropdown-menu-radio-group\">\n\n<div></div>\n\n</ComponentPreview>\n\n### Dialog\n\nThis example shows how to open a dialog from a dropdown menu.\n\n```svelte showLineNumbers\n<DropdownMenu.Root>\n  <DropdownMenu.Trigger class={buttonVariants({ variant: \"outline\" })}>\n    Actions\n  </DropdownMenu.Trigger>\n</DropdownMenu.Root>\n```\n\n<ComponentPreview name=\"dropdown-menu-dialog\" >\n\n<div></div>\n\n</ComponentPreview>\n\n## Changelog\n\n### 2024-10-30 Classes for DropdownMenu.SubTrigger\n\n- Added `gap-2 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0` to the `<DropdownMenu.SubTrigger>` to automatically style icon inside the dropdown menu sub trigger.\n- Removed `size-4` from the icon inside the `<DropdownMenu.SubTrigger>` since it is now handled by the parent `<DropdownMenu.SubTrigger>`.\n"
  },
  {
    "path": "docs/content/components/empty.md",
    "content": "---\ntitle: Empty\ndescription: Use the Empty component to display a empty state.\ncomponent: true\nlinks:\n  source: https://github.com/huntabyte/shadcn-svelte/tree/next/sites/docs/src/lib/registry/ui/empty\n---\n\n<script>\n\timport ComponentPreview from \"$lib/components/component-preview.svelte\";\n\timport ComponentSource from \"$lib/components/component-source.svelte\";\n\timport PMAddComp from \"$lib/components/pm-add-comp.svelte\";\n\timport PMInstall from \"$lib/components/pm-install.svelte\";\n\timport Steps from \"$lib/components/steps.svelte\";\n\timport InstallTabs from \"$lib/components/install-tabs.svelte\";\n\n\tlet { viewerData } = $props();\n\timport Step from \"$lib/components/step.svelte\";\n</script>\n\n<ComponentPreview name=\"empty-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n## Installation\n\n<InstallTabs>\n{#snippet cli()}\n<PMAddComp name=\"empty\" />\n{/snippet}\n{#snippet manual()}\n<Steps>\n\n<Step>\n\nCopy and paste the following code into your project.\n\n</Step>\n{#if viewerData}\n\t<ComponentSource item={viewerData} data-llm-ignore/>\n{/if}\n\n</Steps>\n{/snippet}\n</InstallTabs>\n\n## Usage\n\n```svelte\n<script lang=\"ts\">\n  import * as Empty from \"$lib/components/ui/empty/index.js\";\n  import FolderCodeIcon from \"@tabler/icons-svelte/icons/folder-code\";\n</script>\n```\n\n```svelte\n<Empty.Root>\n  <Empty.Header>\n    <Empty.Media variant=\"icon\">\n      <FolderCodeIcon />\n    </Empty.Media>\n    <Empty.Title>No data</Empty.Title>\n    <Empty.Description>No data found</Empty.Description>\n  </Empty.Header>\n  <Empty.Content>\n    <Button>Add data</Button>\n  </Empty.Content>\n</Empty.Root>\n```\n\n## Examples\n\n### Outline\n\nUse the `border` utility class to create a outline empty state.\n\n<ComponentPreview name=\"empty-outline-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n### Background\n\nUse the `bg-*` and `bg-gradient-*` utilities to add a background to the empty state.\n\n<ComponentPreview name=\"empty-background-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n### Avatar\n\nUse the `EmptyMedia` component to display an avatar in the empty state.\n\n<ComponentPreview name=\"empty-avatar-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n### Avatar Group\n\nUse the `EmptyMedia` component to display an avatar group in the empty state.\n\n<ComponentPreview name=\"empty-avatar-group-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n### InputGroup\n\nYou can add an `InputGroup` component to the `EmptyContent` component.\n\n<ComponentPreview name=\"empty-input-group-demo\">\n\n<div></div>\n\n</ComponentPreview>\n"
  },
  {
    "path": "docs/content/components/field.md",
    "content": "---\ntitle: Field\ndescription: Combine labels, controls, and help text to compose accessible form fields and grouped inputs.\ncomponent: true\nlinks:\n  source: https://github.com/huntabyte/shadcn-svelte/tree/next/sites/docs/src/lib/registry/ui/field\n---\n\n<script>\n\timport ComponentPreview from \"$lib/components/component-preview.svelte\";\n\timport ComponentSource from \"$lib/components/component-source.svelte\";\n\timport PMAddComp from \"$lib/components/pm-add-comp.svelte\";\n\timport PMInstall from \"$lib/components/pm-install.svelte\";\n\timport Steps from \"$lib/components/steps.svelte\";\n\timport InstallTabs from \"$lib/components/install-tabs.svelte\";\n\n\tlet { viewerData } = $props();\n\timport Step from \"$lib/components/step.svelte\";\n</script>\n\n<ComponentPreview name=\"field-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n## Installation\n\n<InstallTabs>\n{#snippet cli()}\n<PMAddComp name=\"field\" />\n{/snippet}\n{#snippet manual()}\n<Steps>\n\n<Step>\n\nCopy and paste the following code into your project.\n\n</Step>\n{#if viewerData}\n\t<ComponentSource item={viewerData} data-llm-ignore/>\n{/if}\n\n</Steps>\n{/snippet}\n</InstallTabs>\n\n## Usage\n\n```svelte showLineNumbers\n<script lang=\"ts\">\n  import * as Field from \"$lib/components/ui/field/index.js\";\n</script>\n```\n\n```svelte showLineNumbers\n<Field.Set>\n  <Field.Legend>Profile</Field.Legend>\n  <Field.Description>This appears on invoices and emails.</Field.Description>\n  <Field.Group>\n    <Field.Field>\n      <Field.Label for=\"name\">Full name</Field.Label>\n      <Input id=\"name\" autocomplete=\"off\" placeholder=\"Evil Rabbit\" />\n      <Field.Description\n        >This appears on invoices and emails.</Field.Description\n      >\n    </Field.Field>\n    <Field.Field>\n      <Field.Label for=\"username\">Username</Field.Label>\n      <Input id=\"username\" autoComplete=\"off\" aria-invalid />\n      <Field.Error>Choose another username.</Field.Error>\n    </Field.Field>\n    <Field.Field orientation=\"horizontal\">\n      <Switch id=\"newsletter\" />\n      <Field.Label for=\"newsletter\">Subscribe to the newsletter</Field.Label>\n    </Field.Field>\n  </Field.Group>\n</Field.Set>\n```\n\n## Anatomy\n\nThe `Field` family is designed for composing accessible forms. A typical field is structured as follows:\n\n```svelte\n<Field.Field>\n  <Field.Label for=\"input-id\">Label</Field.Label>\n  <!-- Input, Select, Switch, etc. -->\n  <Field.Description>Optional helper text.</Field.Description>\n  <Field.Error>Validation message.</Field.Error>\n</Field.Field>\n```\n\n- `Field.Field` is the core wrapper for a single field.\n- `Field.Content` is a flex column that groups label and description. Not required if you have no description.\n- Wrap related fields with `Field.Group`, and use `Field.Set` with `Field.Legend` for semantic grouping.\n\n## Examples\n\n### Input\n\n<ComponentPreview name=\"field-input\">\n\n<div></div>\n\n</ComponentPreview>\n\n### Textarea\n\n<ComponentPreview name=\"field-textarea\">\n\n<div></div>\n\n</ComponentPreview>\n\n### Select\n\n<ComponentPreview name=\"field-select\">\n\n<div></div>\n\n</ComponentPreview>\n\n### Slider\n\n<ComponentPreview name=\"field-slider\">\n\n<div></div>\n\n</ComponentPreview>\n\n### Fieldset\n\n<ComponentPreview name=\"field-field-set-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n### Checkbox\n\n<ComponentPreview name=\"field-checkbox\">\n\n<div></div>\n\n</ComponentPreview>\n\n### Radio\n\n<ComponentPreview name=\"field-radio\">\n\n<div></div>\n\n</ComponentPreview>\n\n### Switch\n\n<ComponentPreview name=\"field-switch\">\n\n<div></div>\n\n</ComponentPreview>\n\n### Choice Card\n\nWrap `Field` components inside `FieldLabel` to create selectable field groups. This works with `RadioItem`, `Checkbox` and `Switch` components.\n\n<ComponentPreview name=\"field-choice-card\">\n\n<div></div>\n\n</ComponentPreview>\n\n### Field Group\n\nStack `Field` components with `Field.Group`. Add `Field.Separator` to divide them.\n\n<ComponentPreview name=\"field-field-group-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n### Responsive Layout\n\n- **Vertical fields:** Default orientation stacks label, control, and helper text—ideal for mobile-first layouts.\n- **Horizontal fields:** Set `orientation=\"horizontal\"` on `Field` to align the label and control side-by-side. Pair with `Field.Content` to keep descriptions aligned.\n- **Responsive fields:** Set `orientation=\"responsive\"` for automatic column layouts inside container-aware parents. Apply `@container/field-group` classes on `Field.Group` to switch orientations at specific breakpoints.\n\n<ComponentPreview name=\"field-responsive-layout-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n## Validation and Errors\n\n- Add `data-invalid` to `Field` to switch the entire block into an error state.\n- Add `aria-invalid` on the input itself for assistive technologies.\n- Render `FieldError` immediately after the control or inside `FieldContent` to keep error messages aligned with the field.\n  Copy\n\n```svelte\n<Field.Field data-invalid>\n  <Field.Label for=\"email\">Email</Field.Label>\n  <Input id=\"email\" type=\"email\" aria-invalid />\n  <Field.Error>Enter a valid email address.</Field.Error>\n</Field.Field>\n```\n\n## Accessibility\n\n- `Field.Set` and `Field.Legend` keep related controls grouped for keyboard and assistive tech users.\n- `Field` outputs `role=\"group\"` so nested controls inherit labeling from `Field.Label` and `Field.Legend` when combined.\n- Apply `Field.Separator` sparingly to ensure screen readers encounter clear section boundaries.\n"
  },
  {
    "path": "docs/content/components/form.md",
    "content": "---\ntitle: Formsnap\ndescription: Building forms with Formsnap, Superforms, & Zod.\nlinks:\n  doc: https://formsnap.dev\n  source: https://github.com/huntabyte/shadcn-svelte/tree/next/sites/docs/src/lib/registry/ui/form\n---\n\n<script>\n\timport ComponentPreview from \"$lib/components/component-preview.svelte\";\n\timport PMAddComp from \"$lib/components/pm-add-comp.svelte\";\n\timport PMInstall from \"$lib/components/pm-install.svelte\";\n\timport Steps from \"$lib/components/steps.svelte\";\n</script>\n\nForms are tricky. They are one of the most common things you'll build in a web application, but also one of the most complex.\n\nWell-designed HTML forms are:\n\n- Well-structured and semantically correct.\n- Easy to use and navigate (keyboard).\n- Accessible with ARIA attributes and proper labels.\n- Has support for client and server side validation.\n- Well-styled and consistent with the rest of the application.\n\nIn this guide, we will take a look at building forms with [formsnap](https://formsnap.dev), [sveltekit-superforms](https://superforms.rocks) and [zod](https://zod.dev).\n\n## Features\n\nThe `Form` components offered by `shadcn-svelte` are wrappers around `formsnap` & `sveltekit-superforms` which provide a few things:\n\n- Composable components for building forms.\n- Form field components for scoping form state.\n- Form validation using [Zod](https://zod.dev) or any other validation library supported by [Superforms](https://superforms.rocks).\n- Applies the correct `aria` attributes to form fields based on states.\n- Enables you to easily use various components like [Select](/docs/components/select), [RadioGroup](/docs/components/radio-group), [Switch](/docs/components/switch), [Checkbox](/docs/components/checkbox) and other form components with forms.\n\nIf you aren't familiar with [Superforms](https://superforms.rocks) & [Formsnap](https://formsnap.dev), you should check out their documentation first, as this guide assumes you have a basic understanding of how they work together.\n\n## Anatomy\n\n```svelte showLineNumbers\n<form>\n  <Form.Field>\n    <Form.Control>\n      <Form.Label />\n      <!-- Any Form input component -->\n    </Form.Control>\n    <Form.Description />\n    <Form.FieldErrors />\n  </Form.Field>\n</form>\n```\n\n## Example\n\n```svelte showLineNumbers\n<form method=\"POST\" use:enhance>\n  <Form.Field {form} name=\"email\">\n    <Form.Control>\n      {#snippet children({ props })}\n        <Form.Label>Email</Form.Label>\n        <Input {...props} bind:value={$formData.email} />\n      {/snippet}\n    </Form.Control>\n    <Form.Description />\n    <Form.FieldErrors />\n  </Form.Field>\n</form>\n```\n\n## Installation\n\n<PMAddComp name=\"form\" />\n\n## Usage\n\n<Steps>\n\n### Create a form schema\n\nDefine the shape of your form using a Zod schema. You can read more about using Zod in the [Zod documentation](https://zod.dev). We're going to define it in a file called `schema.ts` in the same directory as our page component, but you can put it anywhere you like.\n\n```ts title=\"src/routes/settings/schema.ts\" showLineNumbers\nimport { z } from \"zod\";\n\nexport const formSchema = z.object({\n  username: z.string().min(2).max(50),\n});\n\nexport type FormSchema = typeof formSchema;\n```\n\n### Setup the load function\n\n```ts title=\"src/routes/settings/+page.server.ts\" showLineNumbers\nimport type { PageServerLoad } from \"./$types.js\";\nimport { superValidate } from \"sveltekit-superforms\";\nimport { formSchema } from \"./schema\";\nimport { zod4 } from \"sveltekit-superforms/adapters\";\n\nexport const load: PageServerLoad = async () => {\n  return {\n    form: await superValidate(zod4(formSchema)),\n  };\n};\n```\n\n### Create form component\n\nFor this example, we'll be passing the `form` returned from the load function as a prop to this component. To ensure it's typed properly, we'll use the `SuperValidated` type from `sveltekit-superforms`, and pass in the type of our form schema.\n\n```svelte title=\"src/routes/settings/settings-form.svelte\" showLineNumbers\n<script lang=\"ts\">\n  import * as Form from \"$lib/components/ui/form/index.js\";\n  import { Input } from \"$lib/components/ui/input/index.js\";\n  import { formSchema, type FormSchema } from \"./schema\";\n  import {\n    type SuperValidated,\n    type Infer,\n    superForm,\n  } from \"sveltekit-superforms\";\n  import { zod4Client } from \"sveltekit-superforms/adapters\";\n\n  let { data }: { data: { form: SuperValidated<Infer<FormSchema>> } } =\n    $props();\n\n  const form = superForm(data.form, {\n    validators: zod4Client(formSchema),\n  });\n\n  const { form: formData, enhance } = form;\n</script>\n\n<form method=\"POST\" use:enhance>\n  <Form.Field {form} name=\"username\">\n    <Form.Control>\n      {#snippet children({ props })}\n        <Form.Label>Username</Form.Label>\n        <Input {...props} bind:value={$formData.username} />\n      {/snippet}\n    </Form.Control>\n    <Form.Description>This is your public display name.</Form.Description>\n    <Form.FieldErrors />\n  </Form.Field>\n  <Form.Button>Submit</Form.Button>\n</form>\n```\n\nThe `name`, `id`, and all accessibility attributes are applied to the input by spreading the `attrs` object from the `Form.Control` component. The `Form.Label` will automatically be associated with the input using the `for` attribute, so you don't have to worry about that.\n\n### Use the component\n\nWe'll pass the `form` from the data returned from the load function to the form component we created above.\n\n```svelte title=\"src/routes/settings/+page.svelte\" showLineNumbers\n<script lang=\"ts\">\n  import type { PageData } from \"./$types.js\";\n  import SettingsForm from \"./settings-form.svelte\";\n  let { data }: { data: PageData } = $props();\n</script>\n\n<SettingsForm {data} />\n```\n\n### Create an Action\n\n```ts title=\"src/routes/settings/+page.server.ts\" showLineNumbers {1-2,13-25}\nimport type { PageServerLoad, Actions } from \"./$types.js\";\nimport { fail } from \"@sveltejs/kit\";\nimport { superValidate } from \"sveltekit-superforms\";\nimport { zod4 } from \"sveltekit-superforms/adapters\";\nimport { formSchema } from \"./schema\";\n\nexport const load: PageServerLoad = async () => {\n  return {\n    form: await superValidate(zod4(formSchema)),\n  };\n};\n\nexport const actions: Actions = {\n  default: async (event) => {\n    const form = await superValidate(event, zod4(formSchema));\n    if (!form.valid) {\n      return fail(400, {\n        form,\n      });\n    }\n    return {\n      form,\n    };\n  },\n};\n```\n\n### Done\n\nThat's it. You now have a fully accessible form that is type-safe and has client & server side validation.\n\n<ComponentPreview name=\"form-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n</Steps>\n\n## Next Steps\n\nBe sure to check out the [Formsnap](https://formsnap.dev) and [Superforms](https://superforms.rocks) documentation for more information on how to use them.\n\n## Examples\n\nSee the following links for more examples on how to use the other `Form` components:\n\n- [Checkbox](/docs/components/checkbox#form)\n- [Date Picker](/docs/components/date-picker#form)\n- [Input](/docs/components/input#form)\n- [Radio Group](/docs/components/radio-group#form)\n- [Select](/docs/components/select#form)\n- [Switch](/docs/components/switch#form)\n- [Textarea](/docs/components/textarea#form)\n"
  },
  {
    "path": "docs/content/components/hover-card.md",
    "content": "---\ntitle: Hover Card\ndescription: For sighted users to preview content available behind a link.\ncomponent: true\nlinks:\n  source: https://github.com/huntabyte/shadcn-svelte/tree/next/sites/docs/src/lib/registry/ui/link-preview\n  doc: https://bits-ui.com/docs/components/link-preview\n  api: https://bits-ui.com/docs/components/link-preview#api-reference\n---\n\n<script>\n\timport ComponentPreview from \"$lib/components/component-preview.svelte\";\n\timport ComponentSource from \"$lib/components/component-source.svelte\";\n\timport PMAddComp from \"$lib/components/pm-add-comp.svelte\";\n\timport PMInstall from \"$lib/components/pm-install.svelte\";\n\timport Steps from \"$lib/components/steps.svelte\";\n\timport Step from \"$lib/components/step.svelte\";\n\timport InstallTabs from \"$lib/components/install-tabs.svelte\";\n\n\tlet { viewerData } = $props();\n</script>\n\n<ComponentPreview name=\"hover-card-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n## Installation\n\n<InstallTabs>\n{#snippet cli()}\n<PMAddComp name=\"hover-card\" />\n{/snippet}\n{#snippet manual()}\n<Steps>\n\n<Step>\n\nInstall `bits-ui`:\n\n</Step>\n\n<PMInstall command=\"bits-ui -D\" />\n\n<Step>\n\nCopy and paste the following code into your project.\n\n</Step>\n{#if viewerData}\n\t<ComponentSource item={viewerData} data-llm-ignore/>\n{/if}\n</Steps>\n\n{/snippet}\n</InstallTabs>\n\n## Usage\n\n```svelte showLineNumbers\n<script lang=\"ts\">\n  import * as HoverCard from \"$lib/components/ui/hover-card/index.js\";\n</script>\n```\n\n```svelte showLineNumbers\n<HoverCard.Root>\n  <HoverCard.Trigger>Hover</HoverCard.Trigger>\n  <HoverCard.Content>\n    SvelteKit - Web development, streamlined\n  </HoverCard.Content>\n</HoverCard.Root>\n```\n"
  },
  {
    "path": "docs/content/components/index.md",
    "content": "---\ntitle: Components\ndescription: Here you can find all the components available in the library. We are working on adding more components.\n---\n\n<script>\n\timport ComponentsList from \"$lib/components/components-list.svelte\";\n</script>\n\n<ComponentsList />\n"
  },
  {
    "path": "docs/content/components/input-group.md",
    "content": "---\ntitle: Input Group\ndescription: Display additional information or actions to an input or textarea.\ncomponent: true\nlinks:\n  source: https://github.com/huntabyte/shadcn-svelte/tree/next/sites/docs/src/lib/registry/ui/input-group\n---\n\n<script>\n\timport ComponentPreview from \"$lib/components/component-preview.svelte\";\n\timport ComponentSource from \"$lib/components/component-source.svelte\";\n\timport PMAddComp from \"$lib/components/pm-add-comp.svelte\";\n\timport PMInstall from \"$lib/components/pm-install.svelte\";\n\timport Steps from \"$lib/components/steps.svelte\";\n\timport InstallTabs from \"$lib/components/install-tabs.svelte\";\n\n\tlet { viewerData } = $props();\n\timport Step from \"$lib/components/step.svelte\";\n</script>\n\n<ComponentPreview name=\"input-group-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n## Installation\n\n<InstallTabs>\n{#snippet cli()}\n<PMAddComp name=\"input-group\" />\n{/snippet}\n{#snippet manual()}\n<Steps>\n\n<Step>\n\nInstall `@lucide/svelte`:\n\n</Step>\n\n<PMInstall command=\"@lucide/svelte -D\" />\n\n<Step>\n\nCopy and paste the following code into your project.\n\n</Step>\n{#if viewerData}\n\t<ComponentSource item={viewerData} data-llm-ignore/>\n{/if}\n\n</Steps>\n{/snippet}\n</InstallTabs>\n\n## Usage\n\n```svelte showLineNumbers\n<script lang=\"ts\">\n  import * as InputGroup from \"$lib/components/ui/input-group/index.js\";\n  import SearchIcon from \"@lucide/svelte/icons/search\";\n</script>\n```\n\n```svelte showLineNumbers\n<InputGroup.Root>\n  <InputGroup.Input placeholder=\"Search...\" />\n  <InputGroup.Addon>\n    <SearchIcon />\n  </InputGroup.Addon>\n  <InputGroup.Addon align=\"inline-end\">\n    <InputGroup.Button>Search</InputGroup.Button>\n  </InputGroup.Addon>\n</InputGroup.Root>\n```\n\n## Examples\n\n### Icon\n\n<ComponentPreview name=\"input-group-icon-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n### Text\n\nDisplay additional text information alongside inputs.\n\n<ComponentPreview name=\"input-group-text-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n### Button\n\nAdd buttons to perform actions within the input group.\n\n<ComponentPreview name=\"input-group-button-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n### Tooltip\n\nAdd tooltips to provide additional context or help.\n\n<ComponentPreview name=\"input-group-tooltip-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n### Textarea\n\nInput groups also work with textarea components. Use `block-start` or `block-end` for alignment.\n\n<ComponentPreview name=\"input-group-textarea-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n### Spinner\n\nShow loading indicators while processing input.\n\n<ComponentPreview name=\"input-group-spinner-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n### Label\n\nAdd labels within input groups to improve accessibility.\n\n<ComponentPreview name=\"input-group-label-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n### Dropdown\n\nPair input groups with dropdown menus for complex interactions.\n\n<ComponentPreview name=\"input-group-dropdown-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n### Button Group\n\nWrap input groups with button groups to create prefixes and suffixes.\n\n<ComponentPreview name=\"input-group-button-group-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n### Custom Input\n\nAdd the `data-slot=\"input-group-control\"` attribute to your custom input for automatic behavior and focus state handling.\n\nNo style is applied to the custom input. Apply your own styles using the `class` prop.\n\n<ComponentPreview name=\"input-group-custom-input-demo\">\n\n<div></div>\n\n</ComponentPreview>\n"
  },
  {
    "path": "docs/content/components/input-otp.md",
    "content": "---\ntitle: Input OTP\ndescription: Accessible one-time password component with copy paste functionality.\ncomponent: true\nlinks:\n  source: https://github.com/huntabyte/shadcn-svelte/tree/next/sites/docs/src/lib/registry/ui/input-otp\n  doc: https://bits-ui.com/docs/components/pin-input\n  api: https://bits-ui.com/docs/components/pin-input#api-reference\n---\n\n<script>\n\timport ComponentPreview from \"$lib/components/component-preview.svelte\";\n\timport ComponentSource from \"$lib/components/component-source.svelte\";\n\timport PMAddComp from \"$lib/components/pm-add-comp.svelte\";\n\timport PMInstall from \"$lib/components/pm-install.svelte\";\n\timport Steps from \"$lib/components/steps.svelte\";\n\timport Step from \"$lib/components/step.svelte\";\n\timport InstallTabs from \"$lib/components/install-tabs.svelte\";\n\n\tlet { viewerData } = $props();\n</script>\n\n<ComponentPreview name=\"input-otp-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n## About\n\nInput OTP is built on top of Bits UI's [PinInput](https://bits-ui.com/docs/components/pin-input) which is inspired by [@guilherme_rodz](https://twitter.com/guilherme_rodz)'s Input OTP component.\n\n## Installation\n\n<InstallTabs>\n{#snippet cli()}\n<PMAddComp name=\"input-otp\" />\n{/snippet}\n{#snippet manual()}\n<Steps>\n\n<Step>\n\nInstall `bits-ui`:\n\n</Step>\n\n<PMInstall command=\"bits-ui -D\" />\n\n<Step>\n\nCopy and paste the following code into your project.\n\n</Step>\n{#if viewerData}\n\t<ComponentSource item={viewerData} data-llm-ignore/>\n{/if}\n\n</Steps>\n{/snippet}\n</InstallTabs>\n\n## Usage\n\n```svelte showLineNumbers\n<script lang=\"ts\">\n  import * as InputOTP from \"$lib/components/ui/input-otp/index.js\";\n</script>\n```\n\n```svelte showLineNumbers\n<InputOTP.Root maxlength={6}>\n  {#snippet children({ cells })}\n    <InputOTP.Group>\n      {#each cells.slice(0, 3) as cell}\n        <InputOTP.Slot {cell} />\n      {/each}\n    </InputOTP.Group>\n    <InputOTP.Separator />\n    <InputOTP.Group>\n      {#each cells.slice(3, 6) as cell}\n        <InputOTP.Slot {cell} />\n      {/each}\n    </InputOTP.Group>\n  {/snippet}\n</InputOTP.Root>\n```\n\n## Examples\n\n### Pattern\n\nUse the `pattern` prop to define a custom pattern for the OTP input.\n\n<ComponentPreview name=\"input-otp-pattern\">\n\n<div></div>\n\n</ComponentPreview>\n\n```svelte showLineNumbers {3,6}\n<script lang=\"ts\">\n  import * as InputOTP from \"$lib/components/ui/input-otp/index.js\";\n  import { REGEXP_ONLY_DIGITS_AND_CHARS } from \"bits-ui\";\n</script>\n\n<InputOTP.Root maxlength={6} pattern={REGEXP_ONLY_DIGITS_AND_CHARS}>\n  <!-- ... -->\n</InputOTP.Root>\n```\n\n### Separator\n\nYou can use the `InputOTP.Separator` component to add a separator between the groups of cells.\n\n<ComponentPreview name=\"input-otp-separator\">\n\n<div></div>\n\n</ComponentPreview>\n\n```svelte showLineNumbers {12}\n<script lang=\"ts\">\n  import * as InputOTP from \"$lib/components/ui/input-otp/index.js\";\n</script>\n\n<InputOTP.Root maxlength={4}>\n  {#snippet children({ cells })}\n    <InputOTP.Group>\n      {#each cells.slice(0, 2) as cell}\n        <InputOTP.Slot {cell} />\n      {/each}\n    </InputOTP.Group>\n    <InputOTP.Separator />\n    <InputOTP.Group>\n      {#each cells.slice(2, 4) as cell}\n        <InputOTP.Slot {cell} />\n      {/each}\n    </InputOTP.Group>\n  {/snippet}\n</InputOTP.Root>\n```\n\n### Controlled\n\n<ComponentPreview name=\"input-otp-controlled\">\n\n<div></div>\n\n</ComponentPreview>\n\n### Form\n\n<ComponentPreview name=\"input-otp-form\">\n\n<div></div>\n\n</ComponentPreview>\n"
  },
  {
    "path": "docs/content/components/input.md",
    "content": "---\ntitle: Input\ndescription: Displays a form input field or a component that looks like an input field.\ncomponent: true\nlinks:\n  source: https://github.com/huntabyte/shadcn-svelte/tree/next/sites/docs/src/lib/registry/ui/input\n---\n\n<script>\n\timport ComponentPreview from \"$lib/components/component-preview.svelte\";\n\timport ComponentSource from \"$lib/components/component-source.svelte\";\n\timport PMAddComp from \"$lib/components/pm-add-comp.svelte\";\n\timport PMInstall from \"$lib/components/pm-install.svelte\";\n\timport Steps from \"$lib/components/steps.svelte\";\n\timport Step from \"$lib/components/step.svelte\";\n\timport InstallTabs from \"$lib/components/install-tabs.svelte\";\n\n\tlet { viewerData } = $props();\n</script>\n\n<ComponentPreview name=\"input-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n## Installation\n\n<InstallTabs>\n{#snippet cli()}\n<PMAddComp name=\"input\" />\n{/snippet}\n{#snippet manual()}\n<Steps>\n\n<Step>\n\nCopy and paste the following code into your project.\n\n</Step>\n{#if viewerData}\n\t<ComponentSource item={viewerData} data-llm-ignore/>\n{/if}\n\n</Steps>\n{/snippet}\n</InstallTabs>\n\n## Usage\n\n```svelte\n<script lang=\"ts\">\n  import { Input } from \"$lib/components/ui/input/index.js\";\n</script>\n```\n\n```svelte\n<Input />\n```\n\n## Examples\n\n### Default\n\n<ComponentPreview name=\"input-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n### File\n\n<ComponentPreview name=\"input-file\">\n\n<div></div>\n\n</ComponentPreview>\n\n### Disabled\n\n<ComponentPreview name=\"input-disabled\">\n\n<div></div>\n\n</ComponentPreview>\n\n### With Label\n\n<ComponentPreview name=\"input-with-label\">\n\n<div></div>\n\n</ComponentPreview>\n\n### With Button\n\n<ComponentPreview name=\"input-with-button\">\n\n<div></div>\n\n</ComponentPreview>\n"
  },
  {
    "path": "docs/content/components/item.md",
    "content": "---\ntitle: Item\ndescription: A versatile component that you can use to display any content.\ncomponent: true\nlinks:\n  source: https://github.com/huntabyte/shadcn-svelte/tree/next/sites/docs/src/lib/registry/ui/item\n---\n\n<script>\n\timport ComponentPreview from \"$lib/components/component-preview.svelte\";\n\timport ComponentSource from \"$lib/components/component-source.svelte\";\n\timport PMAddComp from \"$lib/components/pm-add-comp.svelte\";\n\timport PMInstall from \"$lib/components/pm-install.svelte\";\n\timport Steps from \"$lib/components/steps.svelte\";\n\timport InstallTabs from \"$lib/components/install-tabs.svelte\";\n\n\tlet { viewerData } = $props();\n\timport Step from \"$lib/components/step.svelte\";\n</script>\n\nThe `Item` component is a straightforward flex container that can house nearly any type of content. Use it to display a title, description, and actions. Group it with the `ItemGroup` component to create a list of items.\n\nYou can pretty much achieve the same result with the `div` element and some classes, but **I've built this so many times** that I decided to create a component for it. Now I use it all the time.\n\n<ComponentPreview name=\"item-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n## Installation\n\n<InstallTabs>\n{#snippet cli()}\n<PMAddComp name=\"item\" />\n{/snippet}\n{#snippet manual()}\n<Steps>\n\n<Step>\n\nCopy and paste the following code into your project.\n\n</Step>\n{#if viewerData}\n\t<ComponentSource item={viewerData} data-llm-ignore/>\n{/if}\n\n</Steps>\n{/snippet}\n</InstallTabs>\n\n## Usage\n\n```svelte showLineNumbers\n<script lang=\"ts\">\n  import * as Item from \"$lib/components/ui/item/index.js\";\n</script>\n```\n\n```svelte showLineNumbers\n<Item.Root>\n  <Item.Header>Item Header</Item.Header>\n  <Item.Media />\n  <Item.Content>\n    <Item.Title>Item</Item.Title>\n    <Item.Description>Item</Item.Description>\n  </Item.Content>\n  <Item.Actions />\n  <Item.Footer>Item Footer</Item.Footer>\n</Item.Root>\n```\n\n## Item vs Field\n\nUse Field if you need to display a form input such as a checkbox, input, radio, or select.\n\nIf you only need to display content such as a title, description, and actions, use `Item`.\n\n## Examples\n\n### Variants\n\n<ComponentPreview name=\"item-variants-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n### Size\n\nThe `Item` component has different sizes for different use cases. For example, you can use the `sm` size for a compact item or the default size for a standard item.\n\n<ComponentPreview name=\"item-size-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n### Icon\n\n<ComponentPreview name=\"item-icon-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n### Avatar\n\n<ComponentPreview name=\"item-avatar-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n### Image\n\n<ComponentPreview name=\"item-image-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n### Group\n\n<ComponentPreview name=\"item-group-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n### Header\n\n<ComponentPreview name=\"item-header-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n### Link\n\nTo render an item as a link, use the the `child` snippet. The hover and focus states will be applied to the anchor element.\n\n<ComponentPreview name=\"item-link-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n### Dropdown\n\n<ComponentPreview name=\"item-dropdown-demo\">\n\n<div></div>\n\n</ComponentPreview>\n"
  },
  {
    "path": "docs/content/components/kbd.md",
    "content": "---\ntitle: Kbd\ndescription: Used to display textual user input from keyboard.\ncomponent: true\nlinks:\n  source: https://github.com/huntabyte/shadcn-svelte/tree/next/sites/docs/src/lib/registry/ui/kbd\n---\n\n<script>\n\timport ComponentPreview from \"$lib/components/component-preview.svelte\";\n\timport ComponentSource from \"$lib/components/component-source.svelte\";\n\timport PMAddComp from \"$lib/components/pm-add-comp.svelte\";\n\timport PMInstall from \"$lib/components/pm-install.svelte\";\n\timport Steps from \"$lib/components/steps.svelte\";\n\timport InstallTabs from \"$lib/components/install-tabs.svelte\";\n\n\tlet { viewerData } = $props();\n\timport Step from \"$lib/components/step.svelte\";\n</script>\n\n<ComponentPreview name=\"kbd-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n## Installation\n\n<InstallTabs>\n{#snippet cli()}\n<PMAddComp name=\"kbd\" />\n{/snippet}\n{#snippet manual()}\n<Steps>\n\n<Step>\n\nCopy and paste the following code into your project.\n\n</Step>\n{#if viewerData}\n\t<ComponentSource item={viewerData} data-llm-ignore/>\n{/if}\n\n</Steps>\n{/snippet}\n</InstallTabs>\n\n## Usage\n\n```svelte\n<script lang=\"ts\">\n  import * as Kbd from \"$lib/components/ui/kbd/index.js\";\n</script>\n```\n\n```svelte\n<Kbd.Root>B</Kbd.Root>\n```\n\n## Examples\n\n### Group\n\nUse the `Kbd.Group` component to group keyboard keys together.\n\n<ComponentPreview name=\"kbd-group-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n### Button\n\nUse the `Kbd.Root` component inside a `Button` component to display a keyboard key inside a button.\n\n<ComponentPreview name=\"kbd-button-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n### Tooltip\n\nYou can use the `Kbd.Root` component inside a `Tooltip` component to display a tooltip with a keyboard key.\n\n<ComponentPreview name=\"kbd-tooltip-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n### Input Group\n\nYou can use the `Kbd.Root` component inside a `InputGroup.Addon` component to display a keyboard key inside an input group.\n\n<ComponentPreview name=\"kbd-input-group-demo\">\n\n<div></div>\n\n</ComponentPreview>\n"
  },
  {
    "path": "docs/content/components/label.md",
    "content": "---\ntitle: Label\ndescription: Renders an accessible label associated with controls.\ncomponent: true\nlinks:\n  source: https://github.com/huntabyte/shadcn-svelte/tree/next/sites/docs/src/lib/registry/ui/label\n  doc: https://bits-ui.com/docs/components/label\n  api: https://bits-ui.com/docs/components/label#api-reference\n---\n\n<script>\n\timport ComponentPreview from \"$lib/components/component-preview.svelte\";\n\timport ComponentSource from \"$lib/components/component-source.svelte\";\n\timport PMAddComp from \"$lib/components/pm-add-comp.svelte\";\n\timport PMInstall from \"$lib/components/pm-install.svelte\";\n\timport Steps from \"$lib/components/steps.svelte\";\n\timport Step from \"$lib/components/step.svelte\";\n\timport InstallTabs from \"$lib/components/install-tabs.svelte\";\n\n\tlet { viewerData } = $props();\n</script>\n\n<ComponentPreview name=\"label-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n## Installation\n\n<InstallTabs>\n{#snippet cli()}\n<PMAddComp name=\"label\" />\n{/snippet}\n{#snippet manual()}\n<Steps>\n\n<Step>\n\nInstall `bits-ui`:\n\n</Step>\n\n<PMInstall command=\"bits-ui -D\" />\n\n<Step>\n\nCopy and paste the following code into your project.\n\n</Step>\n{#if viewerData}\n\t<ComponentSource item={viewerData} data-llm-ignore/>\n{/if}\n\n</Steps>\n{/snippet}\n</InstallTabs>\n\n## Usage\n\n```svelte\n<script lang=\"ts\">\n  import { Label } from \"$lib/components/ui/label/index.js\";\n</script>\n```\n\n```svelte\n<Label for=\"email\">Your email address</Label>\n```\n"
  },
  {
    "path": "docs/content/components/menubar.md",
    "content": "---\ntitle: Menubar\ndescription: A visually persistent menu common in desktop applications that provides quick access to a consistent set of commands.\ncomponent: true\nlinks:\n  source: https://github.com/huntabyte/shadcn-svelte/tree/next/sites/docs/src/lib/registry/ui/menubar\n  doc: https://bits-ui.com/docs/components/menubar\n  api: https://bits-ui.com/docs/components/menubar#api-reference\n---\n\n<script>\n\timport ComponentPreview from \"$lib/components/component-preview.svelte\";\n\timport ComponentSource from \"$lib/components/component-source.svelte\";\n\timport PMAddComp from \"$lib/components/pm-add-comp.svelte\";\n\timport PMInstall from \"$lib/components/pm-install.svelte\";\n\timport Steps from \"$lib/components/steps.svelte\";\n\timport Step from \"$lib/components/step.svelte\";\n\timport InstallTabs from \"$lib/components/install-tabs.svelte\";\n\n\tlet { viewerData } = $props();\n</script>\n\n<ComponentPreview name=\"menubar-demo\">\n\n</ComponentPreview>\n\n## Installation\n\n<InstallTabs>\n{#snippet cli()}\n<PMAddComp name=\"menubar\" />\n{/snippet}\n{#snippet manual()}\n<Steps>\n\n<Step>\n\nInstall `bits-ui`:\n\n</Step>\n\n<PMInstall command=\"bits-ui -D\" />\n\n<Step>\n\nCopy and paste the following code into your project.\n\n</Step>\n{#if viewerData}\n\t<ComponentSource item={viewerData} data-llm-ignore/>\n{/if}\n\n</Steps>\n{/snippet}\n</InstallTabs>\n\n## Usage\n\n```svelte showLineNumbers\n<script lang=\"ts\">\n  import * as Menubar from \"$lib/components/ui/menubar/index.js\";\n</script>\n```\n\n```svelte showLineNumbers\n<Menubar.Root>\n  <Menubar.Menu>\n    <Menubar.Trigger>File</Menubar.Trigger>\n    <Menubar.Content>\n      <Menubar.Item>\n        New Tab\n        <Menubar.Shortcut>⌘T</Menubar.Shortcut>\n      </Menubar.Item>\n      <Menubar.Item>New Window</Menubar.Item>\n      <Menubar.Separator />\n      <Menubar.Item>Share</Menubar.Item>\n      <Menubar.Separator />\n      <Menubar.Item>Print</Menubar.Item>\n    </Menubar.Content>\n  </Menubar.Menu>\n</Menubar.Root>\n```\n"
  },
  {
    "path": "docs/content/components/native-select.md",
    "content": "---\ntitle: Native Select\ndescription: A styled native HTML select element with consistent design system integration.\ncomponent: true\nlinks:\n  source: https://github.com/huntabyte/shadcn-svelte/tree/next/sites/docs/src/lib/registry/ui/native-select\n---\n\n<script>\n    import ComponentPreview from \"$lib/components/component-preview.svelte\";\n\timport ComponentSource from \"$lib/components/component-source.svelte\";\n    import PMAddComp from \"$lib/components/pm-add-comp.svelte\";\n    import InstallTabs from \"$lib/components/install-tabs.svelte\";\n\n\tlet { viewerData } = $props();\n    import Step from \"$lib/components/step.svelte\";\n    import Steps from \"$lib/components/steps.svelte\";\n    import Callout from \"$lib/components/callout.svelte\";\n    import InfoIcon from \"@lucide/svelte/icons/info\";\n</script>\n\n<Callout variant=\"info\" icon={InfoIcon} class=\"!translate-y-[3px]\" >\n\nFor a styled select component, see the [Select](/docs/components/select) component.\n\n</Callout>\n\n<ComponentPreview name=\"native-select-demo\" />\n\n## Installation\n\n<InstallTabs>\n{#snippet cli()}\n<PMAddComp name=\"native-select\" />\n{/snippet}\n{#snippet manual()}\n<Steps>\n\n<Step>\n\nCopy and paste the following code into your project.\n\n</Step>\n{#if viewerData}\n\t<ComponentSource item={viewerData} data-llm-ignore/>\n{/if}\n\n</Steps>\n{/snippet}\n</InstallTabs>\n\n## Usage\n\n```svelte showLineNumbers\n<script lang=\"ts\">\n  import * as NativeSelect from \"$lib/components/ui/native-select/index.js\";\n</script>\n```\n\n```svelte showLineNumbers\n<NativeSelect.Root>\n  <NativeSelect.Option value=\"\">Select a fruit</NativeSelect.Option>\n  <NativeSelect.Option value=\"apple\">Apple</NativeSelect.Option>\n  <NativeSelect.Option value=\"banana\">Banana</NativeSelect.Option>\n  <NativeSelect.Option value=\"blueberry\">Blueberry</NativeSelect.Option>\n  <NativeSelect.Option value=\"grapes\" disabled>Grapes</NativeSelect.Option>\n  <NativeSelect.Option value=\"pineapple\">Pineapple</NativeSelect.Option>\n</NativeSelect.Root>\n```\n\n## Examples\n\n### With Groups\n\nOrganize options using `NativeSelect.OptGroup` for better categorization.\n\n<ComponentPreview name=\"native-select-groups\" >\n\n<div></div>\n\n</ComponentPreview>\n\n```svelte showLineNumbers\n<NativeSelect.Root>\n  <NativeSelect.Option value=\"\">Select a food</NativeSelect.Option>\n  <NativeSelect.OptGroup label=\"Fruits\">\n    <NativeSelect.Option value=\"apple\">Apple</NativeSelect.Option>\n    <NativeSelect.Option value=\"banana\">Banana</NativeSelect.Option>\n    <NativeSelect.Option value=\"blueberry\">Blueberry</NativeSelect.Option>\n  </NativeSelect.OptGroup>\n  <NativeSelect.OptGroup label=\"Vegetables\">\n    <NativeSelect.Option value=\"carrot\">Carrot</NativeSelect.Option>\n    <NativeSelect.Option value=\"broccoli\">Broccoli</NativeSelect.Option>\n    <NativeSelect.Option value=\"spinach\">Spinach</NativeSelect.Option>\n  </NativeSelect.OptGroup>\n</NativeSelect.Root>\n```\n\n### Disabled State\n\nDisable individual options or the entire select component.\n\n<ComponentPreview name=\"native-select-disabled\" >\n\n<div></div>\n\n</ComponentPreview>\n\n### Invalid State\n\nShow validation errors with the `aria-invalid` attribute and error styling.\n\n<ComponentPreview name=\"native-select-invalid\" >\n\n<div></div>\n\n</ComponentPreview>\n\n```svelte showLineNumbers\n<NativeSelect.Root aria-invalid=\"true\">\n  <NativeSelect.Option value=\"\">Select a country</NativeSelect.Option>\n  <NativeSelect.Option value=\"us\">United States</NativeSelect.Option>\n  <NativeSelect.Option value=\"uk\">United Kingdom</NativeSelect.Option>\n  <NativeSelect.Option value=\"ca\">Canada</NativeSelect.Option>\n</NativeSelect.Root>\n```\n\n## Native Select vs Select\n\n- Use `NativeSelect` when you need native browser behavior, better performance, or mobile-optimized dropdowns.\n- Use `Select` when you need custom styling, animations, or complex interactions.\n\nThe `NativeSelect` component provides native HTML select functionality with consistent styling that matches your design system.\n\n## Accessibility\n\n- The component maintains all native HTML select accessibility features.\n- Screen readers can navigate through options using arrow keys.\n- The chevron icon is marked as `aria-hidden=\"true\"` to avoid duplication.\n- Use `aria-label` or `aria-labelledby` for additional context when needed.\n\n```tsx showLineNumbers\n<NativeSelect.Root aria-label=\"Choose your preferred language\">\n  <NativeSelect.Option value=\"en\">English</NativeSelect.Option>\n  <NativeSelect.Option value=\"es\">Spanish</NativeSelect.Option>\n  <NativeSelect.Option value=\"fr\">French</NativeSelect.Option>\n</NativeSelect.Root>\n```\n\n## API Reference\n\n### NativeSelect.Root\n\nThe main select component that wraps the native HTML select element.\n\n| Prop    | Type     | Default |\n| ------- | -------- | ------- |\n| `class` | `string` |         |\n\nAll other props are passed through to the underlying `<select>` element.\n\n```svelte\n<NativeSelect.Root>\n  <NativeSelect.Option value=\"option1\">Option 1</NativeSelect.Option>\n  <NativeSelect.Option value=\"option2\">Option 2</NativeSelect.Option>\n</NativeSelect.Root>\n```\n\n### NativeSelect.Option\n\nRepresents an individual option within the select.\n\n| Prop       | Type      | Default |\n| ---------- | --------- | ------- |\n| `value`    | `string`  |         |\n| `disabled` | `boolean` | `false` |\n| `class`    | `string`  |         |\n\nAll other props are passed through to the underlying `<option>` element.\n\n```svelte\n<NativeSelect.Option value=\"apple\">Apple</NativeSelect.Option>\n<NativeSelect.Option value=\"banana\" disabled>Banana</NativeSelect.Option>\n```\n\n### NativeSelect.OptGroup\n\nGroups related options together for better organization.\n\n| Prop       | Type      | Default |\n| ---------- | --------- | ------- |\n| `label`    | `string`  |         |\n| `disabled` | `boolean` | `false` |\n| `class`    | `string`  |         |\n\nAll other props are passed through to the underlying `<optgroup>` element.\n\n```svelte\n<NativeSelect.OptGroup label=\"Fruits\">\n  <NativeSelect.Option value=\"apple\">Apple</NativeSelect.Option>\n  <NativeSelect.Option value=\"banana\">Banana</NativeSelect.Option>\n</NativeSelect.OptGroup>\n```\n"
  },
  {
    "path": "docs/content/components/navigation-menu.md",
    "content": "---\ntitle: Navigation Menu\ndescription: A collection of links for navigating websites.\ncomponent: true\nlinks:\n  source: https://github.com/huntabyte/shadcn-svelte/tree/next/sites/docs/src/lib/registry/ui/navigation-menu\n  doc: https://bits-ui.com/docs/components/navigation-menu\n  api: https://bits-ui.com/docs/components/navigation-menu#api-reference\n---\n\n<script>\n\timport ComponentPreview from \"$lib/components/component-preview.svelte\";\n\timport ComponentSource from \"$lib/components/component-source.svelte\";\n\timport PMAddComp from \"$lib/components/pm-add-comp.svelte\";\n\timport PMInstall from \"$lib/components/pm-install.svelte\";\n\timport Steps from \"$lib/components/steps.svelte\";\n\timport Step from \"$lib/components/step.svelte\";\n\timport InstallTabs from \"$lib/components/install-tabs.svelte\";\n\n\tlet { viewerData } = $props();\n</script>\n\n<ComponentPreview name=\"navigation-menu-demo\" align=\"start\">\n\n</ComponentPreview>\n\n## Installation\n\n<InstallTabs>\n{#snippet cli()}\n<PMAddComp name=\"navigation-menu\" />\n{/snippet}\n\n{#snippet manual()}\n<Steps>\n<Step>\n\nInstall `bits-ui`:\n\n</Step>\n<PMInstall command=\"bits-ui -D\" />\n<Step>\n\nCopy and paste the following code into your project.\n\n</Step>\n{#if viewerData}\n\t<ComponentSource item={viewerData} data-llm-ignore/>\n{/if}\n</Steps>\n{/snippet}\n</InstallTabs>\n\n## Usage\n\n```svelte showLineNumbers\n<script lang=\"ts\">\n  import * as NavigationMenu from \"$lib/components/ui/navigation-menu/index.js\";\n</script>\n```\n\n```svelte showLineNumbers\n<NavigationMenu.Root>\n  <NavigationMenu.List>\n    <NavigationMenu.Item>\n      <NavigationMenu.Trigger>Item One</NavigationMenu.Trigger>\n      <NavigationMenu.Content>\n        <NavigationMenu.Link>Link</NavigationMenu.Link>\n      </NavigationMenu.Content>\n    </NavigationMenu.Item>\n  </NavigationMenu.List>\n</NavigationMenu.Root>\n```\n"
  },
  {
    "path": "docs/content/components/pagination.md",
    "content": "---\ntitle: Pagination\ndescription: Pagination with page navigation, next and previous links.\ncomponent: true\nlinks:\n  source: https://github.com/huntabyte/shadcn-svelte/tree/next/sites/docs/src/lib/registry/ui/pagination\n  doc: https://bits-ui.com/docs/components/pagination\n  api: https://bits-ui.com/docs/components/pagination#api-reference\n---\n\n<script>\n\timport ComponentPreview from \"$lib/components/component-preview.svelte\";\n\timport ComponentSource from \"$lib/components/component-source.svelte\";\n\timport PMAddComp from \"$lib/components/pm-add-comp.svelte\";\n\timport PMInstall from \"$lib/components/pm-install.svelte\";\n\timport Steps from \"$lib/components/steps.svelte\";\n\timport InstallTabs from \"$lib/components/install-tabs.svelte\";\n\n\tlet { viewerData } = $props();\n\timport Step from \"$lib/components/step.svelte\";\n</script>\n\n<ComponentPreview name=\"pagination-demo\" >\n\n<div></div>\n\n</ComponentPreview>\n\n## Installation\n\n<InstallTabs>\n{#snippet cli()}\n<PMAddComp name=\"pagination\" />\n{/snippet}\n{#snippet manual()}\n<Steps>\n\n<Step>\n\nInstall `bits-ui`:\n\n</Step>\n\n<PMInstall command=\"bits-ui -D\" />\n\n<Step>\n\nCopy and paste the following code into your project.\n\n</Step>\n{#if viewerData}\n\t<ComponentSource item={viewerData} data-llm-ignore/>\n{/if}\n\n</Steps>\n{/snippet}\n</InstallTabs>\n\n## Usage\n\n```svelte showLineNumbers\n<script lang=\"ts\">\n  import * as Pagination from \"$lib/components/ui/pagination/index.js\";\n</script>\n```\n\n```svelte showLineNumbers\n<Pagination.Root count={100} perPage={10}>\n  {#snippet children({ pages, currentPage })}\n    <Pagination.Content>\n      <Pagination.Item>\n        <Pagination.Previous />\n      </Pagination.Item>\n      {#each pages as page (page.key)}\n        {#if page.type === \"ellipsis\"}\n          <Pagination.Item>\n            <Pagination.Ellipsis />\n          </Pagination.Item>\n        {:else}\n          <Pagination.Item>\n            <Pagination.Link {page} isActive={currentPage === page.value}>\n              {page.value}\n            </Pagination.Link>\n          </Pagination.Item>\n        {/if}\n      {/each}\n      <Pagination.Item>\n        <Pagination.Next />\n      </Pagination.Item>\n    </Pagination.Content>\n  {/snippet}\n</Pagination.Root>\n```\n"
  },
  {
    "path": "docs/content/components/popover.md",
    "content": "---\ntitle: Popover\ndescription: Displays rich content in a portal, triggered by a button.\ncomponent: true\nlinks:\n  source: https://github.com/huntabyte/shadcn-svelte/tree/next/sites/docs/src/lib/registry/ui/popover\n  doc: https://bits-ui.com/docs/components/popover\n  api: https://bits-ui.com/docs/components/popover#api-reference\n---\n\n<script>\n\timport ComponentPreview from \"$lib/components/component-preview.svelte\";\n\timport ComponentSource from \"$lib/components/component-source.svelte\";\n\timport PMAddComp from \"$lib/components/pm-add-comp.svelte\";\n\timport PMInstall from \"$lib/components/pm-install.svelte\";\n\timport Steps from \"$lib/components/steps.svelte\";\n\timport InstallTabs from \"$lib/components/install-tabs.svelte\";\n\n\tlet { viewerData } = $props();\n\timport Step from \"$lib/components/step.svelte\";\n</script>\n\n<ComponentPreview name=\"popover-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n## Installation\n\n<InstallTabs>\n{#snippet cli()}\n<PMAddComp name=\"popover\" />\n{/snippet}\n{#snippet manual()}\n<Steps>\n\n<Step>\n\nInstall `bits-ui`:\n\n</Step>\n\n<PMInstall command=\"bits-ui -D\" />\n\n<Step>\n\nCopy and paste the following code into your project.\n\n</Step>\n{#if viewerData}\n\t<ComponentSource item={viewerData} data-llm-ignore/>\n{/if}\n\n</Steps>\n{/snippet}\n</InstallTabs>\n\n## Usage\n\n```svelte showLineNumbers\n<script lang=\"ts\">\n  import * as Popover from \"$lib/components/ui/popover/index.js\";\n</script>\n```\n\n```svelte showLineNumbers\n<Popover.Root>\n  <Popover.Trigger>Open</Popover.Trigger>\n  <Popover.Content>Place content for the popover here.</Popover.Content>\n</Popover.Root>\n```\n"
  },
  {
    "path": "docs/content/components/progress.md",
    "content": "---\ntitle: Progress\ndescription: Displays an indicator showing the completion progress of a task, typically displayed as a progress bar.\ncomponent: true\nlinks:\n  source: https://github.com/huntabyte/shadcn-svelte/tree/next/sites/docs/src/lib/registry/ui/progress\n  doc: https://bits-ui.com/docs/components/progress\n  api: https://bits-ui.com/docs/components/progress#api-reference\n---\n\n<script>\n\timport ComponentPreview from \"$lib/components/component-preview.svelte\";\n\timport ComponentSource from \"$lib/components/component-source.svelte\";\n\timport PMAddComp from \"$lib/components/pm-add-comp.svelte\";\n\timport PMInstall from \"$lib/components/pm-install.svelte\";\n\timport Steps from \"$lib/components/steps.svelte\";\n\timport InstallTabs from \"$lib/components/install-tabs.svelte\";\n\n\tlet { viewerData } = $props();\n\timport Step from \"$lib/components/step.svelte\";\n</script>\n\n<ComponentPreview name=\"progress-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n## Installation\n\n<InstallTabs>\n{#snippet cli()}\n<PMAddComp name=\"progress\" />\n{/snippet}\n{#snippet manual()}\n<Steps>\n\n<Step>\n\nInstall `bits-ui`:\n\n</Step>\n\n<PMInstall command=\"bits-ui -D\" />\n\n<Step>\n\nCopy and paste the following code into your project.\n\n</Step>\n{#if viewerData}\n\t<ComponentSource item={viewerData} data-llm-ignore/>\n{/if}\n\n</Steps>\n{/snippet}\n</InstallTabs>\n\n## Usage\n\n```svelte showLineNumbers\n<script lang=\"ts\">\n  import { Progress } from \"$lib/components/ui/progress/index.js\";\n</script>\n```\n\n```svelte showLineNumbers\n<Progress value={33} />\n```\n"
  },
  {
    "path": "docs/content/components/radio-group.md",
    "content": "---\ntitle: Radio Group\ndescription: A set of checkable buttons—known as radio buttons—where no more than one of the buttons can be checked at a time.\ncomponent: true\nlinks:\n  source: https://github.com/huntabyte/shadcn-svelte/tree/next/sites/docs/src/lib/registry/ui/radio-group\n  doc: https://bits-ui.com/docs/components/radio-group\n  api: https://bits-ui.com/docs/components/radio-group#api-reference\n---\n\n<script>\n\timport ComponentPreview from \"$lib/components/component-preview.svelte\";\n\timport ComponentSource from \"$lib/components/component-source.svelte\";\n\timport PMAddComp from \"$lib/components/pm-add-comp.svelte\";\n\timport PMInstall from \"$lib/components/pm-install.svelte\";\n\timport Steps from \"$lib/components/steps.svelte\";\n\timport InstallTabs from \"$lib/components/install-tabs.svelte\";\n\n\tlet { viewerData } = $props();\n\timport Step from \"$lib/components/step.svelte\";\n</script>\n\n<ComponentPreview name=\"radio-group-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n## Installation\n\n<InstallTabs>\n{#snippet cli()}\n<PMAddComp name=\"radio-group\" />\n{/snippet}\n{#snippet manual()}\n<Steps>\n\n<Step>\n\nInstall `bits-ui`:\n\n</Step>\n\n<PMInstall command=\"bits-ui -D\" />\n\n<Step>\n\nCopy and paste the following code into your project.\n\n</Step>\n{#if viewerData}\n\t<ComponentSource item={viewerData} data-llm-ignore/>\n{/if}\n\n</Steps>\n{/snippet}\n</InstallTabs>\n\n## Usage\n\n```svelte showLineNumbers\n<script lang=\"ts\">\n  import { Label } from \"$lib/components/ui/label/index.js\";\n  import * as RadioGroup from \"$lib/components/ui/radio-group/index.js\";\n</script>\n```\n\n```svelte showLineNumbers\n<RadioGroup.Root value=\"option-one\">\n  <div class=\"flex items-center space-x-2\">\n    <RadioGroup.Item value=\"option-one\" id=\"option-one\" />\n    <Label for=\"option-one\">Option One</Label>\n  </div>\n  <div class=\"flex items-center space-x-2\">\n    <RadioGroup.Item value=\"option-two\" id=\"option-two\" />\n    <Label for=\"option-two\">Option Two</Label>\n  </div>\n</RadioGroup.Root>\n```\n"
  },
  {
    "path": "docs/content/components/range-calendar.md",
    "content": "---\ntitle: Range Calendar\ndescription: A calendar component that allows users to select a range of dates.\ncomponent: true\nlinks:\n  source: https://github.com/huntabyte/shadcn-svelte/tree/next/sites/docs/src/lib/registry/ui/range-calendar\n  doc: https://bits-ui.com/docs/components/range-calendar\n  api: https://bits-ui.com/docs/components/range-calendar#api-reference\n---\n\n<script>\n\timport ComponentPreview from \"$lib/components/component-preview.svelte\";\n\timport ComponentSource from \"$lib/components/component-source.svelte\";\n\timport PMAddComp from \"$lib/components/pm-add-comp.svelte\";\n\timport PMInstall from \"$lib/components/pm-install.svelte\";\n\timport Steps from \"$lib/components/steps.svelte\";\n\timport InstallTabs from \"$lib/components/install-tabs.svelte\";\n\n\tlet { viewerData } = $props();\n\timport Step from \"$lib/components/step.svelte\";\n</script>\n\n<ComponentPreview name=\"range-calendar-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n## About\n\nThe `<RangeCalendar />` component is built on top of the [Bits Range Calendar](https://www.bits-ui.com/docs/components/range-calendar) component, which uses the [@internationalized/date](https://react-spectrum.adobe.com/internationalized/date/index.html) package to handle dates.\n\n## Blocks\n\nYou can see the `RangeCalendar` component in action in the 30+ [Calendar Blocks](/blocks/calendar) we've built.\n\n## Installation\n\n<InstallTabs>\n{#snippet cli()}\n<PMAddComp name=\"range-calendar\" />\n{/snippet}\n{#snippet manual()}\n<Steps>\n\n<Step>\n\nInstall `bits-ui` and `@internationalized/date`:\n\n</Step>\n\n<PMInstall command=\"bits-ui @internationalized/date -D\" />\n\n<Step>\n\nCopy and paste the following code into your project.\n\n</Step>\n{#if viewerData}\n\t<ComponentSource item={viewerData} data-llm-ignore/>\n{/if}\n\n</Steps>\n{/snippet}\n</InstallTabs>\n"
  },
  {
    "path": "docs/content/components/resizable.md",
    "content": "---\ntitle: Resizable\ndescription: Accessible resizable panel groups and layouts with keyboard support.\ncomponent: true\nlinks:\n  source: https://github.com/huntabyte/shadcn-svelte/tree/next/sites/docs/src/lib/registry/ui/resizable\n  doc: https://www.paneforge.com\n  api: https://www.paneforge.com/docs/components/pane-group\n---\n\n<script>\n\timport ComponentPreview from \"$lib/components/component-preview.svelte\";\n\timport ComponentSource from \"$lib/components/component-source.svelte\";\n\timport PMAddComp from \"$lib/components/pm-add-comp.svelte\";\n\timport PMInstall from \"$lib/components/pm-install.svelte\";\n\timport Steps from \"$lib/components/steps.svelte\";\n\timport InstallTabs from \"$lib/components/install-tabs.svelte\";\n\n\tlet { viewerData } = $props();\n\timport Step from \"$lib/components/step.svelte\";\n</script>\n\n<ComponentPreview name=\"resizable-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n## About\n\nThe `Resizable` component is built on top of [PaneForge](https://github.com/svecosystem/paneforge) by [Huntabyte](https://github.com/huntabyte). Visit the [PaneForge documentation](https://paneforge.com) for all the available props and abilities of the `Resizable` component.\n\n## Installation\n\n<InstallTabs>\n{#snippet cli()}\n<PMAddComp name=\"resizable\" />\n{/snippet}\n{#snippet manual()}\n<Steps>\n\n<Step>\n\nInstall `paneforge`:\n\n</Step>\n\n<PMInstall command=\"paneforge@next -D\" />\n\n<Step>\n\nCopy and paste the following code into your project.\n\n</Step>\n{#if viewerData}\n\t<ComponentSource item={viewerData} data-llm-ignore/>\n{/if}\n\n</Steps>\n{/snippet}\n</InstallTabs>\n\n## Usage\n\n```svelte showLineNumbers\n<script lang=\"ts\">\n  import * as Resizable from \"$lib/components/ui/resizable/index.js\";\n</script>\n```\n\n```svelte showLineNumbers\n<Resizable.PaneGroup direction=\"horizontal\">\n  <Resizable.Pane>One</Resizable.Pane>\n  <Resizable.Handle />\n  <Resizable.Pane>Two</Resizable.Pane>\n</Resizable.PaneGroup>\n```\n\n## Examples\n\n### Vertical\n\nUse the `direction` prop to set the direction of the resizable panels.\n\n<ComponentPreview name=\"resizable-vertical\">\n\n<div></div>\n\n</ComponentPreview>\n\n```svelte showLineNumbers {5}\n<script lang=\"ts\">\n  import * as Resizable from \"$lib/components/ui/resizable/index.js\";\n</script>\n\n<Resizable.PaneGroup direction=\"vertical\">\n  <Resizable.Pane>One</Resizable.Pane>\n  <Resizable.Handle />\n  <Resizable.Pane>Two</Resizable.Pane>\n</Resizable.PaneGroup>\n```\n\n### Handle\n\nYou can set or hide the handle by using the `withHandle` prop on the `ResizableHandle` component.\n\n<ComponentPreview name=\"resizable-handle\">\n\n<div></div>\n\n</ComponentPreview>\n\n```svelte showLineNumbers {7}\n<script lang=\"ts\">\n  import * as Resizable from \"$lib/components/ui/resizable/index.js\";\n</script>\n\n<Resizable.PaneGroup direction=\"vertical\">\n  <Resizable.Pane>One</Resizable.Pane>\n  <Resizable.Handle withHandle />\n  <Resizable.Pane>Two</Resizable.Pane>\n</Resizable.PaneGroup>\n```\n"
  },
  {
    "path": "docs/content/components/scroll-area.md",
    "content": "---\ntitle: Scroll Area\ndescription: Augments native scroll functionality for custom, cross-browser styling.\ncomponent: true\nlinks:\n  source: https://github.com/huntabyte/shadcn-svelte/tree/next/sites/docs/src/lib/registry/ui/scroll-area\n  doc: https://bits-ui.com/docs/components/scroll-area\n  api: https://bits-ui.com/docs/components/scroll-area#api-reference\n---\n\n<script>\n\timport ComponentPreview from \"$lib/components/component-preview.svelte\";\n\timport ComponentSource from \"$lib/components/component-source.svelte\";\n\timport PMAddComp from \"$lib/components/pm-add-comp.svelte\";\n\timport PMInstall from \"$lib/components/pm-install.svelte\";\n\timport Steps from \"$lib/components/steps.svelte\";\n\timport InstallTabs from \"$lib/components/install-tabs.svelte\";\n\n\tlet { viewerData } = $props();\n\timport Step from \"$lib/components/step.svelte\";\n</script>\n\n<ComponentPreview name=\"scroll-area-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n## Installation\n\n<InstallTabs>\n{#snippet cli()}\n<PMAddComp name=\"scroll-area\" />\n{/snippet}\n{#snippet manual()}\n<Steps>\n\n<Step>\n\nInstall `bits-ui`:\n\n</Step>\n\n<PMInstall command=\"bits-ui -D\" />\n\n<Step>\n\nCopy and paste the following code into your project.\n\n</Step>\n{#if viewerData}\n\t<ComponentSource item={viewerData} data-llm-ignore/>\n{/if}\n\n</Steps>\n{/snippet}\n</InstallTabs>\n\n## Usage\n\n```svelte showLineNumbers\n<script lang=\"ts\">\n  import { ScrollArea } from \"$lib/components/ui/scroll-area/index.js\";\n</script>\n```\n\n```svelte showLineNumbers\n<ScrollArea class=\"h-[200px] w-[350px] rounded-md border p-4\">\n  Jokester began sneaking into the castle in the middle of the night and\n  leaving jokes all over the place: under the king's pillow, in his soup, even\n  in the royal toilet. The king was furious, but he couldn't seem to stop\n  Jokester. And then, one day, the people of the kingdom discovered that the\n  jokes left by Jokester were so funny that they couldn't help but laugh. And\n  once they started laughing, they couldn't stop.\n</ScrollArea>\n```\n\n## Examples\n\n### Horizontal Scrolling\n\nSet the `orientation` prop to `\"horizontal\"` to enable horizontal scrolling.\n\n<ComponentPreview name=\"scroll-area-horizontal\">\n\n<div></div>\n\n</ComponentPreview>\n"
  },
  {
    "path": "docs/content/components/select.md",
    "content": "---\ntitle: Select\ndescription: Displays a list of options for the user to pick from—triggered by a button.\ncomponent: true\nlinks:\n  source: https://github.com/huntabyte/shadcn-svelte/tree/next/sites/docs/src/lib/registry/ui/select\n  doc: https://bits-ui.com/docs/components/select\n  api: https://bits-ui.com/docs/components/select#api-reference\n---\n\n<script>\n\timport ComponentPreview from \"$lib/components/component-preview.svelte\";\n\timport ComponentSource from \"$lib/components/component-source.svelte\";\n\timport PMAddComp from \"$lib/components/pm-add-comp.svelte\";\n\timport PMInstall from \"$lib/components/pm-install.svelte\";\n\timport Steps from \"$lib/components/steps.svelte\";\n\timport InstallTabs from \"$lib/components/install-tabs.svelte\";\n\n\tlet { viewerData } = $props();\n\timport Step from \"$lib/components/step.svelte\";\n</script>\n\n<ComponentPreview name=\"select-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n## Installation\n\n<InstallTabs>\n{#snippet cli()}\n<PMAddComp name=\"select\" />\n{/snippet}\n{#snippet manual()}\n<Steps>\n\n<Step>\n\nInstall `bits-ui`:\n\n</Step>\n\n<PMInstall command=\"bits-ui -D\" />\n\n<Step>\n\nCopy and paste the following code into your project.\n\n</Step>\n{#if viewerData}\n\t<ComponentSource item={viewerData} data-llm-ignore/>\n{/if}\n\n</Steps>\n{/snippet}\n</InstallTabs>\n\n## Usage\n\n```svelte showLineNumbers\n<script lang=\"ts\">\n  import * as Select from \"$lib/components/ui/select/index.js\";\n</script>\n```\n\n```svelte showLineNumbers\n<Select.Root type=\"single\">\n  <Select.Trigger class=\"w-[180px]\"></Select.Trigger>\n  <Select.Content>\n    <Select.Item value=\"light\">Light</Select.Item>\n    <Select.Item value=\"dark\">Dark</Select.Item>\n    <Select.Item value=\"system\">System</Select.Item>\n  </Select.Content>\n</Select.Root>\n```\n\n## Examples\n\n### Scrollable\n\n<ComponentPreview name=\"select-scrollable\">\n\n<div></div>\n\n</ComponentPreview>\n"
  },
  {
    "path": "docs/content/components/separator.md",
    "content": "---\ntitle: Separator\ndescription: Visually or semantically separates content.\ncomponent: true\nlinks:\n  source: https://github.com/huntabyte/shadcn-svelte/tree/next/sites/docs/src/lib/registry/ui/separator\n  doc: https://bits-ui.com/docs/components/separator\n  api: https://bits-ui.com/docs/components/separator#api-reference\n---\n\n<script>\n\timport ComponentPreview from \"$lib/components/component-preview.svelte\";\n\timport ComponentSource from \"$lib/components/component-source.svelte\";\n\timport PMAddComp from \"$lib/components/pm-add-comp.svelte\";\n\timport PMInstall from \"$lib/components/pm-install.svelte\";\n\timport Steps from \"$lib/components/steps.svelte\";\n\timport InstallTabs from \"$lib/components/install-tabs.svelte\";\n\n\tlet { viewerData } = $props();\n\timport Step from \"$lib/components/step.svelte\";\n</script>\n\n<ComponentPreview name=\"separator-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n## Installation\n\n<InstallTabs>\n{#snippet cli()}\n<PMAddComp name=\"separator\" />\n{/snippet}\n{#snippet manual()}\n<Steps>\n\n<Step>\n\nInstall `bits-ui`:\n\n</Step>\n\n<PMInstall command=\"bits-ui -D\" />\n\n<Step>\n\nCopy and paste the following code into your project.\n\n</Step>\n{#if viewerData}\n\t<ComponentSource item={viewerData} data-llm-ignore/>\n{/if}\n\n</Steps>\n{/snippet}\n</InstallTabs>\n\n## Usage\n\n```svelte showLineNumbers\n<script lang=\"ts\">\n  import { Separator } from \"$lib/components/ui/separator/index.js\";\n</script>\n```\n\n```svelte showLineNumbers\n<Separator />\n```\n"
  },
  {
    "path": "docs/content/components/sheet.md",
    "content": "---\ntitle: Sheet\ndescription: Extends the Dialog component to display content that complements the main content of the screen.\ncomponent: true\nlinks:\n  source: https://github.com/huntabyte/shadcn-svelte/tree/next/sites/docs/src/lib/registry/ui/sheet\n  doc: https://bits-ui.com/docs/components/dialog\n  api: https://bits-ui.com/docs/components/dialog#api-reference\n---\n\n<script>\n\timport ComponentPreview from \"$lib/components/component-preview.svelte\";\n\timport ComponentSource from \"$lib/components/component-source.svelte\";\n\timport PMAddComp from \"$lib/components/pm-add-comp.svelte\";\n\timport PMInstall from \"$lib/components/pm-install.svelte\";\n\timport Steps from \"$lib/components/steps.svelte\";\n\timport InstallTabs from \"$lib/components/install-tabs.svelte\";\n\n\tlet { viewerData } = $props();\n\timport Step from \"$lib/components/step.svelte\";\n</script>\n\n<ComponentPreview name=\"sheet-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n## Installation\n\n<InstallTabs>\n{#snippet cli()}\n<PMAddComp name=\"sheet\" />\n{/snippet}\n{#snippet manual()}\n<Steps>\n\n<Step>\n\nInstall `bits-ui`:\n\n</Step>\n\n<PMInstall command=\"bits-ui -D\" />\n\n<Step>\n\nCopy and paste the following code into your project.\n\n</Step>\n{#if viewerData}\n\t<ComponentSource item={viewerData} data-llm-ignore/>\n{/if}\n\n</Steps>\n{/snippet}\n</InstallTabs>\n\n## Usage\n\n```svelte showLineNumbers\n<script lang=\"ts\">\n  import * as Sheet from \"$lib/components/ui/sheet/index.js\";\n</script>\n```\n\n```svelte showLineNumbers\n<Sheet.Root>\n  <Sheet.Trigger>Open</Sheet.Trigger>\n  <Sheet.Content>\n    <Sheet.Header>\n      <Sheet.Title>Are you sure absolutely sure?</Sheet.Title>\n      <Sheet.Description>\n        This action cannot be undone. This will permanently delete your account\n        and remove your data from our servers.\n      </Sheet.Description>\n    </Sheet.Header>\n  </Sheet.Content>\n</Sheet.Root>\n```\n\n## Examples\n\n### Side\n\nPass the `side` property to `<Sheet.Content />` to indicate the edge of the screen where the component will appear. The values can be `top`, `right`, `bottom` or `left`.\n\n### Size\n\nYou can adjust the size of the sheet using CSS classes:\n\n```svelte showLineNumbers {3}\n<Sheet.Root>\n  <Sheet.Trigger>Open</Sheet.Trigger>\n  <Sheet.Content class=\"w-[400px] sm:w-[540px]\">\n    <Sheet.Header>\n      <Sheet.Title>Are you absolutely sure?</Sheet.Title>\n      <Sheet.Description>\n        This action cannot be undone. This will permanently delete your account\n        and remove your data from our servers.\n      </Sheet.Description>\n    </Sheet.Header>\n  </Sheet.Content>\n</Sheet.Root>\n```\n"
  },
  {
    "path": "docs/content/components/sidebar.md",
    "content": "---\ntitle: Sidebar\ndescription: A composable, themeable and customizable sidebar component.\ncomponent: true\nlinks:\n  source: https://github.com/huntabyte/shadcn-svelte/tree/next/sites/docs/src/lib/registry/ui/sidebar\n---\n\n<script>\n\timport ComponentPreview from '$lib/components/component-preview.svelte';\n\timport PMAddComp from \"$lib/components/pm-add-comp.svelte\";\n\timport PMInstall from \"$lib/components/pm-install.svelte\";\n\timport Steps from \"$lib/components/steps.svelte\";\n\timport Step from \"$lib/components/step.svelte\";\n\timport InstallTabs from \"$lib/components/install-tabs.svelte\";\n\timport ComponentSource from \"$lib/components/component-source.svelte\";\n\tlet { viewerData } = $props();\n\timport DocsFigure from \"$lib/components/docs-figure.svelte\";\n\timport Callout from \"$lib/components/callout.svelte\";\n</script>\n\n<DocsFigure caption=\"A sidebar that collapses to icons.\">\n<ComponentPreview type=\"block\" name=\"sidebar-07\" title=\"Sidebar\" class=\"w-full\">\n\n<div></div>\n\n</ComponentPreview>\n</DocsFigure>\n\nSidebars are one of the most complex components to build. They are central to any application and often contain a lot of moving parts.\n\nShad doesn't like building sidebars, so he built 30+ of them with all kinds of configurations. The core components have been extracted into `sidebar-*.svelte` files, and you can use them in your own projects.\n\nWe now have a solid foundation to build on top of. Composable. Themeable. Customizable.\n\n[Browse the Blocks Library](/blocks).\n\n## Installation\n\n<InstallTabs>\n{#snippet cli()}\n\n<Steps>\n\n<Step>Run the following command to install the `sidebar` components:</Step>\n\n<PMAddComp name=\"sidebar\" />\n\n<Step>Add the following colors to your CSS file</Step>\n\nWe'll go over the colors later in the [theming section](/docs/components/sidebar#theming).\n\n```css title=\"src/routes/layout.css\"\n:root {\n  --sidebar: oklch(0.985 0 0);\n  --sidebar-foreground: oklch(0.145 0 0);\n  --sidebar-primary: oklch(0.205 0 0);\n  --sidebar-primary-foreground: oklch(0.985 0 0);\n  --sidebar-accent: oklch(0.97 0 0);\n  --sidebar-accent-foreground: oklch(0.205 0 0);\n  --sidebar-border: oklch(0.922 0 0);\n  --sidebar-ring: oklch(0.708 0 0);\n}\n\n.dark {\n  --sidebar: oklch(0.205 0 0);\n  --sidebar-foreground: oklch(0.985 0 0);\n  --sidebar-primary: oklch(0.488 0.243 264.376);\n  --sidebar-primary-foreground: oklch(0.985 0 0);\n  --sidebar-accent: oklch(0.269 0 0);\n  --sidebar-accent-foreground: oklch(0.985 0 0);\n  --sidebar-border: oklch(1 0 0 / 10%);\n  --sidebar-ring: oklch(0.439 0 0);\n}\n```\n\n</Steps>\n{/snippet}\n\n{#snippet manual()}\n\n<Steps>\n\n<Step>\n\nCopy and paste the following code into your project.\n\n</Step>\n{#if viewerData}\n\t<ComponentSource item={viewerData} data-llm-ignore/>\n{/if}\n\n<Step>Add the following colors to your CSS file</Step>\n\nWe'll go over the colors later in the [theming section](/docs/components/sidebar#theming).\n\n```css title=\"src/routes/layout.css\"\n:root {\n  --sidebar: oklch(0.985 0 0);\n  --sidebar-foreground: oklch(0.145 0 0);\n  --sidebar-primary: oklch(0.205 0 0);\n  --sidebar-primary-foreground: oklch(0.985 0 0);\n  --sidebar-accent: oklch(0.97 0 0);\n  --sidebar-accent-foreground: oklch(0.205 0 0);\n  --sidebar-border: oklch(0.922 0 0);\n  --sidebar-ring: oklch(0.708 0 0);\n}\n\n.dark {\n  --sidebar: oklch(0.205 0 0);\n  --sidebar-foreground: oklch(0.985 0 0);\n  --sidebar-primary: oklch(0.488 0.243 264.376);\n  --sidebar-primary-foreground: oklch(0.985 0 0);\n  --sidebar-accent: oklch(0.269 0 0);\n  --sidebar-accent-foreground: oklch(0.985 0 0);\n  --sidebar-border: oklch(1 0 0 / 10%);\n  --sidebar-ring: oklch(0.439 0 0);\n}\n```\n\n</Steps>\n{/snippet}\n\n</InstallTabs>\n\n## Structure\n\nA `Sidebar` component is composed of the following parts:\n\n- `Sidebar.Provider` - Handles collapsible state.\n- `Sidebar.Root` - The sidebar container.\n- `Sidebar.Header` and `Sidebar.Footer` - Sticky at the top and bottom of the sidebar.\n- `Sidebar.Content` - Scrollable content.\n- `Sidebar.Group` - Section within the `Sidebar.Content`.\n- `Sidebar.Trigger` - Trigger for the `Sidebar`.\n\n<img src=\"/img/sidebar/sidebar-structure.png\" width=\"716\" height=\"420\" alt=\"Sidebar structure\" class=\"border dark:hidden rounded-lg overflow-hidden mt-6 w-full\" />\n\n<img src=\"/img/sidebar/sidebar-structure-dark.png\" width=\"716\" height=\"420\" alt=\"Sidebar structure\" class=\"border hidden dark:block rounded-lg overflow-hidden mt-6 w-full\" />\n\n## Usage\n\n```svelte showLineNumbers title=\"src/routes/+layout.svelte\"\n<script lang=\"ts\">\n  import * as Sidebar from \"$lib/components/ui/sidebar/index.js\";\n  import AppSidebar from \"$lib/components/app-sidebar.svelte\";\n\n  let { children } = $props();\n</script>\n\n<Sidebar.Provider>\n  <AppSidebar />\n  <main>\n    <Sidebar.Trigger />\n    {@render children?.()}\n  </main>\n</Sidebar.Provider>\n```\n\n```svelte showLineNumbers title=\"src/lib/components/app-sidebar.svelte\"\n<script lang=\"ts\">\n  import * as Sidebar from \"$lib/components/ui/sidebar/index.js\";\n</script>\n\n<Sidebar.Root>\n  <Sidebar.Header />\n  <Sidebar.Content>\n    <Sidebar.Group />\n    <Sidebar.Group />\n  </Sidebar.Content>\n  <Sidebar.Footer />\n</Sidebar.Root>\n```\n\n## Your First Sidebar\n\nLet's start with the most basic sidebar. A collapsible sidebar with a menu.\n\n<Steps>\n\n<Step>\n\nAdd a `Sidebar.Provider` and `Sidebar.Trigger` at the root of your application.\n\n</Step>\n\n```svelte showLineNumbers title=\"src/routes/+layout.svelte\"\n<script lang=\"ts\">\n  import * as Sidebar from \"$lib/components/ui/sidebar/index.js\";\n  import AppSidebar from \"$lib/components/app-sidebar.svelte\";\n\n  let { children } = $props();\n</script>\n\n<Sidebar.Provider>\n  <AppSidebar />\n  <main>\n    <Sidebar.Trigger />\n    {@render children?.()}\n  </main>\n</Sidebar.Provider>\n```\n\n<Step>\n\nCreate a new sidebar component at `src/lib/components/app-sidebar.svelte`.\n\n</Step>\n\n```svelte showLineNumbers title=\"src/lib/components/app-sidebar.svelte\"\n<script lang=\"ts\">\n  import * as Sidebar from \"$lib/components/ui/sidebar/index.js\";\n</script>\n\n<Sidebar.Root>\n  <Sidebar.Content />\n</Sidebar.Root>\n```\n\n<Step>\n\nNow, let's add a `Sidebar.Menu` to the sidebar.\n\n</Step>\n\nWe'll use the `Sidebar.Menu` component in a `Sidebar.Group`.\n\n```svelte showLineNumbers title=\"src/lib/components/app-sidebar.svelte\"\n<script lang=\"ts\">\n  import CalendarIcon from \"@lucide/svelte/icons/calendar\";\n  import HouseIcon from \"@lucide/svelte/icons/house\";\n  import InboxIcon from \"@lucide/svelte/icons/inbox\";\n  import SearchIcon from \"@lucide/svelte/icons/search\";\n  import SettingsIcon from \"@lucide/svelte/icons/settings\";\n  import * as Sidebar from \"$lib/components/ui/sidebar/index.js\";\n\n  // Menu items.\n  const items = [\n    {\n      title: \"Home\",\n      url: \"#\",\n      icon: HouseIcon,\n    },\n    {\n      title: \"Inbox\",\n      url: \"#\",\n      icon: InboxIcon,\n    },\n    {\n      title: \"Calendar\",\n      url: \"#\",\n      icon: CalendarIcon,\n    },\n    {\n      title: \"Search\",\n      url: \"#\",\n      icon: SearchIcon,\n    },\n    {\n      title: \"Settings\",\n      url: \"#\",\n      icon: SettingsIcon,\n    },\n  ];\n</script>\n\n<Sidebar.Root>\n  <Sidebar.Content>\n    <Sidebar.Group>\n      <Sidebar.GroupLabel>Application</Sidebar.GroupLabel>\n      <Sidebar.GroupContent>\n        <Sidebar.Menu>\n          {#each items as item (item.title)}\n            <Sidebar.MenuItem>\n              <Sidebar.MenuButton>\n                {#snippet child({ props })}\n                  <a href={item.url} {...props}>\n                    <item.icon />\n                    <span>{item.title}</span>\n                  </a>\n                {/snippet}\n              </Sidebar.MenuButton>\n            </Sidebar.MenuItem>\n          {/each}\n        </Sidebar.Menu>\n      </Sidebar.GroupContent>\n    </Sidebar.Group>\n  </Sidebar.Content>\n</Sidebar.Root>\n```\n\n<Step>You've created your first sidebar.</Step>\n\n<DocsFigure caption=\"Your first sidebar.\">\n<ComponentPreview type=\"block\" name=\"demo-sidebar\" title=\"Sidebar\" description=\"Your first sidebar.\" class=\"w-full\">\n\n<div></div>\n\n</ComponentPreview>\n</DocsFigure>\n\n</Steps>\n\n## Components\n\nThe components in the `sidebar-*.svelte` files are built to be composable i.e you build your sidebar by putting the provided components together. They also compose well with other shadcn-svelte components such as `DropdownMenu`, `Collapsible`, `Dialog`, etc.\n\n**If you need to change the code in the `sidebar-*.svelte` files, you are encouraged to do so. The code is yours. Use the provided components as a starting point to build your own**\n\nIn the next sections, we'll go over each component and how to use them.\n\n## Sidebar.Provider\n\nThe `Sidebar.Provider` component is used to provide the sidebar context to the `Sidebar` component. You should always wrap your application in a `Sidebar.Provider` component.\n\n### Props\n\n| Name           | Type                      | Description                                                                                                                             |\n| -------------- | ------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- |\n| `open`         | `boolean`                 | Open state of the sidebar (bindable).                                                                                                   |\n| `onOpenChange` | `(open: boolean) => void` | A callback fired _after_ the open state of the sidebar changes if uncontrolled, and _before_ the sidebar opens or closes if controlled. |\n\n### Width\n\nIf you have a single sidebar in your application, you can use the `SIDEBAR_WIDTH` and `SIDEBAR_WIDTH_MOBILE` constants in `src/lib/components/ui/sidebar/constants.ts` to set the width of the sidebar.\n\n```ts showLineNumbers title=\"src/lib/components/ui/sidebar/constants.ts\"\nexport const SIDEBAR_WIDTH = \"16rem\";\nexport const SIDEBAR_WIDTH_MOBILE = \"18rem\";\n```\n\nFor multiple sidebars in your application, you can use the `style` prop to set the width of the sidebar.\n\nTo set the width of the sidebar, you can use the `--sidebar-width` and `--sidebar-width-mobile` CSS variables in the `style` prop.\n\n```svelte showLineNumbers\n<Sidebar.Provider\n  style=\"--sidebar-width: 20rem; --sidebar-width-mobile: 20rem;\"\n>\n  <Sidebar.Root />\n</Sidebar.Provider>\n```\n\nThis will not only handle the width of the sidebar but also the layout spacing.\n\n### Keyboard Shortcut\n\nThe `SIDEBAR_KEYBOARD_SHORTCUT` variable in `src/lib/components/ui/sidebar/constants.ts` is used to set the keyboard shortcut used to open and close the sidebar.\n\nTo trigger the sidebar, you use the `cmd+b` keyboard shortcut on Mac and `ctrl+b` on Windows.\n\nYou can change the keyboard shortcut by changing the value of the `SIDEBAR_KEYBOARD_SHORTCUT` variable.\n\n```ts showLineNumbers title=\"src/lib/components/ui/sidebar/constants.ts\"\nexport const SIDEBAR_KEYBOARD_SHORTCUT = \"b\";\n```\n\n## Sidebar.Root\n\nThe main `Sidebar` component used to render a collapsible sidebar.\n\n```svelte showLineNumbers\n<script lang=\"ts\">\n  import * as Sidebar from \"$lib/components/ui/sidebar/index.js\";\n</script>\n\n<Sidebar.Root />\n```\n\n### Props\n\n| Property      | Type                              | Description                       |\n| ------------- | --------------------------------- | --------------------------------- |\n| `side`        | `left` or `right`                 | The side of the sidebar.          |\n| `variant`     | `sidebar`, `floating`, or `inset` | The variant of the sidebar.       |\n| `collapsible` | `offcanvas`, `icon`, or `none`    | Collapsible state of the sidebar. |\n\n### side\n\nUse the `side` prop to change the side of the sidebar.\n\nAvailable options are `left` and `right`.\n\n```svelte showLineNumbers\n<Sidebar.Root side=\"left | right\" />\n```\n\n### variant\n\nUse the `variant` prop to change the variant of the sidebar.\n\nAvailable options are `sidebar`, `floating` and `inset`.\n\n```svelte showLineNumbers\n<Sidebar.Root variant=\"sidebar | floating | inset\" />\n```\n\n<Callout>\n\n**Note:** If you use the `inset` variant, remember to wrap your main content\nin a `SidebarInset` component.\n\n</Callout>\n\n```svelte showLineNumbers\n<Sidebar.Provider>\n  <Sidebar.Root variant=\"inset\">\n    <Sidebar.Inset>\n      <main>\n        <!-- Your main content -->\n      </main>\n    </Sidebar.Inset>\n  </Sidebar.Root>\n</Sidebar.Provider>\n```\n\n### collapsible\n\nUse the `collapsible` prop to make the sidebar collapsible.\n\nAvailable options are `offcanvas`, `icon` and `none`.\n\n```svelte showLineNumbers\n<Sidebar.Root collapsible=\"offcanvas | icon | none\" />\n```\n\n| Prop        | Description                                                  |\n| ----------- | ------------------------------------------------------------ |\n| `offcanvas` | A collapsible sidebar that slides in from the left or right. |\n| `icon`      | A sidebar that collapses to icons.                           |\n| `none`      | A non-collapsible sidebar.                                   |\n\n## useSidebar\n\nThe `useSidebar` function is used to hook into the sidebar context. It returns a reactive class instance, so it _cannot_ be destructured. Additionally, it must be called during the lifecycle of the component.\n\n```svelte showLineNumbers\n<script lang=\"ts\">\n  import { useSidebar } from \"$lib/components/ui/sidebar/index.js\";\n  const sidebar = useSidebar();\n\n  // ...\n\n  sidebar.state;\n  sidebar.isMobile;\n  sidebar.toggle();\n</script>\n```\n\n| Property        | Type                      | Description                                   |\n| --------------- | ------------------------- | --------------------------------------------- |\n| `state`         | `expanded` or `collapsed` | The current state of the sidebar.             |\n| `open`          | `boolean`                 | Whether the sidebar is open.                  |\n| `setOpen`       | `(open: boolean) => void` | Sets the open state of the sidebar.           |\n| `openMobile`    | `boolean`                 | Whether the sidebar is open on mobile.        |\n| `setOpenMobile` | `(open: boolean) => void` | Sets the open state of the sidebar on mobile. |\n| `isMobile`      | `boolean`                 | Whether the sidebar is on mobile.             |\n| `toggle`        | `() => void`              | Toggles the sidebar. Desktop and mobile.      |\n\n## Sidebar.Header\n\nUse the `Sidebar.Header` component to add a sticky header to the sidebar.\n\nThe following example adds a `<DropdownMenu>` to the `Sidebar.Header`.\n\n<DocsFigure caption=\"A sidebar header with a dropdown menu.\">\n<ComponentPreview name=\"demo-sidebar-header\" title=\"Sidebar\" type=\"block\" class=\"w-full\">\n\n<div></div>\n\n</ComponentPreview>\n</DocsFigure>\n\n```svelte showLineNumbers title=\"src/lib/components/app-sidebar.svelte\"\n<Sidebar.Root>\n  <Sidebar.Header>\n    <Sidebar.Menu>\n      <Sidebar.MenuItem>\n        <DropdownMenu.Root>\n          <DropdownMenu.Trigger>\n            {#snippet child({ props })}\n              <Sidebar.MenuButton {...props}>\n                Select Workspace\n                <ChevronDown class=\"ms-auto\" />\n              </Sidebar.MenuButton>\n            {/snippet}\n          </DropdownMenu.Trigger>\n          <DropdownMenu.Content class=\"w-(--bits-dropdown-menu-anchor-width)\">\n            <DropdownMenu.Item>\n              <span>Acme Inc</span>\n            </DropdownMenu.Item>\n            <DropdownMenu.Item>\n              <span>Acme Corp.</span>\n            </DropdownMenu.Item>\n          </DropdownMenu.Content>\n        </DropdownMenu.Root>\n      </Sidebar.MenuItem>\n    </Sidebar.Menu>\n  </Sidebar.Header>\n</Sidebar.Root>\n```\n\n## Sidebar.Footer\n\nUse the `Sidebar.Footer` component to add a sticky footer to the sidebar.\n\nThe following example adds a `<DropdownMenu>` to the `Sidebar.Footer`.\n\n<DocsFigure caption=\"A sidebar footer with a dropdown menu.\">\n<ComponentPreview name=\"demo-sidebar-footer\" title=\"Sidebar\" type=\"block\" class=\"w-full\">\n\n<div></div>\n\n</ComponentPreview>\n</DocsFigure>\n\n```svelte showLineNumbers title=\"src/lib/components/app-sidebar.svelte\"\n<Sidebar.Provider>\n  <Sidebar.Root>\n    <Sidebar.Header />\n    <Sidebar.Content />\n    <Sidebar.Footer>\n      <Sidebar.Menu>\n        <Sidebar.MenuItem>\n          <DropdownMenu.Root>\n            <DropdownMenu.Trigger>\n              {#snippet child({ props })}\n                <Sidebar.MenuButton\n                  {...props}\n                  class=\"data-[state=open]:bg-sidebar-accent data-[state=open]:text-sidebar-accent-foreground\"\n                >\n                  Username\n                  <ChevronUp class=\"ms-auto\" />\n                </Sidebar.MenuButton>\n              {/snippet}\n            </DropdownMenu.Trigger>\n            <DropdownMenu.Content\n              side=\"top\"\n              class=\"w-(--bits-dropdown-menu-anchor-width)\"\n            >\n              <DropdownMenu.Item>\n                <span>Account</span>\n              </DropdownMenu.Item>\n              <DropdownMenu.Item>\n                <span>Billing</span>\n              </DropdownMenu.Item>\n              <DropdownMenu.Item>\n                <span>Sign out</span>\n              </DropdownMenu.Item>\n            </DropdownMenu.Content>\n          </DropdownMenu.Root>\n        </Sidebar.MenuItem>\n      </Sidebar.Menu>\n    </Sidebar.Footer>\n  </Sidebar.Root>\n  <Sidebar.Inset>\n    <header class=\"flex h-12 items-center justify-between px-4\">\n      <Sidebar.Trigger />\n    </header>\n  </Sidebar.Inset>\n</Sidebar.Provider>\n```\n\n## Sidebar.Content\n\nThe `Sidebar.Content` component is used to wrap the content of the sidebar. This is where you add your `Sidebar.Group` components. It is scrollable.\n\n```svelte showLineNumbers\n<Sidebar.Root>\n  <Sidebar.Content>\n    <Sidebar.Group />\n    <Sidebar.Group />\n  </Sidebar.Content>\n</Sidebar.Root>\n```\n\n## Sidebar.Group\n\nUse the `Sidebar.Group` component to create a section within the sidebar.\n\nA `Sidebar.Group` has a `Sidebar.GroupLabel`, a `Sidebar.GroupContent` and an optional `Sidebar.GroupAction`.\n\n<DocsFigure caption=\"A sidebar group.\">\n<ComponentPreview name=\"demo-sidebar-group\" title=\"Sidebar\" type=\"block\" class=\"w-full\">\n\n<div></div>\n\n</ComponentPreview>\n</DocsFigure>\n\n```svelte showLineNumbers\n<Sidebar.Root>\n  <Sidebar.Content>\n    <Sidebar.Group>\n      <Sidebar.GroupLabel>Application</Sidebar.GroupLabel>\n      <Sidebar.GroupAction>\n        <Plus /> <span class=\"sr-only\">Add Project</span>\n      </Sidebar.GroupAction>\n      <Sidebar.GroupContent></Sidebar.GroupContent>\n    </Sidebar.Group>\n  </Sidebar.Content>\n</Sidebar.Root>\n```\n\n## Collapsible Sidebar.Group\n\nTo make a `Sidebar.Group` collapsible, wrap it in a `Collapsible`.\n\n<DocsFigure caption=\"A collapsible sidebar group.\">\n<ComponentPreview name=\"demo-sidebar-group-collapsible\" title=\"Sidebar\" type=\"block\" class=\"w-full\">\n\n<div></div>\n\n</ComponentPreview>\n</DocsFigure>\n\n```svelte showLineNumbers\n<Collapsible.Root open class=\"group/collapsible\">\n  <Sidebar.Group>\n    <Sidebar.GroupLabel>\n      {#snippet child({ props })}\n        <Collapsible.Trigger {...props}>\n          Help\n          <ChevronDown\n            class=\"ms-auto transition-transform group-data-[state=open]/collapsible:rotate-180\"\n          />\n        </Collapsible.Trigger>\n      {/snippet}\n    </Sidebar.GroupLabel>\n    <Collapsible.Content>\n      <Sidebar.GroupContent />\n    </Collapsible.Content>\n  </Sidebar.Group>\n</Collapsible.Root>\n```\n\n<Callout>\n\n**Note:** We wrap the `Collapsible.Trigger` in a `Sidebar.GroupLabel` to render\na button.\n\n</Callout>\n\n## Sidebar.GroupAction\n\nUse the `Sidebar.GroupAction` component to add an action to a `Sidebar.Group`.\n\n```svelte showLineNumbers {3-5}\n<Sidebar.Group>\n  <Sidebar.GroupLabel>Projects</Sidebar.GroupLabel>\n  <Sidebar.GroupAction title=\"Add Project\">\n    <Plus /> <span class=\"sr-only\">Add Project</span>\n  </Sidebar.GroupAction>\n  <Sidebar.GroupContent />\n</Sidebar.Group>\n```\n\n<DocsFigure caption=\"A sidebar group with an action button.\">\n<ComponentPreview name=\"demo-sidebar-group-action\" title=\"Sidebar\" type=\"block\" class=\"w-full\">\n\n<div></div>\n\n</ComponentPreview>\n</DocsFigure>\n\n## Sidebar.Menu\n\nThe `Sidebar.Menu` component is used for building a menu within a `Sidebar.Group`.\n\nA `Sidebar.Menu` is composed of `Sidebar.MenuItem`, `Sidebar.MenuButton`, `Sidebar.MenuAction`, and `Sidebar.MenuSub` components.\n\n<img src=\"/img/sidebar/sidebar-menu.png\" width=\"716\" height=\"420\" alt=\"Sidebar menu\" class=\"border dark:hidden rounded-lg overflow-hidden mt-6 w-full\" />\n\n<img src=\"/img/sidebar/sidebar-menu-dark.png\" width=\"716\" height=\"420\" alt=\"Sidebar menu\" class=\"border hidden dark:block rounded-lg overflow-hidden mt-6 w-full\" />\n\nHere's an example of a `Sidebar.Menu` component rendering a list of projects.\n\n<DocsFigure caption=\"A sidebar menu with a list of projects.\">\n<ComponentPreview name=\"demo-sidebar-menu\" title=\"Sidebar\" type=\"block\" class=\"w-full\">\n\n<div></div>\n\n</ComponentPreview>\n</DocsFigure>\n\n```svelte showLineNumbers\n<Sidebar.Root>\n  <Sidebar.Content>\n    <Sidebar.Group>\n      <Sidebar.GroupLabel>Projects</Sidebar.GroupLabel>\n      <Sidebar.GroupContent>\n        <Sidebar.Menu>\n          {#each projects as project}\n            <Sidebar.MenuItem>\n              <Sidebar.MenuButton>\n                {#snippet child({ props })}\n                  <a href={project.url} {...props}>\n                    <project.icon />\n                    <span>{project.name}</span>\n                  </a>\n                {/snippet}\n              </Sidebar.MenuButton>\n            </Sidebar.MenuItem>\n          {/each}\n        </Sidebar.Menu>\n      </Sidebar.GroupContent>\n    </Sidebar.Group>\n  </Sidebar.Content>\n</Sidebar.Root>\n```\n\n## Sidebar.MenuButton\n\nThe `Sidebar.MenuButton` component is used to render a menu button within a `Sidebar.Menu`.\n\n### Link or Anchor\n\nBy default, the `Sidebar.MenuButton` renders a button, but you can use the `child` snippet to render a different component such as an `<a>` tag.\n\n```svelte showLineNumbers\n<Sidebar.MenuButton>\n  {#snippet child({ props })}\n    <a href=\"/home\" {...props}> Home </a>\n  {/snippet}\n</Sidebar.MenuButton>\n```\n\n### Icon and Label\n\nYou can render an icon and a truncated label inside the button. Remember to wrap the label in a `<span>` tag.\n\n```svelte showLineNumbers\n<Sidebar.MenuButton>\n  {#snippet child({ props })}\n    <a href=\"/home\" {...props}>\n      <House />\n      <span>Home</span>\n    </a>\n  {/snippet}\n</Sidebar.MenuButton>\n```\n\n### isActive\n\nUse the `isActive` prop to mark a menu item as active.\n\n```svelte showLineNumbers\n<Sidebar.MenuButton isActive>\n  {#snippet child({ props })}\n    <a href=\"/home\" {...props}>\n      <House />\n      <span>Home</span>\n    </a>\n  {/snippet}\n</Sidebar.MenuButton>\n```\n\n## Sidebar.MenuAction\n\nThe `Sidebar.MenuAction` component is used to render a menu action within a `Sidebar.Menu`.\n\nThis button works independently of the `Sidebar.MenuButton`, i.e. you can have the `Sidebar.MenuButton` as a clickable link and the `Sidebar.MenuAction` as a button.\n\n```svelte showLineNumbers\n<Sidebar.MenuItem>\n  <Sidebar.MenuButton>\n    {#snippet child({ props })}\n      <a href=\"/home\" {...props}>\n        <House />\n        <span>Home</span>\n      </a>\n    {/snippet}\n  </Sidebar.MenuButton>\n  <Sidebar.MenuAction>\n    <Plus /> <span class=\"sr-only\">Add Project</span>\n  </Sidebar.MenuAction>\n</Sidebar.MenuItem>\n```\n\n### DropdownMenu\n\nHere's an example of a `Sidebar.MenuAction` that renders a `DropdownMenu`.\n\n<DocsFigure caption=\"A sidebar menu action with a dropdown menu.\">\n<ComponentPreview name=\"demo-sidebar-menu-action\" title=\"Sidebar\" type=\"block\" class=\"w-full\">\n\n<div></div>\n\n</ComponentPreview>\n</DocsFigure>\n\n```svelte showLineNumbers\n<Sidebar.MenuItem>\n  <Sidebar.MenuButton>\n    {#snippet child({ props })}\n      <a href=\"##\" {...props}>\n        <House />\n        <span>Home</span>\n      </a>\n    {/snippet}\n  </Sidebar.MenuButton>\n  <DropdownMenu.Root>\n    <DropdownMenu.Trigger>\n      {#snippet child({ props })}\n        <Sidebar.MenuAction {...props}>\n          <Ellipsis />\n        </Sidebar.MenuAction>\n      {/snippet}\n    </DropdownMenu.Trigger>\n    <DropdownMenu.Content side=\"right\" align=\"start\">\n      <DropdownMenu.Item>\n        <span>Edit Project</span>\n      </DropdownMenu.Item>\n      <DropdownMenu.Item>\n        <span>Delete Project</span>\n      </DropdownMenu.Item>\n    </DropdownMenu.Content>\n  </DropdownMenu.Root>\n</Sidebar.MenuItem>\n```\n\n## Sidebar.MenuSub\n\nThe `Sidebar.MenuSub` component is used to render a submenu within a `Sidebar.Menu`.\n\nUse `Sidebar.MenuSubItem` and `Sidebar.MenuSubButton` to render a submenu item.\n\n<DocsFigure caption=\"A sidebar menu sub.\">\n<ComponentPreview name=\"demo-sidebar-menu-sub\" title=\"Sidebar\" type=\"block\" class=\"w-full\">\n\n<div></div>\n\n</ComponentPreview>\n</DocsFigure>\n\n```svelte showLineNumbers\n<Sidebar.MenuItem>\n  <Sidebar.MenuButton />\n  <Sidebar.MenuSub>\n    <Sidebar.MenuSubItem>\n      <Sidebar.MenuSubButton />\n    </Sidebar.MenuSubItem>\n    <Sidebar.MenuSubItem>\n      <Sidebar.MenuSubButton />\n    </Sidebar.MenuSubItem>\n  </Sidebar.MenuSub>\n</Sidebar.MenuItem>\n```\n\n## Collapsible Sidebar.Menu\n\nTo make a `Sidebar.Menu` collapsible, wrap it and the `Sidebar.MenuSub` components in a `Collapsible`.\n\n<DocsFigure caption=\"A collapsible sidebar menu.\">\n<ComponentPreview name=\"demo-sidebar-menu-collapsible\" title=\"Sidebar\" type=\"block\" class=\"w-full\">\n\n<div></div>\n\n</ComponentPreview>\n</DocsFigure>\n\n```svelte showLineNumbers\n<Sidebar.Menu>\n  <Collapsible.Root open class=\"group/collapsible\">\n    <Sidebar.MenuItem>\n      <Collapsible.Trigger>\n        {#snippet child({ props })}\n          <Sidebar.MenuButton {...props} />\n        {/snippet}\n      </Collapsible.Trigger>\n      <Collapsible.Content>\n        <Sidebar.MenuSub>\n          <Sidebar.MenuSubItem />\n        </Sidebar.MenuSub>\n      </Collapsible.Content>\n    </Sidebar.MenuItem>\n  </Collapsible.Root>\n</Sidebar.Menu>\n```\n\n## Sidebar.MenuBadge\n\nThe `Sidebar.MenuBadge` component is used to render a badge within a `Sidebar.MenuItem`.\n\n<DocsFigure caption=\"A sidebar menu badge.\">\n<ComponentPreview name=\"demo-sidebar-menu-badge\" title=\"Sidebar\" type=\"block\" class=\"w-full\">\n\n<div></div>\n\n</ComponentPreview>\n</DocsFigure>\n\n```svelte showLineNumbers\n<Sidebar.MenuItem>\n  <Sidebar.MenuButton />\n  <Sidebar.MenuBadge>24</Sidebar.MenuBadge>\n</Sidebar.MenuItem>\n```\n\n## Sidebar.MenuSkeleton\n\nThe `Sidebar.MenuSkeleton` component is used to render a skeleton within a `Sidebar.MenuItem`. You can use this to show a loading state while waiting for data to load.\n\n```svelte showLineNumbers\n<Sidebar.Menu>\n  {#each Array.from({ length: 5 }) as _, index (index)}\n    <Sidebar.MenuItem>\n      <Sidebar.MenuSkeleton />\n    </Sidebar.MenuItem>\n  {/each}\n</Sidebar.Menu>\n```\n\n## Sidebar.Separator\n\nThe `Sidebar.Separator` component is used to render a separator within a `Sidebar`.\n\n```svelte showLineNumbers\n<Sidebar.Root>\n  <Sidebar.Header />\n  <Sidebar.Separator />\n  <Sidebar.Content>\n    <Sidebar.Group />\n    <Sidebar.Separator />\n    <Sidebar.Group />\n  </Sidebar.Content>\n</Sidebar.Root>\n```\n\n## Sidebar.Trigger\n\nUse the `Sidebar.Trigger` component to render a button that toggles the sidebar.\n\nThe `Sidebar.Trigger` component must be used within a `Sidebar.Provider`.\n\n```svelte showLineNumbers\n<Sidebar.Provider>\n  <Sidebar.Root />\n  <main>\n    <Sidebar.Trigger />\n  </main>\n</Sidebar.Provider>\n```\n\n## Custom Trigger\n\nTo create a custom trigger, you can use the `useSidebar` hook.\n\n```svelte showLineNumbers\n<script lang=\"ts\">\n  import { useSidebar } from \"$lib/components/ui/sidebar/index.js\";\n  const sidebar = useSidebar();\n</script>\n\n<button onclick={() => sidebar.toggle()}>Toggle Sidebar</button>\n```\n\n## Sidebar.Rail\n\nThe `Sidebar.Rail` component is used to render a rail within a `Sidebar.Root`. This rail can be used to toggle the sidebar.\n\n```svelte showLineNumbers\n<Sidebar.Root>\n  <Sidebar.Header />\n  <Sidebar.Content>\n    <Sidebar.Group />\n  </Sidebar.Content>\n  <Sidebar.Footer />\n  <Sidebar.Rail />\n</Sidebar.Root>\n```\n\n## Controlled Sidebar\n\nUse Svelte's [Function Binding](https://svelte.dev/docs/svelte/bind#Function-bindings) to control the sidebar state.\n\n<DocsFigure caption=\"A controlled sidebar.\">\n<ComponentPreview name=\"demo-sidebar-controlled\" title=\"Sidebar\" type=\"block\" class=\"w-full\">\n\n<div></div>\n\n</ComponentPreview>\n</DocsFigure>\n\n```svelte showLineNumbers\n<script lang=\"ts\">\n  import * as Sidebar from \"$lib/components/ui/sidebar/index.js\";\n\n  let myOpen = $state(true);\n</script>\n\n<Sidebar.Provider bind:open={() => myOpen, (newOpen) => (myOpen = newOpen)}>\n  <Sidebar.Root />\n</Sidebar.Provider>\n\n<!-- or -->\n\n<Sidebar.Provider bind:open>\n  <Sidebar.Root />\n</Sidebar.Provider>\n```\n\n## Theming\n\nWe use the following CSS variables to theme the sidebar.\n\n```css\n:root {\n  --sidebar: oklch(0.985 0 0);\n  --sidebar-foreground: oklch(0.145 0 0);\n  --sidebar-primary: oklch(0.205 0 0);\n  --sidebar-primary-foreground: oklch(0.985 0 0);\n  --sidebar-accent: oklch(0.97 0 0);\n  --sidebar-accent-foreground: oklch(0.205 0 0);\n  --sidebar-border: oklch(0.922 0 0);\n  --sidebar-ring: oklch(0.708 0 0);\n}\n\n.dark {\n  --sidebar: oklch(0.205 0 0);\n  --sidebar-foreground: oklch(0.985 0 0);\n  --sidebar-primary: oklch(0.488 0.243 264.376);\n  --sidebar-primary-foreground: oklch(0.985 0 0);\n  --sidebar-accent: oklch(0.269 0 0);\n  --sidebar-accent-foreground: oklch(0.985 0 0);\n  --sidebar-border: oklch(1 0 0 / 10%);\n  --sidebar-ring: oklch(0.439 0 0);\n}\n```\n\n**We intentionally use different variables for the sidebar and the rest of the application** to make it easy to have a sidebar that is styled differently from the rest of the application. Think a sidebar with a darker shade from the main application.\n\n## Styling\n\nHere are some tips for styling the sidebar based on different states.\n\n- **Styling an element based on the sidebar collapsible state.** The following will hide the `Sidebar.Group` when the sidebar is in `icon` mode.\n\n```svelte\n<Sidebar.Root collapsible=\"icon\">\n  <Sidebar.Content>\n    <Sidebar.Group class=\"group-data-[collapsible=icon]:hidden\" />\n  </Sidebar.Content>\n</Sidebar.Root>\n```\n\n- **Styling a menu action based on the menu button active state.** The following will force the menu action to be visible when the menu button is active.\n\n```svelte\n<Sidebar.MenuItem>\n  <Sidebar.MenuButton />\n  <Sidebar.MenuAction\n    class=\"peer-data-[active=true]/menu-button:opacity-100\"\n  />\n</Sidebar.MenuItem>\n```\n\nYou can find more tips on using states for styling in this [Twitter thread](https://x.com/shadcn/status/1842329158879420864).\n"
  },
  {
    "path": "docs/content/components/skeleton.md",
    "content": "---\ntitle: Skeleton\ndescription: Use to show a placeholder while content is loading.\ncomponent: true\nlinks:\n  source: https://github.com/huntabyte/shadcn-svelte/tree/next/sites/docs/src/lib/registry/ui/skeleton\n---\n\n<script>\n\timport ComponentPreview from \"$lib/components/component-preview.svelte\";\n\timport ComponentSource from \"$lib/components/component-source.svelte\";\n\timport PMAddComp from \"$lib/components/pm-add-comp.svelte\";\n\timport PMInstall from \"$lib/components/pm-install.svelte\";\n\timport Steps from \"$lib/components/steps.svelte\";\n\timport Step from \"$lib/components/step.svelte\";\n\timport InstallTabs from \"$lib/components/install-tabs.svelte\";\n\n\tlet { viewerData } = $props();\n</script>\n\n<ComponentPreview name=\"skeleton-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n## Installation\n\n<InstallTabs>\n{#snippet cli()}\n<PMAddComp name=\"skeleton\" />\n{/snippet}\n{#snippet manual()}\n<Steps>\n\n<Step>\n\nCopy and paste the following code into your project.\n\n</Step>\n{#if viewerData}\n\t<ComponentSource item={viewerData} data-llm-ignore/>\n{/if}\n\n</Steps>\n{/snippet}\n</InstallTabs>\n\n## Usage\n\n```svelte\n<script lang=\"ts\">\n  import { Skeleton } from \"$lib/components/ui/skeleton/index.js\";\n</script>\n```\n\n```svelte\n<Skeleton class=\"h-[20px] w-[100px] rounded-full\" />\n```\n\n## Examples\n\n## Card\n\n<ComponentPreview name=\"skeleton-card\">\n\n<div></div>\n\n</ComponentPreview>\n"
  },
  {
    "path": "docs/content/components/slider.md",
    "content": "---\ntitle: Slider\ndescription: An input where the user selects a value from within a given range.\ncomponent: true\nlinks:\n  source: https://github.com/huntabyte/shadcn-svelte/tree/next/sites/docs/src/lib/registry/ui/slider\n  doc: https://bits-ui.com/docs/components/slider\n  api: https://bits-ui.com/docs/components/slider#api-reference\n---\n\n<script>\n\timport ComponentPreview from \"$lib/components/component-preview.svelte\";\n\timport ComponentSource from \"$lib/components/component-source.svelte\";\n\timport PMAddComp from \"$lib/components/pm-add-comp.svelte\";\n\timport PMInstall from \"$lib/components/pm-install.svelte\";\n\timport Steps from \"$lib/components/steps.svelte\";\n\timport Step from \"$lib/components/step.svelte\";\n\timport InstallTabs from \"$lib/components/install-tabs.svelte\";\n\n\tlet { viewerData } = $props();\n</script>\n\n<ComponentPreview name=\"slider-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n## Installation\n\n<InstallTabs>\n{#snippet cli()}\n<PMAddComp name=\"slider\" />\n{/snippet}\n{#snippet manual()}\n<Steps>\n\n<Step>\n\nInstall `bits-ui`:\n\n</Step>\n\n<PMInstall command=\"bits-ui -D\" />\n\n<Step>\n\nCopy and paste the following code into your project.\n\n</Step>\n{#if viewerData}\n\t<ComponentSource item={viewerData} data-llm-ignore/>\n{/if}\n\n</Steps>\n{/snippet}\n</InstallTabs>\n\n## Usage\n\n```svelte\n<script lang=\"ts\">\n  import { Slider } from \"$lib/components/ui/slider/index.js\";\n  let value = $state(33);\n</script>\n```\n\n```svelte\n<Slider type=\"single\" bind:value max={100} step={1} />\n```\n"
  },
  {
    "path": "docs/content/components/sonner.md",
    "content": "---\ntitle: Sonner\ndescription: An opinionated toast component for Svelte.\ncomponent: true\nlinks:\n  source: https://github.com/huntabyte/shadcn-svelte/tree/next/sites/docs/src/lib/registry/ui/sonner\n  doc: https://svelte-sonner.vercel.app/\n---\n\n<script>\n\timport ComponentPreview from \"$lib/components/component-preview.svelte\";\n\timport ComponentSource from \"$lib/components/component-source.svelte\";\n\timport PMAddComp from \"$lib/components/pm-add-comp.svelte\";\n\timport PMInstall from \"$lib/components/pm-install.svelte\";\n\timport Steps from \"$lib/components/steps.svelte\";\n\timport Step from \"$lib/components/step.svelte\";\n\timport InstallTabs from \"$lib/components/install-tabs.svelte\";\n\n\tlet { viewerData } = $props();\n</script>\n\n<ComponentPreview name=\"sonner-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n## About\n\nThe Sonner component is provided by [svelte-sonner](https://svelte-sonner.vercel.app/), which is a Svelte port of [Sonner](https://sonner.emilkowal.ski/), originally created by [Emil Kowalski](https://twitter.com/emilkowalski_) for React.\n\n## Installation\n\n<Step>Setup theme support</Step>\n\nBy default, Sonner will use the user's system preferences to determine whether to show the light or dark theme. To get around this, you can either pass in a custom `theme` prop to the component, or simply use [mode-watcher](https://github.com/svecosystem/mode-watcher) which you can hardcode to `dark` or `light` mode should you wish.\n\nYou can learn more about setting up Dark Mode support [here](/docs/dark-mode).\n\nIf you wish to opt out of Dark Mode support, you can uninstall `mode-watcher` and remove the `theme` prop from the component after installing via CLI, or manually install the component and don't include `mode-watcher`\n\n<InstallTabs>\n{#snippet cli()}\n<Steps>\n\n<Step>Run the following command:</Step>\n<PMAddComp name=\"sonner\" />\n\n<Step>Add the Toaster component</Step>\n\n```svelte showLineNumbers title=\"+layout.svelte\" {2,6}\n<script lang=\"ts\">\n  import { Toaster } from \"$lib/components/ui/sonner/index.js\";\n  let { children } = $props();\n</script>\n\n<Toaster />\n\n{@render children?.()}\n```\n\n</Steps>\n{/snippet}\n{#snippet manual()}\n\n<Steps>\n<Step>\n\nInstall `svelte-sonner`:\n\n</Step>\n\n<PMInstall command=\"svelte-sonner -D\" />\n\n<Step>\n\nCopy and paste the following code into your project.\n\n</Step>\n{#if viewerData}\n\t<ComponentSource item={viewerData} data-llm-ignore/>\n{/if}\n\n<Step>Add the Toaster component</Step>\n\n```svelte showLineNumbers title=\"+layout.svelte\" {2,6}\n<script lang=\"ts\">\n  import { Toaster } from \"$lib/components/ui/sonner/index.js\";\n  let { children } = $props();\n</script>\n\n<Toaster />\n\n{@render children?.()}\n```\n\n</Steps>\n{/snippet}\n</InstallTabs>\n\n## Usage\n\n```svelte\n<script lang=\"ts\">\n  import { toast } from \"svelte-sonner\";\n  import { Button } from \"$lib/components/ui/button/index.js\";\n</script>\n```\n\n```svelte\n<Button onclick={() => toast(\"Hello world\")}>Show toast</Button>\n```\n\n## Examples\n\n<ComponentPreview name=\"sonner-types\">\n\n<div></div>\n\n</ComponentPreview>\n\n## Changelog\n\n### 2025-12 Icons\n\nWe've updated the Sonner component to use icons from `lucide`. Update your `sonner.svelte` file to use the new icons.\n\n```svelte showLineNumbers title=\"components/ui/sonner.svelte\" {2-6,22-36}\n<script lang=\"ts\">\n  import CircleCheckIcon from \"@lucide/svelte/icons/circle-check\";\n  import InfoIcon from \"@lucide/svelte/icons/info\";\n  import Loader2Icon from \"@lucide/svelte/icons/loader-2\";\n  import OctagonXIcon from \"@lucide/svelte/icons/octagon-x\";\n  import TriangleAlertIcon from \"@lucide/svelte/icons/triangle-alert\";\n\n  import {\n    Toaster as Sonner,\n    type ToasterProps as SonnerProps,\n  } from \"svelte-sonner\";\n  import { mode } from \"mode-watcher\";\n\n  let { ...restProps }: SonnerProps = $props();\n</script>\n\n<Sonner\n  theme={mode.current}\n  class=\"toaster group\"\n  style=\"--normal-bg: var(--color-popover); --normal-text: var(--color-popover-foreground); --normal-border: var(--color-border);\"\n  {...restProps}\n  >{#snippet loadingIcon()}\n    <Loader2Icon class=\"size-4 animate-spin\" />\n  {/snippet}\n  {#snippet successIcon()}\n    <CircleCheckIcon class=\"size-4\" />\n  {/snippet}\n  {#snippet errorIcon()}\n    <OctagonXIcon class=\"size-4\" />\n  {/snippet}\n  {#snippet infoIcon()}\n    <InfoIcon class=\"size-4\" />\n  {/snippet}\n  {#snippet warningIcon()}\n    <TriangleAlertIcon class=\"size-4\" />\n  {/snippet}\n</Sonner>\n```\n"
  },
  {
    "path": "docs/content/components/spinner.md",
    "content": "---\ntitle: Spinner\ndescription: An indicator that can be used to show a loading state.\ncomponent: true\nlinks:\n  source: https://github.com/huntabyte/shadcn-svelte/tree/next/sites/docs/src/lib/registry/ui/spinner\n---\n\n<script>\n\timport ComponentPreview from \"$lib/components/component-preview.svelte\";\n\timport ComponentSource from \"$lib/components/component-source.svelte\";\n\timport PMAddComp from \"$lib/components/pm-add-comp.svelte\";\n\timport PMInstall from \"$lib/components/pm-install.svelte\";\n\timport Steps from \"$lib/components/steps.svelte\";\n\timport InstallTabs from \"$lib/components/install-tabs.svelte\";\n\n\tlet { viewerData } = $props();\n\timport Step from \"$lib/components/step.svelte\";\n</script>\n\n<ComponentPreview name=\"spinner-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n## Installation\n\n<InstallTabs>\n{#snippet cli()}\n<PMAddComp name=\"spinner\" />\n{/snippet}\n{#snippet manual()}\n<Steps>\n\n<Step>\n\nInstall `@lucide/svelte`:\n\n</Step>\n\n<PMInstall command=\"@lucide/svelte -D\" />\n\n<Step>\n\nCopy and paste the following code into your project.\n\n</Step>\n{#if viewerData}\n\t<ComponentSource item={viewerData} data-llm-ignore/>\n{/if}\n\n</Steps>\n{/snippet}\n</InstallTabs>\n\n## Usage\n\n```svelte\n<script lang=\"ts\">\n  import { Spinner } from \"$lib/components/ui/spinner/index.js\";\n</script>\n```\n\n```svelte\n<Spinner />\n```\n\n## Customization\n\nYou can replace the default spinner icon with any other icon by editing the `Spinner` component.\n\n<ComponentPreview name=\"spinner-custom-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n## Examples\n\n### Size\n\nUse the `size-*` utility class to change the size of the spinner.\n\n<ComponentPreview name=\"spinner-size-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n### Color\n\nUse the `text-*` utility class to change the color of the spinner.\n\n<ComponentPreview name=\"spinner-color-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n### Button\n\nAdd a spinner to a button to indicate a loading state. The `<Button />` will handle the spacing between the spinner and the text.\n\n<ComponentPreview name=\"spinner-button-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n### Badge\n\nYou can also use a spinner inside a badge.\n\n<ComponentPreview name=\"spinner-badge-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n### Input Group\n\nInput Group can have spinners inside `<InputGroup.Addon>`.\n\n<ComponentPreview name=\"spinner-input-group-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n### Empty\n\n<ComponentPreview name=\"spinner-empty-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n### Item\n\nUse the spinner inside `<Item.Media>` to indicate a loading state.\n\n<ComponentPreview name=\"spinner-item-demo\">\n\n<div></div>\n\n</ComponentPreview>\n"
  },
  {
    "path": "docs/content/components/switch.md",
    "content": "---\ntitle: Switch\ndescription: A control that allows the user to toggle between checked and not checked.\ncomponent: true\nlinks:\n  source: https://github.com/huntabyte/shadcn-svelte/tree/next/sites/docs/src/lib/registry/ui/switch\n  doc: https://bits-ui.com/docs/components/switch\n  api: https://bits-ui.com/docs/components/switch#api-reference\n---\n\n<script>\n\timport ComponentPreview from \"$lib/components/component-preview.svelte\";\n\timport ComponentSource from \"$lib/components/component-source.svelte\";\n\timport PMAddComp from \"$lib/components/pm-add-comp.svelte\";\n\timport PMInstall from \"$lib/components/pm-install.svelte\";\n\timport Steps from \"$lib/components/steps.svelte\";\n\timport Step from \"$lib/components/step.svelte\";\n\timport InstallTabs from \"$lib/components/install-tabs.svelte\";\n\n\tlet { viewerData } = $props();\n</script>\n\n<ComponentPreview name=\"switch-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n## Installation\n\n<InstallTabs>\n{#snippet cli()}\n<PMAddComp name=\"switch\" />\n{/snippet}\n{#snippet manual()}\n<Steps>\n\n<Step>\n\nInstall `bits-ui`:\n\n</Step>\n\n<PMInstall command=\"bits-ui -D\" />\n\n<Step>\n\nCopy and paste the following code into your project.\n\n</Step>\n{#if viewerData}\n\t<ComponentSource item={viewerData} data-llm-ignore/>\n{/if}\n\n</Steps>\n{/snippet}\n</InstallTabs>\n\n## Usage\n\n```svelte\n<script lang=\"ts\">\n  import { Switch } from \"$lib/components/ui/switch/index.js\";\n</script>\n```\n\n```svelte\n<Switch />\n```\n"
  },
  {
    "path": "docs/content/components/table.md",
    "content": "---\ntitle: Table\ndescription: A responsive table component.\ncomponent: true\nlinks:\n  source: https://github.com/huntabyte/shadcn-svelte/tree/next/sites/docs/src/lib/registry/ui/table\n---\n\n<script>\n\timport ComponentPreview from \"$lib/components/component-preview.svelte\";\n\timport ComponentSource from \"$lib/components/component-source.svelte\";\n\timport PMAddComp from \"$lib/components/pm-add-comp.svelte\";\n\timport PMInstall from \"$lib/components/pm-install.svelte\";\n\timport Steps from \"$lib/components/steps.svelte\";\n\timport Step from \"$lib/components/step.svelte\";\n\timport InstallTabs from \"$lib/components/install-tabs.svelte\";\n\n\tlet { viewerData } = $props();\n</script>\n\n<ComponentPreview name=\"table-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n## Installation\n\n<InstallTabs>\n{#snippet cli()}\n<PMAddComp name=\"table\" />\n{/snippet}\n{#snippet manual()}\n<Steps>\n\n<Step>\n\nCopy and paste the following code into your project.\n\n</Step>\n{#if viewerData}\n\t<ComponentSource item={viewerData} data-llm-ignore/>\n{/if}\n\n</Steps>\n{/snippet}\n</InstallTabs>\n\n## Usage\n\n```svelte showLineNumbers\n<script lang=\"ts\">\n  import * as Table from \"$lib/components/ui/table/index.js\";\n</script>\n```\n\n```svelte showLineNumbers\n<Table.Root>\n  <Table.Caption>A list of your recent invoices.</Table.Caption>\n  <Table.Header>\n    <Table.Row>\n      <Table.Head class=\"w-[100px]\">Invoice</Table.Head>\n      <Table.Head>Status</Table.Head>\n      <Table.Head>Method</Table.Head>\n      <Table.Head class=\"text-end\">Amount</Table.Head>\n    </Table.Row>\n  </Table.Header>\n  <Table.Body>\n    <Table.Row>\n      <Table.Cell class=\"font-medium\">INV001</Table.Cell>\n      <Table.Cell>Paid</Table.Cell>\n      <Table.Cell>Credit Card</Table.Cell>\n      <Table.Cell class=\"text-end\">$250.00</Table.Cell>\n    </Table.Row>\n  </Table.Body>\n</Table.Root>\n```\n\n## Data Table\n\nYou can use the `<Table />` component to build more complex data tables. Combine it with [@tanstack/table](https://tanstack.com/table) to create tables with sorting, filtering and pagination.\n\nSee the [Data Table](/docs/components/data-table) documentation for more information.\n\nYou can also see an example of a data table in the [Tasks](/examples/tasks) demo.\n"
  },
  {
    "path": "docs/content/components/tabs.md",
    "content": "---\ntitle: Tabs\ndescription: A set of layered sections of content—known as tab panels—that are displayed one at a time.\ncomponent: true\nlinks:\n  source: https://github.com/huntabyte/shadcn-svelte/tree/next/sites/docs/src/lib/registry/ui/tabs\n  doc: https://bits-ui.com/docs/components/tabs\n  api: https://bits-ui.com/docs/components/tabs#api-reference\n---\n\n<script>\n\timport ComponentPreview from \"$lib/components/component-preview.svelte\";\n\timport ComponentSource from \"$lib/components/component-source.svelte\";\n\timport PMAddComp from \"$lib/components/pm-add-comp.svelte\";\n\timport PMInstall from \"$lib/components/pm-install.svelte\";\n\timport Steps from \"$lib/components/steps.svelte\";\n\timport Step from \"$lib/components/step.svelte\";\n\timport InstallTabs from \"$lib/components/install-tabs.svelte\";\n\n\tlet { viewerData } = $props();\n</script>\n\n<ComponentPreview name=\"tabs-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n## Installation\n\n<InstallTabs>\n{#snippet cli()}\n<PMAddComp name=\"tabs\" />\n{/snippet}\n{#snippet manual()}\n<Steps>\n\n<Step>\n\nInstall `bits-ui`:\n\n</Step>\n\n<PMInstall command=\"bits-ui -D\" />\n\n<Step>\n\nCopy and paste the following code into your project.\n\n</Step>\n{#if viewerData}\n\t<ComponentSource item={viewerData} data-llm-ignore/>\n{/if}\n\n</Steps>\n{/snippet}\n</InstallTabs>\n\n## Usage\n\n```svelte showLineNumbers\n<script lang=\"ts\">\n  import * as Tabs from \"$lib/components/ui/tabs/index.js\";\n</script>\n```\n\n```svelte showLineNumbers\n<Tabs.Root value=\"account\" class=\"w-[400px]\">\n  <Tabs.List>\n    <Tabs.Trigger value=\"account\">Account</Tabs.Trigger>\n    <Tabs.Trigger value=\"password\">Password</Tabs.Trigger>\n  </Tabs.List>\n  <Tabs.Content value=\"account\">\n    Make changes to your account here.\n  </Tabs.Content>\n  <Tabs.Content value=\"password\">Change your password here.</Tabs.Content>\n</Tabs.Root>\n```\n"
  },
  {
    "path": "docs/content/components/textarea.md",
    "content": "---\ntitle: Textarea\ndescription: Displays a form textarea or a component that looks like a textarea.\ncomponent: true\nlinks:\n  source: https://github.com/huntabyte/shadcn-svelte/tree/next/sites/docs/src/lib/registry/ui/textarea\n---\n\n<script>\n\timport ComponentPreview from \"$lib/components/component-preview.svelte\";\n\timport ComponentSource from \"$lib/components/component-source.svelte\";\n\timport PMAddComp from \"$lib/components/pm-add-comp.svelte\";\n\timport PMInstall from \"$lib/components/pm-install.svelte\";\n\timport Steps from \"$lib/components/steps.svelte\";\n\timport Step from \"$lib/components/step.svelte\";\n\timport InstallTabs from \"$lib/components/install-tabs.svelte\";\n\n\tlet { viewerData } = $props();\n</script>\n\n<ComponentPreview name=\"textarea-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n## Installation\n\n<InstallTabs>\n{#snippet cli()}\n<PMAddComp name=\"textarea\" />\n{/snippet}\n{#snippet manual()}\n<Steps>\n\n<Step>\n\nCopy and paste the following code into your project.\n\n</Step>\n{#if viewerData}\n\t<ComponentSource item={viewerData} data-llm-ignore/>\n{/if}\n\n</Steps>\n{/snippet}\n</InstallTabs>\n\n## Usage\n\n```svelte\n<script lang=\"ts\">\n  import { Textarea } from \"$lib/components/ui/textarea/index.js\";\n</script>\n```\n\n```svelte\n<Textarea />\n```\n\n## Examples\n\n### Default\n\n<ComponentPreview name=\"textarea-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n### Disabled\n\n<ComponentPreview name=\"textarea-disabled\">\n\n<div></div>\n\n</ComponentPreview>\n\n### With Label\n\n<ComponentPreview name=\"textarea-with-label\">\n\n<div></div>\n\n</ComponentPreview>\n\n### With Text\n\n<ComponentPreview name=\"textarea-with-text\">\n\n<div></div>\n\n</ComponentPreview>\n\n### With Button\n\n<ComponentPreview name=\"textarea-with-button\">\n\n<div></div>\n\n</ComponentPreview>\n"
  },
  {
    "path": "docs/content/components/toggle-group.md",
    "content": "---\ntitle: Toggle Group\ndescription: A set of two-state buttons that can be toggled on or off.\ncomponent: true\nlinks:\n  source: https://github.com/huntabyte/shadcn-svelte/tree/next/sites/docs/src/lib/registry/ui/toggle-group\n  doc: https://bits-ui.com/docs/components/toggle-group\n  api: https://bits-ui.com/docs/components/toggle-group#api-reference\n---\n\n<script>\n\timport ComponentPreview from \"$lib/components/component-preview.svelte\";\n\timport ComponentSource from \"$lib/components/component-source.svelte\";\n\timport PMAddComp from \"$lib/components/pm-add-comp.svelte\";\n\timport PMInstall from \"$lib/components/pm-install.svelte\";\n\timport Steps from \"$lib/components/steps.svelte\";\n\timport Step from \"$lib/components/step.svelte\";\n\timport InstallTabs from \"$lib/components/install-tabs.svelte\";\n\n\tlet { viewerData } = $props();\n</script>\n\n<ComponentPreview name=\"toggle-group-spacing\">\n\n<div></div>\n\n</ComponentPreview>\n\n## Installation\n\n<InstallTabs>\n{#snippet cli()}\n<PMAddComp name=\"toggle-group\" />\n{/snippet}\n{#snippet manual()}\n<Steps>\n\n<Step>\n\nInstall `bits-ui`:\n\n</Step>\n\n<PMInstall command=\"bits-ui -D\" />\n\n<Step>\n\nCopy and paste the following code into your project.\n\n</Step>\n{#if viewerData}\n\t<ComponentSource item={viewerData} data-llm-ignore/>\n{/if}\n\n</Steps>\n{/snippet}\n</InstallTabs>\n\n## Usage\n\n```svelte\n<script lang=\"ts\">\n  import * as ToggleGroup from \"$lib/components/ui/toggle-group/index.js\";\n</script>\n```\n\n```svelte\n<ToggleGroup.Root type=\"single\">\n  <ToggleGroup.Item value=\"a\">A</ToggleGroup.Item>\n  <ToggleGroup.Item value=\"b\">B</ToggleGroup.Item>\n  <ToggleGroup.Item value=\"c\">C</ToggleGroup.Item>\n</ToggleGroup.Root>\n```\n\n## Examples\n\n### Outline\n\n<ComponentPreview name=\"toggle-group-outline\">\n\n<div></div>\n\n</ComponentPreview>\n\n### Single\n\n<ComponentPreview name=\"toggle-group-single\">\n\n<div></div>\n\n</ComponentPreview>\n\n### Small\n\n<ComponentPreview name=\"toggle-group-sm\">\n\n<div></div>\n\n</ComponentPreview>\n\n### Large\n\n<ComponentPreview name=\"toggle-group-lg\">\n\n<div></div>\n\n</ComponentPreview>\n\n### Disabled\n\n<ComponentPreview name=\"toggle-group-disabled\">\n\n<div></div>\n\n</ComponentPreview>\n\n### Spacing\n\nUse `spacing={2}` to add spacing between toggle group items.\n\n<ComponentPreview name=\"toggle-group-spacing\">\n\n<div></div>\n\n</ComponentPreview>\n"
  },
  {
    "path": "docs/content/components/toggle.md",
    "content": "---\ntitle: Toggle\ndescription: A two-state button that can be either on or off.\ncomponent: true\nlinks:\n  source: https://github.com/huntabyte/shadcn-svelte/tree/next/sites/docs/src/lib/registry/ui/toggle\n  doc: https://bits-ui.com/docs/components/toggle\n  api: https://bits-ui.com/docs/components/toggle#api-reference\n---\n\n<script>\n\timport ComponentPreview from \"$lib/components/component-preview.svelte\";\n\timport ComponentSource from \"$lib/components/component-source.svelte\";\n\timport PMAddComp from \"$lib/components/pm-add-comp.svelte\";\n\timport PMInstall from \"$lib/components/pm-install.svelte\";\n\timport Steps from \"$lib/components/steps.svelte\";\n\timport Step from \"$lib/components/step.svelte\";\n\timport InstallTabs from \"$lib/components/install-tabs.svelte\";\n\n\tlet { viewerData } = $props();\n</script>\n\n<ComponentPreview name=\"toggle-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n## Installation\n\n<InstallTabs>\n{#snippet cli()}\n<PMAddComp name=\"toggle\" />\n{/snippet}\n{#snippet manual()}\n<Steps>\n\n<Step>\n\nInstall `bits-ui`:\n\n</Step>\n\n<PMInstall command=\"bits-ui -D\" />\n\n<Step>\n\nCopy and paste the following code into your project.\n\n</Step>\n{#if viewerData}\n\t<ComponentSource item={viewerData} data-llm-ignore/>\n{/if}\n\n</Steps>\n{/snippet}\n</InstallTabs>\n\n## Usage\n\n```svelte\n<script lang=\"ts\">\n  import { Toggle } from \"$lib/components/ui/toggle/index.js\";\n</script>\n```\n\n```svelte\n<Toggle>Toggle</Toggle>\n```\n\n## Examples\n\n### Default\n\n<ComponentPreview name=\"toggle-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n### Outline\n\n<ComponentPreview name=\"toggle-outline\">\n\n<div></div>\n\n</ComponentPreview>\n\n### With Text\n\n<ComponentPreview name=\"toggle-with-text\">\n\n<div></div>\n\n</ComponentPreview>\n\n### Small\n\n<ComponentPreview name=\"toggle-sm\">\n\n<div></div>\n\n</ComponentPreview>\n\n### Large\n\n<ComponentPreview name=\"toggle-lg\">\n\n<div></div>\n\n</ComponentPreview>\n\n### Disabled\n\n<ComponentPreview name=\"toggle-disabled\">\n\n<div></div>\n\n</ComponentPreview>\n"
  },
  {
    "path": "docs/content/components/tooltip.md",
    "content": "---\ntitle: Tooltip\ndescription: A popup that displays information related to an element when the element receives keyboard focus or the mouse hovers over it.\ncomponent: true\nlinks:\n  source: https://github.com/huntabyte/shadcn-svelte/tree/next/sites/docs/src/lib/registry/ui/tooltip\n  doc: https://bits-ui.com/docs/components/tooltip\n  api: https://bits-ui.com/docs/components/tooltip#api-reference\n---\n\n<script>\n\timport ComponentPreview from \"$lib/components/component-preview.svelte\";\n\timport ComponentSource from \"$lib/components/component-source.svelte\";\n\timport PMAddComp from \"$lib/components/pm-add-comp.svelte\";\n\timport PMInstall from \"$lib/components/pm-install.svelte\";\n\timport Steps from \"$lib/components/steps.svelte\";\n\timport Step from \"$lib/components/step.svelte\";\n\timport InstallTabs from \"$lib/components/install-tabs.svelte\";\n\n\tlet { viewerData } = $props();\n</script>\n\n<ComponentPreview name=\"tooltip-demo\">\n\n<div></div>\n\n</ComponentPreview>\n\n## Installation\n\n<InstallTabs>\n{#snippet cli()}\n<PMAddComp name=\"tooltip\" />\n{/snippet}\n{#snippet manual()}\n<Steps>\n\n<Step>\n\nInstall `bits-ui`:\n\n</Step>\n\n<PMInstall command=\"bits-ui -D\" />\n\n<Step>\n\nCopy and paste the following code into your project.\n\n</Step>\n{#if viewerData}\n\t<ComponentSource item={viewerData} data-llm-ignore/>\n{/if}\n\n</Steps>\n{/snippet}\n</InstallTabs>\n\n## Usage\n\nThe `Tooltip.Provider` component should be placed once in your root layout, wrapping all content that will contain tooltips. This ensures that only one tooltip within the provider can be open at a time.\n\n```svelte title=\"src/routes/+layout.svelte\" showLineNumbers\n<script lang=\"ts\">\n  import * as Tooltip from \"$lib/components/ui/tooltip/index.js\";\n\n  let { children } = $props();\n</script>\n```\n\n```svelte showLineNumbers\n<Tooltip.Provider>\n  {@render children()}\n</Tooltip.Provider>\n```\n\nThen use tooltips anywhere in your app:\n\n```svelte\n<script lang=\"ts\">\n  import * as Tooltip from \"$lib/components/ui/tooltip/index.js\";\n</script>\n\n<Tooltip.Root>\n  <Tooltip.Trigger>Hover</Tooltip.Trigger>\n  <Tooltip.Content>\n    <p>Add to library</p>\n  </Tooltip.Content>\n</Tooltip.Root>\n```\n\n### Nested Providers\n\nYou can nest providers to create groups with different settings. Tooltips use the closest ancestor provider. This is useful when you want instant tooltips in specific areas:\n\n```svelte\n<Tooltip.Provider delayDuration={0}>\n  <!-- Tooltips here will open instantly -->\n</Tooltip.Provider>\n```\n\n---\n\n## Changelog\n\n### 2025-12 Update tooltip colors\n\nWe've updated the tooltip colors to use the foreground color for the background and the background color for the foreground.\n\nReplace `bg-primary text-primary-foreground` with `bg-foreground text-background` for `<Tooltip.Content />`.\n"
  },
  {
    "path": "docs/content/components/typography.md",
    "content": "---\ntitle: Typography\ndescription: Styles for headings, paragraphs, lists...etc\ncomponent: true\n---\n\n<script>\n\timport ComponentPreview from \"$lib/components/component-preview.svelte\";\n</script>\n\nWe do not ship any typography styles by default. This page is an example of how you can use utility classes to style your text.\n\n<ComponentPreview name=\"typography-demo\" class=\"[&_.preview]:!h-auto\">\n\n<div></div>\n\n</ComponentPreview>\n\n## h1\n\n<ComponentPreview name=\"typography-h1\">\n\n<div></div>\n\n</ComponentPreview>\n\n## h2\n\n<ComponentPreview name=\"typography-h2\">\n\n<div></div>\n\n</ComponentPreview>\n\n## h3\n\n<ComponentPreview name=\"typography-h3\">\n\n<div></div>\n\n</ComponentPreview>\n\n## h4\n\n<ComponentPreview name=\"typography-h4\">\n\n<div></div>\n\n</ComponentPreview>\n\n## p\n\n<ComponentPreview name=\"typography-p\">\n\n<div></div>\n\n</ComponentPreview>\n\n## blockquote\n\n<ComponentPreview name=\"typography-blockquote\">\n\n<div></div>\n\n</ComponentPreview>\n\n## table\n\n<ComponentPreview name=\"typography-table\">\n\n<div></div>\n\n</ComponentPreview>\n\n## list\n\n<ComponentPreview name=\"typography-list\">\n\n<div></div>\n\n</ComponentPreview>\n\n## Inline code\n\n<ComponentPreview name=\"typography-inline-code\">\n\n<div></div>\n\n</ComponentPreview>\n\n## Lead\n\n<ComponentPreview name=\"typography-lead\">\n\n<div></div>\n\n</ComponentPreview>\n\n## Large\n\n<ComponentPreview name=\"typography-large\">\n\n<div></div>\n\n</ComponentPreview>\n\n## Small\n\n<ComponentPreview name=\"typography-small\">\n\n<div></div>\n\n</ComponentPreview>\n\n## Muted\n\n<ComponentPreview name=\"typography-muted\">\n\n<div></div>\n\n</ComponentPreview>\n"
  },
  {
    "path": "docs/content/components-json.md",
    "content": "---\ntitle: components.json\ndescription: Configuration for your project.\n---\n\n<script>\n\timport Callout from \"$lib/components/callout.svelte\";\n\timport ComponentPreview from \"$lib/components/component-preview.svelte\";\n\timport PMExecute from \"$lib/components/pm-execute.svelte\";\n</script>\n\nThe `components.json` file holds configuration for your project.\n\nWe use it to understand how your project is set up and how to generate components customized for your project.\n\n<Callout class=\"mt-6\">\n\nNote: The `components.json` file is optional and **only required if you're using the CLI** to add components to your project. If you're using the copy and paste method, you don't need this file.\n\n</Callout>\n\nYou can create a `components.json` file in your project by running the following command:\n\n<PMExecute command=\"shadcn-svelte@latest init\" />\n\nSee the [CLI section](/docs/cli) for more information.\n\n## $schema\n\nYou can see the JSON Schema for `components.json` [here](https://shadcn-svelte.com/schema.json).\n\n```json title=\"components.json\"\n{\n  \"$schema\": \"https://shadcn-svelte.com/schema.json\"\n}\n```\n\n## tailwind\n\nConfiguration to help the CLI understand how Tailwind CSS is set up in your project.\n\nSee the [installation section](/docs/installation) for how to set up Tailwind CSS.\n\n### tailwind.css\n\nPath to the CSS file that imports Tailwind CSS into your project.\n\n```json title=\"components.json\"\n{\n  \"tailwind\": {\n    \"css\": \"src/app.{p,post}css\"\n  }\n}\n```\n\n### tailwind.baseColor\n\nThis is used to generate the default color palette for your components. **This cannot be changed after initialization.**\n\n```json title=\"components.json\"\n{\n  \"tailwind\": {\n    \"baseColor\": \"gray\" | \"neutral\" | \"slate\" | \"stone\" | \"zinc\"\n  }\n}\n```\n\n## aliases\n\nThe CLI uses these values and the `alias` config from your `svelte.config.js` file to place generated components in the correct location.\n\nPath aliases have to be set up in your `svelte.config.js` file.\n\n### aliases.lib\n\nImport alias for your library, which is _typically_ where you store your components, utils, hooks, etc.\n\n```json title=\"components.json\"\n{\n  \"aliases\": {\n    \"lib\": \"$lib\"\n  }\n}\n```\n\n### aliases.utils\n\nImport alias for your utility functions.\n\n```json title=\"components.json\"\n{\n  \"aliases\": {\n    \"utils\": \"$lib/utils\"\n  }\n}\n```\n\n### aliases.components\n\nImport alias for your components.\n\n```json title=\"components.json\"\n{\n  \"aliases\": {\n    \"components\": \"$lib/components\"\n  }\n}\n```\n\n### aliases.ui\n\nImport alias for your UI components.\n\n```json title=\"components.json\"\n{\n  \"aliases\": {\n    \"ui\": \"$lib/components/ui\"\n  }\n}\n```\n\n### aliases.hooks\n\nImport alias for your hooks, which in Svelte 5 are reactive functions/classes whose files typically end in `.svelte.ts` or `.svelte.js`.\n\n```json title=\"components.json\"\n{\n  \"aliases\": {\n    \"hooks\": \"$lib/hooks\"\n  }\n}\n```\n\n## Typescript\n\nTypescript can be enabled or disabled.\n\n```json title=\"components.json\"\n{\n  \"typescript\": true | false\n}\n```\n\nYou can also specify a path to your own custom Typescript config file if it has a different name from `tsconfig.json` or `jsconfig.json`, or if it is located in a different directory:\n\n```json title=\"components.json\"\n{\n  \"typescript\": {\n    \"config\": \"path/to/tsconfig.custom.json\"\n  }\n}\n```\n\n## Registry\n\nThe registry URL tells the CLI where to fetch the shadcn-svelte components/registry from. You can pin this to a specific preview release or your own fork of the registry.\n\n```json title=\"components.json\"\n{\n  \"registry\": \"https://shadcn-svelte.com/registry\"\n}\n```\n"
  },
  {
    "path": "docs/content/dark-mode/astro.md",
    "content": "---\ntitle: Astro\ndescription: Adding dark mode to your Astro site.\n---\n\n<script>\n\timport ComponentPreview from \"$lib/components/component-preview.svelte\";\n\timport PMAddComp from \"$lib/components/pm-add-comp.svelte\";\n\timport PMInstall from \"$lib/components/pm-install.svelte\";\n\timport Steps from \"$lib/components/steps.svelte\";\n\timport InstallTabs from \"$lib/components/install-tabs.svelte\";\n</script>\n\nJust like in regular Svelte, we use the `class` strategy from Tailwind CSS to support dark mode toggling. See the [Tailwind CSS documentation](https://tailwindcss.com/docs/dark-mode#toggling-dark-mode-manually) for more information.\n\nHow you add the `dark` class to the `html` element is up to you. In this guide, we'll take a look at enabling dark mode toggling with [mode-watcher](https://github.com/svecosystem/mode-watcher).\n\n## Usage\n\n<Steps>\n\n### Create an inline theme script\n\nThis script will, in part, keep and track the dark mode value in `localStorage` and prevent [FUOC](https://en.wikipedia.org/wiki/Flash_of_unstyled_content).\n\n```astro title=\"src/pages/index.astro\" {5-27} showLineNumbers\n---\nimport \"../styles/global.css\";\n---\n\n<script is:inline>\n  const isBrowser = typeof localStorage !== 'undefined';\n  const getThemePreference = () => {\n    if (isBrowser && localStorage.getItem('theme')) {\n      return localStorage.getItem('theme');\n    }\n    return window.matchMedia('(prefers-color-scheme: dark)').matches\n      ? 'dark' : 'light';\n  };\n  const isDark = getThemePreference() === 'dark';\n  document.documentElement.classList[isDark ? 'add' : 'remove']('dark');\n\n  if (isBrowser) {\n    const observer = new MutationObserver(() => {\n      const isDark = document.documentElement.classList.contains('dark');\n      localStorage.setItem('theme', isDark ? 'dark' : 'light');\n    });\n    observer.observe(document.documentElement, {\n      attributes: true,\n      attributeFilter: ['class']\n    });\n  }\n</script>\n\n<html lang=\"en\">\n\t<body>\n      <h1>Astro</h1>\n\t</body>\n</html>\n</script>\n```\n\n### Install mode-watcher\n\n<PMInstall command=\"mode-watcher@0.5.1\" />\n\n### Add the ModeWatcher component\n\nImport the `ModeWatcher` component and use it in your page with the `client:load` directive:\n\n```astro title=\"src/pages/index.astro\" {3,9} showLineNumbers\n---\nimport \"../styles/global.css\";\nimport { ModeWatcher } from \"mode-watcher\";\n---\n\n<!-- inline-script -->\n<html lang=\"en\">\n\t<body>\n      <h1>Astro</h1>\n      <ModeWatcher client:load />\n\t</body>\n</html>\n```\n\n### Create a mode toggle\n\nCreate a mode toggle on your site to toggle between light and dark mode:\n\n#### Light switch\n\n<ComponentPreview name=\"dark-mode-light-switch\">\n\n<div></div>\n\n</ComponentPreview>\n\n#### Dropdown menu\n\n<ComponentPreview name=\"dark-mode-dropdown-menu\">\n\n<div></div>\n\n</ComponentPreview>\n\n### Add mode toggle to page\n\nAdd the mode toggle to the page (also with the `client:load` directive):\n\n```astro title=\"src/pages/index.astro\" {4,12} showLineNumbers\n---\nimport \"../styles/global.css\";\nimport { ModeWatcher } from \"mode-watcher\";\nimport ModeToggle from \"$lib/components/mode-toggle.svelte\";\n---\n\n<!-- inline-script -->\n<html lang=\"en\">\n\t<body>\n      <h1>Astro</h1>\n      <ModeWatcher client:load />\n      <ModeToggle client:load />\n\t</body>\n</html>\n```\n\n</Steps>\n"
  },
  {
    "path": "docs/content/dark-mode/index.md",
    "content": "---\ntitle: Dark Mode\ndescription: Adding dark mode to your site.\n---\n\n<script>\n\timport LinkedCard from \"$lib/components/linked-card.svelte\";\n\timport SvelteWhite from \"$lib/components/svelte-white.svelte\";\n</script>\n\n<div class=\"grid sm:grid-cols-2 gap-4 mt-8 sm:gap-6\">\n  <LinkedCard href=\"/docs/dark-mode/svelte\">\n  <SvelteWhite />\n    <p class=\"font-medium mt-2\">Svelte</p>\n  </LinkedCard>\n  <LinkedCard href=\"/docs/dark-mode/astro\">\n  <svg role=\"img\" viewBox=\"0 0 24 24\" xmlns=\"http://www.w3.org/2000/svg\" class=\"w-10 h-10\" fill=\"currentColor\"><title>Astro</title><path d=\"M16.074 16.86C15.354 17.476 13.917 17.895 12.262 17.895C10.23 17.895 8.527 17.263 8.075 16.412C7.914 16.9 7.877 17.458 7.877 17.814C7.877 17.814 7.771 19.564 8.988 20.782C8.988 20.15 9.501 19.637 10.133 19.637C11.216 19.637 11.215 20.582 11.214 21.349V21.418C11.214 22.582 11.925 23.579 12.937 24C12.7812 23.6794 12.7005 23.3275 12.701 22.971C12.701 21.861 13.353 21.448 14.111 20.968C14.713 20.585 15.383 20.161 15.844 19.308C16.0926 18.8493 16.2225 18.3357 16.222 17.814C16.2221 17.4903 16.1722 17.1685 16.074 16.86ZM15.551 0.6C15.747 0.844 15.847 1.172 16.047 1.829L20.415 16.176C18.7743 15.3246 17.0134 14.7284 15.193 14.408L12.35 4.8C12.3273 4.72337 12.2803 4.65616 12.2162 4.60844C12.152 4.56072 12.0742 4.53505 11.9943 4.53528C11.9143 4.5355 11.8366 4.56161 11.7727 4.60969C11.7089 4.65777 11.6623 4.72524 11.64 4.802L8.83 14.405C7.00149 14.724 5.23264 15.3213 3.585 16.176L7.974 1.827C8.174 1.171 8.274 0.843 8.471 0.6C8.64406 0.385433 8.86922 0.218799 9.125 0.116C9.415 0 9.757 0 10.443 0H13.578C14.264 0 14.608 0 14.898 0.117C15.1529 0.219851 15.3783 0.386105 15.551 0.6Z\" fill=\"currentColor\"></path></svg>\n    <p class=\"font-medium mt-2\">Astro</p>\n  </LinkedCard>\n</div>\n"
  },
  {
    "path": "docs/content/dark-mode/svelte.md",
    "content": "---\ntitle: Svelte\ndescription: Adding dark mode to your Svelte site.\n---\n\n<script>\n\timport ComponentPreview from \"$lib/components/component-preview.svelte\";\n\timport PMAddComp from \"$lib/components/pm-add-comp.svelte\";\n\timport PMInstall from \"$lib/components/pm-install.svelte\";\n\timport Steps from \"$lib/components/steps.svelte\";\n\timport InstallTabs from \"$lib/components/install-tabs.svelte\";\n</script>\n\n<Steps>\n\n## Install mode-watcher\n\nStart by installing `mode-watcher`:\n\n<PMInstall command=\"mode-watcher\" />\n\n## Add the ModeWatcher component\n\nImport the `ModeWatcher` component and use it in your root layout:\n\n```svelte title=\"src/routes/+layout.svelte\" showLineNumbers {3,7}\n<script lang=\"ts\">\n  import \"../app.css\";\n  import { ModeWatcher } from \"mode-watcher\";\n  let { children } = $props();\n</script>\n\n<ModeWatcher />\n{@render children?.()}\n```\n\n## Add a mode toggle\n\nPlace a mode toggle on your site to toggle between light and dark mode.\n\n<ComponentPreview name=\"dark-mode-light-switch\">\n\n<div></div>\n\n</ComponentPreview>\n\n<ComponentPreview name=\"dark-mode-dropdown-menu\">\n\n<div></div>\n\n</ComponentPreview>\n\n</Steps>\n"
  },
  {
    "path": "docs/content/figma.md",
    "content": "---\ntitle: Figma\ndescription: Every component recreated in Figma. With customizable props, typography and icons.\n---\n\n<script>\n  import { AspectRatio } from '$lib/registry/ui/aspect-ratio/index.js';\n</script>\n\nThe Figma UI Kit is open sourced by [Pietro Schirano](https://twitter.com/skirano).\n\n<AspectRatio ratio={16 / 9} class=\"w-full mt-4\">\n\n  <iframe\n    title=\"Figma page for shadcn\"\n    src=\"https://embed.figma.com/file/1203061493325953101/hf_embed?community_viewer=true&embed_host=shadcn&hub_file_id=1203061493325953101&kind=&viewer=1\"\n    class=\"h-full w-full overflow-hidden rounded-lg border bg-muted\"\n  ></iframe>\n</AspectRatio>\n\n## Grab a copy\n\nhttps://www.figma.com/community/file/1203061493325953101\n"
  },
  {
    "path": "docs/content/index.md",
    "content": "---\ntitle: Introduction\ndescription: Re-usable components built with Bits UI and Tailwind CSS.\n---\n\n<script>\n  import * as Accordion from '$lib/registry/ui/accordion/index.js';\n  import Callout from '$lib/components/callout.svelte';\n</script>\n\nAn unofficial, community-led [Svelte](https://svelte.dev) port of [shadcn/ui](https://ui.shadcn.com). We are not affiliated with [shadcn](https://x.com/shadcn), but we did get his blessing before creating a Svelte version of his work. This project was born out of the need for a similar project for the Svelte ecosystem.\n\n**This is not a component library. It is how you build your component library.**\n\nYou know how most traditional component libraries work: you install a package from NPM, import the components, and use them in your app.\n\nThis approach works well until you need to customize a component to fit your design system or require one that isn’t included in the library. **Often, you end up wrapping library components, writing workarounds to override styles, or mixing components from different libraries with incompatible APIs.**\n\nThis is what shadcn-svelte aims to solve. It is built around the following principles:\n\n- **Open Code:** The top layer of your component code is open for modification.\n- **Composition:** Every component uses a common, composable interface, making them predictable.\n- **Distribution:** A flat-file schema and command-line tool make it easy to distribute components.\n- **Beautiful Defaults:** Carefully chosen default styles, so you get great design out-of-the-box.\n- **AI-Ready:** Open code for LLMs to read, understand, and improve.\n\n## Open Code\n\nshadcn-svelte hands you the actual component code. You have full control to customize and extend the components to your needs. This means:\n\n- **Full Transparency:** You see exactly how each component is built.\n- **Easy Customization:** Modify any part of a component to fit your design and functionality requirements.\n- **AI Integration:** Access to the code makes it straightforward for LLMs to read, understand, and even improve your components.\n\n_In a typical library, if you need to change a button’s behavior, you have to override styles or wrap the component. With shadcn-svelte, you simply edit the button code directly._\n\n<Accordion.Root type=\"single\">\n\n<Accordion.Item value=\"faq-1\" class=\"border-none\">\n\n<Accordion.Trigger>\nHow do I pull upstream updates in an Open Code approach?\n</Accordion.Trigger>\n\n<Accordion.Content>\n\nshadcn-svelte follows a headless component architecture. This means the core of your app can receive fixes by updating your dependencies, for instance, bits-ui or paneforge.\n\n<p class=\"mt-4\">\nThe topmost layer, i.e., the one closest to your design system, is not\n        coupled with the implementation of the library. It stays open for\n        modification.\n</p>\n</Accordion.Content>\n</Accordion.Item>\n</Accordion.Root>\n\n## Composition\n\nEvery component in shadcn-svelte shares a common, composable interface. **If a component does not exist, we bring it in, make it composable, and adjust its style to match and work with the rest of the design system.**\n\n_A shared, composable interface means it's predictable for both your team and LLMs. You are not learning different APIs for every new component. Even for third-party ones._\n\n## Distribution\n\nshadcn-svelte is also a code distribution system. It defines a schema for components and a CLI to distribute them.\n\n- **Schema:** A flat-file structure that defines the components, their dependencies, and properties.\n- **CLI:** A command-line tool to distribute and install components across projects with cross-framework support.\n\n_You can use the schema to distribute your components to other projects or have AI generate completely new components based on existing schema._\n\n## Beautiful Defaults\n\nshadcn-svelte comes with a large collection of components that have carefully chosen default styles. They are designed to look good on their own and to work well together as a consistent system:\n\n- **Good Out-of-the-Box:** Your UI has a clean and minimal look without extra work.\n- **Unified Design:** Components naturally fit with one another. Each component is built to match the others, keeping your UI consistent.\n- **Easily Customizable:** If you want to change something, it's simple to override and extend the defaults.\n\n## AI-Ready\n\nThe design of shadcn-svelte makes it easy for AI tools to work with your code. Its open code and consistent API allow AI models to read, understand, and even generate new components.\n\n_An AI model can learn how your components work and suggest improvements or even create new components that integrate with your existing design._\n"
  },
  {
    "path": "docs/content/installation/astro.md",
    "content": "---\ntitle: Astro\ndescription: How to setup shadcn-svelte in an Astro project.\n---\n\n<script>\n\timport * as Alert from \"$lib/registry/ui/alert/index.js\";\n\timport Steps from \"$lib/components/steps.svelte\";\n\timport Callout from \"$lib/components/callout.svelte\";\n\timport PMCreate from \"$lib/components/pm-create.svelte\";\n\timport PMExecute from \"$lib/components/pm-execute.svelte\";\n\timport PMInstall from \"$lib/components/pm-install.svelte\";\n\timport PMAddComp from \"$lib/components/pm-add-comp.svelte\";\n</script>\n\n<Steps>\n\n### Create project\n\nStart by creating a new Astro project:\n\n<PMCreate command=\"astro@latest\" />\n\n### Configure your Astro project\n\nYou will be asked a few questions to configure your project:\n\n```bash showLineNumbers\n- Where should we create your new project?\n./your-app-name\n- How would you like to start your new project?\nChoose a starter template (or Empty)\n- Install dependencies?\nYes\n- Initialize a new git repository? (optional)\nYes/No\n```\n\n### Add Svelte to your project\n\nInstall Svelte using the Astro CLI:\n\n<PMExecute command=\"astro add svelte\" />\n\n<Callout className=\"mt-4\">\n\nAnswer `Yes` to all the question prompted by the CLI when installing Svelte.\n\n</Callout>\n\n### Add TailwindCSS to your project\n\nAdd Tailwind CSS using the Astro CLI:\n\n<PMExecute command=\"astro add tailwind\" />\n\n<Callout className=\"mt-4\">\n\nAnswer `Yes` to all the question prompted by the CLI when installing TailwindCSS.\n\n</Callout>\n\n### Import the global CSS file\n\nImport the `global.css` file in the `src/pages/index.astro` file:\n\n```astro title=\"src/pages/index.astro\" {2} showLineNumbers\n---\nimport \"../styles/global.css\";\n---\n```\n\n### Setup path aliases\n\nAdd the following code to the `tsconfig.json` file to resolve paths:\n\n```json title=\"tsconfig.json\" {2-10} showLineNumbers\n{\n  \"compilerOptions\": {\n    // ...\n    \"baseUrl\": \".\",\n    \"paths\": {\n      \"$lib\": [\"./src/lib\"],\n      \"$lib/*\": [\"./src/lib/*\"]\n    }\n    // ...\n  }\n}\n```\n\n<Callout className=\"mt-4\">\n\nIf needed, adapt the path aliases to your specific needs ([learn more about it](https://docs.astro.build/en/guides/aliases/)).\n\n</Callout>\n\n### Run the CLI\n\nRun the `shadcn-svelte` init command to setup your project:\n\n<PMExecute command=\"shadcn-svelte@latest init\" />\n\n### Configure components.json\n\nYou will be asked a few questions to configure `components.json`:\n\n```txt showLineNumbers\nWhich base color would you like to use? › Slate\nWhere is your global CSS file? (this file will be overwritten) › src/styles/global.css\nConfigure the import alias for lib: › $lib\nConfigure the import alias for components: › $lib/components\nConfigure the import alias for utils: › $lib/utils\nConfigure the import alias for hooks: › $lib/hooks\nConfigure the import alias for ui: › $lib/components/ui\n```\n\n### That's it\n\nYou can now start adding components to your project.\n\n<PMAddComp name=\"button\" />\n\nThe command above will add the `Button` component to your project. You can then import it like this:\n\n```astro title=\"index.astro\" {2,10} showLineNumbers\n---\nimport { Button } from \"$lib/components/ui/button/index.js\";\n---\n\n<html lang=\"en\">\n\t<head>\n\t\t<title>Astro</title>\n\t</head>\n\t<body>\n\t\t<Button>Hello World</Button>\n\t</body>\n</html>\n```\n\n<Callout className=\"mt-4\">\n\nRemember to use the `client` directives inside `.astro` files when dealing with interactive components ([learn more about it](https://docs.astro.build/en/reference/directives-reference/#client-directives)).\n\n</Callout>\n\n</Steps>\n"
  },
  {
    "path": "docs/content/installation/index.md",
    "content": "---\ntitle: Installation\ndescription: How to install dependencies and structure your app.\n---\n\n<script>\n\timport InstallCards from '$lib/components/install-cards.svelte'\n\timport SvelteWhite from '$lib/components/svelte-white.svelte'\n</script>\n\n## Guides\n\n<InstallCards />\n\n## Imports\n\nUnlike the original [shadcn/ui](https://ui.shadcn.com) for React, where the full components can exist in a single file, components in this port are split into multiple files. This is because Svelte doesn't support defining multiple components in a single file, so utilizing the CLI to add components will be the optimal approach.\n\nThe CLI will create a folder for _each_ component, which will sometimes just contain a single Svelte file, and in other times, multiple files. Within each folder, there will be an `index.ts` file that exports the component(s), so you can import them from a single file.\n\nFor example, the Accordion component is split into four `.svelte` files:\n\n- `accordion.svelte`\n- `accordion-content.svelte`\n- `accordion-item.svelte`\n- `accordion-trigger.svelte`\n\nThey can then be imported from the `accordion/index.ts` file like so:\n\n```ts\nimport * as Accordion from '$lib/components/ui/accordion\"\n// or\nimport {\n  Accordion,\n  AccordionContent,\n  AccordionItem,\n  AccordionTrigger\n} from \"$lib/components/ui/accordion\"\n```\n\nRegardless of the import approach you take, the components will be tree-shaken by Rollup, so you don't have to worry about unused components being bundled into your app.\n\n## VSCode extension\n\nInstall the shadcn-svelte [VSCode extension](https://marketplace.visualstudio.com/items?itemName=Selemondev.vscode-shadcn-svelte) by [@selemondev](https://github.com/selemondev) in Visual Studio Code to easily add Shadcn Svelte components to your project.\n\nThis extension offers a range of features:\n\n- Ability to initialize the shadcn-svelte CLI\n- Add components to your project\n- Navigate to a specific component's documentation page directly from your IDE\n- Handy snippets for quick component imports and markup\n\n## JetBrains IDEs extension\n\nInstall the shadcn/ui Components Manager [JetBrains extension](https://plugins.jetbrains.com/plugin/23479-shadcn-ui-components-manager) by [@WarningImHack3r](https://github.com/WarningImHack3r) in any JetBrains IDE (IntelliJ IDEA, WebStorm...) to easily manage shadcn components within your project.\n\nThis extension offers a range of features, including:\n\n- Automatically detect shadcn/ui components in your project\n- Instantly add, remove, and update them with a single click\n- Supports all shadcn/ui implementations: Svelte, React, Vue, and Solid\n- Easily search for remote or existing components\n"
  },
  {
    "path": "docs/content/installation/manual.md",
    "content": "---\ntitle: Manual Installation\ndescription: How to setup shadcn-svelte manually.\n---\n\n<script>\n\timport Steps from \"$lib/components/steps.svelte\";\n\timport Step from \"$lib/components/step.svelte\";\n\timport PMAddComp from \"$lib/components/pm-add-comp.svelte\";\n\timport PMInstall from \"$lib/components/pm-install.svelte\";\n\timport PMExecute from \"$lib/components/pm-execute.svelte\";\n</script>\n\n<Steps>\n\n### Add Tailwind\n\nUse the `sv` CLI to add Tailwind CSS to your project.\n\n<PMExecute command=\"sv add tailwindcss\" />\n\n### Add dependencies\n\nAdd the following dependencies to your project:\n\n<PMInstall command=\"tailwind-variants clsx tailwind-merge tw-animate-css\" />\n\n### Add icon library\n\nInstall `@lucide/svelte`:\n\n<PMInstall command=\"@lucide/svelte\" />\n\n### Configure path aliases\n\nIf you are using SvelteKit and are not using the default alias `$lib`, you'll need to update your `svelte.config.js` file to include those aliases.\n\n```ts title=\"svelte.config.js\" {6} showLineNumbers\nconst config = {\n  // ... other config\n  kit: {\n    // ... other config\n    alias: {\n      \"@/*\": \"./path/to/lib/*\",\n    },\n  },\n};\n```\n\nIf you are _not_ using SvelteKit, then you'll need to update your path aliases in your `tsconfig.json` and `vite.config.ts`.\n\n```json title=\"tsconfig.json\" {4-7} showLineNumbers\n{\n  \"compilerOptions\": {\n    // ... other options\n    \"paths\": {\n      \"$lib\": [\"./src/lib\"],\n      \"$lib/*\": [\"./src/lib/*\"]\n    }\n  }\n}\n```\n\n```ts title=\"vite.config.ts\" {1, 5-9} showLineNumbers\nimport path from \"path\";\n\nexport default defineConfig({\n  // ... other options\n  resolve: {\n    alias: {\n      $lib: path.resolve(\"./src/lib\"),\n    },\n  },\n});\n```\n\n### Configure styles\n\nAdd the following to your global CSS file. You can learn more about using CSS variables for theming in the [theming section](/docs/theming).\n\n```css title=\"src/routes/layout.css\" showLineNumbers\n@import \"tailwindcss\";\n@import \"tw-animate-css\";\n@custom-variant dark (&:is(.dark *));\n\n:root {\n  --radius: 0.625rem;\n  --background: oklch(1 0 0);\n  --foreground: oklch(0.145 0 0);\n  --card: oklch(1 0 0);\n  --card-foreground: oklch(0.145 0 0);\n  --popover: oklch(1 0 0);\n  --popover-foreground: oklch(0.145 0 0);\n  --primary: oklch(0.205 0 0);\n  --primary-foreground: oklch(0.985 0 0);\n  --secondary: oklch(0.97 0 0);\n  --secondary-foreground: oklch(0.205 0 0);\n  --muted: oklch(0.97 0 0);\n  --muted-foreground: oklch(0.556 0 0);\n  --accent: oklch(0.97 0 0);\n  --accent-foreground: oklch(0.205 0 0);\n  --destructive: oklch(0.577 0.245 27.325);\n  --border: oklch(0.922 0 0);\n  --input: oklch(0.922 0 0);\n  --ring: oklch(0.708 0 0);\n  --chart-1: oklch(0.646 0.222 41.116);\n  --chart-2: oklch(0.6 0.118 184.704);\n  --chart-3: oklch(0.398 0.07 227.392);\n  --chart-4: oklch(0.828 0.189 84.429);\n  --chart-5: oklch(0.769 0.188 70.08);\n  --sidebar: oklch(0.985 0 0);\n  --sidebar-foreground: oklch(0.145 0 0);\n  --sidebar-primary: oklch(0.205 0 0);\n  --sidebar-primary-foreground: oklch(0.985 0 0);\n  --sidebar-accent: oklch(0.97 0 0);\n  --sidebar-accent-foreground: oklch(0.205 0 0);\n  --sidebar-border: oklch(0.922 0 0);\n  --sidebar-ring: oklch(0.708 0 0);\n}\n\n.dark {\n  --background: oklch(0.145 0 0);\n  --foreground: oklch(0.985 0 0);\n  --card: oklch(0.205 0 0);\n  --card-foreground: oklch(0.985 0 0);\n  --popover: oklch(0.269 0 0);\n  --popover-foreground: oklch(0.985 0 0);\n  --primary: oklch(0.922 0 0);\n  --primary-foreground: oklch(0.205 0 0);\n  --secondary: oklch(0.269 0 0);\n  --secondary-foreground: oklch(0.985 0 0);\n  --muted: oklch(0.269 0 0);\n  --muted-foreground: oklch(0.708 0 0);\n  --accent: oklch(0.371 0 0);\n  --accent-foreground: oklch(0.985 0 0);\n  --destructive: oklch(0.704 0.191 22.216);\n  --border: oklch(1 0 0 / 10%);\n  --input: oklch(1 0 0 / 15%);\n  --ring: oklch(0.556 0 0);\n  --chart-1: oklch(0.488 0.243 264.376);\n  --chart-2: oklch(0.696 0.17 162.48);\n  --chart-3: oklch(0.769 0.188 70.08);\n  --chart-4: oklch(0.627 0.265 303.9);\n  --chart-5: oklch(0.645 0.246 16.439);\n  --sidebar: oklch(0.205 0 0);\n  --sidebar-foreground: oklch(0.985 0 0);\n  --sidebar-primary: oklch(0.488 0.243 264.376);\n  --sidebar-primary-foreground: oklch(0.985 0 0);\n  --sidebar-accent: oklch(0.269 0 0);\n  --sidebar-accent-foreground: oklch(0.985 0 0);\n  --sidebar-border: oklch(1 0 0 / 10%);\n  --sidebar-ring: oklch(0.439 0 0);\n}\n\n@theme inline {\n  --radius-sm: calc(var(--radius) - 4px);\n  --radius-md: calc(var(--radius) - 2px);\n  --radius-lg: var(--radius);\n  --radius-xl: calc(var(--radius) + 4px);\n  --color-background: var(--background);\n  --color-foreground: var(--foreground);\n  --color-card: var(--card);\n  --color-card-foreground: var(--card-foreground);\n  --color-popover: var(--popover);\n  --color-popover-foreground: var(--popover-foreground);\n  --color-primary: var(--primary);\n  --color-primary-foreground: var(--primary-foreground);\n  --color-secondary: var(--secondary);\n  --color-secondary-foreground: var(--secondary-foreground);\n  --color-muted: var(--muted);\n  --color-muted-foreground: var(--muted-foreground);\n  --color-accent: var(--accent);\n  --color-accent-foreground: var(--accent-foreground);\n  --color-destructive: var(--destructive);\n  --color-border: var(--border);\n  --color-input: var(--input);\n  --color-ring: var(--ring);\n  --color-chart-1: var(--chart-1);\n  --color-chart-2: var(--chart-2);\n  --color-chart-3: var(--chart-3);\n  --color-chart-4: var(--chart-4);\n  --color-chart-5: var(--chart-5);\n  --color-sidebar: var(--sidebar);\n  --color-sidebar-foreground: var(--sidebar-foreground);\n  --color-sidebar-primary: var(--sidebar-primary);\n  --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);\n  --color-sidebar-accent: var(--sidebar-accent);\n  --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);\n  --color-sidebar-border: var(--sidebar-border);\n  --color-sidebar-ring: var(--sidebar-ring);\n}\n\n@layer base {\n  * {\n    @apply border-border outline-ring/50;\n  }\n\n  body {\n    @apply bg-background text-foreground;\n  }\n}\n```\n\nFeel free to add or modify as needed to suit your project.\n\n### Configure utils\n\nYou'll want to create a `cn` helper to make it easier to conditionally add and merge Tailwind CSS classes.\n\n```ts title=\"src/lib/utils.ts\" showLineNumbers\nimport { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n  return twMerge(clsx(inputs));\n}\n```\n\n### Import styles to your app\n\nCreate `src/routes/+layout.svelte` and import the styles:\n\n```svelte title=\"src/routes/+layout.svelte\" showLineNumbers\n<script lang=\"ts\">\n  import \"../app.css\";\n  let { children } = $props();\n</script>\n\n{@render children?.()}\n```\n\n### That's it\n\nYou can now start adding components to your project.\n\n<PMAddComp name=\"button\" />\n\n</Steps>\n"
  },
  {
    "path": "docs/content/installation/sveltekit.md",
    "content": "---\ntitle: SvelteKit\ndescription: How to setup shadcn-svelte in a SvelteKit project.\n---\n\n<script>\n\timport * as Alert from \"$lib/registry/ui/alert/index.js\";\n\timport Steps from \"$lib/components/steps.svelte\";\n\timport PMCreate from \"$lib/components/pm-create.svelte\";\n\timport PMExecute from \"$lib/components/pm-execute.svelte\";\n\timport PMInstall from \"$lib/components/pm-install.svelte\";\n\timport PMAddComp from \"$lib/components/pm-add-comp.svelte\";\n</script>\n\n<Steps>\n\n### Create project\n\nUse the SvelteKit CLI to create a new project with TailwindCSS\n\n<PMExecute command=\"sv create my-app --add tailwindcss\" />\n\n### Setup path aliases\n\nIf you are not using the default alias `$lib`, you'll need to update your `svelte.config.js` file to include those aliases.\n\n```ts title=\"svelte.config.js\" {6} showLineNumbers\nconst config = {\n  // ... other config\n  kit: {\n    // ... other config\n    alias: {\n      \"@/*\": \"./path/to/lib/*\",\n    },\n  },\n};\n```\n\n### Run the CLI\n\n<PMExecute command=\"shadcn-svelte@latest init\" />\n\n### Configure components.json\n\nYou will be asked a few questions to configure `components.json`:\n\n```txt showLineNumbers\nWhich base color would you like to use? › Slate\nWhere is your global CSS file? (this file will be overwritten) › src/routes/layout.css\nConfigure the import alias for lib: › $lib\nConfigure the import alias for components: › $lib/components\nConfigure the import alias for utils: › $lib/utils\nConfigure the import alias for hooks: › $lib/hooks\nConfigure the import alias for ui: › $lib/components/ui\n```\n\n### That's it\n\nYou can now start adding components to your project.\n\n<PMAddComp name=\"button\" />\n\nThe command above will add the `Button` component to your project. You can then import it like this:\n\n```svelte {2,5} showLineNumbers\n<script lang=\"ts\">\n  import { Button } from \"$lib/components/ui/button/index.js\";\n</script>\n\n<Button>Click me</Button>\n```\n\n</Steps>\n"
  },
  {
    "path": "docs/content/installation/vite.md",
    "content": "---\ntitle: Vite\ndescription: How to setup shadcn-svelte in a Vite project.\n---\n\n<script>\n\timport * as Alert from \"$lib/registry/ui/alert/index.js\";\n\timport Steps from \"$lib/components/steps.svelte\";\n\timport PMAddComp from \"$lib/components/pm-add-comp.svelte\";\n\timport PMInstall from \"$lib/components/pm-install.svelte\";\n\timport PMExecute from \"$lib/components/pm-execute.svelte\";\n</script>\n\n<Steps>\n\n### Add TailwindCSS\n\nUse the Svelte CLI to add Tailwind CSS to your project.\n\n<PMExecute command=\"sv add tailwindcss\" />\n\n### Edit tsconfig.json file\n\nThe current version of Vite splits TypeScript configuration into three files, two of which need to be edited.\nAdd the `baseUrl` and `paths` properties to the `compilerOptions` section of the `tsconfig.json` and\n`tsconfig.app.json` files:\n\n```json title=\"tsconfig.json\" {7-13} showLineNumbers\n{\n  \"files\": [],\n  \"references\": [\n    { \"path\": \"./tsconfig.app.json\" },\n    { \"path\": \"./tsconfig.node.json\" }\n  ],\n  \"compilerOptions\": {\n    \"baseUrl\": \".\",\n    \"paths\": {\n      \"$lib\": [\"./src/lib\"],\n      \"$lib/*\": [\"./src/lib/*\"]\n    }\n  }\n}\n```\n\n### Edit tsconfig.app.json file\n\nAdd the following code to the `tsconfig.app.json` file to resolve paths, for your IDE:\n\n```json title=\"tsconfig.app.json\" {4-8} showLineNumbers\n{\n  \"compilerOptions\": {\n    // ...\n    \"baseUrl\": \".\",\n    \"paths\": {\n      \"$lib\": [\"./src/lib\"],\n      \"$lib/*\": [\"./src/lib/*\"]\n    }\n  }\n}\n```\n\n### Update vite.config.ts\n\nAdd the following code to the vite.config.ts so your app can resolve paths without error:\n\n```ts title=\"vite.config.ts\" {1, 5-9} showLineNumbers\nimport path from \"path\";\n\nexport default defineConfig({\n  // ... other options\n  resolve: {\n    alias: {\n      $lib: path.resolve(\"./src/lib\"),\n    },\n  },\n});\n```\n\n### Run the CLI\n\n<PMExecute command=\"shadcn-svelte@latest init\" />\n\n### Configure components.json\n\nYou will be asked a few questions to configure `components.json`:\n\n```txt showLineNumbers\nWhich base color would you like to use? › Slate\nWhere is your global CSS file? (this file will be overwritten) › src/routes/layout.css\nConfigure the import alias for lib: › $lib\nConfigure the import alias for components: › $lib/components\nConfigure the import alias for utils: › $lib/utils\nConfigure the import alias for hooks: › $lib/hooks\nConfigure the import alias for ui: › $lib/components/ui\n```\n\n### That's it\n\nYou can now start adding components to your project.\n\n<PMAddComp name=\"button\" />\n\nThe command above will add the `Button` component to your project. You can then import it like this:\n\n```svelte {2,5} showLineNumbers\n<script lang=\"ts\">\n  import { Button } from \"$lib/components/ui/button/index.js\";\n</script>\n\n<Button>Click me</Button>\n```\n\n</Steps>\n"
  },
  {
    "path": "docs/content/javascript.md",
    "content": "---\ntitle: JavaScript\ndescription: How to use shadcn-svelte with JavaScript.\n---\n\nThis project and the components are written in TypeScript. We recommend using TypeScript for your project as well.\n\nHowever, we provide a JavaScript version of the components as well. The JavaScript version is _only_ available via the [CLI](/docs/cli).\n\nTo opt-out of TypeScript, you can use the `typescript` flag in your `components.json` file.\n\n```json {6} title=\"components.json\" showLineNumbers\n{\n  \"style\": \"default\",\n  \"tailwind\": {\n    \"css\": \"src/routes/layout.css\"\n  },\n  \"typescript\": false,\n  \"aliases\": {\n    \"utils\": \"$lib/utils\",\n    \"components\": \"$lib/components\",\n    \"hooks\": \"$lib/hooks\",\n    \"ui\": \"$lib/components/ui\"\n  },\n  \"registry\": \"https://shadcn-svelte.com/registry\"\n}\n```\n\nTo configure import aliases, create a `jsconfig.json` file:\n\n```json {4} title=\"jsconfig.json\" showLineNumbers\n{\n  \"compilerOptions\": {\n    \"paths\": {\n      \"$lib/*\": [\"./src/lib/*\"]\n    }\n  }\n}\n```\n"
  },
  {
    "path": "docs/content/legacy.md",
    "content": "---\ntitle: Legacy Docs\ndescription: View the legacy docs for shadcn-svelte and Tailwind v3.\n---\n\n<script>\n\timport {Button} from \"$lib/registry/ui/button/index.js\";\n</script>\n\nYou're looking at the docs for Svelte 5 + Tailwind v4.\n\nIf you're looking for older docs, you can find them below.\n\n<div class=\"flex items-center gap-2 mt-6\">\n<Button href=\"https://tw3.shadcn-svelte.com\" class=\"no-underline\" size=\"sm\">\nSvelte 5 + Tailwind v3 Docs\n</Button>\n<Button href=\"https://svelte-4.shadcn-svelte.com\" class=\"no-underline\" size=\"sm\">\nSvelte 4 + Tailwind v3 Docs\n</Button>\n</div>\n"
  },
  {
    "path": "docs/content/migration/index.md",
    "content": "---\ntitle: Migration\ndescription: Learn how to update your project to the latest version of shadcn-svelte.\n---\n\n<script>\n\timport {Button} from \"$lib/registry/ui/button/index.js\";\n</script>\n\nThe latest version of shadcn-svelte expects you to be using Svelte v5 and Tailwind v4. The following guides will help you update your project to the latest version.\n\n<div class=\"flex gap-2 mt-6\">\n<Button href=\"/docs/migration/svelte-5\">\nSvelte v5\n</Button>\n<Button href=\"/docs/migration/tailwind-v4\">\nTailwind v4\n</Button>\n</div>\n"
  },
  {
    "path": "docs/content/migration/svelte-5.md",
    "content": "---\ntitle: Svelte 5\ndescription: How to migrate from Svelte 4 and Tailwind 3 to Svelte 5.\n---\n\n<script>\n\timport Steps from \"$lib/components/steps.svelte\";\n\timport PMExecute from \"$lib/components/pm-execute.svelte\";\n\timport PMInstall from \"$lib/components/pm-install.svelte\";\n\timport PMRemove from \"$lib/components/pm-remove.svelte\";\n\timport Callout from \"$lib/components/callout.svelte\";\n</script>\n\n<Callout>\n\n**Note**: With Svelte 5 comes significant changes to this project, along with the headless UI library used [bits-ui](https://bits-ui.com). This guide is specifically focused on migrating the shadcn-svelte portions and does not cover the migration of `bits-ui`. See [Bits UI's migration guide](https://bits-ui.com/docs/migration-guide) for more information.\n\n</Callout>\n\n## Svelte 4 to Svelte 5\n\nThis first guide will take your project from Svelte 4 with Tailwind 3 to Svelte 5 and Tailwind 3.\n\nOnce you've completed this guide and you're comfortable everything is working, you can move on to the next guide to migrate to Tailwind 4.\n\n## Prerequisites\n\n1. Ensure you have read up on the changes from Svelte 4 to Svelte 5. Svelte provides a comprehensive guide for this on their [website](https://svelte.dev/docs/svelte/v5-migration-guide).\n2. Commit any pending changes to your repository.\n3. Determine which of your components have custom behavior/styles so that you can reimplement those after updating.\n4. Use [`sv-migrate`](https://svelte.dev/docs/cli/sv-migrate) to help you migrate your project to Svelte 5.\n\n## Update Configs\n\nThe `components.json`, `utils`, and the global CSS file have changed for Svelte 5.\n\n### Update `components.json`\n\nAdd the `registry` to the root object, and add `hooks`, `ui`, and `lib` keys under `aliases`.\n\n```diff\n{\n  \"$schema\": \"https://shadcn-svelte.com/schema.json\",\n  \"style\": \"default\",\n  \"tailwind\": {\n    \"css\": \"src/routes/layout.css\",\n    \"baseColor\": \"slate\"\n  },\n  \"aliases\": {\n    \"components\": \"$lib/components\",\n    \"utils\": \"$lib/utils\",\n+   \"ui\": \"$lib/components/ui\",\n+   \"hooks\": \"$lib/hooks\",\n+   \"lib\": \"$lib\"\n  },\n  \"typescript\": true,\n+ \"registry\": \"https://shadcn-svelte.com/registry\"\n}\n```\n\n### Update `tailwind.config.js`\n\nAdd `tailwindcss-animate`.\n\n<PMInstall command=\"tailwindcss-animate\" />\n\nAdd the `tailwindcss-animate` plugin, sidebar colors, and animations config.\n\n```ts title=\"tailwind.config.js\"\nimport type { Config } from \"tailwindcss\";\nimport tailwindcssAnimate from \"tailwindcss-animate\";\n\nconst config: Config = {\n  darkMode: [\"class\"],\n  content: [\"./src/**/*.{html,js,svelte,ts}\"],\n  safelist: [\"dark\"],\n  theme: {\n    container: {\n      // unchanged ...\n    },\n    extend: {\n      colors: {\n        // unchanged ...\n        sidebar: {\n          DEFAULT: \"hsl(var(--sidebar-background))\",\n          foreground: \"hsl(var(--sidebar-foreground))\",\n          primary: \"hsl(var(--sidebar-primary))\",\n          \"primary-foreground\": \"hsl(var(--sidebar-primary-foreground))\",\n          accent: \"hsl(var(--sidebar-accent))\",\n          \"accent-foreground\": \"hsl(var(--sidebar-accent-foreground))\",\n          border: \"hsl(var(--sidebar-border))\",\n          ring: \"hsl(var(--sidebar-ring))\",\n        },\n      },\n      borderRadius: {\n        // unchanged ...\n      },\n      fontFamily: {\n        // unchanged ...\n      },\n      keyframes: {\n        \"accordion-down\": {\n          from: { height: \"0\" },\n          to: { height: \"var(--bits-accordion-content-height)\" },\n        },\n        \"accordion-up\": {\n          from: { height: \"var(--bits-accordion-content-height)\" },\n          to: { height: \"0\" },\n        },\n        \"caret-blink\": {\n          \"0%,70%,100%\": { opacity: \"1\" },\n          \"20%,50%\": { opacity: \"0\" },\n        },\n      },\n      animation: {\n        \"accordion-down\": \"accordion-down 0.2s ease-out\",\n        \"accordion-up\": \"accordion-up 0.2s ease-out\",\n        \"caret-blink\": \"caret-blink 1.25s ease-out infinite\",\n      },\n    },\n  },\n  plugins: [tailwindcssAnimate],\n};\n\nexport default config;\n```\n\n### Update `utils.ts`\n\n<Callout>\n\n**Note**: You may not want to do this step until after you've updated your components, as some components may rely on the now removed `flyAndScale` function.\n\n</Callout>\n\n`utils.ts` now only exports the `cn` function and a few utility types.\n\n```ts title=\"src/lib/utils.ts\"\nimport { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n  return twMerge(clsx(inputs));\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type WithoutChild<T> = T extends { child?: any } ? Omit<T, \"child\"> : T;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type WithoutChildren<T> = T extends { children?: any }\n  ? Omit<T, \"children\">\n  : T;\nexport type WithoutChildrenOrChild<T> = WithoutChildren<WithoutChild<T>>;\nexport type WithElementRef<T, U extends HTMLElement = HTMLElement> = T & {\n  ref?: U | null;\n};\n```\n\n## Upgrade Components\n\n### Alias Dependencies (optional)\n\nIf you plan to slowly migrate components, it's recommended to alias the old versions of the major dependencies, like `bits-ui`, in your `package.json` file so that you can use both versions of the library in your project while you migrate.\n\n```diff title=\"package.json\"\n{\n  \"devDependencies\": {\n-\t\"bits-ui\": \"^0.22.0\",\n+   \"bits-ui-old\": \"npm:bits-ui@0.22.0\",\n  }\n}\n```\n\nYou'll then want to replace all the imports used in your project to `bits-ui-old`.\n\n```diff title=\"src/lib/components/ui/dialog-content.svelte\"\n<script lang=\"ts\">\n-  import { Dialog as DialogPrimitive } from \"bits-ui\";\n+  import { Dialog as DialogPrimitive } from \"bits-ui-old\";\n</script>\n```\n\nYou can do the same for any of the other dependencies that you're using in your project.\n\n### Update Dependencies\n\nThe following dependencies have been updated to support Svelte 5:\n\n- `bits-ui` - `^1.0.0`\n- `svelte-sonner` - `^1.0.0`\n- `@lucide/svelte` - `^0.482.0`\n- `paneforge` - `^1.0.0-next.5`\n- `vaul-svelte` - `^1.0.0-next.7`\n- `mode-watcher` - `^1.0.0`\n- `cmdk-sv` - deprecated in favor of Bits UI's `Command` component\n- `svelte-headless-table` - deprecated in favor of `@tanstack/table-core`\n- `svelte-radix` - icons deprecated in favor of `@lucide/svelte`\n- `lucide-svelte` - replaced with `@lucide/svelte`\n\nYou can update your dependencies by running the following command:\n\n<PMInstall command=\"bits-ui@latest svelte-sonner@latest @lucide/svelte@latest paneforge@next vaul-svelte@next mode-watcher@latest -D\" />\n\n### Start Migrating Components\n\nNow you're ready to begin updating your components to their new versions. The CLI doesn't actually _update_ your components, it simply replaces them with the new versions, so be sure to commit your changes before running the CLI.\n\n```bash\ngit add .\ngit commit -m 'before migration'\n```\n\nNow you can run the `add` command to start migrating your components.\n\n<PMExecute command=\"shadcn-svelte@latest add dialog --overwrite\" />\n\nReview the diff to see what was updated and make any necessary adjustments. Rinse and repeat for each component you want to migrate.\n\n## Remove Unused Dependencies\n\nOnce you've updated all your components, you can remove the old dependencies from your `package.json` file.\n\n### cmdk-sv\n\n`cmdk-sv` has been replaced with Bits UI's `Command` component.\n\n<PMRemove command=\"cmdk-sv\" />\n\n### svelte-headless-table\n\n`svelte-headless-table` has been replaced with `@tanstack/table-core`.\n\n<PMRemove command=\"svelte-headless-table\" />\n\n### svelte-radix\n\n`svelte-radix` has been replaced with `@lucide/svelte`.\n\n<PMRemove command=\"svelte-radix\" />\n\n### lucide-svelte\n\n`lucide-svelte` has been replaced with `@lucide/svelte`.\n\n<PMRemove command=\"lucide-svelte\" />\n\n## Next Steps\n\nOnce you've completed this guide and you're comfortable everything is working as expected, you can move on to the [Tailwind 4 Guide](/docs/migration/tailwind-v4).\n"
  },
  {
    "path": "docs/content/migration/tailwind-v4.md",
    "content": "---\ntitle: Tailwind v4\ndescription: How to use shadcn-svelte with Tailwind v4 and Svelte 5.\n---\n\n<script>\n\timport { Button }from \"$lib/registry/ui/button/index.js\";\n\timport InstallCards from \"$lib/components/install-cards.svelte\";\n\timport Callout from \"$lib/components/callout.svelte\";\n\timport PMExecute from \"$lib/components/pm-execute.svelte\";\n\timport Step from \"$lib/components/step.svelte\";\n\timport Steps from \"$lib/components/steps.svelte\";\n\timport PMRemove from \"$lib/components/pm-remove.svelte\";\n\timport PMInstall from \"$lib/components/pm-install.svelte\";\n\timport PMRun from \"$lib/components/pm-run.svelte\";\n</script>\n\nThis documentation site is now running Tailwind v4. If you're looking for the old Tailwind v3 docs, you can find them here: [https://tw3.shadcn-svelte.com](https://tw3.shadcn-svelte.com).\n\n## What's New\n\n- The `@latest` CLI can now initialize projects with Tailwind v4 and Svelte 5.\n- Full support for the new `@theme` directive and `@theme inline` option.\n- All components are updated for Tailwind v4 and Svelte 5.\n- Every primitive that renders an element now has a `data-slot` attribute for styling.\n- We've fixed and cleaned up the style of the components.\n- Buttons now use the default cursor.\n- We're deprecating the `default` style. New projects will use `new-york`.\n- HSL colors are now converted to OKLCH.\n\n**Note: this is non-breaking. Your existing apps with Tailwind v3 will continue to work. When you add new components, they'll still be in Tailwind v3 with the style configured in `components.json` until you upgrade. Only new projects start with Tailwind v4.**\n\n## See it Live\n\nThis documentation site is now using Tailwind v4 and Svelte 5, but for a more complete example, checkout the demo site here: [https://v4.shadcn-svelte.com](https://v4.shadcn-svelte.com).\n\nIf you find any bugs, please us know on [GitHub](https://github.com/huntabyte/shadcn-svelte/issues).\n\n## Try It Out\n\nYou can start using Tailwind v4 and Svelte 5 today using the `@latest` CLI. See the specific install docs\n\n<InstallCards />\n\n## Upgrade Your Project\n\n<Callout>\n\n**Note**: This guide assumes you are coming from a Svelte 5 and Tailwind 3 project. If you are coming from a Svelte 4 project, you should first follow the [Svelte 4 and Tailwind 3 to Svelte 5](./svelte-5) guide.\n\n</Callout>\n\n<Callout class=\"bg-blue-50 mt-6 border-blue-600 dark:border-blue-900 dark:bg-blue-950 mb-6 [&_code]:bg-blue-100 dark:[&_code]:bg-blue-900 text-foreground\">\n\n**Important:** Before upgrading, please read the [Tailwind v4 Compatibility\nDocs](https://tailwindcss.com/docs/compatibility) and make sure your project\nis ready for the upgrade. Tailwind v4 uses bleeding-edge browser features and\nis designed for modern browsers.\n\n</Callout>\n\nOne of the major advantages of using `shadcn-svelte` is that the code you end up with is exactly what you'd write yourself. There are no hidden abstractions.\n\nThis means when a dependency has a new release, you can just follow the official upgrade paths.\n\nHere's how to upgrade your existing projects:\n\n### 1. Follow the Tailwind v4 Upgrade Guide\n\n- Upgrade to Tailwind v4 by following the official upgrade guide: https://tailwindcss.com/docs/upgrade-guide\n- Use the `@tailwindcss/upgrade` codemod to remove deprecated utility classes and update the tailwind config.\n\n### 2. Replace PostCSS with Vite\n\nThe upgrade script will automatically migrate your project to the latest PostCSS configuration of Tailwind v4, but the Tailwind team recommends using Vite instead, so we'll use that instead.\n\n#### Delete `postcss.config.js`\n\n```diff title=\"postcss.config.js\"\n- export default {\n- \tplugins: {\n- \t\t'@tailwindcss/postcss': {},\n- \t}\n- };\n```\n\n#### Uninstall `@tailwindcss/postcss`\n\n<PMRemove command=\"@tailwindcss/postcss\" />\n\n#### Install `@tailwindcss/vite`\n\n<PMInstall command=\"@tailwindcss/vite -D\" />\n\n#### Update `vite.config.ts`\n\n```diff title=\"vite.config.ts\"\nimport { sveltekit } from '@sveltejs/kit/vite';\nimport { defineConfig } from 'vite';\n+ import tailwindcss from '@tailwindcss/vite';\n\nexport default defineConfig({\n-\tplugins: [sveltekit()],\n+   plugins: [tailwindcss(), sveltekit()],\n});\n```\n\n#### Verify the upgrade\n\nStart your dev server and verify that all your styles are working as expected.\n\n<PMRun command=\"dev\" />\n\n### 2. Update your `app.css` file\n\nThe codemod will update your `app.css` file to look something like this, where it's defining the colors as CSS variables and importing your existing `tailwind.config.ts` file:\n\n```css showLineNumbers\n@import \"tailwindcss\";\n\n@config \"../tailwind.config.ts\";\n\n/*\n  The default border color has changed to `currentcolor` in Tailwind CSS v4,\n  so we've added these compatibility styles to make sure everything still\n  looks the same as it did with Tailwind CSS v3.\n\n  If we ever want to remove these styles, we need to add an explicit border\n  color utility to any element that depends on these defaults.\n*/\n@layer base {\n  *,\n  ::after,\n  ::before,\n  ::backdrop,\n  ::file-selector-button {\n    border-color: var(--color-gray-200, currentcolor);\n  }\n}\n\n@layer base {\n  :root {\n    --background: 0 0% 100%;\n    --foreground: 240 10% 3.9%;\n    --muted: 240 4.8% 95.9%;\n    --muted-foreground: 240 3.8% 46.1%;\n    --popover: 0 0% 100%;\n    --popover-foreground: 240 10% 3.9%;\n    --card: 0 0% 100%;\n    --card-foreground: 240 10% 3.9%;\n    --border: 240 5.9% 90%;\n    --input: 240 5.9% 90%;\n    --primary: 240 5.9% 10%;\n    --primary-foreground: 0 0% 98%;\n    --secondary: 240 4.8% 95.9%;\n    --secondary-foreground: 240 5.9% 10%;\n    --accent: 240 4.8% 95.9%;\n    --accent-foreground: 240 5.9% 10%;\n    --destructive: 0 72.2% 50.6%;\n    --destructive-foreground: 0 0% 98%;\n    --ring: 240 10% 3.9%;\n    --radius: 0.5rem;\n    --sidebar: 0 0% 98%;\n    --sidebar-foreground: 240 5.3% 26.1%;\n    --sidebar-primary: 240 5.9% 10%;\n    --sidebar-primary-foreground: 0 0% 98%;\n    --sidebar-accent: 240 4.8% 95.9%;\n    --sidebar-accent-foreground: 240 5.9% 10%;\n    --sidebar-border: 220 13% 91%;\n    --sidebar-ring: 217.2 91.2% 59.8%;\n  }\n\n  .dark {\n    --background: 240 10% 3.9%;\n    --foreground: 0 0% 98%;\n    --muted: 240 3.7% 15.9%;\n    --muted-foreground: 240 5% 64.9%;\n    --popover: 240 10% 3.9%;\n    --popover-foreground: 0 0% 98%;\n    --card: 240 10% 3.9%;\n    --card-foreground: 0 0% 98%;\n    --border: 240 3.7% 15.9%;\n    --input: 240 3.7% 15.9%;\n    --primary: 0 0% 98%;\n    --primary-foreground: 240 5.9% 10%;\n    --secondary: 240 3.7% 15.9%;\n    --secondary-foreground: 0 0% 98%;\n    --accent: 240 3.7% 15.9%;\n    --accent-foreground: 0 0% 98%;\n    --destructive: 0 62.8% 30.6%;\n    --destructive-foreground: 0 0% 98%;\n    --ring: 240 4.9% 83.9%;\n    --sidebar: 240 5.9% 10%;\n    --sidebar-foreground: 240 4.8% 95.9%;\n    --sidebar-primary: 224.3 76.3% 48%;\n    --sidebar-primary-foreground: 0 0% 100%;\n    --sidebar-accent: 240 3.7% 15.9%;\n    --sidebar-accent-foreground: 240 4.8% 95.9%;\n    --sidebar-border: 240 3.7% 15.9%;\n    --sidebar-ring: 217.2 91.2% 59.8%;\n  }\n}\n\n@layer base {\n  * {\n    @apply border-border;\n  }\n\n  body {\n    @apply bg-background text-foreground;\n  }\n}\n```\n\nIn the following steps, we'll update this to completely remove the `tailwind.config.ts` and adopt the CSS-based config.\n\n#### Replace `tailwind-css-animate` with `tw-animate-css`\n\nWe've deprecated `tailwindcss-animate` in favor of `tw-animate-css`, which has support for Tailwind v4.\n\n<PMRemove command=\"tailwindcss-animate\" />\n\n<PMInstall command=\"tw-animate-css -D\" />\n\n#### Import `tw-animate-css`\n\n```diff title=\"app.css\"\n  @import \"tailwindcss\";\n+ @import \"tw-animate-css\";\n/* ... */\n```\n\n#### Add the custom variant for dark mode\n\n```diff title=\"app.css\"\n@import \"tailwindcss\";\n@import \"tw-animate-css\";\n\n+@custom-variant dark (&:is(.dark *));\n/* ... */\n```\n\n#### Remove the compatibility styles\n\nWe override the styles applied here so this is just dead code.\n\n```diff title=\"app.css\"\n@import \"tailwindcss\";\n@import \"tw-animate-css\";\n\n@custom-variant dark (&:is(.dark *));\n\n- /*\n-   The default border color has changed to `currentcolor` in Tailwind CSS v4,\n-   so we've added these compatibility styles to make sure everything still\n-   looks the same as it did with Tailwind CSS v3.\n-\n-   If we ever want to remove these styles, we need to add an explicit border\n-   color utility to any element that depends on these defaults.\n- */\n- @layer base {\n-   *,\n-   ::after,\n-   ::before,\n-   ::backdrop,\n-   ::file-selector-button {\n-     border-color: var(--color-gray-200, currentcolor);\n-   }\n- }\n```\n\n#### CSS Variables and Theme Config\n\nWe'll move the CSS variables to the `:root` and `.dark` selectors, wrap the colors values in `hsl()`, and set up an `@theme inline` directive to replace our Tailwind v3 config.\n\nOnce complete, your `app.css` file should look something like this (the color values will differ depending on your theme):\n\n```css title=\"app.css\"\n@import \"tailwindcss\";\n@import \"tw-animate-css\";\n\n@custom-variant dark (&:is(.dark *));\n\n:root {\n  --background: hsl(0 0% 100%) /* <- Wrap in HSL */;\n  --foreground: hsl(240 10% 3.9%);\n  --muted: hsl(240 4.8% 95.9%);\n  --muted-foreground: hsl(240 3.8% 46.1%);\n  --popover: hsl(0 0% 100%);\n  --popover-foreground: hsl(240 10% 3.9%);\n  --card: hsl(0 0% 100%);\n  --card-foreground: hsl(240 10% 3.9%);\n  --border: hsl(240 5.9% 90%);\n  --input: hsl(240 5.9% 90%);\n  --primary: hsl(240 5.9% 10%);\n  --primary-foreground: hsl(0 0% 98%);\n  --secondary: hsl(240 4.8% 95.9%);\n  --secondary-foreground: hsl(240 5.9% 10%);\n  --accent: hsl(240 4.8% 95.9%);\n  --accent-foreground: hsl(240 5.9% 10%);\n  --destructive: hsl(0 72.2% 50.6%);\n  --destructive-foreground: hsl(0 0% 98%);\n  --ring: hsl(240 10% 3.9%);\n  --sidebar: hsl(0 0% 98%);\n  --sidebar-foreground: hsl(240 5.3% 26.1%);\n  --sidebar-primary: hsl(240 5.9% 10%);\n  --sidebar-primary-foreground: hsl(0 0% 98%);\n  --sidebar-accent: hsl(240 4.8% 95.9%);\n  --sidebar-accent-foreground: hsl(240 5.9% 10%);\n  --sidebar-border: hsl(220 13% 91%);\n  --sidebar-ring: hsl(217.2 91.2% 59.8%);\n\n  --radius: 0.5rem;\n}\n\n.dark {\n  --background: hsl(240 10% 3.9%);\n  --foreground: hsl(0 0% 98%);\n  --muted: hsl(240 3.7% 15.9%);\n  --muted-foreground: hsl(240 5% 64.9%);\n  --popover: hsl(240 10% 3.9%);\n  --popover-foreground: hsl(0 0% 98%);\n  --card: hsl(240 10% 3.9%);\n  --card-foreground: hsl(0 0% 98%);\n  --border: hsl(240 3.7% 15.9%);\n  --input: hsl(240 3.7% 15.9%);\n  --primary: hsl(0 0% 98%);\n  --primary-foreground: hsl(240 5.9% 10%);\n  --secondary: hsl(240 3.7% 15.9%);\n  --secondary-foreground: hsl(0 0% 98%);\n  --accent: hsl(240 3.7% 15.9%);\n  --accent-foreground: hsl(0 0% 98%);\n  --destructive: hsl(0 62.8% 30.6%);\n  --destructive-foreground: hsl(0 0% 98%);\n  --ring: hsl(240 4.9% 83.9%);\n  --sidebar: hsl(240 5.9% 10%);\n  --sidebar-foreground: hsl(240 4.8% 95.9%);\n  --sidebar-primary: hsl(224.3 76.3% 48%);\n  --sidebar-primary-foreground: hsl(0 0% 100%);\n  --sidebar-accent: hsl(240 3.7% 15.9%);\n  --sidebar-accent-foreground: hsl(240 4.8% 95.9%);\n  --sidebar-border: hsl(240 3.7% 15.9%);\n  --sidebar-ring: hsl(217.2 91.2% 59.8%);\n}\n\n@theme inline {\n  /* Radius (for rounded-*) */\n  --radius-sm: calc(var(--radius) - 4px);\n  --radius-md: calc(var(--radius) - 2px);\n  --radius-lg: var(--radius);\n  --radius-xl: calc(var(--radius) + 4px);\n\n  /* Colors */\n  --color-background: var(--background);\n  --color-foreground: var(--foreground);\n  --color-muted: var(--muted);\n  --color-muted-foreground: var(--muted-foreground);\n  --color-popover: var(--popover);\n  --color-popover-foreground: var(--popover-foreground);\n  --color-card: var(--card);\n  --color-card-foreground: var(--card-foreground);\n  --color-border: var(--border);\n  --color-input: var(--input);\n  --color-primary: var(--primary);\n  --color-primary-foreground: var(--primary-foreground);\n  --color-secondary: var(--secondary);\n  --color-secondary-foreground: var(--secondary-foreground);\n  --color-accent: var(--accent);\n  --color-accent-foreground: var(--accent-foreground);\n  --color-destructive: var(--destructive);\n  --color-destructive-foreground: var(--destructive-foreground);\n  --color-ring: var(--ring);\n  --color-radius: var(--radius);\n  --color-sidebar: var(--sidebar);\n  --color-sidebar-foreground: var(--sidebar-foreground);\n  --color-sidebar-primary: var(--sidebar-primary);\n  --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);\n  --color-sidebar-accent: var(--sidebar-accent);\n  --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);\n  --color-sidebar-border: var(--sidebar-border);\n  --color-sidebar-ring: var(--sidebar-ring);\n}\n\n@layer base {\n  * {\n    @apply border-border;\n  }\n\n  body {\n    @apply bg-background text-foreground;\n  }\n}\n```\n\n#### Verify the update\n\nRestart your dev server and verify that all your styles are working as expected.\n\n<PMRun command=\"dev\" />\n\n#### Remove the `tailwind.config` file\n\nOnce you've verified that your styles are working as expected, you can remove the `tailwind.config.ts` file.\n\n### 3. Use new `size-*` utility\n\nThe new `size-*` utility (added in Tailwind v3.4), is now fully supported by `tailwind-merge`. You can replace `w-* h-*` with the new `size-*` utility:\n\n```diff\n- w-4 h-4\n+ size-4\n```\n\n### 4. Update your dependencies\n\n<PMInstall command=\"bits-ui@latest @lucide/svelte@latest tailwind-variants@latest tailwind-merge@latest clsx@latest svelte-sonner@latest paneforge@next vaul-svelte@next formsnap@latest\" />\n\n### 5. Update your utils (optional)\n\nIf you're planning on adding additional components in the future or plan to update your existing components to the latest versions, you'll need to update your `utils.ts` file.\n\nPreviously, we were depending on `bits-ui` for some simple type helpers that required you to have `bits-ui` installed, regardless if you were using components that depend on it.\n\nThese helpers have been moved into the `utils.ts` file:\n\n```diff title=\"utils.ts\"\n import { clsx, type ClassValue } from \"clsx\";\n import { twMerge } from \"tailwind-merge\";\n\n export function cn(...inputs: ClassValue[]) {\n\t return twMerge(clsx(inputs));\n }\n\n+ // eslint-disable-next-line @typescript-eslint/no-explicit-any\n+ export type WithoutChild<T> = T extends { child?: any } ? Omit<T, \"child\"> : T;\n+ // eslint-disable-next-line @typescript-eslint/no-explicit-any\n+ export type WithoutChildren<T> = T extends { children?: any } ? Omit<T, \"children\"> : T;\n+ export type WithoutChildrenOrChild<T> = WithoutChildren<WithoutChild<T>>;\n+ export type WithElementRef<T, U extends HTMLElement = HTMLElement> = T & { ref?: U | null };\n```\n\nAnd then you can incrementally replace these imports in your existing components:\n\n```diff title=\"card.svelte\"\n<script lang=\"ts\">\n-\timport type { WithElementRef } from \"bits-ui\";\n+\timport type { WithElementRef } from \"$lib/utils.js\";\n</script>\n```\n\n### 6. Update Your Colors (optional)\n\nThe dark mode colors have been revisited and updated to be more accessible, as you can see in these docs as well as the [v4.shadcn-svelte.com](https://v4.shadcn-svelte.com) demo site.\n\nYou can update your components to use the new dark mode colors by re-adding your components using the CLI[^1].\n\n<Steps>\n\n<Step>Commit any changes</Step>\n\n**The CLI will overwrite your existing components.** It's recommended to commit the changes you've made to your components before running the CLI.\n\n```bash\ngit add .\ngit commit -m '...\"\n```\n\n<Step>Update components</Step>\n\n<PMExecute command=\"shadcn-svelte@latest add --all --overwrite\" />\n\n<Step> Update colors</Step>\n\nUpdate the dark mode colors in your `app.css` file to the new OKLCH values. See the [Base Colors](/docs/theming#base-colors) reference for a list of colors.\n\n<Step>Review Changes</Step>\n\nReview and re-apply any changes you've made to your components using the git diffs.\n\n</Steps>\n\n[^1]: Updating your components will overwrite your existing components.\n"
  },
  {
    "path": "docs/content/registry/examples.md",
    "content": "---\ntitle: Examples\ndescription: \"Examples of registry items: styles, components, css vars, etc.\"\n---\n\n## registry:style\n\n### Custom style that extends shadcn-svelte\n\nThe following registry item is a custom style that extends shadcn/ui. On `npx shadcn-svelte@latest init`, it will:\n\n- Install `phosphor-svelte` icons as a dependency.\n- Add the `login-01` block and `calendar` component to the project.\n- Add the `editor` from a remote registry.\n- Set the `font-sans` variable to `Inter, sans-serif`.\n- Install a `brand` color in light and dark mode.\n\n```json title=\"example-style.json\" showLineNumbers\n{\n  \"$schema\": \"https://shadcn-svelte.com/schema/registry-item.json\",\n  \"name\": \"example-style\",\n  \"type\": \"registry:style\",\n  \"dependencies\": [\"phosphor-svelte\"],\n  \"registryDependencies\": [\n    \"login-01\",\n    \"calendar\",\n    \"https://example.com/r/editor.json\"\n  ],\n  \"cssVars\": {\n    \"theme\": {\n      \"font-sans\": \"Inter, sans-serif\"\n    },\n    \"light\": {\n      \"brand\": \"oklch(0.145 0 0)\"\n    },\n    \"dark\": {\n      \"brand\": \"oklch(0.145 0 0)\"\n    }\n  }\n}\n```\n\n### Custom style from scratch\n\nThe following registry item is a custom style that _doesn't_ extend shadcn-svelte. See the `extends: none` field.\n\nIt can be used to create a new style from scratch i.e. custom components, css vars, dependencies, etc.\n\nOn `npx shadcn-svelte@latest add`, the following will:\n\n- Install `tailwind-merge` and `clsx` as dependencies.\n- Add the `utils` registry item from the shadcn-svelte registry.\n- Add the `button`, `input`, `label`, and `select` components from a remote registry.\n- Install new css vars: `main`, `bg`, `border`, `text`, `ring`.\n\n```json title=\"example-style.json\" showLineNumbers\n{\n  \"$schema\": \"https://shadcn-svelte.com/schema/registry-item.json\",\n  \"extends\": \"none\",\n  \"name\": \"new-style\",\n  \"type\": \"registry:style\",\n  \"dependencies\": [\"tailwind-merge\", \"clsx\"],\n  \"registryDependencies\": [\n    \"utils\",\n    \"https://example.com/r/button.json\",\n    \"https://example.com/r/input.json\",\n    \"https://example.com/r/label.json\",\n    \"https://example.com/r/select.json\"\n  ],\n  \"cssVars\": {\n    \"theme\": {\n      \"font-sans\": \"Inter, sans-serif\",\n    }\n    \"light\": {\n      \"main\": \"#88aaee\",\n      \"bg\": \"#dfe5f2\",\n      \"border\": \"#000\",\n      \"text\": \"#000\",\n      \"ring\": \"#000\",\n    },\n    \"dark\": {\n      \"main\": \"#88aaee\",\n      \"bg\": \"#272933\",\n      \"border\": \"#000\",\n      \"text\": \"#e6e6e6\",\n      \"ring\": \"#fff\",\n    }\n  }\n}\n```\n\n## registry:theme\n\n### Custom theme\n\n```json title=\"example-theme.json\" showLineNumbers\n{\n  \"$schema\": \"https://shadcn-svelte.com/schema/registry-item.json\",\n  \"name\": \"custom-theme\",\n  \"type\": \"registry:theme\",\n  \"cssVars\": {\n    \"light\": {\n      \"background\": \"oklch(1 0 0)\",\n      \"foreground\": \"oklch(0.141 0.005 285.823)\",\n      \"primary\": \"oklch(0.546 0.245 262.881)\",\n      \"primary-foreground\": \"oklch(0.97 0.014 254.604)\",\n      \"ring\": \"oklch(0.746 0.16 232.661)\",\n      \"sidebar-primary\": \"oklch(0.546 0.245 262.881)\",\n      \"sidebar-primary-foreground\": \"oklch(0.97 0.014 254.604)\",\n      \"sidebar-ring\": \"oklch(0.746 0.16 232.661)\"\n    },\n    \"dark\": {\n      \"background\": \"oklch(1 0 0)\",\n      \"foreground\": \"oklch(0.141 0.005 285.823)\",\n      \"primary\": \"oklch(0.707 0.165 254.624)\",\n      \"primary-foreground\": \"oklch(0.97 0.014 254.604)\",\n      \"ring\": \"oklch(0.707 0.165 254.624)\",\n      \"sidebar-primary\": \"oklch(0.707 0.165 254.624)\",\n      \"sidebar-primary-foreground\": \"oklch(0.97 0.014 254.604)\",\n      \"sidebar-ring\": \"oklch(0.707 0.165 254.624)\"\n    }\n  }\n}\n```\n\n### Custom colors\n\nThe following style will init using shadcn-svelte defaults and then add a custom `brand` color.\n\n```json title=\"example-style.json\" showLineNumbers\n{\n  \"$schema\": \"https://shadcn-svelte.com/schema/registry-item.json\",\n  \"name\": \"custom-style\",\n  \"type\": \"registry:style\",\n  \"cssVars\": {\n    \"light\": {\n      \"brand\": \"oklch(0.99 0.00 0)\"\n    },\n    \"dark\": {\n      \"brand\": \"oklch(0.14 0.00 286)\"\n    }\n  }\n}\n```\n\n## registry:block\n\n### Custom block\n\nThis blocks installs the `login-01` block from the shadcn-svelte registry.\n\n```json title=\"login-01.json\" showLineNumbers\n{\n  \"$schema\": \"https://shadcn-svelte.com/schema/registry-item.json\",\n  \"name\": \"login-01\",\n  \"type\": \"registry:block\",\n  \"description\": \"A simple login form.\",\n  \"registryDependencies\": [\"button\", \"card\", \"input\", \"label\"],\n  \"files\": [\n    {\n      \"path\": \"blocks/login-01/page.svelte\",\n      \"content\": \"import { LoginForm } ...\",\n      \"type\": \"registry:page\",\n      \"target\": \"src/routes/login/+page.svelte\"\n    },\n    {\n      \"path\": \"blocks/login-01/components/login-form.svelte\",\n      \"content\": \"...\",\n      \"type\": \"registry:component\"\n    }\n  ]\n}\n```\n\n### Install a block and override primitives\n\nYou can install a block from the shadcn-svelte registry and override the primitives using your custom ones.\n\nOn `npx shadcn-svelte@latest add`, the following will:\n\n- Add the `login-01` block from the shadcn-svelte registry.\n- Override the `button`, `input`, and `label` primitives with the ones from the remote registry.\n\n```json title=\"example-style.json\" showLineNumbers\n{\n  \"$schema\": \"https://shadcn-svelte.com/schema/registry-item.json\",\n  \"name\": \"custom-login\",\n  \"type\": \"registry:block\",\n  \"registryDependencies\": [\n    \"login-01\",\n    \"https://example.com/r/button.json\",\n    \"https://example.com/r/input.json\",\n    \"https://example.com/r/label.json\"\n  ]\n}\n```\n\n## CSS Variables\n\n### Custom Theme Variables\n\nAdd custom theme variables to the `theme` object.\n\n```json title=\"example-theme.json\" showLineNumbers\n{\n  \"$schema\": \"https://shadcn-svelte.com/schema/registry-item.json\",\n  \"name\": \"custom-theme\",\n  \"type\": \"registry:theme\",\n  \"cssVars\": {\n    \"theme\": {\n      \"font-heading\": \"Inter, sans-serif\",\n      \"shadow-card\": \"0 0 0 1px rgba(0, 0, 0, 0.1)\"\n    }\n  }\n}\n```\n\n### Override Tailwind CSS variables\n\n```json title=\"example-theme.json\" showLineNumbers\n{\n  \"$schema\": \"https://shadcn-svelte.com/schema/registry-item.json\",\n  \"name\": \"custom-theme\",\n  \"type\": \"registry:theme\",\n  \"cssVars\": {\n    \"theme\": {\n      \"spacing\": \"0.2rem\",\n      \"breakpoint-sm\": \"640px\",\n      \"breakpoint-md\": \"768px\",\n      \"breakpoint-lg\": \"1024px\",\n      \"breakpoint-xl\": \"1280px\",\n      \"breakpoint-2xl\": \"1536px\"\n    }\n  }\n}\n```\n\n## Add custom CSS\n\n### Base styles\n\n```json title=\"example-base.json\" showLineNumbers\n{\n  \"$schema\": \"https://shadcn-svelte.com/schema/registry-item.json\",\n  \"name\": \"custom-style\",\n  \"type\": \"registry:style\",\n  \"css\": {\n    \"@layer base\": {\n      \"h1\": {\n        \"font-size\": \"var(--text-2xl)\"\n      },\n      \"h2\": {\n        \"font-size\": \"var(--text-xl)\"\n      }\n    }\n  }\n}\n```\n\n### Components\n\n```json title=\"example-card.json\" showLineNumbers\n{\n  \"$schema\": \"https://shadcn-svelte.com/schema/registry-item.json\",\n  \"name\": \"custom-card\",\n  \"type\": \"registry:component\",\n  \"css\": {\n    \"@layer components\": {\n      \"card\": {\n        \"background-color\": \"var(--color-white)\",\n        \"border-radius\": \"var(--rounded-lg)\",\n        \"padding\": \"var(--spacing-6)\",\n        \"box-shadow\": \"var(--shadow-xl)\"\n      }\n    }\n  }\n}\n```\n\n## Add custom utilities\n\n### Simple utility\n\n```json title=\"example-component.json\" showLineNumbers\n{\n  \"$schema\": \"https://shadcn-svelte.com/schema/registry-item.json\",\n  \"name\": \"custom-component\",\n  \"type\": \"registry:component\",\n  \"css\": {\n    \"@utility content-auto\": {\n      \"content-visibility\": \"auto\"\n    }\n  }\n}\n```\n\n### Complex utility\n\n```json title=\"example-utility.json\" showLineNumbers\n{\n  \"$schema\": \"https://shadcn-svelte.com/schema/registry-item.json\",\n  \"name\": \"custom-component\",\n  \"type\": \"registry:component\",\n  \"css\": {\n    \"@utility scrollbar-hidden\": {\n      \"scrollbar-hidden\": {\n        \"&::-webkit-scrollbar\": {\n          \"display\": \"none\"\n        }\n      }\n    }\n  }\n}\n```\n\n### Functional utilities\n\n```json title=\"example-functional.json\" showLineNumbers\n{\n  \"$schema\": \"https://shadcn-svelte.com/schema/registry-item.json\",\n  \"name\": \"custom-component\",\n  \"type\": \"registry:component\",\n  \"css\": {\n    \"@utility tab-*\": {\n      \"tab-size\": \"var(--tab-size-*)\"\n    }\n  }\n}\n```\n\n## Add custom animations\n\nNote: you need to define both `@keyframes` in css and `theme` in cssVars to use animations.\n\n```json title=\"example-component.json\" showLineNumbers\n{\n  \"$schema\": \"https://shadcn-svelte.com/schema/registry-item.json\",\n  \"name\": \"custom-component\",\n  \"type\": \"registry:component\",\n  \"cssVars\": {\n    \"theme\": {\n      \"--animate-wiggle\": \"wiggle 1s ease-in-out infinite\"\n    }\n  },\n  \"css\": {\n    \"@keyframes wiggle\": {\n      \"0%, 100%\": {\n        \"transform\": \"rotate(-3deg)\"\n      },\n      \"50%\": {\n        \"transform\": \"rotate(3deg)\"\n      }\n    }\n  }\n}\n```\n"
  },
  {
    "path": "docs/content/registry/faq.md",
    "content": "---\ntitle: FAQ\ndescription: Frequently asked questions about running a registry.\n---\n\n## Frequently asked questions\n\n### What does a complex component look like?\n\nHere's an example of a complex component that installs a page, two components, a hook, a format-date utils and a config file.\n\n```json showLineNumbers\n{\n  \"$schema\": \"https://shadcn-svelte.com/schema/registry-item.json\",\n  \"name\": \"hello-world\",\n  \"title\": \"Hello World\",\n  \"type\": \"registry:block\",\n  \"description\": \"A complex hello world component\",\n  \"files\": [\n    {\n      \"path\": \"registry/hello-world/page.svelte\",\n      \"type\": \"registry:page\",\n      \"target\": \"src/routes/hello/+page.svelte\"\n    },\n    {\n      \"path\": \"registry/hello-world/components/hello-world.svelte\",\n      \"type\": \"registry:component\"\n    },\n    {\n      \"path\": \"registry/hello-world/components/formatted-message.svelte\",\n      \"type\": \"registry:component\"\n    },\n    {\n      \"path\": \"registry/hello-world/hooks/use-hello.svelte.ts\",\n      \"type\": \"registry:hook\"\n    },\n    {\n      \"path\": \"registry/hello-world/lib/format-date.ts\",\n      \"type\": \"registry:utils\"\n    },\n    {\n      \"path\": \"registry/hello-world/hello.config.ts\",\n      \"type\": \"registry:file\",\n      \"target\": \"hello.config.ts\"\n    }\n  ]\n}\n```\n\n### How do I add a new Tailwind color?\n\nTo add a new color you need to add it to `cssVars` under `light` and `dark` keys.\n\n```json showLineNumbers {10-18}\n{\n  \"$schema\": \"https://shadcn-svelte.com/schema/registry-item.json\",\n  \"name\": \"hello-world\",\n  \"title\": \"Hello World\",\n  \"type\": \"registry:block\",\n  \"description\": \"A complex hello world component\",\n  \"files\": [\n    // ...\n  ],\n  \"cssVars\": {\n    \"light\": {\n      \"brand-background\": \"20 14.3% 4.1%\",\n      \"brand-accent\": \"20 14.3% 4.1%\"\n    },\n    \"dark\": {\n      \"brand-background\": \"20 14.3% 4.1%\",\n      \"brand-accent\": \"20 14.3% 4.1%\"\n    }\n  }\n}\n```\n\nThe CLI will update the project CSS file. Once updated, the new colors will be available to be used as utility classes: `bg-brand` and `text-brand-accent`.\n\n### How do I add or override a Tailwind theme variable?\n\nTo add or override a theme variable you add it to `cssVars.theme` under the key you want to add or override.\n\n```json showLineNumbers {10-15}\n{\n  \"$schema\": \"https://shadcn-svelte.com/schema/registry-item.json\",\n  \"name\": \"hello-world\",\n  \"title\": \"Hello World\",\n  \"type\": \"registry:block\",\n  \"description\": \"A complex hello world component\",\n  \"files\": [\n    // ...\n  ],\n  \"cssVars\": {\n    \"theme\": {\n      \"text-base\": \"3rem\",\n      \"ease-in-out\": \"cubic-bezier(0.4, 0, 0.2, 1)\",\n      \"font-heading\": \"Poppins, sans-serif\"\n    }\n  }\n}\n```\n"
  },
  {
    "path": "docs/content/registry/getting-started.md",
    "content": "---\ntitle: Getting Started\ndescription: Learn how to get setup and run your own component registry.\n---\n\n<script>\n\timport Step from \"$lib/components/step.svelte\";\n\timport Steps from \"$lib/components/steps.svelte\";\n\timport PMInstall from \"$lib/components/pm-install.svelte\";\n\timport PMRun from \"$lib/components/pm-run.svelte\";\n\timport PMExecute from \"$lib/components/pm-execute.svelte\";\n\timport Callout from \"$lib/components/callout.svelte\";\n</script>\n\nThis guide will walk you through the process of setting up your own component registry.\n\nIt assumes you already have a project with components and would like to turn it into a registry.\n\nIf you're starting a new registry project, you can use the [registry template](https://github.com/huntabyte/shadcn-svelte/tree/main/registry-template) as a starting point. It's already configured for you.\n\n## registry.json\n\nThe `registry.json` file is only required if you're using the `shadcn-svelte` CLI to build your registry.\n\nIf you're using a different build system, you can skip this step as long as your build system produces valid JSON files that conform to the [registry-item schema specification](/docs/registry/registry-item-json).\n\n<Steps>\n\n### Add a registry.json file\n\nCreate a `registry.json` file in the root of your project.\n\n```json title=\"registry.json\" showLineNumbers\n{\n  \"$schema\": \"https://shadcn-svelte.com/schema/registry.json\",\n  \"name\": \"acme\",\n  \"homepage\": \"https://acme.com\",\n  \"items\": [\n    // ...\n  ]\n}\n```\n\nThis `registry.json` file must conform to the [registry schema specification](/docs/registry/registry-json).\n\n</Steps>\n\n## Add a registry item\n\n<Steps>\n\n### Create your component\n\nAdd your first component. Here's an example of a simple `<HelloWorld />` component:\n\n```svelte title=\"registry/hello-world/hello-world.svelte\" showLineNumbers\n<script lang=\"ts\">\n  import { Button } from \"$lib/components/ui/button/index.js\";\n</script>\n\n<Button>Hello World</Button>\n```\n\n<Callout class=\"mt-6\">\n\n**Note:** This example places the component in the `registry/`\ndirectory. You can place it anywhere in your project as long as you set the\ncorrect path in the `registry.json` file and you follow the `registry/[NAME]`\ndirectory structure.\n\n</Callout>\n\n```txt\nregistry\n└── hello-world\n    └── hello-world.svelte\n```\n\n<Callout class=\"mt-6 [&_[data-rehype-pretty-code-title]]:pt-1 [&_pre]:mb-0\">\n\n**Important:** If you're placing your component in a custom directory, make sure it can be detected by Tailwind CSS.\n\n```css showLineNumbers title=\"src/routes/layout.css\"\n@source \"./registry/@acmecorp/ui-lib\";\n```\n\n</Callout>\n\n### Add your component to the registry\n\nTo add your component to the registry, you need to add your component definition to `registry.json`.\n\n```json title=\"registry.json\" showLineNumbers {6-17}\n{\n  \"$schema\": \"https://shadcn-svelte.com/schema/registry.json\",\n  \"name\": \"acme\",\n  \"homepage\": \"https://acme.com\",\n  \"items\": [\n    {\n      \"name\": \"hello-world\",\n      \"type\": \"registry:block\",\n      \"title\": \"Hello World\",\n      \"description\": \"A simple hello world component.\",\n      \"files\": [\n        {\n          \"path\": \"./src/lib/hello-world/hello-world.svelte\",\n          \"type\": \"registry:component\"\n        }\n      ]\n    }\n  ]\n}\n```\n\nYou define your registry item by adding a `name`, `type`, `title`, `description` and `files`.\n\nFor every file you add, you must specify the `path` and `type` of the file. The `path` is the relative path to the file from the root of your project. The `type` is the type of the file.\n\nYou can read more about the registry item schema and file types in the [registry item schema docs](/docs/registry/registry-item-json).\n\n</Steps>\n\n## Build your registry\n\n<Steps>\n\n### Install the shadcn-svelte CLI\n\n<PMInstall command=\"shadcn-svelte@latest\" />\n\n### Add a build script\n\nAdd a `registry:build` script to your `package.json` file.\n\n```json title=\"package.json\" showLineNumbers\n{\n  \"scripts\": {\n    \"registry:build\": \"pnpm shadcn-svelte registry build\"\n  }\n}\n```\n\n### Run the build script\n\nRun the build script to generate the registry JSON files.\n\n<PMRun command=\"registry:build\" />\n\n<Callout class=\"mt-6\">\n\n**Note:** By default, the build script will generate the registry JSON files in `static/r` e.g `static/r/hello-world.json`.\n\nYou can change the output directory by passing the `--output` option. See the [shadcn-svelte registry build command](/docs/cli#registry-build) for more information.\n\n</Callout>\n\n</Steps>\n\n## Serve your registry\n\nYou can serve your registry by running the dev server.\n\n<PMRun command=\"dev\" />\n\nYour files will now be served at `http://localhost:5173/r/[NAME].json` eg. `http://localhost:5173/r/hello-world.json`.\n\n## Publish your registry\n\nTo make your registry available to other developers, you can publish it by deploying your project to a public URL.\n\n## Adding Auth\n\nThe `shadcn-svelte` CLI does not offer a built-in way to add auth to your registry. We recommend handling authorization on your registry server.\n\nA common simple approach is to use a `token` query parameter to authenticate requests to your registry. e.g. `http://localhost:5173/r/hello-world.json?token=[SECURE_TOKEN_HERE]`.\n\nUse the secure token to authenticate requests and return a 401 Unauthorized response if the token is invalid. The `shadcn-svelte` CLI will handle the 401 response and display a message to the user.\n\n<Callout class=\"mt-6\">\n\n**Note:** Make sure to encrypt and expire tokens.\n\n</Callout>\n\n## Guidelines\n\nHere are some guidelines to follow when building components for a registry.\n\n- The following properties are required for the block definition: `name`, `description`, `type` and `files`.\n- Make sure to list all registry dependencies in `registryDependencies`. A registry dependency is the name of the component in the registry eg. `input`, `button`, `card`, etc or a URL to a registry item eg. `http://localhost:5173/r/editor.json`\n- Ideally, place your files within a registry item in `components`, `hooks`, `lib` directories.\n\n## Install using the CLI\n\nTo install a registry item using the `shadcn-svelte` CLI, use the `add` command followed by the URL of the registry item.\n\n<PMExecute command=\"shadcn-svelte@latest add http://localhost:5173/r/hello-world.json\" />\n"
  },
  {
    "path": "docs/content/registry/index.md",
    "content": "---\ntitle: Registry\ndescription: Run your own component registry.\n---\n\n<script>\n\timport Callout from \"$lib/components/callout.svelte\";\n\timport PMExecute from \"$lib/components/pm-execute.svelte\";\n</script>\n\n<Callout>\n\n**Note:** This feature is currently experimental. Help us improve it by\ntesting it out and sending feedback. If you have any questions, please [reach\nout to us](https://github.com/huntabyte/shadcn-svelte/discussions).\n\n</Callout>\n\nYou can use the `shadcn-svelte` CLI to create your own component registry. Creating your own registry allows you to distribute your own custom components, hooks, pages, and other files to any Svelte project.\n\nRegistry items are automatically compatible with the `shadcn-svelte` CLI.\n\n## Requirements\n\nYou are free to design and host your custom registry as you see fit. The only requirement is that your registry items must be valid JSON files that conform to the [registry-item schema specification](/docs/registry/registry-item-json).\n\nIf you'd like to see an example of a registry, we have a [template project](https://github.com/huntabyte/shadcn-svelte/tree/main/registry-template) for you to use as a starting point.\n\nYou can clone it using `degit`\n\n<PMExecute command=\"degit huntabyte/shadcn-svelte/registry-template#next-tailwind-4\" />\n"
  },
  {
    "path": "docs/content/registry/registry-item-json.md",
    "content": "---\ntitle: registry-item.json\ndescription: Specification for registry items.\n---\n\nThe `registry-item.json` schema is used to define your custom registry items.\n\n```json title=\"registry-item.json\" showLineNumbers\n{\n  \"$schema\": \"https://shadcn-svelte.com/schema/registry-item.json\",\n  \"name\": \"hello-world\",\n  \"title\": \"Hello World\",\n  \"type\": \"registry:block\",\n  \"description\": \"A simple hello world component.\",\n  \"files\": [\n    {\n      \"path\": \"registry/hello-world/hello-world.svelte\",\n      \"type\": \"registry:component\"\n    },\n    {\n      \"path\": \"registry/hello-world/use-hello-world.svelte.ts\",\n      \"type\": \"registry:hook\"\n    }\n  ],\n  \"cssVars\": {\n    \"theme\": {\n      \"font-heading\": \"Poppins, sans-serif\"\n    },\n    \"light\": {\n      \"brand\": \"20 14.3% 4.1%\"\n    },\n    \"dark\": {\n      \"brand\": \"20 14.3% 4.1%\"\n    }\n  }\n}\n```\n\n<div class=\"flex gap-2 items-center mt-6\">\n\n[See more examples](/docs/registry/examples)\n\n</div>\n\n## Definitions\n\nYou can see the JSON Schema for `registry-item.json` [here](/schema/registry-item.json).\n\n### $schema\n\nThe `$schema` property is used to specify the schema for the `registry-item.json` file.\n\n```json title=\"registry-item.json\" showLineNumbers\n{\n  \"$schema\": \"https://shadcn-svelte.com/schema/registry-item.json\"\n}\n```\n\n### name\n\nThe name of the item. This is used to identify the item in the registry. It should be unique for your registry.\n\n```json title=\"registry-item.json\" showLineNumbers\n{\n  \"name\": \"hello-world\"\n}\n```\n\n### title\n\nA human-readable title for your registry item. Keep it short and descriptive.\n\n```json title=\"registry-item.json\" showLineNumbers\n{\n  \"title\": \"Hello World\"\n}\n```\n\n### description\n\nA description of your registry item. This can be longer and more detailed than the `title`.\n\n```json title=\"registry-item.json\" showLineNumbers\n{\n  \"description\": \"A simple hello world component.\"\n}\n```\n\n### type\n\nThe `type` property is used to specify the type of your registry item. This is used to determine the type and target path of the item when resolved for a project.\n\n```json title=\"registry-item.json\" showLineNumbers\n{\n  \"type\": \"registry:block\"\n}\n```\n\nThe following types are supported:\n\n| Type                 | Description                                      |\n| -------------------- | ------------------------------------------------ |\n| `registry:block`     | Use for complex components with multiple files.  |\n| `registry:component` | Use for simple components.                       |\n| `registry:lib`       | Use for lib and utils.                           |\n| `registry:hook`      | Use for hooks.                                   |\n| `registry:ui`        | Use for UI components and single-file primitives |\n| `registry:page`      | Use for page or file-based routes.               |\n| `registry:file`      | Use for miscellaneous files.                     |\n| `registry:style`     | Use for registry styles. eg. `new-york`          |\n| `registry:theme`     | Use for themes.                                  |\n\n### author\n\nThe `author` property is used to specify the author of the registry item.\n\nIt can be unique to the registry item or the same as the author of the registry.\n\n```json title=\"registry-item.json\" showLineNumbers\n{\n  \"author\": \"John Doe <john@doe.com>\"\n}\n```\n\n### dependencies\n\nThe `dependencies` property is used to specify the dependencies of your registry item. This is for `npm` packages.\n\nUse `@version` to specify the version of your registry item.\n\n```json title=\"registry-item.json\" showLineNumbers\n{\n  \"dependencies\": [\"bits-ui\", \"zod\", \"@lucide/svelte\", \"name@1.0.2\"]\n}\n```\n\n### registryDependencies\n\nDefines other registry items that this item depends on.\n\nEach entry may be one of the following:\n\n#### shadcn-svelte Registry Item\n\nThe name of a shadcn-svelte registry item (e.g., `'button'`, `'input'`, `'select'`), which will resolve to that item in the shadcn-svelte registry.\n\n```json title=\"registry-item.json\" showLineNumbers\n{\n  \"registryDependencies\": [\"button\", \"input\", \"select\"]\n}\n```\n\n#### Remote URL\n\nA full URL to a custom registry item (e.g. `https://example.com/r/hello-world.json`)\n\n```json title=\"registry-item.json\" showLineNumbers\n{\n  \"registryDependencies\": [\"https://example.com/r/hello-world.json\"]\n}\n```\n\n#### Local alias (when building with the CLI)\n\nIf you're defining the item in `registry.json` and using the CLI to build the registry, you can use a name prefixed with `local:` (e.g. `local:stepper`) to reference an item in the current registry. The CLI will convert this to a relative path (e.g. `./stepper.json`) in the output `registry-item.json` file.\n\n```json title=\"registry.json\" showLineNumbers\n{\n  \"items\": [\n    {\n      \"name\": \"hello-world\",\n      \"registryDependencies\": [\"local:stepper\"]\n    }\n  ]\n}\n```\n\nWhich the CLI will convert to the following in the output `registry-item.json` file:\n\n```json title=\"registry-item.json\" showLineNumbers\n{\n  \"registryDependencies\": [\"./stepper.json\"]\n}\n```\n\n#### Relative Path\n\nIf you're not using the CLI and defining the item directly in its `registry-item.json` file, you can specify a relative path, which is relative to the current item, to reference another item in the registry (e.g. `./stepper.json`).\n\n```json title=\"registry-item.json\" showLineNumbers\n{\n  \"registryDependencies\": [\"./stepper.json\"]\n}\n```\n\n### files\n\nThe `files` property is used to specify the files of your registry item. Each file has a `path`, `type` and `target` (optional) property.\n\n**The `target` property is required for `registry:page` and `registry:file` types.**\n\n```json title=\"registry-item.json\" showLineNumbers\n{\n  \"files\": [\n    {\n      \"path\": \"registry/hello-world/page.svelte\",\n      \"type\": \"registry:page\",\n      \"target\": \"src/routes/hello/+page.svelte\"\n    },\n    {\n      \"path\": \"registry/hello-world/hello-world.svelte\",\n      \"type\": \"registry:component\"\n    },\n    {\n      \"path\": \"registry/hello-world/use-hello-world.svelte.ts\",\n      \"type\": \"registry:hook\"\n    },\n    {\n      \"path\": \"registry/hello-world/.env\",\n      \"type\": \"registry:file\",\n      \"target\": \".env\"\n    }\n  ]\n}\n```\n\n#### path\n\nThe `path` property is used to specify the path to the file in your registry. This path is used by the build script to parse, transform and build the registry JSON payload.\n\n#### type\n\nThe `type` property is used to specify the type of the file. See the [type](#type) section for more information.\n\n#### target\n\nThe `target` property is used to indicate where the file should be placed in a project. This is optional and only required for `registry:page` and `registry:file` types.\n\nBy default, the `shadcn-svelte` cli will read a project's `components.json` file to determine the target path. For some files, such as routes or config you can specify the target path manually.\n\nUse `~` to refer to the root of the project e.g `~/foo.config.js`.\n\n### cssVars\n\nUse to define CSS variables for your registry item.\n\n```json title=\"registry-item.json\" showLineNumbers\n{\n  \"cssVars\": {\n    \"theme\": {\n      \"font-heading\": \"Poppins, sans-serif\"\n    },\n    \"light\": {\n      \"brand\": \"20 14.3% 4.1%\",\n      \"radius\": \"0.5rem\"\n    },\n    \"dark\": {\n      \"brand\": \"20 14.3% 4.1%\"\n    }\n  }\n}\n```\n\n### css\n\nUse `css` to add new rules to the project's CSS file eg. `@layer base`, `@layer components`, `@utility`, `@keyframes`, etc.\n\n```json title=\"registry-item.json\" showLineNumbers\n{\n  \"css\": {\n    \"@layer base\": {\n      \"body\": {\n        \"font-size\": \"var(--text-base)\",\n        \"line-height\": \"1.5\"\n      }\n    },\n    \"@layer components\": {\n      \"button\": {\n        \"background-color\": \"var(--color-primary)\",\n        \"color\": \"var(--color-white)\"\n      }\n    },\n    \"@utility text-magic\": {\n      \"font-size\": \"var(--text-base)\",\n      \"line-height\": \"1.5\"\n    },\n    \"@keyframes wiggle\": {\n      \"0%, 100%\": {\n        \"transform\": \"rotate(-3deg)\"\n      },\n      \"50%\": {\n        \"transform\": \"rotate(3deg)\"\n      }\n    }\n  }\n}\n```\n\n### docs\n\nUse `docs` to show custom documentation or message when installing your registry item via the CLI.\n\n```json title=\"registry-item.json\" showLineNumbers\n{\n  \"docs\": \"Remember to add the FOO_BAR environment variable to your .env file.\"\n}\n```\n\n### categories\n\nUse `categories` to organize your registry item.\n\n```json title=\"registry-item.json\" showLineNumbers\n{\n  \"categories\": [\"sidebar\", \"dashboard\"]\n}\n```\n\n### meta\n\nUse `meta` to add additional metadata to your registry item. You can add any key/value pair that you want to be available to the registry item.\n\n```json title=\"registry-item.json\" showLineNumbers\n{\n  \"meta\": { \"foo\": \"bar\" }\n}\n```\n"
  },
  {
    "path": "docs/content/registry/registry-json.md",
    "content": "---\ntitle: registry.json\ndescription: Schema for running your own component registry.\n---\n\n<script>\n\timport Callout from \"$lib/components/callout.svelte\";\n</script>\n\nThe `registry.json` schema is used to define your custom component registry.\n\n```json title=\"registry.json\" showLineNumbers\n{\n  \"$schema\": \"https://shadcn-svelte.com/schema/registry.json\",\n  \"name\": \"shadcn-svelte\",\n  \"homepage\": \"https://shadcn-svelte.com\",\n  \"items\": [\n    {\n      \"name\": \"hello-world\",\n      \"type\": \"registry:block\",\n      \"title\": \"Hello World\",\n      \"description\": \"A simple hello world component.\",\n      \"files\": [\n        {\n          \"path\": \"src/lib/registry/blocks/hello-world/hello-world.svelte\",\n          \"type\": \"registry:component\"\n        }\n      ]\n    }\n  ]\n}\n```\n\n## Definitions\n\nYou can see the JSON Schema for `registry.json` [here](/schema/registry.json).\n\n### $schema\n\nThe `$schema` property is used to specify the schema for the `registry.json` file.\n\n```json title=\"registry.json\" showLineNumbers\n{\n  \"$schema\": \"https://shadcn-svelte.com/schema/registry.json\"\n}\n```\n\n### name\n\nThe `name` property is used to specify the name of your registry. This is used for data attributes and other metadata.\n\n```json title=\"registry.json\" showLineNumbers\n{\n  \"name\": \"acme\"\n}\n```\n\n### homepage\n\nThe homepage of your registry. This is used for data attributes and other metadata.\n\n```json title=\"registry.json\" showLineNumbers\n{\n  \"homepage\": \"https://acme.com\"\n}\n```\n\n### items\n\nThe `items` in your registry. Each item must implement the [registry-item schema specification](/schema/registry-item.json).\n\n```json title=\"registry.json\" showLineNumbers\n{\n  \"items\": [\n    {\n      \"name\": \"hello-world\",\n      \"type\": \"registry:block\",\n      \"title\": \"Hello World\",\n      \"description\": \"A simple hello world component.\",\n      \"files\": [\n        {\n          \"path\": \"src/lib/registry/blocks/hello-world/hello-world.svelte\",\n          \"type\": \"registry:component\"\n        }\n      ]\n    }\n  ]\n}\n```\n\nSee the [registry-item schema documentation](/docs/registry/registry-item-json) for more information.\n\n### aliases\n\n`aliases` define how your registry's internal import paths will be transformed when users install your components. These should match how you import components within your registry code.\n\nFor example, if your registry's component has:\n\n```svelte\n<script lang=\"ts\">\n  import { Button } from \"@/lib/registry/ui/button/index.js\";\n  import { cn } from \"@/lib/utils.js\";\n</script>\n```\n\nThen your `registry.json` should have matching aliases:\n\n```json title=\"registry.json\" showLineNumbers\n{\n  \"aliases\": {\n    \"lib\": \"@/lib\", // Matches your internal imports\n    \"ui\": \"@/lib/registry/ui\", // Matches your internal imports\n    \"components\": \"@/lib/registry/components\", // Matches your internal imports\n    \"utils\": \"@/lib/utils\", // Matches your internal imports\n    \"hooks\": \"@/lib/hooks\" // Matches your internal imports\n  }\n}\n```\n\nWhen users install your component, these paths will be transformed according to their `components.json` configuration. The aliases you define here are the \"source\" paths that will be replaced.\n\nDefault aliases (if you don't specify any):\n\n```json title=\"registry.json\" showLineNumbers\n{\n  \"aliases\": {\n    \"lib\": \"$lib/registry/lib\", // For internal library code\n    \"ui\": \"$lib/registry/ui\", // For UI components\n    \"components\": \"$lib/registry/components\", // For component-specific code\n    \"utils\": \"$lib/utils\", // For utility functions\n    \"hooks\": \"$lib/registry/hooks\" // For reactive state and logic (.svelte.js|ts)\n  }\n}\n```\n\n### overrideDependencies\n\n`overrideDependencies` lets you force specific version ranges for dependencies, overriding what `shadcn-svelte registry build` detects in your `package.json`.\n\nCommon use cases:\n\n- Using latest pre-release versions: `\"overrideDependencies\": [\"paneforge@next\"]`\n- Pinning to specific versions: `\"overrideDependencies\": [\"dep@1.5.0\"]`\n\n<Callout class=\"bg-blue-50 mt-6 border-blue-600 dark:border-blue-900 dark:bg-blue-950 mb-6 [&_code]:bg-blue-100 dark:[&_code]:bg-blue-900 text-foreground\">\n\n**Warning**: Overriding dependencies can lead to version conflicts if not carefully managed. This option should be used sparingly.\n\n</Callout>\n\nExample transformation:\n\n```json\n// Your registry's package.json\n{\n  \"dependencies\": {\n    \"paneforge\": \"1.0.0-next.1\"\n  }\n}\n```\n\nWhen the user installs your component, the latest `@next` version will be used instead of `1.0.0-next.1`\n\n```json\n{\n  \"dependencies\": {\n    \"paneforge\": \"1.0.0-next.1\", // overrideDependencies: []\n    \"paneforge\": \"1.0.0-next.5\" // overrideDependencies: [\"paneforge@next\"]\n  }\n}\n```\n"
  },
  {
    "path": "docs/content/theming.md",
    "content": "---\ntitle: Theming\ndescription: Use CSS Variables to customize the look and feel of your application.\n---\n\n<script>\n\timport Callout from \"$lib/components/callout.svelte\";\n\timport Steps from \"$lib/components/steps.svelte\";\n\timport CodeCollapsibleWrapper from \"$lib/components/code-collapsible-wrapper.svelte\";\n</script>\n\nWe use CSS variables for styling. This allows you to easily change the colors of components without having to update class names.\n\n## Convention\n\nWe use a simple `background` and `foreground` convention for colors. The `background` variable is used for the background color of the component and the `foreground` variable is used for the text color.\n\n<Callout class=\"mt-4\">\n\nThe `background` suffix is omitted when the variable is used for the background color of the component.\n\n</Callout>\n\nGiven the following CSS variables:\n\n```css\n--primary: oklch(0.205 0 0);\n--primary-foreground: oklch(0.985 0 0);\n```\n\nThe `background` color of the following component will be `var(--primary)` and the `foreground` color will be `var(--primary-foreground)`.\n\n```svelte\n<div class=\"bg-primary text-primary-foreground\">Hello</div>\n```\n\n## List of variables\n\nHere's the list of variables available for customization:\n\n```css title=\"src/routes/layout.css\" showLineNumbers\n:root {\n  --radius: 0.625rem;\n  --background: oklch(1 0 0);\n  --foreground: oklch(0.145 0 0);\n  --card: oklch(1 0 0);\n  --card-foreground: oklch(0.145 0 0);\n  --popover: oklch(1 0 0);\n  --popover-foreground: oklch(0.145 0 0);\n  --primary: oklch(0.205 0 0);\n  --primary-foreground: oklch(0.985 0 0);\n  --secondary: oklch(0.97 0 0);\n  --secondary-foreground: oklch(0.205 0 0);\n  --muted: oklch(0.97 0 0);\n  --muted-foreground: oklch(0.556 0 0);\n  --accent: oklch(0.97 0 0);\n  --accent-foreground: oklch(0.205 0 0);\n  --destructive: oklch(0.577 0.245 27.325);\n  --border: oklch(0.922 0 0);\n  --input: oklch(0.922 0 0);\n  --ring: oklch(0.708 0 0);\n  --chart-1: oklch(0.646 0.222 41.116);\n  --chart-2: oklch(0.6 0.118 184.704);\n  --chart-3: oklch(0.398 0.07 227.392);\n  --chart-4: oklch(0.828 0.189 84.429);\n  --chart-5: oklch(0.769 0.188 70.08);\n  --sidebar: oklch(0.985 0 0);\n  --sidebar-foreground: oklch(0.145 0 0);\n  --sidebar-primary: oklch(0.205 0 0);\n  --sidebar-primary-foreground: oklch(0.985 0 0);\n  --sidebar-accent: oklch(0.97 0 0);\n  --sidebar-accent-foreground: oklch(0.205 0 0);\n  --sidebar-border: oklch(0.922 0 0);\n  --sidebar-ring: oklch(0.708 0 0);\n}\n\n.dark {\n  --background: oklch(0.145 0 0);\n  --foreground: oklch(0.985 0 0);\n  --card: oklch(0.205 0 0);\n  --card-foreground: oklch(0.985 0 0);\n  --popover: oklch(0.269 0 0);\n  --popover-foreground: oklch(0.985 0 0);\n  --primary: oklch(0.922 0 0);\n  --primary-foreground: oklch(0.205 0 0);\n  --secondary: oklch(0.269 0 0);\n  --secondary-foreground: oklch(0.985 0 0);\n  --muted: oklch(0.269 0 0);\n  --muted-foreground: oklch(0.708 0 0);\n  --accent: oklch(0.371 0 0);\n  --accent-foreground: oklch(0.985 0 0);\n  --destructive: oklch(0.704 0.191 22.216);\n  --border: oklch(1 0 0 / 10%);\n  --input: oklch(1 0 0 / 15%);\n  --ring: oklch(0.556 0 0);\n  --chart-1: oklch(0.488 0.243 264.376);\n  --chart-2: oklch(0.696 0.17 162.48);\n  --chart-3: oklch(0.769 0.188 70.08);\n  --chart-4: oklch(0.627 0.265 303.9);\n  --chart-5: oklch(0.645 0.246 16.439);\n  --sidebar: oklch(0.205 0 0);\n  --sidebar-foreground: oklch(0.985 0 0);\n  --sidebar-primary: oklch(0.488 0.243 264.376);\n  --sidebar-primary-foreground: oklch(0.985 0 0);\n  --sidebar-accent: oklch(0.269 0 0);\n  --sidebar-accent-foreground: oklch(0.985 0 0);\n  --sidebar-border: oklch(1 0 0 / 10%);\n  --sidebar-ring: oklch(0.439 0 0);\n}\n```\n\n## Adding new colors\n\nTo add new colors, you need to add them to your CSS file.\n\n```css title=\"src/routes/layout.css\" showLineNumbers\n:root {\n  --warning: oklch(0.84 0.16 84);\n  --warning-foreground: oklch(0.28 0.07 46);\n}\n\n.dark {\n  --warning: oklch(0.41 0.11 46);\n  --warning-foreground: oklch(0.99 0.02 95);\n}\n\n@theme inline {\n  --color-warning: var(--warning);\n  --color-warning-foreground: var(--warning-foreground);\n}\n```\n\nYou can now use the `warning` utility class in your components.\n\n```svelte /bg-warning/ /text-warning-foreground/\n<div class=\"bg-warning text-warning-foreground\"></div>\n```\n\n## Other color formats\n\nSee the [Tailwind CSS documentation](https://tailwindcss.com/docs/colors) for more information on using colors in Tailwind CSS.\n\n## Base Colors\n\nFor reference, here's a list of the base colors that are available.\n\n### Neutral\n\n<CodeCollapsibleWrapper>\n\n```css title=\"src/routes/layout.css\" showLineNumbers\n:root {\n  --radius: 0.625rem;\n  --background: oklch(1 0 0);\n  --foreground: oklch(0.145 0 0);\n  --card: oklch(1 0 0);\n  --card-foreground: oklch(0.145 0 0);\n  --popover: oklch(1 0 0);\n  --popover-foreground: oklch(0.145 0 0);\n  --primary: oklch(0.205 0 0);\n  --primary-foreground: oklch(0.985 0 0);\n  --secondary: oklch(0.97 0 0);\n  --secondary-foreground: oklch(0.205 0 0);\n  --muted: oklch(0.97 0 0);\n  --muted-foreground: oklch(0.556 0 0);\n  --accent: oklch(0.97 0 0);\n  --accent-foreground: oklch(0.205 0 0);\n  --destructive: oklch(0.577 0.245 27.325);\n  --border: oklch(0.922 0 0);\n  --input: oklch(0.922 0 0);\n  --ring: oklch(0.708 0 0);\n  --chart-1: oklch(0.646 0.222 41.116);\n  --chart-2: oklch(0.6 0.118 184.704);\n  --chart-3: oklch(0.398 0.07 227.392);\n  --chart-4: oklch(0.828 0.189 84.429);\n  --chart-5: oklch(0.769 0.188 70.08);\n  --sidebar: oklch(0.985 0 0);\n  --sidebar-foreground: oklch(0.145 0 0);\n  --sidebar-primary: oklch(0.205 0 0);\n  --sidebar-primary-foreground: oklch(0.985 0 0);\n  --sidebar-accent: oklch(0.97 0 0);\n  --sidebar-accent-foreground: oklch(0.205 0 0);\n  --sidebar-border: oklch(0.922 0 0);\n  --sidebar-ring: oklch(0.708 0 0);\n}\n\n.dark {\n  --background: oklch(0.145 0 0);\n  --foreground: oklch(0.985 0 0);\n  --card: oklch(0.205 0 0);\n  --card-foreground: oklch(0.985 0 0);\n  --popover: oklch(0.205 0 0);\n  --popover-foreground: oklch(0.985 0 0);\n  --primary: oklch(0.922 0 0);\n  --primary-foreground: oklch(0.205 0 0);\n  --secondary: oklch(0.269 0 0);\n  --secondary-foreground: oklch(0.985 0 0);\n  --muted: oklch(0.269 0 0);\n  --muted-foreground: oklch(0.708 0 0);\n  --accent: oklch(0.269 0 0);\n  --accent-foreground: oklch(0.985 0 0);\n  --destructive: oklch(0.704 0.191 22.216);\n  --border: oklch(1 0 0 / 10%);\n  --input: oklch(1 0 0 / 15%);\n  --ring: oklch(0.556 0 0);\n  --chart-1: oklch(0.488 0.243 264.376);\n  --chart-2: oklch(0.696 0.17 162.48);\n  --chart-3: oklch(0.769 0.188 70.08);\n  --chart-4: oklch(0.627 0.265 303.9);\n  --chart-5: oklch(0.645 0.246 16.439);\n  --sidebar: oklch(0.205 0 0);\n  --sidebar-foreground: oklch(0.985 0 0);\n  --sidebar-primary: oklch(0.488 0.243 264.376);\n  --sidebar-primary-foreground: oklch(0.985 0 0);\n  --sidebar-accent: oklch(0.269 0 0);\n  --sidebar-accent-foreground: oklch(0.985 0 0);\n  --sidebar-border: oklch(1 0 0 / 10%);\n  --sidebar-ring: oklch(0.556 0 0);\n}\n```\n\n</CodeCollapsibleWrapper>\n\n### Stone\n\n<CodeCollapsibleWrapper>\n\n```css title=\"src/routes/layout.css\" showLineNumbers\n:root {\n  --radius: 0.625rem;\n  --background: oklch(1 0 0);\n  --foreground: oklch(0.147 0.004 49.25);\n  --card: oklch(1 0 0);\n  --card-foreground: oklch(0.147 0.004 49.25);\n  --popover: oklch(1 0 0);\n  --popover-foreground: oklch(0.147 0.004 49.25);\n  --primary: oklch(0.216 0.006 56.043);\n  --primary-foreground: oklch(0.985 0.001 106.423);\n  --secondary: oklch(0.97 0.001 106.424);\n  --secondary-foreground: oklch(0.216 0.006 56.043);\n  --muted: oklch(0.97 0.001 106.424);\n  --muted-foreground: oklch(0.553 0.013 58.071);\n  --accent: oklch(0.97 0.001 106.424);\n  --accent-foreground: oklch(0.216 0.006 56.043);\n  --destructive: oklch(0.577 0.245 27.325);\n  --border: oklch(0.923 0.003 48.717);\n  --input: oklch(0.923 0.003 48.717);\n  --ring: oklch(0.709 0.01 56.259);\n  --chart-1: oklch(0.646 0.222 41.116);\n  --chart-2: oklch(0.6 0.118 184.704);\n  --chart-3: oklch(0.398 0.07 227.392);\n  --chart-4: oklch(0.828 0.189 84.429);\n  --chart-5: oklch(0.769 0.188 70.08);\n  --sidebar: oklch(0.985 0.001 106.423);\n  --sidebar-foreground: oklch(0.147 0.004 49.25);\n  --sidebar-primary: oklch(0.216 0.006 56.043);\n  --sidebar-primary-foreground: oklch(0.985 0.001 106.423);\n  --sidebar-accent: oklch(0.97 0.001 106.424);\n  --sidebar-accent-foreground: oklch(0.216 0.006 56.043);\n  --sidebar-border: oklch(0.923 0.003 48.717);\n  --sidebar-ring: oklch(0.709 0.01 56.259);\n}\n\n.dark {\n  --background: oklch(0.147 0.004 49.25);\n  --foreground: oklch(0.985 0.001 106.423);\n  --card: oklch(0.216 0.006 56.043);\n  --card-foreground: oklch(0.985 0.001 106.423);\n  --popover: oklch(0.216 0.006 56.043);\n  --popover-foreground: oklch(0.985 0.001 106.423);\n  --primary: oklch(0.923 0.003 48.717);\n  --primary-foreground: oklch(0.216 0.006 56.043);\n  --secondary: oklch(0.268 0.007 34.298);\n  --secondary-foreground: oklch(0.985 0.001 106.423);\n  --muted: oklch(0.268 0.007 34.298);\n  --muted-foreground: oklch(0.709 0.01 56.259);\n  --accent: oklch(0.268 0.007 34.298);\n  --accent-foreground: oklch(0.985 0.001 106.423);\n  --destructive: oklch(0.704 0.191 22.216);\n  --border: oklch(1 0 0 / 10%);\n  --input: oklch(1 0 0 / 15%);\n  --ring: oklch(0.553 0.013 58.071);\n  --chart-1: oklch(0.488 0.243 264.376);\n  --chart-2: oklch(0.696 0.17 162.48);\n  --chart-3: oklch(0.769 0.188 70.08);\n  --chart-4: oklch(0.627 0.265 303.9);\n  --chart-5: oklch(0.645 0.246 16.439);\n  --sidebar: oklch(0.216 0.006 56.043);\n  --sidebar-foreground: oklch(0.985 0.001 106.423);\n  --sidebar-primary: oklch(0.488 0.243 264.376);\n  --sidebar-primary-foreground: oklch(0.985 0.001 106.423);\n  --sidebar-accent: oklch(0.268 0.007 34.298);\n  --sidebar-accent-foreground: oklch(0.985 0.001 106.423);\n  --sidebar-border: oklch(1 0 0 / 10%);\n  --sidebar-ring: oklch(0.553 0.013 58.071);\n}\n```\n\n</CodeCollapsibleWrapper>\n\n### Zinc\n\n<CodeCollapsibleWrapper>\n\n```css title=\"src/routes/layout.css\" showLineNumbers\n:root {\n  --radius: 0.625rem;\n  --background: oklch(1 0 0);\n  --foreground: oklch(0.141 0.005 285.823);\n  --card: oklch(1 0 0);\n  --card-foreground: oklch(0.141 0.005 285.823);\n  --popover: oklch(1 0 0);\n  --popover-foreground: oklch(0.141 0.005 285.823);\n  --primary: oklch(0.21 0.006 285.885);\n  --primary-foreground: oklch(0.985 0 0);\n  --secondary: oklch(0.967 0.001 286.375);\n  --secondary-foreground: oklch(0.21 0.006 285.885);\n  --muted: oklch(0.967 0.001 286.375);\n  --muted-foreground: oklch(0.552 0.016 285.938);\n  --accent: oklch(0.967 0.001 286.375);\n  --accent-foreground: oklch(0.21 0.006 285.885);\n  --destructive: oklch(0.577 0.245 27.325);\n  --border: oklch(0.92 0.004 286.32);\n  --input: oklch(0.92 0.004 286.32);\n  --ring: oklch(0.705 0.015 286.067);\n  --chart-1: oklch(0.646 0.222 41.116);\n  --chart-2: oklch(0.6 0.118 184.704);\n  --chart-3: oklch(0.398 0.07 227.392);\n  --chart-4: oklch(0.828 0.189 84.429);\n  --chart-5: oklch(0.769 0.188 70.08);\n  --sidebar: oklch(0.985 0 0);\n  --sidebar-foreground: oklch(0.141 0.005 285.823);\n  --sidebar-primary: oklch(0.21 0.006 285.885);\n  --sidebar-primary-foreground: oklch(0.985 0 0);\n  --sidebar-accent: oklch(0.967 0.001 286.375);\n  --sidebar-accent-foreground: oklch(0.21 0.006 285.885);\n  --sidebar-border: oklch(0.92 0.004 286.32);\n  --sidebar-ring: oklch(0.705 0.015 286.067);\n}\n\n.dark {\n  --background: oklch(0.141 0.005 285.823);\n  --foreground: oklch(0.985 0 0);\n  --card: oklch(0.21 0.006 285.885);\n  --card-foreground: oklch(0.985 0 0);\n  --popover: oklch(0.21 0.006 285.885);\n  --popover-foreground: oklch(0.985 0 0);\n  --primary: oklch(0.92 0.004 286.32);\n  --primary-foreground: oklch(0.21 0.006 285.885);\n  --secondary: oklch(0.274 0.006 286.033);\n  --secondary-foreground: oklch(0.985 0 0);\n  --muted: oklch(0.274 0.006 286.033);\n  --muted-foreground: oklch(0.705 0.015 286.067);\n  --accent: oklch(0.274 0.006 286.033);\n  --accent-foreground: oklch(0.985 0 0);\n  --destructive: oklch(0.704 0.191 22.216);\n  --border: oklch(1 0 0 / 10%);\n  --input: oklch(1 0 0 / 15%);\n  --ring: oklch(0.552 0.016 285.938);\n  --chart-1: oklch(0.488 0.243 264.376);\n  --chart-2: oklch(0.696 0.17 162.48);\n  --chart-3: oklch(0.769 0.188 70.08);\n  --chart-4: oklch(0.627 0.265 303.9);\n  --chart-5: oklch(0.645 0.246 16.439);\n  --sidebar: oklch(0.21 0.006 285.885);\n  --sidebar-foreground: oklch(0.985 0 0);\n  --sidebar-primary: oklch(0.488 0.243 264.376);\n  --sidebar-primary-foreground: oklch(0.985 0 0);\n  --sidebar-accent: oklch(0.274 0.006 286.033);\n  --sidebar-accent-foreground: oklch(0.985 0 0);\n  --sidebar-border: oklch(1 0 0 / 10%);\n  --sidebar-ring: oklch(0.552 0.016 285.938);\n}\n```\n\n</CodeCollapsibleWrapper>\n\n### Gray\n\n<CodeCollapsibleWrapper>\n\n```css title=\"src/routes/layout.css\" showLineNumbers\n:root {\n  --radius: 0.625rem;\n  --background: oklch(1 0 0);\n  --foreground: oklch(0.13 0.028 261.692);\n  --card: oklch(1 0 0);\n  --card-foreground: oklch(0.13 0.028 261.692);\n  --popover: oklch(1 0 0);\n  --popover-foreground: oklch(0.13 0.028 261.692);\n  --primary: oklch(0.21 0.034 264.665);\n  --primary-foreground: oklch(0.985 0.002 247.839);\n  --secondary: oklch(0.967 0.003 264.542);\n  --secondary-foreground: oklch(0.21 0.034 264.665);\n  --muted: oklch(0.967 0.003 264.542);\n  --muted-foreground: oklch(0.551 0.027 264.364);\n  --accent: oklch(0.967 0.003 264.542);\n  --accent-foreground: oklch(0.21 0.034 264.665);\n  --destructive: oklch(0.577 0.245 27.325);\n  --border: oklch(0.928 0.006 264.531);\n  --input: oklch(0.928 0.006 264.531);\n  --ring: oklch(0.707 0.022 261.325);\n  --chart-1: oklch(0.646 0.222 41.116);\n  --chart-2: oklch(0.6 0.118 184.704);\n  --chart-3: oklch(0.398 0.07 227.392);\n  --chart-4: oklch(0.828 0.189 84.429);\n  --chart-5: oklch(0.769 0.188 70.08);\n  --sidebar: oklch(0.985 0.002 247.839);\n  --sidebar-foreground: oklch(0.13 0.028 261.692);\n  --sidebar-primary: oklch(0.21 0.034 264.665);\n  --sidebar-primary-foreground: oklch(0.985 0.002 247.839);\n  --sidebar-accent: oklch(0.967 0.003 264.542);\n  --sidebar-accent-foreground: oklch(0.21 0.034 264.665);\n  --sidebar-border: oklch(0.928 0.006 264.531);\n  --sidebar-ring: oklch(0.707 0.022 261.325);\n}\n\n.dark {\n  --background: oklch(0.13 0.028 261.692);\n  --foreground: oklch(0.985 0.002 247.839);\n  --card: oklch(0.21 0.034 264.665);\n  --card-foreground: oklch(0.985 0.002 247.839);\n  --popover: oklch(0.21 0.034 264.665);\n  --popover-foreground: oklch(0.985 0.002 247.839);\n  --primary: oklch(0.928 0.006 264.531);\n  --primary-foreground: oklch(0.21 0.034 264.665);\n  --secondary: oklch(0.278 0.033 256.848);\n  --secondary-foreground: oklch(0.985 0.002 247.839);\n  --muted: oklch(0.278 0.033 256.848);\n  --muted-foreground: oklch(0.707 0.022 261.325);\n  --accent: oklch(0.278 0.033 256.848);\n  --accent-foreground: oklch(0.985 0.002 247.839);\n  --destructive: oklch(0.704 0.191 22.216);\n  --border: oklch(1 0 0 / 10%);\n  --input: oklch(1 0 0 / 15%);\n  --ring: oklch(0.551 0.027 264.364);\n  --chart-1: oklch(0.488 0.243 264.376);\n  --chart-2: oklch(0.696 0.17 162.48);\n  --chart-3: oklch(0.769 0.188 70.08);\n  --chart-4: oklch(0.627 0.265 303.9);\n  --chart-5: oklch(0.645 0.246 16.439);\n  --sidebar: oklch(0.21 0.034 264.665);\n  --sidebar-foreground: oklch(0.985 0.002 247.839);\n  --sidebar-primary: oklch(0.488 0.243 264.376);\n  --sidebar-primary-foreground: oklch(0.985 0.002 247.839);\n  --sidebar-accent: oklch(0.278 0.033 256.848);\n  --sidebar-accent-foreground: oklch(0.985 0.002 247.839);\n  --sidebar-border: oklch(1 0 0 / 10%);\n  --sidebar-ring: oklch(0.551 0.027 264.364);\n}\n```\n\n</CodeCollapsibleWrapper>\n\n### Slate\n\n<CodeCollapsibleWrapper>\n\n```css title=\"src/routes/layout.css\" showLineNumbers\n:root {\n  --radius: 0.625rem;\n  --background: oklch(1 0 0);\n  --foreground: oklch(0.129 0.042 264.695);\n  --card: oklch(1 0 0);\n  --card-foreground: oklch(0.129 0.042 264.695);\n  --popover: oklch(1 0 0);\n  --popover-foreground: oklch(0.129 0.042 264.695);\n  --primary: oklch(0.208 0.042 265.755);\n  --primary-foreground: oklch(0.984 0.003 247.858);\n  --secondary: oklch(0.968 0.007 247.896);\n  --secondary-foreground: oklch(0.208 0.042 265.755);\n  --muted: oklch(0.968 0.007 247.896);\n  --muted-foreground: oklch(0.554 0.046 257.417);\n  --accent: oklch(0.968 0.007 247.896);\n  --accent-foreground: oklch(0.208 0.042 265.755);\n  --destructive: oklch(0.577 0.245 27.325);\n  --border: oklch(0.929 0.013 255.508);\n  --input: oklch(0.929 0.013 255.508);\n  --ring: oklch(0.704 0.04 256.788);\n  --chart-1: oklch(0.646 0.222 41.116);\n  --chart-2: oklch(0.6 0.118 184.704);\n  --chart-3: oklch(0.398 0.07 227.392);\n  --chart-4: oklch(0.828 0.189 84.429);\n  --chart-5: oklch(0.769 0.188 70.08);\n  --sidebar: oklch(0.984 0.003 247.858);\n  --sidebar-foreground: oklch(0.129 0.042 264.695);\n  --sidebar-primary: oklch(0.208 0.042 265.755);\n  --sidebar-primary-foreground: oklch(0.984 0.003 247.858);\n  --sidebar-accent: oklch(0.968 0.007 247.896);\n  --sidebar-accent-foreground: oklch(0.208 0.042 265.755);\n  --sidebar-border: oklch(0.929 0.013 255.508);\n  --sidebar-ring: oklch(0.704 0.04 256.788);\n}\n\n.dark {\n  --background: oklch(0.129 0.042 264.695);\n  --foreground: oklch(0.984 0.003 247.858);\n  --card: oklch(0.208 0.042 265.755);\n  --card-foreground: oklch(0.984 0.003 247.858);\n  --popover: oklch(0.208 0.042 265.755);\n  --popover-foreground: oklch(0.984 0.003 247.858);\n  --primary: oklch(0.929 0.013 255.508);\n  --primary-foreground: oklch(0.208 0.042 265.755);\n  --secondary: oklch(0.279 0.041 260.031);\n  --secondary-foreground: oklch(0.984 0.003 247.858);\n  --muted: oklch(0.279 0.041 260.031);\n  --muted-foreground: oklch(0.704 0.04 256.788);\n  --accent: oklch(0.279 0.041 260.031);\n  --accent-foreground: oklch(0.984 0.003 247.858);\n  --destructive: oklch(0.704 0.191 22.216);\n  --border: oklch(1 0 0 / 10%);\n  --input: oklch(1 0 0 / 15%);\n  --ring: oklch(0.551 0.027 264.364);\n  --chart-1: oklch(0.488 0.243 264.376);\n  --chart-2: oklch(0.696 0.17 162.48);\n  --chart-3: oklch(0.769 0.188 70.08);\n  --chart-4: oklch(0.627 0.265 303.9);\n  --chart-5: oklch(0.645 0.246 16.439);\n  --sidebar: oklch(0.208 0.042 265.755);\n  --sidebar-foreground: oklch(0.984 0.003 247.858);\n  --sidebar-primary: oklch(0.488 0.243 264.376);\n  --sidebar-primary-foreground: oklch(0.984 0.003 247.858);\n  --sidebar-accent: oklch(0.279 0.041 260.031);\n  --sidebar-accent-foreground: oklch(0.984 0.003 247.858);\n  --sidebar-border: oklch(1 0 0 / 10%);\n  --sidebar-ring: oklch(0.551 0.027 264.364);\n}\n```\n\n</CodeCollapsibleWrapper>\n"
  },
  {
    "path": "docs/mdsx.config.js",
    "content": "// @ts-check\nimport { readFileSync } from \"node:fs\";\nimport process from \"node:process\";\nimport { join, resolve } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport prettier from \"@prettier/sync\";\nimport rehypePrettyCode from \"rehype-pretty-code\";\nimport rehypeSlug from \"rehype-slug\";\nimport { codeImport } from \"remark-code-import\";\nimport remarkGfm from \"remark-gfm\";\nimport { visit } from \"unist-util-visit\";\nimport { u } from \"unist-builder\";\nimport { createHighlighterCore } from \"shiki/core\";\nimport { createJavaScriptRegexEngine } from \"shiki/engine/javascript\";\nimport { defineConfig } from \"mdsx\";\nimport { Index } from \"./src/__registry__/index.js\";\n\n/** @type {import('prettier').Config} */\nconst codeBlockPrettierConfig = {\n\tuseTabs: false,\n\ttabWidth: 2,\n\tsingleQuote: false,\n\ttrailingComma: \"none\",\n\tprintWidth: 80,\n\tendOfLine: \"lf\",\n\tparser: \"svelte\",\n\tplugins: [\"prettier-plugin-svelte\"],\n\toverrides: [\n\t\t{\n\t\t\tfiles: \"*.svelte\",\n\t\t\toptions: {\n\t\t\t\tparser: \"svelte\",\n\t\t\t},\n\t\t},\n\t],\n\tbracketSameLine: false,\n};\n\nconst __dirname = fileURLToPath(new URL(\".\", import.meta.url));\nconst jsEngine = createJavaScriptRegexEngine();\n\nexport async function createHighlighter() {\n\tif (!globalThis.__shikiHighlighter) {\n\t\tglobalThis.__shikiHighlighter = await createHighlighterCore({\n\t\t\tthemes: [\n\t\t\t\timport(\"@shikijs/themes/github-dark\"),\n\t\t\t\timport(\"@shikijs/themes/github-light-default\"),\n\t\t\t],\n\t\t\tlangs: [\n\t\t\t\timport(\"@shikijs/langs/typescript\"),\n\t\t\t\timport(\"@shikijs/langs/svelte\"),\n\t\t\t\timport(\"@shikijs/langs/css\"),\n\t\t\t\timport(\"@shikijs/langs/json\"),\n\t\t\t\timport(\"@shikijs/langs/bash\"),\n\t\t\t\timport(\"@shikijs/langs/astro\"),\n\t\t\t\timport(\"@shikijs/langs/diff\"),\n\t\t\t],\n\t\t\tengine: jsEngine,\n\t\t});\n\t}\n\treturn globalThis.__shikiHighlighter;\n}\n\n/**\n * @typedef {import('mdast').Root} MdastRoot\n * @typedef {import('hast').Root} HastRoot\n * @typedef {import('unified').Transformer<HastRoot, HastRoot>} HastTransformer\n * @typedef {import('unified').Transformer<MdastRoot, MdastRoot>} MdastTransformer\n */\n\n/**\n * @type {import('rehype-pretty-code').Options}\n */\nconst prettyCodeOptions = {\n\ttheme: {\n\t\tdark: \"github-dark\",\n\t\tlight: \"github-light-default\",\n\t},\n\tkeepBackground: false,\n\t// @ts-expect-error - shh\n\tgetHighlighter: createHighlighter,\n\tonVisitLine(node) {\n\t\t// Prevent lines from collapsing in `display: grid` mode, and allow empty\n\t\t// lines to be copy/pasted\n\t\tif (node.children.length === 0) {\n\t\t\tnode.children = [{ type: \"text\", value: \" \" }];\n\t\t}\n\t},\n\tonVisitHighlightedLine(node) {\n\t\tnode.properties.className = [\"line--highlighted\"];\n\t},\n\tonVisitHighlightedChars(node) {\n\t\tnode.properties.className = [\"chars--highlighted\"];\n\t},\n};\n\nexport const mdsxConfig = defineConfig({\n\textensions: [\".md\"],\n\tremarkPlugins: [remarkGfm, codeImport, remarkRemovePrettierIgnore],\n\trehypePlugins: [\n\t\trehypeSlug,\n\t\trehypeComponentExample,\n\t\trehypePreData,\n\t\t[rehypePrettyCode, prettyCodeOptions],\n\n\t\trehypeHandleMetadata,\n\t],\n\tblueprints: {\n\t\tdefault: {\n\t\t\tpath: resolve(__dirname, \"./src/lib/components/mdsx/blueprint.svelte\"),\n\t\t},\n\t},\n});\n\n/**\n * Removes `<!-- prettier-ignore -->` and `// prettier-ignore` from code blocks\n * before they are converted to HTML for syntax highlighting.\n *\n * We do this because sometimes we want to force a line break in code blocks, but\n * prettier removes them, however, we don't want to include the ignore statement\n * in the final code block.\n *\n * One caveat is that if you did want to include the ignore statement in the final\n * code block, you'd have to do some hacky stuff like including it in the comment\n * itself and checking for it in the code block, but that's not something we need\n * at the moment.\n *\n * @returns {MdastTransformer} - Unified Transformer\n */\nfunction remarkRemovePrettierIgnore() {\n\treturn async (tree) => {\n\t\tvisit(tree, \"code\", (node) => {\n\t\t\tnode.value = node.value\n\t\t\t\t.replaceAll(\"<!-- prettier-ignore -->\\n\", \"\")\n\t\t\t\t.replaceAll(\"// prettier-ignore\\n\", \"\");\n\t\t});\n\t};\n}\n\n/**\n * @returns {HastTransformer} - Unified Transformer\n */\nfunction rehypePreData() {\n\treturn (tree) => {\n\t\tvisit(tree, (node) => {\n\t\t\tif (node?.type === \"element\" && node?.tagName === \"pre\") {\n\t\t\t\tconst [codeEl] = node.children;\n\t\t\t\tif (codeEl.type !== \"element\") return;\n\t\t\t\tif (codeEl.tagName !== \"code\") return;\n\n\t\t\t\tif (\n\t\t\t\t\tcodeEl.data &&\n\t\t\t\t\t\"meta\" in codeEl.data &&\n\t\t\t\t\tcodeEl.data.meta &&\n\t\t\t\t\ttypeof codeEl.data.meta === \"string\"\n\t\t\t\t) {\n\t\t\t\t\t// Extract event from meta and pass it down the tree.\n\t\t\t\t\tconst regex = /event=\"([^\"]*)\"/;\n\t\t\t\t\tconst match = codeEl.data?.meta.match(regex);\n\t\t\t\t\tif (match) {\n\t\t\t\t\t\t// @ts-expect-error - this is fine\n\t\t\t\t\t\tnode.__event__ = match ? match[1] : null;\n\t\t\t\t\t\tcodeEl.data.meta = codeEl.data.meta.replace(regex, \"\");\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// @ts-expect-error - this is fine\n\t\t\t\tnode.__rawString__ = codeEl.children?.[0].value;\n\t\t\t\t// @ts-expect-error - this is fine\n\t\t\t\tnode.__src__ = node.properties?.__src__;\n\t\t\t\t// @ts-expect-error - this is fine\n\t\t\t\tnode.__style__ = node.properties?.__style__;\n\t\t\t}\n\t\t});\n\t};\n}\n\n/**\n *\n * @returns {HastTransformer} - Unified Transformer\n */\nexport function rehypeComponentExample() {\n\treturn (tree) => {\n\t\tconst nameRegex = /name=\"([^\"]+)\"/;\n\t\tconst titleRegex = /title=\"([^\"]+)\"/;\n\t\tvisit(tree, (node, index, parent) => {\n\t\t\tif (\n\t\t\t\tnode?.type === \"raw\" &&\n\t\t\t\t(node?.value?.startsWith(\"<ComponentPreview\") ||\n\t\t\t\t\tnode?.value?.startsWith(\"<ComponentSource\"))\n\t\t\t) {\n\t\t\t\tconst match = node.value.match(nameRegex);\n\t\t\t\tconst name = match ? match[1] : null;\n\t\t\t\tconst titleMatch = node.value.match(titleRegex);\n\t\t\t\tconst title = titleMatch ? titleMatch[1] : null;\n\n\t\t\t\tif (!name) return null;\n\n\t\t\t\ttry {\n\t\t\t\t\t// @ts-expect-error - this is fine\n\t\t\t\t\tconst component = Index[name];\n\t\t\t\t\tif (!component) return;\n\n\t\t\t\t\tconst files = component.files;\n\t\t\t\t\tif (!files) return;\n\t\t\t\t\tconst src = files[0]?.replace(\"/lib/\", \"/src/lib/\");\n\n\t\t\t\t\tlet sourceCode = getComponentSourceFileContent(src);\n\t\t\t\t\tif (!sourceCode || sourceCode === null) return;\n\n\t\t\t\t\tsourceCode = sourceCode.replaceAll(\"$lib/registry/\", \"$lib/components/\");\n\t\t\t\t\tsourceCode = sourceCode.replaceAll(\"$lib/registry/\", \"$lib/components/\");\n\n\t\t\t\t\tconst meta = title\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\tmeta: `title=\"${title}\" showLineNumbers`,\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\tmeta: `showLineNumbers`,\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\tconst sourceCodeNode = u(\"element\", {\n\t\t\t\t\t\ttagName: \"pre\",\n\t\t\t\t\t\tproperties: {\n\t\t\t\t\t\t\t__src__: src,\n\t\t\t\t\t\t\tclassName: [\"code\"],\n\t\t\t\t\t\t},\n\t\t\t\t\t\tchildren: [\n\t\t\t\t\t\t\tu(\"element\", {\n\t\t\t\t\t\t\t\ttagName: \"code\",\n\t\t\t\t\t\t\t\tproperties: {\n\t\t\t\t\t\t\t\t\tclassName: [`language-svelte`],\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tattributes: {},\n\t\t\t\t\t\t\t\tdata: meta,\n\t\t\t\t\t\t\t\tchildren: [\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\ttype: \"text\",\n\t\t\t\t\t\t\t\t\t\tvalue: sourceCode.replace(/^\\n+/, \"\"),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t],\n\t\t\t\t\t});\n\t\t\t\t\tif (!index) return;\n\t\t\t\t\t// @ts-expect-error - this is fine\n\t\t\t\t\tparent?.children.splice(index + 1, 0, sourceCodeNode);\n\t\t\t\t} catch (e) {\n\t\t\t\t\tconsole.error(e);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t};\n}\n\n/**\n * Adds `data-metadata` to `<figure>` elements that contain a `<figcaption>`.\n * We use this to style elements within the `<figure>` differently if a `<figcaption>`\n * is present.\n *\n * @returns {HastTransformer} - Unified Transformer\n */\nfunction rehypeHandleMetadata() {\n\treturn async (tree) => {\n\t\tvisit(tree, (node) => {\n\t\t\tif (node?.type === \"element\" && node?.tagName === \"figure\") {\n\t\t\t\tif (!(\"data-rehype-pretty-code-figure\" in node.properties)) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst preElement = node.children.at(-1);\n\t\t\t\tif (preElement && \"tagName\" in preElement && preElement.tagName !== \"pre\") {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst firstChild = node.children.at(0);\n\n\t\t\t\tif (firstChild && \"tagName\" in firstChild && firstChild.tagName === \"figcaption\") {\n\t\t\t\t\tnode.properties[\"data-metadata\"] = \"\";\n\t\t\t\t\tconst lastChild = node.children.at(-1);\n\t\t\t\t\tif (lastChild && \"properties\" in lastChild) {\n\t\t\t\t\t\tlastChild.properties[\"data-metadata\"] = \"\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t};\n}\n\nfunction getComponentSourceFileContent(src = \"\") {\n\tconst newSrc = src.replace(\"../\", \"./\");\n\tif (!newSrc) return null;\n\n\t// Read the source file.\n\tconst filePath = join(process.cwd(), newSrc);\n\n\tconst formattedSource = prettier.format(\n\t\treadFileSync(filePath, \"utf-8\"),\n\t\t/** @type {any} */ (codeBlockPrettierConfig)\n\t);\n\n\treturn formattedSource.trim();\n}\n"
  },
  {
    "path": "docs/package.json",
    "content": "{\n\t\"name\": \"docs\",\n\t\"private\": true,\n\t\"version\": \"0.0.0\",\n\t\"type\": \"module\",\n\t\"scripts\": {\n\t\t\"dev\": \"pnpm --reporter append-only --color \\\"/dev:/\\\"\",\n\t\t\"dev:content\": \"velite dev --watch\",\n\t\t\"dev:icons\": \"tsx scripts/build-icons.ts --watch\",\n\t\t\"dev:svelte\": \"vite dev\",\n\t\t\"build\": \"pnpm build:icons && pnpm build:content && pnpm build:llm-placeholders && pnpm build:svelte && pnpm build:llms\",\n\t\t\"build:content\": \"velite && tsx scripts/velite/velite-update-json.ts\",\n\t\t\"build:svelte\": \"vite build\",\n\t\t\"build:registry\": \"tsx scripts/build-registry.ts build-registry\",\n\t\t\"build:screenshots\": \"tsx scripts/capture-registry.ts\",\n\t\t\"build:icons\": \"tsx scripts/build-icons.ts\",\n\t\t\"build:llms\": \"tsx scripts/build-llms.ts\",\n\t\t\"build:llm-placeholders\": \"tsx scripts/build-llm-placeholders.ts\",\n\t\t\"pull:styles\": \"tsx scripts/pull-styles.ts\",\n\t\t\"replace:velite\": \"tsx scripts/velite/velite-watch-output.ts\",\n\t\t\"sync\": \"pnpm build:registry && pnpm build:content && svelte-kit sync\",\n\t\t\"preview\": \"vite preview\",\n\t\t\"check\": \"svelte-check --fail-on-warnings --tsconfig ./tsconfig.json\",\n\t\t\"check:watch\": \"svelte-check --tsconfig ./tsconfig.json --watch\"\n\t},\n\t\"devDependencies\": {\n\t\t\"@cloudflare/workers-types\": \"^4.20260317.1\",\n\t\t\"@dnd-kit-svelte/svelte\": \"^0.1.5\",\n\t\t\"@dnd-kit/abstract\": \"^0.1.21\",\n\t\t\"@dnd-kit/collision\": \"^0.1.21\",\n\t\t\"@dnd-kit/helpers\": \"^0.1.21\",\n\t\t\"@fontsource-variable/dm-sans\": \"^5.2.8\",\n\t\t\"@fontsource-variable/figtree\": \"^5.2.10\",\n\t\t\"@fontsource-variable/geist\": \"^5.2.8\",\n\t\t\"@fontsource-variable/geist-mono\": \"^5.2.7\",\n\t\t\"@fontsource-variable/inter\": \"^5.2.8\",\n\t\t\"@fontsource-variable/jetbrains-mono\": \"^5.2.8\",\n\t\t\"@fontsource-variable/noto-sans\": \"^5.2.10\",\n\t\t\"@fontsource-variable/noto-serif\": \"^5.2.9\",\n\t\t\"@fontsource-variable/nunito-sans\": \"^5.2.7\",\n\t\t\"@fontsource-variable/lora\": \"^5.2.8\",\n\t\t\"@fontsource-variable/merriweather\": \"^5.2.6\",\n\t\t\"@fontsource-variable/playfair-display\": \"^5.2.8\",\n\t\t\"@fontsource-variable/roboto-slab\": \"^5.2.8\",\n\t\t\"@fontsource-variable/outfit\": \"^5.2.8\",\n\t\t\"@fontsource-variable/public-sans\": \"^5.2.7\",\n\t\t\"@fontsource-variable/raleway\": \"^5.2.8\",\n\t\t\"@fontsource-variable/roboto\": \"^5.2.10\",\n\t\t\"@hugeicons/core-free-icons\": \"^4.0.0\",\n\t\t\"@hugeicons/svelte\": \"^1.1.2\",\n\t\t\"@internationalized/date\": \"^3.12.0\",\n\t\t\"@lucide/svelte\": \"^0.577.0\",\n\t\t\"@prettier/sync\": \"0.6.1\",\n\t\t\"@shikijs/langs\": \"^3.20.0\",\n\t\t\"@shikijs/themes\": \"^3.20.0\",\n\t\t\"@sveltejs/acorn-typescript\": \"^1.0.9\",\n\t\t\"@sveltejs/adapter-cloudflare\": \"^7.2.8\",\n\t\t\"@sveltejs/enhanced-img\": \"^0.10.4\",\n\t\t\"@sveltejs/kit\": \"^2.55.0\",\n\t\t\"@sveltejs/vite-plugin-svelte\": \"^7.0.0\",\n\t\t\"@tabler/icons-svelte\": \"^3.40.0\",\n\t\t\"@tailwindcss/vite\": \"^4.2.1\",\n\t\t\"@tanstack/table-core\": \"^8.21.3\",\n\t\t\"@types/d3-scale\": \"^4.0.9\",\n\t\t\"@types/d3-shape\": \"^3.1.8\",\n\t\t\"@types/hast\": \"^3.0.4\",\n\t\t\"@types/jsdom\": \"^27.0.0\",\n\t\t\"@types/lodash.template\": \"^4.5.3\",\n\t\t\"@types/mdast\": \"^4.0.4\",\n\t\t\"acorn\": \"^8.16.0\",\n\t\t\"bits-ui\": \"^2.16.3\",\n\t\t\"chrono-node\": \"^2.9.0\",\n\t\t\"clsx\": \"^2.1.1\",\n\t\t\"consola\": \"^3.4.2\",\n\t\t\"d3-scale\": \"^4.0.2\",\n\t\t\"d3-shape\": \"^3.2.0\",\n\t\t\"embla-carousel-autoplay\": \"^8.6.0\",\n\t\t\"embla-carousel-svelte\": \"^8.6.0\",\n\t\t\"estree-walker\": \"^3.0.3\",\n\t\t\"formsnap\": \"^2.0.1\",\n\t\t\"globby\": \"^16.0.0\",\n\t\t\"hast-util-to-html\": \"^9.0.5\",\n\t\t\"jsdom\": \"^27.3.0\",\n\t\t\"layerchart\": \"2.0.0-next.43\",\n\t\t\"little-date\": \"^1.2.1\",\n\t\t\"magic-string\": \"^0.30.21\",\n\t\t\"mdsx\": \"^0.0.7\",\n\t\t\"mode-watcher\": \"^1.1.0\",\n\t\t\"package-manager-detector\": \"^1.6.0\",\n\t\t\"paneforge\": \"^1.0.2\",\n\t\t\"phosphor-svelte\": \"^3.0.1\",\n\t\t\"postcss\": \"^8.5.8\",\n\t\t\"rehype-parse\": \"^9.0.1\",\n\t\t\"rehype-pretty-code\": \"^0.14.1\",\n\t\t\"rehype-remark\": \"^10.0.1\",\n\t\t\"rehype-slug\": \"^6.0.0\",\n\t\t\"remark-code-import\": \"^1.2.0\",\n\t\t\"remark-gfm\": \"^4.0.1\",\n\t\t\"remark-stringify\": \"^11.0.0\",\n\t\t\"remixicon-svelte\": \"^0.0.5\",\n\t\t\"rimraf\": \"^6.1.3\",\n\t\t\"rollup-plugin-visualizer\": \"^6.0.5\",\n\t\t\"runed\": \"^0.37.1\",\n\t\t\"shadcn-svelte\": \"workspace:*\",\n\t\t\"shiki\": \"^3.20.0\",\n\t\t\"svelte\": \"^5.54.0\",\n\t\t\"svelte-check\": \"^4.4.5\",\n\t\t\"svelte-sonner\": \"^1.1.0\",\n\t\t\"svelte-toolbelt\": \"^0.10.6\",\n\t\t\"sveltekit-superforms\": \"^2.30.0\",\n\t\t\"tailwind-merge\": \"^3.5.0\",\n\t\t\"tailwind-variants\": \"^3.2.2\",\n\t\t\"tailwindcss\": \"^4.2.1\",\n\t\t\"tsx\": \"^4.21.0\",\n\t\t\"tw-animate-css\": \"^1.4.0\",\n\t\t\"typescript\": \"^5.9.3\",\n\t\t\"unified\": \"^11.0.5\",\n\t\t\"unist-builder\": \"^4.0.0\",\n\t\t\"unist-util-visit\": \"^5.0.0\",\n\t\t\"vaul-svelte\": \"1.0.0-next.7\",\n\t\t\"velite\": \"^0.3.1\",\n\t\t\"vite\": \"^8.0.0\",\n\t\t\"zod\": \"catalog:\"\n\t},\n\t\"dependencies\": {\n\t\t\"@types/lodash\": \"^4.17.24\",\n\t\t\"lodash\": \"^4.17.23\"\n\t}\n}\n"
  },
  {
    "path": "docs/scripts/build-icons.ts",
    "content": "#!/usr/bin/env tsx\nimport * as fs from \"fs/promises\";\nimport { watch } from \"fs\";\nimport * as path from \"path\";\nimport { iconLibraries, type IconLibraryName } from \"shadcn-svelte/icons\";\n\nconst SEARCH_BASE = \"src/\";\nconst REGISTRY_BASE = \"src/lib/registry\";\n\ntype IconUsage = Record<IconLibraryName, Set<string>>;\n\nasync function findSvelteFiles(dir: string) {\n\tconst files: string[] = [];\n\tconst entries = await fs.readdir(dir, { withFileTypes: true });\n\n\tfor (const entry of entries) {\n\t\tconst fullPath = path.join(dir, entry.name);\n\t\tif (entry.isDirectory()) {\n\t\t\tfiles.push(...(await findSvelteFiles(fullPath)));\n\t\t} else if (entry.isFile() && entry.name.endsWith(\".svelte\")) {\n\t\t\tfiles.push(fullPath);\n\t\t}\n\t}\n\n\treturn files;\n}\n\nasync function scanIconUsage() {\n\tconst iconUsage = Object.fromEntries(\n\t\tObject.keys(iconLibraries).map((key) => [key, new Set<string>()])\n\t) as IconUsage;\n\n\tconst searchBasesDir = path.join(process.cwd(), SEARCH_BASE);\n\tconst files = await findSvelteFiles(searchBasesDir);\n\n\tfor (const file of files) {\n\t\tconst content = await fs.readFile(file, \"utf-8\");\n\n\t\tfor (const [libraryName, config] of Object.entries(iconLibraries)) {\n\t\t\tconst regex = new RegExp(`${config.name}=[\"']([^\"']+)[\"']`, \"g\");\n\t\t\tlet match;\n\t\t\twhile ((match = regex.exec(content)) !== null) {\n\t\t\t\ticonUsage[libraryName as IconLibraryName].add(match[1]);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn iconUsage;\n}\n\nasync function generateIconFiles(iconUsage: IconUsage) {\n\tconst outputDir = path.join(process.cwd(), REGISTRY_BASE, \"icons\");\n\n\tconst completedLibraries: { name: IconLibraryName; icons: string[] }[] = [];\n\n\tfor (const [lib, config] of Object.entries(iconLibraries)) {\n\t\tconst libraryName = lib as IconLibraryName;\n\t\tconst icons = Array.from(iconUsage[libraryName]).sort();\n\n\t\tif (icons.length === 0) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst typeName = `${config.title.replace(/\\s/g, \"\")}IconName`;\n\t\tconst typeUnion = icons.map((icon) => `\"${icon}\"`).join(\" | \");\n\n\t\tconst indexFileContent = `// Auto-generated by scripts/build-icons.ts\nexport type ${typeName} = ${typeUnion};\n`;\n\n\t\tconst dirname = `__${libraryName}__`;\n\t\tconst iconDir = path.join(outputDir, dirname);\n\t\tconst iconOutputDir = path.join(outputDir, dirname);\n\n\t\tconst iconFiles = icons.map((icon) => {\n\t\t\tconst iconExport = iconLibraries[libraryName].export({ name: icon });\n\t\t\tconst fileName = `${icon}.ts`;\n\n\t\t\treturn {\n\t\t\t\tname: icon,\n\t\t\t\tfileName,\n\t\t\t\tpath: path.join(iconOutputDir, fileName),\n\t\t\t\tcontent: `// Auto-generated by scripts/build-icons.ts\\n${iconExport}\\n`,\n\t\t\t};\n\t\t});\n\n\t\tawait fs.mkdir(iconDir, { recursive: true });\n\t\tawait fs.mkdir(outputDir, { recursive: true });\n\t\tawait fs.writeFile(path.join(iconOutputDir, \"index.ts\"), indexFileContent);\n\t\tfor (const iconFile of iconFiles) {\n\t\t\tawait fs.writeFile(iconFile.path, iconFile.content);\n\t\t}\n\n\t\t// clean unused icon files\n\t\tconst iconFileSet = new Set([\n\t\t\t\"index.ts\",\n\t\t\t...iconFiles.map((iconFile) => iconFile.fileName),\n\t\t]);\n\t\tfor (const existingIconFile of await fs.readdir(iconOutputDir)) {\n\t\t\tif (!iconFileSet.has(existingIconFile)) {\n\t\t\t\tawait fs.rm(path.join(iconOutputDir, existingIconFile));\n\t\t\t}\n\t\t}\n\n\t\tcompletedLibraries.push({ name: libraryName, icons });\n\t}\n\n\tconsole.log(\"✓ Generated icon files:\");\n\n\tfor (const library of completedLibraries) {\n\t\tconsole.log(`  - ${library.name}: ${library.icons.length} icons`);\n\t}\n}\n\nasync function main() {\n\tconst iconUsage = await scanIconUsage();\n\tawait generateIconFiles(iconUsage);\n}\n\nconst isWatchMode = process.argv.includes(\"--watch\");\n\nif (isWatchMode) {\n\tconst SEARCH_DIR = path.join(process.cwd(), SEARCH_BASE);\n\n\tawait main();\n\n\twatch(SEARCH_DIR, { recursive: true }, (_, filename) => {\n\t\tif (!filename?.endsWith(\".svelte\")) return;\n\t\tif (filename.includes(\"registry/icons/__\")) return;\n\t\tif (filename.includes(\"components/icon-placeholder\")) return;\n\t\tmain().catch((error) => {\n\t\t\tconsole.error(\"❌ Icons build failed:\", error);\n\t\t});\n\t});\n} else {\n\tawait main();\n}\n"
  },
  {
    "path": "docs/scripts/build-llm-placeholders.ts",
    "content": "/**\n * Creates empty markdown files so that they are loaded into the manifest for\n * the cloudflare build and we can manually update them after we build so we don't\n * need to build twice or try to manipulate the manifest post build.\n */\n\nimport { globby } from \"globby\";\nimport { mkdir, writeFile } from \"node:fs/promises\";\nimport { dirname, join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nconst __dirname = dirname(fileURLToPath(import.meta.url));\n\nasync function main() {\n\ttry {\n\t\tconst files = (await globby([\"content/**/*.md\"])).map((filePath) => {\n\t\t\tconst newPath = filePath.replace(\"content/\", \"docs/\");\n\t\t\tif (newPath.endsWith(\"/index.md\")) return newPath.replace(\"/index.md\", \".md\");\n\t\t\treturn newPath;\n\t\t});\n\n\t\tfor (const file of files) {\n\t\t\tconst outputPath = join(__dirname, \"../static\", file);\n\t\t\tconst outputDir = dirname(outputPath);\n\t\t\tawait mkdir(outputDir, { recursive: true });\n\t\t\tawait writeFile(outputPath, \"\\n\", \"utf-8\");\n\t\t}\n\n\t\tawait writeFile(join(__dirname, \"../static/llms.txt\"), \"\\n\", \"utf-8\");\n\t} catch (error) {\n\t\tconsole.error(\"Error building LLM placeholder files:\", error);\n\t}\n}\n\nmain();\n"
  },
  {
    "path": "docs/scripts/build-llms.ts",
    "content": "import { unified } from \"unified\";\nimport rehypeParse from \"rehype-parse\";\nimport rehypeRemark from \"rehype-remark\";\nimport remarkStringify from \"remark-stringify\";\nimport remarkGfm from \"remark-gfm\";\nimport { basename, dirname, join, relative } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { mkdir, readdir, readFile, writeFile } from \"node:fs/promises\";\nimport { JSDOM } from \"jsdom\";\nimport consola from \"consola\";\nimport type { Plugin } from \"unified\";\nimport type { Root, Link, Node, Paragraph, Text } from \"mdast\";\nimport {\n\tcomponents,\n\tinstallation,\n\tgettingStarted,\n\tmigration,\n\tdarkMode,\n\tregistry,\n} from \"../.velite\";\n\nconsola.wrapConsole();\n\nconst __dirname = dirname(fileURLToPath(import.meta.url));\n\n/**\n * Replaces relative links with complete URLs\n */\nconst remarkRelativeLinks: Plugin<[], Root> = () => {\n\treturn (tree: Root) => {\n\t\tconst visit = (node: Node) => {\n\t\t\tif (node.type === \"link\" && \"url\" in node) {\n\t\t\t\tconst link = node as Link;\n\t\t\t\tif (link.url.startsWith(\"/\")) {\n\t\t\t\t\tlink.url = `https://shadcn-svelte.com${link.url}`;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (\"children\" in node && Array.isArray(node.children)) {\n\t\t\t\tfor (const child of node.children) {\n\t\t\t\t\tvisit(child);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tvisit(tree);\n\t};\n};\n\n/**\n * Removes paragraphs that contain only the word \"Copy\"\n */\nconst remarkRemoveCopyLines: Plugin<[], Root> = () => {\n\treturn (tree: Root) => {\n\t\tif (\"children\" in tree && Array.isArray(tree.children)) {\n\t\t\ttree.children = tree.children.filter((node: Node) => {\n\t\t\t\tif (node.type === \"paragraph\") {\n\t\t\t\t\tconst paragraph = node as Paragraph;\n\t\t\t\t\tif (paragraph.children.length === 1 && paragraph.children[0].type === \"text\") {\n\t\t\t\t\t\tconst text = paragraph.children[0] as Text;\n\t\t\t\t\t\treturn text.value.trim() !== \"Copy\";\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t});\n\t\t}\n\t};\n};\n\nexport type FileMap = Record<string, string>;\n\nexport async function collectFiles(currentDir: string, baseDir: string): Promise<FileMap> {\n\ttry {\n\t\tconst entries = await readdir(currentDir, { withFileTypes: true });\n\t\tconst files: FileMap = {};\n\n\t\tfor (const entry of entries) {\n\t\t\tconst fullPath = join(currentDir, entry.name);\n\t\t\tconst relPath = relative(baseDir, fullPath);\n\n\t\t\tif (entry.isDirectory()) {\n\t\t\t\tconst subFiles = await collectFiles(fullPath, baseDir);\n\t\t\t\tObject.assign(files, subFiles);\n\t\t\t} else if (entry.isFile()) {\n\t\t\t\tif (fullPath.includes(\"figma\")) continue;\n\t\t\t\tconst content = await readFile(fullPath, \"utf-8\");\n\n\t\t\t\tfiles[relPath] = content;\n\t\t\t}\n\t\t}\n\n\t\treturn files;\n\t} catch (error) {\n\t\tthrow new Error(\n\t\t\t`Failed to collect files from ${currentDir}: ${error instanceof Error ? error.message : String(error)}`,\n\t\t\t{\n\t\t\t\tcause: error,\n\t\t\t}\n\t\t);\n\t}\n}\n\ntype LinkData = {\n\tname: string;\n\tpath: string;\n\tdescription?: string;\n\ttitle?: string;\n};\n\ntype VeliteData =\n\t| (typeof components)[number]\n\t| (typeof installation)[number]\n\t| (typeof gettingStarted)[number]\n\t| (typeof migration)[number]\n\t| (typeof darkMode)[number]\n\t| (typeof registry)[number];\n\ntype CategorizedLinks = {\n\toverview: LinkData[];\n\tinstallation: LinkData[];\n\tcomponents: {\n\t\tformInput: LinkData[];\n\t\tlayoutNavigation: LinkData[];\n\t\toverlaysDialogs: LinkData[];\n\t\tfeedbackStatus: LinkData[];\n\t\tdisplayMedia: LinkData[];\n\t\tmisc: LinkData[];\n\t};\n\tdarkMode: LinkData[];\n\tmigration: LinkData[];\n\tregistry: LinkData[];\n\tother: LinkData[];\n};\n\nconst REGEX_PATTERNS = {\n\tmultipleNewlines: /\\n{3,}/g,\n\tbulletSpacing: /- \\n\\s+/g,\n\tmultiLineBullets: /(- [^\\n]*)(?:\\n\\s+([^\\n-][^\\n]*))/g,\n\tstartLineSpaces: /(\\n|^)[ \\t]+\\n/g,\n\tendLineSpaces: /\\n[ \\t]+($|\\n)/g,\n\tinlineCodeBefore: /(\\S+)\\s*\\n\\s*(`[^`]+?`)/g,\n\tinlineCodeAfter: /(`[^`]+?`)\\s*\\n\\s*(\\S+)/g,\n\tparenCodeStart: /\\(\\s*\\n\\s*(`[^`]+?`)/g,\n\tparenCodeEnd: /(`[^`]+?`)\\s*\\n\\s*\\)/g,\n\tescapedBackticks: /\\\\`([^`]+?)\\\\`/g,\n\tcodeBlockIndent: /```([a-z]*)\\n\\t/g,\n\thtmlComments: /<!--.*?-->/gs,\n\ttrailingLinkSpaces: /\\[([^\\]]+)\\s+\\]/g,\n} as const;\n\nasync function toMarkdown(rawHtml: string) {\n\tconst dom = new JSDOM(rawHtml);\n\tconst document = dom.window.document;\n\tconst codeTags = document?.querySelectorAll(\"code\");\n\tif (codeTags) {\n\t\tfor (const code of codeTags) {\n\t\t\tconst language = code.getAttribute(\"data-language\");\n\t\t\tif (language) {\n\t\t\t\tcode.className = `${code.className || \"\"} language-${language}`.trim();\n\t\t\t}\n\t\t}\n\t}\n\tconst targetElement = document.getElementById(\"main-content\");\n\n\tconst elementsToRemove = Array.from(\n\t\tdocument.querySelectorAll<HTMLElement>(\"[data-llm-ignore], [aria-hidden='true']\")\n\t);\n\n\tfor (const element of elementsToRemove) {\n\t\telement.remove();\n\t}\n\n\tconst html = targetElement ? targetElement.innerHTML : \"\";\n\n\tconst file = await unified()\n\t\t.use(rehypeParse)\n\t\t.use(rehypeRemark)\n\t\t.use(remarkGfm)\n\t\t.use(remarkRelativeLinks)\n\t\t.use(remarkRemoveCopyLines)\n\t\t.use(remarkStringify, {\n\t\t\tbullet: \"-\",\n\t\t\tlistItemIndent: \"one\",\n\t\t\ttightDefinitions: true,\n\t\t\tfences: true,\n\t\t})\n\t\t.process(html);\n\n\tconst sanitizedFile = String(file)\n\t\t.replace(REGEX_PATTERNS.htmlComments, \"\")\n\t\t.replace(REGEX_PATTERNS.multipleNewlines, \"\\n\\n\")\n\t\t.replace(REGEX_PATTERNS.bulletSpacing, \"- \")\n\t\t.replace(REGEX_PATTERNS.multiLineBullets, \"$1 $2\")\n\t\t.replace(REGEX_PATTERNS.startLineSpaces, \"$1\")\n\t\t.replace(REGEX_PATTERNS.endLineSpaces, \"$1\")\n\t\t.replace(REGEX_PATTERNS.inlineCodeBefore, \"$1 $2\")\n\t\t.replace(REGEX_PATTERNS.inlineCodeAfter, \"$1 $2\")\n\t\t.replace(REGEX_PATTERNS.parenCodeStart, \"($1\")\n\t\t.replace(REGEX_PATTERNS.parenCodeEnd, \"$1)\")\n\t\t.replace(REGEX_PATTERNS.escapedBackticks, \"`$1`\")\n\t\t.replace(REGEX_PATTERNS.codeBlockIndent, \"```$1\\n\")\n\t\t.replace(REGEX_PATTERNS.trailingLinkSpaces, \"[$1]\")\n\t\t.replace(/\\u00C2/g, \"\") // Â\n\t\t.replace(/\\u2014/g, \"\") // â€\"\n\t\t// eslint-disable-next-line no-control-regex\n\t\t.replace(/[^\\u0000-\\u007F\\u2019]/g, \"\") // preserve fancy apostrophe\n\t\t.replaceAll(\"\\t\", \" \")\n\t\t.trim();\n\n\treturn sanitizedFile;\n}\n\nfunction findVeliteData(veliteData: Record<string, VeliteData[]>, path: string): VeliteData | null {\n\t// search through all velite data arrays for matching path\n\tfor (const dataArray of Object.values(veliteData)) {\n\t\tconst found = dataArray.find((item) => item.path === path);\n\t\tif (found) return found;\n\t}\n\treturn null;\n}\n\nasync function createLLMsIndex(files: FileMap) {\n\tconst veliteData = {\n\t\tcomponents,\n\t\tinstallation,\n\t\tgettingStarted,\n\t\tmigration,\n\t\tdarkMode,\n\t\tregistry,\n\t};\n\tconst categorizedLinks: CategorizedLinks = {\n\t\toverview: [],\n\t\tinstallation: [],\n\t\tcomponents: {\n\t\t\tformInput: [],\n\t\t\tlayoutNavigation: [],\n\t\t\toverlaysDialogs: [],\n\t\t\tfeedbackStatus: [],\n\t\t\tdisplayMedia: [],\n\t\t\tmisc: [],\n\t\t},\n\t\tdarkMode: [],\n\t\tmigration: [],\n\t\tregistry: [],\n\t\tother: [],\n\t};\n\n\tconst componentCategories = {\n\t\tformInput: [\n\t\t\t\"form\",\n\t\t\t\"field\",\n\t\t\t\"button\",\n\t\t\t\"button-group\",\n\t\t\t\"input\",\n\t\t\t\"input-group\",\n\t\t\t\"input-otp\",\n\t\t\t\"textarea\",\n\t\t\t\"checkbox\",\n\t\t\t\"radio-group\",\n\t\t\t\"select\",\n\t\t\t\"switch\",\n\t\t\t\"slider\",\n\t\t\t\"calendar\",\n\t\t\t\"date-picker\",\n\t\t\t\"combobox\",\n\t\t\t\"label\",\n\t\t\t\"native-select\",\n\t\t],\n\t\tlayoutNavigation: [\n\t\t\t\"accordion\",\n\t\t\t\"breadcrumb\",\n\t\t\t\"navigation-menu\",\n\t\t\t\"sidebar\",\n\t\t\t\"tabs\",\n\t\t\t\"separator\",\n\t\t\t\"scroll-area\",\n\t\t\t\"resizable\",\n\t\t],\n\t\toverlaysDialogs: [\n\t\t\t\"dialog\",\n\t\t\t\"alert-dialog\",\n\t\t\t\"sheet\",\n\t\t\t\"drawer\",\n\t\t\t\"popover\",\n\t\t\t\"tooltip\",\n\t\t\t\"hover-card\",\n\t\t\t\"context-menu\",\n\t\t\t\"dropdown-menu\",\n\t\t\t\"menubar\",\n\t\t\t\"command\",\n\t\t],\n\t\tfeedbackStatus: [\"alert\", \"sonner\", \"progress\", \"spinner\", \"skeleton\", \"badge\", \"empty\"],\n\t\tdisplayMedia: [\n\t\t\t\"avatar\",\n\t\t\t\"card\",\n\t\t\t\"table\",\n\t\t\t\"data-table\",\n\t\t\t\"chart\",\n\t\t\t\"carousel\",\n\t\t\t\"aspect-ratio\",\n\t\t\t\"typography\",\n\t\t\t\"item\",\n\t\t\t\"kbd\",\n\t\t],\n\t\tmisc: [\"collapsible\", \"toggle\", \"toggle-group\", \"pagination\"],\n\t};\n\n\tfor (const fileName of Object.keys(files)) {\n\t\tif (!fileName.endsWith(\".html\")) continue;\n\n\t\tconst baseName = basename(fileName, \".html\");\n\t\tconst dirPath = dirname(fileName);\n\t\tconst outputName =\n\t\t\tbaseName === \"index\" ? (dirPath === \".\" ? \"docs\" : basename(dirPath)) : baseName;\n\t\tconst relativePath =\n\t\t\tbaseName === \"index\" ? `${outputName}.md` : join(dirPath, `${outputName}.md`);\n\n\t\tconst veliteItem =\n\t\t\tfindVeliteData(veliteData, baseName) ||\n\t\t\tfindVeliteData(veliteData, join(dirPath, baseName).replace(/\\\\/g, \"/\")) ||\n\t\t\tfindVeliteData(veliteData, dirPath.replace(/\\\\/g, \"/\") + \"/\" + baseName);\n\n\t\tconst linkData: LinkData = {\n\t\t\tname: outputName,\n\t\t\tpath: `https://shadcn-svelte.com/docs/${relativePath}`,\n\t\t\ttitle: veliteItem?.title,\n\t\t\tdescription: veliteItem?.description,\n\t\t};\n\n\t\tif (\n\t\t\toutputName === \"index\" ||\n\t\t\toutputName === \"about\" ||\n\t\t\toutputName === \"changelog\" ||\n\t\t\toutputName === \"cli\" ||\n\t\t\toutputName === \"components-json\" ||\n\t\t\toutputName === \"theming\" ||\n\t\t\toutputName === \"javascript\" ||\n\t\t\toutputName === \"legacy\"\n\t\t) {\n\t\t\tcategorizedLinks.overview.push(linkData);\n\t\t} else if (dirPath.includes(\"installation\")) {\n\t\t\tcategorizedLinks.installation.push(linkData);\n\t\t} else if (dirPath.includes(\"dark-mode\")) {\n\t\t\tcategorizedLinks.darkMode.push(linkData);\n\t\t} else if (dirPath.includes(\"migration\")) {\n\t\t\tcategorizedLinks.migration.push(linkData);\n\t\t} else if (dirPath.includes(\"registry\")) {\n\t\t\tcategorizedLinks.registry.push(linkData);\n\t\t} else if (dirPath.includes(\"components\")) {\n\t\t\tlet categorized = false;\n\t\t\tif (componentCategories.formInput.includes(outputName)) {\n\t\t\t\tcategorizedLinks.components.formInput.push(linkData);\n\t\t\t\tcategorized = true;\n\t\t\t} else if (componentCategories.layoutNavigation.includes(outputName)) {\n\t\t\t\tcategorizedLinks.components.layoutNavigation.push(linkData);\n\t\t\t\tcategorized = true;\n\t\t\t} else if (componentCategories.overlaysDialogs.includes(outputName)) {\n\t\t\t\tcategorizedLinks.components.overlaysDialogs.push(linkData);\n\t\t\t\tcategorized = true;\n\t\t\t} else if (componentCategories.feedbackStatus.includes(outputName)) {\n\t\t\t\tcategorizedLinks.components.feedbackStatus.push(linkData);\n\t\t\t\tcategorized = true;\n\t\t\t} else if (componentCategories.displayMedia.includes(outputName)) {\n\t\t\t\tcategorizedLinks.components.displayMedia.push(linkData);\n\t\t\t\tcategorized = true;\n\t\t\t} else if (componentCategories.misc.includes(outputName)) {\n\t\t\t\tcategorizedLinks.components.misc.push(linkData);\n\t\t\t\tcategorized = true;\n\t\t\t}\n\n\t\t\tif (!categorized) {\n\t\t\t\tcategorizedLinks.components.misc.push(linkData);\n\t\t\t}\n\t\t} else {\n\t\t\tcategorizedLinks.other.push(linkData);\n\t\t}\n\t}\n\n\tcategorizedLinks.overview.sort((a, b) => a.name.localeCompare(b.name));\n\tcategorizedLinks.installation.sort((a, b) => a.name.localeCompare(b.name));\n\tcategorizedLinks.darkMode.sort((a, b) => a.name.localeCompare(b.name));\n\tcategorizedLinks.migration.sort((a, b) => a.name.localeCompare(b.name));\n\tcategorizedLinks.registry.sort((a, b) => a.name.localeCompare(b.name));\n\tcategorizedLinks.other.sort((a, b) => a.name.localeCompare(b.name));\n\n\tcategorizedLinks.components.formInput.sort((a, b) => a.name.localeCompare(b.name));\n\tcategorizedLinks.components.layoutNavigation.sort((a, b) => a.name.localeCompare(b.name));\n\tcategorizedLinks.components.overlaysDialogs.sort((a, b) => a.name.localeCompare(b.name));\n\tcategorizedLinks.components.feedbackStatus.sort((a, b) => a.name.localeCompare(b.name));\n\tcategorizedLinks.components.displayMedia.sort((a, b) => a.name.localeCompare(b.name));\n\tcategorizedLinks.components.misc.sort((a, b) => a.name.localeCompare(b.name));\n\n\tconst llmsContent = `# shadcn-svelte\n\n> shadcn-svelte is a collection of beautifully-designed, accessible components for Svelte and SvelteKit. It is built with TypeScript, Tailwind CSS, and Bits UI primitives. Open Source. Open Code. AI-Ready. It also comes with a command-line tool to install and manage components and a registry system to publish and distribute code.\n\n## Overview\n\n${categorizedLinks.overview\n\t.map((link) => `- [${link.title || formatName(link.name)}](${link.path}): ${link.description}`)\n\t.join(\"\\n\")}\n\n## Installation\n\n${categorizedLinks.installation\n\t.map((link) => `- [${link.title || formatName(link.name)}](${link.path}): ${link.description}`)\n\t.join(\"\\n\")}\n\n## Components\n\n### Form & Input\n\n${categorizedLinks.components.formInput\n\t.map((link) => `- [${link.title || formatName(link.name)}](${link.path}): ${link.description}`)\n\t.join(\"\\n\")}\n\n### Layout & Navigation\n\n${categorizedLinks.components.layoutNavigation\n\t.map((link) => `- [${link.title || formatName(link.name)}](${link.path}): ${link.description}`)\n\t.join(\"\\n\")}\n\n### Overlays & Dialogs\n\n${categorizedLinks.components.overlaysDialogs\n\t.map((link) => `- [${link.title || formatName(link.name)}](${link.path}): ${link.description}`)\n\t.join(\"\\n\")}\n\n### Feedback & Status\n\n${categorizedLinks.components.feedbackStatus\n\t.map((link) => `- [${link.title || formatName(link.name)}](${link.path}): ${link.description}`)\n\t.join(\"\\n\")}\n\n### Display & Media\n\n${categorizedLinks.components.displayMedia\n\t.map((link) => `- [${link.title || formatName(link.name)}](${link.path}): ${link.description}`)\n\t.join(\"\\n\")}\n\n### Misc\n\n${categorizedLinks.components.misc\n\t.map((link) => `- [${link.title || formatName(link.name)}](${link.path}): ${link.description}`)\n\t.join(\"\\n\")}\n\n## Dark Mode\n\n${categorizedLinks.darkMode\n\t.map((link) => `- [${link.title || formatName(link.name)}](${link.path}): ${link.description}`)\n\t.join(\"\\n\")}\n\n## Migration\n\n${categorizedLinks.migration\n\t.map((link) => `- [${link.title || formatName(link.name)}](${link.path}): ${link.description}`)\n\t.join(\"\\n\")}\n\n## Registry\n\n${categorizedLinks.registry\n\t.map((link) => `- [${link.title || formatName(link.name)}](${link.path}): ${link.description}`)\n\t.join(\"\\n\")}\n`;\n\n\tconst createFile = async (destinationFile: string) => {\n\t\tconst outputPath = join(__dirname, destinationFile);\n\t\tconst outputDir = dirname(outputPath);\n\t\tawait mkdir(outputDir, { recursive: true });\n\t\tawait writeFile(outputPath, llmsContent);\n\t};\n\n\tawait createFile(\"../.svelte-kit/cloudflare/llms.txt\");\n\n\tconsola.info(\"Created llms.txt index file!\");\n}\n\nfunction formatName(name: string): string {\n\treturn name\n\t\t.split(\"-\")\n\t\t.map((word) => word.charAt(0).toUpperCase() + word.slice(1))\n\t\t.join(\" \");\n}\n\nasync function main() {\n\ttry {\n\t\tconsola.info(\"Starting to build LLM files...\");\n\t\tconst rootPath = join(__dirname, \"../.svelte-kit/cloudflare/docs\");\n\t\tconsole.info(\"Collecting files from\", rootPath);\n\t\tconst files = await collectFiles(rootPath, rootPath);\n\t\tconst fileNames = Object.keys(files).filter((fileName) => fileName.endsWith(\".html\"));\n\n\t\t// build individual llms.txt files and collect content\n\t\tfor (const fileName of fileNames) {\n\t\t\tconsole.info(\"Processing\", fileName);\n\t\t\tif (!fileName.endsWith(\".html\")) continue;\n\n\t\t\tconst fileContent = files[fileName];\n\t\t\tconst cleanedContent = await toMarkdown(fileContent);\n\n\t\t\tconst baseName = basename(fileName, \".html\");\n\t\t\tconst dirPath = dirname(fileName);\n\t\t\tconst outputName =\n\t\t\t\tbaseName === \"index\" ? (dirPath === \".\" ? \"docs\" : basename(dirPath)) : baseName;\n\n\t\t\tconst createFile = async (destinationDir: string) => {\n\t\t\t\tconst outputPath =\n\t\t\t\t\tbaseName === \"index\" && dirPath === \".\"\n\t\t\t\t\t\t? join(__dirname, destinationDir.replace(\"/docs\", \"\"), `${outputName}.md`)\n\t\t\t\t\t\t: baseName === \"index\"\n\t\t\t\t\t\t\t? join(__dirname, destinationDir, `${outputName}.md`)\n\t\t\t\t\t\t\t: join(__dirname, destinationDir, dirPath, `${outputName}.md`);\n\t\t\t\tconst outputDir = dirname(outputPath);\n\t\t\t\tawait mkdir(outputDir, { recursive: true });\n\t\t\t\tawait writeFile(outputPath, cleanedContent);\n\t\t\t};\n\n\t\t\tawait createFile(\"../.svelte-kit/cloudflare/docs\");\n\t\t}\n\n\t\tawait createLLMsIndex(files);\n\t} catch (error) {\n\t\tconsole.error(\"Error building LLM files:\", error);\n\t}\n}\n\nmain();\n"
  },
  {
    "path": "docs/scripts/build-registry.ts",
    "content": "import fs from \"node:fs\";\nimport { execSync } from \"node:child_process\";\nimport path from \"node:path\";\nimport postcss from \"postcss\";\nimport prettier from \"prettier\";\nimport { rimraf } from \"rimraf\";\nimport {\n\tcomponentsJsonSchema,\n\tregistryItemSchema,\n\tregistrySchema,\n\ttype Registry,\n\ttype RegistryItemType,\n} from \"shadcn-svelte/schema\";\nimport { PRESET_STYLES, type PresetConfig } from \"shadcn-svelte/preset\";\n\ninterface BuildRegistryItem {\n\tname: string;\n\ttype: string;\n\tfiles: Array<{\n\t\tpath: string;\n\t}>;\n}\nimport { buildRegistry } from \"./registry.js\";\nimport { THEMES } from \"../src/lib/registry/themes.js\";\nimport { getColorsData } from \"../src/lib/components/colors/colors.js\";\nimport { toJSONSchema } from \"zod\";\n\nconst prettierConfig = await prettier.resolveConfig(import.meta.url);\nif (!prettierConfig) throw new Error(\"Failed to resolve prettier config.\");\n\nconst INTERNAL_REGISTRY_PATH = path.resolve(\"src\", \"lib\", \"registry\");\nconst REGISTRY_PATH = path.resolve(\"static\", \"registry\");\nconst STYLE_TEMP_BASE = path.join(REGISTRY_PATH, \"temp\", \"style\");\n\nfunction writeFileWithDirs(\n\tfilePath: string,\n\tdata: string,\n\toptions: Parameters<typeof fs.writeFileSync>[2] = {}\n): void {\n\t// Create directory path if it doesn't exist\n\tconst dirname = path.dirname(filePath);\n\tfs.mkdirSync(dirname, { recursive: true });\n\n\t// Write the file\n\tfs.writeFileSync(filePath, data, options);\n}\n\nfunction log(message: string) {\n\tconsole.log(`[registry]: ${message}`);\n}\n\nexport async function build(): Promise<void> {\n\tlog(\"📦 Starting...\");\n\n\tlog(\"🔍 Crawling registry (UI, examples, blocks, hooks, lib, fonts)...\");\n\tconst registry = await buildRegistry();\n\tlog(`✨ Found ${registry.length} registry items`);\n\n\tlog(\"✅ Validating registry...\");\n\tvalidateRegistry(registry);\n\n\t// build registry styles (each style gets its own temp dir with cn-* classes resolved)\n\tlog(\"🎨 Building registry styles...\");\n\tawait Promise.all(\n\t\tPRESET_STYLES.map(async (style) => {\n\t\t\tlog(`  📐 Processing style: ${style}`);\n\t\t\tconst styleTempDir = path.join(STYLE_TEMP_BASE, style);\n\t\t\ttry {\n\t\t\t\tfs.mkdirSync(styleTempDir, { recursive: true });\n\t\t\t\tconst styleRegistry = await rewriteRegistryForStyle(registry, style, styleTempDir);\n\t\t\t\tawait buildRegistryJson(styleRegistry, style);\n\t\t\t\tawait runRegistryBuild(style);\n\t\t\t} finally {\n\t\t\t\trimraf.sync(styleTempDir);\n\t\t\t\tconst registryJsonPath = path.resolve(`registry-${style}.json`);\n\t\t\t\tif (fs.existsSync(registryJsonPath)) {\n\t\t\t\t\tfs.rmSync(registryJsonPath);\n\t\t\t\t}\n\t\t\t}\n\t\t\tlog(`✅ Style ${style} built`);\n\t\t})\n\t);\n\tlog(\"✅ Registry styles built\");\n\tlog(\"🧹 Cleaning up style temp directory...\");\n\trimraf.sync(STYLE_TEMP_BASE);\n\n\t// ----------------------------------------------------------------------------\n\t// Build __registry__/blocks.ts\n\t// ----------------------------------------------------------------------------\n\tlog(\"🧩 Building __registry__/blocks.ts...\");\n\trimraf.sync(path.resolve(\"src\", \"__registry__\"));\n\n\tlet blocksIndex = `\n// This file is autogenerated by scripts/build-registry.ts\n// Do not edit this file directly.\nexport const blocks = [\n`; // Creates block index files\n\tfor (const block of registry) {\n\t\tif (block.type !== \"registry:block\" || block.name.startsWith(\"chart-\")) continue;\n\n\t\tblocksIndex += `\"${block.name}\",`;\n\t}\n\n\tblocksIndex += \"\\n] as const;\\n\";\n\tconst blocksPath = path.resolve(\"src\", \"__registry__\", \"blocks.ts\");\n\twriteFileWithDirs(blocksPath, blocksIndex);\n\n\t// ----------------------------------------------------------------------------\n\t// Build __registry__/index.js.\n\t// ----------------------------------------------------------------------------\n\tlet index = `\n// This file is autogenerated by scripts/build-registry.ts\n// Do not edit this file directly.\nexport const Index = {`;\n\n\t// TODO: fix later - we should either add these calendar examples to\n\t// the `lib/registry/examples` dir, or... do something else?\n\tconst CALENDAR_EXAMPLES = [\"02\", \"13\", \"22\", \"24\", \"29\"].map((n) => `calendar-${n}`);\n\n\tfor (const item of registry as BuildRegistryItem[]) {\n\t\tif (item.type !== \"registry:example\" && !CALENDAR_EXAMPLES.includes(item.name)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst resolveFiles = item.files.map((file: BuildRegistryItem[\"files\"][0]) =>\n\t\t\tfile.path.replace(\"src/\", \"../\")\n\t\t);\n\n\t\tindex += `\n\"${item.name}\": {\n\tfiles: [${resolveFiles.map((filePath: string) => `\"${filePath.replaceAll(path.sep, \"/\")}\"`)}],\n},`;\n\t}\n\n\tindex += `\n}\n`;\n\n\t// Write style index.\n\tconst registryPath = path.resolve(\"src\", \"__registry__\", \"index.js\");\n\trimraf.sync(registryPath);\n\twriteFileWithDirs(registryPath, index);\n\n\t// ----------------------------------------------------------------------------\n\t// Build registry/colors/index.json.\n\t// ----------------------------------------------------------------------------\n\tlog(\"🎨 Building registry/colors...\");\n\tconst colorsTargetPath = path.join(REGISTRY_PATH, \"colors\");\n\trimraf.sync(colorsTargetPath);\n\tif (!fs.existsSync(colorsTargetPath)) {\n\t\tfs.mkdirSync(colorsTargetPath, { recursive: true });\n\t}\n\n\tconst colorsData = getColorsData();\n\n\twriteFileWithDirs(\n\t\tpath.join(colorsTargetPath, \"index.json\"),\n\t\tJSON.stringify(colorsData, null, \"\\t\"),\n\t\t\"utf-8\"\n\t);\n\n\t// ----------------------------------------------------------------------------\n\t// Build registry/colors/[theme].json\n\t// ----------------------------------------------------------------------------\n\n\tfor (const theme of THEMES) {\n\t\twriteFileWithDirs(\n\t\t\tpath.join(REGISTRY_PATH, \"colors\", `${theme.name}.json`),\n\t\t\tJSON.stringify(theme, null, \"\\t\"),\n\t\t\t\"utf-8\"\n\t\t);\n\t}\n\n\t// ----------------------------------------------------------------------------\n\t// Build static/schema.json\n\t// ----------------------------------------------------------------------------\n\tlog(\"📋 Writing schema files...\");\n\tconst componentsJSON = toJSONSchema(componentsJsonSchema);\n\twriteFileWithDirs(\n\t\tpath.resolve(\"static\", \"schema.json\"),\n\t\tJSON.stringify(componentsJSON, null, \"\\t\")\n\t);\n\n\tconst SCHEMA_DIR = path.resolve(\"static\", \"schema\");\n\twriteFileWithDirs(\n\t\tpath.resolve(SCHEMA_DIR, \"registry.json\"),\n\t\tJSON.stringify(toJSONSchema(registrySchema), null, \"\\t\")\n\t);\n\n\twriteFileWithDirs(\n\t\tpath.resolve(SCHEMA_DIR, \"registry-item.json\"),\n\t\tJSON.stringify(toJSONSchema(registryItemSchema), null, \"\\t\")\n\t);\n\n\tlog(\"🎉 Done!\");\n}\n\nconst CN_CLASS_SELECTOR = /^\\.(cn-[\\w-]+)$/;\n\n/**\n * Parse style-<style>.css and extract .cn-* class rules with their @apply values.\n * Returns a map of cn-class-name -> tailwind utility classes string.\n */\nfunction parseStyleCss(css: string): Record<string, string> {\n\tconst styles: Record<string, string> = {};\n\tconst root = postcss.parse(css);\n\n\troot.walkRules((rule) => {\n\t\tfor (const selector of rule.selectors) {\n\t\t\tconst match = selector.trim().match(CN_CLASS_SELECTOR);\n\t\t\tif (!match) continue;\n\n\t\t\tconst className = match[1];\n\t\t\tconst applyValues: string[] = [];\n\n\t\t\trule.walkAtRules(\"apply\", (atRule) => {\n\t\t\t\tapplyValues.push(atRule.params.trim());\n\t\t\t});\n\n\t\t\tif (applyValues.length > 0) {\n\t\t\t\tstyles[className] = applyValues.join(\" \");\n\t\t\t}\n\t\t}\n\t});\n\n\treturn styles;\n}\n\nfunction transformContentWithStyle(content: string, styleMap: Record<string, string>): string {\n\t// Replace longer class names first to avoid \"cn-foo\" matching inside \"cn-foo-bar\"\n\t// Use negative lookahead (?![-\\\\w]) so we only match whole class names, not substrings\n\tconst entries = Object.entries(styleMap).sort(([a], [b]) => b.length - a.length);\n\tfor (const [className, classes] of entries) {\n\t\t// don't replace cn-menu-translucent or cn-menu-target\n\t\t// they anchor the menu styles for transform-menu\n\t\tif ([\"cn-menu-translucent\", \"cn-menu-target\"].includes(className)) continue;\n\t\tconst escaped = className.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n\t\tconst regex = new RegExp(escaped + \"(?![\\\\w-])\", \"g\");\n\t\tcontent = content.replace(regex, classes);\n\t}\n\treturn content;\n}\n\nconst TEXT_EXTENSIONS = new Set([\".svelte\", \".ts\", \".svelte.ts\"]);\n\nasync function rewriteRegistryForStyle(\n\tregistry: Awaited<ReturnType<typeof buildRegistry>>,\n\tstyle: PresetConfig[\"style\"],\n\tstyleTempDir: string\n): Promise<Awaited<ReturnType<typeof buildRegistry>>> {\n\tconst styleCssPath = path.resolve(INTERNAL_REGISTRY_PATH, \"styles\", `style-${style}.css`);\n\tconst styleCss = fs.readFileSync(styleCssPath, \"utf8\");\n\tconst styleMap = parseStyleCss(styleCss);\n\n\tconst styleItems: Awaited<ReturnType<typeof buildRegistry>> = [];\n\n\tfor (const item of registry) {\n\t\tif (!item.files?.length) {\n\t\t\tstyleItems.push(item);\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst styleFiles: typeof item.files = [];\n\n\t\tfor (const file of item.files) {\n\t\t\tconst srcPath = path.resolve(file.path);\n\t\t\tconst tempPath = path.join(styleTempDir, file.path);\n\t\t\tconst tempDir = path.dirname(tempPath);\n\n\t\t\tfs.mkdirSync(tempDir, { recursive: true });\n\n\t\t\tconst ext = path.extname(file.path);\n\t\t\tif (TEXT_EXTENSIONS.has(ext)) {\n\t\t\t\tlet content = fs.readFileSync(srcPath, \"utf8\");\n\t\t\t\tcontent = transformContentWithStyle(content, styleMap);\n\t\t\t\tfs.writeFileSync(tempPath, content, \"utf8\");\n\t\t\t} else {\n\t\t\t\tfs.copyFileSync(srcPath, tempPath);\n\t\t\t}\n\n\t\t\tstyleFiles.push({\n\t\t\t\t...file,\n\t\t\t\tpath: path.relative(process.cwd(), tempPath),\n\t\t\t});\n\t\t}\n\n\t\tstyleItems.push({ ...item, files: styleFiles });\n\t}\n\n\treturn styleItems;\n}\n\nfunction validateRegistry(registry: Awaited<ReturnType<typeof buildRegistry>>) {\n\tconst selfReferenced = registry.filter(\n\t\t(item) => item.registryDependencies?.includes(item.name) ?? false\n\t);\n\tconst selfReferenceError = selfReferenced\n\t\t.map((item) => `Registry item '${item.name}' depends on itself`)\n\t\t.join(\"\\n\");\n\tif (selfReferenceError) {\n\t\tthrow new Error(selfReferenceError);\n\t}\n}\n\nasync function buildRegistryJson(\n\tregistry: Awaited<ReturnType<typeof buildRegistry>>,\n\tstyle: PresetConfig[\"style\"]\n) {\n\t// ----------------------------------------------------------------------------\n\t// Build `registry.json` file.\n\t// ----------------------------------------------------------------------------\n\tconst result = registrySchema.parse(\n\t\t{\n\t\t\t$schema: \"./static/schema/registry.json\",\n\t\t\tname: `shadcn-svelte/${style}`,\n\t\t\thomepage: \"https://shadcn-svelte.com\",\n\t\t\taliases: {\n\t\t\t\tlib: \"$lib/registry/lib\",\n\t\t\t\tui: \"$lib/registry/ui\",\n\t\t\t\tcomponents: \"./components\",\n\t\t\t\thooks: \"$lib/registry/hooks\",\n\t\t\t\tutils: \"$lib/utils\",\n\t\t\t},\n\t\t\t// TODO: remove when moving from `next` to `latest`\n\t\t\toverrideDependencies: [\"vaul-svelte@next\"],\n\t\t\titems: registry,\n\t\t} as Registry,\n\t\t// maintains the schema defined property order\n\t\t{ jitless: true }\n\t);\n\n\tconst ITEM_TYPES: RegistryItemType[] = [\n\t\t\"registry:ui\",\n\t\t\"registry:hook\",\n\t\t\"registry:style\",\n\t\t\"registry:lib\",\n\t\t\"registry:block\",\n\t\t\"registry:font\",\n\t];\n\tconst filteredItems = result.items.filter((item) => ITEM_TYPES.includes(item.type));\n\tconst registryJsonPath = path.resolve(`registry-${style}.json`);\n\n\tconst registryJson = JSON.stringify({ ...result, items: filteredItems }, null, \"\\t\");\n\tconst formatted = await prettier.format(registryJson, {\n\t\t...prettierConfig,\n\t\tfilepath: registryJsonPath,\n\t});\n\tfs.writeFileSync(registryJsonPath, formatted, \"utf8\");\n}\n\nfunction runRegistryBuild(style: PresetConfig[\"style\"]) {\n\tconst cwd = process.cwd();\n\tconst registryJsonPath = path.resolve(cwd, `registry-${style}.json`);\n\tconst outputPath = path.resolve(cwd, \"static\", \"registry\", \"styles\", style);\n\tconst workspaceCliPath = path.resolve(cwd, \"..\", \"packages\", \"cli\", \"dist\", \"index.mjs\");\n\n\texecSync(\n\t\t`node \"${workspaceCliPath}\" registry build \"${registryJsonPath}\" --output \"${outputPath}\" -c \"${cwd}\"`,\n\t\t{\n\t\t\tcwd,\n\t\t\tstdio: [\"pipe\", \"pipe\", \"inherit\"],\n\t\t}\n\t);\n}\n\nif (process.argv.includes(\"build-registry\")) {\n\tbuild();\n}\n"
  },
  {
    "path": "docs/scripts/pull-styles.ts",
    "content": "import fs from \"node:fs/promises\";\nimport prettier from \"prettier\";\n\nconst styles = [\"vega\", \"nova\", \"maia\", \"lyra\", \"mira\"];\n\nconst prettierConfig = await prettier.resolveConfig(import.meta.url);\nif (!prettierConfig) throw new Error(\"Failed to resolve prettier config.\");\n\nasync function pullStyles() {\n\tawait Promise.all(\n\t\tstyles.map(async (style) => {\n\t\t\tconsole.log(`Pulling upstream style ${style}...`);\n\t\t\tconst stylePath = `https://raw.githubusercontent.com/shadcn-ui/ui/refs/heads/main/apps/v4/registry/styles/style-${style}.css`;\n\t\t\tconst styleContent = await fetch(stylePath).then((res) => res.text());\n\t\t\tconst styleFilePath = `src/lib/registry/styles/style-${style}.css`;\n\n\t\t\tconst formatted = await prettier.format(styleContent, {\n\t\t\t\tparser: \"css\",\n\t\t\t\tfilepath: styleFilePath,\n\t\t\t\t...prettierConfig,\n\t\t\t});\n\n\t\t\tawait fs.writeFile(styleFilePath, formatted);\n\t\t\tconsole.log(`Wrote style ${style} to ${styleFilePath}`);\n\t\t})\n\t);\n}\n\npullStyles();\n"
  },
  {
    "path": "docs/scripts/registry.ts",
    "content": "import fs from \"node:fs\";\nimport path from \"node:path\";\nimport * as acorn from \"acorn\";\nimport { tsPlugin } from \"@sveltejs/acorn-typescript\";\nimport { walk, type Node } from \"estree-walker\";\nimport * as svelte from \"svelte/compiler\";\nimport { registryItemSchema, type Registry } from \"shadcn-svelte/schema\";\nimport { fonts } from \"../src/lib/registry/fonts.js\";\n\nconst REGISTRY_DEPENDENCY = \"$lib/\";\nconst UTILS_PATH = \"$lib/utils.js\";\n\nconst tsParser = acorn.Parser.extend(tsPlugin());\n\ntype RegistryItems = Registry[\"items\"];\ntype RegistryItemFiles = Registry[\"items\"][number][\"files\"];\n\nexport async function buildRegistry(): Promise<RegistryItems> {\n\tconst registryRootPath = path.resolve(\"src\", \"lib\", \"registry\");\n\n\tconst paths = {\n\t\tui: path.resolve(registryRootPath, \"ui\"),\n\t\texamples: path.resolve(registryRootPath, \"examples\"),\n\t\tblocks: path.resolve(registryRootPath, \"blocks\"),\n\t\thooks: path.resolve(registryRootPath, \"hooks\"),\n\t\tlib: path.resolve(registryRootPath, \"lib\"),\n\t\tfonts: path.resolve(registryRootPath, \"fonts.ts\"),\n\t};\n\n\treturn (\n\t\tawait Promise.all([\n\t\t\tcrawlUI(paths.ui),\n\t\t\tcrawlExamples(paths.examples),\n\t\t\tcrawlBlocks(paths.blocks),\n\t\t\tcrawlHooks(paths.hooks),\n\t\t\tcrawlLib(paths.lib),\n\t\t\tassembleFonts(),\n\t\t])\n\t).flat();\n}\n\nasync function crawlUI(rootPath: string): Promise<RegistryItems> {\n\tconst dir = fs.readdirSync(rootPath, { recursive: true, withFileTypes: true });\n\tconst items: RegistryItems = [];\n\n\tfor (const dirent of dir) {\n\t\tif (!dirent.isDirectory()) continue;\n\n\t\tconst componentPath = path.resolve(rootPath, dirent.name);\n\t\tconst ui = await buildUIRegistry(componentPath, dirent.name);\n\t\titems.push(ui);\n\t}\n\n\treturn items;\n}\n\nasync function buildUIRegistry(\n\tcomponentPath: string,\n\tcomponentName: string\n): Promise<RegistryItems[number]> {\n\tconst dir = fs.readdirSync(componentPath, {\n\t\twithFileTypes: true,\n\t});\n\n\tconst files: RegistryItemFiles = [];\n\tconst registryDependencies = new Set<string>();\n\n\tlet meta = {};\n\n\tfor (const dirent of dir) {\n\t\tif (!dirent.isFile()) continue;\n\t\tconst filepath = path.join(componentPath, dirent.name);\n\t\tconst relativePath = path.relative(process.cwd(), filepath);\n\t\tconst source = fs.readFileSync(filepath, { encoding: \"utf8\" });\n\n\t\tif (dirent.name === \"meta.json\") {\n\t\t\tmeta = registryItemSchema.parse(JSON.parse(source));\n\t\t\tcontinue;\n\t\t}\n\n\t\tfiles.push({ path: relativePath, type: \"registry:file\" });\n\n\t\tconst deps = await getFileDependencies(filepath, source);\n\t\tif (!deps) continue;\n\n\t\tdeps.registryDependencies.forEach((dep) => registryDependencies.add(dep));\n\t}\n\n\treturn {\n\t\t...meta,\n\t\ttype: \"registry:ui\",\n\t\tfiles,\n\t\tname: componentName,\n\t\tregistryDependencies: Array.from(registryDependencies),\n\t} satisfies RegistryItems[number];\n}\n\nasync function crawlExamples(rootPath: string): Promise<RegistryItems> {\n\tconst dir = fs.readdirSync(rootPath, { withFileTypes: true });\n\tconst items: RegistryItems = [];\n\n\tfor (const dirent of dir) {\n\t\tif (!dirent.name.endsWith(\".svelte\") || !dirent.isFile()) continue;\n\n\t\tconst [name] = dirent.name.split(\".svelte\");\n\n\t\tconst filepath = path.join(rootPath, dirent.name);\n\t\tconst source = fs.readFileSync(filepath, { encoding: \"utf8\" });\n\t\tconst relativePath = path.relative(process.cwd(), filepath);\n\n\t\tconst { registryDependencies } = await getFileDependencies(filepath, source);\n\n\t\titems.push({\n\t\t\tname,\n\t\t\ttype: \"registry:example\",\n\t\t\tfiles: [{ path: relativePath, type: \"registry:component\" }],\n\t\t\tregistryDependencies: Array.from(registryDependencies),\n\t\t});\n\t}\n\n\treturn items;\n}\n\nasync function buildBlockRegistry(\n\tblockPath: string,\n\tblockName: string\n): Promise<RegistryItems[number]> {\n\tconst dir = fs.readdirSync(blockPath, { withFileTypes: true, recursive: true });\n\tconst files: RegistryItemFiles = [];\n\tconst registryDependencies = new Set<string>();\n\n\tconst pagesNames = [\"+page.svelte\"];\n\tconst fileNames = [\"data.json\", \"data.ts\"];\n\tfor (const dirent of dir) {\n\t\tif (!dirent.isFile()) continue;\n\t\tconst isPage = pagesNames.includes(dirent.name);\n\t\tconst isFile = fileNames.includes(dirent.name);\n\n\t\tconst type = isPage || isFile ? \"registry:page\" : \"registry:component\";\n\n\t\t// TODO: fix\n\t\tconst compPath =\n\t\t\tisPage || isFile\n\t\t\t\t? dirent.name\n\t\t\t\t: path.join(path.basename(dirent.parentPath), dirent.name);\n\t\tconst filepath = path.join(blockPath, compPath);\n\t\tconst relativePath = path.relative(process.cwd(), filepath);\n\t\tconst source = fs.readFileSync(filepath, { encoding: \"utf8\" });\n\n\t\tfiles.push({ path: relativePath, type });\n\n\t\tconst deps = await getFileDependencies(filepath, source);\n\t\tif (!deps) continue;\n\n\t\tdeps.registryDependencies.forEach((dep) => registryDependencies.add(dep));\n\t}\n\n\treturn {\n\t\ttype: \"registry:block\",\n\t\tfiles,\n\t\tname: blockName,\n\t\tregistryDependencies: Array.from(registryDependencies),\n\t} satisfies RegistryItems[number];\n}\n\nasync function crawlBlocks(rootPath: string): Promise<RegistryItems> {\n\tconst dir = fs.readdirSync(rootPath, { withFileTypes: true });\n\tconst items: RegistryItems = [];\n\n\tfor (const dirent of dir) {\n\t\tconst filepath = path.join(rootPath, dirent.name);\n\t\tif (!dirent.isFile()) {\n\t\t\tconst result = await buildBlockRegistry(filepath, dirent.name);\n\t\t\titems.push(result);\n\t\t\tcontinue;\n\t\t}\n\t\tif (!dirent.name.endsWith(\".svelte\") || !dirent.isFile()) continue;\n\n\t\tconst [name] = dirent.name.split(\".svelte\");\n\n\t\tconst source = fs.readFileSync(filepath, { encoding: \"utf8\" });\n\t\tconst relativePath = path.relative(process.cwd(), filepath);\n\n\t\tconst { registryDependencies } = await getFileDependencies(filepath, source);\n\n\t\titems.push({\n\t\t\tname,\n\t\t\ttype: \"registry:block\",\n\t\t\tfiles: [{ path: relativePath, type: \"registry:component\" }],\n\t\t\tregistryDependencies: Array.from(registryDependencies),\n\t\t});\n\t}\n\n\treturn items;\n}\n\nasync function crawlLib(rootPath: string): Promise<RegistryItems> {\n\tconst dir = fs.readdirSync(rootPath, { withFileTypes: true });\n\tconst items: RegistryItems = [];\n\tfor (const dirent of dir) {\n\t\tif (!dirent.isFile()) continue;\n\n\t\tconst [name] = dirent.name.split(\".ts\");\n\n\t\tconst filepath = path.join(rootPath, dirent.name);\n\t\tconst source = fs.readFileSync(filepath, { encoding: \"utf8\" });\n\t\tconst relativePath = path.relative(process.cwd(), filepath);\n\n\t\tconst { registryDependencies } = await getFileDependencies(filepath, source);\n\n\t\titems.push({\n\t\t\tname,\n\t\t\ttype: \"registry:lib\",\n\t\t\tfiles: [{ path: relativePath, type: \"registry:lib\" }],\n\t\t\tregistryDependencies: Array.from(registryDependencies),\n\t\t});\n\t}\n\n\treturn items;\n}\n\nasync function assembleFonts(): Promise<RegistryItems> {\n\tconst items: RegistryItems = [];\n\n\tfor (const font of fonts) {\n\t\titems.push({\n\t\t\tname: `font-${font.name.replace(\"font-\", \"\")}`,\n\t\t\ttype: \"registry:font\",\n\t\t\tfont: font.font,\n\t\t\tfiles: [],\n\t\t\tregistryDependencies: [],\n\t\t});\n\t}\n\n\treturn items;\n}\n\nasync function crawlHooks(rootPath: string): Promise<RegistryItems> {\n\tconst dir = fs.readdirSync(rootPath, { withFileTypes: true });\n\tconst items: RegistryItems = [];\n\n\tfor (const dirent of dir) {\n\t\tif (!dirent.isFile()) continue;\n\n\t\tconst [name] = dirent.name.split(\".svelte.ts\");\n\n\t\tconst filepath = path.join(rootPath, dirent.name);\n\t\tconst source = fs.readFileSync(filepath, { encoding: \"utf8\" });\n\t\tconst relativePath = path.relative(process.cwd(), filepath);\n\n\t\tconst { registryDependencies } = await getFileDependencies(filepath, source);\n\n\t\titems.push({\n\t\t\tname,\n\t\t\ttype: \"registry:hook\",\n\t\t\tfiles: [{ path: relativePath, type: \"registry:hook\" }],\n\t\t\tregistryDependencies: Array.from(registryDependencies),\n\t\t});\n\t}\n\n\treturn items;\n}\n\nasync function getFileDependencies(\n\tfilename: string,\n\tcontent: string\n): Promise<{ registryDependencies: Set<string> }> {\n\tlet ast: unknown;\n\tlet moduleAst: unknown;\n\n\tif (filename.endsWith(\".svelte\")) {\n\t\tconst { code } = await svelte.preprocess(content, [], { filename });\n\t\tconst result = svelte.parse(code, { filename });\n\t\tast = result.instance;\n\t\tif (result.module) {\n\t\t\tmoduleAst = result.module;\n\t\t}\n\t} else {\n\t\tast = tsParser.parse(content, { ecmaVersion: \"latest\", sourceType: \"module\" });\n\t}\n\n\tconst registryDependencies = new Set<string>();\n\n\tconst enter = (node: Node) => {\n\t\tif (node.type === \"ImportDeclaration\") {\n\t\t\tconst source = node.source.value as string;\n\n\t\t\tif (source.startsWith(REGISTRY_DEPENDENCY) && source !== UTILS_PATH) {\n\t\t\t\tif (source.includes(\"ui\")) {\n\t\t\t\t\tconst component = source.split(\"/\").at(-2)!;\n\t\t\t\t\tregistryDependencies.add(component);\n\t\t\t\t} else if (source.includes(\"hook\")) {\n\t\t\t\t\tconst hook = source.split(\"/\").at(-1)!.split(\".\")[0];\n\t\t\t\t\tregistryDependencies.add(hook);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t// @ts-expect-error yea, stfu\n\twalk(ast, { enter });\n\n\tif (moduleAst) {\n\t\t// @ts-expect-error yea, stfu x2\n\t\twalk(moduleAst, { enter });\n\t}\n\n\treturn { registryDependencies };\n}\n"
  },
  {
    "path": "docs/scripts/tsconfig.json",
    "content": "{\n\t\"extends\": \"../.svelte-kit/tsconfig.json\",\n\t\"compilerOptions\": {\n\t\t\"verbatimModuleSyntax\": true,\n\t\t\"erasableSyntaxOnly\": true,\n\t\t\"skipLibCheck\": true,\n\t\t\"strict\": true,\n\t\t\"noEmit\": true\n\t},\n\t\"include\": [\".\", \"../.velite/**/*\", \"../velite.config.js\"]\n}\n"
  },
  {
    "path": "docs/scripts/velite/velite-update-json.ts",
    "content": "import { updateJsonImport } from \"./velite-utils.js\";\n\nawait updateJsonImport();\n"
  },
  {
    "path": "docs/scripts/velite/velite-utils.ts",
    "content": "import { readFile, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\n\nconst __dirname = fileURLToPath(new URL(\".\", import.meta.url));\nexport const veliteIndexPath = join(__dirname, \"../../.velite/index.js\");\n\nexport async function updateJsonImport(onUpdatingChange?: (isUpdating: boolean) => void) {\n\tonUpdatingChange?.(true);\n\n\tconst data = await readFile(veliteIndexPath, \"utf8\").catch((err) => {\n\t\tconsole.error(\"Error reading file:\", err);\n\t\tonUpdatingChange?.(false);\n\t});\n\tif (!data) return;\n\tif (data.includes(\"with { type: 'json' }\")) return;\n\n\tconst updatedContent = data.replaceAll(\".json'\", \".json' with { type: 'json' }\");\n\tif (updatedContent === data) {\n\t\tonUpdatingChange?.(false);\n\t\treturn;\n\t}\n\n\tawait writeFile(veliteIndexPath, updatedContent, \"utf8\").catch((err) => {\n\t\tconsole.error(\"Error writing file:\", err);\n\t});\n\tonUpdatingChange?.(false);\n}\n"
  },
  {
    "path": "docs/scripts/velite/velite-watch-output.ts",
    "content": "import { watch } from \"node:fs\";\nimport { updateJsonImport, veliteIndexPath } from \"./velite-utils.js\";\n\n// Configuration\nlet isUpdatingIndex = false;\n\nwatch(veliteIndexPath, async (eventType, filename) => {\n\tif (eventType === \"change\" && !isUpdatingIndex) {\n\t\tconsole.info(`File ${filename} has been modified`);\n\t\tupdateJsonImport((isUpdating) => (isUpdatingIndex = isUpdating));\n\t}\n});\n"
  },
  {
    "path": "docs/src/app.css",
    "content": "@import \"tailwindcss\";\n@import \"tw-animate-css\";\n\n@import \"./lib/registry/styles/style-vega.css\" layer(base);\n@import \"./lib/registry/styles/style-nova.css\" layer(base);\n@import \"./lib/registry/styles/style-lyra.css\" layer(base);\n@import \"./lib/registry/styles/style-maia.css\" layer(base);\n@import \"./lib/registry/styles/style-mira.css\" layer(base);\n\n@import \"@fontsource-variable/geist/index.css\";\n@import \"@fontsource-variable/inter/index.css\";\n@import \"@fontsource-variable/noto-sans/index.css\";\n@import \"@fontsource-variable/nunito-sans/index.css\";\n@import \"@fontsource-variable/figtree/index.css\";\n@import \"@fontsource-variable/roboto/index.css\";\n@import \"@fontsource-variable/raleway/index.css\";\n@import \"@fontsource-variable/dm-sans/index.css\";\n@import \"@fontsource-variable/public-sans/index.css\";\n@import \"@fontsource-variable/outfit/index.css\";\n@import \"@fontsource-variable/jetbrains-mono/index.css\";\n@import \"@fontsource-variable/geist-mono/index.css\";\n@import \"@fontsource-variable/noto-serif/index.css\";\n@import \"@fontsource-variable/roboto-slab/index.css\";\n@import \"@fontsource-variable/merriweather/index.css\";\n@import \"@fontsource-variable/lora/index.css\";\n@import \"@fontsource-variable/playfair-display/index.css\";\n\n@custom-variant style-vega (&:where(.style-vega *));\n@custom-variant style-nova (&:where(.style-nova *));\n@custom-variant style-lyra (&:where(.style-lyra *));\n@custom-variant style-maia (&:where(.style-maia *));\n@custom-variant style-mira (&:where(.style-mira *));\n\n@custom-variant dark (&:is(.dark *));\n@custom-variant fixed (&:is(.layout-fixed *));\n\n@theme inline {\n\t--font-sans: var(--font-sans);\n\t--font-mono: var(--font-mono);\n\t--radius: 0.625rem;\n\t--svelte-orange: oklch(0.6385 0.1991 34.99);\n\t--breakpoint-3xl: 1600px;\n\t--breakpoint-4xl: 2000px;\n\t--radius-sm: calc(var(--radius) - 4px);\n\t--radius-md: calc(var(--radius) - 2px);\n\t--radius-lg: var(--radius);\n\t--radius-xl: calc(var(--radius) + 4px);\n\t--radius-2xl: calc(var(--radius) + 8px);\n\t--radius-3xl: calc(var(--radius) + 12px);\n\t--radius-4xl: calc(var(--radius) + 16px);\n\t--color-background: var(--background);\n\t--color-foreground: var(--foreground);\n\t--color-card: var(--card);\n\t--color-card-foreground: var(--card-foreground);\n\t--color-popover: var(--popover);\n\t--color-popover-foreground: var(--popover-foreground);\n\t--color-primary: var(--primary);\n\t--color-primary-foreground: var(--primary-foreground);\n\t--color-secondary: var(--secondary);\n\t--color-secondary-foreground: var(--secondary-foreground);\n\t--color-muted: var(--muted);\n\t--color-muted-foreground: var(--muted-foreground);\n\t--color-accent: var(--accent);\n\t--color-accent-foreground: var(--accent-foreground);\n\t--color-destructive: var(--destructive);\n\t--color-destructive-foreground: var(--destructive-foreground);\n\t--color-border: var(--border);\n\t--color-input: var(--input);\n\t--color-ring: var(--ring);\n\t--color-chart-1: var(--chart-1);\n\t--color-chart-2: var(--chart-2);\n\t--color-chart-3: var(--chart-3);\n\t--color-chart-4: var(--chart-4);\n\t--color-chart-5: var(--chart-5);\n\t--color-sidebar: var(--sidebar);\n\t--color-sidebar-foreground: var(--sidebar-foreground);\n\t--color-sidebar-primary: var(--sidebar-primary);\n\t--color-sidebar-primary-foreground: var(--sidebar-primary-foreground);\n\t--color-sidebar-accent: var(--sidebar-accent);\n\t--color-sidebar-accent-foreground: var(--sidebar-accent-foreground);\n\t--color-sidebar-border: var(--sidebar-border);\n\t--color-sidebar-ring: var(--sidebar-ring);\n\t--color-surface: var(--surface);\n\t--color-surface-foreground: var(--surface-foreground);\n\t--color-code: var(--code);\n\t--color-code-foreground: var(--code-foreground);\n\t--color-code-highlight: var(--code-highlight);\n\t--color-code-number: var(--code-number);\n\t--color-selection: var(--selection);\n\t--color-selection-foreground: var(--selection-foreground);\n}\n\n:root {\n\t--font-sans: \"Geist Variable\", sans-serif;\n\t--font-mono: \"Geist Mono Variable\", monospace;\n\t--background: oklch(1 0 0);\n\t--foreground: oklch(0.145 0 0);\n\t--card: oklch(1 0 0);\n\t--card-foreground: oklch(0.145 0 0);\n\t--popover: oklch(1 0 0);\n\t--popover-foreground: oklch(0.145 0 0);\n\t--primary: oklch(0.205 0 0);\n\t--primary-foreground: oklch(0.985 0 0);\n\t--secondary: oklch(0.97 0 0);\n\t--secondary-foreground: oklch(0.205 0 0);\n\t--muted: oklch(0.97 0 0);\n\t--muted-foreground: oklch(0.556 0 0);\n\t--accent: oklch(0.97 0 0);\n\t--accent-foreground: oklch(0.205 0 0);\n\t--destructive: oklch(0.58 0.22 27);\n\t--border: oklch(0.922 0 0);\n\t--input: oklch(0.922 0 0);\n\t--ring: oklch(0.708 0 0);\n\t--chart-1: var(--color-blue-300);\n\t--chart-2: var(--color-blue-500);\n\t--chart-3: var(--color-blue-600);\n\t--chart-4: var(--color-blue-700);\n\t--chart-5: var(--color-blue-800);\n\t--sidebar: oklch(0.985 0 0);\n\t--sidebar-foreground: oklch(0.145 0 0);\n\t--sidebar-primary: oklch(0.205 0 0);\n\t--sidebar-primary-foreground: oklch(0.985 0 0);\n\t--sidebar-accent: oklch(0.97 0 0);\n\t--sidebar-accent-foreground: oklch(0.205 0 0);\n\t--sidebar-border: oklch(0.922 0 0);\n\t--sidebar-ring: oklch(0.708 0 0);\n\t--surface: oklch(0.98 0 0);\n\t--surface-foreground: var(--foreground);\n\t--code: var(--surface);\n\t--code-foreground: var(--surface-foreground);\n\t--code-highlight: oklch(0.96 0 0);\n\t--code-number: oklch(0.56 0 0);\n\t--selection: oklch(0.145 0 0);\n\t--selection-foreground: oklch(1 0 0);\n}\n\n.dark {\n\t--background: oklch(0.145 0 0);\n\t--foreground: oklch(0.985 0 0);\n\t--card: oklch(0.205 0 0);\n\t--card-foreground: oklch(0.985 0 0);\n\t--popover: oklch(0.205 0 0);\n\t--popover-foreground: oklch(0.985 0 0);\n\t--primary: oklch(0.87 0 0);\n\t--primary-foreground: oklch(0.205 0 0);\n\t--secondary: oklch(0.269 0 0);\n\t--secondary-foreground: oklch(0.985 0 0);\n\t--muted: oklch(0.269 0 0);\n\t--muted-foreground: oklch(0.708 0 0);\n\t--accent: oklch(0.371 0 0);\n\t--accent-foreground: oklch(0.985 0 0);\n\t--destructive: oklch(0.704 0.191 22.216);\n\t--border: oklch(1 0 0 / 10%);\n\t--input: oklch(1 0 0 / 15%);\n\t--ring: oklch(0.556 0 0);\n\t--chart-1: var(--color-blue-300);\n\t--chart-2: var(--color-blue-500);\n\t--chart-3: var(--color-blue-600);\n\t--chart-4: var(--color-blue-700);\n\t--chart-5: var(--color-blue-800);\n\t--sidebar: oklch(0.205 0 0);\n\t--sidebar-foreground: oklch(0.985 0 0);\n\t--sidebar-primary: oklch(0.488 0.243 264.376);\n\t--sidebar-primary-foreground: oklch(0.985 0 0);\n\t--sidebar-accent: oklch(0.269 0 0);\n\t--sidebar-accent-foreground: oklch(0.985 0 0);\n\t--sidebar-border: oklch(1 0 0 / 10%);\n\t--sidebar-ring: oklch(0.556 0 0);\n\t--surface: oklch(0.2 0 0);\n\t--surface-foreground: oklch(0.708 0 0);\n\t--code: var(--surface);\n\t--code-foreground: var(--surface-foreground);\n\t--code-highlight: oklch(0.27 0 0);\n\t--code-number: oklch(0.72 0 0);\n\t--selection: oklch(0.922 0 0);\n\t--selection-foreground: oklch(0.205 0 0);\n}\n\n@layer base {\n\t* {\n\t\t@apply border-border outline-ring/50;\n\t}\n\n\t::selection {\n\t\t@apply bg-selection text-selection-foreground;\n\t}\n\n\thtml {\n\t\t@apply overscroll-none scroll-smooth;\n\t}\n\n\tbody {\n\t\tfont-synthesis-weight: none;\n\t\ttext-rendering: optimizeLegibility;\n\t}\n\n\t@supports (font: -apple-system-body) and (-webkit-appearance: none) {\n\t\t[data-wrapper] {\n\t\t\t@apply min-[1800px]:border-t;\n\t\t}\n\t}\n\n\ta:active,\n\tbutton:active {\n\t\t@apply opacity-60 md:opacity-100;\n\t}\n}\n\n/* Custom variants */\n@custom-variant data-open {\n\t&:where([data-state=\"open\"]),\n\t&:where([data-open]:not([data-open=\"false\"])) {\n\t\t@slot;\n\t}\n}\n\n@custom-variant data-closed {\n\t&:where([data-state=\"closed\"]),\n\t&:where([data-closed]:not([data-closed=\"false\"])) {\n\t\t@slot;\n\t}\n}\n\n@custom-variant data-checked {\n\t&:where([data-state=\"checked\"]),\n\t&:where([data-checked]:not([data-checked=\"false\"])) {\n\t\t@slot;\n\t}\n}\n\n@custom-variant data-unchecked {\n\t&:where([data-state=\"unchecked\"]),\n\t&:where([data-unchecked]:not([data-unchecked=\"false\"])) {\n\t\t@slot;\n\t}\n}\n\n@custom-variant data-selected {\n\t&:where([data-selected]) {\n\t\t@slot;\n\t}\n}\n\n@custom-variant data-disabled {\n\t&:where([data-disabled=\"true\"]),\n\t&:where([data-disabled]:not([data-disabled=\"false\"])) {\n\t\t@slot;\n\t}\n}\n\n@custom-variant data-active {\n\t&:where([data-state=\"active\"]),\n\t&:where([data-active]:not([data-active=\"false\"])) {\n\t\t@slot;\n\t}\n}\n\n@custom-variant data-horizontal {\n\t&:where([data-orientation=\"horizontal\"]) {\n\t\t@slot;\n\t}\n}\n\n@custom-variant data-vertical {\n\t&:where([data-orientation=\"vertical\"]) {\n\t\t@slot;\n\t}\n}\n\n@utility no-scrollbar {\n\t-ms-overflow-style: none;\n\tscrollbar-width: none;\n\n\t&::-webkit-scrollbar {\n\t\tdisplay: none;\n\t}\n}\n\n@utility border-grid {\n\t@apply border-border/50 dark:border-border;\n}\n\n@utility section-soft {\n\t@apply from-background to-surface/40 dark:bg-background 3xl:fixed:bg-none bg-gradient-to-b;\n}\n\n@utility theme-container {\n\t@apply font-sans;\n}\n\n@utility container-wrapper {\n\t@apply 3xl:fixed:max-w-[calc(var(--breakpoint-2xl)+2rem)] mx-auto w-full px-2;\n}\n\n@utility container {\n\t@apply 3xl:max-w-screen-2xl mx-auto max-w-[1400px] px-4 lg:px-8;\n}\n\n@utility no-scrollbar {\n\t-ms-overflow-style: none;\n\tscrollbar-width: none;\n\n\t&::-webkit-scrollbar {\n\t\tdisplay: none;\n\t}\n}\n\n@utility border-ghost {\n\t@apply after:border-border relative after:absolute after:inset-0 after:border after:mix-blend-darken dark:after:mix-blend-lighten;\n}\n\n@utility bg-svelte-orange {\n\tbackground-color: var(--svelte-orange);\n}\n\n@utility step {\n\tcounter-increment: step;\n\t@apply relative;\n\n\t&:before {\n\t\t@apply text-muted-foreground end-0 me-2 hidden size-7 items-center justify-center rounded-full text-center -indent-px font-mono text-sm font-medium md:absolute;\n\t\tcontent: counter(step);\n\t}\n}\n\n@utility extend-touch-target {\n\t@media (pointer: coarse) {\n\t\t@apply relative touch-manipulation after:absolute after:-inset-2;\n\t}\n}\n\n@layer components {\n\t.steps {\n\t\t&:first-child {\n\t\t\t@apply !mt-0;\n\t\t}\n\n\t\t&:first-child > *[aria-level=\"3\"]:first-child {\n\t\t\t@apply !mt-0;\n\t\t}\n\n\t\t> *[aria-level=\"3\"] {\n\t\t\t@apply !mt-16;\n\t\t}\n\n\t\t> *[aria-level=\"3\"] + p {\n\t\t\t@apply !mt-2;\n\t\t}\n\t}\n\n\t[data-rehype-pretty-code-figure] {\n\t\tbackground-color: var(--color-code);\n\t\tcolor: var(--color-code-foreground);\n\t\tborder-radius: var(--radius-lg);\n\t\tborder-width: 0px;\n\t\tborder-color: var(--border);\n\t\tmargin-top: calc(var(--spacing) * 6);\n\t\toverflow: hidden;\n\t\tfont-size: var(--text-sm);\n\t\toutline: none;\n\t\tposition: relative;\n\t\t@apply -mx-1;\n\n\t\t&:has([data-rehype-pretty-code-title]) [data-slot=\"copy-button\"] {\n\t\t\ttop: calc(var(--spacing) * 1.5) !important;\n\t\t}\n\t}\n\n\t[data-rehype-pretty-code-title] {\n\t\tborder-bottom: color-mix(in oklab, var(--border) 30%, transparent);\n\t\tborder-bottom-width: 1px;\n\t\tborder-bottom-style: solid;\n\t\tpadding-block: calc(var(--spacing) * 2.5);\n\t\tpadding-inline: calc(var(--spacing) * 4);\n\t\tfont-size: var(--text-sm);\n\t\tfont-family: var(--font-mono);\n\t\tcolor: var(--color-code-foreground);\n\t}\n\n\t[data-line-numbers] {\n\t\tdisplay: grid;\n\t\tmin-width: 100%;\n\t\twhite-space: pre;\n\t\tborder: 0;\n\t\tbackground: transparent;\n\t\tpadding: 0;\n\t\tcounter-reset: line;\n\t\tbox-decoration-break: clone;\n\t}\n\n\t[data-line-numbers] [data-line]::before {\n\t\tfont-size: var(--text-sm);\n\t\tcounter-increment: line;\n\t\tcontent: counter(line);\n\t\tdisplay: inline-block;\n\t\twidth: calc(var(--spacing) * 16);\n\t\tpadding-right: calc(var(--spacing) * 6);\n\t\ttext-align: right;\n\t\tcolor: var(--color-code-number);\n\t\tbackground-color: var(--color-code);\n\t\tposition: sticky;\n\t\tleft: 0;\n\t}\n\n\t[data-line-numbers] [data-highlighted-line][data-line]::before {\n\t\tbackground-color: var(--color-code-highlight);\n\t}\n\n\t[data-line] {\n\t\tpadding-top: calc(var(--spacing) * 0.5);\n\t\tpadding-bottom: calc(var(--spacing) * 0.5);\n\t\tmin-height: calc(var(--spacing) * 1);\n\t\twidth: 100%;\n\t\tdisplay: inline-block;\n\t}\n\n\t[data-line] span {\n\t\tcolor: var(--shiki-light);\n\n\t\t@variant dark {\n\t\t\tcolor: var(--shiki-dark) !important;\n\t\t}\n\t}\n\n\t[data-highlighted-line],\n\t[data-highlighted-chars] {\n\t\tposition: relative;\n\t\tbackground-color: var(--color-code-highlight);\n\t}\n\n\t[data-highlighted-line] {\n\t\t&:after {\n\t\t\tposition: absolute;\n\t\t\ttop: 0;\n\t\t\tleft: 0;\n\t\t\twidth: 2px;\n\t\t\theight: 100%;\n\t\t\tcontent: \"\";\n\t\t\tbackground-color: color-mix(in oklab, var(--muted-foreground) 50%, transparent);\n\t\t}\n\t}\n\n\t[data-highlighted-chars] {\n\t\tborder-radius: var(--radius-sm);\n\t\tpadding-inline: 0.3rem;\n\t\tpadding-block: 0.1rem;\n\t\tfont-family: var(--font-mono);\n\t\tfont-size: 0.8rem;\n\t}\n\n\t.mdsx code:not(pre code) {\n\t\t@apply bg-muted relative rounded-md px-[0.3rem] py-[0.2rem] font-mono text-[0.8rem] outline-none;\n\t}\n\n\t.super-debug {\n\t\tbackground-color: var(--color-zinc-950) !important;\n\t\tcolor: #fff8 !important;\n\t}\n\n\t.super-debug--pre {\n\t\tbackground-color: transparent !important;\n\t\tcolor: #fff8 !important;\n\t}\n\n\t.super-debug--code {\n\t\tbackground-color: transparent !important;\n\t}\n\n\t.super-debug--code .key {\n\t\tcolor: #fff8 !important;\n\t}\n\n\t.super-debug--code .undefined {\n\t\tcolor: #fff8 !important;\n\t}\n\n\t.super-debug--code .string {\n\t\tcolor: #fff8 !important;\n\t}\n\n\t.super-debug--code .number {\n\t\tcolor: #fff8 !important;\n\t}\n\n\t.super-debug--code .boolean {\n\t\tcolor: #fff8 !important;\n\t}\n\n\t.super-debug--code .boolean {\n\t\tcolor: #fff8 !important;\n\t}\n}\n"
  },
  {
    "path": "docs/src/app.d.ts",
    "content": "// See https://svelte.dev/docs/kit/types#app.d.ts\n// for information about these interfaces\nimport type { createHighlighterCore } from \"shiki/core\";\n\ndeclare global {\n\tnamespace App {\n\t\t// interface Error {}\n\t\t// interface Locals {}\n\t\t// interface PageData {}\n\t\t// interface PageState {}\n\t\t// interface Platform {}\n\t}\n\n\tvar __shikiHighlighter: Awaited<ReturnType<typeof createHighlighterCore>> | undefined;\n}\n\nexport {};\n"
  },
  {
    "path": "docs/src/app.html",
    "content": "<!doctype html>\n<html lang=\"en\">\n\t<head>\n\t\t<meta charset=\"utf-8\" />\n\t\t<link rel=\"icon\" href=\"%sveltekit.assets%/favicon.ico\" />\n\t\t<link rel=\"shortcut icon\" href=\"%sveltekit.assets%/favicon-16x16.png\" />\n\t\t<link rel=\"apple-touch-icon\" href=\"%sveltekit.assets%/apple-touch-icon.png\" />\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n\t\t<link rel=\"manifest\" href=\"%sveltekit.assets%/site.webmanifest\" />\n\t\t<script>\n\t\t\tconst USER_CONFIG_COOKIE_NAME = \"scn_user_config\";\n\t\t\tconst cookieMap = {};\n\t\t\tdocument.cookie.split(\";\").forEach((pair) => {\n\t\t\t\tconst [key, value] = pair.trim().split(\"=\");\n\t\t\t\tcookieMap[key] = value;\n\t\t\t});\n\t\t\tconst userConfigCookie = cookieMap[USER_CONFIG_COOKIE_NAME];\n\t\t\tif (userConfigCookie) {\n\t\t\t\ttry {\n\t\t\t\t\tconst userConfig = JSON.parse(decodeURIComponent(userConfigCookie));\n\t\t\t\t\tif (userConfig.activeTheme) {\n\t\t\t\t\t\tdocument.documentElement.classList.add(`theme-${userConfig.activeTheme}`);\n\t\t\t\t\t\tdocument.documentElement.setAttribute(\"data-theme\", userConfig.activeTheme);\n\t\t\t\t\t}\n\t\t\t\t\tif (userConfig.layout) {\n\t\t\t\t\t\tdocument.documentElement.classList.add(`layout-${userConfig.layout}`);\n\t\t\t\t\t}\n\t\t\t\t} catch (e) {\n\t\t\t\t\tconsole.error(\"Error parsing user config cookie:\", e);\n\t\t\t\t}\n\t\t\t}\n\t\t</script>\n\t\t<script\n\t\t\tdefer\n\t\t\tdata-domain=\"shadcn-svelte.com\"\n\t\t\tsrc=\"https://server.hj.run/js/script.js\"\n\t\t></script>\n\t\t<script async src=\"https://media.ethicalads.io/media/client/ethicalads.min.js\"></script>\n\t\t%sveltekit.head%\n\t</head>\n\t<body\n\t\tdata-sveltekit-preload-data=\"hover\"\n\t\tclass=\"text-foreground group/body theme-blue overscroll-none font-sans antialiased [--footer-height:calc(var(--spacing)*14)] [--header-height:calc(var(--spacing)*14)] xl:[--footer-height:calc(var(--spacing)*24)]\"\n\t>\n\t\t<div style=\"display: contents\">%sveltekit.body%</div>\n\t</body>\n</html>\n"
  },
  {
    "path": "docs/src/lib/blocks.ts",
    "content": "import { z } from \"zod\";\nimport { blocks } from \"../__registry__/blocks.js\";\n\nexport type BlockName = (typeof blocks)[number];\n\nexport function isBlock(name: unknown): name is BlockName {\n\treturn blocks.includes(name as BlockName);\n}\n\nexport const blockSchema = z.object({\n\tname: z.enum(blocks),\n\tdescription: z.string(),\n\tcontainer: z\n\t\t.object({\n\t\t\theight: z.string().optional(),\n\t\t\tclassName: z.string().nullish(),\n\t\t})\n\t\t.optional(),\n});\n\nexport type Block = z.infer<typeof blockSchema>;\n"
  },
  {
    "path": "docs/src/lib/colors.ts",
    "content": "import { z } from \"zod\";\n\nimport { colors } from \"$lib/registry/registry-colors.js\";\n\nconst colorSchema = z.object({\n\tname: z.string(),\n\tid: z.string(),\n\tscale: z.number(),\n\tclass: z.string(),\n\thex: z.string(),\n\trgb: z.string(),\n\thsl: z.string(),\n\tforeground: z.string(),\n\toklch: z.string(),\n\tvar: z.string(),\n});\n\nconst colorPaletteSchema = z.object({\n\tname: z.string(),\n\tcolors: z.array(colorSchema),\n});\n\nexport type ColorPalette = z.infer<typeof colorPaletteSchema>;\n\ntype ColorFormat = {\n\tclass: string;\n\thex: string;\n\trgb: string;\n\thsl: string;\n\toklch: string;\n\tvar: string;\n};\n\nexport function getColorFormat(color: Color): ColorFormat {\n\treturn {\n\t\tclass: `bg-${color.name}-100`,\n\t\thex: color.hex,\n\t\trgb: color.rgb,\n\t\thsl: color.hsl,\n\t\toklch: color.oklch,\n\t\tvar: `--color-${color.name}-${color.scale}`,\n\t};\n}\n\nexport function getColors(): ColorPalette[] {\n\tconst tailwindColors = colorPaletteSchema.array().parse(\n\t\tObject.entries(colors)\n\t\t\t.map(([name, color]) => {\n\t\t\t\tif (!Array.isArray(color)) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tname,\n\t\t\t\t\tcolors: color.map((color) => {\n\t\t\t\t\t\tconst rgb = color.rgb.replace(/^rgb\\((\\d+),(\\d+),(\\d+)\\)$/, \"$1 $2 $3\");\n\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...color,\n\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\tid: `${name}-${color.scale}`,\n\t\t\t\t\t\t\tclass: `${name}-${color.scale}`,\n\t\t\t\t\t\t\tvar: `--color-${name}-${color.scale}`,\n\t\t\t\t\t\t\trgb,\n\t\t\t\t\t\t\thsl: color.hsl.replace(\n\t\t\t\t\t\t\t\t/^hsl\\(([\\d.]+),([\\d.]+%),([\\d.]+%)\\)$/,\n\t\t\t\t\t\t\t\t\"$1 $2 $3\"\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\toklch: `oklch(${color.oklch.replace(\n\t\t\t\t\t\t\t\t/^oklch\\(([\\d.]+)\\s*,\\s*([\\d.]+)\\s*,\\s*([\\d.]+)\\)$/,\n\t\t\t\t\t\t\t\t\"$1 $2 $3\"\n\t\t\t\t\t\t\t)})`,\n\t\t\t\t\t\t\tforeground: getForegroundFromBackground(rgb),\n\t\t\t\t\t\t};\n\t\t\t\t\t}),\n\t\t\t\t};\n\t\t\t})\n\t\t\t.filter(Boolean)\n\t);\n\n\treturn tailwindColors;\n}\n\nexport type Color = ReturnType<typeof getColors>[number][\"colors\"][number];\n\nfunction getForegroundFromBackground(rgb: string): string {\n\tconst [r, g, b] = rgb.split(\" \").map(Number);\n\n\tfunction toLinear(number: number): number {\n\t\tconst base = number / 255;\n\t\treturn base <= 0.04045 ? base / 12.92 : Math.pow((base + 0.055) / 1.055, 2.4);\n\t}\n\n\tconst luminance = 0.2126 * toLinear(r) + 0.7152 * toLinear(g) + 0.0722 * toLinear(b);\n\n\treturn luminance > 0.179 ? \"#000\" : \"#fff\";\n}\n"
  },
  {
    "path": "docs/src/lib/components/announcement.svelte",
    "content": "<script lang=\"ts\">\n\timport { badgeVariants } from \"$lib/registry/ui/badge/index.js\";\n\timport { cn } from \"$lib/utils.js\";\n\timport { ArrowRightIcon } from \"@lucide/svelte\";\n</script>\n\n<a\n\thref=\"/docs/changelog\"\n\tclass={cn(badgeVariants({ variant: \"secondary\", class: \"bg-transparent\" }))}\n>\n\t<span class=\"bg-svelte-orange size-2 rounded-full\" title=\"New\"></span>\n\tNew Components: Field, Input Group, Item and more <ArrowRightIcon />\n</a>\n"
  },
  {
    "path": "docs/src/lib/components/block-viewer-code.svelte",
    "content": "<script lang=\"ts\">\n\timport BlockViewerCopyCodeButton from \"./block-viewer-copy-code-button.svelte\";\n\timport BlockViewerFileTree from \"./block-viewer-file-tree.svelte\";\n\timport { BlockViewerContext } from \"./block-viewer.svelte\";\n\timport { getIconForLanguageExtension } from \"./icons/icons.js\";\n\tconst ctx = BlockViewerContext.get();\n\n\tconst file = $derived(ctx.item.files?.find((f) => f.target === ctx.activeFile));\n\n\tconst language = $derived(file?.target?.split(\".\").pop() ?? \"svelte\");\n\n\tconst Icon = $derived(getIconForLanguageExtension(language));\n</script>\n\n{#if file}\n\t<div\n\t\tclass=\"bg-code text-code-foreground me-3.5 flex overflow-hidden rounded-xl border group-data-[view=preview]/block-view-wrapper:hidden md:h-(--height)\"\n\t>\n\t\t<div class=\"w-72\">\n\t\t\t<BlockViewerFileTree />\n\t\t</div>\n\t\t<figure\n\t\t\tdata-rehype-pretty-code-figure\n\t\t\tclass=\"mx-0! mt-0 flex min-w-0 flex-1 flex-col rounded-xl border-none\"\n\t\t>\n\t\t\t<figcaption\n\t\t\t\tclass=\"text-code-foreground [&_svg]:text-code-foreground flex h-12 shrink-0 items-center gap-2 border-b px-4 py-2 [&_svg]:size-4 [&_svg]:opacity-70\"\n\t\t\t\tdata-language={language}\n\t\t\t>\n\t\t\t\t<Icon />\n\t\t\t\t{file?.target}\n\t\t\t\t<div class=\"ms-auto flex items-center gap-2\">\n\t\t\t\t\t<BlockViewerCopyCodeButton />\n\t\t\t\t</div>\n\t\t\t</figcaption>\n\t\t\t<div\n\t\t\t\tclass=\"no-scrollbar overflow-y-auto\"\n\t\t\t\t{@attach (node) => {\n\t\t\t\t\tif (file?.highlightedContent) {\n\t\t\t\t\t\tctx.activeFileCodeToCopy = node.innerText;\n\t\t\t\t\t}\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{#if file?.highlightedContent}\n\t\t\t\t\t<!--  eslint-disable-next-line svelte/no-at-html-tags -->\n\t\t\t\t\t{@html file?.highlightedContent}\n\t\t\t\t{/if}\n\t\t\t</div>\n\t\t</figure>\n\t</div>\n{/if}\n"
  },
  {
    "path": "docs/src/lib/components/block-viewer-copy-code-button.svelte",
    "content": "<svelte:options runes />\n\n<script lang=\"ts\">\n\timport { UseClipboard } from \"$lib/hooks/use-clipboard.svelte.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport ClipboardIcon from \"@lucide/svelte/icons/clipboard\";\n\timport CheckIcon from \"@lucide/svelte/icons/check\";\n\timport { BlockViewerContext } from \"./block-viewer.svelte\";\n\n\tconst ctx = BlockViewerContext.get();\n\n\tconst clipboard = new UseClipboard();\n</script>\n\n{#if ctx.activeFileCodeToCopy}\n\t<Button\n\t\tonclick={() => {\n\t\t\tclipboard.copy(ctx.activeFileCodeToCopy);\n\t\t}}\n\t\tclass=\"size-7 shrink-0 rounded-md p-0 hover:bg-zinc-700 hover:text-white focus:bg-zinc-700 focus:text-white focus-visible:bg-zinc-700 focus-visible:text-white active:bg-zinc-700 active:text-white data-[active=true]:bg-zinc-700 data-[active=true]:text-white [&>svg]:size-3\"\n\t\tvariant=\"ghost\"\n\t>\n\t\t{#if clipboard.copied}\n\t\t\t<CheckIcon />\n\t\t{:else}\n\t\t\t<ClipboardIcon />\n\t\t{/if}\n\t</Button>\n{/if}\n"
  },
  {
    "path": "docs/src/lib/components/block-viewer-file-tree.svelte",
    "content": "<script lang=\"ts\">\n\timport { BlockViewerContext } from \"./block-viewer.svelte\";\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\timport BlockViewerTree from \"./block-viewer-tree.svelte\";\n\n\tconst ctx = BlockViewerContext.get();\n</script>\n\n<Sidebar.Provider class=\"flex min-h-full! flex-col border-e\">\n\t<Sidebar.Root collapsible=\"none\" class=\"w-full flex-1\">\n\t\t<Sidebar.GroupLabel class=\"h-12 rounded-none border-b px-4 text-sm\">\n\t\t\tFiles\n\t\t</Sidebar.GroupLabel>\n\t\t<Sidebar.Group class=\"p-0\">\n\t\t\t<Sidebar.GroupContent>\n\t\t\t\t<Sidebar.Menu class=\"translate-x-0 gap-1.5\">\n\t\t\t\t\t{#if ctx.tree}\n\t\t\t\t\t\t{#each ctx.tree as file, index (index)}\n\t\t\t\t\t\t\t<BlockViewerTree item={file} index={1} />\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t{/if}\n\t\t\t\t</Sidebar.Menu>\n\t\t\t</Sidebar.GroupContent>\n\t\t</Sidebar.Group>\n\t</Sidebar.Root>\n</Sidebar.Provider>\n"
  },
  {
    "path": "docs/src/lib/components/block-viewer-iframe.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn } from \"$lib/utils.js\";\n\timport { BlockViewerContext } from \"./block-viewer.svelte\";\n\n\tlet { class: className }: { class?: string } = $props();\n\tconst ctx = BlockViewerContext.get();\n\n\t// todo see if we need\n\t// let iframeHtml = `<iframe title=\"${ctx.item.name}\" src=\"/view/${ctx.item.name}\" height=\"930\" class=\"bg-background no-scrollbar relative z-20 hidden w-full md:block\"></iframe>`\n</script>\n\n{#key ctx.iframeKey}\n\t<iframe\n\t\ttitle={ctx.item.name}\n\t\tsrc=\"/view/{ctx.item.name}\"\n\t\theight={typeof ctx.item.meta?.iframeHeight === \"number\" ? ctx.item.meta.iframeHeight : 930}\n\t\tclass={cn(\"bg-background no-scrollbar relative z-20 w-full\", className)}\n\t\tloading=\"lazy\"\n\t></iframe>\n{/key}\n"
  },
  {
    "path": "docs/src/lib/components/block-viewer-toolbar.svelte",
    "content": "<script lang=\"ts\">\n\timport { BlockViewerContext } from \"./block-viewer.svelte\";\n\timport { UseClipboard } from \"$lib/hooks/use-clipboard.svelte.js\";\n\timport * as Tabs from \"$lib/registry/ui/tabs/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport { Separator } from \"$lib/registry/ui/separator/index.js\";\n\timport * as ToggleGroup from \"$lib/registry/ui/toggle-group/index.js\";\n\timport MonitorIcon from \"@lucide/svelte/icons/monitor\";\n\timport TabletIcon from \"@lucide/svelte/icons/tablet\";\n\timport SmartphoneIcon from \"@lucide/svelte/icons/smartphone\";\n\timport FullscreenIcon from \"@lucide/svelte/icons/fullscreen\";\n\timport CheckIcon from \"@lucide/svelte/icons/check\";\n\timport TerminalIcon from \"@lucide/svelte/icons/terminal\";\n\timport RotateCcwIcon from \"@lucide/svelte/icons/rotate-ccw\";\n\timport { getCommand } from \"$lib/package-manager.js\";\n\timport { UserConfigContext } from \"$lib/user-config.svelte.js\";\n\n\tconst ctx = BlockViewerContext.get();\n\tconst userConfig = UserConfigContext.get();\n\n\tconst clipboard = new UseClipboard();\n\n\tconst addCommand = $derived(\n\t\tgetCommand(\n\t\t\tuserConfig.current.packageManager,\n\t\t\t\"execute\",\n\t\t\t`shadcn-svelte@latest add ${ctx.item.name}`\n\t\t)\n\t);\n\n\tconst command = $derived(addCommand.command + \" \" + addCommand.args.join(\" \"));\n</script>\n\n<div class=\"hidden w-full items-center gap-2 ps-2 md:pe-6 lg:flex\">\n\t<Tabs.Root bind:value={ctx.view} class=\"hidden lg:flex\">\n\t\t<Tabs.List\n\t\t\tclass=\"grid h-8 grid-cols-2 items-center rounded-md p-1 *:data-[slot=tabs-trigger]:h-6 *:data-[slot=tabs-trigger]:rounded-sm *:data-[slot=tabs-trigger]:px-2 *:data-[slot=tabs-trigger]:text-xs\"\n\t\t>\n\t\t\t<Tabs.Trigger value=\"preview\">Preview</Tabs.Trigger>\n\t\t\t<Tabs.Trigger value=\"code\">Code</Tabs.Trigger>\n\t\t</Tabs.List>\n\t</Tabs.Root>\n\t<Separator orientation=\"vertical\" class=\"mx-2 !h-4\" />\n\t<a\n\t\thref=\"#{ctx.item.name}\"\n\t\tclass=\"flex-1 text-center text-sm font-medium underline-offset-2 hover:underline md:flex-auto md:text-start\"\n\t>\n\t\t{ctx.item.description?.replace(/\\.$/, \"\")}\n\t</a>\n\t<div class=\"ms-auto flex items-center gap-2\">\n\t\t<div class=\"h-8 items-center gap-1.5 rounded-md border p-1 shadow-none\">\n\t\t\t<ToggleGroup.Root\n\t\t\t\ttype=\"single\"\n\t\t\t\tvalue=\"100\"\n\t\t\t\tonValueChange={(value) => {\n\t\t\t\t\tif (ctx.resizablePaneRef) {\n\t\t\t\t\t\tctx.resizablePaneRef.resize(parseInt(value));\n\t\t\t\t\t}\n\t\t\t\t}}\n\t\t\t\tclass=\"gap-1 *:data-[slot=toggle-group-item]:!size-6 *:data-[slot=toggle-group-item]:!rounded-sm\"\n\t\t\t>\n\t\t\t\t<ToggleGroup.Item value=\"100\" title=\"Desktop\">\n\t\t\t\t\t<MonitorIcon />\n\t\t\t\t</ToggleGroup.Item>\n\t\t\t\t<ToggleGroup.Item value=\"60\" title=\"Tablet\">\n\t\t\t\t\t<TabletIcon />\n\t\t\t\t</ToggleGroup.Item>\n\t\t\t\t<ToggleGroup.Item value=\"30\" title=\"Mobile\">\n\t\t\t\t\t<SmartphoneIcon />\n\t\t\t\t</ToggleGroup.Item>\n\t\t\t\t<Separator orientation=\"vertical\" class=\"!h-4\" />\n\t\t\t\t<Button\n\t\t\t\t\tsize=\"icon\"\n\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\tclass=\"size-6 rounded-sm p-0\"\n\t\t\t\t\ttitle=\"Open in New Tab\"\n\t\t\t\t\thref=\"/view/{ctx.item.name}\"\n\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t>\n\t\t\t\t\t<span class=\"sr-only\">Open in New Tab</span>\n\t\t\t\t\t<FullscreenIcon />\n\t\t\t\t</Button>\n\t\t\t\t<Separator orientation=\"vertical\" class=\"!h-4\" />\n\t\t\t\t<Button\n\t\t\t\t\tsize=\"icon\"\n\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\tclass=\"size-6 rounded-sm p-0\"\n\t\t\t\t\ttitle=\"Refresh Preview\"\n\t\t\t\t\tonclick={() => {\n\t\t\t\t\t\tctx.iframeKey = ctx.iframeKey + 1;\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<RotateCcwIcon />\n\t\t\t\t\t<span class=\"sr-only\">Refresh Preview</span>\n\t\t\t\t</Button>\n\t\t\t</ToggleGroup.Root>\n\t\t</div>\n\t\t<Separator orientation=\"vertical\" class=\"mx-1 !h-4\" />\n\t\t<Button\n\t\t\tvariant=\"outline\"\n\t\t\tclass=\"w-fit gap-1 px-2 shadow-none\"\n\t\t\tsize=\"sm\"\n\t\t\tonclick={() => clipboard.copy(command)}\n\t\t>\n\t\t\t{#if clipboard.copied}\n\t\t\t\t<CheckIcon />\n\t\t\t{:else}\n\t\t\t\t<TerminalIcon />\n\t\t\t{/if}\n\t\t\t<span class=\"hidden lg:inline\">{command}</span>\n\t\t</Button>\n\t</div>\n</div>\n"
  },
  {
    "path": "docs/src/lib/components/block-viewer-tree.svelte",
    "content": "<script lang=\"ts\">\n\timport type { FileTree } from \"$lib/registry/registry-utils.js\";\n\timport BlockViewerTree from \"./block-viewer-tree.svelte\";\n\timport { BlockViewerContext } from \"./block-viewer.svelte\";\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\timport * as Collapsible from \"$lib/registry/ui/collapsible/index.js\";\n\timport ChevronRightIcon from \"@lucide/svelte/icons/chevron-right\";\n\timport FileIcon from \"@lucide/svelte/icons/file\";\n\timport FolderIcon from \"@lucide/svelte/icons/folder\";\n\n\tconst ctx = BlockViewerContext.get();\n\n\tlet { item, index }: { item: FileTree; index: number } = $props();\n</script>\n\n{#if !item.children}\n\t<Sidebar.MenuItem>\n\t\t<Sidebar.MenuButton\n\t\t\tstyle=\"--index: {index * (index === 2 ? 1.2 : 1.3)}rem\"\n\t\t\tisActive={item.path === ctx.activeFile}\n\t\t\tonclick={() => {\n\t\t\t\tif (!item.path) return;\n\t\t\t\tctx.activeFile = item.path;\n\t\t\t}}\n\t\t\tclass=\"hover:bg-muted-foreground/15 focus:bg-muted-foreground/15 focus-visible:bg-muted-foreground/15 active:bg-muted-foreground/15 data-[active=true]:bg-muted-foreground/15 rounded-none ps-(--index) whitespace-nowrap\"\n\t\t\tdata-index={index}\n\t\t>\n\t\t\t<ChevronRightIcon class=\"invisible\" />\n\t\t\t<FileIcon class=\"size-4\" />\n\t\t\t{item.name}\n\t\t</Sidebar.MenuButton>\n\t</Sidebar.MenuItem>\n{:else}\n\t<Sidebar.MenuItem>\n\t\t<Collapsible.Root\n\t\t\tclass=\"group/collapsible [&[data-state=open]>button>svg:first-child]:rotate-90\"\n\t\t\topen={true}\n\t\t>\n\t\t\t<Collapsible.Trigger\n\t\t\t\tstyle=\"--index: {index * (index === 1 ? 1 : 1.2)}rem\"\n\t\t\t\tclass=\"hover:bg-muted-foreground/15 focus:bg-muted-foreground/15 focus-visible:bg-muted-foreground/15 active:bg-muted-foreground/15 data-[active=true]:bg-muted-foreground/15 rounded-none ps-(--index) whitespace-nowrap\"\n\t\t\t>\n\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t<Sidebar.MenuButton {...props}>\n\t\t\t\t\t\t<ChevronRightIcon class=\"transition-transform\" />\n\t\t\t\t\t\t<FolderIcon />\n\t\t\t\t\t\t{item.name === \"components\" ? \"lib/components\" : item.name}\n\t\t\t\t\t</Sidebar.MenuButton>\n\t\t\t\t{/snippet}\n\t\t\t</Collapsible.Trigger>\n\t\t\t<Collapsible.Content>\n\t\t\t\t<Sidebar.MenuSub class=\"m-0 w-full translate-x-0 border-none p-0\">\n\t\t\t\t\t{#each item.children as subItem, key (key)}\n\t\t\t\t\t\t<BlockViewerTree item={subItem} index={index + 1} />\n\t\t\t\t\t{/each}\n\t\t\t\t</Sidebar.MenuSub>\n\t\t\t</Collapsible.Content>\n\t\t</Collapsible.Root>\n\t</Sidebar.MenuItem>\n{/if}\n"
  },
  {
    "path": "docs/src/lib/components/block-viewer-view-mobile.svelte",
    "content": "<script lang=\"ts\">\n\timport type { Snippet } from \"svelte\";\n\timport { BlockViewerContext } from \"./block-viewer.svelte\";\n\n\tconst ctx = BlockViewerContext.get();\n\tlet { children }: { children?: Snippet } = $props();\n</script>\n\n<div class=\"flex flex-col gap-2 lg:hidden\">\n\t<div class=\"flex items-center gap-2 px-2\">\n\t\t<div class=\"line-clamp-1 text-sm font-medium\">\n\t\t\t{ctx.item.description}\n\t\t</div>\n\t\t<div class=\"text-muted-foreground ms-auto shrink-0 font-mono text-xs\">\n\t\t\t{ctx.item.name}\n\t\t</div>\n\t</div>\n\t{#if ctx.item.meta?.mobile === \"component\"}\n\t\t{@render children?.()}\n\t{:else}\n\t\t<div class=\"overflow-hidden rounded-xl border\">\n\t\t\t<img\n\t\t\t\tsrc=\"/img/registry/{ctx.item.name}-light.png\"\n\t\t\t\talt={ctx.item.name}\n\t\t\t\tdata-block={ctx.item.name}\n\t\t\t\twidth={1440}\n\t\t\t\theight={900}\n\t\t\t\tclass=\"object-cover dark:hidden\"\n\t\t\t/>\n\t\t\t<img\n\t\t\t\tsrc=\"/img/registry/{ctx.item.name}-dark.png\"\n\t\t\t\talt={ctx.item.name}\n\t\t\t\tdata-block={ctx.item.name}\n\t\t\t\twidth={1440}\n\t\t\t\theight={900}\n\t\t\t\tclass=\"hidden object-cover dark:block\"\n\t\t\t/>\n\t\t</div>\n\t{/if}\n</div>\n"
  },
  {
    "path": "docs/src/lib/components/block-viewer-view.svelte",
    "content": "<script lang=\"ts\">\n\timport { BlockViewerContext } from \"./block-viewer.svelte\";\n\timport * as Resizable from \"$lib/registry/ui/resizable/index.js\";\n\timport BlockViewerIframe from \"./block-viewer-iframe.svelte\";\n\n\tconst ctx = BlockViewerContext.get();\n\n\t// const iframeHtml = `<iframe title=\"${ctx.item.name}\" src=\"/view/${ctx.item.name}\" height=\"930\" class=\"bg-background no-scrollbar relative z-20 hidden w-full md:block\"></iframe>`;\n</script>\n\n<div class=\"hidden group-data-[view=code]/block-view-wrapper:hidden md:h-(--height) lg:flex\">\n\t<div class=\"relative grid w-full gap-4\">\n\t\t<div\n\t\t\tclass=\"absolute inset-0 end-4 bg-[radial-gradient(#d4d4d4_1px,transparent_1px)] bg-size-[20px_20px] dark:bg-[radial-gradient(#404040_1px,transparent_1px)]\"\n\t\t></div>\n\t\t<Resizable.PaneGroup\n\t\t\tdirection=\"horizontal\"\n\t\t\tclass=\"after:bg-surface/50 relative z-10 after:absolute after:inset-0 after:end-3 after:z-0 after:rounded-xl\"\n\t\t>\n\t\t\t<Resizable.Pane\n\t\t\t\tbind:this={ctx.resizablePaneRef}\n\t\t\t\tclass=\"bg-background relative aspect-[4/2.5] overflow-hidden rounded-lg border md:aspect-auto md:rounded-xl\"\n\t\t\t\tdefaultSize={100}\n\t\t\t\tminSize={30}\n\t\t\t>\n\t\t\t\t<BlockViewerIframe />\n\t\t\t</Resizable.Pane>\n\t\t\t<Resizable.Handle\n\t\t\t\tclass=\"after:bg-border relative z-20 hidden w-3 bg-transparent p-0 after:absolute after:end-0 after:top-1/2 after:h-8 after:w-[6px] after:-translate-x-px after:-translate-y-1/2 after:rounded-full after:transition-all after:hover:h-10 md:block\"\n\t\t\t/>\n\t\t\t<Resizable.Pane defaultSize={0} minSize={0} />\n\t\t</Resizable.PaneGroup>\n\t</div>\n</div>\n"
  },
  {
    "path": "docs/src/lib/components/block-viewer.svelte",
    "content": "<script lang=\"ts\" module>\n\timport type { createFileTreeForRegistryItemFiles } from \"$lib/registry/registry-utils.js\";\n\timport { Pane } from \"paneforge\";\n\timport { Context } from \"runed\";\n\timport BlockViewerToolbar from \"./block-viewer-toolbar.svelte\";\n\timport BlockViewerView from \"./block-viewer-view.svelte\";\n\timport BlockViewerCode from \"./block-viewer-code.svelte\";\n\timport type { Snippet } from \"svelte\";\n\timport BlockViewerViewMobile from \"./block-viewer-view-mobile.svelte\";\n\timport type { HighlightedBlock } from \"../../routes/api/block/[block]/+server.js\";\n\n\ttype BlockViewerContextType = {\n\t\titem: HighlightedBlock;\n\t\tview: \"code\" | \"preview\";\n\t\tactiveFile: string | null;\n\t\tresizablePaneRef: Pane | null;\n\t\ttree: ReturnType<typeof createFileTreeForRegistryItemFiles> | null;\n\t\tiframeKey: number;\n\t\tactiveFileCodeToCopy: string;\n\t};\n\n\texport const BlockViewerContext = new Context<BlockViewerContextType>(\"BlockViewer\");\n</script>\n\n<script lang=\"ts\">\n\tlet {\n\t\titem,\n\t\ttree,\n\t\tchildren,\n\t}: Pick<BlockViewerContextType, \"item\" | \"tree\"> & {\n\t\tchildren?: Snippet;\n\t} = $props();\n\n\tlet view = $state<BlockViewerContextType[\"view\"]>(\"preview\");\n\n\tfunction getFirstFileTargetInTree(_tree: typeof tree = tree): string | null {\n\t\tif (!_tree?.length) return null;\n\n\t\tfor (const node of _tree) {\n\t\t\tif (node.path) return node.path;\n\t\t\tif (node.children) {\n\t\t\t\tconst result = getFirstFileTargetInTree(node.children);\n\t\t\t\tif (result) return result;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\tlet activeFile = $state<BlockViewerContextType[\"activeFile\"]>(\n\t\tgetFirstFileTargetInTree() ?? null\n\t);\n\tlet resizablePaneRef = $state<Pane>(null!);\n\tlet iframeKey = $state<number>(0);\n\tlet activeFileCodeToCopy = $state<string>(\"\");\n\n\tBlockViewerContext.set({\n\t\tget item() {\n\t\t\treturn item;\n\t\t},\n\t\tget iframeKey() {\n\t\t\treturn iframeKey;\n\t\t},\n\t\tset iframeKey(value) {\n\t\t\tiframeKey = value;\n\t\t},\n\t\tget view() {\n\t\t\treturn view;\n\t\t},\n\t\tset view(value) {\n\t\t\tview = value;\n\t\t},\n\t\tget activeFile() {\n\t\t\treturn activeFile;\n\t\t},\n\t\tset activeFile(value) {\n\t\t\tactiveFile = value;\n\t\t},\n\t\tget resizablePaneRef() {\n\t\t\treturn resizablePaneRef;\n\t\t},\n\t\tset resizablePaneRef(value) {\n\t\t\tresizablePaneRef = value;\n\t\t},\n\t\tget tree() {\n\t\t\treturn tree;\n\t\t},\n\t\tget activeFileCodeToCopy() {\n\t\t\treturn activeFileCodeToCopy;\n\t\t},\n\t\tset activeFileCodeToCopy(value) {\n\t\t\tactiveFileCodeToCopy = value;\n\t\t},\n\t});\n</script>\n\n<div\n\tid={item.name}\n\tdata-view={view}\n\tclass=\"group/block-view-wrapper flex min-w-0 scroll-mt-24 flex-col-reverse items-stretch gap-4 overflow-hidden md:flex-col\"\n\tstyle=\"--height: {item.meta?.iframeHeight ?? '930px'}\"\n>\n\t<BlockViewerToolbar />\n\t<BlockViewerView />\n\t<BlockViewerCode />\n\t<BlockViewerViewMobile>{@render children?.()}</BlockViewerViewMobile>\n</div>\n"
  },
  {
    "path": "docs/src/lib/components/blocks-nav.svelte",
    "content": "<script lang=\"ts\">\n\timport { ScrollArea } from \"$lib/registry/ui/scroll-area/index.js\";\n\timport { page } from \"$app/state\";\n\timport { registryCategories } from \"$lib/registry/registry-categories.js\";\n</script>\n\n{#snippet BlocksNavLink({\n\tcategory,\n\tisActive,\n}: {\n\tcategory: (typeof registryCategories)[number];\n\tisActive: boolean;\n})}\n\t{#if !category.hidden}\n\t\t<a\n\t\t\thref=\"/blocks/{category.slug}\"\n\t\t\tclass=\"text-muted-foreground hover:text-primary data-[active=true]:text-primary flex h-7 items-center justify-center px-4 text-center text-base font-medium transition-colors\"\n\t\t\tdata-active={isActive}\n\t\t>\n\t\t\t{category.name}\n\t\t</a>\n\t{/if}\n{/snippet}\n\n<div class=\"relative overflow-hidden\">\n\t<ScrollArea class=\"max-w-none\" orientation=\"both\" scrollbarXClasses=\"invisible\">\n\t\t<div class=\"flex items-center\">\n\t\t\t{@render BlocksNavLink({\n\t\t\t\tcategory: { name: \"Featured\", slug: \"\", hidden: false },\n\t\t\t\tisActive: page.url.pathname === \"/blocks\",\n\t\t\t})}\n\t\t\t{#each registryCategories as category (category.slug)}\n\t\t\t\t{@render BlocksNavLink({\n\t\t\t\t\tcategory,\n\t\t\t\t\tisActive: page.url.pathname === `/blocks/${category.slug}`,\n\t\t\t\t})}\n\t\t\t{/each}\n\t\t</div>\n\t</ScrollArea>\n</div>\n"
  },
  {
    "path": "docs/src/lib/components/callout.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Alert from \"$lib/registry/ui/alert/index.js\";\n\timport { cn } from \"$lib/utils.js\";\n\timport type { Component, ComponentProps } from \"svelte\";\n\n\tlet {\n\t\tchildren,\n\t\tclass: className,\n\t\ticon: Icon,\n\t\ttitle,\n\t\t...restProps\n\t}: ComponentProps<typeof Alert.Root> & {\n\t\ticon?: Component;\n\t} = $props();\n</script>\n\n<Alert.Root\n\tclass={cn(\"bg-background text-foreground  w-auto border md:-mx-1\", className)}\n\t{...restProps}\n>\n\t{#if Icon}\n\t\t<Icon />\n\t{/if}\n\t{#if title}\n\t\t<Alert.Title>{title}</Alert.Title>\n\t{/if}\n\t<Alert.Description class=\"text-card-foreground/80\">\n\t\t{@render children?.()}\n\t</Alert.Description>\n</Alert.Root>\n"
  },
  {
    "path": "docs/src/lib/components/cards/activity-goal.svelte",
    "content": "<script lang=\"ts\">\n\timport MinusIcon from \"@lucide/svelte/icons/minus\";\n\timport PlusIcon from \"@lucide/svelte/icons/plus\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport { BarChart, type ChartContextValue } from \"layerchart\";\n\timport { cubicInOut } from \"svelte/easing\";\n\timport { scaleBand } from \"d3-scale\";\n\n\tconst data = [\n\t\t{\n\t\t\tgoal: 400,\n\t\t},\n\t\t{\n\t\t\tgoal: 300,\n\t\t},\n\t\t{\n\t\t\tgoal: 200,\n\t\t},\n\t\t{\n\t\t\tgoal: 300,\n\t\t},\n\t\t{\n\t\t\tgoal: 200,\n\t\t},\n\t\t{\n\t\t\tgoal: 278,\n\t\t},\n\t\t{\n\t\t\tgoal: 189,\n\t\t},\n\t\t{\n\t\t\tgoal: 239,\n\t\t},\n\t\t{\n\t\t\tgoal: 300,\n\t\t},\n\t\t{\n\t\t\tgoal: 200,\n\t\t},\n\t\t{\n\t\t\tgoal: 278,\n\t\t},\n\t\t{\n\t\t\tgoal: 189,\n\t\t},\n\t\t{\n\t\t\tgoal: 349,\n\t\t},\n\t];\n\n\tconst chartConfig = {\n\t\tgoal: {\n\t\t\tlabel: \"Goal\",\n\t\t\tcolor: \"var(--primary)\",\n\t\t},\n\t} satisfies Chart.ChartConfig;\n\n\tlet goal = $state(350);\n\n\tfunction onClick(adjustment: number) {\n\t\tgoal = Math.max(200, Math.min(400, goal + adjustment));\n\t}\n\n\tlet context = $state<ChartContextValue>();\n</script>\n\n<Card.Root class=\"w-full gap-5\">\n\t<Card.Header>\n\t\t<Card.Title>Move Goal</Card.Title>\n\t\t<Card.Description>Set your daily activity goal.</Card.Description>\n\t</Card.Header>\n\t<Card.Content class=\"flex flex-1 flex-col\">\n\t\t<div class=\"flex items-center justify-center gap-4\">\n\t\t\t<Button\n\t\t\t\tvariant=\"outline\"\n\t\t\t\tsize=\"icon\"\n\t\t\t\tclass=\"size-7 rounded-full\"\n\t\t\t\tonclick={() => onClick(-10)}\n\t\t\t\tdisabled={goal <= 200}\n\t\t\t>\n\t\t\t\t<MinusIcon />\n\t\t\t\t<span class=\"sr-only\">Decrease</span>\n\t\t\t</Button>\n\t\t\t<div class=\"text-center\">\n\t\t\t\t<div class=\"text-4xl font-bold tracking-tighter tabular-nums\">\n\t\t\t\t\t{goal}\n\t\t\t\t</div>\n\t\t\t\t<div class=\"text-muted-foreground text-xs uppercase\">Calories/day</div>\n\t\t\t</div>\n\t\t\t<Button\n\t\t\t\tvariant=\"outline\"\n\t\t\t\tsize=\"icon\"\n\t\t\t\tclass=\"size-7 rounded-full\"\n\t\t\t\tonclick={() => onClick(10)}\n\t\t\t\tdisabled={goal >= 400}\n\t\t\t>\n\t\t\t\t<PlusIcon />\n\t\t\t\t<span class=\"sr-only\">Increase</span>\n\t\t\t</Button>\n\t\t</div>\n\t\t<div class=\"flex-1\">\n\t\t\t<Chart.Container config={chartConfig} class=\"aspect-auto h-14 w-full\">\n\t\t\t\t<BarChart\n\t\t\t\t\tbind:context\n\t\t\t\t\tdata={data.map((d, i) => ({ goal: d.goal, index: i }))}\n\t\t\t\t\ty=\"goal\"\n\t\t\t\t\tx=\"index\"\n\t\t\t\t\txScale={scaleBand().padding(0.25)}\n\t\t\t\t\taxis={false}\n\t\t\t\t\ttooltip={false}\n\t\t\t\t\tprops={{\n\t\t\t\t\t\tbars: {\n\t\t\t\t\t\t\tstroke: \"none\",\n\t\t\t\t\t\t\trounded: \"all\",\n\t\t\t\t\t\t\tradius: 4,\n\t\t\t\t\t\t\t// use the height of the chart to animate the bars\n\t\t\t\t\t\t\tinitialY: context?.height,\n\t\t\t\t\t\t\tinitialHeight: 0,\n\t\t\t\t\t\t\tmotion: {\n\t\t\t\t\t\t\t\tx: { type: \"tween\", duration: 500, easing: cubicInOut },\n\t\t\t\t\t\t\t\twidth: { type: \"tween\", duration: 500, easing: cubicInOut },\n\t\t\t\t\t\t\t\theight: { type: \"tween\", duration: 500, easing: cubicInOut },\n\t\t\t\t\t\t\t\ty: { type: \"tween\", duration: 500, easing: cubicInOut },\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tfill: \"var(--color-goal)\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\thighlight: { area: { fill: \"none\" } },\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t</Chart.Container>\n\t\t</div>\n\t</Card.Content>\n\t<Card.Footer>\n\t\t<Button class=\"w-full\" variant=\"secondary\">Set Goal</Button>\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/components/cards/appearance-settings.svelte",
    "content": "<script lang=\"ts\">\n\timport MinusIcon from \"@lucide/svelte/icons/minus\";\n\timport PlusIcon from \"@lucide/svelte/icons/plus\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as ButtonGroup from \"$lib/registry/ui/button-group/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport { Input } from \"$lib/registry/ui/input/index.js\";\n\timport * as RadioGroup from \"$lib/registry/ui/radio-group/index.js\";\n\timport { Switch } from \"$lib/registry/ui/switch/index.js\";\n\n\tlet gpuCount = $state(8);\n\n\tfunction handleGpuCountChange(event: Event) {\n\t\tconst target = event.target as HTMLInputElement;\n\t\tlet inputValue = target.value;\n\t\tconst previousValue = gpuCount.toString();\n\n\t\t// Remove any non-numeric characters\n\t\tlet cleanedValue = inputValue.replace(/[^0-9]/g, \"\");\n\n\t\t// Prevent deletion of a single digit\n\t\tif (cleanedValue === \"\" && previousValue.length === 1) {\n\t\t\ttarget.value = previousValue;\n\t\t\treturn;\n\t\t}\n\n\t\t// Handle input cases\n\t\tif (cleanedValue !== \"\") {\n\t\t\tconst numValue = parseInt(cleanedValue, 10);\n\n\t\t\t// If we already have 2 digits and user is trying to type more, keep the original value\n\t\t\tif (\n\t\t\t\tpreviousValue.length === 2 &&\n\t\t\t\tcleanedValue !== previousValue &&\n\t\t\t\tcleanedValue.length === 3\n\t\t\t) {\n\t\t\t\ttarget.value = previousValue;\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Ensure value is within valid range (1-99)\n\t\t\tif (numValue < 1) {\n\t\t\t\tcleanedValue = \"1\";\n\t\t\t} else if (numValue > 99) {\n\t\t\t\tcleanedValue = \"99\";\n\t\t\t}\n\n\t\t\t// Update both the input value and the state\n\t\t\ttarget.value = cleanedValue;\n\t\t\tgpuCount = parseInt(cleanedValue, 10);\n\t\t}\n\t}\n</script>\n\n<Field.Set>\n\t<Field.Group>\n\t\t<Field.Set>\n\t\t\t<Field.Legend>Compute Environment</Field.Legend>\n\t\t\t<Field.Description>Select the compute environment for your cluster.</Field.Description>\n\t\t\t<RadioGroup.Root value=\"kubernetes\">\n\t\t\t\t<Field.Label for=\"kubernetes-r2h\">\n\t\t\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t\t\t<Field.Content>\n\t\t\t\t\t\t\t<Field.Title>Kubernetes</Field.Title>\n\t\t\t\t\t\t\t<Field.Description>\n\t\t\t\t\t\t\t\tRun GPU workloads on a K8s configured cluster. This is the default.\n\t\t\t\t\t\t\t</Field.Description>\n\t\t\t\t\t\t</Field.Content>\n\t\t\t\t\t\t<RadioGroup.Item\n\t\t\t\t\t\t\tvalue=\"kubernetes\"\n\t\t\t\t\t\t\tid=\"kubernetes-r2h\"\n\t\t\t\t\t\t\taria-label=\"Kubernetes\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Field.Field>\n\t\t\t\t</Field.Label>\n\t\t\t\t<Field.Label for=\"vm-z4k\">\n\t\t\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t\t\t<Field.Content>\n\t\t\t\t\t\t\t<Field.Title>Virtual Machine</Field.Title>\n\t\t\t\t\t\t\t<Field.Description>\n\t\t\t\t\t\t\t\tAccess a VM configured cluster to run workloads. (Coming soon)\n\t\t\t\t\t\t\t</Field.Description>\n\t\t\t\t\t\t</Field.Content>\n\t\t\t\t\t\t<RadioGroup.Item value=\"vm\" id=\"vm-z4k\" aria-label=\"Virtual Machine\" />\n\t\t\t\t\t</Field.Field>\n\t\t\t\t</Field.Label>\n\t\t\t</RadioGroup.Root>\n\t\t</Field.Set>\n\t\t<Field.Separator />\n\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t<Field.Content>\n\t\t\t\t<Field.Label for=\"number-of-gpus-f6l\">Number of GPUs</Field.Label>\n\t\t\t\t<Field.Description>You can add more later.</Field.Description>\n\t\t\t</Field.Content>\n\t\t\t<ButtonGroup.Root>\n\t\t\t\t<Input\n\t\t\t\t\tid=\"number-of-gpus-f6l\"\n\t\t\t\t\tbind:value={gpuCount}\n\t\t\t\t\tsize={3}\n\t\t\t\t\tclass=\"font-mono\"\n\t\t\t\t\tmaxlength={3}\n\t\t\t\t\toninput={handleGpuCountChange}\n\t\t\t\t\ttype=\"text\"\n\t\t\t\t\tinputmode=\"numeric\"\n\t\t\t\t\tpattern=\"[0-9]*\"\n\t\t\t\t/>\n\t\t\t\t<Button\n\t\t\t\t\tonclick={() => gpuCount--}\n\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\tsize=\"icon-sm\"\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\taria-label=\"Decrement\"\n\t\t\t\t\tdisabled={gpuCount <= 1}\n\t\t\t\t>\n\t\t\t\t\t<MinusIcon />\n\t\t\t\t</Button>\n\t\t\t\t<Button\n\t\t\t\t\tonclick={() => gpuCount++}\n\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\tsize=\"icon-sm\"\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\taria-label=\"Increment\"\n\t\t\t\t\tdisabled={gpuCount >= 99}\n\t\t\t\t>\n\t\t\t\t\t<PlusIcon />\n\t\t\t\t</Button>\n\t\t\t</ButtonGroup.Root>\n\t\t</Field.Field>\n\t\t<Field.Separator />\n\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t<Field.Content>\n\t\t\t\t<Field.Label for=\"tinting\">Wallpaper Tinting</Field.Label>\n\t\t\t\t<Field.Description>Allow the wallpaper to be tinted.</Field.Description>\n\t\t\t</Field.Content>\n\t\t\t<Switch id=\"tinting\" checked />\n\t\t</Field.Field>\n\t</Field.Group>\n</Field.Set>\n"
  },
  {
    "path": "docs/src/lib/components/cards/calendar.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport { RangeCalendar } from \"$lib/registry/ui/range-calendar/index.js\";\n\timport { CalendarDate } from \"@internationalized/date\";\n\n\tconst start = new CalendarDate(2025, 6, 5);\n</script>\n\n<Card.Root class=\"hidden max-w-[260px] p-0 sm:flex\">\n\t<Card.Content class=\"p-0\">\n\t\t<RangeCalendar placeholder={start} value={{ start, end: start.add({ days: 8 }) }} />\n\t</Card.Content>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/components/cards/cards-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport CardsActivityGoal from \"$lib/components/cards/activity-goal.svelte\";\n\timport CardsCalendar from \"$lib/components/cards/calendar.svelte\";\n\timport CardsChat from \"$lib/components/cards/chat.svelte\";\n\timport CardsCookieSettings from \"$lib/components/cards/cookie-settings.svelte\";\n\timport CardsCreateAccount from \"$lib/components/cards/create-account.svelte\";\n\timport CardsExerciseMinutes from \"$lib/components/cards/exercise-minutes.svelte\";\n\timport CardsForms from \"$lib/components/cards/forms.svelte\";\n\timport CardsPayments from \"$lib/components/cards/payments.svelte\";\n\timport CardsReportIssue from \"$lib/components/cards/report-issue.svelte\";\n\timport CardsShare from \"$lib/components/cards/share.svelte\";\n\timport CardsStats from \"$lib/components/cards/stats.svelte\";\n\timport CardsTeamMembers from \"$lib/components/cards/team-members.svelte\";\n</script>\n\n<div\n\tclass=\"md:grids-col-2 grid **:data-[slot=card]:shadow-none md:gap-4 lg:grid-cols-10 xl:grid-cols-11\"\n\tstyle=\"font-family: var(--font-geist)\"\n>\n\t<div class=\"grid gap-4 lg:col-span-4 xl:col-span-6\">\n\t\t<CardsStats />\n\t\t<div class=\"grid gap-1 sm:grid-cols-[auto_1fr] md:hidden\">\n\t\t\t<CardsCalendar />\n\t\t\t<div class=\"pt-3 sm:pt-0 sm:pl-2 xl:pl-4\">\n\t\t\t\t<CardsActivityGoal />\n\t\t\t</div>\n\t\t\t<div class=\"pt-3 sm:col-span-2 xl:pt-4\">\n\t\t\t\t<CardsExerciseMinutes />\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"grid gap-4 md:grid-cols-2 lg:grid-cols-1 xl:grid-cols-2\">\n\t\t\t<div class=\"flex flex-col gap-4\">\n\t\t\t\t<CardsForms />\n\t\t\t\t<CardsTeamMembers />\n\t\t\t\t<CardsCookieSettings />\n\t\t\t</div>\n\t\t\t<div class=\"flex flex-col gap-4\">\n\t\t\t\t<CardsCreateAccount />\n\t\t\t\t<CardsChat />\n\t\t\t\t<div class=\"hidden xl:block\">\n\t\t\t\t\t<CardsReportIssue />\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\t<div class=\"flex flex-col gap-4 lg:col-span-6 xl:col-span-5\">\n\t\t<div class=\"hidden gap-1 sm:grid-cols-[auto_1fr] md:grid\">\n\t\t\t<CardsCalendar />\n\t\t\t<div class=\"pt-3 sm:pt-0 sm:pl-2 xl:pl-3\">\n\t\t\t\t<CardsActivityGoal />\n\t\t\t</div>\n\t\t\t<div class=\"pt-3 sm:col-span-2 xl:pt-3\">\n\t\t\t\t<CardsExerciseMinutes />\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"hidden md:block\">\n\t\t\t<CardsPayments />\n\t\t</div>\n\t\t<CardsShare />\n\t\t<div class=\"xl:hidden\">\n\t\t\t<CardsReportIssue />\n\t\t</div>\n\t</div>\n</div>\n"
  },
  {
    "path": "docs/src/lib/components/cards/chat.svelte",
    "content": "<script lang=\"ts\">\n\timport CheckIcon from \"@lucide/svelte/icons/check\";\n\timport PlusIcon from \"@lucide/svelte/icons/plus\";\n\timport ArrowUpIcon from \"@lucide/svelte/icons/arrow-up\";\n\timport { cn } from \"$lib/utils.js\";\n\timport * as Avatar from \"$lib/registry/ui/avatar/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Command from \"$lib/registry/ui/command/index.js\";\n\timport * as Dialog from \"$lib/registry/ui/dialog/index.js\";\n\timport * as Tooltip from \"$lib/registry/ui/tooltip/index.js\";\n\timport * as InputGroup from \"$lib/registry/ui/input-group/index.js\";\n\n\tconst users = [\n\t\t{\n\t\t\tname: \"Olivia Martin\",\n\t\t\temail: \"m@example.com\",\n\t\t\tavatar: \"/avatars/01.png\",\n\t\t},\n\t\t{\n\t\t\tname: \"Isabella Nguyen\",\n\t\t\temail: \"isabella.nguyen@email.com\",\n\t\t\tavatar: \"/avatars/03.png\",\n\t\t},\n\t\t{\n\t\t\tname: \"Emma Wilson\",\n\t\t\temail: \"emma@example.com\",\n\t\t\tavatar: \"/avatars/05.png\",\n\t\t},\n\t\t{\n\t\t\tname: \"Jackson Lee\",\n\t\t\temail: \"lee@example.com\",\n\t\t\tavatar: \"/avatars/02.png\",\n\t\t},\n\t\t{\n\t\t\tname: \"William Kim\",\n\t\t\temail: \"will@email.com\",\n\t\t\tavatar: \"/avatars/04.png\",\n\t\t},\n\t] as const;\n\n\ttype User = (typeof users)[number];\n\n\tlet open = $state(false);\n\tlet selectedUsers = $state<User[]>([]);\n\n\tlet messages = $state([\n\t\t{\n\t\t\trole: \"agent\",\n\t\t\tcontent: \"Hi, how can I help you today?\",\n\t\t},\n\t\t{\n\t\t\trole: \"user\",\n\t\t\tcontent: \"Hey, I'm having trouble with my account.\",\n\t\t},\n\t\t{\n\t\t\trole: \"agent\",\n\t\t\tcontent: \"What seems to be the problem?\",\n\t\t},\n\t\t{\n\t\t\trole: \"user\",\n\t\t\tcontent: \"I can't log in.\",\n\t\t},\n\t]);\n\n\tlet input = $state(\"\");\n\tlet inputLength = $derived(input.trim().length);\n</script>\n\n<Card.Root>\n\t<Card.Header class=\"flex flex-row items-center\">\n\t\t<div class=\"flex items-center gap-4\">\n\t\t\t<Avatar.Root class=\"border\">\n\t\t\t\t<Avatar.Image src=\"/avatars/01.png\" alt=\"Image\" />\n\t\t\t\t<Avatar.Fallback>OM</Avatar.Fallback>\n\t\t\t</Avatar.Root>\n\t\t\t<div class=\"flex flex-col gap-0.5\">\n\t\t\t\t<p class=\"text-sm leading-none font-medium\">Sofia Davis</p>\n\t\t\t\t<p class=\"text-muted-foreground text-xs\">m@example.com</p>\n\t\t\t</div>\n\t\t</div>\n\t\t<Tooltip.Provider delayDuration={0}>\n\t\t\t<Tooltip.Root>\n\t\t\t\t<Tooltip.Trigger>\n\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t{...props}\n\t\t\t\t\t\t\tsize=\"icon\"\n\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\tclass=\"ms-auto size-8 rounded-full\"\n\t\t\t\t\t\t\tonclick={() => (open = true)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<PlusIcon />\n\t\t\t\t\t\t\t<span class=\"sr-only\">New message</span>\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t{/snippet}\n\t\t\t\t</Tooltip.Trigger>\n\t\t\t\t<Tooltip.Content sideOffset={10}>New message</Tooltip.Content>\n\t\t\t</Tooltip.Root>\n\t\t</Tooltip.Provider>\n\t</Card.Header>\n\t<Card.Content>\n\t\t<div class=\"flex flex-col gap-4\">\n\t\t\t{#each messages as message, index (index)}\n\t\t\t\t<div\n\t\t\t\t\tclass={cn(\n\t\t\t\t\t\t\"flex w-max max-w-[75%] flex-col gap-2 rounded-lg px-3 py-2 text-sm\",\n\t\t\t\t\t\tmessage.role === \"user\"\n\t\t\t\t\t\t\t? \"bg-primary text-primary-foreground ms-auto\"\n\t\t\t\t\t\t\t: \"bg-muted\"\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{message.content}\n\t\t\t\t</div>\n\t\t\t{/each}\n\t\t</div>\n\t</Card.Content>\n\t<Card.Footer>\n\t\t<form\n\t\t\tonsubmit={(event) => {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tif (inputLength === 0) return;\n\t\t\t\tmessages.push({\n\t\t\t\t\trole: \"user\",\n\t\t\t\t\tcontent: input,\n\t\t\t\t});\n\t\t\t\tinput = \"\";\n\t\t\t}}\n\t\t\tclass=\"relative w-full\"\n\t\t>\n\t\t\t<InputGroup.Root>\n\t\t\t\t<InputGroup.Input\n\t\t\t\t\tid=\"message\"\n\t\t\t\t\tplaceholder=\"Type your message...\"\n\t\t\t\t\tautocomplete=\"off\"\n\t\t\t\t\tbind:value={input}\n\t\t\t\t/>\n\t\t\t\t<InputGroup.Addon align=\"inline-end\">\n\t\t\t\t\t<InputGroup.Button type=\"submit\" size=\"icon-xs\" class=\"rounded-full\">\n\t\t\t\t\t\t<ArrowUpIcon />\n\t\t\t\t\t\t<span class=\"sr-only\">Send</span>\n\t\t\t\t\t</InputGroup.Button>\n\t\t\t\t</InputGroup.Addon>\n\t\t\t</InputGroup.Root>\n\t\t</form>\n\t</Card.Footer>\n</Card.Root>\n<Dialog.Root bind:open>\n\t<Dialog.Content class=\"gap-0 p-0 outline-none\">\n\t\t<Dialog.Header class=\"px-4 pt-5 pb-4\">\n\t\t\t<Dialog.Title>New message</Dialog.Title>\n\t\t\t<Dialog.Description>\n\t\t\t\tInvite a user to this thread. This will create a new group message.\n\t\t\t</Dialog.Description>\n\t\t</Dialog.Header>\n\t\t<Command.Root class=\"overflow-hidden rounded-t-none border-t bg-transparent\">\n\t\t\t<Command.Input placeholder=\"Search user...\" />\n\t\t\t<Command.List>\n\t\t\t\t<Command.Empty>No users found.</Command.Empty>\n\t\t\t\t<Command.Group class=\"p-2\">\n\t\t\t\t\t{#each users as user (user.email)}\n\t\t\t\t\t\t<Command.Item\n\t\t\t\t\t\t\tclass=\"data-[active=true]:opacity-50\"\n\t\t\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t\t\tif (selectedUsers.includes(user)) {\n\t\t\t\t\t\t\t\t\tselectedUsers = selectedUsers.filter(\n\t\t\t\t\t\t\t\t\t\t(u) => u.email !== user.email\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tselectedUsers = [...users].filter((u) =>\n\t\t\t\t\t\t\t\t\t\t[...selectedUsers, user].includes(u)\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Avatar.Root class=\"border\">\n\t\t\t\t\t\t\t\t<Avatar.Image src={user.avatar} alt=\"Image\" />\n\t\t\t\t\t\t\t\t<Avatar.Fallback>{user.name[0]}</Avatar.Fallback>\n\t\t\t\t\t\t\t</Avatar.Root>\n\t\t\t\t\t\t\t<div class=\"ms-2\">\n\t\t\t\t\t\t\t\t<p class=\"text-sm leading-none font-medium\">\n\t\t\t\t\t\t\t\t\t{user.name}\n\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t\t<p class=\"text-muted-foreground text-sm\">\n\t\t\t\t\t\t\t\t\t{user.email}\n\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t{#if selectedUsers.includes(user)}\n\t\t\t\t\t\t\t\t<CheckIcon class=\"text-primary ms-auto flex size-4\" />\n\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t</Command.Item>\n\t\t\t\t\t{/each}\n\t\t\t\t</Command.Group>\n\t\t\t</Command.List>\n\t\t</Command.Root>\n\t\t<Dialog.Footer class=\"flex items-center border-t p-4 sm:justify-between\">\n\t\t\t{#if selectedUsers.length > 0}\n\t\t\t\t<div class=\"flex -space-x-2 overflow-hidden\">\n\t\t\t\t\t{#each selectedUsers as user (user.email)}\n\t\t\t\t\t\t<Avatar.Root class=\"inline-block border\">\n\t\t\t\t\t\t\t<Avatar.Image src={user.avatar} />\n\t\t\t\t\t\t\t<Avatar.Fallback>{user.name[0]}</Avatar.Fallback>\n\t\t\t\t\t\t</Avatar.Root>\n\t\t\t\t\t{/each}\n\t\t\t\t</div>\n\t\t\t{:else}\n\t\t\t\t<p class=\"text-muted-foreground text-sm\">Select users to add to this thread.</p>\n\t\t\t{/if}\n\t\t\t<Button disabled={selectedUsers.length < 2} onclick={() => (open = false)}>\n\t\t\t\tContinue\n\t\t\t</Button>\n\t\t</Dialog.Footer>\n\t</Dialog.Content>\n</Dialog.Root>\n"
  },
  {
    "path": "docs/src/lib/components/cards/cookie-settings.svelte",
    "content": "<script lang=\"ts\">\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport { Switch } from \"$lib/registry/ui/switch/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n</script>\n\n<Card.Root>\n\t<Card.Header>\n\t\t<Card.Title>Cookie Settings</Card.Title>\n\t\t<Card.Description>Manage your cookie settings here.</Card.Description>\n\t</Card.Header>\n\t<Card.Content class=\"grid gap-6\">\n\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t<Field.Content>\n\t\t\t\t<Field.Label for=\"necessary\">Strictly Necessary</Field.Label>\n\t\t\t\t<Field.Description>\n\t\t\t\t\tThese cookies are essential in order to use the website and use its features.\n\t\t\t\t</Field.Description>\n\t\t\t</Field.Content>\n\t\t\t<Switch id=\"necessary\" checked aria-label=\"Necessary\" />\n\t\t</Field.Field>\n\t\t<Field.Field>\n\t\t\t<Button variant=\"outline\">Save preferences</Button>\n\t\t</Field.Field>\n\t</Card.Content>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/components/cards/create-account.svelte",
    "content": "<script lang=\"ts\">\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport { Input } from \"$lib/registry/ui/input/index.js\";\n\n\tconst id = $props.id();\n</script>\n\n<Card.Root>\n\t<Card.Header>\n\t\t<Card.Title class=\"text-2xl\">Create an account</Card.Title>\n\t\t<Card.Description>Enter your email below to create your account</Card.Description>\n\t</Card.Header>\n\t<Card.Content>\n\t\t<Field.Group>\n\t\t\t<Field.Field class=\"grid grid-cols-2 gap-6\">\n\t\t\t\t<Button variant=\"outline\">\n\t\t\t\t\t<svg viewBox=\"0 0 438.549 438.549\">\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\tfill=\"currentColor\"\n\t\t\t\t\t\t\td=\"M409.132 114.573c-19.608-33.596-46.205-60.194-79.798-79.8-33.598-19.607-70.277-29.408-110.063-29.408-39.781 0-76.472 9.804-110.063 29.408-33.596 19.605-60.192 46.204-79.8 79.8C9.803 148.168 0 184.854 0 224.63c0 47.78 13.94 90.745 41.827 128.906 27.884 38.164 63.906 64.572 108.063 79.227 5.14.954 8.945.283 11.419-1.996 2.475-2.282 3.711-5.14 3.711-8.562 0-.571-.049-5.708-.144-15.417a2549.81 2549.81 0 01-.144-25.406l-6.567 1.136c-4.187.767-9.469 1.092-15.846 1-6.374-.089-12.991-.757-19.842-1.999-6.854-1.231-13.229-4.086-19.13-8.559-5.898-4.473-10.085-10.328-12.56-17.556l-2.855-6.57c-1.903-4.374-4.899-9.233-8.992-14.559-4.093-5.331-8.232-8.945-12.419-10.848l-1.999-1.431c-1.332-.951-2.568-2.098-3.711-3.429-1.142-1.331-1.997-2.663-2.568-3.997-.572-1.335-.098-2.43 1.427-3.289 1.525-.859 4.281-1.276 8.28-1.276l5.708.853c3.807.763 8.516 3.042 14.133 6.851 5.614 3.806 10.229 8.754 13.846 14.842 4.38 7.806 9.657 13.754 15.846 17.847 6.184 4.093 12.419 6.136 18.699 6.136 6.28 0 11.704-.476 16.274-1.423 4.565-.952 8.848-2.383 12.847-4.285 1.713-12.758 6.377-22.559 13.988-29.41-10.848-1.14-20.601-2.857-29.264-5.14-8.658-2.286-17.605-5.996-26.835-11.14-9.235-5.137-16.896-11.516-22.985-19.126-6.09-7.614-11.088-17.61-14.987-29.979-3.901-12.374-5.852-26.648-5.852-42.826 0-23.035 7.52-42.637 22.557-58.817-7.044-17.318-6.379-36.732 1.997-58.24 5.52-1.715 13.706-.428 24.554 3.853 10.85 4.283 18.794 7.952 23.84 10.994 5.046 3.041 9.089 5.618 12.135 7.708 17.705-4.947 35.976-7.421 54.818-7.421s37.117 2.474 54.823 7.421l10.849-6.849c7.419-4.57 16.18-8.758 26.262-12.565 10.088-3.805 17.802-4.853 23.134-3.138 8.562 21.509 9.325 40.922 2.279 58.24 15.036 16.18 22.559 35.787 22.559 58.817 0 16.178-1.958 30.497-5.853 42.966-3.9 12.471-8.941 22.457-15.125 29.979-6.191 7.521-13.901 13.85-23.131 18.986-9.232 5.14-18.182 8.85-26.84 11.136-8.662 2.286-18.415 4.004-29.263 5.146 9.894 8.562 14.842 22.077 14.842 40.539v60.237c0 3.422 1.19 6.279 3.572 8.562 2.379 2.279 6.136 2.95 11.276 1.995 44.163-14.653 80.185-41.062 108.068-79.226 27.88-38.161 41.825-81.126 41.825-128.906-.01-39.771-9.818-76.454-29.414-110.049z\"\n\t\t\t\t\t\t></path>\n\t\t\t\t\t</svg>\n\t\t\t\t\tGitHub\n\t\t\t\t</Button>\n\t\t\t\t<Button variant=\"outline\">\n\t\t\t\t\t<svg role=\"img\" viewBox=\"0 0 24 24\">\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\tfill=\"currentColor\"\n\t\t\t\t\t\t\td=\"M12.48 10.92v3.28h7.84c-.24 1.84-.853 3.187-1.787 4.133-1.147 1.147-2.933 2.4-6.053 2.4-4.827 0-8.6-3.893-8.6-8.72s3.773-8.72 8.6-8.72c2.6 0 4.507 1.027 5.907 2.347l2.307-2.307C18.747 1.44 16.133 0 12.48 0 5.867 0 .307 5.387.307 12s5.56 12 12.173 12c3.573 0 6.267-1.173 8.373-3.36 2.16-2.16 2.84-5.213 2.84-7.667 0-.76-.053-1.467-.173-2.053H12.48z\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</svg>\n\t\t\t\t\tGoogle\n\t\t\t\t</Button>\n\t\t\t</Field.Field>\n\t\t\t<Field.Separator class=\"*:data-[slot=field-separator-content]:bg-card\">\n\t\t\t\tOr continue with\n\t\t\t</Field.Separator>\n\t\t\t<Field.Field>\n\t\t\t\t<Field.Label for=\"email-create-account-{id}\">Email</Field.Label>\n\t\t\t\t<Input id=\"email-create-account-{id}\" type=\"email\" placeholder=\"m@example.com\" />\n\t\t\t</Field.Field>\n\t\t\t<Field.Field>\n\t\t\t\t<Field.Label for=\"password-create-account-{id}\">Password</Field.Label>\n\t\t\t\t<Input id=\"password-create-account-{id}\" type=\"password\" />\n\t\t\t</Field.Field>\n\t\t\t<Field.Field>\n\t\t\t\t<Button>Create Account</Button>\n\t\t\t</Field.Field>\n\t\t</Field.Group>\n\t</Card.Content>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/components/cards/demo.svelte",
    "content": "<script lang=\"ts\">\n\timport {\n\t\tFieldSliderDemo,\n\t\tButtonGroupInputGroupDemo,\n\t\tSpinnerBadgeDemo,\n\t\tInputGroupDemo,\n\t\tEmptyAvatarGroupDemo,\n\t\tFieldDemo,\n\t\tButtonGroupDemo,\n\t\tSpinnerEmptyDemo,\n\t\tButtonGroupPopoverDemo,\n\t} from \"$lib/registry/examples/index.js\";\n\timport { FieldSeparator } from \"$lib/registry/ui/field/index.js\";\n\timport AppearanceSettings from \"./appearance-settings.svelte\";\n\timport FieldCheckbox from \"./field-checkbox.svelte\";\n\timport FieldHear from \"./field-hear.svelte\";\n\timport InputGroupButtonDemo from \"./input-group-button-demo.svelte\";\n\timport ItemDemo from \"./item-demo.svelte\";\n\timport Nested from \"./nested.svelte\";\n\timport NotionPromptForm from \"./notion-prompt-form.svelte\";\n</script>\n\n<div\n\tclass=\"theme-container mx-auto grid gap-8 py-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 xl:gap-6 2xl:gap-8\"\n>\n\t<div class=\"flex flex-col gap-6 *:[div]:w-full *:[div]:max-w-full\">\n\t\t<div class=\"border-border rounded-lg border p-6\">\n\t\t\t<FieldDemo />\n\t\t</div>\n\t</div>\n\t<div class=\"flex flex-col gap-6 *:[div]:w-full *:[div]:max-w-full\">\n\t\t<div class=\"border-border rounded-lg border p-6\">\n\t\t\t<EmptyAvatarGroupDemo />\n\t\t</div>\n\t\t<SpinnerBadgeDemo />\n\t\t<ButtonGroupInputGroupDemo />\n\t\t<FieldSliderDemo />\n\t\t<InputGroupDemo />\n\t</div>\n\t<div class=\"flex flex-col gap-6 *:[div]:w-full *:[div]:max-w-full\">\n\t\t<InputGroupButtonDemo />\n\t\t<ItemDemo />\n\t\t<FieldSeparator>Appearance Settings</FieldSeparator>\n\t\t<AppearanceSettings />\n\t</div>\n\t<div\n\t\tclass=\"order-first flex flex-col gap-6 lg:hidden xl:order-last xl:flex *:[div]:w-full *:[div]:max-w-full\"\n\t>\n\t\t<NotionPromptForm />\n\t\t<ButtonGroupDemo />\n\t\t<FieldCheckbox />\n\t\t<div class=\"flex justify-between gap-4\">\n\t\t\t<Nested />\n\t\t\t<ButtonGroupPopoverDemo />\n\t\t</div>\n\t\t<FieldHear />\n\t\t<div class=\"border-border rounded-lg border border-dashed p-6\">\n\t\t\t<SpinnerEmptyDemo />\n\t\t</div>\n\t</div>\n</div>\n"
  },
  {
    "path": "docs/src/lib/components/cards/exercise-minutes.svelte",
    "content": "<script lang=\"ts\">\n\timport { LineChart } from \"layerchart\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport { curveNatural } from \"d3-shape\";\n\n\tconst data = [\n\t\t{\n\t\t\taverage: 400,\n\t\t\ttoday: 240,\n\t\t\tday: \"Monday\",\n\t\t},\n\t\t{\n\t\t\taverage: 300,\n\t\t\ttoday: 139,\n\t\t\tday: \"Tuesday\",\n\t\t},\n\t\t{\n\t\t\taverage: 200,\n\t\t\ttoday: 980,\n\t\t\tday: \"Wednesday\",\n\t\t},\n\t\t{\n\t\t\taverage: 278,\n\t\t\ttoday: 390,\n\t\t\tday: \"Thursday\",\n\t\t},\n\t\t{\n\t\t\taverage: 189,\n\t\t\ttoday: 480,\n\t\t\tday: \"Friday\",\n\t\t},\n\t\t{\n\t\t\taverage: 239,\n\t\t\ttoday: 380,\n\t\t\tday: \"Saturday\",\n\t\t},\n\t\t{\n\t\t\taverage: 349,\n\t\t\ttoday: 430,\n\t\t\tday: \"Sunday\",\n\t\t},\n\t];\n\n\tconst chartConfig = {\n\t\ttoday: {\n\t\t\tlabel: \"Today\",\n\t\t\tcolor: \"var(--primary)\",\n\t\t},\n\t\taverage: {\n\t\t\tlabel: \"Average\",\n\t\t\tcolor: \"var(--primary)\",\n\t\t},\n\t} satisfies Chart.ChartConfig;\n</script>\n\n<Card.Root>\n\t<Card.Header>\n\t\t<Card.Title>Exercise Minutes</Card.Title>\n\t\t<Card.Description>\n\t\t\tYour exercise minutes are ahead of where you normally are.\n\t\t</Card.Description>\n\t</Card.Header>\n\t<Card.Content class=\"pb-4\">\n\t\t<Chart.Container\n\t\t\tconfig={chartConfig}\n\t\t\tclass=\"w-full md:h-[200px] [&_.lc-highlight-line]:stroke-1\"\n\t\t>\n\t\t\t<LineChart\n\t\t\t\taxis=\"x\"\n\t\t\t\tdata={data.map((d, i) => ({ ...d, index: i }))}\n\t\t\t\tx=\"index\"\n\t\t\t\tseries={[\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"average\",\n\t\t\t\t\t\tcolor: \"var(--color-average)\",\n\t\t\t\t\t\tlabel: \"Average\",\n\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\t\"stroke-opacity\": 0.5,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"today\",\n\t\t\t\t\t\tcolor: \"var(--color-today)\",\n\t\t\t\t\t\tlabel: \"Today\",\n\t\t\t\t\t},\n\t\t\t\t]}\n\t\t\t\tseriesLayout=\"stack\"\n\t\t\t\tpoints\n\t\t\t\tprops={{\n\t\t\t\t\tspline: { curve: curveNatural, strokeWidth: 2 },\n\t\t\t\t\tpoints: {\n\t\t\t\t\t\tr: 3,\n\t\t\t\t\t\tstroke: \"var(--color-today)\",\n\t\t\t\t\t\tstrokeWidth: 2,\n\t\t\t\t\t\tfill: \"var(--color-today)\",\n\t\t\t\t\t},\n\t\t\t\t\thighlight: {\n\t\t\t\t\t\tpoints: {\n\t\t\t\t\t\t\tmotion: { type: \"none\" },\n\t\t\t\t\t\t\tr: 5,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\txAxis: {\n\t\t\t\t\t\tformat: (d) => data[d]?.day?.slice(0, 3),\n\t\t\t\t\t},\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{#snippet tooltip()}\n\t\t\t\t\t<Chart.Tooltip label=\"Minutes\" />\n\t\t\t\t{/snippet}\n\t\t\t</LineChart>\n\t\t</Chart.Container>\n\t</Card.Content>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/components/cards/field-checkbox.svelte",
    "content": "<script lang=\"ts\">\n\timport { Checkbox } from \"$lib/registry/ui/checkbox/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n</script>\n\n<Field.Label for=\"checkbox-demo\">\n\t<Field.Field orientation=\"horizontal\">\n\t\t<Checkbox id=\"checkbox-demo\" checked />\n\t\t<Field.Label for=\"checkbox-demo\" class=\"line-clamp-1\">\n\t\t\tI agree to the terms and conditions\n\t\t</Field.Label>\n\t</Field.Field>\n</Field.Label>\n"
  },
  {
    "path": "docs/src/lib/components/cards/field-hear.svelte",
    "content": "<script lang=\"ts\">\n\timport { Card, CardContent } from \"$lib/registry/ui/card/index.js\";\n\timport { Checkbox } from \"$lib/registry/ui/checkbox/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\n\tconst options = [\n\t\t{\n\t\t\tlabel: \"Social Media\",\n\t\t\tvalue: \"social-media\",\n\t\t},\n\t\t{\n\t\t\tlabel: \"Search Engine\",\n\t\t\tvalue: \"search-engine\",\n\t\t},\n\t\t{\n\t\t\tlabel: \"Referral\",\n\t\t\tvalue: \"referral\",\n\t\t},\n\t\t{\n\t\t\tlabel: \"Other\",\n\t\t\tvalue: \"other\",\n\t\t},\n\t];\n</script>\n\n<Card class=\"py-4 shadow-none\">\n\t<CardContent class=\"px-4\">\n\t\t<form>\n\t\t\t<Field.Group>\n\t\t\t\t<Field.Set class=\"gap-4\">\n\t\t\t\t\t<Field.Legend>How did you hear about us?</Field.Legend>\n\t\t\t\t\t<Field.Description class=\"line-clamp-1\">\n\t\t\t\t\t\tSelect the option that best describes how you heard about us.\n\t\t\t\t\t</Field.Description>\n\t\t\t\t\t<Field.Group class=\"flex flex-row flex-wrap gap-2 [--radius:9999rem]\">\n\t\t\t\t\t\t{#each options as option (option.value)}\n\t\t\t\t\t\t\t<Field.Label for={option.value} class=\"!w-fit\">\n\t\t\t\t\t\t\t\t<Field.Field\n\t\t\t\t\t\t\t\t\torientation=\"horizontal\"\n\t\t\t\t\t\t\t\t\tclass=\"gap-1.5 overflow-hidden !px-3 !py-1.5 transition-all duration-100 ease-linear group-has-data-[state=checked]/field-label:!px-2\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<Checkbox\n\t\t\t\t\t\t\t\t\t\tvalue={option.value}\n\t\t\t\t\t\t\t\t\t\tid={option.value}\n\t\t\t\t\t\t\t\t\t\tchecked={option.value === \"social-media\"}\n\t\t\t\t\t\t\t\t\t\tclass=\"-ms-6 -translate-x-1 rounded-full transition-all duration-100 ease-linear data-[state=checked]:ms-0 data-[state=checked]:translate-x-0\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<Field.Title class=\"text-nowrap\">{option.label}</Field.Title>\n\t\t\t\t\t\t\t\t</Field.Field>\n\t\t\t\t\t\t\t</Field.Label>\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</Field.Group>\n\t\t\t\t</Field.Set>\n\t\t\t</Field.Group>\n\t\t</form>\n\t</CardContent>\n</Card>\n"
  },
  {
    "path": "docs/src/lib/components/cards/forms.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport { Checkbox } from \"$lib/registry/ui/checkbox/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport { Input } from \"$lib/registry/ui/input/index.js\";\n\timport * as RadioGroup from \"$lib/registry/ui/radio-group/index.js\";\n\timport { Textarea } from \"$lib/registry/ui/textarea/index.js\";\n\n\tconst plans = [\n\t\t{\n\t\t\tid: \"starter\",\n\t\t\tname: \"Starter Plan\",\n\t\t\tdescription: \"For small businesses.\",\n\t\t\tprice: \"$10\",\n\t\t},\n\t\t{\n\t\t\tid: \"pro\",\n\t\t\tname: \"Pro Plan\",\n\t\t\tdescription: \"More features and storage.\",\n\t\t\tprice: \"$20\",\n\t\t},\n\t] as const;\n\n\tconst id = $props.id();\n</script>\n\n<Card.Root>\n\t<Card.Header>\n\t\t<Card.Title class=\"text-lg\">Upgrade your subscription</Card.Title>\n\t\t<Card.Description class=\"text-balance\">\n\t\t\tYou are currently on the free plan. Upgrade to the pro plan to get access to all\n\t\t\tfeatures.\n\t\t</Card.Description>\n\t</Card.Header>\n\t<Card.Content>\n\t\t<form>\n\t\t\t<Field.Group>\n\t\t\t\t<Field.Group class=\"grid grid-cols-2\">\n\t\t\t\t\t<Field.Field>\n\t\t\t\t\t\t<Field.Label for=\"name-{id}\">Name</Field.Label>\n\t\t\t\t\t\t<Input id=\"name-{id}\" placeholder=\"Max Leiter\" />\n\t\t\t\t\t</Field.Field>\n\t\t\t\t\t<Field.Field>\n\t\t\t\t\t\t<Field.Label for=\"email-{id}\">Email</Field.Label>\n\t\t\t\t\t\t<Input id=\"email-{id}\" placeholder=\"mail@acme.com\" />\n\t\t\t\t\t</Field.Field>\n\t\t\t\t</Field.Group>\n\t\t\t\t<Field.Group class=\"grid grid-cols-2 gap-3 md:grid-cols-[1fr_80px_60px]\">\n\t\t\t\t\t<Field.Field>\n\t\t\t\t\t\t<Field.Label for=\"card-number-{id}\">Card Number</Field.Label>\n\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\tid=\"card-number-{id}\"\n\t\t\t\t\t\t\tplaceholder=\"1234 1234 1234 1234\"\n\t\t\t\t\t\t\tclass=\"col-span-2 md:col-span-1\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Field.Field>\n\t\t\t\t\t<Field.Field>\n\t\t\t\t\t\t<Field.Label for=\"card-number-expiry-{id}\">Expiry Date</Field.Label>\n\t\t\t\t\t\t<Input id=\"card-number-expiry-{id}\" placeholder=\"MM/YY\" />\n\t\t\t\t\t</Field.Field>\n\t\t\t\t\t<Field.Field>\n\t\t\t\t\t\t<Field.Label for=\"card-number-cvc-{id}\">CVC</Field.Label>\n\t\t\t\t\t\t<Input id=\"card-number-cvc-{id}\" placeholder=\"CVC\" />\n\t\t\t\t\t</Field.Field>\n\t\t\t\t</Field.Group>\n\t\t\t\t<Field.Set>\n\t\t\t\t\t<Field.Legend>Plan</Field.Legend>\n\t\t\t\t\t<Field.Description>Select the plan that best fits your needs.</Field.Description\n\t\t\t\t\t>\n\t\t\t\t\t<RadioGroup.Root value=\"starter\" class=\"grid grid-cols-2 gap-2\">\n\t\t\t\t\t\t{#each plans as plan (plan.id)}\n\t\t\t\t\t\t\t<Field.Label>\n\t\t\t\t\t\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t\t\t\t\t\t<Field.Content>\n\t\t\t\t\t\t\t\t\t\t<Field.Title>{plan.name}</Field.Title>\n\t\t\t\t\t\t\t\t\t\t<Field.Description class=\"text-xs\">\n\t\t\t\t\t\t\t\t\t\t\t{plan.description}\n\t\t\t\t\t\t\t\t\t\t</Field.Description>\n\t\t\t\t\t\t\t\t\t</Field.Content>\n\t\t\t\t\t\t\t\t\t<RadioGroup.Item value={plan.id} id={plan.name} />\n\t\t\t\t\t\t\t\t</Field.Field>\n\t\t\t\t\t\t\t</Field.Label>\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</RadioGroup.Root>\n\t\t\t\t</Field.Set>\n\t\t\t\t<Field.Field>\n\t\t\t\t\t<Field.Label for=\"notes\">Notes</Field.Label>\n\t\t\t\t\t<Textarea id=\"notes\" placeholder=\"Enter notes\" />\n\t\t\t\t</Field.Field>\n\t\t\t\t<Field.Field>\n\t\t\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t\t\t<Checkbox id=\"terms\" />\n\t\t\t\t\t\t<Field.Label for=\"terms\" class=\"font-normal\">\n\t\t\t\t\t\t\tI agree to the terms and conditions\n\t\t\t\t\t\t</Field.Label>\n\t\t\t\t\t</Field.Field>\n\t\t\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t\t\t<Checkbox id=\"newsletter\" checked />\n\t\t\t\t\t\t<Field.Label for=\"newsletter\" class=\"font-normal\">\n\t\t\t\t\t\t\tAllow us to send you emails\n\t\t\t\t\t\t</Field.Label>\n\t\t\t\t\t</Field.Field>\n\t\t\t\t</Field.Field>\n\t\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t\t<Button variant=\"outline\" size=\"sm\">Cancel</Button>\n\t\t\t\t\t<Button size=\"sm\">Upgrade Plan</Button>\n\t\t\t\t</Field.Field>\n\t\t\t</Field.Group>\n\t\t</form>\n\t</Card.Content>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/components/cards/input-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport BadgeCheckIcon from \"@lucide/svelte/icons/badge-check\";\n\timport ChevronRightIcon from \"@lucide/svelte/icons/chevron-right\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Item from \"$lib/registry/ui/item/index.js\";\n</script>\n\n<div class=\"flex w-full max-w-md flex-col gap-6\">\n\t<Item.Root variant=\"outline\">\n\t\t<Item.Content>\n\t\t\t<Item.Title>Two-factor authentication</Item.Title>\n\t\t\t<Item.Description class=\"text-pretty xl:hidden 2xl:block\">\n\t\t\t\tVerify via email or phone number.\n\t\t\t</Item.Description>\n\t\t</Item.Content>\n\t\t<Item.Actions>\n\t\t\t<Button size=\"sm\">Enable</Button>\n\t\t</Item.Actions>\n\t</Item.Root>\n\t<Item.Root variant=\"outline\" size=\"sm\">\n\t\t{#snippet child({ props })}\n\t\t\t<a href=\"#/\" {...props}>\n\t\t\t\t<Item.Media>\n\t\t\t\t\t<BadgeCheckIcon class=\"size-5\" />\n\t\t\t\t</Item.Media>\n\t\t\t\t<Item.Content>\n\t\t\t\t\t<Item.Title>Your profile has been verified.</Item.Title>\n\t\t\t\t</Item.Content>\n\t\t\t\t<Item.Actions>\n\t\t\t\t\t<ChevronRightIcon class=\"size-4\" />\n\t\t\t\t</Item.Actions>\n\t\t\t</a>\n\t\t{/snippet}\n\t</Item.Root>\n</div>\n"
  },
  {
    "path": "docs/src/lib/components/cards/input-group-button-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport * as InputGroup from \"$lib/registry/ui/input-group/index.js\";\n\timport { Label } from \"$lib/registry/ui/label/index.js\";\n\timport * as Popover from \"$lib/registry/ui/popover/index.js\";\n\timport InfoIcon from \"@tabler/icons-svelte/icons/info-circle\";\n\timport IconStar from \"@tabler/icons-svelte/icons/star\";\n\n\tlet isFavorite = $state(false);\n</script>\n\n<div class=\"grid w-full max-w-sm gap-6\">\n\t<Label for=\"input-secure-19\" class=\"sr-only\">Input Secure</Label>\n\t<InputGroup.Root class=\"[--radius:9999px]\">\n\t\t<InputGroup.Input id=\"input-secure-19\" class=\"!ps-0.5\" />\n\t\t<Popover.Root>\n\t\t\t<Popover.Trigger>\n\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t<InputGroup.Addon>\n\t\t\t\t\t\t<InputGroup.Button\n\t\t\t\t\t\t\t{...props}\n\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\tsize=\"icon-xs\"\n\t\t\t\t\t\t\taria-label=\"Info\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<InfoIcon />\n\t\t\t\t\t\t</InputGroup.Button>\n\t\t\t\t\t</InputGroup.Addon>\n\t\t\t\t{/snippet}\n\t\t\t</Popover.Trigger>\n\t\t\t<Popover.Content\n\t\t\t\talign=\"start\"\n\t\t\t\talignOffset={10}\n\t\t\t\tclass=\"flex flex-col gap-1 rounded-xl text-sm\"\n\t\t\t>\n\t\t\t\t<p class=\"font-medium\">Your connection is not secure.</p>\n\t\t\t\t<p>You should not enter any sensitive information on this site.</p>\n\t\t\t</Popover.Content>\n\t\t</Popover.Root>\n\t\t<InputGroup.Addon class=\"text-muted-foreground !ps-1\">https://</InputGroup.Addon>\n\t\t<InputGroup.Addon align=\"inline-end\">\n\t\t\t<InputGroup.Button\n\t\t\t\tonclick={() => (isFavorite = !isFavorite)}\n\t\t\t\tsize=\"icon-xs\"\n\t\t\t\taria-label=\"Favorite\"\n\t\t\t>\n\t\t\t\t<IconStar\n\t\t\t\t\tdata-favorite={isFavorite}\n\t\t\t\t\tclass=\"data-[favorite=true]:fill-primary data-[favorite=true]:stroke-primary\"\n\t\t\t\t/>\n\t\t\t</InputGroup.Button>\n\t\t</InputGroup.Addon>\n\t</InputGroup.Root>\n</div>\n"
  },
  {
    "path": "docs/src/lib/components/cards/item-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport BadgeCheckIcon from \"@lucide/svelte/icons/badge-check\";\n\timport ChevronRightIcon from \"@lucide/svelte/icons/chevron-right\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Item from \"$lib/registry/ui/item/index.js\";\n</script>\n\n<div class=\"flex w-full max-w-md flex-col gap-6\">\n\t<Item.Root variant=\"outline\">\n\t\t<Item.Content>\n\t\t\t<Item.Title>Two-factor authentication</Item.Title>\n\t\t\t<Item.Description class=\"text-pretty xl:hidden 2xl:block\">\n\t\t\t\tVerify via email or phone number.\n\t\t\t</Item.Description>\n\t\t</Item.Content>\n\t\t<Item.Actions>\n\t\t\t<Button size=\"sm\">Enable</Button>\n\t\t</Item.Actions>\n\t</Item.Root>\n\t<Item.Root variant=\"outline\" size=\"sm\">\n\t\t{#snippet child({ props })}\n\t\t\t<a href=\"#/\" {...props}>\n\t\t\t\t<Item.Media>\n\t\t\t\t\t<BadgeCheckIcon class=\"size-5\" />\n\t\t\t\t</Item.Media>\n\t\t\t\t<Item.Content>\n\t\t\t\t\t<Item.Title>Your profile has been verified.</Item.Title>\n\t\t\t\t</Item.Content>\n\t\t\t\t<Item.Actions>\n\t\t\t\t\t<ChevronRightIcon class=\"size-4\" />\n\t\t\t\t</Item.Actions>\n\t\t\t</a>\n\t\t{/snippet}\n\t</Item.Root>\n</div>\n"
  },
  {
    "path": "docs/src/lib/components/cards/nested.svelte",
    "content": "<script lang=\"ts\">\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as ButtonGroup from \"$lib/registry/ui/button-group/index.js\";\n\timport ArrowLeft from \"@lucide/svelte/icons/arrow-left\";\n\timport ArrowRight from \"@lucide/svelte/icons/arrow-right\";\n</script>\n\n<ButtonGroup.Root>\n\t<ButtonGroup.Root>\n\t\t<Button variant=\"outline\" size=\"sm\">1</Button>\n\t\t<Button variant=\"outline\" size=\"sm\">2</Button>\n\t\t<Button variant=\"outline\" size=\"sm\">3</Button>\n\t</ButtonGroup.Root>\n\t<ButtonGroup.Root>\n\t\t<Button variant=\"outline\" size=\"icon-sm\" aria-label=\"Previous\">\n\t\t\t<ArrowLeft />\n\t\t</Button>\n\t\t<Button variant=\"outline\" size=\"icon-sm\" aria-label=\"Next\">\n\t\t\t<ArrowRight />\n\t\t</Button>\n\t</ButtonGroup.Root>\n</ButtonGroup.Root>\n"
  },
  {
    "path": "docs/src/lib/components/cards/notion-prompt-form.svelte",
    "content": "<script lang=\"ts\">\n\timport AtIcon from \"@lucide/svelte/icons/at-sign\";\n\timport ArrowUpIcon from \"@lucide/svelte/icons/arrow-up\";\n\timport AppsIcon from \"@lucide/svelte/icons/grid-3x3\";\n\timport BookIcon from \"@lucide/svelte/icons/book\";\n\timport CirclePlusIcon from \"@lucide/svelte/icons/circle-plus\";\n\timport PaperclipIcon from \"@lucide/svelte/icons/paperclip\";\n\timport PlusIcon from \"@lucide/svelte/icons/plus\";\n\timport GlobeIcon from \"@lucide/svelte/icons/globe\";\n\timport XIcon from \"@lucide/svelte/icons/x\";\n\timport { Avatar, AvatarFallback, AvatarImage } from \"$lib/registry/ui/avatar/index.js\";\n\timport { Badge } from \"$lib/registry/ui/badge/index.js\";\n\timport * as Command from \"$lib/registry/ui/command/index.js\";\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport * as InputGroup from \"$lib/registry/ui/input-group/index.js\";\n\timport * as Popover from \"$lib/registry/ui/popover/index.js\";\n\timport { Switch } from \"$lib/registry/ui/switch/index.js\";\n\timport * as Tooltip from \"$lib/registry/ui/tooltip/index.js\";\n\n\tconst SAMPLE_DATA = {\n\t\tmentionable: [\n\t\t\t{\n\t\t\t\ttype: \"page\",\n\t\t\t\ttitle: \"Meeting Notes\",\n\t\t\t\timage: \"📝\",\n\t\t\t},\n\t\t\t{\n\t\t\t\ttype: \"page\",\n\t\t\t\ttitle: \"Project Dashboard\",\n\t\t\t\timage: \"📊\",\n\t\t\t},\n\t\t\t{\n\t\t\t\ttype: \"page\",\n\t\t\t\ttitle: \"Ideas & Brainstorming\",\n\t\t\t\timage: \"💡\",\n\t\t\t},\n\t\t\t{\n\t\t\t\ttype: \"page\",\n\t\t\t\ttitle: \"Calendar & Events\",\n\t\t\t\timage: \"📅\",\n\t\t\t},\n\t\t\t{\n\t\t\t\ttype: \"page\",\n\t\t\t\ttitle: \"Documentation\",\n\t\t\t\timage: \"📚\",\n\t\t\t},\n\t\t\t{\n\t\t\t\ttype: \"page\",\n\t\t\t\ttitle: \"Goals & Objectives\",\n\t\t\t\timage: \"🎯\",\n\t\t\t},\n\t\t\t{\n\t\t\t\ttype: \"page\",\n\t\t\t\ttitle: \"Budget Planning\",\n\t\t\t\timage: \"💰\",\n\t\t\t},\n\t\t\t{\n\t\t\t\ttype: \"page\",\n\t\t\t\ttitle: \"Team Directory\",\n\t\t\t\timage: \"👥\",\n\t\t\t},\n\t\t\t{\n\t\t\t\ttype: \"page\",\n\t\t\t\ttitle: \"Technical Specs\",\n\t\t\t\timage: \"🔧\",\n\t\t\t},\n\t\t\t{\n\t\t\t\ttype: \"page\",\n\t\t\t\ttitle: \"Analytics Report\",\n\t\t\t\timage: \"📈\",\n\t\t\t},\n\t\t\t{\n\t\t\t\ttype: \"user\",\n\t\t\t\ttitle: \"shadcn\",\n\t\t\t\timage: \"https://github.com/shadcn.png\",\n\t\t\t\tworkspace: \"Workspace\",\n\t\t\t},\n\t\t\t{\n\t\t\t\ttype: \"user\",\n\t\t\t\ttitle: \"maxleiter\",\n\t\t\t\timage: \"https://github.com/maxleiter.png\",\n\t\t\t\tworkspace: \"Workspace\",\n\t\t\t},\n\t\t\t{\n\t\t\t\ttype: \"user\",\n\t\t\t\ttitle: \"evilrabbit\",\n\t\t\t\timage: \"https://github.com/evilrabbit.png\",\n\t\t\t\tworkspace: \"Workspace\",\n\t\t\t},\n\t\t],\n\t\tmodels: [\n\t\t\t{\n\t\t\t\tname: \"Auto\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"Agent Mode\",\n\t\t\t\tbadge: \"Beta\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"Plan Mode\",\n\t\t\t},\n\t\t],\n\t};\n\n\tlet mentions = $state<string[]>([]);\n\tlet mentionPopoverOpen = $state(false);\n\tlet modelPopoverOpen = $state(false);\n\tlet selectedModel = $state(SAMPLE_DATA.models[0]);\n\tlet scopeMenuOpen = $state(false);\n\n\tconst grouped = $derived(() => {\n\t\treturn SAMPLE_DATA.mentionable.reduce(\n\t\t\t(acc, item) => {\n\t\t\t\tconst isAvailable = !mentions.includes(item.title);\n\n\t\t\t\tif (isAvailable) {\n\t\t\t\t\tif (!acc[item.type]) {\n\t\t\t\t\t\tacc[item.type] = [];\n\t\t\t\t\t}\n\t\t\t\t\tacc[item.type].push(item);\n\t\t\t\t}\n\t\t\t\treturn acc;\n\t\t\t},\n\t\t\t{} as Record<string, typeof SAMPLE_DATA.mentionable>\n\t\t);\n\t});\n\n\tconst hasMentions = $derived(mentions.length > 0);\n</script>\n\n{#snippet MentionableIcon({ item }: { item: (typeof SAMPLE_DATA.mentionable)[0] })}\n\t{#if item.type === \"page\"}\n\t\t<span class=\"flex size-4 items-center justify-center\">\n\t\t\t{item.image}\n\t\t</span>\n\t{:else}\n\t\t<Avatar class=\"size-4\">\n\t\t\t<AvatarImage src={item.image} />\n\t\t\t<AvatarFallback>{item.title[0]}</AvatarFallback>\n\t\t</Avatar>\n\t{/if}\n{/snippet}\n\n<form class=\"[--radius:1.2rem]\">\n\t<Field.Group>\n\t\t<Field.Label for=\"notion-prompt\" class=\"sr-only\">Prompt</Field.Label>\n\t\t<InputGroup.Root>\n\t\t\t<InputGroup.Textarea\n\t\t\t\tid=\"notion-prompt\"\n\t\t\t\tplaceholder=\"Ask, search, or make anything...\"\n\t\t\t/>\n\t\t\t<InputGroup.Addon align=\"block-start\">\n\t\t\t\t<Popover.Root bind:open={mentionPopoverOpen}>\n\t\t\t\t\t<Tooltip.Root>\n\t\t\t\t\t\t<Tooltip.Trigger>\n\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t<Popover.Trigger {...props}>\n\t\t\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t\t\t<InputGroup.Button\n\t\t\t\t\t\t\t\t\t\t\t{...props}\n\t\t\t\t\t\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\t\t\t\t\t\tsize={!hasMentions ? \"sm\" : \"icon-sm\"}\n\t\t\t\t\t\t\t\t\t\t\tclass=\"rounded-full transition-transform\"\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<AtIcon />\n\t\t\t\t\t\t\t\t\t\t\t{!hasMentions && \"Add context\"}\n\t\t\t\t\t\t\t\t\t\t</InputGroup.Button>\n\t\t\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t\t\t</Popover.Trigger>\n\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t</Tooltip.Trigger>\n\t\t\t\t\t\t<Tooltip.Content>Mention a person, page, or date</Tooltip.Content>\n\t\t\t\t\t</Tooltip.Root>\n\t\t\t\t\t<Popover.Content class=\"p-0 [--radius:1.2rem]\" align=\"start\">\n\t\t\t\t\t\t<Command.Root>\n\t\t\t\t\t\t\t<Command.Input placeholder=\"Search pages...\" />\n\t\t\t\t\t\t\t<Command.List>\n\t\t\t\t\t\t\t\t<Command.Empty>No pages found</Command.Empty>\n\t\t\t\t\t\t\t\t{#each Object.entries(grouped) as [type, items] (type)}\n\t\t\t\t\t\t\t\t\t<Command.Group heading={type === \"page\" ? \"Pages\" : \"Users\"}>\n\t\t\t\t\t\t\t\t\t\t{#each items as item (item.title)}\n\t\t\t\t\t\t\t\t\t\t\t<Command.Item\n\t\t\t\t\t\t\t\t\t\t\t\tvalue={item.title}\n\t\t\t\t\t\t\t\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tmentions = [...mentions, item];\n\t\t\t\t\t\t\t\t\t\t\t\t\tmentionPopoverOpen = false;\n\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{@render MentionableIcon({ item })}\n\t\t\t\t\t\t\t\t\t\t\t\t{item.title}\n\t\t\t\t\t\t\t\t\t\t\t</Command.Item>\n\t\t\t\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t\t\t</Command.Group>\n\t\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t</Command.List>\n\t\t\t\t\t\t</Command.Root>\n\t\t\t\t\t</Popover.Content>\n\t\t\t\t</Popover.Root>\n\t\t\t\t<div class=\"no-scrollbar -m-1.5 flex gap-1 overflow-y-auto p-1.5\">\n\t\t\t\t\t{#each mentions as mention (mention)}\n\t\t\t\t\t\t{@const item = SAMPLE_DATA.mentionable.find(\n\t\t\t\t\t\t\t(item) => item.title === mention\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{#if item}\n\t\t\t\t\t\t\t<InputGroup.Button\n\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\tclass=\"rounded-full !ps-2\"\n\t\t\t\t\t\t\t\tonclick={() => {\n\t\t\t\t\t\t\t\t\tmentions = mentions.filter((m) => m !== mention);\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{@render MentionableIcon({ item })}\n\t\t\t\t\t\t\t\t{item.title}\n\t\t\t\t\t\t\t\t<XIcon />\n\t\t\t\t\t\t\t</InputGroup.Button>\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t{/each}\n\t\t\t\t</div>\n\t\t\t</InputGroup.Addon>\n\t\t\t<InputGroup.Addon align=\"block-end\" class=\"gap-1\">\n\t\t\t\t<Tooltip.Root>\n\t\t\t\t\t<Tooltip.Trigger>\n\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t<InputGroup.Button\n\t\t\t\t\t\t\t\t{...props}\n\t\t\t\t\t\t\t\tsize=\"icon-sm\"\n\t\t\t\t\t\t\t\tclass=\"rounded-full\"\n\t\t\t\t\t\t\t\taria-label=\"Attach file\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<PaperclipIcon />\n\t\t\t\t\t\t\t</InputGroup.Button>\n\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t</Tooltip.Trigger>\n\t\t\t\t\t<Tooltip.Content>Attach file</Tooltip.Content>\n\t\t\t\t</Tooltip.Root>\n\t\t\t\t<DropdownMenu.Root bind:open={modelPopoverOpen}>\n\t\t\t\t\t<Tooltip.Root>\n\t\t\t\t\t\t<Tooltip.Trigger>\n\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t<DropdownMenu.Trigger {...props}>\n\t\t\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t\t\t<InputGroup.Button\n\t\t\t\t\t\t\t\t\t\t\t{...props}\n\t\t\t\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\t\t\t\tclass=\"rounded-full\"\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{selectedModel.name}\n\t\t\t\t\t\t\t\t\t\t</InputGroup.Button>\n\t\t\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t\t\t</DropdownMenu.Trigger>\n\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t</Tooltip.Trigger>\n\t\t\t\t\t\t<Tooltip.Content>Select AI model</Tooltip.Content>\n\t\t\t\t\t</Tooltip.Root>\n\t\t\t\t\t<DropdownMenu.Content side=\"top\" align=\"start\" class=\"[--radius:1rem]\">\n\t\t\t\t\t\t<DropdownMenu.Group class=\"w-42\">\n\t\t\t\t\t\t\t<DropdownMenu.Label class=\"text-muted-foreground text-xs\">\n\t\t\t\t\t\t\t\tSelect Agent Mode\n\t\t\t\t\t\t\t</DropdownMenu.Label>\n\t\t\t\t\t\t\t{#each SAMPLE_DATA.models as model (model.name)}\n\t\t\t\t\t\t\t\t<DropdownMenu.CheckboxItem\n\t\t\t\t\t\t\t\t\tchecked={model.name === selectedModel.name}\n\t\t\t\t\t\t\t\t\tonCheckedChange={(checked) => {\n\t\t\t\t\t\t\t\t\t\tif (checked) {\n\t\t\t\t\t\t\t\t\t\t\tselectedModel = model;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\tclass=\"ps-2 *:[span:first-child]:start-auto *:[span:first-child]:end-2\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{model.name}\n\t\t\t\t\t\t\t\t\t{#if model.badge}\n\t\t\t\t\t\t\t\t\t\t<Badge\n\t\t\t\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\t\t\t\tclass=\"h-5 rounded-sm bg-blue-100 px-1 text-xs text-blue-800 dark:bg-blue-900 dark:text-blue-100\"\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{model.badge}\n\t\t\t\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\t\t</DropdownMenu.CheckboxItem>\n\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t</DropdownMenu.Group>\n\t\t\t\t\t</DropdownMenu.Content>\n\t\t\t\t</DropdownMenu.Root>\n\t\t\t\t<DropdownMenu.Root bind:open={scopeMenuOpen}>\n\t\t\t\t\t<DropdownMenu.Trigger>\n\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t<InputGroup.Button {...props} size=\"sm\" class=\"rounded-full\">\n\t\t\t\t\t\t\t\t<GlobeIcon /> All Sources\n\t\t\t\t\t\t\t</InputGroup.Button>\n\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t</DropdownMenu.Trigger>\n\t\t\t\t\t<DropdownMenu.Content side=\"top\" align=\"end\" class=\"[--radius:1rem]\">\n\t\t\t\t\t\t<DropdownMenu.Group>\n\t\t\t\t\t\t\t<DropdownMenu.Item onSelect={(e) => e.preventDefault()}>\n\t\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t\t<label for=\"web-search\" {...props}>\n\t\t\t\t\t\t\t\t\t\t<GlobeIcon /> Web Search\n\t\t\t\t\t\t\t\t\t\t<Switch id=\"web-search\" class=\"ms-auto\" checked />\n\t\t\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t</DropdownMenu.Group>\n\t\t\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t\t\t<DropdownMenu.Group>\n\t\t\t\t\t\t\t<DropdownMenu.Item onSelect={(e) => e.preventDefault()}>\n\t\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t\t<label for=\"apps\" {...props}>\n\t\t\t\t\t\t\t\t\t\t<AppsIcon /> Apps and Integrations\n\t\t\t\t\t\t\t\t\t\t<Switch id=\"apps\" class=\"ms-auto\" checked />\n\t\t\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t\t<CirclePlusIcon /> All Sources I can access\n\t\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t\t<DropdownMenu.Sub>\n\t\t\t\t\t\t\t\t<DropdownMenu.SubTrigger>\n\t\t\t\t\t\t\t\t\t<Avatar class=\"size-4\">\n\t\t\t\t\t\t\t\t\t\t<AvatarImage src=\"https://github.com/shadcn.png\" />\n\t\t\t\t\t\t\t\t\t\t<AvatarFallback>CN</AvatarFallback>\n\t\t\t\t\t\t\t\t\t</Avatar>\n\t\t\t\t\t\t\t\t\tshadcn\n\t\t\t\t\t\t\t\t</DropdownMenu.SubTrigger>\n\t\t\t\t\t\t\t\t<DropdownMenu.SubContent class=\"w-72 p-0 [--radius:1rem]\">\n\t\t\t\t\t\t\t\t\t<Command.Root>\n\t\t\t\t\t\t\t\t\t\t<Command.Input\n\t\t\t\t\t\t\t\t\t\t\tplaceholder=\"Find or use knowledge in...\"\n\t\t\t\t\t\t\t\t\t\t\tautofocus\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t<Command.List>\n\t\t\t\t\t\t\t\t\t\t\t<Command.Empty>No knowledge found</Command.Empty>\n\t\t\t\t\t\t\t\t\t\t\t<Command.Group>\n\t\t\t\t\t\t\t\t\t\t\t\t{#each SAMPLE_DATA.mentionable.filter((item) => item.type === \"user\") as user (user.title)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Command.Item\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalue={user.title}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// Handle user selection here\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Selected user:\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tuser.title\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Avatar class=\"size-4\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<AvatarImage src={user.image} />\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<AvatarFallback>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{user.title[0]}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</AvatarFallback>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Avatar>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{user.title}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"text-muted-foreground\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t- {user.workspace}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</Command.Item>\n\t\t\t\t\t\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t\t\t\t\t</Command.Group>\n\t\t\t\t\t\t\t\t\t\t</Command.List>\n\t\t\t\t\t\t\t\t\t</Command.Root>\n\t\t\t\t\t\t\t\t</DropdownMenu.SubContent>\n\t\t\t\t\t\t\t</DropdownMenu.Sub>\n\t\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t\t<BookIcon /> Help Center\n\t\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t</DropdownMenu.Group>\n\t\t\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t\t\t<DropdownMenu.Group>\n\t\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t\t<PlusIcon /> Connect Apps\n\t\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t\t<DropdownMenu.Label class=\"text-muted-foreground text-xs\">\n\t\t\t\t\t\t\t\tWe'll only search in the sources selected here.\n\t\t\t\t\t\t\t</DropdownMenu.Label>\n\t\t\t\t\t\t</DropdownMenu.Group>\n\t\t\t\t\t</DropdownMenu.Content>\n\t\t\t\t</DropdownMenu.Root>\n\t\t\t\t<InputGroup.Button\n\t\t\t\t\taria-label=\"Send\"\n\t\t\t\t\tclass=\"ms-auto rounded-full\"\n\t\t\t\t\tvariant=\"default\"\n\t\t\t\t\tsize=\"icon-sm\"\n\t\t\t\t>\n\t\t\t\t\t<ArrowUpIcon />\n\t\t\t\t</InputGroup.Button>\n\t\t\t</InputGroup.Addon>\n\t\t</InputGroup.Root>\n\t</Field.Group>\n</form>\n"
  },
  {
    "path": "docs/src/lib/components/cards/payments-actions-cell.svelte",
    "content": "<script lang=\"ts\">\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\timport type { Row } from \"@tanstack/table-core\";\n\timport EllipsisIcon from \"@lucide/svelte/icons/ellipsis\";\n\n\ttype Payment = {\n\t\tid: string;\n\t\tamount: number;\n\t\tstatus: \"pending\" | \"processing\" | \"success\" | \"failed\";\n\t\temail: string;\n\t};\n\n\tlet { row }: { row: Row<Payment> } = $props();\n\n\tconst payment = $derived(row.original);\n</script>\n\n<DropdownMenu.Root>\n\t<DropdownMenu.Trigger>\n\t\t{#snippet child({ props })}\n\t\t\t<Button variant=\"ghost\" class=\"size-8 p-0\" {...props}>\n\t\t\t\t<span class=\"sr-only\">Open menu</span>\n\t\t\t\t<EllipsisIcon />\n\t\t\t</Button>\n\t\t{/snippet}\n\t</DropdownMenu.Trigger>\n\t<DropdownMenu.Content align=\"end\">\n\t\t<DropdownMenu.Label>Actions</DropdownMenu.Label>\n\t\t<DropdownMenu.Item onclick={() => navigator.clipboard.writeText(payment.id)}>\n\t\t\tCopy payment ID\n\t\t</DropdownMenu.Item>\n\t\t<DropdownMenu.Separator />\n\t\t<DropdownMenu.Item>View customer</DropdownMenu.Item>\n\t\t<DropdownMenu.Item>View payment details</DropdownMenu.Item>\n\t</DropdownMenu.Content>\n</DropdownMenu.Root>\n"
  },
  {
    "path": "docs/src/lib/components/cards/payments-email-header.svelte",
    "content": "<script lang=\"ts\">\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport type { Column } from \"@tanstack/table-core\";\n\timport ArrowUpDownIcon from \"@lucide/svelte/icons/arrow-up-down\";\n\n\ttype Payment = {\n\t\tid: string;\n\t\tamount: number;\n\t\tstatus: \"pending\" | \"processing\" | \"success\" | \"failed\";\n\t\temail: string;\n\t};\n\n\tlet { column }: { column: Column<Payment> } = $props();\n</script>\n\n<Button variant=\"ghost\" onclick={() => column.toggleSorting(column.getIsSorted() === \"asc\")}>\n\tEmail\n\t<ArrowUpDownIcon />\n</Button>\n"
  },
  {
    "path": "docs/src/lib/components/cards/payments.svelte",
    "content": "<script lang=\"ts\" module>\n\texport type Payment = {\n\t\tid: string;\n\t\tamount: number;\n\t\tstatus: \"pending\" | \"processing\" | \"success\" | \"failed\";\n\t\temail: string;\n\t};\n</script>\n\n<script lang=\"ts\">\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport { Checkbox } from \"$lib/registry/ui/checkbox/index.js\";\n\timport * as Table from \"$lib/registry/ui/table/index.js\";\n\timport {\n\t\tgetCoreRowModel,\n\t\tgetFilteredRowModel,\n\t\tgetPaginationRowModel,\n\t\tgetSortedRowModel,\n\t\ttype ColumnDef,\n\t\ttype ColumnFiltersState,\n\t\ttype PaginationState,\n\t\ttype RowSelectionState,\n\t\ttype SortingState,\n\t\ttype VisibilityState,\n\t} from \"@tanstack/table-core\";\n\timport { renderComponent, renderSnippet } from \"$lib/registry/ui/data-table/render-helpers.js\";\n\timport { createRawSnippet } from \"svelte\";\n\timport { createSvelteTable } from \"$lib/registry/ui/data-table/data-table.svelte.js\";\n\timport { FlexRender } from \"$lib/registry/ui/data-table/index.js\";\n\timport EmailHeader from \"./payments-email-header.svelte\";\n\timport ActionsCell from \"./payments-actions-cell.svelte\";\n\n\tconst data: Payment[] = [\n\t\t{\n\t\t\tid: \"m5gr84i9\",\n\t\t\tamount: 316,\n\t\t\tstatus: \"success\",\n\t\t\temail: \"ken99@example.com\",\n\t\t},\n\t\t{\n\t\t\tid: \"3u1reuv4\",\n\t\t\tamount: 242,\n\t\t\tstatus: \"success\",\n\t\t\temail: \"Abe45@example.com\",\n\t\t},\n\t\t{\n\t\t\tid: \"derv1ws0\",\n\t\t\tamount: 837,\n\t\t\tstatus: \"processing\",\n\t\t\temail: \"Monserrat44@example.com\",\n\t\t},\n\t\t{\n\t\t\tid: \"bhqecj4p\",\n\t\t\tamount: 721,\n\t\t\tstatus: \"failed\",\n\t\t\temail: \"carmella@example.com\",\n\t\t},\n\t\t{\n\t\t\tid: \"k9f2m3n4\",\n\t\t\tamount: 450,\n\t\t\tstatus: \"pending\",\n\t\t\temail: \"jason78@example.com\",\n\t\t},\n\t\t{\n\t\t\tid: \"p5q6r7s8\",\n\t\t\tamount: 1280,\n\t\t\tstatus: \"success\",\n\t\t\temail: \"sarah23@example.com\",\n\t\t},\n\t];\n\n\tconst columns: ColumnDef<Payment>[] = [\n\t\t{\n\t\t\tid: \"select\",\n\t\t\theader: ({ table }) =>\n\t\t\t\trenderComponent(Checkbox, {\n\t\t\t\t\tchecked: table.getIsAllPageRowsSelected(),\n\t\t\t\t\tindeterminate: table.getIsSomeRowsSelected() && !table.getIsAllRowsSelected(),\n\t\t\t\t\tonCheckedChange: (v) => table.toggleAllPageRowsSelected(!!v),\n\t\t\t\t\t\"aria-label\": \"Select all\",\n\t\t\t\t}),\n\t\t\tcell: ({ row }) =>\n\t\t\t\trenderComponent(Checkbox, {\n\t\t\t\t\tchecked: row.getIsSelected(),\n\t\t\t\t\tonCheckedChange: (v) => row.toggleSelected(!!v),\n\t\t\t\t}),\n\t\t\tenableSorting: false,\n\t\t\tenableHiding: false,\n\t\t},\n\t\t{\n\t\t\taccessorKey: \"status\",\n\t\t\theader: \"Status\",\n\t\t\tcell: ({ row }) => {\n\t\t\t\tconst statusSnippet = createRawSnippet<[{ status: string }]>((getStatus) => {\n\t\t\t\t\tconst { status } = getStatus();\n\t\t\t\t\treturn {\n\t\t\t\t\t\trender: () => `<div class=\"capitalize\">${status}</div>`,\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t\treturn renderSnippet(statusSnippet, { status: row.original.status });\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\taccessorKey: \"email\",\n\t\t\theader: ({ column }) => renderComponent(EmailHeader, { column }),\n\t\t\tcell: ({ row }) => {\n\t\t\t\tconst emailSnippet = createRawSnippet<[{ email: string }]>((getEmail) => {\n\t\t\t\t\tconst { email } = getEmail();\n\t\t\t\t\treturn {\n\t\t\t\t\t\trender: () => `<div class=\"lowercase\">${email}</div>`,\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t\treturn renderSnippet(emailSnippet, { email: row.original.email });\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\taccessorKey: \"amount\",\n\t\t\theader: () =>\n\t\t\t\trenderSnippet(\n\t\t\t\t\tcreateRawSnippet(() => ({\n\t\t\t\t\t\trender: () => `<div class=\"text-end\">Amount</div>`,\n\t\t\t\t\t}))\n\t\t\t\t),\n\t\t\tcell: ({ row }) => {\n\t\t\t\tconst amountSnippet = createRawSnippet<[{ amount: number }]>((getAmount) => {\n\t\t\t\t\tconst { amount } = getAmount();\n\t\t\t\t\tconst formatted = new Intl.NumberFormat(\"en-US\", {\n\t\t\t\t\t\tstyle: \"currency\",\n\t\t\t\t\t\tcurrency: \"USD\",\n\t\t\t\t\t}).format(amount);\n\t\t\t\t\treturn {\n\t\t\t\t\t\trender: () => `<div class=\"text-end font-medium\">${formatted}</div>`,\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t\treturn renderSnippet(amountSnippet, { amount: row.original.amount });\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tid: \"actions\",\n\t\t\tenableHiding: false,\n\t\t\tcell: ({ row }) => renderComponent(ActionsCell, { row }),\n\t\t},\n\t];\n\n\tlet pagination = $state<PaginationState>({ pageIndex: 0, pageSize: 10 });\n\tlet sorting = $state<SortingState>([]);\n\tlet columnFilters = $state<ColumnFiltersState>([]);\n\tlet rowSelection = $state<RowSelectionState>({});\n\tlet columnVisibility = $state<VisibilityState>({});\n\n\tconst table = createSvelteTable({\n\t\tget data() {\n\t\t\treturn data;\n\t\t},\n\t\tcolumns,\n\t\tstate: {\n\t\t\tget pagination() {\n\t\t\t\treturn pagination;\n\t\t\t},\n\t\t\tget sorting() {\n\t\t\t\treturn sorting;\n\t\t\t},\n\t\t\tget columnVisibility() {\n\t\t\t\treturn columnVisibility;\n\t\t\t},\n\t\t\tget rowSelection() {\n\t\t\t\treturn rowSelection;\n\t\t\t},\n\t\t\tget columnFilters() {\n\t\t\t\treturn columnFilters;\n\t\t\t},\n\t\t},\n\t\tgetCoreRowModel: getCoreRowModel(),\n\t\tgetPaginationRowModel: getPaginationRowModel(),\n\t\tgetSortedRowModel: getSortedRowModel(),\n\t\tgetFilteredRowModel: getFilteredRowModel(),\n\t\tonPaginationChange: (updater) => {\n\t\t\tif (typeof updater === \"function\") {\n\t\t\t\tpagination = updater(pagination);\n\t\t\t} else {\n\t\t\t\tpagination = updater;\n\t\t\t}\n\t\t},\n\t\tonSortingChange: (updater) => {\n\t\t\tif (typeof updater === \"function\") {\n\t\t\t\tsorting = updater(sorting);\n\t\t\t} else {\n\t\t\t\tsorting = updater;\n\t\t\t}\n\t\t},\n\t\tonColumnFiltersChange: (updater) => {\n\t\t\tif (typeof updater === \"function\") {\n\t\t\t\tcolumnFilters = updater(columnFilters);\n\t\t\t} else {\n\t\t\t\tcolumnFilters = updater;\n\t\t\t}\n\t\t},\n\t\tonColumnVisibilityChange: (updater) => {\n\t\t\tif (typeof updater === \"function\") {\n\t\t\t\tcolumnVisibility = updater(columnVisibility);\n\t\t\t} else {\n\t\t\t\tcolumnVisibility = updater;\n\t\t\t}\n\t\t},\n\t\tonRowSelectionChange: (updater) => {\n\t\t\tif (typeof updater === \"function\") {\n\t\t\t\trowSelection = updater(rowSelection);\n\t\t\t} else {\n\t\t\t\trowSelection = updater;\n\t\t\t}\n\t\t},\n\t});\n</script>\n\n<Card.Root>\n\t<Card.Header>\n\t\t<Card.Title class=\"text-xl\">Payments</Card.Title>\n\t\t<Card.Description>Manage your payments.</Card.Description>\n\t\t<Card.Action>\n\t\t\t<Button variant=\"secondary\" size=\"sm\" class=\"shadow-none\">Add Payment</Button>\n\t\t</Card.Action>\n\t</Card.Header>\n\t<Card.Content class=\"flex flex-col gap-4\">\n\t\t<div class=\"rounded-md border\">\n\t\t\t<Table.Root>\n\t\t\t\t<Table.Header>\n\t\t\t\t\t{#each table.getHeaderGroups() as headerGroup (headerGroup.id)}\n\t\t\t\t\t\t<Table.Row>\n\t\t\t\t\t\t\t{#each headerGroup.headers as header (header.id)}\n\t\t\t\t\t\t\t\t<Table.Head\n\t\t\t\t\t\t\t\t\tclass=\"data-[name=actions]:w-10 data-[name=amount]:w-24 data-[name=select]:w-10 data-[name=status]:w-24 [&:has([role=checkbox])]:ps-3\"\n\t\t\t\t\t\t\t\t\tdata-name={header.id}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{#if !header.isPlaceholder}\n\t\t\t\t\t\t\t\t\t\t<FlexRender\n\t\t\t\t\t\t\t\t\t\t\tcontext={header.getContext()}\n\t\t\t\t\t\t\t\t\t\t\tcontent={header.column.columnDef.header}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\t\t</Table.Head>\n\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t</Table.Row>\n\t\t\t\t\t{/each}\n\t\t\t\t</Table.Header>\n\t\t\t\t<Table.Body>\n\t\t\t\t\t{#if table.getRowModel().rows?.length}\n\t\t\t\t\t\t{#each table.getRowModel().rows as row (row.id)}\n\t\t\t\t\t\t\t<Table.Row data-state={row.getIsSelected() && \"selected\"}>\n\t\t\t\t\t\t\t\t{#each row.getVisibleCells() as cell (cell.id)}\n\t\t\t\t\t\t\t\t\t<Table.Cell\n\t\t\t\t\t\t\t\t\t\tclass=\"data-[name=actions]:w-10 data-[name=amount]:w-24 data-[name=select]:w-10 data-[name=status]:w-24 [&:has([role=checkbox])]:ps-3\"\n\t\t\t\t\t\t\t\t\t\tdata-name={cell.column.id}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<FlexRender\n\t\t\t\t\t\t\t\t\t\t\tcontext={cell.getContext()}\n\t\t\t\t\t\t\t\t\t\t\tcontent={cell.column.columnDef.cell}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</Table.Cell>\n\t\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t</Table.Row>\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t{:else}\n\t\t\t\t\t\t<Table.Row>\n\t\t\t\t\t\t\t<Table.Cell colspan={columns.length} class=\"h-24 text-center\">\n\t\t\t\t\t\t\t\tNo results.\n\t\t\t\t\t\t\t</Table.Cell>\n\t\t\t\t\t\t</Table.Row>\n\t\t\t\t\t{/if}\n\t\t\t\t</Table.Body>\n\t\t\t</Table.Root>\n\t\t</div>\n\t\t<div class=\"flex items-center justify-end gap-2\">\n\t\t\t<div class=\"text-muted-foreground flex-1 text-sm\">\n\t\t\t\t{table.getFilteredSelectedRowModel().rows.length} of\n\t\t\t\t{table.getFilteredRowModel().rows.length} row(s) selected.\n\t\t\t</div>\n\t\t\t<div class=\"flex gap-2\">\n\t\t\t\t<Button\n\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\tonclick={() => table.previousPage()}\n\t\t\t\t\tdisabled={!table.getCanPreviousPage()}\n\t\t\t\t>\n\t\t\t\t\tPrevious\n\t\t\t\t</Button>\n\t\t\t\t<Button\n\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\tonclick={() => table.nextPage()}\n\t\t\t\t\tdisabled={!table.getCanNextPage()}\n\t\t\t\t>\n\t\t\t\t\tNext\n\t\t\t\t</Button>\n\t\t\t</div>\n\t\t</div>\n\t</Card.Content>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/components/cards/report-issue.svelte",
    "content": "<script lang=\"ts\">\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport { Input } from \"$lib/registry/ui/input/index.js\";\n\timport * as Select from \"$lib/registry/ui/select/index.js\";\n\timport { Textarea } from \"$lib/registry/ui/textarea/index.js\";\n\n\tconst id = $props.id();\n\n\tconst areas = [\n\t\t{\n\t\t\tlabel: \"Team\",\n\t\t\tvalue: \"team\",\n\t\t},\n\t\t{\n\t\t\tlabel: \"Billing\",\n\t\t\tvalue: \"billing\",\n\t\t},\n\t\t{\n\t\t\tlabel: \"Account\",\n\t\t\tvalue: \"account\",\n\t\t},\n\t\t{\n\t\t\tlabel: \"Deployments\",\n\t\t\tvalue: \"deployments\",\n\t\t},\n\t\t{\n\t\t\tlabel: \"Support\",\n\t\t\tvalue: \"support\",\n\t\t},\n\t];\n\n\tconst levels = [\n\t\t{\n\t\t\tlabel: \"Severity 1 (Highest)\",\n\t\t\tvalue: \"1\",\n\t\t},\n\t\t{\n\t\t\tlabel: \"Severity 2\",\n\t\t\tvalue: \"2\",\n\t\t},\n\t\t{\n\t\t\tlabel: \"Severity 3\",\n\t\t\tvalue: \"3\",\n\t\t},\n\t\t{\n\t\t\tlabel: \"Severity 4 (Lowest)\",\n\t\t\tvalue: \"4\",\n\t\t},\n\t];\n\n\tlet area = $state(\"billing\");\n\tlet level = $state(\"2\");\n\n\tconst areaLabel = $derived(areas.find((a) => a.value === area)?.label ?? \"Select\");\n\tconst levelLabel = $derived(levels.find((l) => l.value === level)?.label ?? \"Select Level\");\n</script>\n\n<Card.Root>\n\t<Card.Header>\n\t\t<Card.Title>Report an issue</Card.Title>\n\t\t<Card.Description>What area are you having problems with?</Card.Description>\n\t</Card.Header>\n\t<Card.Content>\n\t\t<Field.Group>\n\t\t\t<Field.Group class=\"grid gap-4 sm:grid-cols-2\">\n\t\t\t\t<Field.Field>\n\t\t\t\t\t<Field.Label for=\"area-{id}\">Area</Field.Label>\n\t\t\t\t\t<Select.Root type=\"single\" bind:value={area}>\n\t\t\t\t\t\t<Select.Trigger id=\"area-{id}\" aria-label=\"Area\" class=\"w-full\">\n\t\t\t\t\t\t\t{areaLabel}\n\t\t\t\t\t\t</Select.Trigger>\n\t\t\t\t\t\t<Select.Content>\n\t\t\t\t\t\t\t{#each areas as area (area.value)}\n\t\t\t\t\t\t\t\t<Select.Item value={area.value}>{area.label}</Select.Item>\n\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t</Select.Content>\n\t\t\t\t\t</Select.Root>\n\t\t\t\t</Field.Field>\n\t\t\t\t<Field.Field>\n\t\t\t\t\t<Field.Label for=\"level-{id}\">Security Level</Field.Label>\n\t\t\t\t\t<Select.Root type=\"single\" bind:value={level}>\n\t\t\t\t\t\t<Select.Trigger\n\t\t\t\t\t\t\tid=\"level-{id}\"\n\t\t\t\t\t\t\tclass=\"w-full [&_span]:!block [&_span]:truncate\"\n\t\t\t\t\t\t\taria-label=\"Security Level\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t\t{levelLabel}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</Select.Trigger>\n\t\t\t\t\t\t<Select.Content>\n\t\t\t\t\t\t\t{#each levels as level (level.value)}\n\t\t\t\t\t\t\t\t<Select.Item value={level.value}>{level.label}</Select.Item>\n\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t</Select.Content>\n\t\t\t\t\t</Select.Root>\n\t\t\t\t</Field.Field>\n\t\t\t</Field.Group>\n\t\t\t<Field.Field>\n\t\t\t\t<Field.Label for=\"subject-{id}\">Subject</Field.Label>\n\t\t\t\t<Input id=\"subject-{id}\" placeholder=\"I need help with...\" />\n\t\t\t</Field.Field>\n\t\t\t<Field.Field>\n\t\t\t\t<Field.Label for=\"description-{id}\">Description</Field.Label>\n\t\t\t\t<Textarea\n\t\t\t\t\tid=\"description-{id}\"\n\t\t\t\t\tplaceholder=\"Please include all information relevant to your issue.\"\n\t\t\t\t\tclass=\"min-h-24\"\n\t\t\t\t/>\n\t\t\t</Field.Field>\n\t\t\t<Field.Field orientation=\"horizontal\" class=\"justify-end\">\n\t\t\t\t<Button variant=\"ghost\" size=\"sm\">Cancel</Button>\n\t\t\t\t<Button size=\"sm\">Submit</Button>\n\t\t\t</Field.Field>\n\t\t</Field.Group>\n\t</Card.Content>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/components/cards/root-components.svelte",
    "content": "<script lang=\"ts\">\n\timport {\n\t\tFieldSliderDemo,\n\t\tButtonGroupInputGroupDemo,\n\t\tSpinnerBadgeDemo,\n\t\tInputGroupDemo,\n\t\tEmptyAvatarGroupDemo,\n\t\tFieldDemo,\n\t\tButtonGroupDemo,\n\t\tSpinnerEmptyDemo,\n\t\tButtonGroupPopoverDemo,\n\t} from \"$lib/registry/examples/index.js\";\n\timport { FieldSeparator } from \"$lib/registry/ui/field/index.js\";\n\timport AppearanceSettings from \"./appearance-settings.svelte\";\n\timport FieldCheckbox from \"./field-checkbox.svelte\";\n\timport FieldHear from \"./field-hear.svelte\";\n\timport InputGroupButtonDemo from \"./input-group-button-demo.svelte\";\n\timport ItemDemo from \"./item-demo.svelte\";\n\timport Nested from \"./nested.svelte\";\n\timport NotionPromptForm from \"./notion-prompt-form.svelte\";\n</script>\n\n<div\n\tclass=\"theme-container mx-auto grid gap-8 py-1 md:grid-cols-2 lg:grid-cols-3 xl:grid-cols-4 xl:gap-6 2xl:gap-8\"\n>\n\t<div class=\"flex flex-col gap-6 *:[div]:w-full *:[div]:max-w-full\">\n\t\t<div class=\"border-border rounded-lg border p-6\">\n\t\t\t<FieldDemo />\n\t\t</div>\n\t</div>\n\t<div class=\"flex flex-col gap-6 *:[div]:w-full *:[div]:max-w-full\">\n\t\t<EmptyAvatarGroupDemo />\n\t\t<SpinnerBadgeDemo />\n\t\t<ButtonGroupInputGroupDemo />\n\t\t<FieldSliderDemo />\n\t\t<InputGroupDemo />\n\t</div>\n\t<div class=\"flex flex-col gap-6 *:[div]:w-full *:[div]:max-w-full\">\n\t\t<InputGroupButtonDemo />\n\t\t<ItemDemo />\n\t\t<FieldSeparator class=\"my-4\">Appearance Settings</FieldSeparator>\n\t\t<AppearanceSettings />\n\t</div>\n\t<div\n\t\tclass=\"order-first flex flex-col gap-6 lg:hidden xl:order-last xl:flex *:[div]:w-full *:[div]:max-w-full\"\n\t>\n\t\t<NotionPromptForm />\n\t\t<ButtonGroupDemo />\n\t\t<FieldCheckbox />\n\t\t<div class=\"flex justify-between gap-4\">\n\t\t\t<Nested />\n\t\t\t<ButtonGroupPopoverDemo />\n\t\t</div>\n\t\t<FieldHear />\n\t\t<SpinnerEmptyDemo />\n\t</div>\n</div>\n"
  },
  {
    "path": "docs/src/lib/components/cards/share.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Avatar from \"$lib/registry/ui/avatar/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport { Input } from \"$lib/registry/ui/input/index.js\";\n\timport { Label } from \"$lib/registry/ui/label/index.js\";\n\timport * as Select from \"$lib/registry/ui/select/index.js\";\n\timport { Separator } from \"$lib/registry/ui/separator/index.js\";\n\timport * as Item from \"$lib/registry/ui/item/index.js\";\n\n\tconst permissions = [\n\t\t{\n\t\t\tlabel: \"Can edit\",\n\t\t\tvalue: \"edit\",\n\t\t},\n\t\t{\n\t\t\tlabel: \"Can view\",\n\t\t\tvalue: \"view\",\n\t\t},\n\t];\n\n\tlet people = $state([\n\t\t{\n\t\t\tname: \"Olivia Martin\",\n\t\t\temail: \"m@example.com\",\n\t\t\tavatar: \"/avatars/03.png\",\n\t\t\tpermission: \"edit\",\n\t\t},\n\t\t{\n\t\t\tname: \"Isabella Nguyen\",\n\t\t\temail: \"b@example.com\",\n\t\t\tavatar: \"/avatars/04.png\",\n\t\t\tpermission: \"edit\",\n\t\t},\n\t\t{\n\t\t\tname: \"Sofia Davis\",\n\t\t\temail: \"p@example.com\",\n\t\t\tavatar: \"/avatars/05.png\",\n\t\t\tpermission: \"edit\",\n\t\t},\n\t\t{\n\t\t\tname: \"Ethan Thompson\",\n\t\t\temail: \"e@example.com\",\n\t\t\tavatar: \"/avatars/01.png\",\n\t\t\tpermission: \"edit\",\n\t\t},\n\t]);\n</script>\n\n<Card.Root>\n\t<Card.Header>\n\t\t<Card.Title>Share this document</Card.Title>\n\t\t<Card.Description>Anyone with the link can view this document.</Card.Description>\n\t</Card.Header>\n\t<Card.Content>\n\t\t<div class=\"flex items-center gap-2\">\n\t\t\t<Label for=\"link\" class=\"sr-only\">Link</Label>\n\t\t\t<Input id=\"link\" value=\"http://example.com/link/to/document\" readonly class=\"h-8\" />\n\t\t\t<Button size=\"sm\" variant=\"outline\" class=\"shadow-none\">Copy Link</Button>\n\t\t</div>\n\t\t<Separator class=\"my-4\" />\n\t\t<div class=\"flex flex-col gap-4\">\n\t\t\t<div class=\"text-sm font-medium\">People with access</div>\n\t\t\t<Item.Group>\n\t\t\t\t{#each people as person (person.email)}\n\t\t\t\t\t<Item.Item class=\"px-0 py-2\">\n\t\t\t\t\t\t<Item.Media>\n\t\t\t\t\t\t\t<Avatar.Root>\n\t\t\t\t\t\t\t\t<Avatar.Image src={person.avatar} alt=\"Image\" />\n\t\t\t\t\t\t\t\t<Avatar.Fallback>\n\t\t\t\t\t\t\t\t\t{person.name.charAt(0)}\n\t\t\t\t\t\t\t\t</Avatar.Fallback>\n\t\t\t\t\t\t\t</Avatar.Root>\n\t\t\t\t\t\t</Item.Media>\n\t\t\t\t\t\t<Item.Content>\n\t\t\t\t\t\t\t<Item.Title>{person.name}</Item.Title>\n\t\t\t\t\t\t\t<Item.Description>{person.email}</Item.Description>\n\t\t\t\t\t\t</Item.Content>\n\t\t\t\t\t\t<Item.Actions>\n\t\t\t\t\t\t\t<Select.Root type=\"single\" bind:value={person.permission}>\n\t\t\t\t\t\t\t\t<Select.Trigger class=\"ms-auto pe-2\" size=\"sm\" aria-label=\"Edit\">\n\t\t\t\t\t\t\t\t\t{permissions.find((p) => p.value === person.permission)\n\t\t\t\t\t\t\t\t\t\t?.label ?? \"Select\"}\n\t\t\t\t\t\t\t\t</Select.Trigger>\n\t\t\t\t\t\t\t\t<Select.Content align=\"end\">\n\t\t\t\t\t\t\t\t\t{#each permissions as permission (permission.value)}\n\t\t\t\t\t\t\t\t\t\t<Select.Item value={permission.value}>\n\t\t\t\t\t\t\t\t\t\t\t{permission.label}\n\t\t\t\t\t\t\t\t\t\t</Select.Item>\n\t\t\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t\t</Select.Content>\n\t\t\t\t\t\t\t</Select.Root>\n\t\t\t\t\t\t</Item.Actions>\n\t\t\t\t\t</Item.Item>\n\t\t\t\t{/each}\n\t\t\t</Item.Group>\n\t\t</div>\n\t</Card.Content>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/components/cards/stats.svelte",
    "content": "<script lang=\"ts\">\n\timport { AreaChart, LineChart } from \"layerchart\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport { curveNatural } from \"d3-shape\";\n\n\tconst data = [\n\t\t{\n\t\t\trevenue: 10400,\n\t\t\tsubscription: 40,\n\t\t},\n\t\t{\n\t\t\trevenue: 14405,\n\t\t\tsubscription: 90,\n\t\t},\n\t\t{\n\t\t\trevenue: 9400,\n\t\t\tsubscription: 200,\n\t\t},\n\t\t{\n\t\t\trevenue: 8200,\n\t\t\tsubscription: 278,\n\t\t},\n\t\t{\n\t\t\trevenue: 7000,\n\t\t\tsubscription: 89,\n\t\t},\n\t\t{\n\t\t\trevenue: 9600,\n\t\t\tsubscription: 239,\n\t\t},\n\t\t{\n\t\t\trevenue: 11244,\n\t\t\tsubscription: 78,\n\t\t},\n\t\t{\n\t\t\trevenue: 26475,\n\t\t\tsubscription: 89,\n\t\t},\n\t];\n\n\tconst chartConfig = {\n\t\trevenue: {\n\t\t\tlabel: \"Revenue\",\n\t\t\tcolor: \"var(--primary)\",\n\t\t},\n\t\tsubscription: {\n\t\t\tlabel: \"Subscriptions\",\n\t\t\tcolor: \"var(--primary)\",\n\t\t},\n\t} satisfies Chart.ChartConfig;\n</script>\n\n<div class=\"grid gap-4 sm:grid-cols-2 lg:grid-cols-1 xl:grid-cols-2\">\n\t<Card.Root>\n\t\t<Card.Header>\n\t\t\t<Card.Description>Total Revenue</Card.Description>\n\t\t\t<Card.Title class=\"text-3xl\">$15,231.89</Card.Title>\n\t\t\t<Card.Description>+20.1% from last month</Card.Description>\n\t\t</Card.Header>\n\t\t<Card.Content class=\"pb-0\">\n\t\t\t<Chart.Container config={chartConfig} class=\"h-[80px] w-full\">\n\t\t\t\t<LineChart\n\t\t\t\t\taxis={false}\n\t\t\t\t\tdata={data.map((d, i) => ({ ...d, index: i }))}\n\t\t\t\t\tx=\"index\"\n\t\t\t\t\ty=\"revenue\"\n\t\t\t\t\tpoints={true}\n\t\t\t\t\tgrid={false}\n\t\t\t\t\ttooltip={false}\n\t\t\t\t\thighlight={false}\n\t\t\t\t\tprops={{\n\t\t\t\t\t\tspline: {\n\t\t\t\t\t\t\tcurve: curveNatural,\n\t\t\t\t\t\t\tstrokeWidth: 2,\n\t\t\t\t\t\t\tstroke: \"var(--color-revenue)\",\n\t\t\t\t\t\t},\n\n\t\t\t\t\t\tpoints: {\n\t\t\t\t\t\t\tr: 3,\n\t\t\t\t\t\t\tstroke: \"var(--color-revenue)\",\n\t\t\t\t\t\t\tstrokeWidth: 2,\n\t\t\t\t\t\t},\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t</Chart.Container>\n\t\t</Card.Content>\n\t</Card.Root>\n\t<Card.Root class=\"pb-0 lg:hidden xl:flex\">\n\t\t<Card.Header>\n\t\t\t<Card.Description>Subscriptions</Card.Description>\n\t\t\t<Card.Title class=\"text-3xl\">+2,350</Card.Title>\n\t\t\t<Card.Description>+180.1% from last month</Card.Description>\n\t\t\t<Card.Action>\n\t\t\t\t<Button variant=\"ghost\" size=\"sm\">View More</Button>\n\t\t\t</Card.Action>\n\t\t</Card.Header>\n\t\t<Card.Content class=\"mt-auto max-h-[124px] flex-1 overflow-hidden p-0\">\n\t\t\t<Chart.Container config={chartConfig} class=\"-mb-4 h-full w-full overflow-hidden\">\n\t\t\t\t<AreaChart\n\t\t\t\t\tdata={data.map((d, i) => ({ ...d, index: i }))}\n\t\t\t\t\tx=\"index\"\n\t\t\t\t\ty=\"subscription\"\n\t\t\t\t\taxis={false}\n\t\t\t\t\tgrid={false}\n\t\t\t\t\ttooltip={false}\n\t\t\t\t\tyPadding={[0, 8]}\n\t\t\t\t\tprops={{\n\t\t\t\t\t\tarea: {\n\t\t\t\t\t\t\tcurve: curveNatural,\n\t\t\t\t\t\t\tfill: \"var(--color-subscription)\",\n\t\t\t\t\t\t\tfillOpacity: 0.05,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tline: {\n\t\t\t\t\t\t\tstroke: \"var(--color-subscription)\",\n\t\t\t\t\t\t\tstrokeWidth: 2,\n\t\t\t\t\t\t},\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t</Chart.Container>\n\t\t</Card.Content>\n\t</Card.Root>\n</div>\n"
  },
  {
    "path": "docs/src/lib/components/cards/team-members.svelte",
    "content": "<script lang=\"ts\">\n\timport ChevronDownIcon from \"@lucide/svelte/icons/chevron-down\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Avatar from \"$lib/registry/ui/avatar/index.js\";\n\timport * as Popover from \"$lib/registry/ui/popover/index.js\";\n\timport * as Command from \"$lib/registry/ui/command/index.js\";\n\timport { buttonVariants } from \"$lib/registry/ui/button/index.js\";\n\timport * as Item from \"$lib/registry/ui/item/index.js\";\n\n\tlet members = $state([\n\t\t{\n\t\t\tname: \"Sofia Davis\",\n\t\t\temail: \"m@example.com\",\n\t\t\trole: \"Owner\",\n\t\t\tavatar: \"/avatars/01.png\",\n\t\t},\n\t\t{\n\t\t\tname: \"Jackson Lee\",\n\t\t\temail: \"p@example.com\",\n\t\t\trole: \"Developer\",\n\t\t\tavatar: \"/avatars/02.png\",\n\t\t},\n\t\t{\n\t\t\tname: \"Isabella Nguyen\",\n\t\t\temail: \"i@example.com\",\n\t\t\trole: \"Billing\",\n\t\t\tavatar: \"/avatars/03.png\",\n\t\t},\n\t]);\n\n\tconst roles = [\n\t\t{\n\t\t\tname: \"Viewer\",\n\t\t\tdescription: \"Can view and comment.\",\n\t\t},\n\t\t{\n\t\t\tname: \"Developer\",\n\t\t\tdescription: \"Can view, comment and edit.\",\n\t\t},\n\t\t{\n\t\t\tname: \"Billing\",\n\t\t\tdescription: \"Can view, comment and manage billing.\",\n\t\t},\n\t\t{\n\t\t\tname: \"Owner\",\n\t\t\tdescription: \"Admin-level access to all resources.\",\n\t\t},\n\t];\n</script>\n\n<Card.Root class=\"gap-4\">\n\t<Card.Header>\n\t\t<Card.Title>Team Members</Card.Title>\n\t\t<Card.Description>Invite your team members to collaborate.</Card.Description>\n\t</Card.Header>\n\t<Card.Content>\n\t\t{#each members as member (member.name)}\n\t\t\t<Item.Item size=\"sm\" class=\"gap-4 px-0\">\n\t\t\t\t<Avatar.Root class=\"shrink-0 self-start border\">\n\t\t\t\t\t<Avatar.Image src={member.avatar} alt=\"Image\" />\n\t\t\t\t\t<Avatar.Fallback>\n\t\t\t\t\t\t{member.name\n\t\t\t\t\t\t\t.split(\" \")\n\t\t\t\t\t\t\t.map((n) => n[0])\n\t\t\t\t\t\t\t.join(\"\")}\n\t\t\t\t\t</Avatar.Fallback>\n\t\t\t\t</Avatar.Root>\n\t\t\t\t<Item.Content>\n\t\t\t\t\t<Item.Title>{member.name}</Item.Title>\n\t\t\t\t\t<Item.Description>{member.email}</Item.Description>\n\t\t\t\t</Item.Content>\n\t\t\t\t<Item.Actions>\n\t\t\t\t\t<Popover.Root>\n\t\t\t\t\t\t<Popover.Trigger\n\t\t\t\t\t\t\tclass={buttonVariants({\n\t\t\t\t\t\t\t\tvariant: \"outline\",\n\t\t\t\t\t\t\t\tsize: \"sm\",\n\t\t\t\t\t\t\t\tclass: \"ms-auto shadow-none\",\n\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{member.role}\n\t\t\t\t\t\t\t<ChevronDownIcon />\n\t\t\t\t\t\t</Popover.Trigger>\n\t\t\t\t\t\t<Popover.Content class=\"p-0\" align=\"end\">\n\t\t\t\t\t\t\t<Command.Root>\n\t\t\t\t\t\t\t\t<Command.Input placeholder=\"Select role...\" />\n\t\t\t\t\t\t\t\t<Command.List>\n\t\t\t\t\t\t\t\t\t<Command.Empty>No roles found.</Command.Empty>\n\t\t\t\t\t\t\t\t\t<Command.Group>\n\t\t\t\t\t\t\t\t\t\t{#each roles as role (role.name)}\n\t\t\t\t\t\t\t\t\t\t\t<Command.Item\n\t\t\t\t\t\t\t\t\t\t\t\tonSelect={() => (member.role = role.name)}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"flex flex-col\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<p class=\"text-sm font-medium\">{role.name}</p>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<p class=\"text-muted-foreground\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{role.description}\n\t\t\t\t\t\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t\t</Command.Item>\n\t\t\t\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t\t\t</Command.Group>\n\t\t\t\t\t\t\t\t</Command.List>\n\t\t\t\t\t\t\t</Command.Root>\n\t\t\t\t\t\t</Popover.Content>\n\t\t\t\t\t</Popover.Root>\n\t\t\t\t</Item.Actions>\n\t\t\t</Item.Item>\n\t\t{/each}\n\t</Card.Content>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/components/chart-code-viewer.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn } from \"$lib/utils.js\";\n\timport { MediaQuery } from \"svelte/reactivity\";\n\timport ChartCopyButton from \"./chart-copy-button.svelte\";\n\timport * as Drawer from \"$lib/registry/ui/drawer/index.js\";\n\timport * as Sheet from \"$lib/registry/ui/sheet/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\timport { getIconForLanguageExtension } from \"./icons/icons.js\";\n\timport type { HighlightedBlock } from \"../../routes/api/block/[block]/+server.js\";\n\n\tconst isDesktop = new MediaQuery(\"min-width: 768px\");\n\n\tlet {\n\t\tchart,\n\t\tclass: className,\n\t\tchildren,\n\t\tcode,\n\t}: HTMLAttributes<HTMLDivElement> & { chart: HighlightedBlock; code: string } = $props();\n\n\tconst Icon = getIconForLanguageExtension(\"svelte\");\n</script>\n\n{#snippet Content()}\n\t<div class=\"flex min-h-0 flex-1 flex-col gap-0\">\n\t\t<div\n\t\t\tclass=\"chart-wrapper theme-container hidden **:data-chart:mx-auto **:data-chart:max-h-[35vh] sm:block [&>div]:rounded-none [&>div]:border-0 [&>div]:border-b [&>div]:shadow-none\"\n\t\t>\n\t\t\t{@render children?.()}\n\t\t</div>\n\t\t<div class=\"flex min-w-0 flex-1 flex-col overflow-hidden p-4\">\n\t\t\t<figure\n\t\t\t\tdata-rehype-pretty-code-figure=\"\"\n\t\t\t\tclass=\"mt-0 flex h-auto min-w-0 flex-1 flex-col overflow-hidden\"\n\t\t\t>\n\t\t\t\t<figcaption\n\t\t\t\t\tclass=\"text-foreground [&>svg]:text-foreground flex h-12 shrink-0 items-center gap-2 border-b py-2 ps-4 pe-2 [&>svg]:size-4 [&>svg]:opacity-70\"\n\t\t\t\t\tdata-language=\"tsx\"\n\t\t\t\t>\n\t\t\t\t\t<Icon />\n\t\t\t\t\t{chart.name}\n\t\t\t\t\t<div class=\"ms-auto flex items-center gap-2\">\n\t\t\t\t\t\t<ChartCopyButton name={chart.name} {code} />\n\t\t\t\t\t</div>\n\t\t\t\t</figcaption>\n\t\t\t\t<div class=\"no-scrollbar overflow-y-auto\">\n\t\t\t\t\t<!-- eslint-disable-next-line svelte/no-at-html-tags -->\n\t\t\t\t\t{@html chart.files?.[0]?.highlightedContent ?? \"\"}\n\t\t\t\t</div>\n\t\t\t</figure>\n\t\t</div>\n\t</div>\n{/snippet}\n\n{#snippet Trigger({ props }: { props: Record<string, unknown> })}\n\t<Button\n\t\tsize=\"sm\"\n\t\tvariant=\"outline\"\n\t\t{...props}\n\t\tclass=\"text-foreground hover:bg-muted dark:text-foreground h-6 rounded-[6px] border bg-transparent px-2 text-xs shadow-none\"\n\t>\n\t\tView Code\n\t</Button>\n{/snippet}\n\n{#if !isDesktop.current}\n\t<Drawer.Root>\n\t\t<Drawer.Trigger>\n\t\t\t{#snippet child({ props })}\n\t\t\t\t{@render Trigger({ props })}\n\t\t\t{/snippet}\n\t\t</Drawer.Trigger>\n\t\t<Drawer.Content\n\t\t\tclass={cn(\n\t\t\t\t\"flex max-h-[80vh] flex-col sm:max-h-[90vh] [&>div.bg-muted]:shrink-0\",\n\t\t\t\tclassName\n\t\t\t)}\n\t\t>\n\t\t\t<Drawer.Header class=\"sr-only\">\n\t\t\t\t<Drawer.Title>Code</Drawer.Title>\n\t\t\t\t<Drawer.Description>View the code for the chart.</Drawer.Description>\n\t\t\t</Drawer.Header>\n\n\t\t\t<div class=\"flex h-full flex-col overflow-auto\">\n\t\t\t\t{@render Content()}\n\t\t\t</div>\n\t\t</Drawer.Content>\n\t</Drawer.Root>\n{:else}\n\t<Sheet.Root>\n\t\t<Sheet.Trigger>\n\t\t\t{#snippet child({ props })}\n\t\t\t\t{@render Trigger({ props })}\n\t\t\t{/snippet}\n\t\t</Sheet.Trigger>\n\t\t<Sheet.Content\n\t\t\tside=\"right\"\n\t\t\tclass={cn(\n\t\t\t\t\"flex flex-col gap-0 border-s-0 p-0 sm:max-w-sm md:w-[700px] md:max-w-[700px] dark:border-s\",\n\t\t\t\tclassName\n\t\t\t)}\n\t\t>\n\t\t\t<Sheet.Header class=\"sr-only\">\n\t\t\t\t<Sheet.Title>Code</Sheet.Title>\n\t\t\t\t<Sheet.Description>View the code for the chart.</Sheet.Description>\n\t\t\t</Sheet.Header>\n\t\t\t{@render Content()}\n\t\t</Sheet.Content>\n\t</Sheet.Root>\n{/if}\n"
  },
  {
    "path": "docs/src/lib/components/chart-copy-button.svelte",
    "content": "<script lang=\"ts\">\n\timport CopyIcon from \"@tabler/icons-svelte/icons/copy\";\n\timport CheckIcon from \"@tabler/icons-svelte/icons/check\";\n\timport { cn } from \"$lib/utils.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Tooltip from \"$lib/registry/ui/tooltip/index.js\";\n\timport type { ComponentProps } from \"svelte\";\n\timport { UseClipboard } from \"$lib/hooks/use-clipboard.svelte.js\";\n\n\tlet {\n\t\tclass: className,\n\t\tcode,\n\t\t...restProps\n\t}: ComponentProps<typeof Button> & { code: string } = $props();\n\n\tconst clipboard = new UseClipboard();\n</script>\n\n<Tooltip.Root>\n\t<Tooltip.Trigger>\n\t\t{#snippet child({ props })}\n\t\t\t<Button\n\t\t\t\tsize=\"icon\"\n\t\t\t\tvariant=\"ghost\"\n\t\t\t\t{...props}\n\t\t\t\tclass={cn(\"[&_svg]-h-3.5 h-7 w-7 rounded-[6px] [&_svg]:w-3.5\", className)}\n\t\t\t\tonclick={() => {\n\t\t\t\t\tclipboard.copy(code);\n\t\t\t\t}}\n\t\t\t\t{...restProps}\n\t\t\t>\n\t\t\t\t<span class=\"sr-only\" data-llm-ignore>Copy</span>\n\t\t\t\t{#if clipboard.copied}\n\t\t\t\t\t<CheckIcon />\n\t\t\t\t{:else}\n\t\t\t\t\t<CopyIcon />\n\t\t\t\t{/if}\n\t\t\t</Button>\n\t\t{/snippet}\n\t</Tooltip.Trigger>\n\t<Tooltip.Content class=\"bg-black text-white\" arrowClasses=\"bg-black\">Copy code</Tooltip.Content>\n</Tooltip.Root>\n"
  },
  {
    "path": "docs/src/lib/components/chart-display.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn } from \"$lib/utils.js\";\n\timport type { HighlightedBlock } from \"../../routes/api/block/[block]/+server.js\";\n\timport ChartToolbar from \"./chart-toolbar.svelte\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet {\n\t\tname,\n\t\tclass: className,\n\t\tchildren,\n\t\tchartData,\n\t}: HTMLAttributes<HTMLDivElement> & {\n\t\tname: string;\n\t\tchartData: HighlightedBlock[];\n\t} = $props();\n\n\tconst chart = $derived(chartData.find((c) => c.name === name));\n</script>\n\n{#if chart}\n\t<div\n\t\tclass={cn(\n\t\t\t\"themes-wrapper group relative flex flex-col overflow-hidden rounded-xl border transition-all duration-200 ease-in-out hover:z-30\",\n\t\t\tclassName\n\t\t)}\n\t>\n\t\t<ChartToolbar\n\t\t\t{chart}\n\t\t\tclass=\"bg-card text-card-foreground relative z-20 flex justify-end border-b px-3 py-2.5\"\n\t\t>\n\t\t\t{@render children?.()}\n\t\t</ChartToolbar>\n\t\t<div class=\"relative z-10 [&>div]:rounded-none [&>div]:border-none [&>div]:shadow-none\">\n\t\t\t{@render children?.()}\n\t\t</div>\n\t</div>\n{/if}\n"
  },
  {
    "path": "docs/src/lib/components/chart-toolbar.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn } from \"$lib/utils.js\";\n\timport ChartCodeViewer from \"./chart-code-viewer.svelte\";\n\timport { Separator } from \"$lib/registry/ui/separator/index.js\";\n\timport AreaChartIcon from \"@lucide/svelte/icons/area-chart\";\n\timport BarChartBigIcon from \"@lucide/svelte/icons/bar-chart-big\";\n\timport HexagonIcon from \"@lucide/svelte/icons/hexagon\";\n\timport LineChartIcon from \"@lucide/svelte/icons/line-chart\";\n\timport MousePointer2Icon from \"@lucide/svelte/icons/mouse-pointer-2\";\n\timport PieChartIcon from \"@lucide/svelte/icons/pie-chart\";\n\timport RadarIcon from \"@lucide/svelte/icons/radar\";\n\timport ChartCopyButton from \"./chart-copy-button.svelte\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\timport type { HighlightedBlock } from \"../../routes/api/block/[block]/+server.js\";\n\n\tlet {\n\t\tchart,\n\t\tclass: className,\n\t\tchildren,\n\t}: HTMLAttributes<HTMLDivElement> & { chart: HighlightedBlock } = $props();\n\n\tlet code = $state(\"\");\n\n\t$effect(() => {\n\t\tconst file = chart?.files?.[0];\n\t\tif (!file) {\n\t\t\tcode = \"\";\n\t\t\treturn;\n\t\t}\n\n\t\tconst highlighted = file?.highlightedContent ?? \"\";\n\n\t\tconst pre = document.createElement(\"pre\");\n\t\tpre.innerHTML = highlighted;\n\t\tcode = pre.textContent ?? \"\";\n\t});\n</script>\n\n{#snippet ChartTitle(chart: HighlightedBlock)}\n\t{#if chart.name.includes(\"chart-line\")}\n\t\t<LineChartIcon /> Line Chart\n\t{:else if chart.name.includes(\"chart-bar\")}\n\t\t<BarChartBigIcon /> Bar Chart\n\t{:else if chart.name.includes(\"chart-pie\")}\n\t\t<PieChartIcon /> Pie Chart\n\t{:else if chart.name.includes(\"chart-area\")}\n\t\t<AreaChartIcon /> Area Chart\n\t{:else if chart.name.includes(\"chart-radar\")}\n\t\t<HexagonIcon /> Radar Chart\n\t{:else if chart.name.includes(\"chart-radial\")}\n\t\t<RadarIcon /> Radial Chart\n\t{:else if chart.name.includes(\"chart-tooltip\")}\n\t\t<MousePointer2Icon /> Tooltip\n\t{:else}\n\t\t{chart.name}\n\t{/if}\n{/snippet}\n\n<div class={cn(\"flex items-center gap-2\", className)}>\n\t<div\n\t\tclass=\"text-muted-foreground flex items-center gap-1.5 ps-1 text-[13px] [&>svg]:h-[0.9rem] [&>svg]:w-[0.9rem]\"\n\t>\n\t\t{@render ChartTitle(chart)}\n\t</div>\n\t<div class=\"ms-auto flex items-center gap-2 [&>form]:flex\">\n\t\t<ChartCopyButton\n\t\t\t{code}\n\t\t\tclass=\"text-foreground hover:bg-muted dark:text-foreground h-6 w-6 rounded-[6px] bg-transparent shadow-none [&_svg]:h-3 [&_svg]:w-3\"\n\t\t/>\n\t\t<Separator orientation=\"vertical\" class=\"mx-0 hidden !h-4 md:flex\" />\n\t\t<ChartCodeViewer {chart} {code}>{@render children?.()}</ChartCodeViewer>\n\t</div>\n</div>\n"
  },
  {
    "path": "docs/src/lib/components/chart-tooltip-demo-item.svelte",
    "content": "<script lang=\"ts\">\n\timport type { TooltipPayload } from \"$lib/registry/ui/chart/chart-utils.js\";\n\timport { cn, type WithElementRef, type WithoutChildren } from \"$lib/utils.js\";\n\timport type { Snippet } from \"svelte\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\thideLabel = false,\n\t\tindicator = \"dot\",\n\t\thideIndicator = false,\n\t\tlabel,\n\t\tlabelClassName,\n\t\tpayload,\n\t\t...restProps\n\t}: WithoutChildren<WithElementRef<HTMLAttributes<HTMLDivElement>>> & {\n\t\thideLabel?: boolean;\n\t\tlabel?: string;\n\t\tindicator?: \"line\" | \"dot\" | \"dashed\";\n\t\tnameKey?: string;\n\t\thideIndicator?: boolean;\n\t\tlabelClassName?: string;\n\t\tpayload: {\n\t\t\tname: string;\n\t\t\tvalue: number;\n\t\t\tcolor: string;\n\t\t}[];\n\t\tformatter?: Snippet<\n\t\t\t[\n\t\t\t\t{\n\t\t\t\t\tvalue: unknown;\n\t\t\t\t\tname: string;\n\t\t\t\t\titem: TooltipPayload;\n\t\t\t\t\tindex: number;\n\t\t\t\t\tpayload: TooltipPayload[];\n\t\t\t\t},\n\t\t\t]\n\t\t>;\n\t} = $props();\n\n\tconst nestLabel = $derived(payload.length === 1 && indicator === \"dot\");\n</script>\n\n{#snippet TooltipLabel()}\n\t{#if label && !hideLabel}\n\t\t<div class={cn(\"font-medium\", labelClassName)}>\n\t\t\t{label}\n\t\t</div>\n\t{/if}\n{/snippet}\n\n<div\n\tbind:this={ref}\n\tclass={cn(\n\t\t\"border-border/50 bg-background grid min-w-[8rem] items-start gap-1.5 rounded-lg border px-2.5 py-1.5 text-xs shadow-xl\",\n\t\tclassName\n\t)}\n\t{...restProps}\n>\n\t{#if !nestLabel}\n\t\t{@render TooltipLabel()}\n\t{/if}\n\t<div class=\"grid gap-1.5\">\n\t\t{#each payload as item, i (item.name + i)}\n\t\t\t{@const indicatorColor = item.color}\n\t\t\t<div\n\t\t\t\tclass={cn(\n\t\t\t\t\t\"[&>svg]:text-muted-foreground flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5\",\n\t\t\t\t\tindicator === \"dot\" && \"items-center\"\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t{#if !hideIndicator}\n\t\t\t\t\t<div\n\t\t\t\t\t\tstyle=\"--color-bg: {indicatorColor}; --color-border: {indicatorColor};\"\n\t\t\t\t\t\tclass={cn(\n\t\t\t\t\t\t\t\"shrink-0 rounded-[2px] border-(--color-border) bg-(--color-bg)\",\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"size-2.5\": indicator === \"dot\",\n\t\t\t\t\t\t\t\t\"h-full w-1\": indicator === \"line\",\n\t\t\t\t\t\t\t\t\"w-0 border-[1.5px] border-dashed bg-transparent\":\n\t\t\t\t\t\t\t\t\tindicator === \"dashed\",\n\t\t\t\t\t\t\t\t\"my-0.5\": nestLabel && indicator === \"dashed\",\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t)}\n\t\t\t\t\t></div>\n\t\t\t\t{/if}\n\t\t\t\t<div\n\t\t\t\t\tclass={cn(\n\t\t\t\t\t\t\"flex flex-1 justify-between leading-none\",\n\t\t\t\t\t\tnestLabel ? \"items-end\" : \"items-center\"\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t<div class=\"grid gap-1.5\">\n\t\t\t\t\t\t{#if nestLabel}\n\t\t\t\t\t\t\t{@render TooltipLabel()}\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t<span class=\"text-muted-foreground\">\n\t\t\t\t\t\t\t{item.name}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</div>\n\t\t\t\t\t{#if item.value}\n\t\t\t\t\t\t<span class=\"text-foreground font-mono font-medium tabular-nums\">\n\t\t\t\t\t\t\t{item.value.toLocaleString()}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t{/if}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t{/each}\n\t</div>\n</div>\n"
  },
  {
    "path": "docs/src/lib/components/charts-nav.svelte",
    "content": "<script lang=\"ts\">\n\timport { page } from \"$app/state\";\n\timport { cn } from \"$lib/utils.js\";\n\timport { ScrollArea } from \"$lib/registry/ui/scroll-area/index.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet { class: className, ...restProps }: HTMLAttributes<HTMLElement> = $props();\n\n\tconst links = [\n\t\t{\n\t\t\tname: \"Area Charts\",\n\t\t\thref: \"/charts/area#charts\",\n\t\t},\n\t\t{\n\t\t\tname: \"Bar Charts\",\n\t\t\thref: \"/charts/bar#charts\",\n\t\t},\n\t\t{\n\t\t\tname: \"Line Charts\",\n\t\t\thref: \"/charts/line#charts\",\n\t\t},\n\t\t{\n\t\t\tname: \"Pie Charts\",\n\t\t\thref: \"/charts/pie#charts\",\n\t\t},\n\t\t{\n\t\t\tname: \"Radar Charts\",\n\t\t\thref: \"/charts/radar#charts\",\n\t\t},\n\t\t{\n\t\t\tname: \"Radial Charts\",\n\t\t\thref: \"/charts/radial#charts\",\n\t\t},\n\t\t{\n\t\t\tname: \"Tooltips\",\n\t\t\thref: \"/charts/tooltip#charts\",\n\t\t},\n\t];\n</script>\n\n<div class=\"relative overflow-hidden\">\n\t<ScrollArea\n\t\tclass=\"max-w-[600px] lg:max-w-none\"\n\t\torientation=\"both\"\n\t\tscrollbarXClasses=\"invisible\"\n\t>\n\t\t<div class={cn(\"flex items-center\", className)} {...restProps}>\n\t\t\t{#each links as link (link.href)}\n\t\t\t\t<a\n\t\t\t\t\thref={link.href}\n\t\t\t\t\tdata-active={link.href.startsWith(page.url.pathname)}\n\t\t\t\t\tclass={cn(\n\t\t\t\t\t\t\"text-muted-foreground hover:text-primary data-[active=true]:text-primary flex h-7 shrink-0 items-center justify-center px-4 text-center text-base font-medium transition-colors\"\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{link.name}\n\t\t\t\t</a>\n\t\t\t{/each}\n\t\t</div>\n\t</ScrollArea>\n</div>\n"
  },
  {
    "path": "docs/src/lib/components/code-collapsible-wrapper.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn } from \"$lib/utils.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Collapsible from \"$lib/registry/ui/collapsible/index.js\";\n\timport { Separator } from \"$lib/registry/ui/separator/index.js\";\n\timport type { ComponentProps } from \"svelte\";\n\n\tlet {\n\t\tchildren,\n\t\tclass: className,\n\t\t...restProps\n\t}: ComponentProps<typeof Collapsible.Root> = $props();\n\n\tlet open = $state(false);\n</script>\n\n<Collapsible.Root\n\tbind:open\n\tclass={cn(\"group/collapsible relative md:-mx-1\", className)}\n\t{...restProps}\n>\n\t<Collapsible.Trigger>\n\t\t{#snippet child({ props })}\n\t\t\t<div class=\"absolute end-9 top-1.5 z-10 flex items-center\">\n\t\t\t\t<Button\n\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t{...props}\n\t\t\t\t\tclass=\"text-muted-foreground h-7 rounded-md px-2\"\n\t\t\t\t>\n\t\t\t\t\t{open ? \"Collapse\" : \"Expand\"}\n\t\t\t\t</Button>\n\t\t\t\t<Separator orientation=\"vertical\" class=\"mx-1.5 !h-4\" />\n\t\t\t</div>\n\t\t{/snippet}\n\t</Collapsible.Trigger>\n\t<Collapsible.Content\n\t\tforceMount\n\t\tclass=\"relative mt-6 overflow-hidden data-[state=closed]:max-h-64 [&>figure]:mt-0 [&>figure]:md:!mx-0\"\n\t>\n\t\t{@render children?.()}\n\t</Collapsible.Content>\n\t<Collapsible.Trigger\n\t\tclass=\"from-code/70 to-code text-muted-foreground absolute inset-x-0 -bottom-2 flex h-20 items-center justify-center rounded-b-lg bg-gradient-to-b text-sm group-data-[state=open]/collapsible:hidden\"\n\t>\n\t\t{open ? \"Collapse\" : \"Expand\"}\n\t</Collapsible.Trigger>\n</Collapsible.Root>\n"
  },
  {
    "path": "docs/src/lib/components/code-tabs.svelte",
    "content": "<script lang=\"ts\">\n\timport { type InstallationType } from \"$lib/user-config.svelte.js\";\n\timport * as Tabs from \"$lib/registry/ui/tabs/index.js\";\n\timport { UserConfigContext } from \"$lib/user-config.svelte.js\";\n\timport type { ComponentProps } from \"svelte\";\n\n\tlet { children }: ComponentProps<typeof Tabs.Root> = $props();\n\n\tconst userConfig = UserConfigContext.get();\n</script>\n\n<Tabs.Root\n\tvalue={userConfig.current.installationType}\n\tonValueChange={(v) => userConfig.setConfig({ installationType: v as InstallationType })}\n\tclass=\"relative mt-6 w-full\"\n>\n\t{@render children?.()}\n</Tabs.Root>\n"
  },
  {
    "path": "docs/src/lib/components/color-format-selector.svelte",
    "content": "<script lang=\"ts\">\n\timport { getColorFormat, type Color } from \"$lib/colors.js\";\n\timport * as Select from \"$lib/registry/ui/select/index.js\";\n\timport { UserConfigContext } from \"$lib/user-config.svelte.js\";\n\timport { cn } from \"$lib/utils.js\";\n\timport type { ComponentProps } from \"svelte\";\n\n\tlet {\n\t\tcolor,\n\t\tclass: className,\n\t\t...restProps\n\t}: Omit<ComponentProps<typeof Select.Trigger>, \"color\"> & {\n\t\tcolor: Color;\n\t} = $props();\n\n\tconst userConfig = UserConfigContext.get();\n\n\tconst formats = $derived(getColorFormat(color));\n</script>\n\n<Select.Root\n\ttype=\"single\"\n\tbind:value={\n\t\t() => userConfig.current.colorFormat,\n\t\t(v) => {\n\t\t\tuserConfig.setConfig({ colorFormat: v });\n\t\t}\n\t}\n>\n\t<Select.Trigger\n\t\tsize=\"sm\"\n\t\tclass={cn(\"bg-secondary text-secondary-foreground border-secondary shadow-none\", className)}\n\t\t{...restProps}\n\t>\n\t\t<span class=\"font-medium\">Format: </span>\n\t\t<span class=\"text-muted-foreground font-mono\">{userConfig.current.colorFormat}</span>\n\t</Select.Trigger>\n\t<Select.Content align=\"end\" class=\"rounded-xl\">\n\t\t{#each Object.entries(formats) as [format, value] (format)}\n\t\t\t<Select.Item\n\t\t\t\tvalue={format}\n\t\t\t\tclass=\"gap-2 rounded-lg [&>span]:flex [&>span]:items-center [&>span]:gap-2\"\n\t\t\t>\n\t\t\t\t<span class=\"font-medium\">{format}</span>\n\t\t\t\t<span class=\"text-muted-foreground font-mono text-xs\">\n\t\t\t\t\t{value}\n\t\t\t\t</span>\n\t\t\t</Select.Item>\n\t\t{/each}\n\t</Select.Content>\n</Select.Root>\n"
  },
  {
    "path": "docs/src/lib/components/color-indicator.svelte",
    "content": "<script lang=\"ts\">\n\tinterface Props {\n\t\tcolor: string;\n\t}\n\n\tlet { color }: Props = $props();\n</script>\n\n<span class=\"border-border/50 inline-block size-3 border\" style=\"background-color: {color}\"></span>\n"
  },
  {
    "path": "docs/src/lib/components/color-palette.svelte",
    "content": "<script lang=\"ts\">\n\timport type { ColorPalette } from \"$lib/colors.js\";\n\timport { UseClipboard } from \"$lib/hooks/use-clipboard.svelte.js\";\n\timport ColorFormatSelector from \"./color-format-selector.svelte\";\n\timport Color from \"./color.svelte\";\n\n\tlet { colorPalette, clipboard }: { colorPalette: ColorPalette; clipboard: UseClipboard } =\n\t\t$props();\n</script>\n\n<div id={colorPalette.name} class=\"scroll-mt-20 rounded-lg\">\n\t<div class=\"flex items-center px-4\">\n\t\t<div class=\"flex-1 ps-1 text-sm font-medium\">\n\t\t\t<h2 class=\"capitalize\">{colorPalette.name}</h2>\n\t\t</div>\n\t\t<ColorFormatSelector color={colorPalette.colors[0]} class=\"ms-auto\" />\n\t</div>\n\t<div class=\"flex flex-col gap-4 py-4 sm:flex-row sm:gap-2\">\n\t\t{#each colorPalette.colors as color (color.hex)}\n\t\t\t<Color {color} {clipboard} />\n\t\t{/each}\n\t</div>\n</div>\n"
  },
  {
    "path": "docs/src/lib/components/color.svelte",
    "content": "<script lang=\"ts\">\n\timport CheckIcon from \"@lucide/svelte/icons/check\";\n\timport ClipboardIcon from \"@lucide/svelte/icons/clipboard\";\n\timport { toast } from \"svelte-sonner\";\n\timport type { Color } from \"$lib/colors.js\";\n\timport type { UseClipboard } from \"$lib/hooks/use-clipboard.svelte.js\";\n\timport { UserConfigContext } from \"$lib/user-config.svelte.js\";\n\n\tlet { color, clipboard }: { color: Color; clipboard: UseClipboard } = $props();\n\n\tconst userConfig = UserConfigContext.get();\n</script>\n\n<button\n\tclass=\"group relative flex aspect-[3/1] w-full flex-1 cursor-pointer flex-col gap-2 text-(--text) sm:aspect-[2/3] sm:h-auto sm:w-auto [&>svg]:absolute [&>svg]:end-4 [&>svg]:top-4 [&>svg]:z-10 [&>svg]:h-3.5 [&>svg]:w-3.5 [&>svg]:opacity-0 [&>svg]:transition-opacity\"\n\tdata-last-copied={clipboard.lastCopied === color[userConfig.current.colorFormat]}\n\tstyle=\"--bg: {color.oklch}; --text: {color.foreground};\"\n\tonclick={() => {\n\t\tclipboard.copy(color[userConfig.current.colorFormat]);\n\t\ttoast.success(`Copied ${color[userConfig.current.colorFormat]} to clipboard.`);\n\t}}\n>\n\t{#if clipboard.copied}\n\t\t<CheckIcon class=\"group-hover:opacity-100 group-data-[last-copied=true]:opacity-100\" />\n\t{:else}\n\t\t<ClipboardIcon class=\"group-hover:opacity-100\" />\n\t{/if}\n\t<div\n\t\tclass=\"border-ghost after:border-input w-full flex-1 rounded-md bg-(--bg) after:rounded-lg md:rounded-lg\"\n\t></div>\n\t<div class=\"flex w-full flex-col items-center justify-center gap-1\">\n\t\t<span\n\t\t\tclass=\"text-muted-foreground group-hover:text-foreground group-data-[last-copied=true]:text-primary font-mono text-xs tabular-nums transition-colors sm:hidden xl:flex\"\n\t\t>\n\t\t\t{color.class}\n\t\t</span>\n\t\t<span\n\t\t\tclass=\"text-muted-foreground group-hover:text-foreground group-data-[last-copied=true]:text-primary hidden font-mono text-xs tabular-nums transition-colors sm:flex xl:hidden\"\n\t\t>\n\t\t\t{color.scale}\n\t\t</span>\n\t</div>\n</button>\n"
  },
  {
    "path": "docs/src/lib/components/colors/color-card.svelte",
    "content": "<script lang=\"ts\">\n\timport { toast } from \"svelte-sonner\";\n\timport { PersistedState } from \"runed\";\n\timport * as Select from \"$lib/registry/ui/select/index.js\";\n\timport { AspectRatio } from \"$lib/registry/ui/aspect-ratio/index.js\";\n\timport { getColors, type ColorPalette } from \"$lib/components/colors/colors.js\";\n\timport ClipboardIcon from \"@lucide/svelte/icons/clipboard\";\n\timport CheckIcon from \"@lucide/svelte/icons/check\";\n\timport { scale } from \"svelte/transition\";\n\n\ttype Format = {\n\t\tformat: string;\n\t\thint: string;\n\t};\n\n\tconst formats: Format[] = [\n\t\t{\n\t\t\tformat: \"className\",\n\t\t\thint: \"bg-slate-100\",\n\t\t},\n\t\t{\n\t\t\tformat: \"hex\",\n\t\t\thint: \"#f8fafc\",\n\t\t},\n\t\t{\n\t\t\tformat: \"rgb\",\n\t\t\thint: \"248 250 252\",\n\t\t},\n\t\t{\n\t\t\tformat: \"hsl\",\n\t\t\thint: \"210 40% 98%\",\n\t\t},\n\t\t{\n\t\t\tformat: \"oklch\",\n\t\t\thint: \"0.98 0.00 248\",\n\t\t},\n\t] as const;\n\n\tconst selectedFormat = new PersistedState(\"color-format-preference\", formats[0].format);\n\n\tconst colors = getColors();\n\n\tlet copied = $state<string>();\n\n\tasync function copy(shade: ColorPalette[\"colors\"][number]) {\n\t\tcopied = shade.className;\n\n\t\tconst text = shade[selectedFormat.current as never] as string;\n\n\t\tawait navigator.clipboard.writeText(text);\n\n\t\ttoast.success(`Copied ${text} to clipboard!`);\n\n\t\tsetTimeout(() => {\n\t\t\tcopied = undefined;\n\t\t}, 1000);\n\t}\n</script>\n\n<div class=\"flex w-full flex-col gap-8\">\n\t{#each colors as color (color.name)}\n\t\t<div class=\"flex w-full flex-col gap-2 rounded-lg border p-2\">\n\t\t\t<div class=\"flex place-items-center justify-between\">\n\t\t\t\t<h2>{`${color.name[0].toUpperCase()}${color.name.slice(1)}`}</h2>\n\t\t\t\t<Select.Root type=\"single\" bind:value={selectedFormat.current}>\n\t\t\t\t\t<Select.Trigger class=\"h-7 w-fit text-xs\">\n\t\t\t\t\t\t<span class=\"me-2\">\n\t\t\t\t\t\t\t<span class=\"font-bold\">Format:</span>\n\t\t\t\t\t\t\t<span class=\"text-muted-foreground font-mono\"\n\t\t\t\t\t\t\t\t>{selectedFormat.current}</span\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</Select.Trigger>\n\t\t\t\t\t<Select.Content align=\"end\">\n\t\t\t\t\t\t{#each formats as format (format.format)}\n\t\t\t\t\t\t\t<Select.Item value={format.format}>\n\t\t\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t\t\t<span>{format.format}</span>\n\t\t\t\t\t\t\t\t\t<span class=\"text-muted-foreground font-mono\"\n\t\t\t\t\t\t\t\t\t\t>{format.hint}</span\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</Select.Item>\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</Select.Content>\n\t\t\t\t</Select.Root>\n\t\t\t</div>\n\t\t\t<div class=\"flex flex-col place-items-end md:flex-row md:gap-2\">\n\t\t\t\t{#each color.colors as shade (shade.className)}\n\t\t\t\t\t<button\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\tonclick={() => copy(shade)}\n\t\t\t\t\t\tclass=\"group w-full flex-1 shrink-0 md:h-full md:w-auto\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<div class=\"relative\">\n\t\t\t\t\t\t\t<div class=\"hidden md:block\">\n\t\t\t\t\t\t\t\t<AspectRatio ratio={12 / 16}>\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tclass=\"size-full rounded-lg\"\n\t\t\t\t\t\t\t\t\t\tstyle=\"background-color: {shade.hex};\"\n\t\t\t\t\t\t\t\t\t></div>\n\t\t\t\t\t\t\t\t</AspectRatio>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclass=\"block h-36 w-full rounded-lg md:hidden\"\n\t\t\t\t\t\t\t\tstyle=\"background-color: {shade.hex};\"\n\t\t\t\t\t\t\t></div>\n\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclass=\"absolute end-2 top-2 opacity-0 transition-all group-hover:opacity-100\"\n\t\t\t\t\t\t\t\tstyle=\"color: {shade.foreground};\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{#if copied === shade.className}\n\t\t\t\t\t\t\t\t\t<div in:scale>\n\t\t\t\t\t\t\t\t\t\t<CheckIcon class=\"size-4\" />\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t{:else}\n\t\t\t\t\t\t\t\t\t<div in:scale>\n\t\t\t\t\t\t\t\t\t\t<ClipboardIcon class=\"size-4\" />\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\n\t\t\t\t\t\t<span\n\t\t\t\t\t\t\tclass=\"group-hover:text-foreground text-muted-foreground hidden py-1 font-mono text-sm text-nowrap transition-colors xl:block\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{shade.className}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t\t<span\n\t\t\t\t\t\t\tclass=\"group-hover:text-foreground text-muted-foreground block py-1 font-mono text-sm text-nowrap transition-colors xl:hidden\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{shade.className.split(\"-\")[1]}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</button>\n\t\t\t\t{/each}\n\t\t\t</div>\n\t\t</div>\n\t{/each}\n</div>\n"
  },
  {
    "path": "docs/src/lib/components/colors/colors.ts",
    "content": "import { z } from \"zod\";\n\nimport { colorMapping, colors, type BaseColor } from \"../../registry/registry-colors.js\";\nimport lodash from \"lodash\";\nimport { BASE_STYLES } from \"../../registry/templates.js\";\n\nconst template = lodash.template as unknown as (s: string) => (data: unknown) => string;\n\nconst colorSchema = z.object({\n\tname: z.string(),\n\tid: z.string(),\n\tscale: z.number(),\n\tclassName: z.string(),\n\thex: z.string(),\n\trgb: z.string(),\n\thsl: z.string(),\n\tforeground: z.string(),\n\toklch: z.string(),\n});\n\nconst colorPaletteSchema = z.object({\n\tname: z.string(),\n\tcolors: z.array(colorSchema),\n});\n\nexport type ColorPalette = z.infer<typeof colorPaletteSchema>;\n\nexport function getColorFormat(color: Color) {\n\treturn {\n\t\tclassName: `bg-${color.name}-100`,\n\t\thex: color.hex,\n\t\trgb: color.rgb,\n\t\thsl: color.hsl,\n\t\toklch: color.oklch,\n\t};\n}\n\nexport type ColorFormat = keyof ReturnType<typeof getColorFormat>;\n\nexport function getColors() {\n\tconst tailwindColors = colorPaletteSchema.array().parse(\n\t\tObject.entries(colors)\n\t\t\t.map(([name, color]) => {\n\t\t\t\tif (!Array.isArray(color)) {\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\n\t\t\t\treturn {\n\t\t\t\t\tname,\n\t\t\t\t\tcolors: color.map((color) => {\n\t\t\t\t\t\tconst rgb = color.rgb.replace(/^rgb\\((\\d+),(\\d+),(\\d+)\\)$/, \"$1 $2 $3\");\n\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...color,\n\t\t\t\t\t\t\tname,\n\t\t\t\t\t\t\tid: `${name}-${color.scale}`,\n\t\t\t\t\t\t\tclassName: `${name}-${color.scale}`,\n\t\t\t\t\t\t\trgb,\n\t\t\t\t\t\t\thsl: color.hsl.replace(\n\t\t\t\t\t\t\t\t/^hsl\\(([\\d.]+),([\\d.]+%),([\\d.]+%)\\)$/,\n\t\t\t\t\t\t\t\t\"$1 $2 $3\"\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\toklch: color.oklch.replace(\n\t\t\t\t\t\t\t\t/^oklch\\(([\\d.]+)\\s*,\\s*([\\d.]+)\\s*,\\s*([\\d.]+)\\)$/,\n\t\t\t\t\t\t\t\t\"$1 $2 $3\"\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\tforeground: getForegroundFromBackground(rgb),\n\t\t\t\t\t\t};\n\t\t\t\t\t}),\n\t\t\t\t};\n\t\t\t})\n\t\t\t.filter(Boolean)\n\t);\n\n\treturn tailwindColors;\n}\n\nexport type Color = ReturnType<typeof getColors>[number][\"colors\"][number];\n\nfunction getForegroundFromBackground(rgb: string) {\n\tconst [r, g, b] = rgb.split(\" \").map(Number);\n\n\tfunction toLinear(number: number): number {\n\t\tconst base = number / 255;\n\t\treturn base <= 0.04045 ? base / 12.92 : Math.pow((base + 0.055) / 1.055, 2.4);\n\t}\n\n\tconst luminance = 0.2126 * toLinear(r) + 0.7152 * toLinear(g) + 0.0722 * toLinear(b);\n\n\treturn luminance > 0.179 ? \"#000\" : \"#fff\";\n}\n\nexport function generateBaseColorTemplate(baseColor: BaseColor) {\n\tconst colorsData = getColorsData();\n\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tconst base: Record<string, any> = {\n\t\tinlineColors: {},\n\t\tcssVars: {},\n\t};\n\tfor (const [mode, values] of Object.entries(colorMapping)) {\n\t\tbase.inlineColors[mode] = {};\n\t\tbase.cssVars[mode] = {};\n\t\tfor (const [key, value] of Object.entries(values)) {\n\t\t\tif (typeof value === \"string\") {\n\t\t\t\tconst resolvedColor = value.replace(/\\{\\{base\\}\\}-/g, `${baseColor}-`);\n\t\t\t\tbase.inlineColors[mode][key] = resolvedColor;\n\n\t\t\t\tconst [resolvedBase, scale] = resolvedColor.split(\"-\");\n\t\t\t\tconst color = scale\n\t\t\t\t\t? colorsData[resolvedBase].find(\n\t\t\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\t\t\t\t\t(item: any) => item.scale === Number.parseInt(scale)\n\t\t\t\t\t\t)\n\t\t\t\t\t: colorsData[resolvedBase];\n\t\t\t\tif (color) {\n\t\t\t\t\tbase.cssVars[mode][key] = color.oklch;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Build css vars.\n\tbase.inlineColorsTemplate = template(BASE_STYLES)({});\n\n\treturn base;\n}\n\nexport function getColorsData() {\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tconst colorsData: Record<string, any> = {};\n\tfor (const [color, value] of Object.entries(colors)) {\n\t\tif (typeof value === \"string\") {\n\t\t\tcolorsData[color] = value;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (Array.isArray(value)) {\n\t\t\tcolorsData[color] = value.map((item) => ({\n\t\t\t\t...item,\n\t\t\t\toklch: item.oklch,\n\t\t\t}));\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (typeof value === \"object\") {\n\t\t\tcolorsData[color] = {\n\t\t\t\t...value,\n\t\t\t\toklch: value.oklch,\n\t\t\t};\n\t\t\tcontinue;\n\t\t}\n\t}\n\n\treturn colorsData;\n}\n"
  },
  {
    "path": "docs/src/lib/components/colors-nav.svelte",
    "content": "<script lang=\"ts\">\n\timport { ScrollArea } from \"$lib/registry/ui/scroll-area/index.js\";\n\timport { page } from \"$app/state\";\n\timport { cn } from \"$lib/utils.js\";\n\timport { getColors } from \"$lib/colors.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tconst colors = getColors();\n\n\tlet { class: className, ...restProps }: HTMLAttributes<HTMLElement> = $props();\n</script>\n\n<div class={cn(\"flex items-center\", className)} {...restProps}>\n\t<ScrollArea class=\"max-w-full\" orientation=\"both\" scrollbarXClasses=\"invisible\">\n\t\t<div class=\"flex items-center\">\n\t\t\t{#each colors as colorPalette, index (colorPalette.name)}\n\t\t\t\t<a\n\t\t\t\t\thref=\"/colors#{colorPalette.name}\"\n\t\t\t\t\tdata-active={page.url.pathname?.startsWith(colorPalette.name) ||\n\t\t\t\t\t\t(index === 0 && page.url.pathname === \"/colors\")}\n\t\t\t\t\tclass={cn(\n\t\t\t\t\t\t\"text-muted-foreground hover:text-primary data-[active=true]:text-primary flex h-7 items-center justify-center px-4 text-center text-base font-medium capitalize transition-colors\"\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{colorPalette.name}\n\t\t\t\t</a>\n\t\t\t{/each}\n\t\t</div>\n\t</ScrollArea>\n</div>\n"
  },
  {
    "path": "docs/src/lib/components/command-menu/command-menu-item.svelte",
    "content": "<script lang=\"ts\">\n\timport { useMutationObserver } from \"$lib/hooks/use-mutation-observer.svelte.js\";\n\timport * as Command from \"$lib/registry/ui/command/index.js\";\n\timport { cn } from \"$lib/utils.js\";\n\timport type { ComponentProps } from \"svelte\";\n\n\tlet {\n\t\tchildren,\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tonHighlight,\n\t\t...restProps\n\t}: ComponentProps<typeof Command.Item> & {\n\t\tonHighlight?: () => void;\n\t\t\"data-selected\"?: string;\n\t\t\"aria-selected\"?: boolean;\n\t} = $props();\n\n\tuseMutationObserver(\n\t\t() => ref,\n\t\t(mutations) => {\n\t\t\tfor (const mutation of mutations) {\n\t\t\t\tif (\n\t\t\t\t\tmutation.type === \"attributes\" &&\n\t\t\t\t\tmutation.attributeName === \"aria-selected\" &&\n\t\t\t\t\tref?.getAttribute(\"aria-selected\") === \"true\"\n\t\t\t\t) {\n\t\t\t\t\tonHighlight?.();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tattributes: true,\n\t\t}\n\t);\n</script>\n\n<Command.Item\n\tbind:ref\n\tclass={cn(\n\t\t\"data-[selected=true]:border-input data-[selected=true]:bg-input/50 h-9 rounded-md border border-transparent !px-3 font-medium\",\n\t\tclassName\n\t)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</Command.Item>\n"
  },
  {
    "path": "docs/src/lib/components/command-menu/command-menu.svelte",
    "content": "<script lang=\"ts\">\n\timport type { Color, ColorPalette } from \"$lib/colors.js\";\n\timport { UseClipboard } from \"$lib/hooks/use-clipboard.svelte.js\";\n\timport { getCommand } from \"$lib/package-manager.js\";\n\timport * as Command from \"$lib/registry/ui/command/index.js\";\n\timport * as Dialog from \"$lib/registry/ui/dialog/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport { Separator } from \"$lib/registry/ui/separator/index.js\";\n\timport { cn } from \"$lib/utils.js\";\n\n\timport { sidebarNavItems } from \"$lib/navigation.js\";\n\n\timport ArrowRightIcon from \"@lucide/svelte/icons/arrow-right\";\n\timport CornerDownLeftIcon from \"@lucide/svelte/icons/corner-down-left\";\n\timport SquareDashedIcon from \"@lucide/svelte/icons/square-dashed\";\n\timport CommandMenuItem from \"./command-menu-item.svelte\";\n\timport { goto } from \"$app/navigation\";\n\timport { UserConfigContext } from \"$lib/user-config.svelte.js\";\n\timport * as Kbd from \"$lib/registry/ui/kbd/index.js\";\n\n\tlet {\n\t\tcolors,\n\t\tblocks,\n\t\tcloseMobileMenu,\n\t}: {\n\t\tcolors: ColorPalette[];\n\t\tblocks?: { name: string; description: string; categories: string[] }[];\n\t\tcloseMobileMenu?: () => void;\n\t} = $props();\n\n\tlet open = $state(false);\n\tlet selectedType = $state<\"color\" | \"page\" | \"component\" | \"block\" | null>(null);\n\tlet copyPayload = $state(\"\");\n\n\tconst userConfig = UserConfigContext.get();\n\tconst clipboard = new UseClipboard();\n\n\tfunction handlePageHighlight(isComponent: boolean, item: { href: string; title?: string }) {\n\t\tif (isComponent) {\n\t\t\tconst componentName = item.href.split(\"/\").pop();\n\t\t\tselectedType = \"component\";\n\t\t\tconst cmd = getCommand(\n\t\t\t\tuserConfig.current.packageManager,\n\t\t\t\t\"execute\",\n\t\t\t\t`shadcn-svelte add ${componentName}`\n\t\t\t);\n\t\t\tcopyPayload = `${cmd.command} ${cmd.args.join(\" \")}`.trim();\n\t\t} else {\n\t\t\tselectedType = \"page\";\n\t\t\tcopyPayload = \"\";\n\t\t}\n\t}\n\n\tfunction handleBlockHighlight(block: {\n\t\tname: string;\n\t\tdescription: string;\n\t\tcategories: string[];\n\t}) {\n\t\tselectedType = \"block\";\n\t\tconst cmd = getCommand(\n\t\t\tuserConfig.current.packageManager,\n\t\t\t\"execute\",\n\t\t\t`shadcn-svelte add ${block.name}`\n\t\t);\n\t\tcopyPayload = `${cmd.command} ${cmd.args.join(\" \")}`.trim();\n\t}\n\n\tfunction handleColorHighlight(color: Color) {\n\t\tselectedType = \"color\";\n\t\tcopyPayload = color.class;\n\t}\n\n\tfunction runCommand(command: () => unknown) {\n\t\topen = false;\n\t\tcommand();\n\t}\n\n\tfunction openCommandMenu() {\n\t\t// Close mobile menu first if callback is provided\n\t\tif (closeMobileMenu) {\n\t\t\tcloseMobileMenu();\n\t\t\t// Wait for the mobile menu animation to start closing (100ms matches the transition duration)\n\t\t\tsetTimeout(() => {\n\t\t\t\topen = true;\n\t\t\t}, 0);\n\t\t} else {\n\t\t\topen = true;\n\t\t}\n\t}\n\n\tfunction handleKeydown(e: KeyboardEvent) {\n\t\tif ((e.key === \"k\" && (e.metaKey || e.ctrlKey)) || e.key === \"/\") {\n\t\t\tif (\n\t\t\t\t(e.target instanceof HTMLElement && e.target.isContentEditable) ||\n\t\t\t\te.target instanceof HTMLInputElement ||\n\t\t\t\te.target instanceof HTMLTextAreaElement ||\n\t\t\t\te.target instanceof HTMLSelectElement\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\te.preventDefault();\n\t\t\tif (open) {\n\t\t\t\topen = false;\n\t\t\t} else {\n\t\t\t\topenCommandMenu();\n\t\t\t}\n\t\t}\n\n\t\tif (open && e.key === \"c\" && (e.metaKey || e.ctrlKey)) {\n\t\t\trunCommand(() => {\n\t\t\t\tif (selectedType === \"color\") {\n\t\t\t\t\tclipboard.copy(copyPayload);\n\t\t\t\t}\n\n\t\t\t\tif (selectedType === \"block\") {\n\t\t\t\t\tclipboard.copy(copyPayload);\n\t\t\t\t}\n\n\t\t\t\tif (selectedType === \"page\" || selectedType === \"component\") {\n\t\t\t\t\tclipboard.copy(copyPayload);\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t}\n</script>\n\n<svelte:document onkeydown={handleKeydown} />\n\n<Dialog.Root bind:open>\n\t<Dialog.Trigger>\n\t\t{#snippet child({ props })}\n\t\t\t<Button\n\t\t\t\t{...props}\n\t\t\t\tvariant=\"secondary\"\n\t\t\t\tclass={cn(\n\t\t\t\t\t\"bg-surface text-foreground dark:bg-card relative h-8 w-full justify-start pl-3 font-medium shadow-none sm:pr-12 md:w-48 lg:w-56 xl:w-64\"\n\t\t\t\t)}\n\t\t\t\tonclick={() => openCommandMenu()}\n\t\t\t>\n\t\t\t\t<span class=\"hidden lg:inline-flex\">Search documentation...</span>\n\t\t\t\t<span class=\"inline-flex lg:hidden\">Search...</span>\n\t\t\t\t<div class=\"absolute end-1.5 top-1.5 hidden gap-1 sm:flex\">\n\t\t\t\t\t<Kbd.Group>\n\t\t\t\t\t\t<Kbd.Root class=\"border\">⌘</Kbd.Root>\n\t\t\t\t\t\t<Kbd.Root class=\"border\">K</Kbd.Root>\n\t\t\t\t\t</Kbd.Group>\n\t\t\t\t</div>\n\t\t\t</Button>\n\t\t{/snippet}\n\t</Dialog.Trigger>\n\t<Dialog.Content\n\t\tshowCloseButton={false}\n\t\tclass=\"rounded-xl border-none bg-clip-padding p-2 pb-11 shadow-2xl ring-4 ring-neutral-200/80 dark:bg-neutral-900 dark:ring-neutral-800\"\n\t>\n\t\t<Dialog.Header class=\"sr-only\">\n\t\t\t<Dialog.Title>Search documentation...</Dialog.Title>\n\t\t\t<Dialog.Description>Search for a command to run...</Dialog.Description>\n\t\t</Dialog.Header>\n\t\t<Command.Root class=\"rounded-none bg-transparent\">\n\t\t\t<Command.Input placeholder=\"Search documentation...\" />\n\t\t\t<Command.List tabindex={-1} class=\"no-scrollbar min-h-80 scroll-pt-2 scroll-pb-1.5\">\n\t\t\t\t<Command.Empty class=\"text-muted-foreground py-12 text-center text-sm\">\n\t\t\t\t\tNo results found.\n\t\t\t\t</Command.Empty>\n\t\t\t\t{#each sidebarNavItems as group (group.title)}\n\t\t\t\t\t<Command.Group\n\t\t\t\t\t\theading={group.title}\n\t\t\t\t\t\tclass=\"!p-0 [&_[data-command-group-heading]]:scroll-mt-16 [&_[data-command-group-heading]]:!p-3 [&_[data-command-group-heading]]:!pb-1\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{#each group.items as item, i (i)}\n\t\t\t\t\t\t\t{@const isComponent = item.href?.includes(\"/components/\") ?? false}\n\n\t\t\t\t\t\t\t<CommandMenuItem\n\t\t\t\t\t\t\t\tvalue={item.title?.toString() ? `${group.title} ${item.title}` : \"\"}\n\t\t\t\t\t\t\t\tkeywords={isComponent ? [\"component\"] : undefined}\n\t\t\t\t\t\t\t\tonHighlight={() =>\n\t\t\t\t\t\t\t\t\thandlePageHighlight(isComponent, {\n\t\t\t\t\t\t\t\t\t\thref: item.href ?? \"\",\n\t\t\t\t\t\t\t\t\t\ttitle: item.title,\n\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t\t\t\trunCommand(() => {\n\t\t\t\t\t\t\t\t\t\tif (item.href) {\n\t\t\t\t\t\t\t\t\t\t\tgoto(item.href);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{#if isComponent}\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tclass=\"border-muted-foreground aspect-square size-4 rounded-full border border-dashed\"\n\t\t\t\t\t\t\t\t\t></div>\n\t\t\t\t\t\t\t\t{:else}\n\t\t\t\t\t\t\t\t\t<ArrowRightIcon />\n\t\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\t\t{item.title}\n\t\t\t\t\t\t\t</CommandMenuItem>\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</Command.Group>\n\t\t\t\t{/each}\n\t\t\t\t{#each colors as colorPalette (colorPalette.name)}\n\t\t\t\t\t<Command.Group\n\t\t\t\t\t\theading={colorPalette.name.charAt(0).toUpperCase() +\n\t\t\t\t\t\t\tcolorPalette.name.slice(1)}\n\t\t\t\t\t\tclass=\"!p-0 [&_[data-command-group-heading]]:!p-3\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{#each colorPalette.colors as color (color.hex)}\n\t\t\t\t\t\t\t<CommandMenuItem\n\t\t\t\t\t\t\t\tvalue={color.class}\n\t\t\t\t\t\t\t\tkeywords={[\"color\", color.name, color.class]}\n\t\t\t\t\t\t\t\tonHighlight={() => handleColorHighlight(color)}\n\t\t\t\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t\t\t\trunCommand(() => clipboard.copy(color.oklch));\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclass=\"border-ghost aspect-square size-4 rounded-sm bg-(--color) after:rounded-sm\"\n\t\t\t\t\t\t\t\t\tstyle=\"--color: {color.oklch};\"\n\t\t\t\t\t\t\t\t></div>\n\t\t\t\t\t\t\t\t{color.class}\n\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\tclass=\"text-muted-foreground ms-auto font-mono text-xs font-normal tabular-nums\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{color.oklch}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</CommandMenuItem>\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</Command.Group>\n\t\t\t\t{/each}\n\t\t\t\t{#if blocks?.length}\n\t\t\t\t\t<Command.Group\n\t\t\t\t\t\theading=\"Blocks\"\n\t\t\t\t\t\tclass=\"!p-0 [&_[data-command-group-heading]]:!p-3\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{#each blocks as block (block.name)}\n\t\t\t\t\t\t\t<CommandMenuItem\n\t\t\t\t\t\t\t\tvalue={block.name}\n\t\t\t\t\t\t\t\tonHighlight={() => handleBlockHighlight(block)}\n\t\t\t\t\t\t\t\tkeywords={[\n\t\t\t\t\t\t\t\t\t\"block\",\n\t\t\t\t\t\t\t\t\tblock.name,\n\t\t\t\t\t\t\t\t\tblock.description,\n\t\t\t\t\t\t\t\t\t...block.categories,\n\t\t\t\t\t\t\t\t]}\n\t\t\t\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t\t\t\trunCommand(() => {\n\t\t\t\t\t\t\t\t\t\tgoto(`/blocks/${block.categories[0]}#${block.name}`);\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<SquareDashedIcon />\n\t\t\t\t\t\t\t\t{block.description}\n\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\tclass=\"text-muted-foreground ms-auto font-mono text-xs font-normal tabular-nums\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{block.name}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</CommandMenuItem>\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</Command.Group>\n\t\t\t\t{/if}\n\t\t\t</Command.List>\n\t\t</Command.Root>\n\t\t<div\n\t\t\tclass=\"text-muted-foreground absolute inset-x-0 bottom-0 z-20 flex h-10 items-center gap-2 rounded-b-xl border-t border-t-neutral-100 bg-neutral-50 px-4 text-xs font-medium dark:border-t-neutral-700 dark:bg-neutral-800\"\n\t\t>\n\t\t\t<div class=\"flex items-center gap-2\">\n\t\t\t\t<Kbd.Root class=\"bg-background border\"><CornerDownLeftIcon /></Kbd.Root>\n\t\t\t\t{#if selectedType === \"page\" || selectedType === \"component\"}\n\t\t\t\t\tGo to Page\n\t\t\t\t{/if}\n\t\t\t\t{#if selectedType === \"color\"}\n\t\t\t\t\tCopy OKLCH\n\t\t\t\t{/if}\n\t\t\t</div>\n\t\t\t{#if copyPayload}\n\t\t\t\t<Separator orientation=\"vertical\" class=\"!h-4\" />\n\t\t\t\t<div class=\"flex items-center gap-1\">\n\t\t\t\t\t<Kbd.Group\n\t\t\t\t\t\t><Kbd.Root class=\"bg-background border\">⌘</Kbd.Root>\n\t\t\t\t\t\t<Kbd.Root class=\"bg-background border\">C</Kbd.Root>\n\t\t\t\t\t</Kbd.Group>\n\t\t\t\t\t{copyPayload}\n\t\t\t\t</div>\n\t\t\t{/if}\n\t\t</div>\n\t</Dialog.Content>\n</Dialog.Root>\n"
  },
  {
    "path": "docs/src/lib/components/component-code-viewer/component-code-viewer-code-title.svelte",
    "content": "<script lang=\"ts\">\n\timport { ComponentCodeViewerContext } from \"./component-code-viewer.svelte\";\n\timport * as Select from \"$lib/registry/ui/select/index.js\";\n\timport { getIconForLanguageExtension } from \"../icons/icons.js\";\n\timport ComponentCodeViewerCopyCodeButton from \"./component-code-viewer-copy-code-button.svelte\";\n\n\tconst ctx = ComponentCodeViewerContext.get();\n\tconst file = $derived(ctx.highlightedFiles?.find((f) => f.target === ctx.activeFile) ?? null);\n\tconst language = $derived(file?.target?.split(\".\").pop() ?? \"svelte\");\n\tconst Icon = $derived(getIconForLanguageExtension(language));\n\tconst showFileTree = $derived(ctx.allowSidebar !== false);\n\tconst hideSidebar = $derived(ctx.allowSidebar === false);\n</script>\n\n{#if file}\n\t<!-- svelte-ignore a11y_figcaption_parent -->\n\t<!-- When sidebar is hidden, show Select at all screen sizes -->\n\t{#if hideSidebar}\n\t\t<div\n\t\t\tclass=\"text-code-foreground [&_svg]:text-code-foreground flex h-12 shrink-0 items-center gap-2 border-b px-2 py-2 select-none [&_svg]:size-4 [&_svg]:opacity-70\"\n\t\t\tdata-language={language}\n\t\t>\n\t\t\t<Select.Root\n\t\t\t\ttype=\"single\"\n\t\t\t\tbind:value={() => ctx.activeFile ?? \"\", (v) => (ctx.activeFile = v)}\n\t\t\t>\n\t\t\t\t<Select.Trigger class=\"w-76 justify-start [&>svg]:ms-auto\">\n\t\t\t\t\t<Icon class=\"!ms-0\" />\n\t\t\t\t\t{file.target.split(\"/\").pop()}\n\t\t\t\t</Select.Trigger>\n\t\t\t\t<Select.Content>\n\t\t\t\t\t{#if ctx.tree}\n\t\t\t\t\t\t{@const tree = ctx.tree[0]}\n\t\t\t\t\t\t{#if tree && tree.children}\n\t\t\t\t\t\t\t{#each tree.children as file (file.name)}\n\t\t\t\t\t\t\t\t<Select.Item value={file.path ?? \"\"}>\n\t\t\t\t\t\t\t\t\t{file.name}\n\t\t\t\t\t\t\t\t</Select.Item>\n\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t{/if}\n\t\t\t\t</Select.Content>\n\t\t\t</Select.Root>\n\t\t\t<div class=\"ms-auto flex items-center gap-2\">\n\t\t\t\t<ComponentCodeViewerCopyCodeButton />\n\t\t\t</div>\n\t\t</div>\n\t{:else}\n\t\t<!-- When sidebar is shown, show file name on desktop and Select on mobile -->\n\t\t<figcaption\n\t\t\tclass=\"text-code-foreground [&_svg]:text-code-foreground hidden h-12 shrink-0 items-center gap-2 border-b px-4 py-2 select-none md:flex [&_svg]:size-4 [&_svg]:opacity-70\"\n\t\t\tdata-language={language}\n\t\t>\n\t\t\t<Icon />\n\t\t\t{file.target.split(\"/\").pop()}\n\t\t\t<div class=\"ms-auto flex items-center gap-2\">\n\t\t\t\t<ComponentCodeViewerCopyCodeButton />\n\t\t\t</div>\n\t\t</figcaption>\n\t\t{#if showFileTree}\n\t\t\t<div\n\t\t\t\tclass=\"text-code-foreground [&_svg]:text-code-foreground flex h-12 shrink-0 items-center gap-2 border-b px-2 py-2 md:hidden [&_svg]:size-4 [&_svg]:opacity-70\"\n\t\t\t>\n\t\t\t\t<Select.Root\n\t\t\t\t\ttype=\"single\"\n\t\t\t\t\tbind:value={() => ctx.activeFile ?? \"\", (v) => (ctx.activeFile = v)}\n\t\t\t\t>\n\t\t\t\t\t<Select.Trigger class=\"w-76 justify-start [&>svg]:ms-auto\">\n\t\t\t\t\t\t<Icon class=\"!ms-0\" />\n\t\t\t\t\t\t{file.target.split(\"/\").pop()}\n\t\t\t\t\t</Select.Trigger>\n\t\t\t\t\t<Select.Content>\n\t\t\t\t\t\t{#if ctx.tree}\n\t\t\t\t\t\t\t{@const tree = ctx.tree[0]}\n\t\t\t\t\t\t\t{#if tree && tree.children}\n\t\t\t\t\t\t\t\t{#each tree.children as file (file.name)}\n\t\t\t\t\t\t\t\t\t<Select.Item value={file.path ?? \"\"}>\n\t\t\t\t\t\t\t\t\t\t{file.name}\n\t\t\t\t\t\t\t\t\t</Select.Item>\n\t\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t</Select.Content>\n\t\t\t\t</Select.Root>\n\t\t\t\t<div class=\"ms-auto flex items-center gap-2\">\n\t\t\t\t\t<ComponentCodeViewerCopyCodeButton class=\"me-0\" />\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t{/if}\n\t{/if}\n{/if}\n"
  },
  {
    "path": "docs/src/lib/components/component-code-viewer/component-code-viewer-code.svelte",
    "content": "<script lang=\"ts\">\n\timport ComponentCodeViewerCodeTitle from \"./component-code-viewer-code-title.svelte\";\n\timport ComponentCodeViewerFileTree from \"./component-code-viewer-file-tree.svelte\";\n\timport { ComponentCodeViewerContext } from \"./component-code-viewer.svelte\";\n\n\tconst ctx = ComponentCodeViewerContext.get();\n\tconst file = $derived(ctx.highlightedFiles?.find((f) => f.target === ctx.activeFile));\n\tconst showFileTree = $derived(ctx.allowSidebar !== false);\n\tlet codeContainer = $state<HTMLElement | null>(null);\n\n\tfunction handleKeydown(event: KeyboardEvent) {\n\t\tif (!codeContainer) return;\n\t\tif (event.key === \"a\" && (event.metaKey || event.ctrlKey)) {\n\t\t\tevent.preventDefault();\n\t\t\tconst range = document.createRange();\n\t\t\trange.selectNodeContents(codeContainer);\n\n\t\t\tconst selection = window.getSelection();\n\t\t\tif (!selection) return;\n\t\t\tselection.removeAllRanges();\n\t\t\tselection.addRange(range);\n\t\t}\n\t}\n</script>\n\n<svelte:document onkeydown={handleKeydown} />\n\n{#if file}\n\t<div\n\t\tclass=\"bg-code text-code-foreground flex h-(--height) overflow-hidden rounded-xl border group-data-[view=preview]/block-view-wrapper:hidden\"\n\t>\n\t\t{#if showFileTree}\n\t\t\t<div class=\"hidden w-72 md:block\">\n\t\t\t\t<ComponentCodeViewerFileTree />\n\t\t\t</div>\n\t\t{/if}\n\t\t<figure\n\t\t\tdata-rehype-pretty-code-figure\n\t\t\tclass=\"mt-0 flex min-w-0 flex-1 flex-col rounded-xl border-none\"\n\t\t>\n\t\t\t<ComponentCodeViewerCodeTitle />\n\t\t\t<div\n\t\t\t\tbind:this={codeContainer}\n\t\t\t\tclass=\"no-scrollbar overflow-y-auto\"\n\t\t\t\t{@attach (node) => {\n\t\t\t\t\tif (file.highlightedContent) {\n\t\t\t\t\t\tctx.activeFileCodeToCopy = node.innerText;\n\t\t\t\t\t}\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<!-- eslint-disable-next-line svelte/no-at-html-tags -->\n\t\t\t\t{@html file.highlightedContent}\n\t\t\t</div>\n\t\t</figure>\n\t</div>\n{/if}\n"
  },
  {
    "path": "docs/src/lib/components/component-code-viewer/component-code-viewer-copy-code-button.svelte",
    "content": "<script lang=\"ts\">\n\timport { UseClipboard } from \"$lib/hooks/use-clipboard.svelte.js\";\n\timport { ComponentCodeViewerContext } from \"./component-code-viewer.svelte\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport CopyIcon from \"@tabler/icons-svelte/icons/copy\";\n\timport CheckIcon from \"@tabler/icons-svelte/icons/check\";\n\timport { cn } from \"$lib/utils.js\";\n\timport type { ComponentProps } from \"svelte\";\n\n\tlet { class: className }: ComponentProps<typeof Button> = $props();\n\n\tconst ctx = ComponentCodeViewerContext.get();\n\tconst clipboard = new UseClipboard();\n</script>\n\n{#if ctx.activeFileCodeToCopy}\n\t<Button\n\t\tonclick={() => {\n\t\t\tclipboard.copy(ctx.activeFileCodeToCopy);\n\t\t}}\n\t\tclass={cn(\n\t\t\t\"me-2 size-7 shrink-0 rounded-md p-0 hover:bg-zinc-700 hover:text-white focus:bg-zinc-700 focus:text-white focus-visible:bg-zinc-700 focus-visible:text-white active:bg-zinc-700 active:text-white data-[active=true]:bg-zinc-700 data-[active=true]:text-white [&>svg]:size-3\",\n\t\t\tclassName\n\t\t)}\n\t\tvariant=\"ghost\"\n\t>\n\t\t{#if clipboard.copied}\n\t\t\t<CheckIcon />\n\t\t{:else}\n\t\t\t<CopyIcon />\n\t\t{/if}\n\t</Button>\n{/if}\n"
  },
  {
    "path": "docs/src/lib/components/component-code-viewer/component-code-viewer-file-tree.svelte",
    "content": "<script lang=\"ts\">\n\timport { ComponentCodeViewerContext } from \"./component-code-viewer.svelte\";\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\timport ComponentCodeViewerTree from \"./component-code-viewer-tree.svelte\";\n\n\tconst ctx = ComponentCodeViewerContext.get();\n</script>\n\n<Sidebar.Provider class=\"flex h-full !min-h-0 flex-col select-none\">\n\t<Sidebar.Root collapsible=\"none\" class=\"h-full w-full flex-1\">\n\t\t<Sidebar.GroupLabel class=\"h-12 rounded-none border-b px-4 text-sm\">\n\t\t\tFiles\n\t\t</Sidebar.GroupLabel>\n\t\t<Sidebar.Group class=\"overflow-y-auto p-0\">\n\t\t\t<Sidebar.GroupContent>\n\t\t\t\t<Sidebar.Menu class=\"translate-x-0 gap-1.5\">\n\t\t\t\t\t{#if ctx.tree}\n\t\t\t\t\t\t{#each ctx.tree as file, index (index)}\n\t\t\t\t\t\t\t<ComponentCodeViewerTree item={file} index={1} />\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t{/if}\n\t\t\t\t</Sidebar.Menu>\n\t\t\t</Sidebar.GroupContent>\n\t\t</Sidebar.Group>\n\t</Sidebar.Root>\n</Sidebar.Provider>\n"
  },
  {
    "path": "docs/src/lib/components/component-code-viewer/component-code-viewer-tree.svelte",
    "content": "<script lang=\"ts\">\n\timport type { FileTree } from \"$lib/registry/registry-utils.js\";\n\timport ComponentCodeViewerTree from \"./component-code-viewer-tree.svelte\";\n\timport { ComponentCodeViewerContext } from \"./component-code-viewer.svelte\";\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\timport * as Collapsible from \"$lib/registry/ui/collapsible/index.js\";\n\timport ChevronRightIcon from \"@lucide/svelte/icons/chevron-right\";\n\timport FileIcon from \"@lucide/svelte/icons/file\";\n\timport FolderIcon from \"@lucide/svelte/icons/folder\";\n\n\tlet { item, index }: { item: FileTree; index: number } = $props();\n\n\tconst ctx = ComponentCodeViewerContext.get();\n</script>\n\n{#if !item.children}\n\t<Sidebar.MenuItem>\n\t\t<Sidebar.MenuButton\n\t\t\tstyle=\"--index: {index * (index === 2 ? 1.1 : 1.2)}rem\"\n\t\t\tisActive={item.path === ctx.activeFile}\n\t\t\tonclick={() => {\n\t\t\t\tif (!item.path) return;\n\t\t\t\tctx.activeFile = item.path;\n\t\t\t}}\n\t\t\tclass=\"hover:bg-muted-foreground/15 focus:bg-muted-foreground/15 focus-visible:bg-muted-foreground/15 active:bg-muted-foreground/15 data-[active=true]:bg-muted-foreground/15 flex min-w-0 items-center rounded-none ps-(--index)\"\n\t\t\tdata-index={index}\n\t\t>\n\t\t\t<ChevronRightIcon class=\"invisible shrink-0\" />\n\t\t\t<FileIcon class=\"size-4 shrink-0\" />\n\t\t\t<span class=\"truncate pe-2\">{item.name}</span>\n\t\t</Sidebar.MenuButton>\n\t</Sidebar.MenuItem>\n{:else}\n\t<Sidebar.MenuItem>\n\t\t<Collapsible.Root\n\t\t\tclass=\"group/collapsible [&[data-state=open]>button>svg:first-child]:rotate-90\"\n\t\t\topen={true}\n\t\t>\n\t\t\t<Collapsible.Trigger\n\t\t\t\tstyle=\"--index: {index * (index === 1 ? 1 : 1.2)}rem\"\n\t\t\t\tclass=\"hover:bg-muted-foreground/15 focus:bg-muted-foreground/15 focus-visible:bg-muted-foreground/15 active:bg-muted-foreground/15 data-[active=true]:bg-muted-foreground/15 rounded-none ps-(--index) whitespace-nowrap\"\n\t\t\t>\n\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t<Sidebar.MenuButton {...props}>\n\t\t\t\t\t\t<ChevronRightIcon class=\"transition-transform\" />\n\t\t\t\t\t\t<FolderIcon />\n\t\t\t\t\t\t{`ui/${item.name}`}\n\t\t\t\t\t</Sidebar.MenuButton>\n\t\t\t\t{/snippet}\n\t\t\t</Collapsible.Trigger>\n\t\t\t<Collapsible.Content>\n\t\t\t\t<Sidebar.MenuSub class=\"m-0 w-full translate-x-0 border-none p-0\">\n\t\t\t\t\t{#each item.children as subItem, key (key)}\n\t\t\t\t\t\t<ComponentCodeViewerTree item={subItem} index={index + 1} />\n\t\t\t\t\t{/each}\n\t\t\t\t</Sidebar.MenuSub>\n\t\t\t</Collapsible.Content>\n\t\t</Collapsible.Root>\n\t</Sidebar.MenuItem>\n{/if}\n"
  },
  {
    "path": "docs/src/lib/components/component-code-viewer/component-code-viewer.svelte",
    "content": "<script lang=\"ts\" module>\n\timport { createFileTreeForRegistryItemFiles } from \"$lib/registry/registry-utils.js\";\n\timport type { Pane } from \"paneforge\";\n\timport { Context } from \"runed\";\n\timport ComponentCodeViewerCode from \"./component-code-viewer-code.svelte\";\n\timport CodeIcon from \"@lucide/svelte/icons/code\";\n\n\timport * as Dialog from \"$lib/registry/ui/dialog/index.js\";\n\timport { MediaQuery } from \"svelte/reactivity\";\n\timport { badgeVariants } from \"$lib/registry/ui/badge/badge.svelte\";\n\timport type { HighlightedBlock } from \"../../../routes/api/block/[block]/+server.js\";\n\n\ttype ComponentCodeViewerContextType = {\n\t\titem: HighlightedBlock;\n\t\tactiveFile: string | null;\n\t\tresizablePaneRef: Pane | null;\n\t\ttree: ReturnType<typeof createFileTreeForRegistryItemFiles> | null;\n\t\thighlightedFiles: HighlightedBlock[\"files\"];\n\t\tactiveFileCodeToCopy: string;\n\t\tallowSidebar?: boolean;\n\t};\n\n\texport const ComponentCodeViewerContext = new Context<ComponentCodeViewerContextType>(\n\t\t\"ComponentCodeViewer\"\n\t);\n</script>\n\n<script lang=\"ts\">\n\tlet {\n\t\titem,\n\t\tallowSidebar = false,\n\t}: Pick<ComponentCodeViewerContextType, \"item\" | \"allowSidebar\"> = $props();\n\n\tconst tree = $derived(createFileTreeForRegistryItemFiles(item.files));\n\tconst highlightedFiles = $derived(item.files);\n\n\tfunction getFirstFileTargetInTree(_tree: typeof tree = tree): string | null {\n\t\tif (!_tree?.length) return null;\n\n\t\tfor (const node of _tree) {\n\t\t\tif (node.path) return node.path;\n\t\t\tif (node.children) {\n\t\t\t\tconst result = getFirstFileTargetInTree(node.children);\n\t\t\t\tif (result) return result;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\tlet activeFile = $state<ComponentCodeViewerContextType[\"activeFile\"]>(\n\t\tgetFirstFileTargetInTree() ?? null\n\t);\n\tlet resizablePaneRef = $state<Pane>(null!);\n\tlet activeFileCodeToCopy = $state<ComponentCodeViewerContextType[\"activeFileCodeToCopy\"]>(\"\");\n\n\tComponentCodeViewerContext.set({\n\t\tget item() {\n\t\t\treturn item;\n\t\t},\n\t\tget activeFile() {\n\t\t\treturn activeFile;\n\t\t},\n\t\tset activeFile(value) {\n\t\t\tactiveFile = value;\n\t\t},\n\t\tget resizablePaneRef() {\n\t\t\treturn resizablePaneRef;\n\t\t},\n\t\tset resizablePaneRef(value) {\n\t\t\tresizablePaneRef = value;\n\t\t},\n\t\tget tree() {\n\t\t\treturn tree;\n\t\t},\n\t\tget highlightedFiles() {\n\t\t\treturn highlightedFiles;\n\t\t},\n\t\tget activeFileCodeToCopy() {\n\t\t\treturn activeFileCodeToCopy;\n\t\t},\n\t\tset activeFileCodeToCopy(value) {\n\t\t\tactiveFileCodeToCopy = value;\n\t\t},\n\t\tget allowSidebar() {\n\t\t\treturn allowSidebar;\n\t\t},\n\t});\n\n\tconst isMobile = new MediaQuery(\"(max-width: 768px)\");\n\tconst height = $derived(\n\t\tisMobile.current ? \"75dvh\" : \"calc(100svh - (var(--header-height) * 2))\"\n\t);\n\tlet contentRef = $state<HTMLElement | null>(null);\n</script>\n\n<Dialog.Root>\n\t<Dialog.Trigger class={badgeVariants({ variant: \"secondary\" })} data-llm-ignore>\n\t\tComponent Source <CodeIcon aria-hidden=\"true\" />\n\t</Dialog.Trigger>\n\t<Dialog.Content\n\t\tbind:ref={contentRef}\n\t\tclass=\"rounded-xl p-0 sm:max-w-[90%]\"\n\t\tshowCloseButton={false}\n\t\tonOpenAutoFocus={(e) => {\n\t\t\tif (!contentRef) return;\n\t\t\tconst activeItem = contentRef.querySelector(\n\t\t\t\t\"button[data-active=true]\"\n\t\t\t) as HTMLElement | null;\n\t\t\tif (activeItem) {\n\t\t\t\te.preventDefault();\n\t\t\t\tactiveItem.focus();\n\t\t\t}\n\t\t}}\n\t>\n\t\t<Dialog.Header class=\"sr-only\">\n\t\t\t<Dialog.Title>\n\t\t\t\t{item.name} Code\n\t\t\t</Dialog.Title>\n\t\t\t<Dialog.Description>\n\t\t\t\tView the code for the {item.name} component\n\t\t\t</Dialog.Description>\n\t\t</Dialog.Header>\n\t\t<div\n\t\t\tid={item.name}\n\t\t\tclass=\"group/block-view-wrapper flex w-full min-w-0 flex-col-reverse items-stretch gap-4 overflow-hidden md:flex-col\"\n\t\t\tstyle=\"--height: {height};\"\n\t\t>\n\t\t\t<ComponentCodeViewerCode />\n\t\t</div>\n\t\t<Dialog.Close class=\"sr-only\">Close</Dialog.Close>\n\t</Dialog.Content>\n</Dialog.Root>\n"
  },
  {
    "path": "docs/src/lib/components/component-preview-tabs.svelte",
    "content": "<script lang=\"ts\">\n\timport type { Component, Snippet } from \"svelte\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tclass: className,\n\t\talign = \"center\",\n\t\tcomponent,\n\t\texample,\n\t\tchildren,\n\t\tname,\n\t\t...restProps\n\t}: HTMLAttributes<HTMLElement> & {\n\t\talign?: \"center\" | \"start\" | \"end\";\n\t\thideCode?: boolean;\n\t\texample?: Snippet;\n\t\tcomponent?: Component;\n\t\tname: string;\n\t} = $props();\n</script>\n\n{#snippet ExampleFallback()}\n\t{#if component}\n\t\t{@const Component = component}\n\t\t<Component />\n\t{:else}\n\t\t<p class=\"text-muted-foreground text-sm\">\n\t\t\tComponent\n\t\t\t<code class=\"bg-muted relative rounded px-[0.3rem] py-[0.2rem] font-mono text-sm\">\n\t\t\t\t{name}\n\t\t\t</code>\n\t\t\tnot found in registry.\n\t\t</p>\n\t{/if}\n{/snippet}\n\n<div\n\tclass={cn(\"group relative mt-4 mb-12 flex flex-col gap-2 rounded-lg border\", className)}\n\t{...restProps}\n>\n\t<div>\n\t\t<div\n\t\t\tdata-slot=\"preview\"\n\t\t\tclass=\"preview flex w-full justify-center data-[align=center]:items-center data-[align=end]:items-end data-[align=start]:items-start\"\n\t\t\tdata-llm-ignore\n\t\t>\n\t\t\t<div\n\t\t\t\tdata-align={align}\n\t\t\t\tclass=\"preview flex min-h-[450px] w-full justify-center p-10 data-[align=center]:items-center data-[align=end]:items-end data-[align=start]:items-start\"\n\t\t\t>\n\t\t\t\t{#if example}\n\t\t\t\t\t{@render example()}\n\t\t\t\t{:else}\n\t\t\t\t\t{@render ExampleFallback()}\n\t\t\t\t{/if}\n\t\t\t</div>\n\t\t</div>\n\t\t<div\n\t\t\tdata-slot=\"code\"\n\t\t\tclass=\"overflow-hidden **:data-rehype-pretty-code-figure:m-0! **:data-rehype-pretty-code-figure:rounded-t-none **:data-rehype-pretty-code-figure:border-t [&_pre]:max-h-[400px]\"\n\t\t>\n\t\t\t{@render children?.()}\n\t\t</div>\n\t</div>\n</div>\n"
  },
  {
    "path": "docs/src/lib/components/component-preview.svelte",
    "content": "<script lang=\"ts\">\n\timport type { Component } from \"svelte\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\timport ComponentPreviewTabs from \"./component-preview-tabs.svelte\";\n\n\tlet {\n\t\tname,\n\t\ttype = \"example\",\n\t\tclass: className,\n\t\talign = \"center\",\n\t\thideCode = false,\n\t\t...restProps\n\t}: HTMLAttributes<HTMLElement> & {\n\t\tname: string;\n\t\talign?: \"center\" | \"start\" | \"end\";\n\t\tdescription?: string;\n\t\thideCode?: boolean;\n\t\ttype?: \"block\" | \"component\" | \"example\";\n\t\tcomponent?: Component;\n\t} = $props();\n</script>\n\n{#if type === \"block\"}\n\t<div\n\t\tclass=\"relative aspect-[4/2.5] w-full overflow-hidden rounded-md border md:-mx-4\"\n\t\tdata-llm-ignore\n\t>\n\t\t<img\n\t\t\tsrc=\"/img/registry/{name}-light.png\"\n\t\t\talt={name}\n\t\t\twidth={1440}\n\t\t\theight={900}\n\t\t\tclass=\"bg-background absolute start-0 top-0 z-20 w-[970px] max-w-none sm:w-7xl md:hidden dark:hidden md:dark:hidden\"\n\t\t/>\n\t\t<img\n\t\t\tsrc=\"/img/registry/{name}-dark.png\"\n\t\t\talt={name}\n\t\t\twidth={1440}\n\t\t\theight={900}\n\t\t\tclass=\"bg-background absolute start-0 top-0 z-20 hidden w-[970px] max-w-none sm:w-7xl md:hidden dark:block md:dark:hidden\"\n\t\t/>\n\t\t<div class=\"bg-background absolute inset-0 hidden w-[1600px] md:block\">\n\t\t\t<iframe src=\"/view/{name}\" class=\"size-full\" title={name}></iframe>\n\t\t</div>\n\t</div>\n{:else if type === \"component\" || type === \"example\"}\n\t<ComponentPreviewTabs {name} class={className} {align} {hideCode} {...restProps} />\n{/if}\n"
  },
  {
    "path": "docs/src/lib/components/component-source.svelte",
    "content": "<script lang=\"ts\" module>\n\timport { createFileTreeForRegistryItemFiles } from \"$lib/registry/registry-utils.js\";\n\timport type { Pane } from \"paneforge\";\n\timport { ComponentCodeViewerContext } from \"$lib/components/component-code-viewer/component-code-viewer.svelte\";\n\timport ComponentCodeViewerCode from \"$lib/components/component-code-viewer/component-code-viewer-code.svelte\";\n\n\timport { MediaQuery } from \"svelte/reactivity\";\n\n\timport type { HighlightedBlock } from \"../../routes/api/block/[block]/+server.js\";\n\n\ttype ComponentCodeViewerContextType = {\n\t\titem: HighlightedBlock;\n\t\tactiveFile: string | null;\n\t\tresizablePaneRef: Pane | null;\n\t\ttree: ReturnType<typeof createFileTreeForRegistryItemFiles> | null;\n\t\thighlightedFiles: HighlightedBlock[\"files\"];\n\t\tactiveFileCodeToCopy: string;\n\t\tallowSidebar?: boolean;\n\t};\n</script>\n\n<script lang=\"ts\">\n\tlet {\n\t\titem,\n\t\tallowSidebar = false,\n\t}: Pick<ComponentCodeViewerContextType, \"item\" | \"allowSidebar\"> = $props();\n\n\tconst tree = $derived(createFileTreeForRegistryItemFiles(item.files));\n\tconst highlightedFiles = $derived(item.files);\n\n\tfunction getFirstFileTargetInTree(_tree: typeof tree = tree): string | null {\n\t\tif (!_tree?.length) return null;\n\n\t\tfor (const node of _tree) {\n\t\t\tif (node.path) return node.path;\n\t\t\tif (node.children) {\n\t\t\t\tconst result = getFirstFileTargetInTree(node.children);\n\t\t\t\tif (result) return result;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\tlet activeFile = $state<ComponentCodeViewerContextType[\"activeFile\"]>(\n\t\tgetFirstFileTargetInTree() ?? null\n\t);\n\tlet resizablePaneRef = $state<Pane>(null!);\n\tlet activeFileCodeToCopy = $state<ComponentCodeViewerContextType[\"activeFileCodeToCopy\"]>(\"\");\n\n\tComponentCodeViewerContext.set({\n\t\tget item() {\n\t\t\treturn item;\n\t\t},\n\t\tget activeFile() {\n\t\t\treturn activeFile;\n\t\t},\n\t\tset activeFile(value) {\n\t\t\tactiveFile = value;\n\t\t},\n\t\tget resizablePaneRef() {\n\t\t\treturn resizablePaneRef;\n\t\t},\n\t\tset resizablePaneRef(value) {\n\t\t\tresizablePaneRef = value;\n\t\t},\n\t\tget tree() {\n\t\t\treturn tree;\n\t\t},\n\t\tget highlightedFiles() {\n\t\t\treturn highlightedFiles;\n\t\t},\n\t\tget activeFileCodeToCopy() {\n\t\t\treturn activeFileCodeToCopy;\n\t\t},\n\t\tset activeFileCodeToCopy(value) {\n\t\t\tactiveFileCodeToCopy = value;\n\t\t},\n\t\tget allowSidebar() {\n\t\t\treturn allowSidebar;\n\t\t},\n\t});\n\n\tconst isMobile = new MediaQuery(\"(max-width: 768px)\");\n\n\tconst longestFileHeight = $derived.by(() => {\n\t\tif (!highlightedFiles || highlightedFiles.length === 0) return \"100%\";\n\n\t\tconst maxLineCount = highlightedFiles.reduce((max, file) => {\n\t\t\tconst lineCount = file.highlightedContent.split(\"\\n\").length;\n\t\t\treturn Math.max(max, lineCount);\n\t\t}, 0);\n\n\t\t// Estimate height: ~1.5rem per line (adjust based on your font size)\n\t\treturn `${maxLineCount * 1.5}rem`;\n\t});\n\n\tconst viewportHeight = $derived(\n\t\tisMobile.current ? \"75dvh\" : \"calc(100svh - (var(--header-height) * 2))\"\n\t);\n\n\tconst height = $derived(`min(${longestFileHeight}, ${viewportHeight})`);\n</script>\n\n<figure data-rehype-pretty-code-figure data-llm-ignore id={item.name}>\n\t<div\n\t\tclass=\"group/block-view-wrapper flex w-full min-w-0 flex-col-reverse items-stretch gap-4 overflow-hidden\"\n\t\tstyle=\"--height: {height};\"\n\t>\n\t\t<ComponentCodeViewerCode />\n\t</div>\n</figure>\n"
  },
  {
    "path": "docs/src/lib/components/components-list.svelte",
    "content": "<script lang=\"ts\">\n\timport { components } from \"$content/index.js\";\n\timport { NEW_COMPONENTS } from \"$lib/navigation.js\";\n\n\tconst list = components.filter((c) => {\n\t\tif (c.title === \"Components\") return false;\n\t\treturn true;\n\t});\n</script>\n\n<div\n\tclass=\"grid grid-cols-1 gap-4 sm:grid-cols-2 md:grid-cols-3 md:gap-x-8 lg:gap-x-16 lg:gap-y-6 xl:gap-x-20\"\n>\n\t{#each list as component (component.title)}\n\t\t<a\n\t\t\thref=\"/docs{component.slugFull}\"\n\t\t\tclass=\"flex items-center gap-2 text-lg font-medium underline-offset-4 hover:underline md:text-base\"\n\t\t>\n\t\t\t{component.title}\n\t\t\t{#if NEW_COMPONENTS.has(component.slug)}\n\t\t\t\t<span class=\"bg-svelte-orange flex size-2 rounded-full\" title=\"New\"></span>\n\t\t\t{/if}\n\t\t</a>\n\t{/each}\n</div>\n"
  },
  {
    "path": "docs/src/lib/components/copy-button.svelte",
    "content": "<script lang=\"ts\">\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Tooltip from \"$lib/registry/ui/tooltip/index.js\";\n\timport { UseClipboard } from \"$lib/hooks/use-clipboard.svelte.js\";\n\timport { cn } from \"$lib/utils.js\";\n\timport CopyIcon from \"@tabler/icons-svelte/icons/copy\";\n\timport CheckIcon from \"@lucide/svelte/icons/check\";\n\timport type { ComponentProps } from \"svelte\";\n\n\tlet {\n\t\ttext,\n\t\tvariant = \"ghost\",\n\t\tclass: className,\n\t\t...restProps\n\t}: ComponentProps<typeof Button> & {\n\t\ttext: string;\n\t} = $props();\n\n\tconst clipboard = new UseClipboard();\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tconst rp = $derived(restProps as any);\n</script>\n\n<Tooltip.Root disableCloseOnTriggerClick>\n\t<!-- eslint-disable-next-line @typescript-eslint/no-explicit-any -->\n\t<Tooltip.Trigger\n\t\t{...rp}\n\t\tclass={cn(\n\t\t\t\"bg-code absolute end-2 top-3 z-10 size-7 hover:opacity-100 focus-visible:opacity-100\",\n\t\t\tclassName\n\t\t)}\n\t\tonclick={() => clipboard.copy(text)}\n\t>\n\t\t{#snippet child({ props })}\n\t\t\t<Button {...props} data-slot=\"copy-button\" size=\"icon\" {variant}>\n\t\t\t\t<span class=\"sr-only\" data-llm-ignore>Copy</span>\n\t\t\t\t{#if clipboard.copied}\n\t\t\t\t\t<CheckIcon />\n\t\t\t\t{:else}\n\t\t\t\t\t<CopyIcon />\n\t\t\t\t{/if}\n\t\t\t</Button>\n\t\t{/snippet}\n\t</Tooltip.Trigger>\n\t<Tooltip.Content>\n\t\t{clipboard.copied ? \"Copied\" : \"Copy to Clipboard\"}\n\t</Tooltip.Content>\n</Tooltip.Root>\n"
  },
  {
    "path": "docs/src/lib/components/cta-mobile.svelte",
    "content": "<a\n\thref=\"https://github.com/EpicenterHQ/epicenter\"\n\tclass=\"bg-muted/60 dark:bg-background border-foreground/5 hover:border-foreground/10 group relative flex w-full items-center gap-3 overflow-hidden rounded-xl border px-4 py-3 transition-all select-none xl:hidden\"\n>\n\t<div\n\t\tclass=\"absolute -top-8 -right-8 h-24 w-24 rounded-full bg-[#FFD4B2] opacity-10 blur-2xl transition-opacity group-hover:opacity-20\"\n\t></div>\n\t<div\n\t\tclass=\"absolute -bottom-8 -left-8 h-24 w-24 rounded-full bg-[#CBA6F7] opacity-10 blur-2xl transition-opacity group-hover:opacity-20\"\n\t></div>\n\n\t<div\n\t\tclass=\"relative z-10 size-8 shrink-0 opacity-80 transition-opacity group-hover:opacity-100\"\n\t>\n\t\t<svg viewBox=\"0 0 400 400\" xmlns=\"http://www.w3.org/2000/svg\">\n\t\t\t<circle cx=\"170\" cy=\"170\" r=\"100\" fill=\"#cccccc\" opacity=\"1\" />\n\t\t\t<circle cx=\"230\" cy=\"230\" r=\"100\" fill=\"#ffffff\" opacity=\"1\" />\n\t\t</svg>\n\t</div>\n\n\t<div class=\"relative z-10 min-w-0 flex-1\">\n\t\t<h3 class=\"text-foreground text-sm font-semibold tracking-tight\">Epicenter</h3>\n\t\t<p class=\"text-foreground/70 truncate text-xs\">Open source, local first apps</p>\n\t</div>\n\n\t<span\n\t\tclass=\"text-muted-foreground relative z-10 shrink-0 text-[10px] font-medium tracking-wide uppercase\"\n\t\t>Special Sponsor</span\n\t>\n</a>\n"
  },
  {
    "path": "docs/src/lib/components/cta.svelte",
    "content": "<a\n\thref=\"https://github.com/EpicenterHQ/epicenter\"\n\tclass=\"bg-muted/40 dark:bg-background border-foreground/5 hover:border-foreground/10 group relative block h-[150px] w-full overflow-hidden rounded-xl border transition-all select-none\"\n>\n\t<div\n\t\tclass=\"absolute -top-12 -right-12 h-32 w-32 rounded-full bg-[#FFD4B2] opacity-10 blur-[50px] transition-opacity group-hover:opacity-20\"\n\t></div>\n\t<div\n\t\tclass=\"absolute -bottom-12 -left-12 h-32 w-32 rounded-full bg-[#CBA6F7] opacity-10 blur-[50px] transition-opacity group-hover:opacity-20\"\n\t></div>\n\n\t<div class=\"relative z-10 flex h-full flex-col justify-between p-3.5\">\n\t\t<div class=\"flex items-center justify-between\">\n\t\t\t<span class=\"text-muted-foreground text-[10px] font-medium tracking-wide uppercase\"\n\t\t\t\t>Special Sponsor</span\n\t\t\t>\n\t\t\t<div class=\"size-10 opacity-80 transition-opacity group-hover:opacity-100\">\n\t\t\t\t<svg viewBox=\"0 0 400 400\" xmlns=\"http://www.w3.org/2000/svg\">\n\t\t\t\t\t<circle cx=\"170\" cy=\"170\" r=\"100\" fill=\"#cccccc\" opacity=\"1\" />\n\t\t\t\t\t<circle cx=\"230\" cy=\"230\" r=\"100\" fill=\"#ffffff\" opacity=\"1\" />\n\t\t\t\t</svg>\n\t\t\t</div>\n\t\t</div>\n\t\t<div>\n\t\t\t<h3 class=\"text-foreground text-lg font-semibold tracking-tight\">Epicenter</h3>\n\t\t\t<p class=\"text-foreground/85 text-xs leading-relaxed\">Open source, local first apps</p>\n\t\t</div>\n\t</div>\n</a>\n"
  },
  {
    "path": "docs/src/lib/components/customizer.svelte",
    "content": "<script lang=\"ts\">\n\timport { buttonVariants } from \"$lib/registry/ui/button/button.svelte\";\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\timport * as Tooltip from \"$lib/registry/ui/tooltip/index.js\";\n\timport IconPlaceholder from \"./icon-placeholder/icon-placeholder.svelte\";\n\timport StylePicker from \"../../routes/(app)/(layout)/(create)/components/style-picker.svelte\";\n\timport BaseColorPicker from \"../../routes/(app)/(layout)/(create)/components/base-color-picker.svelte\";\n\timport ThemePicker from \"../../routes/(app)/(layout)/(create)/components/theme-picker.svelte\";\n\timport IconLibraryPicker from \"../../routes/(app)/(layout)/(create)/components/icon-library-picker.svelte\";\n\timport FontPicker from \"../../routes/(app)/(layout)/(create)/components/font-picker.svelte\";\n\timport RadiusPicker from \"../../routes/(app)/(layout)/(create)/components/radius-picker.svelte\";\n\timport MenuColorPicker from \"../../routes/(app)/(layout)/(create)/components/menu-color-picker.svelte\";\n\timport MenuAccentPicker from \"../../routes/(app)/(layout)/(create)/components/menu-accent-picker.svelte\";\n\timport CustomizerControls from \"../../routes/(app)/(layout)/(create)/components/customizer-controls.svelte\";\n\timport { cn } from \"$lib/utils.js\";\n\timport ModeSwitcher from \"./mode-switcher.svelte\";\n\timport { setMode, mode } from \"mode-watcher\";\n\timport * as Kbd from \"$lib/registry/ui/kbd/index.js\";\n\timport UndoIcon from \"@lucide/svelte/icons/undo\";\n\timport RedoIcon from \"@lucide/svelte/icons/redo\";\n\timport { useDesignSystem } from \"$lib/features/design-system/index.js\";\n\timport { useIsMac } from \"$lib/hooks/use-is-mac.svelte.js\";\n\n\tconst isMac = useIsMac();\n\tconst designSystem = useDesignSystem();\n</script>\n\n<Tooltip.Provider>\n\t<DropdownMenu.Root>\n\t\t<DropdownMenu.Trigger\n\t\t\tclass={cn(\n\t\t\t\tbuttonVariants({ variant: \"ghost\", size: \"icon-sm\" }),\n\t\t\t\t\"extend-touch-target hidden md:flex\"\n\t\t\t)}\n\t\t>\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"SlidersHorizontalIcon\"\n\t\t\t\tphosphor=\"SlidersHorizontalIcon\"\n\t\t\t\thugeicons=\"SlidersHorizontalIcon\"\n\t\t\t\ttabler=\"IconAdjustmentsHorizontal\"\n\t\t\t\tremixicon=\"RiSettingsLine\"\n\t\t\t/>\n\t\t</DropdownMenu.Trigger>\n\t\t<DropdownMenu.Content align=\"end\" class=\"dark min-w-64 p-0\" preventScroll={false}>\n\t\t\t<DropdownMenu.Group>\n\t\t\t\t<StylePicker submenu />\n\t\t\t\t<BaseColorPicker submenu />\n\t\t\t\t<ThemePicker submenu />\n\t\t\t\t<IconLibraryPicker submenu />\n\t\t\t\t<FontPicker submenu />\n\t\t\t\t<RadiusPicker submenu />\n\t\t\t\t<MenuColorPicker submenu />\n\t\t\t\t<MenuAccentPicker submenu />\n\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t<CustomizerControls submenu />\n\t\t\t</DropdownMenu.Group>\n\t\t\t<DropdownMenu.Separator />\n\t\t\t<DropdownMenu.Group>\n\t\t\t\t<DropdownMenu.Item\n\t\t\t\t\tcloseOnSelect={false}\n\t\t\t\t\tonclick={() => {\n\t\t\t\t\t\tsetMode(mode.current === \"dark\" ? \"light\" : \"dark\");\n\t\t\t\t\t}}\n\t\t\t\t\tclass=\"border-foreground/10 bg-muted/50 h-[calc(--spacing(13.5))] w-[140px] touch-manipulation justify-between rounded-xl border select-none focus-visible:border-transparent focus-visible:ring-1 sm:rounded-lg md:w-full md:rounded-lg md:border-transparent md:bg-transparent md:pr-3.5! md:pl-2!\"\n\t\t\t\t>\n\t\t\t\t\t<div class=\"flex flex-col justify-start text-left\">\n\t\t\t\t\t\t<div class=\"text-muted-foreground text-xs\">Mode</div>\n\t\t\t\t\t\t<div class=\"text-foreground text-sm font-medium\">\n\t\t\t\t\t\t\tSwitch to {mode.current === \"dark\" ? \"Light\" : \"Dark\"} Mode\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"md:hidden [&_svg]:size-5\">\n\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\t\t\t\t\twidth=\"24\"\n\t\t\t\t\t\t\theight=\"24\"\n\t\t\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\tstroke-width=\"2\"\n\t\t\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t\t\t\tclass=\"size-4.5\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\" />\n\t\t\t\t\t\t\t<path d=\"M12 12m-9 0a9 9 0 1 0 18 0a9 9 0 1 0 -18 0\" />\n\t\t\t\t\t\t\t<path d=\"M12 3l0 18\" />\n\t\t\t\t\t\t\t<path d=\"M12 9l4.65 -4.65\" />\n\t\t\t\t\t\t\t<path d=\"M12 14.3l7.37 -7.37\" />\n\t\t\t\t\t\t\t<path d=\"M12 19.6l8.85 -8.85\" />\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t<span class=\"sr-only\">Toggle theme</span>\n\t\t\t\t\t</div>\n\t\t\t\t\t<Kbd.Root class=\"bg-foreground/10 text-foreground hidden md:flex\">D</Kbd.Root>\n\t\t\t\t</DropdownMenu.Item>\n\t\t\t</DropdownMenu.Group>\n\t\t\t<DropdownMenu.Separator />\n\t\t\t<DropdownMenu.Group>\n\t\t\t\t<DropdownMenu.Item\n\t\t\t\t\tcloseOnSelect={false}\n\t\t\t\t\tonclick={() => designSystem.undo()}\n\t\t\t\t\tdisabled={!designSystem.canUndo}\n\t\t\t\t\tclass=\"justify-between\"\n\t\t\t\t>\n\t\t\t\t\t<div class=\"flex items-center gap-2\">\n\t\t\t\t\t\t<UndoIcon class=\"size-4\" />\n\t\t\t\t\t\t<span>Undo</span>\n\t\t\t\t\t</div>\n\t\t\t\t\t<Kbd.Group class=\"hidden md:flex\">\n\t\t\t\t\t\t<Kbd.Root class=\"bg-foreground/10 text-foreground\"\n\t\t\t\t\t\t\t>{isMac.cmdOrCtrl}</Kbd.Root\n\t\t\t\t\t\t>\n\t\t\t\t\t\t<Kbd.Root class=\"bg-foreground/10 text-foreground\">z</Kbd.Root>\n\t\t\t\t\t</Kbd.Group>\n\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t<DropdownMenu.Item\n\t\t\t\t\tcloseOnSelect={false}\n\t\t\t\t\tonclick={() => designSystem.redo()}\n\t\t\t\t\tdisabled={!designSystem.canRedo}\n\t\t\t\t\tclass=\"justify-between\"\n\t\t\t\t>\n\t\t\t\t\t<div class=\"flex items-center gap-2\">\n\t\t\t\t\t\t<RedoIcon class=\"size-4\" />\n\t\t\t\t\t\t<span>Redo</span>\n\t\t\t\t\t</div>\n\t\t\t\t\t<Kbd.Group class=\"hidden md:flex\">\n\t\t\t\t\t\t<Kbd.Root class=\"bg-foreground/10 text-foreground\">⇧</Kbd.Root>\n\t\t\t\t\t\t<Kbd.Root class=\"bg-foreground/10 text-foreground\"\n\t\t\t\t\t\t\t>{isMac.cmdOrCtrl}</Kbd.Root\n\t\t\t\t\t\t>\n\t\t\t\t\t\t<Kbd.Root class=\"bg-foreground/10 text-foreground\">Z</Kbd.Root>\n\t\t\t\t\t</Kbd.Group>\n\t\t\t\t</DropdownMenu.Item>\n\t\t\t</DropdownMenu.Group>\n\t\t</DropdownMenu.Content>\n\t</DropdownMenu.Root>\n</Tooltip.Provider>\n<ModeSwitcher class=\"md:hidden\" />\n"
  },
  {
    "path": "docs/src/lib/components/doc-tabs/doc-tabs-content.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Tabs from \"$lib/registry/ui/tabs/index.js\";\n\timport { cn } from \"$lib/utils.js\";\n\timport type { ComponentProps } from \"svelte\";\n\n\tlet { class: className, ...restProps }: ComponentProps<typeof Tabs.Content> = $props();\n</script>\n\n<Tabs.Content\n\tclass={cn(\n\t\t\"relative [&_h3.font-heading]:text-base [&_h3.font-heading]:font-medium *:[figure]:first:mt-0 [&>.steps]:mt-6\",\n\t\tclassName\n\t)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/components/doc-tabs/doc-tabs-list.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Tabs from \"$lib/registry/ui/tabs/index.js\";\n\timport { cn } from \"$lib/utils.js\";\n\timport type { ComponentProps } from \"svelte\";\n\n\tlet { class: className, ...restProps }: ComponentProps<typeof Tabs.List> = $props();\n</script>\n\n<Tabs.List\n\tclass={cn(\"justify-start gap-4 rounded-none bg-transparent px-2 md:px-0\", className)}\n\tdata-llm-ignore\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/components/doc-tabs/doc-tabs-trigger.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Tabs from \"$lib/registry/ui/tabs/index.js\";\n\timport { cn } from \"$lib/utils.js\";\n\timport type { ComponentProps } from \"svelte\";\n\n\tlet { class: className, ...restProps }: ComponentProps<typeof Tabs.Trigger> = $props();\n</script>\n\n<Tabs.Trigger\n\tclass={cn(\n\t\t\"text-muted-foreground data-[state=active]:text-foreground data-[state=active]:border-primary dark:data-[state=active]:border-primary hover:text-primary rounded-none border-0 border-b-2 border-transparent bg-transparent px-0 pb-3 text-base data-[state=active]:bg-transparent data-[state=active]:shadow-none dark:data-[state=active]:bg-transparent\",\n\n\t\tclassName\n\t)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/components/doc-tabs/doc-tabs.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Tabs from \"$lib/registry/ui/tabs/index.js\";\n\timport { cn } from \"$lib/utils.js\";\n\timport type { ComponentProps } from \"svelte\";\n\n\tlet { class: className, ...restProps }: ComponentProps<typeof Tabs.Root> = $props();\n</script>\n\n<Tabs.Root class={cn(\"relative mt-6 w-full\", className)} {...restProps} />\n"
  },
  {
    "path": "docs/src/lib/components/doc-tabs/index.ts",
    "content": "export { default as Root } from \"./doc-tabs.svelte\";\nexport { default as Trigger } from \"./doc-tabs-trigger.svelte\";\nexport { default as Content } from \"./doc-tabs-content.svelte\";\nexport { default as List } from \"./doc-tabs-list.svelte\";\n"
  },
  {
    "path": "docs/src/lib/components/docs-copy-page.svelte",
    "content": "<script lang=\"ts\">\n\timport CheckIcon from \"@tabler/icons-svelte/icons/check\";\n\timport ChevronDownIcon from \"@tabler/icons-svelte/icons/chevron-down\";\n\timport CopyIcon from \"@tabler/icons-svelte/icons/copy\";\n\timport { Button, buttonVariants } from \"$lib/registry/ui/button/index.js\";\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\timport * as Popover from \"$lib/registry/ui/popover/index.js\";\n\timport { Separator } from \"$lib/registry/ui/separator/index.js\";\n\timport { UseClipboard } from \"$lib/hooks/use-clipboard.svelte.js\";\n\timport { cn } from \"$lib/utils.js\";\n\timport { page } from \"$app/state\";\n\n\tconst pageUrl = $derived(page.url.origin + page.url.pathname);\n\n\tfunction getPromptUrl(baseURL: string) {\n\t\treturn `${baseURL}?q=${encodeURIComponent(\n\t\t\t`I’m looking at this shadcn-svelte documentation: ${pageUrl}.\nHelp me understand how to use it. Be ready to explain concepts, give examples, or help debug based on it.\n  `\n\t\t)}`;\n\t}\n\n\tconst menuItems = {\n\t\tmarkdown: Markdown,\n\t\tv0: v0,\n\t\tchatgpt: ChatGPT,\n\t\tclaude: Claude,\n\t};\n\n\tconst clipboard = new UseClipboard();\n\n\tlet customAnchor = $state<HTMLElement | null>(null);\n\n\ttype PropsType = Record<string, unknown>;\n\n\tasync function copyPage() {\n\t\tconst res = await fetch(`${pageUrl}.md`);\n\t\tconst text = await res.text();\n\t\tawait clipboard.copy(text);\n\t}\n</script>\n\n{#snippet Trigger({ props }: { props: PropsType })}\n\t<Button\n\t\t{...props}\n\t\tvariant=\"secondary\"\n\t\tsize=\"sm\"\n\t\tclass={cn(\n\t\t\t\"peer -ms-0.5 size-8 shadow-none md:size-7 md:text-[0.8rem]\",\n\t\t\tprops.class as string\n\t\t)}\n\t>\n\t\t<ChevronDownIcon class=\"rotate-180 sm:rotate-0\" />\n\t</Button>\n{/snippet}\n\n{#snippet Markdown({ props }: { props: PropsType })}\n\t<a {...props} href={`${pageUrl}.md`} target=\"_blank\" rel=\"noopener noreferrer\">\n\t\t<svg stroke-linejoin=\"round\" viewBox=\"0 0 22 16\">\n\t\t\t<path\n\t\t\t\tfill-rule=\"evenodd\"\n\t\t\t\tclip-rule=\"evenodd\"\n\t\t\t\td=\"M19.5 2.25H2.5C1.80964 2.25 1.25 2.80964 1.25 3.5V12.5C1.25 13.1904 1.80964 13.75 2.5 13.75H19.5C20.1904 13.75 20.75 13.1904 20.75 12.5V3.5C20.75 2.80964 20.1904 2.25 19.5 2.25ZM2.5 1C1.11929 1 0 2.11929 0 3.5V12.5C0 13.8807 1.11929 15 2.5 15H19.5C20.8807 15 22 13.8807 22 12.5V3.5C22 2.11929 20.8807 1 19.5 1H2.5ZM3 4.5H4H4.25H4.6899L4.98715 4.82428L7 7.02011L9.01285 4.82428L9.3101 4.5H9.75H10H11V5.5V11.5H9V7.79807L7.73715 9.17572L7 9.97989L6.26285 9.17572L5 7.79807V11.5H3V5.5V4.5ZM15 8V4.5H17V8H19.5L17 10.5L16 11.5L15 10.5L12.5 8H15Z\"\n\t\t\t\tfill=\"currentColor\"\n\t\t\t/>\n\t\t</svg>\n\t\tView as Markdown\n\t</a>\n{/snippet}\n\n{#snippet v0({ props }: { props: PropsType })}\n\t<a {...props} href={getPromptUrl(\"https://v0.dev\")} target=\"_blank\" rel=\"noopener noreferrer\">\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 147 70\" fill=\"currentColor\">\n\t\t\t<path\n\t\t\t\td=\"M56 50.203V14h14v46.156C70 65.593 65.593 70 60.156 70c-2.596 0-5.158-1-7-2.843L0 14h19.797L56 50.203ZM147 56h-14V23.953L100.953 56H133v14H96.687C85.814 70 77 61.186 77 50.312V14h14v32.156L123.156 14H91V0h36.312C138.186 0 147 8.814 147 19.688V56Z\"\n\t\t\t\tfill=\"currentColor\"\n\t\t\t/>\n\t\t</svg>\n\t\tOpen in v0\n\t</a>\n{/snippet}\n\n{#snippet ChatGPT({ props }: { props: PropsType })}\n\t<a\n\t\t{...props}\n\t\thref={getPromptUrl(\"https://chatgpt.com\")}\n\t\ttarget=\"_blank\"\n\t\trel=\"noopener noreferrer\"\n\t>\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n\t\t\t<path\n\t\t\t\td=\"M22.282 9.821a5.985 5.985 0 0 0-.516-4.91 6.046 6.046 0 0 0-6.51-2.9A6.065 6.065 0 0 0 4.981 4.18a5.985 5.985 0 0 0-3.998 2.9 6.046 6.046 0 0 0 .743 7.097 5.98 5.98 0 0 0 .51 4.911 6.051 6.051 0 0 0 6.515 2.9A5.985 5.985 0 0 0 13.26 24a6.056 6.056 0 0 0 5.772-4.206 5.99 5.99 0 0 0 3.997-2.9 6.056 6.056 0 0 0-.747-7.073zM13.26 22.43a4.476 4.476 0 0 1-2.876-1.04l.141-.081 4.779-2.758a.795.795 0 0 0 .392-.681v-6.737l2.02 1.168a.071.071 0 0 1 .038.052v5.583a4.504 4.504 0 0 1-4.494 4.494zM3.6 18.304a4.47 4.47 0 0 1-.535-3.014l.142.085 4.783 2.759a.771.771 0 0 0 .78 0l5.843-3.369v2.332a.08.08 0 0 1-.033.062L9.74 19.95a4.5 4.5 0 0 1-6.14-1.646zM2.34 7.896a4.485 4.485 0 0 1 2.366-1.973V11.6a.766.766 0 0 0 .388.676l5.815 3.355-2.02 1.168a.076.076 0 0 1-.071 0l-4.83-2.786A4.504 4.504 0 0 1 2.34 7.872zm16.597 3.855-5.833-3.387L15.119 7.2a.076.076 0 0 1 .071 0l4.83 2.791a4.494 4.494 0 0 1-.676 8.105v-5.678a.79.79 0 0 0-.407-.667zm2.01-3.023-.141-.085-4.774-2.782a.776.776 0 0 0-.785 0L9.409 9.23V6.897a.066.066 0 0 1 .028-.061l4.83-2.787a4.5 4.5 0 0 1 6.68 4.66zm-12.64 4.135-2.02-1.164a.08.08 0 0 1-.038-.057V6.075a4.5 4.5 0 0 1 7.375-3.453l-.142.08-4.778 2.758a.795.795 0 0 0-.393.681zm1.097-2.365 2.602-1.5 2.607 1.5v2.999l-2.597 1.5-2.607-1.5Z\"\n\t\t\t\tfill=\"currentColor\"\n\t\t\t/>\n\t\t</svg>\n\t\tOpen in ChatGPT\n\t</a>\n{/snippet}\n\n{#snippet Claude({ props }: { props: PropsType })}\n\t<a\n\t\t{...props}\n\t\thref={getPromptUrl(\"https://claude.ai/new\")}\n\t\ttarget=\"_blank\"\n\t\trel=\"noopener noreferrer\"\n\t>\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n\t\t\t<path\n\t\t\t\td=\"m4.714 15.956 4.718-2.648.079-.23-.08-.128h-.23l-.79-.048-2.695-.073-2.337-.097-2.265-.122-.57-.121-.535-.704.055-.353.48-.321.685.06 1.518.104 2.277.157 1.651.098 2.447.255h.389l.054-.158-.133-.097-.103-.098-2.356-1.596-2.55-1.688-1.336-.972-.722-.491L2 6.223l-.158-1.008.655-.722.88.06.225.061.893.686 1.906 1.476 2.49 1.833.364.304.146-.104.018-.072-.164-.274-1.354-2.446-1.445-2.49-.644-1.032-.17-.619a2.972 2.972 0 0 1-.103-.729L6.287.133 6.7 0l.995.134.42.364.619 1.415L9.735 4.14l1.555 3.03.455.898.243.832.09.255h.159V9.01l.127-1.706.237-2.095.23-2.695.08-.76.376-.91.747-.492.583.28.48.685-.067.444-.286 1.851-.558 2.903-.365 1.942h.213l.243-.242.983-1.306 1.652-2.064.728-.82.85-.904.547-.431h1.032l.759 1.129-.34 1.166-1.063 1.347-.88 1.142-1.263 1.7-.79 1.36.074.11.188-.02 2.853-.606 1.542-.28 1.84-.315.832.388.09.395-.327.807-1.967.486-2.307.462-3.436.813-.043.03.049.061 1.548.146.662.036h1.62l3.018.225.79.522.473.638-.08.485-1.213.62-1.64-.389-3.825-.91-1.31-.329h-.183v.11l1.093 1.068 2.003 1.81 2.508 2.33.127.578-.321.455-.34-.049-2.204-1.657-.85-.747-1.925-1.62h-.127v.17l.443.649 2.343 3.521.122 1.08-.17.353-.607.213-.668-.122-1.372-1.924-1.415-2.168-1.141-1.943-.14.08-.674 7.254-.316.37-.728.28-.607-.461-.322-.747.322-1.476.388-1.924.316-1.53.285-1.9.17-.632-.012-.042-.14.018-1.432 1.967-2.18 2.945-1.724 1.845-.413.164-.716-.37.066-.662.401-.589 2.386-3.036 1.439-1.882.929-1.086-.006-.158h-.055L4.138 18.56l-1.13.146-.485-.456.06-.746.231-.243 1.907-1.312Z\"\n\t\t\t\tfill=\"currentColor\"\n\t\t\t/>\n\t\t</svg>\n\t\tOpen in Claude\n\t</a>\n{/snippet}\n\n<Popover.Root>\n\t<div\n\t\tclass=\"bg-secondary group/buttons relative flex rounded-lg *:data-[slot=button]:focus-visible:relative *:data-[slot=button]:focus-visible:z-10\"\n\t\tdata-llm-ignore\n\t>\n\t\t<div bind:this={customAnchor}></div>\n\t\t<Button\n\t\t\tvariant=\"secondary\"\n\t\t\tsize=\"sm\"\n\t\t\tclass=\"h-8 shadow-none select-none md:h-7 md:text-[0.8rem]\"\n\t\t\tonclick={copyPage}\n\t\t>\n\t\t\t{#if clipboard.copied}\n\t\t\t\t<CheckIcon />\n\t\t\t{:else}\n\t\t\t\t<CopyIcon />\n\t\t\t{/if}\n\t\t\tCopy Page\n\t\t</Button>\n\t\t<DropdownMenu.Root>\n\t\t\t<DropdownMenu.Trigger class=\"hidden sm:flex\">\n\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t{@render Trigger({ props })}\n\t\t\t\t{/snippet}\n\t\t\t</DropdownMenu.Trigger>\n\t\t\t<DropdownMenu.Content align=\"end\" class=\"shadow-none\">\n\t\t\t\t{#each Object.entries(menuItems) as [key, value] (key)}\n\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t{@render value({ props })}\n\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t{/each}\n\t\t\t</DropdownMenu.Content>\n\t\t</DropdownMenu.Root>\n\t\t<Separator\n\t\t\torientation=\"vertical\"\n\t\t\tclass=\"bg-foreground/10! absolute end-8 top-0 z-0 h-8! peer-focus-visible:opacity-0 sm:end-7 sm:h-7!\"\n\t\t/>\n\t\t<Popover.Trigger class=\"flex sm:hidden\">\n\t\t\t{#snippet child({ props })}\n\t\t\t\t{@render Trigger({ props })}\n\t\t\t{/snippet}\n\t\t</Popover.Trigger>\n\t\t<Popover.Content\n\t\t\tclass=\"bg-background/70 dark:bg-background/60 w-52 origin-center! rounded-lg p-1 shadow-sm backdrop-blur-sm\"\n\t\t\talign=\"start\"\n\t\t\t{customAnchor}\n\t\t>\n\t\t\t{#each Object.entries(menuItems) as [key, value] (key)}\n\t\t\t\t{@render value({\n\t\t\t\t\tprops: {\n\t\t\t\t\t\tclass: cn(\n\t\t\t\t\t\t\tbuttonVariants({\n\t\t\t\t\t\t\t\tvariant: \"ghost\",\n\t\t\t\t\t\t\t\tsize: \"lg\",\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\"*:[svg]:text-muted-foreground w-full justify-start text-base font-normal\"\n\t\t\t\t\t\t),\n\t\t\t\t\t},\n\t\t\t\t})}\n\t\t\t{/each}\n\t\t</Popover.Content>\n\t</div>\n</Popover.Root>\n"
  },
  {
    "path": "docs/src/lib/components/docs-figure.svelte",
    "content": "<script lang=\"ts\">\n\timport type { Snippet } from \"svelte\";\n\tlet { children, caption }: { children?: Snippet; caption?: string } = $props();\n</script>\n\n<figure class=\"mt-6 flex flex-col gap-4\">\n\t{@render children?.()}\n\t<figcaption class=\"text-center text-sm text-gray-500\">\n\t\t{caption}\n\t</figcaption>\n</figure>\n"
  },
  {
    "path": "docs/src/lib/components/docs-sidebar.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\timport { page } from \"$app/state\";\n\timport type { SidebarNavItem } from \"$lib/navigation.js\";\n\timport type { ComponentProps } from \"svelte\";\n\n\tlet {\n\t\tnavItems,\n\t\t...restProps\n\t}: { navItems: SidebarNavItem[] } & ComponentProps<typeof Sidebar.Root> = $props();\n\n\tconst pathname = $derived(page.url.pathname);\n</script>\n\n<Sidebar.Root\n\tclass=\"sticky top-[calc(var(--header-height)+1px)] z-30 hidden h-[calc(100svh-var(--footer-height)-4rem)] overscroll-none bg-transparent lg:flex\"\n\tcollapsible=\"none\"\n\t{...restProps}\n>\n\t<Sidebar.Content class=\"no-scrollbar overflow-x-hidden px-2\">\n\t\t<div\n\t\t\tclass=\"from-background via-background/80 to-background/50 sticky -top-1 z-10 h-8 shrink-0 bg-linear-to-b blur-xs\"\n\t\t></div>\n\t\t{#each navItems as item (item.title)}\n\t\t\t<Sidebar.Group>\n\t\t\t\t<Sidebar.GroupLabel class=\"text-muted-foreground font-medium\">\n\t\t\t\t\t{item.title}\n\t\t\t\t</Sidebar.GroupLabel>\n\t\t\t\t<Sidebar.GroupContent>\n\t\t\t\t\t{#if item.items.length}\n\t\t\t\t\t\t<Sidebar.Menu class=\"gap-1\">\n\t\t\t\t\t\t\t{#each item.items as subItem (subItem.href)}\n\t\t\t\t\t\t\t\t{#if subItem.items.length === 0}\n\t\t\t\t\t\t\t\t\t<Sidebar.MenuItem class=\"w-full\">\n\t\t\t\t\t\t\t\t\t\t<Sidebar.MenuButton\n\t\t\t\t\t\t\t\t\t\t\tisActive={subItem.href === pathname}\n\t\t\t\t\t\t\t\t\t\t\tclass=\"data-[active=true]:bg-accent data-[active=true]:border-accent 3xl:fixed:w-full 3xl:fixed:max-w-48 relative h-[30px] w-fit overflow-visible border border-transparent text-[0.8rem] font-medium after:absolute after:inset-x-0 after:-inset-y-1 after:z-0 after:rounded-md\"\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t\t\t\t\t<a href={subItem.href} {...props}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"absolute inset-0 flex w-(--sidebar-width) bg-transparent\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t></span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{subItem.title}\n\t\t\t\t\t\t\t\t\t\t\t\t\t{#if subItem.indicator === \"new\"}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"bg-svelte-orange flex size-2 rounded-full\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttitle=\"New\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t></span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t\t\t\t\t</Sidebar.MenuButton>\n\t\t\t\t\t\t\t\t\t</Sidebar.MenuItem>\n\t\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t</Sidebar.Menu>\n\t\t\t\t\t{/if}\n\t\t\t\t</Sidebar.GroupContent>\n\t\t\t</Sidebar.Group>\n\t\t{/each}\n\t\t<div\n\t\t\tclass=\"from-background via-background/80 to-background/50 sticky -bottom-1 z-10 h-16 shrink-0 bg-linear-to-t blur-xs\"\n\t\t></div>\n\t</Sidebar.Content>\n</Sidebar.Root>\n"
  },
  {
    "path": "docs/src/lib/components/docs-toc.svelte",
    "content": "<script lang=\"ts\" module>\n\tfunction useActiveItem(getItemIds: () => string[]) {\n\t\tlet activeId = $state<string | null>(null);\n\t\tconst itemIds = $derived(getItemIds().map((id) => id.replace(\"#\", \"\")));\n\n\t\t$effect(() => {\n\t\t\tconst observer = new IntersectionObserver((entries) => {\n\t\t\t\tfor (const entry of entries) {\n\t\t\t\t\tif (entry.isIntersecting) {\n\t\t\t\t\t\tactiveId = entry.target.id;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tfor (const id of itemIds ?? []) {\n\t\t\t\tconst element = document.getElementById(id);\n\t\t\t\tif (element) {\n\t\t\t\t\tobserver.observe(element);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn () => {\n\t\t\t\tfor (const id of itemIds ?? []) {\n\t\t\t\t\tconst element = document.getElementById(id);\n\t\t\t\t\tif (element) {\n\t\t\t\t\t\tobserver.unobserve(element);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t});\n\n\t\treturn {\n\t\t\tget current() {\n\t\t\t\treturn activeId;\n\t\t\t},\n\t\t};\n\t}\n\n\texport type TocItem = {\n\t\ttitle: string;\n\t\turl: string;\n\t\titems?: TocItem[];\n\t};\n\n\texport type TableOfContents = {\n\t\titems?: TocItem[];\n\t};\n\n\tfunction flattenToc(\n\t\titems: TocItem[],\n\t\tdepth = 0\n\t): Array<{ title: string; url: string; depth: number }> {\n\t\tconst result: Array<{ title: string; url: string; depth: number }> = [];\n\n\t\tfor (const item of items) {\n\t\t\tresult.push({\n\t\t\t\ttitle: item.title,\n\t\t\t\turl: item.url,\n\t\t\t\tdepth,\n\t\t\t});\n\n\t\t\tif (item.items && item.items.length > 0) {\n\t\t\t\tresult.push(...flattenToc(item.items, depth + 1));\n\t\t\t}\n\t\t}\n\n\t\treturn result;\n\t}\n</script>\n\n<script lang=\"ts\">\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport { cn } from \"$lib/utils.js\";\n\timport Menu3Icon from \"@tabler/icons-svelte/icons/menu-3\";\n\n\tlet {\n\t\ttoc,\n\t\tvariant = \"list\",\n\t\tclass: className,\n\t}: { toc: TableOfContents; variant?: \"dropdown\" | \"list\"; class?: string } = $props();\n\n\tconst flattenedToc = $derived(flattenToc(toc.items ?? []));\n\tconst itemIds = $derived(flattenedToc.map((item) => item.url));\n\tconst activeHeading = useActiveItem(() => itemIds);\n\tlet open = $state(false);\n</script>\n\n{#if flattenedToc.length}\n\t{#if variant === \"dropdown\"}\n\t\t<DropdownMenu.Root bind:open>\n\t\t\t<DropdownMenu.Trigger>\n\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t<Button\n\t\t\t\t\t\t{...props}\n\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\tclass={cn(\"h-8 md:h-7\", className)}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Menu3Icon /> On This Page\n\t\t\t\t\t</Button>\n\t\t\t\t{/snippet}\n\t\t\t</DropdownMenu.Trigger>\n\t\t\t<DropdownMenu.Content align=\"start\" class=\"no-scrollbar max-h-[70svh]\">\n\t\t\t\t{#each flattenedToc as item (item.url)}\n\t\t\t\t\t<DropdownMenu.Item\n\t\t\t\t\t\tonSelect={() => (open = false)}\n\t\t\t\t\t\tdata-depth={item.depth}\n\t\t\t\t\t\tclass=\"data-[depth=1]:ps-6 data-[depth=2]:ps-8\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t<a href={item.url} {...props}>{item.title}</a>\n\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t{/each}\n\t\t\t</DropdownMenu.Content>\n\t\t</DropdownMenu.Root>\n\t{:else}\n\t\t<div class={cn(\"flex flex-col gap-2 p-4 pt-0 text-sm\", className)}>\n\t\t\t<p class=\"text-muted-foreground bg-background sticky top-0 h-6 text-xs\">On This Page</p>\n\t\t\t{#each flattenedToc as item (item.url)}\n\t\t\t\t<a\n\t\t\t\t\thref={item.url}\n\t\t\t\t\tclass=\"text-muted-foreground hover:text-foreground data-[active=true]:text-foreground text-[0.8rem] no-underline transition-colors data-[depth=1]:ps-4 data-[depth=2]:ps-6\"\n\t\t\t\t\tdata-active={item.url === `#${activeHeading.current}`}\n\t\t\t\t\tdata-depth={item.depth}\n\t\t\t\t>\n\t\t\t\t\t{item.title}\n\t\t\t\t</a>\n\t\t\t{/each}\n\t\t</div>\n\t{/if}\n{/if}\n"
  },
  {
    "path": "docs/src/lib/components/ethical.svelte",
    "content": "<script lang=\"ts\">\n\timport { beforeNavigate } from \"$app/navigation\";\n\timport { dev, browser } from \"$app/environment\";\n\n\tbeforeNavigate((navigation) => {\n\t\tconst isDocIndex = navigation.from?.route.id === \"/(app)/(layout)/docs\";\n\t\tif (isDocIndex) return;\n\t\tconst goingToDocIndex = navigation.to?.route.id === \"/(app)/(layout)/docs\";\n\t\tif (goingToDocIndex) return;\n\t\trefreshEthicalAds();\n\t});\n\n\tfunction refreshEthicalAds() {\n\t\tif (dev) return;\n\t\tif (!browser || typeof window === \"undefined\") return;\n\t\tif (\"ethicalads\" in window) {\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\t(window.ethicalads as any)?.reload();\n\t\t}\n\t}\n</script>\n\n{#if !dev}\n\t<div class=\"pt-4\">\n\t\t<div data-ea-publisher=\"shadcn-sveltecom\" data-ea-type=\"image\"></div>\n\t</div>\n{/if}\n"
  },
  {
    "path": "docs/src/lib/components/examples-nav.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn } from \"$lib/utils.js\";\n\timport { page } from \"$app/state\";\n\timport ScrollArea from \"$lib/registry/ui/scroll-area/scroll-area.svelte\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tconst examples = [\n\t\t{\n\t\t\tname: \"Dashboard\",\n\t\t\thref: \"/examples/dashboard\",\n\t\t\tcode: \"https://github.com/shadcn/ui/tree/main/apps/v4/app/(app)/examples/dashboard\",\n\t\t\thidden: false,\n\t\t},\n\t\t{\n\t\t\tname: \"Tasks\",\n\t\t\thref: \"/examples/tasks\",\n\t\t\tcode: \"https://github.com/shadcn/ui/tree/main/apps/v4/app/(app)/examples/tasks\",\n\t\t\thidden: false,\n\t\t},\n\t\t{\n\t\t\tname: \"Playground\",\n\t\t\thref: \"/examples/playground\",\n\t\t\tcode: \"https://github.com/shadcn/ui/tree/main/apps/v4/app/(app)/examples/playground\",\n\t\t\thidden: false,\n\t\t},\n\t\t{\n\t\t\tname: \"Authentication\",\n\t\t\thref: \"/examples/authentication\",\n\t\t\tcode: \"https://github.com/shadcn/ui/tree/main/apps/v4/app/(app)/examples/authentication\",\n\t\t\thidden: false,\n\t\t},\n\t];\n\n\tlet { class: className, ...restProps }: HTMLAttributes<HTMLElement> = $props();\n</script>\n\n<div class={cn(\"flex items-center\", className)} {...restProps}>\n\t<ScrollArea class=\"max-w-[96%] md:max-w-[600px] lg:max-w-none\" orientation=\"both\">\n\t\t<div class=\"flex items-center\">\n\t\t\t{@render ExampleLink({\n\t\t\t\texample: { name: \"Examples\", href: \"/\", code: \"\", hidden: false },\n\t\t\t\tisActive: page.url.pathname === \"/\",\n\t\t\t})}\n\t\t\t{#each examples as example (example.href)}\n\t\t\t\t{@render ExampleLink({\n\t\t\t\t\texample,\n\t\t\t\t\tisActive: page.url.pathname?.startsWith(example.href) ?? false,\n\t\t\t\t})}\n\t\t\t{/each}\n\t\t</div>\n\t</ScrollArea>\n</div>\n\n{#snippet ExampleLink({\n\texample,\n\tisActive,\n}: {\n\texample: (typeof examples)[number];\n\tisActive: boolean;\n})}\n\t{#if !example.hidden}\n\t\t<a\n\t\t\thref={example.href}\n\t\t\tclass=\"text-muted-foreground hover:text-primary data-[active=true]:text-primary flex h-7 items-center justify-center px-4 text-center text-base font-medium transition-colors\"\n\t\t\tdata-active={isActive}\n\t\t>\n\t\t\t{example.name}\n\t\t</a>\n\t{/if}\n{/snippet}\n"
  },
  {
    "path": "docs/src/lib/components/github-link.svelte",
    "content": "<script lang=\"ts\">\n\timport { siteConfig } from \"$lib/config.js\";\n\timport Button from \"$lib/registry/ui/button/button.svelte\";\n\timport GithubIcon from \"./github.svelte\";\n\timport { FALLBACK_STAR_COUNT } from \"$lib/constants.js\";\n\timport { onMount } from \"svelte\";\n\n\tasync function getGithubStarCount() {\n\t\ttry {\n\t\t\tconst res = await fetch(\"https://ungh.cc/repos/huntabyte/shadcn-svelte\");\n\t\t\tconst data = await res.json();\n\t\t\treturn data.repo?.stars ?? FALLBACK_STAR_COUNT;\n\t\t} catch (error) {\n\t\t\tconsole.error(error);\n\t\t\treturn FALLBACK_STAR_COUNT;\n\t\t}\n\t}\n\n\tlet stars = $state(FALLBACK_STAR_COUNT);\n\n\tonMount(async () => {\n\t\tstars = await getGithubStarCount();\n\t});\n</script>\n\n<Button\n\thref={siteConfig.links.github}\n\ttarget=\"_blank\"\n\trel=\"noreferrer\"\n\tsize=\"sm\"\n\tvariant=\"ghost\"\n\tclass=\"h-8 shadow-none\"\n>\n\t<GithubIcon />\n\t<span class=\"text-muted-foreground w-8 text-xs tabular-nums\">\n\t\t{stars >= 1000 ? `${(stars / 1000).toFixed(1)}k` : stars.toLocaleString()}\n\t</span>\n</Button>\n"
  },
  {
    "path": "docs/src/lib/components/github.svelte",
    "content": "<script lang=\"ts\">\n\timport type { SVGAttributes } from \"svelte/elements\";\n\n\tlet { ...restProps }: SVGAttributes<SVGElement> = $props();\n</script>\n\n<svg viewBox=\"0 0 438.549 438.549\" {...restProps}>\n\t<path\n\t\tfill=\"currentColor\"\n\t\td=\"M409.132 114.573c-19.608-33.596-46.205-60.194-79.798-79.8-33.598-19.607-70.277-29.408-110.063-29.408-39.781 0-76.472 9.804-110.063 29.408-33.596 19.605-60.192 46.204-79.8 79.8C9.803 148.168 0 184.854 0 224.63c0 47.78 13.94 90.745 41.827 128.906 27.884 38.164 63.906 64.572 108.063 79.227 5.14.954 8.945.283 11.419-1.996 2.475-2.282 3.711-5.14 3.711-8.562 0-.571-.049-5.708-.144-15.417a2549.81 2549.81 0 01-.144-25.406l-6.567 1.136c-4.187.767-9.469 1.092-15.846 1-6.374-.089-12.991-.757-19.842-1.999-6.854-1.231-13.229-4.086-19.13-8.559-5.898-4.473-10.085-10.328-12.56-17.556l-2.855-6.57c-1.903-4.374-4.899-9.233-8.992-14.559-4.093-5.331-8.232-8.945-12.419-10.848l-1.999-1.431c-1.332-.951-2.568-2.098-3.711-3.429-1.142-1.331-1.997-2.663-2.568-3.997-.572-1.335-.098-2.43 1.427-3.289 1.525-.859 4.281-1.276 8.28-1.276l5.708.853c3.807.763 8.516 3.042 14.133 6.851 5.614 3.806 10.229 8.754 13.846 14.842 4.38 7.806 9.657 13.754 15.846 17.847 6.184 4.093 12.419 6.136 18.699 6.136 6.28 0 11.704-.476 16.274-1.423 4.565-.952 8.848-2.383 12.847-4.285 1.713-12.758 6.377-22.559 13.988-29.41-10.848-1.14-20.601-2.857-29.264-5.14-8.658-2.286-17.605-5.996-26.835-11.14-9.235-5.137-16.896-11.516-22.985-19.126-6.09-7.614-11.088-17.61-14.987-29.979-3.901-12.374-5.852-26.648-5.852-42.826 0-23.035 7.52-42.637 22.557-58.817-7.044-17.318-6.379-36.732 1.997-58.24 5.52-1.715 13.706-.428 24.554 3.853 10.85 4.283 18.794 7.952 23.84 10.994 5.046 3.041 9.089 5.618 12.135 7.708 17.705-4.947 35.976-7.421 54.818-7.421s37.117 2.474 54.823 7.421l10.849-6.849c7.419-4.57 16.18-8.758 26.262-12.565 10.088-3.805 17.802-4.853 23.134-3.138 8.562 21.509 9.325 40.922 2.279 58.24 15.036 16.18 22.559 35.787 22.559 58.817 0 16.178-1.958 30.497-5.853 42.966-3.9 12.471-8.941 22.457-15.125 29.979-6.191 7.521-13.901 13.85-23.131 18.986-9.232 5.14-18.182 8.85-26.84 11.136-8.662 2.286-18.415 4.004-29.263 5.146 9.894 8.562 14.842 22.077 14.842 40.539v60.237c0 3.422 1.19 6.279 3.572 8.562 2.379 2.279 6.136 2.95 11.276 1.995 44.163-14.653 80.185-41.062 108.068-79.226 27.88-38.161 41.825-81.126 41.825-128.906-.01-39.771-9.818-76.454-29.414-110.049z\"\n\t/>\n</svg>\n"
  },
  {
    "path": "docs/src/lib/components/icon-placeholder/hugeicons-icon.svelte",
    "content": "<script lang=\"ts\">\n\timport type { ComponentProps, Snippet } from \"svelte\";\n\timport { HugeiconsIcon } from \"@hugeicons/svelte\";\n\timport type { HugeIconsIconName } from \"$lib/registry/icons/__hugeicons__/index.js\";\n\timport { hugeiconsIconLoader } from \"./icon-loader.js\";\n\n\ttype Props = Omit<ComponentProps<typeof HugeiconsIcon>, \"icon\"> & {\n\t\ticon: HugeIconsIconName;\n\t\tplaceholder: Snippet;\n\t\t\"data-slot\"?: string;\n\t};\n\n\tlet { icon, placeholder, className, ...restProps }: Props = $props();\n\n\t// svelte-ignore state_referenced_locally\n\tconst IconPromise = hugeiconsIconLoader(icon);\n</script>\n\n{#await IconPromise}\n\t{@render placeholder?.()}\n{:then Icon}\n\t{#if Icon !== null}\n\t\t<HugeiconsIcon\n\t\t\ticon={Icon}\n\t\t\tstrokeWidth={2}\n\t\t\tdata-slot=\"hugeicons-icon\"\n\t\t\t{className}\n\t\t\t{...restProps}\n\t\t/>\n\t{:else}\n\t\t{@render placeholder?.()}\n\t{/if}\n{/await}\n"
  },
  {
    "path": "docs/src/lib/components/icon-placeholder/icon-loader.ts",
    "content": "import type { IconLibraryName } from \"shadcn-svelte/icons\";\nimport type { Component } from \"svelte\";\n\nexport const lucideIconLoader = createIconLoader(\"lucide\");\nexport const tablerIconLoader = createIconLoader(\"tabler\");\nexport const hugeiconsIconLoader = createIconLoader(\"hugeicons\");\nexport const phosphorIconLoader = createIconLoader(\"phosphor\");\nexport const remixiconIconLoader = createIconLoader(\"remixicon\");\n\nexport function createIconLoader(iconLibrary: IconLibraryName) {\n\tconst preloadedIcons = new Map<string, Component | null>();\n\n\treturn async (icon: string) => {\n\t\tconst preloadedIcon = preloadedIcons.get(icon);\n\t\tif (preloadedIcon !== undefined) return preloadedIcon;\n\n\t\tlet mod: Record<string, Component>;\n\t\ttry {\n\t\t\tmod = await import(`$lib/registry/icons/__${iconLibrary}__/${icon}.ts`);\n\t\t} catch {\n\t\t\tpreloadedIcons.set(icon, null);\n\t\t\treturn null;\n\t\t}\n\t\tconst Icon = mod[icon];\n\t\tpreloadedIcons.set(icon, Icon);\n\n\t\treturn Icon;\n\t};\n}\n"
  },
  {
    "path": "docs/src/lib/components/icon-placeholder/icon-placeholder.svelte",
    "content": "<script lang=\"ts\">\n\timport { useDesignSystem } from \"$lib/features/design-system/index.js\";\n\timport SquareIcon from \"@lucide/svelte/icons/square\";\n\timport LucideIcon from \"./lucide-icon.svelte\";\n\timport TablerIcon from \"./tabler-icon.svelte\";\n\timport PhosphorIcon from \"./phosphor-icon.svelte\";\n\timport HugeiconsIcon from \"./hugeicons-icon.svelte\";\n\timport RemixiconIcon from \"./remixicon-icon.svelte\";\n\timport type { HugeIconsIconName } from \"$lib/registry/icons/__hugeicons__/index.js\";\n\timport type { LucideIconName } from \"$lib/registry/icons/__lucide__/index.js\";\n\timport type { TablerIconName } from \"$lib/registry/icons/__tabler__/index.js\";\n\timport type { PhosphorIconName } from \"$lib/registry/icons/__phosphor__/index.js\";\n\timport type { RemixIconIconName } from \"$lib/registry/icons/__remixicon__/index.js\";\n\timport type { SVGAttributes } from \"svelte/elements\";\n\n\ttype SvgProps = SVGAttributes<SVGSVGElement>;\n\n\ttype Props = {\n\t\thugeicons: HugeIconsIconName;\n\t\tlucide: LucideIconName;\n\t\ttabler: TablerIconName;\n\t\tphosphor: PhosphorIconName;\n\t\tremixicon: RemixIconIconName;\n\t\tclass?: string;\n\t};\n\n\tlet {\n\t\thugeicons,\n\t\tlucide,\n\t\ttabler,\n\t\tphosphor,\n\t\tremixicon,\n\t\tclass: className,\n\t\t...restProps\n\t}: Props & Omit<SvgProps, \"class\"> = $props();\n\n\tconst designSystem = useDesignSystem();\n</script>\n\n{#snippet PlaceholderIcon()}\n\t<SquareIcon class={className} {...restProps as unknown as object} />\n{/snippet}\n\n{#if designSystem.iconLibrary === \"hugeicons\"}\n\t<HugeiconsIcon icon={hugeicons} {className} {...restProps as unknown as object}>\n\t\t{#snippet placeholder()}\n\t\t\t{@render PlaceholderIcon()}\n\t\t{/snippet}\n\t</HugeiconsIcon>\n{:else if designSystem.iconLibrary === \"lucide\"}\n\t<LucideIcon icon={lucide} class={className} {...restProps as unknown as object}>\n\t\t{#snippet placeholder()}\n\t\t\t{@render PlaceholderIcon()}\n\t\t{/snippet}\n\t</LucideIcon>\n{:else if designSystem.iconLibrary === \"tabler\"}\n\t<TablerIcon icon={tabler} class={className} {...restProps as unknown as object}>\n\t\t{#snippet placeholder()}\n\t\t\t{@render PlaceholderIcon()}\n\t\t{/snippet}\n\t</TablerIcon>\n{:else if designSystem.iconLibrary === \"phosphor\"}\n\t<PhosphorIcon icon={phosphor} class={className} {...restProps as unknown as object}>\n\t\t{#snippet placeholder()}\n\t\t\t{@render PlaceholderIcon()}\n\t\t{/snippet}\n\t</PhosphorIcon>\n{:else if designSystem.iconLibrary === \"remixicon\"}\n\t<RemixiconIcon icon={remixicon} class={className} {...restProps as unknown as object}>\n\t\t{#snippet placeholder()}\n\t\t\t{@render PlaceholderIcon()}\n\t\t{/snippet}\n\t</RemixiconIcon>\n{/if}\n"
  },
  {
    "path": "docs/src/lib/components/icon-placeholder/lucide-icon.svelte",
    "content": "<script lang=\"ts\">\n\timport type { Snippet } from \"svelte\";\n\timport type { SVGAttributes } from \"svelte/elements\";\n\timport type { LucideIconName } from \"$lib/registry/icons/__lucide__/index.js\";\n\timport { lucideIconLoader } from \"./icon-loader.js\";\n\n\ttype Props = SVGAttributes<SVGSVGElement> & {\n\t\ticon: LucideIconName;\n\t\tplaceholder: Snippet;\n\t};\n\n\tlet { icon, placeholder, class: className, ...restProps }: Props = $props();\n\n\t// svelte-ignore state_referenced_locally\n\tconst IconPromise = lucideIconLoader(icon);\n\n\tconst rp = $derived(restProps as Record<string, unknown>);\n</script>\n\n{#await IconPromise}\n\t{@render placeholder?.()}\n{:then Icon}\n\t{#if Icon !== null}\n\t\t<Icon class={className} {...rp} />\n\t{:else}\n\t\t{@render placeholder?.()}\n\t{/if}\n{/await}\n"
  },
  {
    "path": "docs/src/lib/components/icon-placeholder/phosphor-icon.svelte",
    "content": "<script lang=\"ts\">\n\timport type { Snippet } from \"svelte\";\n\timport type { SVGAttributes } from \"svelte/elements\";\n\timport type { PhosphorIconName } from \"$lib/registry/icons/__phosphor__/index.js\";\n\timport { phosphorIconLoader } from \"./icon-loader.js\";\n\n\ttype Props = SVGAttributes<SVGSVGElement> & {\n\t\ticon: PhosphorIconName;\n\t\tplaceholder: Snippet;\n\t};\n\n\tlet { icon, placeholder, class: className, ...restProps }: Props = $props();\n\n\t// svelte-ignore state_referenced_locally\n\tconst IconPromise = phosphorIconLoader(icon);\n\n\tconst rp = $derived(restProps as Record<string, unknown>);\n</script>\n\n{#await IconPromise}\n\t{@render placeholder?.()}\n{:then Icon}\n\t{#if Icon !== null}\n\t\t<Icon class={className} {...rp} />\n\t{:else}\n\t\t{@render placeholder?.()}\n\t{/if}\n{/await}\n"
  },
  {
    "path": "docs/src/lib/components/icon-placeholder/remixicon-icon.svelte",
    "content": "<script lang=\"ts\">\n\timport type { Snippet } from \"svelte\";\n\timport type { SVGAttributes } from \"svelte/elements\";\n\timport type { RemixIconIconName } from \"$lib/registry/icons/__remixicon__/index.js\";\n\timport { remixiconIconLoader } from \"./icon-loader.js\";\n\n\ttype Props = SVGAttributes<SVGSVGElement> & {\n\t\ticon: RemixIconIconName;\n\t\tplaceholder: Snippet;\n\t};\n\n\tlet { icon, placeholder, class: className, ...restProps }: Props = $props();\n\n\t// svelte-ignore state_referenced_locally\n\tconst IconPromise = remixiconIconLoader(icon);\n\n\tconst rp = $derived(restProps as Record<string, unknown>);\n</script>\n\n{#await IconPromise}\n\t{@render placeholder?.()}\n{:then Icon}\n\t{#if Icon !== null}\n\t\t<Icon class={className} {...rp} />\n\t{:else}\n\t\t{@render placeholder?.()}\n\t{/if}\n{/await}\n"
  },
  {
    "path": "docs/src/lib/components/icon-placeholder/tabler-icon.svelte",
    "content": "<script lang=\"ts\">\n\timport type { Snippet } from \"svelte\";\n\timport type { SVGAttributes } from \"svelte/elements\";\n\timport type { TablerIconName } from \"$lib/registry/icons/__tabler__/index.js\";\n\timport { cn } from \"$lib/utils.js\";\n\timport { tablerIconLoader } from \"./icon-loader.js\";\n\n\ttype Props = SVGAttributes<SVGSVGElement> & {\n\t\ticon: TablerIconName;\n\t\tplaceholder: Snippet;\n\t};\n\n\tlet { icon, placeholder, class: className, ...restProps }: Props = $props();\n\n\t// svelte-ignore state_referenced_locally\n\tconst IconPromise = tablerIconLoader(icon);\n\n\tconst rp = $derived(restProps as Record<string, unknown>);\n</script>\n\n{#await IconPromise}\n\t{@render placeholder?.()}\n{:then Icon}\n\t{#if Icon !== null}\n\t\t<Icon class={cn(className)} {...rp} />\n\t{:else}\n\t\t{@render placeholder?.()}\n\t{/if}\n{/await}\n"
  },
  {
    "path": "docs/src/lib/components/icons/bash.svelte",
    "content": "<script lang=\"ts\">\n\timport type { SVGAttributes } from \"svelte/elements\";\n\n\tlet { ...restProps }: SVGAttributes<SVGSVGElement> = $props();\n</script>\n\n<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" {...restProps}>\n\t<path\n\t\td=\"M21.038 4.9 13.461.402a2.86 2.86 0 0 0-2.923.001L2.961 4.9A3.023 3.023 0 0 0 1.5 7.503v8.995c0 1.073.557 2.066 1.462 2.603l7.577 4.497a2.86 2.86 0 0 0 2.922 0l7.577-4.497a3.023 3.023 0 0 0 1.462-2.603V7.503A3.021 3.021 0 0 0 21.038 4.9zM15.17 18.946l.013.646c.001.078-.05.167-.111.198l-.383.22c-.061.031-.111-.007-.112-.085l-.007-.635c-.328.136-.66.169-.872.084-.04-.016-.057-.075-.041-.142l.139-.584a.24.24 0 0 1 .069-.121.163.163 0 0 1 .036-.026c.022-.011.043-.014.062-.006.229.077.521.041.802-.101.357-.181.596-.545.592-.907-.003-.328-.181-.465-.613-.468-.55.001-1.064-.107-1.072-.917-.007-.667.34-1.361.889-1.8l-.007-.652c-.001-.08.048-.168.111-.2l.37-.236c.061-.031.111.007.112.087l.006.653c.273-.109.511-.138.726-.088.047.012.067.076.048.151l-.144.578a.255.255 0 0 1-.065.116.161.161 0 0 1-.038.028.083.083 0 0 1-.057.009c-.098-.022-.332-.073-.699.113-.385.195-.52.53-.517.778.003.297.155.387.681.396.7.012 1.003.318 1.01 1.023.007.689-.362 1.433-.928 1.888zm3.973-1.087c0 .06-.008.116-.058.145l-1.916 1.164c-.05.029-.09.004-.09-.056v-.494c0-.06.037-.093.087-.122l1.887-1.129c.05-.029.09-.004.09.056v.436zm1.316-11.062-7.168 4.427c-.894.523-1.553 1.109-1.553 2.187v8.833c0 .645.26 1.063.66 1.184a2.304 2.304 0 0 1-.398.039c-.42 0-.833-.114-1.197-.33L3.226 18.64a2.494 2.494 0 0 1-1.201-2.142V7.503c0-.881.46-1.702 1.201-2.142L10.803.863a2.342 2.342 0 0 1 2.394 0l7.577 4.498a2.479 2.479 0 0 1 1.164 1.732c-.252-.536-.818-.682-1.479-.296z\"\n\t/>\n</svg>\n"
  },
  {
    "path": "docs/src/lib/components/icons/css.svelte",
    "content": "<script lang=\"ts\">\n\timport type { SVGAttributes } from \"svelte/elements\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet { class: className, ...restProps }: SVGAttributes<SVGSVGElement> = $props();\n</script>\n\n<svg\n\txmlns=\"http://www.w3.org/2000/svg\"\n\tviewBox=\"0 0 24 24\"\n\tclass={cn(\"fill-foreground\", className)}\n\t{...restProps}\n>\n\t<path\n\t\td=\"M0 0v20.16A3.84 3.84 0 0 0 3.84 24h16.32A3.84 3.84 0 0 0 24 20.16V3.84A3.84 3.84 0 0 0 20.16 0Zm14.256 13.08c1.56 0 2.28 1.08 2.304 2.64h-1.608c.024-.288-.048-.6-.144-.84-.096-.192-.288-.264-.552-.264-.456 0-.696.264-.696.84-.024.576.288.888.768 1.08.72.288 1.608.744 1.92 1.296q.432.648.432 1.656c0 1.608-.912 2.592-2.496 2.592-1.656 0-2.4-1.032-2.424-2.688h1.68c0 .792.264 1.176.792 1.176.264 0 .456-.072.552-.24.192-.312.24-1.176-.048-1.512-.312-.408-.912-.6-1.32-.816q-.828-.396-1.224-.936c-.24-.36-.36-.888-.36-1.536 0-1.44.936-2.472 2.424-2.448m5.4 0c1.584 0 2.304 1.08 2.328 2.64h-1.608c0-.288-.048-.6-.168-.84-.096-.192-.264-.264-.528-.264-.48 0-.72.264-.72.84s.288.888.792 1.08c.696.288 1.608.744 1.92 1.296.264.432.408.984.408 1.656.024 1.608-.888 2.592-2.472 2.592-1.68 0-2.424-1.056-2.448-2.688h1.68c0 .744.264 1.176.792 1.176.264 0 .456-.072.552-.24.216-.312.264-1.176-.048-1.512-.288-.408-.888-.6-1.32-.816-.552-.264-.96-.576-1.2-.936s-.36-.888-.36-1.536c-.024-1.44.912-2.472 2.4-2.448m-11.031.018c.711-.006 1.419.198 1.839.63.432.432.672 1.128.648 1.992H9.336c.024-.456-.096-.792-.432-.96-.312-.144-.768-.048-.888.24-.12.264-.192.576-.168.864v3.504c0 .744.264 1.128.768 1.128a.65.65 0 0 0 .552-.264c.168-.24.192-.552.168-.84h1.776c.096 1.632-.984 2.712-2.568 2.688-1.536 0-2.496-.864-2.472-2.472v-4.032c0-.816.24-1.44.696-1.848.432-.408 1.146-.624 1.857-.63\"\n\t/>\n</svg>\n"
  },
  {
    "path": "docs/src/lib/components/icons/icons.ts",
    "content": "import Css from \"./css.svelte\";\nimport Json from \"./json.svelte\";\nimport Svelte from \"./svelte.svelte\";\nimport Ts from \"./ts.svelte\";\nimport FileIcon from \"@lucide/svelte/icons/file\";\n\nexport function getIconForLanguageExtension(language: string) {\n\tswitch (language) {\n\t\tcase \"svelte\":\n\t\t\treturn Svelte;\n\t\tcase \"json\":\n\t\t\treturn Json;\n\t\tcase \"css\":\n\t\t\treturn Css;\n\t\tcase \"ts\":\n\t\tcase \"js\":\n\t\tcase \"typescript\":\n\t\t\treturn Ts;\n\t\tdefault:\n\t\t\treturn FileIcon;\n\t}\n}\n"
  },
  {
    "path": "docs/src/lib/components/icons/json.svelte",
    "content": "<script lang=\"ts\">\n\timport type { SVGAttributes } from \"svelte/elements\";\n\n\tlet { ...restProps }: SVGAttributes<SVGSVGElement> = $props();\n</script>\n\n<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\" {...restProps}>\n\t<path\n\t\tfill=\"currentColor\"\n\t\td=\"M12.043 23.968c.479-.004.953-.029 1.426-.094a11.805 11.805 0 0 0 3.146-.863 12.404 12.404 0 0 0 3.793-2.542 11.977 11.977 0 0 0 2.44-3.427 11.794 11.794 0 0 0 1.02-3.476c.149-1.16.135-2.346-.045-3.499a11.96 11.96 0 0 0-.793-2.788 11.197 11.197 0 0 0-.854-1.617c-1.168-1.837-2.861-3.314-4.81-4.3a12.835 12.835 0 0 0-2.172-.87h-.005c.119.063.24.132.345.201.12.074.239.146.351.225a8.93 8.93 0 0 1 1.559 1.33c1.063 1.145 1.797 2.548 2.218 4.041.284.982.434 1.998.495 3.017.044.743.044 1.491-.047 2.229-.149 1.27-.554 2.51-1.228 3.596a7.475 7.475 0 0 1-1.903 2.084c-1.244.928-2.877 1.482-4.436 1.114a3.916 3.916 0 0 1-.748-.258 4.692 4.692 0 0 1-.779-.45 6.08 6.08 0 0 1-1.244-1.105 6.507 6.507 0 0 1-1.049-1.747 7.366 7.366 0 0 1-.494-2.54c-.03-1.273.225-2.553.854-3.67a6.43 6.43 0 0 1 1.663-1.918c.225-.178.464-.333.704-.479l.016-.007a5.121 5.121 0 0 0-1.441-.12 4.963 4.963 0 0 0-1.228.24c-.359.12-.704.27-1.019.45a6.146 6.146 0 0 0-.733.494c-.211.18-.42.36-.615.555-1.123 1.153-1.768 2.682-2.022 4.256-.15.973-.15 1.96-.091 2.95.105 1.395.391 2.787.945 4.062a8.518 8.518 0 0 0 1.348 2.173 8.14 8.14 0 0 0 3.132 2.23 7.934 7.934 0 0 0 2.113.54c.074.015.149.015.209.015zm-2.934-.398a4.102 4.102 0 0 1-.45-.228 8.5 8.5 0 0 1-2.038-1.534c-1.094-1.137-1.827-2.566-2.247-4.08a15.184 15.184 0 0 1-.495-3.172 12.14 12.14 0 0 1 .046-2.082c.135-1.257.495-2.501 1.124-3.58a6.889 6.889 0 0 1 1.783-2.053 6.23 6.23 0 0 1 1.633-.9 5.363 5.363 0 0 1 3.522-.045c.029 0 .029 0 .045.03.015.015.045.015.06.03.045.016.104.045.165.074.239.12.479.271.704.42a6.294 6.294 0 0 1 2.097 2.502c.42.914.615 1.934.631 2.938.014 1.079-.18 2.157-.645 3.146a6.42 6.42 0 0 1-2.638 2.832c.09.03.18.045.271.075.225.044.449.074.688.074 1.468.045 2.892-.66 3.94-1.647.195-.18.375-.375.54-.585.225-.27.435-.54.614-.823.239-.375.435-.75.614-1.154a8.112 8.112 0 0 0 .509-1.664c.196-1.004.211-2.022.149-3.026-.135-2.022-.673-4.045-1.842-5.724a9.054 9.054 0 0 0-.555-.719 9.868 9.868 0 0 0-1.063-1.034 8.477 8.477 0 0 0-1.363-.915 9.927 9.927 0 0 0-1.692-.598l-.3-.06c-.209-.03-.42-.044-.634-.06a8.453 8.453 0 0 0-1.015.016c-.704.045-1.412.16-2.112.337C5.799 1.227 2.863 3.566 1.3 6.67A11.834 11.834 0 0 0 .238 9.801a11.81 11.81 0 0 0-.104 3.775c.12 1.02.374 2.023.778 2.977.227.57.511 1.124.825 1.648 1.094 1.783 2.683 3.236 4.51 4.24.688.39 1.408.69 2.157.944.226.074.45.15.689.21z\"\n\t/>\n</svg>\n"
  },
  {
    "path": "docs/src/lib/components/icons/svelte.svelte",
    "content": "<script lang=\"ts\">\n\timport type { SVGAttributes } from \"svelte/elements\";\n\n\tlet { ...restProps }: SVGAttributes<SVGSVGElement> = $props();\n</script>\n\n<svg viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\" {...restProps}>\n\t<path\n\t\td=\"M20.6151 3.25876C18.4198 0.0966095 14.0491 -0.829881 10.9071 1.16409L5.36833 4.70892C3.85774 5.65555 2.81041 7.20642 2.50829 8.95869C2.24646 10.429 2.46801 11.9396 3.17295 13.2487C2.68956 13.9738 2.3673 14.7795 2.22632 15.6254C1.90406 17.418 2.32702 19.2709 3.37436 20.7412C5.58988 23.9034 9.94036 24.8299 13.0824 22.8359L18.6212 19.3112C20.1318 18.3646 21.1791 16.8137 21.4812 15.0614C21.743 13.5911 21.5215 12.0806 20.8166 10.7714C21.2999 10.0463 21.6222 9.24067 21.7632 8.39474C22.1056 6.58204 21.6826 4.72906 20.6151 3.25876Z\"\n\t\tfill=\"#FF3E00\"\n\t/>\n\t<path\n\t\td=\"M20.6151 3.25876C18.4198 0.0966095 14.0491 -0.829881 10.9071 1.16409L5.36833 4.70892C3.85774 5.65555 2.81041 7.20642 2.50829 8.95869C2.24646 10.429 2.46801 11.9396 3.17295 13.2487C2.68956 13.9738 2.3673 14.7795 2.22632 15.6254C1.90406 17.418 2.32702 19.2709 3.37436 20.7412C5.58988 23.9034 9.94036 24.8299 13.0824 22.8359L18.6212 19.3112C20.1318 18.3646 21.1791 16.8137 21.4812 15.0614C21.743 13.5911 21.5215 12.0806 20.8166 10.7714C21.2999 10.0463 21.6222 9.24067 21.7632 8.39474C22.1056 6.58204 21.6826 4.72906 20.6151 3.25876Z\"\n\t\tfill=\"white\"\n\t/>\n\t<path\n\t\td=\"M5.1636 15.7118L5.22156 15.5263L5.38966 15.6464C5.38976 15.6465 5.38986 15.6466 5.38996 15.6466C6.06352 16.1364 6.79851 16.5039 7.59452 16.7488L7.5952 16.749L7.71708 16.7856L7.7052 16.9044L7.70516 16.9044L7.70495 16.9072C7.68319 17.212 7.76991 17.5362 7.94316 17.7961L7.94315 17.7961L7.94429 17.7977C8.2895 18.294 8.89578 18.5335 9.48225 18.3815L9.48231 18.3817L9.48882 18.3796L9.49425 18.3777C9.61125 18.3388 9.74094 18.2955 9.85118 18.2294L9.8512 18.2294L9.85358 18.2279L15.3722 14.7032L15.3725 14.7031C15.6767 14.5075 15.8749 14.2223 15.9407 13.8715C16.0063 13.5216 15.919 13.1521 15.7231 12.8692L15.723 12.869C15.3761 12.3703 14.7687 12.154 14.185 12.3053L14.1849 12.3051L14.1784 12.3073L14.173 12.3091C14.056 12.3481 13.9263 12.3913 13.8161 12.4575L13.816 12.4574L13.8137 12.4589L11.6989 13.8084L11.6983 13.8087C11.366 14.0238 10.9937 14.1807 10.6007 14.2789L10.6 14.2791C8.84844 14.7318 7.01832 14.0431 5.9949 12.567L5.99446 12.5664C5.38512 11.7015 5.13007 10.6211 5.32637 9.56112L5.32657 9.55996C5.50287 8.54137 6.13032 7.61939 7.01268 7.07037L7.01268 7.07037L7.01354 7.06982L12.5523 3.54513L12.553 3.54472C12.8849 3.32994 13.2577 3.17247 13.6533 3.05366C15.4042 2.602 17.2334 3.29074 18.2564 4.7663L18.2564 4.76631L18.2578 4.76815C18.8851 5.63068 19.1215 6.70978 18.9452 7.77131C18.9055 7.94977 18.8662 8.10651 18.8076 8.28233L18.8076 8.28232L18.807 8.28414L18.7478 8.47365L18.5797 8.35358C18.5796 8.35349 18.5795 8.35341 18.5794 8.35333C17.9058 7.86353 17.1708 7.49607 16.3748 7.25115L16.3742 7.25094L16.2523 7.21438L16.2642 7.09559L16.2642 7.09559L16.2644 7.09274C16.2862 6.78802 16.1995 6.4638 16.0262 6.20392L16.0262 6.20391L16.0251 6.20227C15.6782 5.70364 15.0708 5.48731 14.4871 5.63863L14.4871 5.63841L14.4805 5.64058L14.4751 5.64239C14.3581 5.68138 14.2284 5.7246 14.1182 5.79075L14.1182 5.79071L14.1158 5.79223L8.59712 9.31692L8.59687 9.31708C8.29271 9.51262 8.09445 9.79782 8.02868 10.1486C7.96307 10.4985 8.05041 10.8681 8.24627 11.151L8.2464 11.1512C8.59328 11.6498 9.20069 11.8661 9.78436 11.7148L9.78442 11.715L9.79094 11.7129L9.79638 11.711C9.91337 11.672 10.0431 11.6288 10.1533 11.5627L10.1533 11.5627L10.1557 11.5612L12.2705 10.2118L12.271 10.2114C12.6029 9.99664 12.9757 9.83918 13.3713 9.72037C15.1222 9.2687 16.9514 9.95744 17.9745 11.433L17.9744 11.433L17.9758 11.4349C18.6035 12.298 18.8398 13.378 18.6629 14.4403C18.4865 15.4588 17.8591 16.3807 16.9768 16.9296L16.976 16.9302L11.4372 20.4549L11.4365 20.4553C11.1046 20.6701 10.7318 20.8275 10.3362 20.9463C8.58529 21.398 6.75612 20.7093 5.73306 19.2337L5.73309 19.2337L5.73175 19.2318C5.10445 18.3693 4.86803 17.2902 5.04426 16.2287C5.06405 16.1397 5.08386 16.0556 5.10382 15.9707L5.10387 15.9705C5.12367 15.8863 5.14363 15.8015 5.1636 15.7118Z\"\n\t\tfill=\"#09090B\"\n\t\tstroke=\"black\"\n\t\tstroke-width=\"0.201411\"\n\t/>\n</svg>\n"
  },
  {
    "path": "docs/src/lib/components/icons/ts.svelte",
    "content": "<script lang=\"ts\">\n\timport type { SVGAttributes } from \"svelte/elements\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet { class: className, ...restProps }: SVGAttributes<SVGSVGElement> = $props();\n</script>\n\n<svg\n\txmlns=\"http://www.w3.org/2000/svg\"\n\tviewBox=\"0 0 24 24\"\n\tclass={cn(\"fill-foreground\", className)}\n\t{...restProps}\n>\n\t<path\n\t\td=\"M1.125 0C.502 0 0 .502 0 1.125v21.75C0 23.498.502 24 1.125 24h21.75c.623 0 1.125-.502 1.125-1.125V1.125C24 .502 23.498 0 22.875 0zm17.363 9.75c.612 0 1.154.037 1.627.111a6.38 6.38 0 0 1 1.306.34v2.458a3.95 3.95 0 0 0-.643-.361 5.093 5.093 0 0 0-.717-.26 5.453 5.453 0 0 0-1.426-.2c-.3 0-.573.028-.819.086a2.1 2.1 0 0 0-.623.242c-.17.104-.3.229-.393.374a.888.888 0 0 0-.14.49c0 .196.053.373.156.529.104.156.252.304.443.444s.423.276.696.41c.273.135.582.274.926.416.47.197.892.407 1.266.628.374.222.695.473.963.753.268.279.472.598.614.957.142.359.214.776.214 1.253 0 .657-.125 1.21-.373 1.656a3.033 3.033 0 0 1-1.012 1.085 4.38 4.38 0 0 1-1.487.596c-.566.12-1.163.18-1.79.18a9.916 9.916 0 0 1-1.84-.164 5.544 5.544 0 0 1-1.512-.493v-2.63a5.033 5.033 0 0 0 3.237 1.2c.333 0 .624-.03.872-.09.249-.06.456-.144.623-.25.166-.108.29-.234.373-.38a1.023 1.023 0 0 0-.074-1.089 2.12 2.12 0 0 0-.537-.5 5.597 5.597 0 0 0-.807-.444 27.72 27.72 0 0 0-1.007-.436c-.918-.383-1.602-.852-2.053-1.405-.45-.553-.676-1.222-.676-2.005 0-.614.123-1.141.369-1.582.246-.441.58-.804 1.004-1.089a4.494 4.494 0 0 1 1.47-.629 7.536 7.536 0 0 1 1.77-.201zm-15.113.188h9.563v2.166H9.506v9.646H6.789v-9.646H3.375z\"\n\t/>\n</svg>\n"
  },
  {
    "path": "docs/src/lib/components/install-cards.svelte",
    "content": "<script lang=\"ts\">\n\timport LinkedCard from \"./linked-card.svelte\";\n\timport SvelteWhite from \"./svelte-white.svelte\";\n</script>\n\n<div class=\"mt-8 grid gap-4 sm:grid-cols-2 sm:gap-6\">\n\t<LinkedCard href=\"/docs/installation/sveltekit\">\n\t\t<SvelteWhite />\n\t\t<p class=\"mt-2 font-medium\">SvelteKit</p>\n\t</LinkedCard>\n\t<LinkedCard href=\"/docs/installation/astro\">\n\t\t<svg\n\t\t\trole=\"img\"\n\t\t\tviewBox=\"0 0 24 24\"\n\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\tclass=\"h-10 w-10\"\n\t\t\tfill=\"currentColor\"\n\t\t\t><title>Astro</title><path\n\t\t\t\td=\"M16.074 16.86C15.354 17.476 13.917 17.895 12.262 17.895C10.23 17.895 8.527 17.263 8.075 16.412C7.914 16.9 7.877 17.458 7.877 17.814C7.877 17.814 7.771 19.564 8.988 20.782C8.988 20.15 9.501 19.637 10.133 19.637C11.216 19.637 11.215 20.582 11.214 21.349V21.418C11.214 22.582 11.925 23.579 12.937 24C12.7812 23.6794 12.7005 23.3275 12.701 22.971C12.701 21.861 13.353 21.448 14.111 20.968C14.713 20.585 15.383 20.161 15.844 19.308C16.0926 18.8493 16.2225 18.3357 16.222 17.814C16.2221 17.4903 16.1722 17.1685 16.074 16.86ZM15.551 0.6C15.747 0.844 15.847 1.172 16.047 1.829L20.415 16.176C18.7743 15.3246 17.0134 14.7284 15.193 14.408L12.35 4.8C12.3273 4.72337 12.2803 4.65616 12.2162 4.60844C12.152 4.56072 12.0742 4.53505 11.9943 4.53528C11.9143 4.5355 11.8366 4.56161 11.7727 4.60969C11.7089 4.65777 11.6623 4.72524 11.64 4.802L8.83 14.405C7.00149 14.724 5.23264 15.3213 3.585 16.176L7.974 1.827C8.174 1.171 8.274 0.843 8.471 0.6C8.64406 0.385433 8.86922 0.218799 9.125 0.116C9.415 0 9.757 0 10.443 0H13.578C14.264 0 14.608 0 14.898 0.117C15.1529 0.219851 15.3783 0.386105 15.551 0.6Z\"\n\t\t\t\tfill=\"currentColor\"\n\t\t\t></path></svg\n\t\t>\n\t\t<p class=\"mt-2 font-medium\">Astro</p>\n\t</LinkedCard>\n\t<LinkedCard href=\"/docs/installation/vite\">\n\t\t<svg\n\t\t\trole=\"img\"\n\t\t\tviewBox=\"0 0 24 24\"\n\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\tclass=\"h-10 w-10\"\n\t\t\tfill=\"currentColor\"\n\t\t\t><title>Vite</title><path\n\t\t\t\td=\"m8.286 10.578.512-8.657a.306.306 0 0 1 .247-.282L17.377.006a.306.306 0 0 1 .353.385l-1.558 5.403a.306.306 0 0 0 .352.385l2.388-.46a.306.306 0 0 1 .332.438l-6.79 13.55-.123.19a.294.294 0 0 1-.252.14c-.177 0-.35-.152-.305-.369l1.095-5.301a.306.306 0 0 0-.388-.355l-1.433.435a.306.306 0 0 1-.389-.354l.69-3.375a.306.306 0 0 0-.37-.36l-2.32.536a.306.306 0 0 1-.374-.316zm14.976-7.926L17.284 3.74l-.544 1.887 2.077-.4a.8.8 0 0 1 .84.369.8.8 0 0 1 .034.783L12.9 19.93l-.013.025-.015.023-.122.19a.801.801 0 0 1-.672.37.826.826 0 0 1-.634-.302.8.8 0 0 1-.16-.67l1.029-4.981-1.12.34a.81.81 0 0 1-.86-.262.802.802 0 0 1-.165-.67l.63-3.08-2.027.468a.808.808 0 0 1-.768-.233.81.81 0 0 1-.217-.6l.389-6.57-7.44-1.33a.612.612 0 0 0-.64.906L11.58 23.691a.612.612 0 0 0 1.066-.004l11.26-20.135a.612.612 0 0 0-.644-.9z\"\n\t\t\t></path></svg\n\t\t>\n\t\t<p class=\"mt-2 font-medium\">Vite</p>\n\t</LinkedCard>\n\t<LinkedCard href=\"/docs/installation/manual\">\n\t\t<SvelteWhite />\n\t\t<p class=\"mt-2 font-medium\">Manual</p>\n\t</LinkedCard>\n</div>\n"
  },
  {
    "path": "docs/src/lib/components/install-tabs.svelte",
    "content": "<script lang=\"ts\">\n\timport * as DocTabs from \"./doc-tabs/index.js\";\n\timport CodeTabs from \"./code-tabs.svelte\";\n\timport type { Snippet } from \"svelte\";\n\n\tlet {\n\t\tcli,\n\t\tmanual,\n\t}: {\n\t\tcli: Snippet;\n\t\tmanual: Snippet;\n\t} = $props();\n</script>\n\n<div class=\"-ms-2 md:ms-0\">\n\t<CodeTabs>\n\t\t<DocTabs.List>\n\t\t\t<DocTabs.Trigger value=\"cli\">CLI</DocTabs.Trigger>\n\t\t\t<DocTabs.Trigger value=\"manual\">Manual</DocTabs.Trigger>\n\t\t</DocTabs.List>\n\t\t<DocTabs.Content value=\"cli\" class=\"ms-2 md:ms-0\">\n\t\t\t{@render cli?.()}\n\t\t</DocTabs.Content>\n\t\t<DocTabs.Content class=\"ms-2 md:ms-0\" value=\"manual\" data-manual-install=\"\" data-llm-ignore>\n\t\t\t{@render manual?.()}\n\t\t</DocTabs.Content>\n\t</CodeTabs>\n</div>\n"
  },
  {
    "path": "docs/src/lib/components/layout-toggle.svelte",
    "content": "<script lang=\"ts\">\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport { UserConfigContext } from \"$lib/user-config.svelte.js\";\n\timport type { ComponentProps } from \"svelte\";\n\timport { cn } from \"$lib/utils.js\";\n\timport GalleryHorizontalIcon from \"@lucide/svelte/icons/gallery-horizontal\";\n\n\tlet { class: className, ...restProps }: ComponentProps<typeof Button> = $props();\n\tconst userConfig = UserConfigContext.get();\n</script>\n\n<Button\n\tvariant=\"ghost\"\n\tsize=\"icon\"\n\tclass={cn(\"size-8\", className)}\n\tonclick={() => {\n\t\tuserConfig.setConfig({ layout: userConfig.current.layout === \"full\" ? \"fixed\" : \"full\" });\n\t}}\n\t{...restProps}\n\ttitle=\"Toggle layout\"\n>\n\t<span class=\"sr-only\"> Toggle layout </span>\n\t<GalleryHorizontalIcon />\n</Button>\n"
  },
  {
    "path": "docs/src/lib/components/linked-card.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn } from \"$lib/utils.js\";\n\timport type { HTMLAnchorAttributes } from \"svelte/elements\";\n\n\tlet { class: className, href, children, ...restProps }: HTMLAnchorAttributes = $props();\n</script>\n\n<a\n\t{href}\n\tclass={cn(\n\t\t\"bg-surface text-surface-foreground hover:bg-surface/80 flex w-full flex-col items-center rounded-xl p-6 transition-colors sm:p-10\",\n\t\tclassName\n\t)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</a>\n"
  },
  {
    "path": "docs/src/lib/components/logo.svelte",
    "content": "<script lang=\"ts\">\n\timport type { SVGAttributes } from \"svelte/elements\";\n\n\tlet { ...restProps }: SVGAttributes<SVGElement> = $props();\n</script>\n\n<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 256 256\" class=\"size-5\" {...restProps}\n\t><rect width=\"256\" height=\"256\" fill=\"none\"></rect><line\n\t\tx1=\"208\"\n\t\ty1=\"128\"\n\t\tx2=\"128\"\n\t\ty2=\"208\"\n\t\tfill=\"none\"\n\t\tstroke=\"#EB4F27\"\n\t\tstroke-linecap=\"round\"\n\t\tstroke-linejoin=\"round\"\n\t\tstroke-width=\"32\"\n\t></line><line\n\t\tx1=\"192\"\n\t\ty1=\"40\"\n\t\tx2=\"40\"\n\t\ty2=\"192\"\n\t\tfill=\"none\"\n\t\tstroke=\"#EB4F27\"\n\t\tstroke-linecap=\"round\"\n\t\tstroke-linejoin=\"round\"\n\t\tstroke-width=\"32\"\n\t></line></svg\n>\n"
  },
  {
    "path": "docs/src/lib/components/main-nav.svelte",
    "content": "<script lang=\"ts\">\n\timport Button from \"$lib/registry/ui/button/button.svelte\";\n\timport { cn } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\timport { page } from \"$app/state\";\n\timport type { NavItem } from \"$lib/navigation.js\";\n\n\tlet {\n\t\titems,\n\t\tclass: className,\n\t\t...restProps\n\t}: {\n\t\titems: NavItem[];\n\t\tclass?: string;\n\t} & HTMLAttributes<HTMLElement> = $props();\n</script>\n\n<nav class={cn(\"items-center gap-0.5\", className)} {...restProps}>\n\t{#each items as item (item.href)}\n\t\t<Button\n\t\t\thref={item.href}\n\t\t\tvariant=\"ghost\"\n\t\t\tsize=\"sm\"\n\t\t\tclass={cn(page.url.pathname === item.href && \"text-primary\")}\n\t\t>\n\t\t\t{item.title}\n\t\t</Button>\n\t{/each}\n</nav>\n"
  },
  {
    "path": "docs/src/lib/components/mdsx/a.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn } from \"$lib/utils.js\";\n\timport type { HTMLAnchorAttributes } from \"svelte/elements\";\n\n\tlet { class: className, children, href, ...restProps }: HTMLAnchorAttributes = $props();\n\n\tconst internal = $derived(href?.startsWith(\"/\") || href?.startsWith(\"#\"));\n\tconst rel = $derived(!internal ? \"noopener noreferrer\" : undefined);\n\tconst target = $derived(!internal ? \"_blank\" : undefined);\n</script>\n\n<a\n\t{href}\n\t{target}\n\t{rel}\n\tclass={cn(\"font-medium underline underline-offset-4\", className)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</a>\n"
  },
  {
    "path": "docs/src/lib/components/mdsx/blockquote.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet { class: className, children, ...restProps }: HTMLAttributes<HTMLElement> = $props();\n</script>\n\n<blockquote class={cn(\"mt-6 border-s-2 ps-6 italic\", className)} {...restProps}>\n\t{@render children?.()}\n</blockquote>\n"
  },
  {
    "path": "docs/src/lib/components/mdsx/blueprint.svelte",
    "content": "<script module>\n\texport {\n\t\ta,\n\t\tblockquote,\n\t\th1,\n\t\th2,\n\t\th3,\n\t\th4,\n\t\th5,\n\t\th6,\n\t\thr,\n\t\timg,\n\t\tli,\n\t\tol,\n\t\tp,\n\t\tpre,\n\t\tstrong,\n\t\ttable,\n\t\ttd,\n\t\tth,\n\t\ttr,\n\t\tul,\n\t\tfigcaption,\n\t} from \"./index.js\";\n</script>\n\n<script lang=\"ts\">\n\ttype Props = {\n\t\ttitle: string;\n\t\tdescription: string;\n\t\tsource: string;\n\t\tcomponent: string;\n\t};\n\tlet { title, description, source, component }: Props = $props();\n</script>\n\n<div class=\"mdsx\">\n\t<!-- eslint-disable-next-line svelte/no-unused-svelte-ignore -->\n\t<!-- svelte-ignore slot_element_deprecated -->\n\t<slot {title} {description} {source} {component} />\n</div>\n"
  },
  {
    "path": "docs/src/lib/components/mdsx/figcaption.svelte",
    "content": "<script lang=\"ts\">\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\timport { getIconForLanguageExtension } from \"../icons/icons.js\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tclass: className,\n\t\tchildren,\n\t\t\"data-language\": language,\n\t\t...restProps\n\t}: HTMLAttributes<HTMLElement> = $props();\n\n\tconst Icon = $derived(\n\t\tlanguage && typeof language === \"string\" ? getIconForLanguageExtension(language) : null\n\t);\n</script>\n\n<!-- svelte-ignore a11y_figcaption_parent -->\n<figcaption\n\tclass={cn(\n\t\t\"text-code-foreground [&_svg]:text-code-foreground flex items-center gap-2 [&_svg]:size-4 [&_svg]:opacity-70\",\n\t\tclassName\n\t)}\n\t{...restProps}\n>\n\t{#if Icon}\n\t\t<Icon />\n\t{/if}\n\t{@render children?.()}\n</figcaption>\n"
  },
  {
    "path": "docs/src/lib/components/mdsx/h1.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet { class: className, children, ...restProps }: HTMLAttributes<HTMLHeadingElement> = $props();\n</script>\n\n<h1\n\tclass={cn(\"font-heading mt-2 scroll-m-28 text-3xl font-bold tracking-tight\", className)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</h1>\n"
  },
  {
    "path": "docs/src/lib/components/mdsx/h2.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet { class: className, children, ...restProps }: HTMLAttributes<HTMLHeadingElement> = $props();\n</script>\n\n<h2\n\tclass={cn(\n\t\t\"font-heading [&+]*:[code]:text-xl mt-10 scroll-m-28 text-xl font-medium tracking-tight first:mt-0 lg:mt-16 [&+.steps]:!mt-0 [&+.steps>h3]:!mt-4 [&+h3]:!mt-6 [&+p]:!mt-4\",\n\t\tclassName\n\t)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</h2>\n"
  },
  {
    "path": "docs/src/lib/components/mdsx/h3.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet { class: className, children, ...restProps }: HTMLAttributes<HTMLHeadingElement> = $props();\n</script>\n\n<h3\n\tclass={cn(\n\t\t\"font-heading mt-12 scroll-m-28 text-lg font-medium tracking-tight [&+p]:!mt-4 *:[code]:text-xl\",\n\t\tclassName\n\t)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</h3>\n"
  },
  {
    "path": "docs/src/lib/components/mdsx/h4.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet { class: className, children, ...restProps }: HTMLAttributes<HTMLHeadingElement> = $props();\n</script>\n\n<h4\n\tclass={cn(\"font-heading mt-8 scroll-m-28 text-base font-medium tracking-tight\", className)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</h4>\n"
  },
  {
    "path": "docs/src/lib/components/mdsx/h5.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet { class: className, children, ...restProps }: HTMLAttributes<HTMLHeadingElement> = $props();\n</script>\n\n<h5 class={cn(\"mt-8 scroll-m-28 text-base font-medium tracking-tight\", className)} {...restProps}>\n\t{@render children?.()}\n</h5>\n"
  },
  {
    "path": "docs/src/lib/components/mdsx/h6.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet { class: className, children, ...restProps }: HTMLAttributes<HTMLHeadingElement> = $props();\n</script>\n\n<h6 class={cn(\"mt-8 scroll-m-28 text-base font-medium tracking-tight\", className)} {...restProps}>\n\t{@render children?.()}\n</h6>\n"
  },
  {
    "path": "docs/src/lib/components/mdsx/hr.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet { class: className, ...restProps }: HTMLAttributes<HTMLElement> = $props();\n</script>\n\n<hr class={cn(\"my-4 md:my-8\", className)} {...restProps} />\n"
  },
  {
    "path": "docs/src/lib/components/mdsx/img.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn } from \"$lib/utils.js\";\n\timport type { HTMLImgAttributes } from \"svelte/elements\";\n\n\tlet { class: className, src, alt, ...restProps }: HTMLImgAttributes = $props();\n</script>\n\n<img {src} {alt} class={cn(\"rounded-md\", className)} {...restProps} />\n"
  },
  {
    "path": "docs/src/lib/components/mdsx/index.ts",
    "content": "export { default as a } from \"./a.svelte\";\nexport { default as blockquote } from \"./blockquote.svelte\";\nexport { default as h1 } from \"./h1.svelte\";\nexport { default as h2 } from \"./h2.svelte\";\nexport { default as h3 } from \"./h3.svelte\";\nexport { default as h4 } from \"./h4.svelte\";\nexport { default as h5 } from \"./h5.svelte\";\nexport { default as h6 } from \"./h6.svelte\";\nexport { default as hr } from \"./hr.svelte\";\nexport { default as img } from \"./img.svelte\";\nexport { default as li } from \"./li.svelte\";\nexport { default as ol } from \"./ol.svelte\";\nexport { default as p } from \"./p.svelte\";\nexport { default as pre } from \"./pre.svelte\";\nexport { default as strong } from \"./strong.svelte\";\nexport { default as table } from \"./table.svelte\";\nexport { default as td } from \"./td.svelte\";\nexport { default as th } from \"./th.svelte\";\nexport { default as tr } from \"./tr.svelte\";\nexport { default as ul } from \"./ul.svelte\";\nexport { default as figcaption } from \"./figcaption.svelte\";\n"
  },
  {
    "path": "docs/src/lib/components/mdsx/li.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet { class: className, children, ...restProps }: HTMLAttributes<HTMLLIElement> = $props();\n</script>\n\n<li class={cn(\"mt-2\", className)} {...restProps}>\n\t{@render children?.()}\n</li>\n"
  },
  {
    "path": "docs/src/lib/components/mdsx/ol.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet { class: className, children, ...restProps }: HTMLAttributes<HTMLOListElement> = $props();\n</script>\n\n<ol class={cn(\"my-6 ms-6 list-decimal\", className)} {...restProps}>\n\t{@render children?.()}\n</ol>\n"
  },
  {
    "path": "docs/src/lib/components/mdsx/p.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet {\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: HTMLAttributes<HTMLParagraphElement> = $props();\n</script>\n\n<p class={cn(\"leading-[1.65rem] [&:not(:first-child)]:mt-6\", className)} {...restProps}>\n\t{@render children?.()}\n</p>\n"
  },
  {
    "path": "docs/src/lib/components/mdsx/pre.svelte",
    "content": "<script lang=\"ts\">\n\timport { onMount } from \"svelte\";\n\timport CopyButton from \"$lib/components/copy-button.svelte\";\n\timport { cn } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet { class: className, children, ...restProps }: HTMLAttributes<HTMLPreElement> = $props();\n\n\tlet preNode = $state<HTMLPreElement>();\n\tlet code = $state(\"\");\n\n\tonMount(() => {\n\t\tif (preNode) {\n\t\t\tcode = preNode.innerText.trim().replaceAll(\"  \", \" \");\n\t\t}\n\t});\n</script>\n\n<!--\nWe cannot have a newline between the pre and children or we will get a newline in the code block\n-->\n<pre\n\tbind:this={preNode}\n\tclass={cn(\n\t\t\"no-scrollbar min-w-0 overflow-x-auto px-4 py-3.5 outline-none has-[[data-highlighted-line]]:px-0 has-[[data-line-numbers]]:px-0 has-[[data-slot=tabs]]:p-0\",\n\t\tclassName\n\t)}\n\t{...restProps}>{@render children?.()}</pre>\n<CopyButton text={code} />\n"
  },
  {
    "path": "docs/src/lib/components/mdsx/strong.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet { class: className, children, ...restProps }: HTMLAttributes<HTMLElement> = $props();\n</script>\n\n<strong class={cn(\"font-semibold\", className)} {...restProps}>\n\t{@render children?.()}\n</strong>\n"
  },
  {
    "path": "docs/src/lib/components/mdsx/table.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet { class: className, children, ...restProps }: HTMLAttributes<HTMLTableElement> = $props();\n</script>\n\n<div class=\"no-scrollbar my-6 w-full overflow-y-auto rounded-lg border\">\n\t<table\n\t\tclass={cn(\n\t\t\t\"relative w-full overflow-hidden border-none text-sm [&_tbody_tr:last-child]:border-b-0\",\n\t\t\tclassName\n\t\t)}\n\t\t{...restProps}\n\t>\n\t\t{@render children?.()}\n\t</table>\n</div>\n"
  },
  {
    "path": "docs/src/lib/components/mdsx/td.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn } from \"$lib/utils.js\";\n\timport type { HTMLTdAttributes } from \"svelte/elements\";\n\n\tlet { class: className, children, ...restProps }: HTMLTdAttributes = $props();\n</script>\n\n<td\n\tclass={cn(\n\t\t\"px-4 py-2 text-start whitespace-nowrap [&[align=center]]:text-center [&[align=right]]:text-end\",\n\t\tclassName\n\t)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</td>\n"
  },
  {
    "path": "docs/src/lib/components/mdsx/th.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn } from \"$lib/utils.js\";\n\timport type { HTMLThAttributes } from \"svelte/elements\";\n\n\tlet { class: className, children, ...restProps }: HTMLThAttributes = $props();\n</script>\n\n<th\n\tclass={cn(\n\t\t\"px-4 py-2 text-start font-bold [&[align=center]]:text-center [&[align=right]]:text-end\",\n\t\tclassName\n\t)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</th>\n"
  },
  {
    "path": "docs/src/lib/components/mdsx/tr.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet {\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: HTMLAttributes<HTMLTableRowElement> = $props();\n</script>\n\n<tr class={cn(\"m-0 border-b\", className)} {...restProps}>\n\t{@render children?.()}\n</tr>\n"
  },
  {
    "path": "docs/src/lib/components/mdsx/ul.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet { class: className, children, ...restProps }: HTMLAttributes<HTMLUListElement> = $props();\n</script>\n\n<ul class={cn(\"my-6 ms-6 list-disc\", className)} {...restProps}>\n\t{@render children?.()}\n</ul>\n"
  },
  {
    "path": "docs/src/lib/components/metadata.svelte",
    "content": "<script lang=\"ts\">\n\timport { page } from \"$app/state\";\n\timport { siteConfig } from \"$lib/config.js\";\n\n\tlet {\n\t\ttitle,\n\t\togImage,\n\t\tdescription,\n\t\tkeywords = siteConfig.keywords,\n\t\togType = \"website\",\n\t}: {\n\t\ttitle?: string;\n\t\togImage?: Partial<(typeof siteConfig)[\"ogImage\"]>;\n\t\tdescription?: string;\n\t\tkeywords?: string[];\n\t\togType?: string;\n\t} = $props();\n\n\tconst ogUrl = $derived.by(() => {\n\t\tif (!ogImage?.url) return siteConfig.ogImage.url;\n\t\tif (ogImage.url.startsWith(\"/\")) return siteConfig.url + ogImage.url;\n\t\treturn ogImage.url;\n\t});\n\n\tconst ogWidth = $derived.by(() => {\n\t\tif (ogImage?.width) return ogImage.width;\n\t\treturn siteConfig.ogImage.width;\n\t});\n\n\tconst ogHeight = $derived.by(() => {\n\t\tif (ogImage?.height) return ogImage.height;\n\t\treturn siteConfig.ogImage.height;\n\t});\n\n\tconst trueTitle = $derived(\n\t\ttitle === siteConfig.name ? siteConfig.name : `${title} - ${siteConfig.name}`\n\t);\n</script>\n\n<svelte:head>\n\t<title>{trueTitle}</title>\n\t<meta name=\"description\" content={description} />\n\t<meta name=\"keywords\" content={keywords?.join(\",\")} />\n\t<meta name=\"author\" content=\"huntabyte\" />\n\t<meta name=\"creator\" content=\"huntabyte\" />\n\t<meta name=\"twitter:card\" content=\"summary_large_image\" />\n\t<meta name=\"twitter:site\" content={siteConfig.url} />\n\t<meta name=\"twitter:title\" content={title} />\n\t<meta name=\"twitter:description\" content={description} />\n\t<meta name=\"twitter:image\" content={ogUrl} />\n\t<meta name=\"twitter:image:alt\" content={title} />\n\t<meta name=\"twitter:creator\" content=\"@huntabyte\" />\n\t<meta property=\"og:title\" content={title} />\n\t<meta property=\"og:type\" content={ogType} />\n\t<meta property=\"og:url\" content={siteConfig.url + page.url.pathname} />\n\t<meta property=\"og:image\" content={ogUrl} />\n\t<meta property=\"og:image:alt\" content={title} />\n\t<meta property=\"og:image:width\" content={ogWidth} />\n\t<meta property=\"og:image:height\" content={ogHeight} />\n\t<meta property=\"og:description\" content={description} />\n\t<meta property=\"og:site_name\" content={siteConfig.name} />\n\t<meta property=\"og:locale\" content=\"EN_US\" />\n</svelte:head>\n"
  },
  {
    "path": "docs/src/lib/components/mobile-nav.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn } from \"$lib/utils.js\";\n\timport { Button, type ButtonProps } from \"$lib/registry/ui/button/index.js\";\n\timport * as Popover from \"$lib/registry/ui/popover/index.js\";\n\timport type { HTMLAnchorAttributes } from \"svelte/elements\";\n\timport { mainNavItems, sidebarNavItems } from \"$lib/navigation.js\";\n\timport { NEW_COMPONENTS } from \"$lib/navigation.js\";\n\n\ttype MobileLinkProps = HTMLAnchorAttributes & {\n\t\tcontent?: string;\n\t};\n\n\tlet { class: className, ...restProps }: ButtonProps = $props();\n\n\tlet open = $state(false);\n\n\t// Expose a function to close the mobile menu\n\tlet closeMenu = () => {\n\t\topen = false;\n\t};\n\n\texport { closeMenu };\n</script>\n\n{#snippet MobileLink({ href, content, class: className, ...props }: MobileLinkProps)}\n\t<a\n\t\t{href}\n\t\tonclick={() => {\n\t\t\topen = false;\n\t\t}}\n\t\tclass={cn(\"flex items-center gap-2 text-2xl font-medium\", className)}\n\t\t{...props}\n\t>\n\t\t{content}\n\t\t{#if href && NEW_COMPONENTS.has(href.replace(\"/docs/components/\", \"\"))}\n\t\t\t<span class=\"bg-svelte-orange flex size-2 rounded-full\" title=\"New\"></span>\n\t\t{/if}\n\t</a>\n{/snippet}\n\n<Popover.Root bind:open>\n\t<Popover.Trigger>\n\t\t{#snippet child({ props })}\n\t\t\t<Button\n\t\t\t\t{...props}\n\t\t\t\t{...restProps}\n\t\t\t\tvariant=\"ghost\"\n\t\t\t\tclass={cn(\n\t\t\t\t\t\"extend-touch-target h-8 touch-manipulation items-center justify-start gap-2.5 !p-0 hover:bg-transparent focus-visible:bg-transparent focus-visible:ring-0 active:bg-transparent dark:hover:bg-transparent\",\n\t\t\t\t\tclassName\n\t\t\t\t)}\n\t\t\t>\n\t\t\t\t<div class=\"relative flex h-8 w-4 items-center justify-center\">\n\t\t\t\t\t<div class=\"relative size-4\">\n\t\t\t\t\t\t<span\n\t\t\t\t\t\t\tclass={cn(\n\t\t\t\t\t\t\t\t\"bg-foreground absolute start-0 block h-0.5 w-4 transition-all duration-100\",\n\t\t\t\t\t\t\t\topen ? \"top-[0.4rem] -rotate-45\" : \"top-1\"\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t></span>\n\t\t\t\t\t\t<span\n\t\t\t\t\t\t\tclass={cn(\n\t\t\t\t\t\t\t\t\"bg-foreground absolute start-0 block h-0.5 w-4 transition-all duration-100\",\n\t\t\t\t\t\t\t\topen ? \"top-[0.4rem] rotate-45\" : \"top-2.5\"\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t></span>\n\t\t\t\t\t</div>\n\t\t\t\t\t<span class=\"sr-only\">Toggle Menu</span>\n\t\t\t\t</div>\n\t\t\t\t<span class=\"flex h-8 items-center text-lg leading-none font-medium\"> Menu </span>\n\t\t\t</Button>\n\t\t{/snippet}\n\t</Popover.Trigger>\n\t<Popover.Content\n\t\tclass=\"bg-background/90 no-scrollbar h-(--bits-popover-content-available-height) w-(--bits-popover-content-available-width) overflow-y-auto rounded-none border-none p-0 shadow-none backdrop-blur duration-100\"\n\t\talign=\"start\"\n\t\tside=\"bottom\"\n\t\talignOffset={-16}\n\t\tsideOffset={14}\n\t\tpreventScroll\n\t>\n\t\t<div class=\"flex flex-col gap-12 overflow-auto px-6 py-6\">\n\t\t\t<div class=\"flex flex-col gap-4\">\n\t\t\t\t<div class=\"text-muted-foreground text-sm font-medium\">Menu</div>\n\t\t\t\t<div class=\"flex flex-col gap-3\">\n\t\t\t\t\t{@render MobileLink({ href: \"/\", content: \"Home\" })}\n\t\t\t\t\t{#each mainNavItems as item, i (i)}\n\t\t\t\t\t\t{@render MobileLink({ href: item.href, content: item.title })}\n\t\t\t\t\t{/each}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class=\"flex flex-col gap-8\">\n\t\t\t\t{#each sidebarNavItems as group (group.title)}\n\t\t\t\t\t<div class=\"flex flex-col gap-4\">\n\t\t\t\t\t\t<div class=\"text-muted-foreground text-sm font-medium\">\n\t\t\t\t\t\t\t{group.title}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"flex flex-col gap-3\">\n\t\t\t\t\t\t\t{#each group.items as item, i (i)}\n\t\t\t\t\t\t\t\t{@render MobileLink({ href: item.href, content: item.title })}\n\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t{/each}\n\t\t\t</div>\n\t\t</div>\n\t</Popover.Content>\n</Popover.Root>\n"
  },
  {
    "path": "docs/src/lib/components/mode-switcher.svelte",
    "content": "<script lang=\"ts\">\n\timport Button from \"$lib/registry/ui/button/button.svelte\";\n\timport { toggleMode } from \"mode-watcher\";\n\timport { cn } from \"$lib/utils.js\";\n\n\ttype Props = {\n\t\tclass?: string;\n\t};\n\n\tlet { class: className }: Props = $props();\n</script>\n\n<Button\n\tvariant=\"ghost\"\n\tsize=\"icon\"\n\tclass={cn(\"group/toggle extend-touch-target size-8\", className)}\n\tonclick={toggleMode}\n\ttitle=\"Toggle theme\"\n>\n\t<svg\n\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\twidth=\"24\"\n\t\theight=\"24\"\n\t\tviewBox=\"0 0 24 24\"\n\t\tfill=\"none\"\n\t\tstroke=\"currentColor\"\n\t\tstroke-width=\"2\"\n\t\tstroke-linecap=\"round\"\n\t\tstroke-linejoin=\"round\"\n\t\tclass=\"size-4.5\"\n\t>\n\t\t<path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\" />\n\t\t<path d=\"M12 12m-9 0a9 9 0 1 0 18 0a9 9 0 1 0 -18 0\" />\n\t\t<path d=\"M12 3l0 18\" />\n\t\t<path d=\"M12 9l4.65 -4.65\" />\n\t\t<path d=\"M12 14.3l7.37 -7.37\" />\n\t\t<path d=\"M12 19.6l8.85 -8.85\" />\n\t</svg>\n\t<span class=\"sr-only\">Toggle theme</span>\n</Button>\n"
  },
  {
    "path": "docs/src/lib/components/og.svelte",
    "content": "<script lang=\"ts\">\n\tlet { title, description }: { title?: string | null; description?: string | null } = $props();\n</script>\n\n<div class=\"flex h-full w-full bg-black text-white\" style=\"font-family: 'Inter Latin'\">\n\t<div\n\t\tclass=\"absolute inset-y-0 start-16 flex w-[1px] border border-dashed border-stone-700\"\n\t></div>\n\t<div class=\"absolute inset-y-0 end-16 flex w-[1px] border border-dashed border-stone-700\"></div>\n\t<div class=\"absolute inset-x-0 top-16 flex h-[1px] border border-stone-700\"></div>\n\t<div class=\"absolute inset-x-0 bottom-16 flex h-[1px] border border-stone-700\"></div>\n\t<div class=\"absolute end-24 bottom-24 flex flex-row text-white\">\n\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 256 256\" width={48} height={48}>\n\t\t\t<rect width=\"256\" height=\"256\" fill=\"none\"></rect>\n\t\t\t<line\n\t\t\t\tx1=\"208\"\n\t\t\t\ty1=\"128\"\n\t\t\t\tx2=\"128\"\n\t\t\t\ty2=\"208\"\n\t\t\t\tfill=\"none\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\tstroke-width=\"32\"\n\t\t\t></line>\n\t\t\t<line\n\t\t\t\tx1=\"192\"\n\t\t\t\ty1=\"40\"\n\t\t\t\tx2=\"40\"\n\t\t\t\ty2=\"192\"\n\t\t\t\tfill=\"none\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\tstroke-width=\"32\"\n\t\t\t></line>\n\t\t</svg>\n\t</div>\n\t<div class=\"absolute inset-32 flex w-[896px] flex-col justify-center\">\n\t\t<div\n\t\t\tclass=\"flex flex-grow-1 flex-col justify-center text-[64px] leading-[1.1]\"\n\t\t\tstyle=\"text-wrap: balance; font-weight: 600; letter-spacing: -0.04em;\"\n\t\t>\n\t\t\t{title}\n\t\t</div>\n\t\t<div\n\t\t\tclass=\"flex-grow-1 text-[40px] leading-[1.5] text-stone-400\"\n\t\t\tstyle=\"font-weight: 500; text-wrap: balance;\"\n\t\t>\n\t\t\t{description}\n\t\t</div>\n\t</div>\n</div>\n"
  },
  {
    "path": "docs/src/lib/components/page-header/page-actions.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet { class: className, children, ...restProps }: HTMLAttributes<HTMLElement> = $props();\n</script>\n\n<div\n\tclass={cn(\n\t\t\"flex w-full items-center justify-center gap-2 pt-2 **:data-[slot=button]:shadow-none\",\n\t\tclassName\n\t)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</div>\n"
  },
  {
    "path": "docs/src/lib/components/page-header/page-header-description.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet { class: className, children, ...restProps }: HTMLAttributes<HTMLElement> = $props();\n</script>\n\n<p\n\tclass={cn(\"text-foreground max-w-3xl text-base text-balance sm:text-lg\", className)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</p>\n"
  },
  {
    "path": "docs/src/lib/components/page-header/page-header-heading.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet { class: className, children, ...restProps }: HTMLAttributes<HTMLElement> = $props();\n</script>\n\n<h1\n\tclass={cn(\n\t\t\"text-primary leading-tighter max-w-2xl text-4xl font-semibold tracking-tight text-balance lg:leading-[1.1] lg:font-semibold xl:text-5xl xl:tracking-tighter\",\n\t\tclassName\n\t)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</h1>\n"
  },
  {
    "path": "docs/src/lib/components/page-header/page-header.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet { class: className, children, ...restProps }: HTMLAttributes<HTMLElement> = $props();\n</script>\n\n<section class={cn(\"border-grid\", className)} {...restProps}>\n\t<div class=\"container-wrapper\">\n\t\t<div\n\t\t\tclass=\"container flex flex-col items-center gap-2 py-8 text-center md:py-16 lg:py-20 xl:gap-4\"\n\t\t>\n\t\t\t{@render children?.()}\n\t\t</div>\n\t</div>\n</section>\n"
  },
  {
    "path": "docs/src/lib/components/page-nav.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet { class: className, children, ...restProps }: HTMLAttributes<HTMLElement> = $props();\n</script>\n\n<div class={cn(\"container-wrapper scroll-mt-24\", className)} {...restProps}>\n\t<div class=\"container flex items-center justify-between gap-4 py-4\">\n\t\t{@render children?.()}\n\t</div>\n</div>\n"
  },
  {
    "path": "docs/src/lib/components/pm-add-comp.svelte",
    "content": "<script lang=\"ts\">\n\timport PMExecute from \"./pm-execute.svelte\";\n\n\tlet { name }: { name: string } = $props();\n</script>\n\n<PMExecute command={`shadcn-svelte@latest add ${name}`} />\n"
  },
  {
    "path": "docs/src/lib/components/pm-block.svelte",
    "content": "<script lang=\"ts\">\n\timport type { Command } from \"package-manager-detector\";\n\timport * as Tabs from \"$lib/registry/ui/tabs/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Tooltip from \"$lib/registry/ui/tooltip/index.js\";\n\timport { getCommand, PACKAGE_MANAGERS, type PackageManager } from \"$lib/package-manager.js\";\n\timport { UseClipboard } from \"$lib/hooks/use-clipboard.svelte.js\";\n\timport TerminalIcon from \"@lucide/svelte/icons/terminal\";\n\timport CopyIcon from \"@tabler/icons-svelte/icons/copy\";\n\timport CheckIcon from \"@tabler/icons-svelte/icons/check\";\n\timport { UserConfigContext } from \"$lib/user-config.svelte.js\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tconst {\n\t\ttype,\n\t\tcommand,\n\t}: {\n\t\ttype: Command | \"create\";\n\t\tcommand: string | string[];\n\t} = $props();\n\n\tconst userConfig = UserConfigContext.get();\n\n\tfunction getCommandText(agent: PackageManager) {\n\t\tconst cmd = getCommand(agent, type, command);\n\t\treturn `${cmd.command} ${cmd.args.join(\" \")}`.trim();\n\t}\n\n\tconst commandText = $derived(getCommandText(userConfig.current.packageManager));\n\n\tconst clipboard = new UseClipboard();\n</script>\n\n<figure data-rehype-pretty-code-figure>\n\t<div class=\"overflow-x-auto\">\n\t\t<Tabs.Root\n\t\t\tbind:value={\n\t\t\t\t() => userConfig.current.packageManager,\n\t\t\t\t(v) => {\n\t\t\t\t\tuserConfig.setConfig({ packageManager: v });\n\t\t\t\t}\n\t\t\t}\n\t\t\tclass=\"gap-0\"\n\t\t>\n\t\t\t<div class=\"border-border/50 flex items-center gap-2 border-b px-3 py-1\">\n\t\t\t\t<div\n\t\t\t\t\tclass=\"bg-foreground flex size-4 items-center justify-center rounded-[1px] opacity-70\"\n\t\t\t\t>\n\t\t\t\t\t<TerminalIcon class=\"text-code size-3\" />\n\t\t\t\t</div>\n\t\t\t\t<Tabs.List class=\"rounded-none bg-transparent p-0\" data-llm-ignore>\n\t\t\t\t\t{#each PACKAGE_MANAGERS as pm (pm)}\n\t\t\t\t\t\t<Tabs.Trigger\n\t\t\t\t\t\t\tvalue={pm}\n\t\t\t\t\t\t\tclass=\"dark:data-[state=active]:text-foreground focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring dark:data-[state=active]:border-input dark:data-[state=active]:bg-input/30 text-foreground dark:text-muted-foreground [&amp;_svg]:pointer-events-none [&amp;_svg]:shrink-0 [&amp;_svg:not([class*='size-'])]:size-4 data-[state=active]:bg-accent data-[state=active]:border-input inline-flex h-7 flex-1 items-center justify-center gap-1.5 rounded-md border border-transparent px-2 py-1 pt-0.5 font-mono text-sm font-medium whitespace-nowrap transition-[color,box-shadow] focus-visible:ring-[3px] focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:shadow-none\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{pm}\n\t\t\t\t\t\t</Tabs.Trigger>\n\t\t\t\t\t{/each}\n\t\t\t\t</Tabs.List>\n\t\t\t</div>\n\t\t\t<div class=\"no-scrollbar overflow-x-auto\">\n\t\t\t\t{#each PACKAGE_MANAGERS as pm (pm)}\n\t\t\t\t\t<Tabs.Content\n\t\t\t\t\t\tvalue={pm}\n\t\t\t\t\t\tclass=\"mt-0 px-4 py-3.5\"\n\t\t\t\t\t\tdata-llm-ignore={pm === \"yarn\" || pm === \"yarn@berry\" ? \"\" : undefined}\n\t\t\t\t\t>\n\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t{@const { hidden, class: className, ...rest } = props}\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t{...rest}\n\t\t\t\t\t\t\t\tclass={cn(className as string, (hidden as boolean) && \"hidden\")}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<pre><code\n\t\t\t\t\t\t\t\t\t\tclass=\"font-mono text-sm leading-none\"\n\t\t\t\t\t\t\t\t\t\tdata-language=\"bash\">{getCommandText(pm)}</code\n\t\t\t\t\t\t\t\t\t></pre>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t</Tabs.Content>\n\t\t\t\t{/each}\n\t\t\t</div>\n\t\t</Tabs.Root>\n\t\t<Tooltip.Root disableCloseOnTriggerClick>\n\t\t\t<Tooltip.Trigger onclick={() => clipboard.copy(commandText)}>\n\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t<Button\n\t\t\t\t\t\t{...props}\n\t\t\t\t\t\tdata-slot=\"copy-button\"\n\t\t\t\t\t\tsize=\"icon\"\n\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\tclass=\"absolute end-2 top-2 z-10 size-7 opacity-70 hover:opacity-100 focus-visible:opacity-100\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<span class=\"sr-only\" data-llm-ignore>Copy</span>\n\t\t\t\t\t\t{#if clipboard.copied}\n\t\t\t\t\t\t\t<CheckIcon />\n\t\t\t\t\t\t{:else}\n\t\t\t\t\t\t\t<CopyIcon />\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t</Button>\n\t\t\t\t{/snippet}\n\t\t\t</Tooltip.Trigger>\n\t\t\t<Tooltip.Content>\n\t\t\t\t{clipboard.copied ? \"Copied\" : \"Copy to Clipboard\"}\n\t\t\t</Tooltip.Content>\n\t\t</Tooltip.Root>\n\t</div>\n</figure>\n"
  },
  {
    "path": "docs/src/lib/components/pm-create.svelte",
    "content": "<script lang=\"ts\">\n\timport PMBlock from \"./pm-block.svelte\";\n\tlet { command }: { command: string } = $props();\n</script>\n\n<PMBlock type=\"create\" {command} />\n"
  },
  {
    "path": "docs/src/lib/components/pm-execute.svelte",
    "content": "<script lang=\"ts\">\n\timport PMBlock from \"./pm-block.svelte\";\n\tlet { command }: { command: string } = $props();\n</script>\n\n<PMBlock type=\"execute\" {command} />\n"
  },
  {
    "path": "docs/src/lib/components/pm-install.svelte",
    "content": "<script lang=\"ts\">\n\timport PMBlock from \"./pm-block.svelte\";\n\tlet { command }: { command: string } = $props();\n</script>\n\n<PMBlock type=\"install\" {command} />\n"
  },
  {
    "path": "docs/src/lib/components/pm-remove.svelte",
    "content": "<script lang=\"ts\">\n\timport PMBlock from \"./pm-block.svelte\";\n\tlet { command }: { command: string } = $props();\n</script>\n\n<PMBlock type=\"uninstall\" {command} />\n"
  },
  {
    "path": "docs/src/lib/components/pm-run.svelte",
    "content": "<script lang=\"ts\">\n\timport PMBlock from \"./pm-block.svelte\";\n\tlet { command }: { command: string } = $props();\n</script>\n\n<PMBlock type=\"run\" {command} />\n"
  },
  {
    "path": "docs/src/lib/components/pm-upgrade.svelte",
    "content": "<script lang=\"ts\">\n\timport PMBlock from \"./pm-block.svelte\";\n\tlet { command }: { command: string } = $props();\n</script>\n\n<PMBlock type=\"upgrade\" {command} />\n"
  },
  {
    "path": "docs/src/lib/components/site-footer.svelte",
    "content": "<footer\n\tclass=\"group-has-[.section-soft]/body:bg-surface/40 3xl:fixed:bg-transparent group-has-[.docs-nav]/body:pb-20 group-has-[.docs-nav]/body:sm:pb-0 dark:bg-transparent\"\n>\n\t<div class=\"container-wrapper px-4 xl:px-6\">\n\t\t<div class=\"flex h-(--footer-height) items-center justify-between\">\n\t\t\t<div class=\"text-muted-foreground w-full text-center text-xs leading-loose sm:text-sm\">\n\t\t\t\tBuilt by\n\t\t\t\t<a\n\t\t\t\t\thref=\"https://x.com/shadcn\"\n\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\trel=\"noreferrer\"\n\t\t\t\t\tclass=\"font-medium underline underline-offset-4\"\n\t\t\t\t>\n\t\t\t\t\tshadcn\n\t\t\t\t</a>. Ported to Svelte by\n\t\t\t\t<a\n\t\t\t\t\thref=\"https://x.com/huntabyte\"\n\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\trel=\"noreferrer\"\n\t\t\t\t\tclass=\"font-medium underline underline-offset-4\">Huntabyte</a\n\t\t\t\t>\n\t\t\t\t&\n\t\t\t\t<a\n\t\t\t\t\thref=\"https://github.com/adriangonz97\"\n\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\trel=\"noreferrer\"\n\t\t\t\t\tclass=\"font-medium underline underline-offset-4\"\n\t\t\t\t>\n\t\t\t\t\tCokaKoala\n\t\t\t\t</a>.\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</footer>\n"
  },
  {
    "path": "docs/src/lib/components/site-header.svelte",
    "content": "<script lang=\"ts\">\n\timport Logo from \"./logo.svelte\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport MainNav from \"./main-nav.svelte\";\n\timport Separator from \"$lib/registry/ui/separator/separator.svelte\";\n\timport GithubLink from \"./github-link.svelte\";\n\timport MobileNav from \"./mobile-nav.svelte\";\n\timport LayoutToggle from \"./layout-toggle.svelte\";\n\timport CommandMenu from \"./command-menu/command-menu.svelte\";\n\timport { getColors } from \"$lib/colors.js\";\n\timport { mainNavItems } from \"$lib/navigation.js\";\n\timport PlusIcon from \"@lucide/svelte/icons/plus\";\n\timport Customizer from \"./customizer.svelte\";\n\timport { page } from \"$app/state\";\n\timport InitializeDialog from \"../../routes/(app)/(layout)/(create)/components/initialize-dialog.svelte\";\n\timport ModeSwitcher from \"./mode-switcher.svelte\";\n\n\tconst colors = getColors();\n\n\tlet mobileNavRef: { closeMenu: () => void } | undefined;\n\n\tfunction closeMobileMenu() {\n\t\tif (mobileNavRef) {\n\t\t\tmobileNavRef.closeMenu();\n\t\t}\n\t}\n</script>\n\n<header class=\"bg-background sticky top-0 z-50 w-full\">\n\t<div class=\"container-wrapper 3xl:fixed:px-0 px-6\">\n\t\t<div\n\t\t\tclass=\"3xl:fixed:container flex h-(--header-height) items-center gap-2 **:data-[slot=separator]:h-4!\"\n\t\t>\n\t\t\t<MobileNav bind:this={mobileNavRef} class=\"flex lg:hidden\" />\n\t\t\t<Button href=\"/\" variant=\"ghost\" size=\"icon\" class=\"hidden size-8 lg:flex\">\n\t\t\t\t<Logo class=\"size-5\" />\n\t\t\t\t<span class=\"sr-only\">shadcn-svelte</span>\n\t\t\t</Button>\n\t\t\t<MainNav items={mainNavItems} class=\"hidden lg:flex\" />\n\t\t\t<div class=\"ms-auto flex items-center gap-2 md:flex-1 md:justify-end\">\n\t\t\t\t<div class=\"hidden w-full flex-1 md:flex md:w-auto md:flex-none\">\n\t\t\t\t\t<CommandMenu {colors} {closeMobileMenu} />\n\t\t\t\t</div>\n\t\t\t\t<Separator orientation=\"vertical\" class=\"ms-2 hidden lg:block\" />\n\t\t\t\t<GithubLink />\n\t\t\t\t<Separator orientation=\"vertical\" class=\"3xl:flex hidden\" />\n\t\t\t\t<LayoutToggle class=\"3xl:flex hidden\" />\n\t\t\t\t<Separator orientation=\"vertical\" />\n\t\t\t\t{#if page.url.pathname.startsWith(\"/create\")}\n\t\t\t\t\t<ModeSwitcher class=\"md:hidden\" />\n\t\t\t\t\t<Separator orientation=\"vertical\" />\n\t\t\t\t\t<InitializeDialog />\n\t\t\t\t{:else}\n\t\t\t\t\t<Customizer />\n\t\t\t\t\t<Button href=\"/create\" variant=\"default\" size=\"sm\">\n\t\t\t\t\t\t<PlusIcon />\n\t\t\t\t\t\tNew Project\n\t\t\t\t\t</Button>\n\t\t\t\t{/if}\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</header>\n"
  },
  {
    "path": "docs/src/lib/components/spinner.svelte",
    "content": "<script lang=\"ts\">\n\timport type { SVGAttributes } from \"svelte/elements\";\n\n\tlet { ...restProps }: SVGAttributes<SVGSVGElement> = $props();\n</script>\n\n<svg\n\txmlns=\"http://www.w3.org/2000/svg\"\n\twidth=\"24\"\n\theight=\"24\"\n\tviewBox=\"0 0 24 24\"\n\tfill=\"none\"\n\tstroke=\"currentColor\"\n\tstroke-width=\"2\"\n\tstroke-linecap=\"round\"\n\tstroke-linejoin=\"round\"\n\t{...restProps}\n>\n\t<path d=\"M21 12a9 9 0 1 1-6.219-8.56\" />\n</svg>\n"
  },
  {
    "path": "docs/src/lib/components/step.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet { children, class: className, ...props }: HTMLAttributes<HTMLElement> = $props();\n</script>\n\n<div\n\trole=\"heading\"\n\taria-level=\"3\"\n\tclass={cn(\"font-heading mt-8 scroll-m-32 text-base font-medium tracking-tight\", className)}\n\t{...props}\n>\n\t{@render children?.()}\n</div>\n"
  },
  {
    "path": "docs/src/lib/components/steps.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet { children, class: className, ...restProps }: HTMLAttributes<HTMLElement> = $props();\n</script>\n\n<div\n\tclass={cn(\n\t\t\"[&>[aria-level='3']]:step steps mb-12 [counter-reset:step] *:[aria-level='3']:first:!mt-0\",\n\t\tclassName\n\t)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</div>\n"
  },
  {
    "path": "docs/src/lib/components/svelte-white.svelte",
    "content": "<svg class=\"h-10 w-10\" viewBox=\"0 0 24 24\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n\t<path\n\t\tfill-rule=\"evenodd\"\n\t\tclip-rule=\"evenodd\"\n\t\td=\"M10.8939 1.06009C14.0742 -0.952947 18.4982 -0.0175221 20.7204 3.17494C21.8009 4.65933 22.2289 6.53011 21.8823 8.36018C21.7396 9.21419 21.4135 10.0276 20.9243 10.7596C21.6378 12.0813 21.862 13.6064 21.597 15.0907C21.2912 16.8598 20.231 18.4257 18.702 19.3814L13.0956 22.9399C9.91529 24.953 5.51168 24.0175 3.26913 20.825C2.20905 19.3407 1.78088 17.47 2.10704 15.6603C2.24975 14.8062 2.57598 13.9927 3.06526 13.2607C2.35175 11.9389 2.12751 10.4139 2.39253 8.9295C2.69834 7.16043 3.7585 5.59475 5.28751 4.63904L10.8939 1.06009ZM18.4165 4.63904C17.3564 3.11402 15.4605 2.40226 13.6461 2.86992C13.2384 2.99193 12.8509 3.1546 12.5043 3.37828L6.89795 6.93678C5.98056 7.50614 5.32824 8.4619 5.14476 9.51927C4.94089 10.6173 5.206 11.7357 5.83799 12.6304C6.8981 14.1554 8.79398 14.8672 10.6084 14.3995C11.0161 14.2978 11.4036 14.1351 11.7502 13.9114L13.8908 12.5492C13.9927 12.4882 14.1149 12.4474 14.2372 12.4068C14.7877 12.2644 15.3586 12.4677 15.6848 12.9354C15.8683 13.1997 15.9498 13.5455 15.8887 13.8709C15.8275 14.1962 15.6439 14.4605 15.3585 14.6435L9.77262 18.202C9.67068 18.263 9.54832 18.3038 9.426 18.3444C8.87558 18.4867 8.30481 18.263 7.97861 17.7954C7.81552 17.5513 7.73385 17.2462 7.75424 16.9615L7.77474 16.7582L7.57088 16.6972C6.77579 16.4532 6.0417 16.0873 5.36894 15.5993L5.08364 15.396L4.9817 15.7212C4.94094 15.9042 4.90003 16.0668 4.85926 16.2498C4.67578 17.3479 4.92042 18.4664 5.5728 19.3611C6.63292 20.8862 8.52898 21.5977 10.3434 21.1301C10.7511 21.0081 11.1384 20.8454 11.485 20.6217L17.0914 17.0632C18.0088 16.4939 18.6613 15.5383 18.8448 14.4809C19.0283 13.3829 18.7836 12.2643 18.1312 11.3696C17.0711 9.84456 15.175 9.133 13.3606 9.60069C12.9529 9.72269 12.5656 9.88538 12.219 10.109L10.0784 11.4713C9.97649 11.5323 9.85412 11.573 9.7318 11.6137C9.18138 11.756 8.61061 11.5527 8.28442 11.085C8.10093 10.8207 8.01939 10.4749 8.08055 10.1496C8.14173 9.82425 8.32514 9.55988 8.61053 9.37689L14.1966 5.81839C14.2985 5.75742 14.4207 5.71667 14.543 5.67601C15.0935 5.53367 15.6644 5.73713 15.9906 6.20482C16.1537 6.44882 16.2352 6.7538 16.2148 7.03845L16.1945 7.24179L16.3983 7.30275C17.1934 7.54677 17.9273 7.91287 18.6001 8.40088L18.8856 8.60423L18.9875 8.27896C19.0487 8.09595 19.0893 7.93316 19.1301 7.75015C19.3135 6.65211 19.0689 5.53374 18.4165 4.63904Z\"\n\t\tfill=\"currentColor\"\n\t/>\n</svg>\n"
  },
  {
    "path": "docs/src/lib/components/tab.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet { children, class: className, ...restProps }: HTMLAttributes<HTMLElement> = $props();\n</script>\n\n<div class={cn(className)} {...restProps}>\n\t{@render children?.()}\n</div>\n"
  },
  {
    "path": "docs/src/lib/components/tailwind-indicator.svelte",
    "content": "<script lang=\"ts\">\n\timport { dev } from \"$app/environment\";\n</script>\n\n{#if dev}\n\t<div\n\t\tdata-tailwind-indicator=\"\"\n\t\tclass=\"fixed start-1 bottom-1 z-50 flex h-6 w-6 items-center justify-center rounded-full bg-gray-800 p-3 font-mono text-xs text-white\"\n\t>\n\t\t<div class=\"block sm:hidden\">xs</div>\n\t\t<div class=\"hidden sm:block md:hidden\">sm</div>\n\t\t<div class=\"hidden md:block lg:hidden\">md</div>\n\t\t<div class=\"hidden lg:block xl:hidden\">lg</div>\n\t\t<div class=\"hidden xl:block 2xl:hidden\">xl</div>\n\t\t<div class=\"hidden 2xl:block\">2xl</div>\n\t</div>\n{/if}\n"
  },
  {
    "path": "docs/src/lib/components/theme-customizer-code.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Tabs from \"$lib/registry/ui/tabs/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport CopyIcon from \"@tabler/icons-svelte/icons/copy\";\n\timport CheckIcon from \"@tabler/icons-svelte/icons/check\";\n\timport Css from \"./icons/css.svelte\";\n\timport ColorIndicator from \"./color-indicator.svelte\";\n\timport {\n\t\ttype BaseColor,\n\t\ttype BaseColorOKLCH,\n\t\tgetThemeCodeOKLCH,\n\t\tgetThemeCodeHSLV4,\n\t\tgetThemeCode,\n\t} from \"./theme-customizer.svelte\";\n\n\tinterface Props {\n\t\ttailwindVersion: \"v4-oklch\" | \"v4-hsl\" | \"v3\";\n\t\thasCopied: boolean;\n\t\tcopyToClipboard: (text: string) => void;\n\t\tactiveTheme: BaseColor | undefined;\n\t\tactiveThemeOKLCH: BaseColorOKLCH | undefined;\n\t}\n\n\tlet { tailwindVersion, hasCopied, copyToClipboard, activeTheme, activeThemeOKLCH }: Props =\n\t\t$props();\n</script>\n\n<Tabs.Root\n\tvalue={tailwindVersion}\n\tonValueChange={(v) => (tailwindVersion = v as \"v4-oklch\" | \"v4-hsl\" | \"v3\")}\n\tclass=\"min-w-0 px-4 pb-4 md:p-0\"\n>\n\t<Tabs.List>\n\t\t<Tabs.Trigger value=\"v4-oklch\">OKLCH</Tabs.Trigger>\n\t\t<Tabs.Trigger value=\"v4-hsl\">HSL</Tabs.Trigger>\n\t\t<Tabs.Trigger value=\"v3\">Tailwind v3</Tabs.Trigger>\n\t</Tabs.List>\n\n\t<Tabs.Content value=\"v4-oklch\">\n\t\t<figure data-rehype-pretty-code-figure class=\"mx-0! mt-0 rounded-lg\">\n\t\t\t<figcaption\n\t\t\t\tclass=\"text-code-foreground [&_svg]:text-code-foreground flex items-center gap-2 [&_svg]:size-4 [&_svg]:opacity-70\"\n\t\t\t\tdata-rehype-pretty-code-title=\"\"\n\t\t\t\tdata-language=\"css\"\n\t\t\t\tdata-theme=\"github-dark github-light-default\"\n\t\t\t>\n\t\t\t\t<Css class=\"fill-foreground\" />\n\t\t\t\tapp/globals.css\n\t\t\t</figcaption>\n\t\t\t<pre\n\t\t\t\tclass=\"no-scrollbar max-h-[300px] min-w-0 overflow-x-auto px-4 py-3.5 outline-none has-data-highlighted-line:px-0 has-data-line-numbers:px-0 has-data-[slot=tabs]:p-0 md:max-h-[450px]\">\n\t\t\t\t<Button\n\t\t\t\t\tdata-slot=\"copy-button\"\n\t\t\t\t\tsize=\"icon\"\n\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\tclass=\"bg-code text-code-foreground absolute top-3 right-2 z-10 size-7 shadow-none hover:opacity-100 focus-visible:opacity-100\"\n\t\t\t\t\tonclick={() => {\n\t\t\t\t\t\tcopyToClipboard(getThemeCodeOKLCH(activeThemeOKLCH, 0.65));\n\t\t\t\t\t}}>\n\t\t\t\t\t<span class=\"sr-only\">Copy</span>\n\t\t\t\t\t{#if hasCopied}\n\t\t\t\t\t\t<CheckIcon />\n\t\t\t\t\t{:else}\n\t\t\t\t\t\t<CopyIcon />\n\t\t\t\t\t{/if}\n\t\t\t\t</Button>\n\t\t\t\t<code data-line-numbers data-language=\"css\" class=\"-my-10\">\n\t\t\t\t\t<span data-line class=\"line text-code-foreground\">&nbsp;:root &#123;</span>\n\t\t\t\t\t<span data-line class=\"line text-code-foreground\">&nbsp;&nbsp;&nbsp;--radius: 0.65rem;</span>\n\t\t\t\t\t{#each Object.entries(activeThemeOKLCH?.light || {}) as [key, value] (key)}\n\t\t\t\t\t\t<span data-line class=\"line text-code-foreground\"\n\t\t\t\t\t\t\t>&nbsp;&nbsp;&nbsp;--{key}: <ColorIndicator\n\t\t\t\t\t\t\t\tcolor={value}\n\t\t\t\t\t\t\t/> {value};</span\n\t\t\t\t\t\t>\n\t\t\t\t\t{/each}\n\t\t\t\t\t<span data-line class=\"line text-code-foreground\">&nbsp;&#125;</span>\n\t\t\t\t\t<span data-line class=\"line text-code-foreground\">&nbsp;</span>\n\t\t\t\t\t<span data-line class=\"line text-code-foreground\">&nbsp;.dark &#123;</span>\n\t\t\t\t\t{#each Object.entries(activeThemeOKLCH?.dark || {}) as [key, value] (key)}\n\t\t\t\t\t\t<span data-line class=\"line text-code-foreground\"\n\t\t\t\t\t\t\t>&nbsp;&nbsp;&nbsp;--{key}: <ColorIndicator\n\t\t\t\t\t\t\t\tcolor={value}\n\t\t\t\t\t\t\t/> {value};</span\n\t\t\t\t\t\t>\n\t\t\t\t\t{/each}\n\t\t\t\t\t<span data-line class=\"line text-code-foreground\">&nbsp;&#125;</span>\n\t\t\t\t</code>\n\t\t\t</pre>\n\t\t</figure>\n\t</Tabs.Content>\n\n\t<Tabs.Content value=\"v4-hsl\">\n\t\t<figure data-rehype-pretty-code-figure class=\"mx-0! mt-0 rounded-lg\">\n\t\t\t<figcaption\n\t\t\t\tclass=\"text-code-foreground [&_svg]:text-code-foreground flex items-center gap-2 [&_svg]:size-4 [&_svg]:opacity-70\"\n\t\t\t\tdata-rehype-pretty-code-title=\"\"\n\t\t\t\tdata-language=\"css\"\n\t\t\t\tdata-theme=\"github-dark github-light-default\"\n\t\t\t>\n\t\t\t\t<Css class=\"fill-foreground\" />\n\t\t\t\tapp/globals.css\n\t\t\t</figcaption>\n\t\t\t<pre\n\t\t\t\tclass=\"no-scrollbar max-h-[300px] min-w-0 overflow-x-auto px-4 py-3.5 outline-none has-data-highlighted-line:px-0 has-data-line-numbers:px-0 has-data-[slot=tabs]:p-0 md:max-h-[450px]\">\n\t\t\t\t<Button\n\t\t\t\t\tdata-slot=\"copy-button\"\n\t\t\t\t\tsize=\"icon\"\n\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\tclass=\"bg-code text-code-foreground absolute top-3 right-2 z-10 size-7 shadow-none hover:opacity-100 focus-visible:opacity-100\"\n\t\t\t\t\tonclick={() => {\n\t\t\t\t\t\tcopyToClipboard(getThemeCodeHSLV4(activeTheme, 0.65));\n\t\t\t\t\t}}>\n\t\t\t\t\t<span class=\"sr-only\" data-llm-ignore>Copy</span>\n\t\t\t\t\t{#if hasCopied}\n\t\t\t\t\t\t<CheckIcon />\n\t\t\t\t\t{:else}\n\t\t\t\t\t\t<CopyIcon />\n\t\t\t\t\t{/if}\n\t\t\t\t</Button>\n\t\t\t\t<code data-line-numbers data-language=\"css\" class=\"-my-10\">\n\t\t\t\t\t<span data-line class=\"line text-code-foreground\">&nbsp;:root &#123;</span>\n\t\t\t\t\t<span data-line class=\"line text-code-foreground\">&nbsp;&nbsp;&nbsp;--radius: 0.65rem;</span>\n\t\t\t\t\t{#each Object.entries(activeTheme?.cssVars.light || {}) as [key, value] (key)}\n\t\t\t\t\t\t<span data-line class=\"line text-code-foreground\"\n\t\t\t\t\t\t\t>&nbsp;&nbsp;&nbsp;--{key}: <ColorIndicator\n\t\t\t\t\t\t\t\tcolor={`hsl(${value})`}\n\t\t\t\t\t\t\t/> hsl({value});</span\n\t\t\t\t\t\t>\n\t\t\t\t\t{/each}\n\t\t\t\t\t<span data-line class=\"line text-code-foreground\">&nbsp;&#125;</span>\n\t\t\t\t\t<span data-line class=\"line text-code-foreground\">&nbsp;</span>\n\t\t\t\t\t<span data-line class=\"line text-code-foreground\">&nbsp;.dark &#123;</span>\n\t\t\t\t\t{#each Object.entries(activeTheme?.cssVars.dark || {}) as [key, value] (key)}\n\t\t\t\t\t\t<span data-line class=\"line text-code-foreground\"\n\t\t\t\t\t\t\t>&nbsp;&nbsp;&nbsp;--{key}: <ColorIndicator\n\t\t\t\t\t\t\t\tcolor={`hsl(${value})`}\n\t\t\t\t\t\t\t/> hsl({value});</span\n\t\t\t\t\t\t>\n\t\t\t\t\t{/each}\n\t\t\t\t\t<span data-line class=\"line text-code-foreground\">&nbsp;&#125;</span>\n\t\t\t\t</code>\n\t\t\t</pre>\n\t\t</figure>\n\t</Tabs.Content>\n\n\t<Tabs.Content value=\"v3\">\n\t\t<figure data-rehype-pretty-code-figure class=\"mx-0! mt-0 rounded-lg\">\n\t\t\t<figcaption\n\t\t\t\tclass=\"text-code-foreground [&_svg]:text-code-foreground flex items-center gap-2 [&_svg]:size-4 [&_svg]:opacity-70\"\n\t\t\t\tdata-rehype-pretty-code-title=\"\"\n\t\t\t\tdata-language=\"css\"\n\t\t\t\tdata-theme=\"github-dark github-light-default\"\n\t\t\t>\n\t\t\t\t<Css class=\"fill-foreground\" />\n\t\t\t\tapp/globals.css\n\t\t\t</figcaption>\n\t\t\t<pre\n\t\t\t\tclass=\"no-scrollbar max-h-[300px] min-w-0 overflow-x-auto px-4 py-3.5 outline-none has-data-highlighted-line:px-0 has-data-line-numbers:px-0 has-data-[slot=tabs]:p-0 md:max-h-[450px]\">\n\t\t\t\t<Button\n\t\t\t\t\tdata-slot=\"copy-button\"\n\t\t\t\t\tsize=\"icon\"\n\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\tclass=\"bg-code text-code-foreground absolute top-3 right-2 z-10 size-7 shadow-none hover:opacity-100 focus-visible:opacity-100\"\n\t\t\t\t\tonclick={() => {\n\t\t\t\t\t\tcopyToClipboard(getThemeCode(activeTheme, 0.5));\n\t\t\t\t\t}}>\n\t\t\t\t\t<span class=\"sr-only\">Copy</span>\n\t\t\t\t\t{#if hasCopied}\n\t\t\t\t\t\t<CheckIcon />\n\t\t\t\t\t{:else}\n\t\t\t\t\t\t<CopyIcon />\n\t\t\t\t\t{/if}\n\t\t\t\t</Button>\n\t\t\t\t<code data-line-numbers data-language=\"css\" class=\"-my-10\">\n\t\t\t\t\t<span data-line class=\"line\">@layer base &#123;</span>\n\t\t\t\t\t<span data-line class=\"line\">&nbsp;&nbsp;:root &#123;</span>\n\t\t\t\t\t<span data-line class=\"line\"\n\t\t\t\t\t\t>&nbsp;&nbsp;&nbsp;&nbsp;--background: <ColorIndicator\n\t\t\t\t\t\t\tcolor={`hsl(${activeTheme?.cssVars.light[\"background\"]})`}\n\t\t\t\t\t\t/> {activeTheme?.cssVars.light[\"background\"]};</span\n\t\t\t\t\t>\n\t\t\t\t\t<span data-line class=\"line\"\n\t\t\t\t\t\t>&nbsp;&nbsp;&nbsp;&nbsp;--foreground: <ColorIndicator\n\t\t\t\t\t\t\tcolor={`hsl(${activeTheme?.cssVars.light[\"foreground\"]})`}\n\t\t\t\t\t\t/> {activeTheme?.cssVars.light[\"foreground\"]};</span\n\t\t\t\t\t>\n\t\t\t\t\t{#each [\"card\", \"popover\", \"primary\", \"secondary\", \"muted\", \"accent\", \"destructive\"] as prefix (prefix)}\n\t\t\t\t\t\t<span data-line class=\"line\"\n\t\t\t\t\t\t\t>&nbsp;&nbsp;&nbsp;&nbsp;--{prefix}: <ColorIndicator\n\t\t\t\t\t\t\t\tcolor={`hsl(${activeTheme?.cssVars.light[prefix] || \"\"})`}\n\t\t\t\t\t\t\t/> {activeTheme?.cssVars.light[prefix]};</span\n\t\t\t\t\t\t>\n\t\t\t\t\t\t<span data-line class=\"line\"\n\t\t\t\t\t\t\t>&nbsp;&nbsp;&nbsp;&nbsp;--{prefix}-foreground: <ColorIndicator\n\t\t\t\t\t\t\t\tcolor={`hsl(${activeTheme?.cssVars.light[`${prefix}-foreground`] || \"\"})`}\n\t\t\t\t\t\t\t/> {activeTheme?.cssVars.light[`${prefix}-foreground`]};</span\n\t\t\t\t\t\t>\n\t\t\t\t\t{/each}\n\t\t\t\t\t<span data-line class=\"line\"\n\t\t\t\t\t\t>&nbsp;&nbsp;&nbsp;&nbsp;--border: <ColorIndicator\n\t\t\t\t\t\t\tcolor={`hsl(${activeTheme?.cssVars.light[\"border\"]})`}\n\t\t\t\t\t\t/> {activeTheme?.cssVars.light[\"border\"]};</span\n\t\t\t\t\t>\n\t\t\t\t\t<span data-line class=\"line\"\n\t\t\t\t\t\t>&nbsp;&nbsp;&nbsp;&nbsp;--input: <ColorIndicator\n\t\t\t\t\t\t\tcolor={`hsl(${activeTheme?.cssVars.light[\"input\"]})`}\n\t\t\t\t\t\t/> {activeTheme?.cssVars.light[\"input\"]};</span\n\t\t\t\t\t>\n\t\t\t\t\t<span data-line class=\"line\"\n\t\t\t\t\t\t>&nbsp;&nbsp;&nbsp;&nbsp;--ring: <ColorIndicator\n\t\t\t\t\t\t\tcolor={`hsl(${activeTheme?.cssVars.light[\"ring\"]})`}\n\t\t\t\t\t\t/> {activeTheme?.cssVars.light[\"ring\"]};</span\n\t\t\t\t\t>\n\t\t\t\t\t<span data-line class=\"line\">&nbsp;&nbsp;&nbsp;&nbsp;--radius: 0.5rem;</span>\n\t\t\t\t\t{#each [\"chart-1\", \"chart-2\", \"chart-3\", \"chart-4\", \"chart-5\"] as prefix (prefix)}\n\t\t\t\t\t\t<span data-line class=\"line\"\n\t\t\t\t\t\t\t>&nbsp;&nbsp;&nbsp;&nbsp;--{prefix}: <ColorIndicator\n\t\t\t\t\t\t\t\tcolor={`hsl(${activeTheme?.cssVars.light[prefix] || \"\"})`}\n\t\t\t\t\t\t\t/> {activeTheme?.cssVars.light[prefix]};</span\n\t\t\t\t\t\t>\n\t\t\t\t\t{/each}\n\t\t\t\t\t<span data-line class=\"line\">&nbsp;&nbsp;&#125;</span>\n\t\t\t\t\t<span data-line class=\"line\">&nbsp;</span>\n\t\t\t\t\t<span data-line class=\"line\">&nbsp;&nbsp;.dark &#123;</span>\n\t\t\t\t\t<span data-line class=\"line\"\n\t\t\t\t\t\t>&nbsp;&nbsp;&nbsp;&nbsp;--background: <ColorIndicator\n\t\t\t\t\t\t\tcolor={`hsl(${activeTheme?.cssVars.dark[\"background\"]})`}\n\t\t\t\t\t\t/> {activeTheme?.cssVars.dark[\"background\"]};</span\n\t\t\t\t\t>\n\t\t\t\t\t<span data-line class=\"line\"\n\t\t\t\t\t\t>&nbsp;&nbsp;&nbsp;&nbsp;--foreground: <ColorIndicator\n\t\t\t\t\t\t\tcolor={`hsl(${activeTheme?.cssVars.dark[\"foreground\"]})`}\n\t\t\t\t\t\t/> {activeTheme?.cssVars.dark[\"foreground\"]};</span\n\t\t\t\t\t>\n\t\t\t\t\t{#each [\"card\", \"popover\", \"primary\", \"secondary\", \"muted\", \"accent\", \"destructive\"] as prefix (prefix)}\n\t\t\t\t\t\t<span data-line class=\"line\"\n\t\t\t\t\t\t\t>&nbsp;&nbsp;&nbsp;&nbsp;--{prefix}: <ColorIndicator\n\t\t\t\t\t\t\t\tcolor={`hsl(${activeTheme?.cssVars.dark[prefix] || \"\"})`}\n\t\t\t\t\t\t\t/> {activeTheme?.cssVars.dark[prefix]};</span\n\t\t\t\t\t\t>\n\t\t\t\t\t\t<span data-line class=\"line\"\n\t\t\t\t\t\t\t>&nbsp;&nbsp;&nbsp;&nbsp;--{prefix}-foreground: <ColorIndicator\n\t\t\t\t\t\t\t\tcolor={`hsl(${activeTheme?.cssVars.dark[`${prefix}-foreground`] || \"\"})`}\n\t\t\t\t\t\t\t/> {activeTheme?.cssVars.dark[`${prefix}-foreground`]};</span\n\t\t\t\t\t\t>\n\t\t\t\t\t{/each}\n\t\t\t\t\t<span data-line class=\"line\"\n\t\t\t\t\t\t>&nbsp;&nbsp;&nbsp;&nbsp;--border: <ColorIndicator\n\t\t\t\t\t\t\tcolor={`hsl(${activeTheme?.cssVars.dark[\"border\"]})`}\n\t\t\t\t\t\t/> {activeTheme?.cssVars.dark[\"border\"]};</span\n\t\t\t\t\t>\n\t\t\t\t\t<span data-line class=\"line\"\n\t\t\t\t\t\t>&nbsp;&nbsp;&nbsp;&nbsp;--input: <ColorIndicator\n\t\t\t\t\t\t\tcolor={`hsl(${activeTheme?.cssVars.dark[\"input\"]})`}\n\t\t\t\t\t\t/> {activeTheme?.cssVars.dark[\"input\"]};</span\n\t\t\t\t\t>\n\t\t\t\t\t<span data-line class=\"line\"\n\t\t\t\t\t\t>&nbsp;&nbsp;&nbsp;&nbsp;--ring: <ColorIndicator\n\t\t\t\t\t\t\tcolor={`hsl(${activeTheme?.cssVars.dark[\"ring\"]})`}\n\t\t\t\t\t\t/> {activeTheme?.cssVars.dark[\"ring\"]};</span\n\t\t\t\t\t>\n\t\t\t\t\t{#each [\"chart-1\", \"chart-2\", \"chart-3\", \"chart-4\", \"chart-5\"] as prefix (prefix)}\n\t\t\t\t\t\t<span data-line class=\"line\"\n\t\t\t\t\t\t\t>&nbsp;&nbsp;&nbsp;&nbsp;--{prefix}: <ColorIndicator\n\t\t\t\t\t\t\t\tcolor={`hsl(${activeTheme?.cssVars.dark[prefix] || \"\"})`}\n\t\t\t\t\t\t\t/> {activeTheme?.cssVars.dark[prefix]};</span\n\t\t\t\t\t\t>\n\t\t\t\t\t{/each}\n\t\t\t\t\t<span data-line class=\"line\">&nbsp;&nbsp;&#125;</span>\n\t\t\t\t\t<span data-line class=\"line\">&#125;</span>\n\t\t\t\t</code>\n\t\t\t</pre>\n\t\t</figure>\n\t</Tabs.Content>\n</Tabs.Root>\n"
  },
  {
    "path": "docs/src/lib/components/theme-customizer.svelte",
    "content": "<script lang=\"ts\" module>\n\texport interface BaseColorOKLCH {\n\t\tlight: Record<string, string>;\n\t\tdark: Record<string, string>;\n\t}\n\n\texport interface BaseColor {\n\t\tname: string;\n\t\tlabel: string;\n\t\tactiveColor: {\n\t\t\tlight: string;\n\t\t\tdark: string;\n\t\t};\n\t\tcssVars: {\n\t\t\tlight: Record<string, string>;\n\t\t\tdark: Record<string, string>;\n\t\t};\n\t}\n\n\texport function getThemeCodeOKLCH(theme: BaseColorOKLCH | undefined, radius: number) {\n\t\tif (!theme) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\tconst rootSection =\n\t\t\t\":root {\\n  --radius: \" +\n\t\t\tradius +\n\t\t\t\"rem;\\n\" +\n\t\t\tObject.entries(theme.light)\n\t\t\t\t.map((entry) => \"  --\" + entry[0] + \": \" + entry[1] + \";\")\n\t\t\t\t.join(\"\\n\") +\n\t\t\t\"\\n}\\n\\n.dark {\\n\" +\n\t\t\tObject.entries(theme.dark)\n\t\t\t\t.map((entry) => \"  --\" + entry[0] + \": \" + entry[1] + \";\")\n\t\t\t\t.join(\"\\n\") +\n\t\t\t\"\\n}\\n\";\n\n\t\treturn rootSection;\n\t}\n\n\texport function getThemeCodeHSLV4(theme: BaseColor | undefined, radius: number) {\n\t\tif (!theme) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\tconst rootSection =\n\t\t\t\":root {\\n  --radius: \" +\n\t\t\tradius +\n\t\t\t\"rem;\\n\" +\n\t\t\tObject.entries(theme.cssVars.light)\n\t\t\t\t.map((entry) => \"  --\" + entry[0] + \": hsl(\" + entry[1] + \");\")\n\t\t\t\t.join(\"\\n\") +\n\t\t\t\"\\n}\\n\\n.dark {\\n\" +\n\t\t\tObject.entries(theme.cssVars.dark)\n\t\t\t\t.map((entry) => \"  --\" + entry[0] + \": hsl(\" + entry[1] + \");\")\n\t\t\t\t.join(\"\\n\") +\n\t\t\t\"\\n}\\n\";\n\n\t\treturn rootSection;\n\t}\n\n\texport function getThemeCode(theme: BaseColor | undefined, radius: number) {\n\t\tif (!theme) {\n\t\t\treturn \"\";\n\t\t}\n\n\t\tconst replaceTemplate = (\n\t\t\tstr: string,\n\t\t\tobj: Record<\n\t\t\t\tstring,\n\t\t\t\tRecord<string, Record<string, string>> | Record<string, string> | string\n\t\t\t>\n\t\t) => {\n\t\t\tlet result = str;\n\t\t\tfor (const key in obj) {\n\t\t\t\tconst pattern = new RegExp(`<%- ${key}\\\\[[\"']([^\"']+)[\"']\\\\] %>`, \"g\");\n\t\t\t\tresult = result.replace(pattern, (_: string, k: string) => {\n\t\t\t\t\tconst value = obj[key];\n\t\t\t\t\tif (\n\t\t\t\t\t\ttypeof value === \"object\" &&\n\t\t\t\t\t\ttypeof (value as Record<string, string | Record<string, string>>)[k] ===\n\t\t\t\t\t\t\t\"string\"\n\t\t\t\t\t) {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t((value as Record<string, string | Record<string, string>>)[\n\t\t\t\t\t\t\t\tk\n\t\t\t\t\t\t\t] as string) ?? \"\"\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t\treturn \"\";\n\t\t\t\t});\n\t\t\t\tconst simplePattern = new RegExp(`<%- ${key} %>`, \"g\");\n\t\t\t\tresult = result.replace(simplePattern, String(obj[key]));\n\t\t\t}\n\t\t\treturn result;\n\t\t};\n\n\t\treturn replaceTemplate(BASE_STYLES_WITH_VARIABLES, {\n\t\t\tcolors: theme.cssVars,\n\t\t\tradius: radius.toString(),\n\t\t});\n\t}\n\n\texport const BASE_STYLES_WITH_VARIABLES = `\n@layer base {\n  :root {\n    --background: <%- colors.light[\"background\"] %>;\n    --foreground: <%- colors.light[\"foreground\"] %>;\n    --card: <%- colors.light[\"card\"] %>;\n    --card-foreground: <%- colors.light[\"card-foreground\"] %>;\n    --popover: <%- colors.light[\"popover\"] %>;\n    --popover-foreground: <%- colors.light[\"popover-foreground\"] %>;\n    --primary: <%- colors.light[\"primary\"] %>;\n    --primary-foreground: <%- colors.light[\"primary-foreground\"] %>;\n    --secondary: <%- colors.light[\"secondary\"] %>;\n    --secondary-foreground: <%- colors.light[\"secondary-foreground\"] %>;\n    --muted: <%- colors.light[\"muted\"] %>;\n    --muted-foreground: <%- colors.light[\"muted-foreground\"] %>;\n    --accent: <%- colors.light[\"accent\"] %>;\n    --accent-foreground: <%- colors.light[\"accent-foreground\"] %>;\n    --destructive: <%- colors.light[\"destructive\"] %>;\n    --destructive-foreground: <%- colors.light[\"destructive-foreground\"] %>;\n    --border: <%- colors.light[\"border\"] %>;\n    --input: <%- colors.light[\"input\"] %>;\n    --ring: <%- colors.light[\"ring\"] %>;\n    --radius: <%- radius %>rem;\n    --chart-1: <%- colors.light[\"chart-1\"] %>;\n    --chart-2: <%- colors.light[\"chart-2\"] %>;\n    --chart-3: <%- colors.light[\"chart-3\"] %>;\n    --chart-4: <%- colors.light[\"chart-4\"] %>;\n    --chart-5: <%- colors.light[\"chart-5\"] %>;\n  }\n\n  .dark {\n    --background: <%- colors.dark[\"background\"] %>;\n    --foreground: <%- colors.dark[\"foreground\"] %>;\n    --card: <%- colors.dark[\"card\"] %>;\n    --card-foreground: <%- colors.dark[\"card-foreground\"] %>;\n    --popover: <%- colors.dark[\"popover\"] %>;\n    --popover-foreground: <%- colors.dark[\"popover-foreground\"] %>;\n    --primary: <%- colors.dark[\"primary\"] %>;\n    --primary-foreground: <%- colors.dark[\"primary-foreground\"] %>;\n    --secondary: <%- colors.dark[\"secondary\"] %>;\n    --secondary-foreground: <%- colors.dark[\"secondary-foreground\"] %>;\n    --muted: <%- colors.dark[\"muted\"] %>;\n    --muted-foreground: <%- colors.dark[\"muted-foreground\"] %>;\n    --accent: <%- colors.dark[\"accent\"] %>;\n    --accent-foreground: <%- colors.dark[\"accent-foreground\"] %>;\n    --destructive: <%- colors.dark[\"destructive\"] %>;\n    --destructive-foreground: <%- colors.dark[\"destructive-foreground\"] %>;\n    --border: <%- colors.dark[\"border\"] %>;\n    --input: <%- colors.dark[\"input\"] %>;\n    --ring: <%- colors.dark[\"ring\"] %>;\n    --chart-1: <%- colors.dark[\"chart-1\"] %>;\n    --chart-2: <%- colors.dark[\"chart-2\"] %>;\n    --chart-3: <%- colors.dark[\"chart-3\"] %>;\n    --chart-4: <%- colors.dark[\"chart-4\"] %>;\n    --chart-5: <%- colors.dark[\"chart-5\"] %>;\n  }\n}\n`;\n</script>\n\n<script lang=\"ts\">\n\timport { baseColors, baseColorsOKLCH } from \"$lib/registry/registry-base-colors.js\";\n\timport { setTheme } from \"mode-watcher\";\n\timport { ScrollArea } from \"$lib/registry/ui/scroll-area/index.js\";\n\timport { cn } from \"$lib/utils.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport { Label } from \"$lib/registry/ui/label/index.js\";\n\timport * as Select from \"$lib/registry/ui/select/index.js\";\n\timport * as Drawer from \"$lib/registry/ui/drawer/index.js\";\n\timport * as Dialog from \"$lib/registry/ui/dialog/index.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\timport { UserConfigContext, type ActiveTheme } from \"$lib/user-config.svelte.js\";\n\timport IconCopy from \"@tabler/icons-svelte/icons/copy\";\n\timport ThemeCustomizerCode from \"./theme-customizer-code.svelte\";\n\tinterface Props extends HTMLAttributes<HTMLElement> {\n\t\tclass?: string;\n\t}\n\n\tlet { class: className, ...rest }: Props = $props();\n\n\tconst userConfig = UserConfigContext.get();\n\n\tconst THEMES = baseColors\n\t\t.filter((theme) => ![\"slate\", \"stone\", \"gray\", \"zinc\"].includes(theme.name))\n\t\t.sort((a, b) => a.name.localeCompare(b.name));\n\n\tconst coercedActiveTheme = $derived(\n\t\tuserConfig.current.activeTheme === \"default\" ? \"neutral\" : userConfig.current.activeTheme\n\t);\n\n\t// Code customizer state\n\tlet hasCopied = $state(false);\n\tlet tailwindVersion = $state<\"v4-oklch\" | \"v4-hsl\" | \"v3\">(\"v4-oklch\");\n\n\tconst activeTheme = $derived(baseColors.find((theme) => theme.name === coercedActiveTheme));\n\n\tconst activeThemeOKLCH = $derived(\n\t\tbaseColorsOKLCH[coercedActiveTheme as keyof typeof baseColorsOKLCH]\n\t);\n\n\tfunction copyToClipboard(text: string) {\n\t\tnavigator.clipboard.writeText(text);\n\t\thasCopied = true;\n\t\tsetTimeout(() => {\n\t\t\thasCopied = false;\n\t\t}, 2000);\n\t}\n</script>\n\n<div class={cn(\"flex w-full items-center gap-2\", className)} {...rest}>\n\t<!-- Theme selector for desktop -->\n\t<ScrollArea\n\t\tclass=\"hidden max-w-[96%] md:max-w-[600px] lg:flex lg:max-w-none\"\n\t\torientation=\"both\"\n\t\tscrollbarXClasses=\"invisible\"\n\t>\n\t\t<div class=\"flex items-center\">\n\t\t\t{#each THEMES as theme (theme.name)}\n\t\t\t\t<Button\n\t\t\t\t\tvariant=\"link\"\n\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\tdata-active={coercedActiveTheme === theme.name}\n\t\t\t\t\tclass=\"text-muted-foreground hover:text-primary data-[active=true]:text-primary flex h-7 cursor-pointer items-center justify-center px-4 text-center text-base font-medium capitalize transition-colors hover:no-underline\"\n\t\t\t\t\tonclick={() => {\n\t\t\t\t\t\tuserConfig.setConfig({ activeTheme: theme.name as ActiveTheme });\n\t\t\t\t\t\tsetTheme(theme.name);\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{theme.name === \"neutral\" ? \"Default\" : theme.name}\n\t\t\t\t</Button>\n\t\t\t{/each}\n\t\t</div>\n\t</ScrollArea>\n\n\t<!-- Theme selector for mobile -->\n\t<div class=\"flex items-center gap-2 lg:hidden\">\n\t\t<Label for=\"theme-selector\" class=\"sr-only\">Theme</Label>\n\t\t<Select.Root\n\t\t\ttype=\"single\"\n\t\t\tallowDeselect={false}\n\t\t\tbind:value={\n\t\t\t\t() => userConfig.current.activeTheme,\n\t\t\t\t(v) => {\n\t\t\t\t\tuserConfig.setConfig({ activeTheme: v ?? \"default\" });\n\t\t\t\t\tsetTheme(v ?? \"default\");\n\t\t\t\t}\n\t\t\t}\n\t\t>\n\t\t\t<Select.Trigger\n\t\t\t\tid=\"theme-selector\"\n\t\t\t\tsize=\"sm\"\n\t\t\t\tclass=\"justify-start capitalize shadow-none *:data-[slot=select-value]:w-12 *:data-[slot=select-value]:capitalize\"\n\t\t\t>\n\t\t\t\t<span class=\"font-medium\">Theme:</span>\n\t\t\t\t<span data-slot=\"select-value\">{coercedActiveTheme ?? \"Select a theme\"}</span>\n\t\t\t</Select.Trigger>\n\t\t\t<Select.Content align=\"end\">\n\t\t\t\t<Select.Group>\n\t\t\t\t\t{#each THEMES as theme (theme.name)}\n\t\t\t\t\t\t<Select.Item value={theme.name} class=\"capitalize data-selected:opacity-50\">\n\t\t\t\t\t\t\t{theme.name}\n\t\t\t\t\t\t</Select.Item>\n\t\t\t\t\t{/each}\n\t\t\t\t</Select.Group>\n\t\t\t</Select.Content>\n\t\t</Select.Root>\n\t</div>\n\n\t<!-- Copy Code Button - Drawer for mobile -->\n\t<Drawer.Root>\n\t\t<Drawer.Trigger class={cn(\"sm:hidden!\", \"ms-auto\")}>\n\t\t\t{#snippet child({ props })}\n\t\t\t\t<Button size=\"sm\" variant=\"secondary\" {...props}>Copy Code</Button>\n\t\t\t{/snippet}\n\t\t</Drawer.Trigger>\n\t\t<Drawer.Content class=\"h-auto\">\n\t\t\t<Drawer.Header>\n\t\t\t\t<Drawer.Title class=\"capitalize\">\n\t\t\t\t\t{coercedActiveTheme === \"neutral\" ? \"Neutral\" : coercedActiveTheme}\n\t\t\t\t</Drawer.Title>\n\t\t\t\t<Drawer.Description>\n\t\t\t\t\tCopy and paste the following code into your CSS file.\n\t\t\t\t</Drawer.Description>\n\t\t\t</Drawer.Header>\n\t\t\t<ThemeCustomizerCode\n\t\t\t\t{tailwindVersion}\n\t\t\t\t{hasCopied}\n\t\t\t\t{copyToClipboard}\n\t\t\t\t{activeTheme}\n\t\t\t\t{activeThemeOKLCH}\n\t\t\t/>\n\t\t</Drawer.Content>\n\t</Drawer.Root>\n\n\t<!-- Copy Code Button - Dialog for desktop -->\n\t<Dialog.Root>\n\t\t<Dialog.Trigger class={cn(\"hidden sm:flex!\", \"ms-auto\")}>\n\t\t\t{#snippet child({ props })}\n\t\t\t\t<Button size=\"sm\" class=\"ms-auto\" variant=\"secondary\" {...props}>\n\t\t\t\t\t<IconCopy />\n\t\t\t\t\t<span class=\"group-data-[size=icon-sm]/button:sr-only\">Copy Code</span>\n\t\t\t\t</Button>\n\t\t\t{/snippet}\n\t\t</Dialog.Trigger>\n\t\t<Dialog.Content\n\t\t\tclass=\"rounded-xl border-none bg-clip-padding shadow-2xl ring-4 ring-neutral-200/80 outline-none md:max-w-2xl dark:bg-neutral-800 dark:ring-neutral-900\"\n\t\t>\n\t\t\t<Dialog.Header>\n\t\t\t\t<Dialog.Title class=\"capitalize\">\n\t\t\t\t\t{coercedActiveTheme === \"neutral\" ? \"Neutral\" : coercedActiveTheme}\n\t\t\t\t</Dialog.Title>\n\t\t\t\t<Dialog.Description>\n\t\t\t\t\tCopy and paste the following code into your CSS file.\n\t\t\t\t</Dialog.Description>\n\t\t\t</Dialog.Header>\n\t\t\t<ThemeCustomizerCode\n\t\t\t\t{tailwindVersion}\n\t\t\t\t{hasCopied}\n\t\t\t\t{copyToClipboard}\n\t\t\t\t{activeTheme}\n\t\t\t\t{activeThemeOKLCH}\n\t\t\t/>\n\t\t</Dialog.Content>\n\t</Dialog.Root>\n</div>\n"
  },
  {
    "path": "docs/src/lib/components/theme-selector.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Select from \"$lib/registry/ui/select/index.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\timport { cn } from \"$lib/utils.js\";\n\timport Label from \"$lib/registry/ui/label/label.svelte\";\n\timport { useDesignSystem } from \"$lib/features/design-system/index.js\";\n\timport { THEMES } from \"$lib/registry/themes.js\";\n\n\tlet { class: className, ...restProps }: HTMLAttributes<HTMLElement> = $props();\n\n\tconst designSystem = useDesignSystem();\n\n\tconst themesList = $derived(\n\t\tTHEMES.map((theme) => ({\n\t\t\tname: theme.title,\n\t\t\tvalue: theme.name,\n\t\t})).sort((a, b) => a.name.localeCompare(b.name))\n\t);\n\n\tconst label = $derived(\n\t\tthemesList.find((t) => t.value === designSystem.theme)?.name ?? \"Neutral\"\n\t);\n</script>\n\n<div class={cn(\"flex items-center gap-2\", className)} {...restProps}>\n\t<Label for=\"theme-selector\" class=\"sr-only\">Theme</Label>\n\n\t<Select.Root type=\"single\" bind:value={designSystem.theme}>\n\t\t<Select.Trigger\n\t\t\tsize=\"sm\"\n\t\t\tclass=\"bg-secondary text-secondary-foreground border-secondary justify-start shadow-none\"\n\t\t\tid=\"theme-selector\"\n\t\t>\n\t\t\t<span class=\"font-medium\"> Theme: </span>\n\t\t\t<span class=\"w-12\">\n\t\t\t\t{label}\n\t\t\t</span>\n\t\t</Select.Trigger>\n\t\t<Select.Content align=\"end\" class=\"max-h-80\">\n\t\t\t<Select.Group>\n\t\t\t\t{#each themesList as theme (theme.value)}\n\t\t\t\t\t<Select.Item\n\t\t\t\t\t\tvalue={theme.value}\n\t\t\t\t\t\tlabel={theme.name}\n\t\t\t\t\t\tclass=\"data-[selected]:opacity-50\">{theme.name}</Select.Item\n\t\t\t\t\t>\n\t\t\t\t{/each}\n\t\t\t</Select.Group>\n\t\t</Select.Content>\n\t</Select.Root>\n</div>\n"
  },
  {
    "path": "docs/src/lib/config.ts",
    "content": "export const siteConfig = {\n\tname: \"shadcn-svelte\",\n\turl: \"https://shadcn-svelte.com\",\n\togImage: {\n\t\turl: \"https://shadcn-svelte.com/opengraph-image.png\",\n\t\twidth: \"1200\",\n\t\theight: \"630\",\n\t},\n\tdescription:\n\t\t\"A set of beautifully-designed, accessible components and a code distribution platform. Open Source. Open Code.\",\n\tkeywords: [\n\t\t\"shadcn-svelte\",\n\t\t\"svelte components\",\n\t\t\"svelte ui library\",\n\t\t\"svelte design system\",\n\t\t\"tailwindcss components\",\n\t\t\"headless ui svelte\",\n\t\t\"accessible svelte components\",\n\t\t\"copy paste components\",\n\t\t\"svelte component library\",\n\t\t\"sveltekit components\",\n\t\t\"svelte 5 components\",\n\t\t\"svelte runes\",\n\t\t\"bits-ui\",\n\t\t\"radix svelte\",\n\t\t\"shadcn svelte\",\n\t\t\"free ui components\",\n\t\t\"open source components\",\n\t\t\"modern ui svelte\",\n\t\t\"typescript svelte components\",\n\t\t\"responsive components\",\n\t\t\"dark mode components\",\n\t\t\"form components svelte\",\n\t\t\"dashboard components\",\n\t\t\"chart components svelte\",\n\t\t\"svelte chart components\",\n\t],\n\tlinks: {\n\t\tx: \"https://x.com/huntabyte\",\n\t\tgithub: \"https://github.com/huntabyte/shadcn-svelte\",\n\t},\n};\n"
  },
  {
    "path": "docs/src/lib/constants.ts",
    "content": "export const FALLBACK_STAR_COUNT = 8000;\n"
  },
  {
    "path": "docs/src/lib/docs.ts",
    "content": "import {\n\tcomponents,\n\tdarkMode,\n\tgettingStarted,\n\tinstallation,\n\tmigration,\n\tregistry,\n} from \"$content/index.js\";\nimport { error } from \"@sveltejs/kit\";\nimport type { Component } from \"svelte\";\n\nconst allDocs = [\n\t...gettingStarted,\n\t...migration,\n\t...components,\n\t...installation,\n\t...darkMode,\n\t...registry,\n];\n\ntype DocResolver = () => Promise<{ default: Component; metadata: components }>;\ntype DocMetadata = (typeof allDocs)[number];\n\nfunction transformPath(path: string): string {\n\treturn path.replace(\"/content/\", \"\").replace(\".md\", \"\").replace(\"/index\", \"\").trim();\n}\n\nfunction getDocMetadata(slug: string): DocMetadata | undefined {\n\treturn allDocs.find((doc) => doc.path === slug);\n}\n\nexport async function getDoc(\n\t_slug: string\n): Promise<{ component: Component; metadata: DocMetadata }> {\n\tconst modules = import.meta.glob(\"/content/**/*.md\");\n\tconst slug = _slug === \"\" ? \"index\" : _slug;\n\n\tlet match: { path?: string; resolver?: DocResolver } = {};\n\n\tfor (const [path, resolver] of Object.entries(modules)) {\n\t\tif (transformPath(path) === slug) {\n\t\t\tmatch = { path, resolver: resolver as unknown as DocResolver };\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tconst doc = await match?.resolver?.();\n\tconst metadata = getDocMetadata(slug);\n\n\tif (!doc || !metadata) {\n\t\terror(404, \"Could not find the documentation page.\");\n\t}\n\n\treturn {\n\t\tcomponent: doc.default,\n\t\tmetadata,\n\t};\n}\n"
  },
  {
    "path": "docs/src/lib/features/design-system/components/design-system-provider-state.svelte.ts",
    "content": "import { goto } from \"$app/navigation\";\nimport { page } from \"$app/state\";\nimport {\n\tBASE_THEMES,\n\tgetThemesForBaseColor,\n\ticonLibraries,\n\tMENU_ACCENTS,\n\tMENU_COLORS,\n\tRADII,\n\tSTYLES,\n} from \"$lib/registry/config.js\";\nimport { Context, PersistedState } from \"runed\";\nimport { SvelteURLSearchParams } from \"svelte/reactivity\";\nimport {\n\tapplyBias,\n\tRANDOMIZE_BIASES,\n\ttype RandomizeContext,\n} from \"../../../../routes/(app)/(layout)/(create)/lib/randomize-biases.js\";\nimport { StateHistory } from \"runed\";\nimport {\n\tdecodePreset,\n\tencodePreset,\n\tDEFAULT_PRESET_CONFIG,\n\ttype PresetConfig,\n\tPRESET_BASE_COLOR_KEYS,\n\tPRESET_FONTS,\n} from \"shadcn-svelte/preset\";\n\nexport interface IDesignSystemState extends PresetConfig {\n\tpreset: string;\n\tlocks: Lockable;\n\tlock: (key: keyof Lockable) => void;\n\tunlock: (key: keyof Lockable) => void;\n\treset: () => void;\n\trandomize: () => void;\n\tshareUrl: string;\n\tundo: () => void;\n\tredo: () => void;\n\tcanUndo: boolean;\n\tcanRedo: boolean;\n}\n\nexport type Lockable = {\n\tstyle: boolean;\n\tbaseColor: boolean;\n\ttheme: boolean;\n\ticonLibrary: boolean;\n\tfont: boolean;\n\titem: boolean;\n\tmenuAccent: boolean;\n\tmenuColor: boolean;\n\tradius: boolean;\n\ttemplate: boolean;\n};\n\nclass DesignSystemState implements IDesignSystemState {\n\t#history: StateHistory<string>;\n\t#preset: PersistedState<string>;\n\t#locks: PersistedState<Lockable>;\n\tconstructor() {\n\t\tthis.#preset = new PersistedState<string>(\n\t\t\t\"design-system-preset\",\n\t\t\tthis.#getSearchParam(\"preset\") ?? encodePreset(DEFAULT_PRESET_CONFIG)\n\t\t);\n\t\tthis.#locks = new PersistedState<Lockable>(\"locks\", {\n\t\t\tstyle: false,\n\t\t\tbaseColor: false,\n\t\t\ttheme: false,\n\t\t\ticonLibrary: false,\n\t\t\tfont: false,\n\t\t\titem: false,\n\t\t\tmenuAccent: false,\n\t\t\tmenuColor: false,\n\t\t\tradius: false,\n\t\t\ttemplate: false,\n\t\t});\n\n\t\tthis.reset = this.reset.bind(this);\n\t\tthis.randomize = this.randomize.bind(this);\n\n\t\tthis.#history = new StateHistory(\n\t\t\t() => this.#preset.current,\n\t\t\t(value) => {\n\t\t\t\tthis.#preset.current = value;\n\t\t\t}\n\t\t);\n\t}\n\n\tprivate get system(): PresetConfig {\n\t\tconst preset = decodePreset(this.#preset.current);\n\t\tif (!preset) return DEFAULT_PRESET_CONFIG;\n\t\treturn preset;\n\t}\n\n\tprivate set system(value: PresetConfig) {\n\t\tthis.#preset.current = encodePreset(value);\n\t\tconst searchParams = new SvelteURLSearchParams(page.url.searchParams);\n\t\tsearchParams.set(\"preset\", this.#preset.current);\n\t\tgoto(`${page.url.pathname}?${searchParams.toString()}${page.url.hash}`, {\n\t\t\treplaceState: true,\n\t\t\tnoScroll: true,\n\t\t\tkeepFocus: true,\n\t\t});\n\t}\n\n\tundo() {\n\t\tthis.#history.undo();\n\t}\n\n\tredo() {\n\t\tthis.#history.redo();\n\t}\n\n\tget canUndo() {\n\t\treturn this.#history.canUndo;\n\t}\n\n\tget canRedo() {\n\t\treturn this.#history.canRedo;\n\t}\n\n\tget preset() {\n\t\treturn this.#preset.current;\n\t}\n\n\t// locks\n\n\tlock(key: keyof Lockable): void {\n\t\tthis.#locks.current = { ...this.#locks.current, [key]: true };\n\t}\n\n\tunlock(key: keyof Lockable): void {\n\t\tthis.#locks.current = { ...this.#locks.current, [key]: false };\n\t}\n\n\tget locks(): Lockable {\n\t\treturn this.#locks.current;\n\t}\n\n\t// properties\n\n\t// Helper to safely access searchParams during prerendering\n\t#getSearchParam(key: string): string | null {\n\t\ttry {\n\t\t\treturn page.url.searchParams.get(key);\n\t\t} catch {\n\t\t\t// TODO: Fix prerendering - During prerendering, searchParams is not available\n\t\t\treturn null;\n\t\t}\n\t}\n\n\t#update(system: Partial<PresetConfig>) {\n\t\tthis.system = {\n\t\t\t...this.system,\n\t\t\t...system,\n\t\t};\n\t}\n\n\tget baseColor() {\n\t\treturn this.system.baseColor;\n\t}\n\n\tset baseColor(value: PresetConfig[\"baseColor\"]) {\n\t\t// if the theme is currently set to a base color, we need to update it to this value as well\n\t\tconst shouldUpdateTheme = BASE_THEMES.some((base) => base.name === this.theme);\n\n\t\tthis.#update({\n\t\t\ttheme: shouldUpdateTheme ? value : this.system.theme,\n\t\t\tbaseColor: value,\n\t\t});\n\t}\n\n\tget font() {\n\t\treturn this.system.font;\n\t}\n\n\tset font(value: PresetConfig[\"font\"]) {\n\t\tthis.#update({ font: value });\n\t}\n\n\tget iconLibrary() {\n\t\treturn this.system.iconLibrary;\n\t}\n\n\tset iconLibrary(value: PresetConfig[\"iconLibrary\"]) {\n\t\tthis.#update({ iconLibrary: value });\n\t}\n\n\tget menuAccent() {\n\t\treturn this.system.menuAccent;\n\t}\n\n\tset menuAccent(value: PresetConfig[\"menuAccent\"]) {\n\t\tthis.#update({ menuAccent: value });\n\t}\n\n\tget menuColor() {\n\t\treturn this.system.menuColor;\n\t}\n\n\tset menuColor(value: PresetConfig[\"menuColor\"]) {\n\t\tthis.#update({ menuColor: value });\n\t}\n\n\tget radius() {\n\t\treturn this.system.radius;\n\t}\n\n\tset radius(value: PresetConfig[\"radius\"]) {\n\t\tthis.#update({ radius: value });\n\t}\n\n\tget style() {\n\t\treturn this.system.style;\n\t}\n\n\tset style(value: PresetConfig[\"style\"]) {\n\t\tthis.#update({ style: value });\n\t}\n\n\tget theme() {\n\t\treturn this.system.theme;\n\t}\n\n\tset theme(value: PresetConfig[\"theme\"]) {\n\t\tthis.#update({ theme: value });\n\t}\n\n\treset() {\n\t\tthis.system = DEFAULT_PRESET_CONFIG;\n\t}\n\n\trandomize() {\n\t\t// Use current value if locked, otherwise randomize.\n\t\tconst selectedBaseColor = this.locks.baseColor\n\t\t\t? this.baseColor\n\t\t\t: randomItem(PRESET_BASE_COLOR_KEYS);\n\t\tconst selectedStyle = this.locks.style ? this.style : randomItem(STYLES).name;\n\n\t\tconst context: RandomizeContext = {\n\t\t\tbaseColor: selectedBaseColor,\n\t\t\tstyle: selectedStyle,\n\t\t};\n\n\t\tconst availableThemes = getThemesForBaseColor(selectedBaseColor);\n\t\tconst availableRadii = applyBias(RADII, context, RANDOMIZE_BIASES.radius);\n\n\t\tconst selectedTheme = this.locks.theme ? this.theme : randomItem(availableThemes).name;\n\t\tconst selectedFont = this.locks.font ? this.font : randomItem(PRESET_FONTS);\n\t\tconst selectedRadius = this.locks.radius ? this.radius : randomItem(availableRadii).name;\n\t\tconst selectedIconLibrary = this.locks.iconLibrary\n\t\t\t? this.iconLibrary\n\t\t\t: (\n\t\t\t\t\trandomItem(\n\t\t\t\t\t\tObject.values(iconLibraries)\n\t\t\t\t\t) as (typeof iconLibraries)[keyof typeof iconLibraries]\n\t\t\t\t).name;\n\t\tconst selectedMenuAccent = this.locks.menuAccent\n\t\t\t? this.menuAccent\n\t\t\t: randomItem(MENU_ACCENTS).value;\n\t\tconst selectedMenuColor = this.locks.menuColor\n\t\t\t? this.menuColor\n\t\t\t: randomItem(MENU_COLORS).value;\n\n\t\t// Update context with selected values for potential future biases.\n\t\tcontext.theme = selectedTheme;\n\t\tcontext.font = selectedFont;\n\t\tcontext.radius = selectedRadius;\n\t\tcontext.iconLibrary = selectedIconLibrary;\n\t\tcontext.menuAccent = selectedMenuAccent;\n\t\tcontext.menuColor = selectedMenuColor;\n\n\t\tthis.system = {\n\t\t\tbaseColor: selectedBaseColor,\n\t\t\tstyle: selectedStyle,\n\t\t\ttheme: selectedTheme,\n\t\t\tfont: selectedFont,\n\t\t\tradius: selectedRadius,\n\t\t\ticonLibrary: selectedIconLibrary,\n\t\t\tmenuAccent: selectedMenuAccent,\n\t\t\tmenuColor: selectedMenuColor,\n\t\t};\n\t}\n\n\tget shareUrl() {\n\t\treturn `${page.url.origin}/create?preset=${this.#preset.current}`;\n\t}\n}\n\nfunction randomItem<T>(array: readonly T[]): T {\n\treturn array[Math.floor(Math.random() * array.length)];\n}\n\nexport const DesignSystemContext = new Context<DesignSystemState>(\"DesignSystemContext\");\n\nexport function useDesignSystem(): IDesignSystemState {\n\treturn DesignSystemContext.get();\n}\n\nexport function setupDesignSystem(): IDesignSystemState {\n\treturn DesignSystemContext.set(new DesignSystemState());\n}\n\nexport { type DesignSystemState };\n"
  },
  {
    "path": "docs/src/lib/features/design-system/components/design-system-provider.svelte",
    "content": "<script lang=\"ts\">\n\timport type { Snippet } from \"svelte\";\n\timport {\n\t\tbuildRegistryTheme,\n\t\tDEFAULT_CONFIG,\n\t\tfonts,\n\t\tRADII,\n\t\ttype DesignSystemConfig,\n\t} from \"$lib/registry/config.js\";\n\timport { browser } from \"$app/environment\";\n\timport { watch } from \"runed\";\n\timport { setupDesignSystem } from \"./design-system-provider-state.svelte.js\";\n\timport { cn } from \"$lib/registry/lib/utils.js\";\n\timport { toggleMode } from \"mode-watcher\";\n\n\tconst uid = $props.id();\n\n\ttype Props = {\n\t\tchildren: Snippet;\n\t};\n\n\tlet { children }: Props = $props();\n\n\tconst designSystem = setupDesignSystem();\n\n\tconst radius = $derived(\n\t\tRADII.find((radius) => radius.name === designSystem.radius)?.value ?? RADII[0].value\n\t);\n\n\tconst registryTheme = $derived.by(() => {\n\t\tif (!designSystem.baseColor || !designSystem.theme || !designSystem.menuAccent || !radius) {\n\t\t\treturn null;\n\t\t}\n\n\t\tconst config: DesignSystemConfig = {\n\t\t\t...DEFAULT_CONFIG,\n\t\t\tbaseColor: designSystem.baseColor,\n\t\t\ttheme: designSystem.theme,\n\t\t\tmenuAccent: designSystem.menuAccent,\n\t\t\tradius: designSystem.radius,\n\t\t};\n\n\t\treturn buildRegistryTheme(config);\n\t});\n\n\twatch([() => registryTheme, () => browser], ([registryTheme, browser]) => {\n\t\tif (!browser) return;\n\t\tif (!registryTheme) return;\n\n\t\tconst body = document.body;\n\n\t\t// Update style class in place (remove old, add new).\n\t\tbody.classList.forEach((className) => {\n\t\t\tif (className.startsWith(\"style-\")) {\n\t\t\t\tbody.classList.remove(className);\n\t\t\t}\n\t\t});\n\t\tbody.classList.add(`style-${designSystem.style}`);\n\n\t\t// Update base color class in place.\n\t\tbody.classList.forEach((className) => {\n\t\t\tif (className.startsWith(\"base-color-\")) {\n\t\t\t\tbody.classList.remove(className);\n\t\t\t}\n\t\t});\n\t\tbody.classList.add(`base-color-${designSystem.baseColor}`);\n\n\t\tconst selectedFont =\n\t\t\tfonts.find((font) => font.name.replace(\"font-\", \"\") === designSystem.font)?.font\n\t\t\t\t.family ?? fonts[0].font.family;\n\t\tdocument.documentElement.style.setProperty(\"--font-sans\", selectedFont);\n\n\t\tconst styleId = uid;\n\t\tlet styleElement = document.getElementById(styleId) as HTMLStyleElement | null;\n\n\t\tif (!styleElement) {\n\t\t\tstyleElement = document.createElement(\"style\");\n\t\t\tstyleElement.id = styleId;\n\t\t\tdocument.head.appendChild(styleElement);\n\t\t}\n\n\t\tconst { light: lightVars, dark: darkVars, theme: themeVars } = registryTheme.cssVars;\n\n\t\tlet cssText = \":root {\\n\";\n\t\t// Add theme vars (shared across light/dark).\n\t\tif (themeVars) {\n\t\t\tObject.entries(themeVars).forEach(([key, value]) => {\n\t\t\t\tif (value) {\n\t\t\t\t\tcssText += `  --${key}: ${value};\\n`;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\t// Add light mode vars.\n\t\tif (lightVars) {\n\t\t\tObject.entries(lightVars).forEach(([key, value]) => {\n\t\t\t\tif (value) {\n\t\t\t\t\tcssText += `  --${key}: ${value};\\n`;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\tcssText += \"}\\n\\n\";\n\n\t\tcssText += \".dark {\\n\";\n\t\tif (darkVars) {\n\t\t\tObject.entries(darkVars).forEach(([key, value]) => {\n\t\t\t\tif (value) {\n\t\t\t\t\tcssText += `  --${key}: ${value};\\n`;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\tcssText += \"}\\n\";\n\n\t\tstyleElement.textContent = cssText;\n\t});\n\n\tlet menuObserver: MutationObserver | null = null;\n\tlet menuFrameId = 0;\n\n\twatch([() => designSystem.menuColor, () => browser], ([menuColor, browser]) => {\n\t\tif (menuObserver) {\n\t\t\tmenuObserver.disconnect();\n\t\t\tmenuObserver = null;\n\t\t}\n\t\tif (menuFrameId) {\n\t\t\twindow.cancelAnimationFrame(menuFrameId);\n\t\t\tmenuFrameId = 0;\n\t\t}\n\n\t\tif (!browser) return;\n\t\tif (!menuColor) return;\n\n\t\tconst isInvertedMenu = menuColor === \"inverted\" || menuColor === \"inverted-translucent\";\n\t\tconst isTranslucentMenu =\n\t\t\tmenuColor === \"default-translucent\" || menuColor === \"inverted-translucent\";\n\n\t\tconst updateMenuElements = () => {\n\t\t\tconst allElements = document.querySelectorAll<HTMLElement>(\n\t\t\t\t\".cn-menu-target, [data-menu-translucent]\"\n\t\t\t);\n\n\t\t\tif (allElements.length === 0) return;\n\n\t\t\tallElements.forEach((element) => {\n\t\t\t\telement.style.transition = \"none\";\n\t\t\t});\n\n\t\t\tallElements.forEach((element) => {\n\t\t\t\tif (element.classList.contains(\"cn-menu-target\")) {\n\t\t\t\t\tif (isInvertedMenu) {\n\t\t\t\t\t\telement.classList.add(\"dark\");\n\t\t\t\t\t} else {\n\t\t\t\t\t\telement.classList.remove(\"dark\");\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (isTranslucentMenu) {\n\t\t\t\t\telement.classList.add(\"cn-menu-translucent\");\n\t\t\t\t\telement.removeAttribute(\"data-menu-translucent\");\n\t\t\t\t} else if (element.classList.contains(\"cn-menu-translucent\")) {\n\t\t\t\t\telement.classList.remove(\"cn-menu-translucent\");\n\t\t\t\t\telement.setAttribute(\"data-menu-translucent\", \"\");\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tvoid document.body.offsetHeight;\n\n\t\t\tallElements.forEach((element) => {\n\t\t\t\telement.style.transition = \"\";\n\t\t\t});\n\t\t};\n\n\t\tconst scheduleMenuUpdate = () => {\n\t\t\tif (menuFrameId) return;\n\n\t\t\tmenuFrameId = window.requestAnimationFrame(() => {\n\t\t\t\tmenuFrameId = 0;\n\t\t\t\tupdateMenuElements();\n\t\t\t});\n\t\t};\n\n\t\tupdateMenuElements();\n\n\t\tmenuObserver = new MutationObserver(() => {\n\t\t\tscheduleMenuUpdate();\n\t\t});\n\n\t\tmenuObserver.observe(document.body, {\n\t\t\tchildList: true,\n\t\t\tsubtree: true,\n\t\t});\n\t});\n\n\tfunction handleKeyDown(e: KeyboardEvent) {\n\t\t// randomize on r/R\n\t\tif ((e.key === \"r\" || e.key === \"R\") && !e.metaKey && !e.ctrlKey) {\n\t\t\tif (\n\t\t\t\t(e.target instanceof HTMLElement && e.target.isContentEditable) ||\n\t\t\t\te.target instanceof HTMLInputElement ||\n\t\t\t\te.target instanceof HTMLTextAreaElement ||\n\t\t\t\te.target instanceof HTMLSelectElement\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\te.preventDefault();\n\t\t\tdesignSystem.randomize();\n\t\t}\n\n\t\t// toggle theme on d/D\n\t\tif ((e.key === \"d\" || e.key === \"D\") && !e.metaKey && !e.ctrlKey) {\n\t\t\tif (\n\t\t\t\t(e.target instanceof HTMLElement && e.target.isContentEditable) ||\n\t\t\t\te.target instanceof HTMLInputElement ||\n\t\t\t\te.target instanceof HTMLTextAreaElement ||\n\t\t\t\te.target instanceof HTMLSelectElement\n\t\t\t) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\te.preventDefault();\n\t\t\ttoggleMode();\n\t\t}\n\n\t\t// undo/redo on z/Z\n\t\tif ((e.key === \"z\" || e.key === \"Z\") && (e.metaKey || e.ctrlKey)) {\n\t\t\te.preventDefault();\n\t\t\tif (e.shiftKey) {\n\t\t\t\tdesignSystem.redo();\n\t\t\t} else {\n\t\t\t\tdesignSystem.undo();\n\t\t\t}\n\t\t}\n\t}\n</script>\n\n<svelte:window onkeydown={handleKeyDown} />\n\n<div\n\tdata-slot=\"design-system-provider\"\n\tstyle=\"display: contents;\"\n\tclass={cn(`style-${designSystem.style} base-color-${designSystem.baseColor}`)}\n>\n\t{@render children?.()}\n</div>\n"
  },
  {
    "path": "docs/src/lib/features/design-system/index.ts",
    "content": "export {\n\tuseDesignSystem,\n\ttype Lockable,\n\ttype IDesignSystemState,\n} from \"./components/design-system-provider-state.svelte.js\";\nexport { default as DesignSystemProvider } from \"./components/design-system-provider.svelte\";\n"
  },
  {
    "path": "docs/src/lib/highlight-code.ts",
    "content": "import { createHighlighterCore } from \"shiki/core\";\nimport { createJavaScriptRegexEngine } from \"shiki/engine/javascript\";\n\nconst highlightCodeCache = new Map<string, string>();\nconst jsEngine = createJavaScriptRegexEngine();\nconst highlighterPromise = createHighlighterCore({\n\tthemes: [import(\"@shikijs/themes/github-dark\"), import(\"@shikijs/themes/github-light-default\")],\n\tlangs: [import(\"@shikijs/langs/typescript\"), import(\"@shikijs/langs/svelte\")],\n\tengine: jsEngine,\n});\n\nexport async function highlightCode(code: string, language: string = \"svelte\"): Promise<string> {\n\tconst cachedCode = highlightCodeCache.get(code);\n\tif (cachedCode) return cachedCode;\n\n\tconst highlighter = await highlighterPromise;\n\n\tconst html = highlighter.codeToHtml(formatCode(code), {\n\t\tlang: language,\n\t\tthemes: {\n\t\t\tdark: \"github-dark\",\n\t\t\tlight: \"github-light-default\",\n\t\t},\n\t\ttransformers: [\n\t\t\t{\n\t\t\t\tpre(node) {\n\t\t\t\t\tnode.properties[\"class\"] =\n\t\t\t\t\t\t\"no-scrollbar min-w-0 overflow-x-auto px-4 py-3.5 outline-none has-[[data-highlighted-line]]:px-0 has-[[data-line-numbers]]:px-0 has-[[data-slot=tabs]]:p-0 !bg-transparent\";\n\t\t\t\t},\n\t\t\t\tcode(node) {\n\t\t\t\t\tnode.properties[\"data-line-numbers\"] = \"\";\n\t\t\t\t},\n\t\t\t\tline(node) {\n\t\t\t\t\tnode.properties[\"data-line\"] = \"\";\n\t\t\t\t},\n\t\t\t},\n\t\t],\n\t});\n\n\thighlightCodeCache.set(code, html);\n\n\treturn html;\n}\n\nfunction formatCode(code: string): string {\n\treturn code.replace(/\\t/g, \"  \");\n}\n"
  },
  {
    "path": "docs/src/lib/hooks/use-clipboard.svelte.ts",
    "content": "type Options = {\n\t/** The time before the copied status is reset. */\n\tdelay: number;\n\t/** Whether to reset the copied status after a delay. */\n\treset: boolean;\n};\n\n/** Use this hook to copy text to the clipboard and show a copied state.\n *\n * ## Usage\n * ```svelte\n * <script lang=\"ts\">\n * \t\timport { UseClipboard } from \"$lib/hooks/use-clipboard.svelte\";\n *\n * \t\tconst clipboard = new UseClipboard();\n * </script>\n *\n * <button onclick={clipboard.copy('Hello, World!')}>\n *     {#if clipboard.copied === 'success'}\n *         Copied!\n *     {:else if clipboard.copied === 'failure'}\n *         Failed to copy!\n *     {:else}\n *         Copy\n *     {/if}\n * </button>\n * ```\n *\n */\nexport class UseClipboard {\n\t#copiedStatus = $state<\"success\" | \"failure\">();\n\tdelay: number;\n\treset: boolean;\n\ttimeout: ReturnType<typeof setTimeout> | undefined = undefined;\n\t#lastCopied = $state<string | undefined>(undefined);\n\tconstructor({ delay = 2000, reset = true }: Partial<Options> = {}) {\n\t\tthis.delay = delay;\n\t\tthis.reset = reset;\n\t}\n\n\t/** Copies the given text to the users clipboard.\n\t *\n\t * ## Usage\n\t * ```ts\n\t * clipboard.copy('Hello, World!');\n\t * ```\n\t *\n\t * @param text\n\t * @returns\n\t */\n\tasync copy(text: string | number): Promise<\"success\" | \"failure\"> {\n\t\tif (this.timeout) {\n\t\t\tthis.#copiedStatus = undefined;\n\t\t\tclearTimeout(this.timeout);\n\t\t}\n\n\t\tthis.#copiedStatus = await copyText(text.toString());\n\n\t\tthis.timeout = setTimeout(() => {\n\t\t\tthis.#copiedStatus = undefined;\n\t\t}, this.delay);\n\n\t\treturn this.#copiedStatus;\n\t}\n\n\t/** True when the user has just copied to the clipboard. */\n\tget copied(): boolean {\n\t\treturn this.#copiedStatus === \"success\";\n\t}\n\n\t/**\tIndicates whether a copy has occurred\n\t * and gives a status of either `success` or `failure`. */\n\tget status(): \"success\" | \"failure\" | undefined {\n\t\treturn this.#copiedStatus;\n\t}\n\n\t/**\n\t * The last copied text.\n\t */\n\tget lastCopied(): string | undefined {\n\t\treturn this.#lastCopied;\n\t}\n}\n\nexport async function copyText(text: string): Promise<\"success\" | \"failure\"> {\n\ttry {\n\t\tif (navigator.clipboard && window.isSecureContext) {\n\t\t\tawait navigator.clipboard.writeText(text);\n\t\t\treturn \"success\";\n\t\t}\n\n\t\t// when navigator.clipboard is unavailable we fallback to this for wider browser compatibility\n\t\tconst textArea = document.createElement(\"textarea\");\n\t\ttextArea.value = text;\n\t\ttextArea.style.position = \"fixed\";\n\t\ttextArea.style.top = \"0\";\n\t\ttextArea.style.left = \"0\";\n\t\tdocument.body.appendChild(textArea);\n\t\ttextArea.select();\n\n\t\tconst successful = document.execCommand(\"copy\");\n\n\t\tdocument.body.removeChild(textArea);\n\n\t\treturn successful ? \"success\" : \"failure\";\n\t} catch {\n\t\treturn \"failure\";\n\t}\n}\n"
  },
  {
    "path": "docs/src/lib/hooks/use-is-mac.svelte.ts",
    "content": "import { browser } from \"$app/environment\";\n\nexport function useIsMac(): {\n\treadonly current: boolean;\n\treadonly cmdOrCtrl: string;\n\treadonly optionOrAlt: string;\n} {\n\tconst isMac = $derived(browser ? navigator.userAgent.includes(\"Mac\") : false);\n\n\treturn {\n\t\tget current(): boolean {\n\t\t\treturn isMac;\n\t\t},\n\t\tget cmdOrCtrl(): string {\n\t\t\treturn isMac ? \"⌘\" : \"Ctrl\";\n\t\t},\n\t\tget optionOrAlt(): string {\n\t\t\treturn isMac ? \"⌥\" : \"Alt\";\n\t\t},\n\t};\n}\n"
  },
  {
    "path": "docs/src/lib/hooks/use-mutation-observer.svelte.ts",
    "content": "export function useMutationObserver(\n\tref: () => HTMLElement | null,\n\tcallback: MutationCallback,\n\toptions: MutationObserverInit = {\n\t\tattributes: true,\n\t\tcharacterData: true,\n\t\tchildList: true,\n\t\tsubtree: true,\n\t}\n): void {\n\tconst element = $derived(ref());\n\t$effect(() => {\n\t\tif (!element) return;\n\t\tconst observer = new MutationObserver(callback);\n\t\tobserver.observe(element, options);\n\t\treturn () => observer.disconnect();\n\t});\n}\n"
  },
  {
    "path": "docs/src/lib/navigation.ts",
    "content": "import { components, installation, migration } from \"$content/index.js\";\nimport type { Component } from \"svelte\";\n\n/** List new components here to highlight them in the sidebar */\nexport const NEW_COMPONENTS = new Set([\n\t\"item\",\n\t\"button-group\",\n\t\"kbd\",\n\t\"spinner\",\n\t\"input-group\",\n\t\"field\",\n\t\"empty\",\n\t\"native-select\",\n]);\n\nexport type NavItem = {\n\ttitle: string;\n\thref?: string;\n\tdisabled?: boolean;\n\texternal?: boolean;\n\tlabel?: string;\n\ticon?: Component;\n\tindicator?: \"new\";\n};\n\nexport type SidebarNavItem = NavItem & {\n\titems: SidebarNavItem[];\n};\n\nexport type NavItemWithChildren = NavItem & {\n\titems: NavItemWithChildren[];\n};\n\nfunction generateSectionsNav(): SidebarNavItem[] {\n\tconst sectionsNavItems: SidebarNavItem[] = [\n\t\t{\n\t\t\ttitle: \"Get Started\",\n\t\t\thref: \"/docs\",\n\t\t\titems: [],\n\t\t},\n\t\t{\n\t\t\ttitle: \"Components\",\n\t\t\thref: \"/docs/components\",\n\t\t\titems: [],\n\t\t} /*\n\t\t{\n\t\t\ttitle: \"Directory\",\n\t\t\thref: \"/docs/directory\",\n\t\t\titems: [],\n\t\t},\n\t\t{\n\t\t\ttitle: \"MCP Server\",\n\t\t\thref: \"/docs/mcp\",\n\t\t\titems: [],\n\t\t},\n\t\t{\n\t\t\ttitle: \"Forms\",\n\t\t\thref: \"/docs/forms\",\n\t\t\titems: [],\n\t\t\t},*/,\n\t\t{\n\t\t\ttitle: \"Changelog\",\n\t\t\thref: \"/docs/changelog\",\n\t\t\titems: [],\n\t\t},\n\t];\n\n\treturn sectionsNavItems;\n}\n\nfunction generateGetStartedNav(): SidebarNavItem[] {\n\tconst getStartedNavItems: SidebarNavItem[] = [\n\t\t{\n\t\t\ttitle: \"Installation\",\n\t\t\thref: \"/docs/installation\",\n\t\t\titems: [],\n\t\t},\n\t\t{\n\t\t\ttitle: \"components.json\",\n\t\t\thref: \"/docs/components-json\",\n\t\t\titems: [],\n\t\t},\n\t\t{\n\t\t\ttitle: \"Theming\",\n\t\t\thref: \"/docs/theming\",\n\t\t\titems: [],\n\t\t},\n\t\t{\n\t\t\ttitle: \"Dark Mode\",\n\t\t\thref: \"/docs/dark-mode\",\n\t\t\titems: [],\n\t\t},\n\t\t{\n\t\t\ttitle: \"CLI\",\n\t\t\thref: \"/docs/cli\",\n\t\t\titems: [],\n\t\t},\n\t\t{\n\t\t\ttitle: \"JavaScript\",\n\t\t\thref: \"/docs/javascript\",\n\t\t\titems: [],\n\t\t},\n\t\t// {\n\t\t// \ttitle: \"Blocks\",\n\t\t// \thref: \"/docs/blocks\",\n\t\t// \titems: [],\n\t\t// },\n\t\t{\n\t\t\ttitle: \"Figma\",\n\t\t\thref: \"/docs/figma\",\n\t\t\titems: [],\n\t\t},\n\t\t{\n\t\t\ttitle: \"llms.txt\",\n\t\t\thref: \"/llms.txt\",\n\t\t\titems: [],\n\t\t},\n\t\t{\n\t\t\ttitle: \"Legacy Docs\",\n\t\t\thref: \"/docs/legacy\",\n\t\t\titems: [],\n\t\t},\n\t];\n\n\treturn getStartedNavItems;\n}\n\nconst INSTALL_ORDER = [\"SvelteKit\", \"Vite\", \"Astro\", \"Manual Installation\"];\n\nfunction generateInstallationNav(): SidebarNavItem[] {\n\tconst installationNavItems: SidebarNavItem[] = [];\n\n\tconst index = installation.find((doc) => doc.title === \"Installation\");\n\tif (index) {\n\t\tinstallationNavItems.push({\n\t\t\ttitle: index.title,\n\t\t\thref: `/docs/installation`,\n\t\t\titems: [],\n\t\t});\n\t}\n\n\tfor (const doc of installation) {\n\t\tinstallationNavItems.push({\n\t\t\ttitle: doc.title,\n\t\t\thref: `/docs/installation/${doc.slug}`,\n\t\t\titems: [],\n\t\t});\n\t}\n\n\treturn installationNavItems.sort((a, b) => {\n\t\tconst aIndex = INSTALL_ORDER.indexOf(a.title);\n\t\tconst bIndex = INSTALL_ORDER.indexOf(b.title);\n\t\treturn aIndex - bIndex;\n\t});\n}\n\nfunction generateComponentsNav(): SidebarNavItem[] {\n\tconst componentsNavItems: SidebarNavItem[] = [];\n\tconst index = components.find((doc) => doc.title === \"Components\");\n\tif (index) {\n\t\tcomponentsNavItems.push({\n\t\t\ttitle: index.title,\n\t\t\thref: `/docs/components`,\n\t\t\titems: [],\n\t\t});\n\t}\n\n\tfor (const doc of components) {\n\t\tif (doc.title === \"Components\") continue;\n\t\tcomponentsNavItems.push({\n\t\t\ttitle: doc.title,\n\t\t\tindicator: NEW_COMPONENTS.has(doc.slug) ? \"new\" : undefined,\n\t\t\thref: `/docs/components/${doc.slug}`,\n\t\t\titems: [],\n\t\t});\n\t}\n\n\treturn componentsNavItems;\n}\n\nfunction generateDarkModeNav(): SidebarNavItem[] {\n\tconst darkModeNavItems: SidebarNavItem[] = [\n\t\t{\n\t\t\ttitle: \"Svelte\",\n\t\t\thref: \"/docs/dark-mode/svelte\",\n\t\t\titems: [],\n\t\t},\n\t\t{\n\t\t\ttitle: \"Astro\",\n\t\t\thref: \"/docs/dark-mode/astro\",\n\t\t\titems: [],\n\t\t},\n\t];\n\n\treturn darkModeNavItems;\n}\n\nfunction generateRegistryNav(): SidebarNavItem[] {\n\tconst registryNavItems: SidebarNavItem[] = [\n\t\t{\n\t\t\ttitle: \"Registry\",\n\t\t\thref: \"/docs/registry\",\n\t\t\titems: [],\n\t\t},\n\t\t{\n\t\t\ttitle: \"Getting Started\",\n\t\t\thref: \"/docs/registry/getting-started\",\n\t\t\titems: [],\n\t\t},\n\t\t{\n\t\t\ttitle: \"FAQ\",\n\t\t\thref: \"/docs/registry/faq\",\n\t\t\titems: [],\n\t\t},\n\t\t{\n\t\t\ttitle: \"Examples\",\n\t\t\thref: \"/docs/registry/examples\",\n\t\t\titems: [],\n\t\t},\n\t\t{\n\t\t\ttitle: \"registry.json\",\n\t\t\thref: \"/docs/registry/registry-json\",\n\t\t\titems: [],\n\t\t},\n\t\t{\n\t\t\ttitle: \"registry-item.json\",\n\t\t\thref: \"/docs/registry/registry-item-json\",\n\t\t\titems: [],\n\t\t},\n\t];\n\n\treturn registryNavItems;\n}\n\nfunction generateMigrationNav(): SidebarNavItem[] {\n\tconst migrationNavItems: SidebarNavItem[] = [];\n\n\tconst index = migration.find((doc) => doc.title === \"Migration\");\n\tif (index) {\n\t\tmigrationNavItems.push({\n\t\t\ttitle: index.title,\n\t\t\thref: `/docs/migration`,\n\t\t\titems: [],\n\t\t});\n\t}\n\n\tfor (const doc of migration) {\n\t\tif (doc.title === \"Migration\") continue;\n\t\tmigrationNavItems.push({\n\t\t\ttitle: doc.title,\n\t\t\thref: `/docs/migration/${doc.slug}`,\n\t\t\titems: [],\n\t\t});\n\t}\n\n\treturn migrationNavItems;\n}\nconst sectionsNav = generateSectionsNav();\nconst getStartedNav = generateGetStartedNav();\nconst migrationNav = generateMigrationNav();\nconst componentsNav = generateComponentsNav();\nconst installationNav = generateInstallationNav();\nconst darkModeNav = generateDarkModeNav();\nconst registryNav = generateRegistryNav();\n\nexport const sidebarNavItems: SidebarNavItem[] = [\n\t{\n\t\ttitle: \"Sections\",\n\t\titems: sectionsNav,\n\t},\n\t{\n\t\ttitle: \"Get Started\",\n\t\titems: getStartedNav,\n\t},\n\t{\n\t\ttitle: \"Migration\",\n\t\titems: migrationNav.filter((item) => item.title !== \"Migration\"),\n\t},\n\t{\n\t\ttitle: \"Components\",\n\t\titems: componentsNav.filter((item) => item.title !== \"Components\"),\n\t},\n\t{\n\t\ttitle: \"Installation\",\n\t\titems: installationNav.filter((item) => item.title !== \"Installation\"),\n\t},\n\t{\n\t\ttitle: \"Dark Mode\",\n\t\titems: darkModeNav,\n\t},\n\t{\n\t\ttitle: \"Registry\",\n\t\titems: registryNav,\n\t},\n];\n\nexport const mainNavItems: NavItem[] = [\n\t{\n\t\ttitle: \"Docs\",\n\t\thref: \"/docs/installation\",\n\t},\n\t{\n\t\ttitle: \"Components\",\n\t\thref: \"/docs/components\",\n\t},\n\t{\n\t\ttitle: \"Blocks\",\n\t\thref: \"/blocks\",\n\t},\n\t{\n\t\ttitle: \"Charts\",\n\t\thref: \"/charts/area\",\n\t},\n\t// {\n\t// \ttitle: \"Themes\",\n\t// \thref: \"/themes\",\n\t// },\n\t{\n\t\ttitle: \"Colors\",\n\t\thref: \"/colors\",\n\t},\n\t{\n\t\ttitle: \"Create\",\n\t\thref: \"/create\",\n\t},\n];\n\nexport function getFullNavItems(): Array<SidebarNavItem & { index: number }> {\n\treturn [\n\t\t...getStartedNav,\n\t\t...migrationNav,\n\t\t...componentsNav,\n\t\t...installationNav.filter((item) => item.title !== \"Installation\"),\n\t\t...darkModeNav.filter((item) => item.title !== \"Dark Mode\"),\n\t\t...registryNav,\n\t].map((item, index) => ({\n\t\t...item,\n\t\tindex,\n\t}));\n}\n\nconst fullNavItems = getFullNavItems();\n\nexport function findNeighbors(pathName: string): {\n\tprevious: SidebarNavItem | null;\n\tnext: SidebarNavItem | null;\n} {\n\tconst path = pathName.split(\"?\")[0].split(\"#\")[0];\n\tconst index = fullNavItems.findIndex((item) => item.href === path);\n\n\tlet previous: SidebarNavItem | null = null;\n\tfor (let i = index - 1; i >= 0; i--) {\n\t\tif (fullNavItems[i].href !== \"/llms.txt\") {\n\t\t\tprevious = fullNavItems[i];\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tlet next: SidebarNavItem | null = null;\n\tfor (let i = index + 1; i < fullNavItems.length; i++) {\n\t\tif (fullNavItems[i].href !== \"/llms.txt\") {\n\t\t\tnext = fullNavItems[i];\n\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn { previous, next };\n}\n"
  },
  {
    "path": "docs/src/lib/package-manager.ts",
    "content": "import { resolveCommand } from \"package-manager-detector/commands\";\nimport type { Agent, Command, ResolvedCommand } from \"package-manager-detector\";\n\nexport const PACKAGE_MANAGERS: Agent[] = [\"pnpm\", \"npm\", \"yarn\", \"bun\"] as const;\nexport type PackageManager = (typeof PACKAGE_MANAGERS)[number];\n\nexport type PackageManagerCommand = Command | \"create\";\n\nexport function getCommand(\n\tpm: Agent,\n\ttype: PackageManagerCommand,\n\tcommand: string | string[]\n): ResolvedCommand {\n\tlet args;\n\tif (typeof command === \"string\") {\n\t\targs = command.split(\" \");\n\t} else {\n\t\targs = command;\n\t}\n\n\t// special handling for create\n\tif (type === \"create\") return { command: pm, args: [\"create\", ...args] };\n\n\tconst cmd = resolveCommand(pm, type, args);\n\n\t// since docs are static any unresolved command is a code error\n\tif (cmd === null) throw new Error(\"Could not resolve command!\");\n\n\treturn cmd;\n}\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/calendar-01.svelte",
    "content": "<script lang=\"ts\">\n\timport Calendar from \"$lib/registry/ui/calendar/calendar.svelte\";\n\timport { CalendarDate } from \"@internationalized/date\";\n\n\tlet value = $state<CalendarDate | undefined>(new CalendarDate(2025, 6, 12));\n</script>\n\n<Calendar type=\"single\" bind:value class=\"rounded-lg border shadow-sm\" />\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/calendar-02.svelte",
    "content": "<script lang=\"ts\">\n\timport Calendar from \"$lib/registry/ui/calendar/calendar.svelte\";\n\timport { CalendarDate } from \"@internationalized/date\";\n\n\tlet value = $state<CalendarDate | undefined>(new CalendarDate(2025, 6, 12));\n</script>\n\n<Calendar type=\"single\" bind:value class=\"rounded-lg border shadow-sm\" numberOfMonths={2} />\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/calendar-03.svelte",
    "content": "<script lang=\"ts\">\n\timport Calendar from \"$lib/registry/ui/calendar/calendar.svelte\";\n\timport { CalendarDate, type DateValue } from \"@internationalized/date\";\n\n\tlet value = $state<CalendarDate[]>([\n\t\tnew CalendarDate(2025, 6, 12),\n\t\tnew CalendarDate(2025, 7, 24),\n\t]);\n\t// svelte-ignore state_referenced_locally\n\tlet placeholder = $state<DateValue>(value[0]);\n</script>\n\n<Calendar\n\ttype=\"multiple\"\n\tbind:value\n\tbind:placeholder\n\tmaxDays={5}\n\tclass=\"rounded-lg border shadow-sm\"\n\tnumberOfMonths={2}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/calendar-04.svelte",
    "content": "<script lang=\"ts\">\n\timport RangeCalendar from \"$lib/registry/ui/range-calendar/range-calendar.svelte\";\n\timport { CalendarDate } from \"@internationalized/date\";\n\timport type { DateRange } from \"bits-ui\";\n\n\tlet value = $state<DateRange>({\n\t\tstart: new CalendarDate(2025, 6, 9),\n\t\tend: new CalendarDate(2025, 6, 26),\n\t});\n</script>\n\n<RangeCalendar bind:value class=\"rounded-lg border shadow-sm\" />\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/calendar-05.svelte",
    "content": "<script lang=\"ts\">\n\timport RangeCalendar from \"$lib/registry/ui/range-calendar/range-calendar.svelte\";\n\timport { CalendarDate } from \"@internationalized/date\";\n\timport type { DateRange } from \"bits-ui\";\n\n\tlet value = $state<DateRange>({\n\t\tstart: new CalendarDate(2025, 6, 12),\n\t\tend: new CalendarDate(2025, 7, 15),\n\t});\n</script>\n\n<RangeCalendar bind:value class=\"rounded-lg border shadow-sm\" numberOfMonths={2} />\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/calendar-06.svelte",
    "content": "<script lang=\"ts\">\n\timport RangeCalendar from \"$lib/registry/ui/range-calendar/range-calendar.svelte\";\n\timport { CalendarDate } from \"@internationalized/date\";\n\timport type { DateRange } from \"bits-ui\";\n\n\tlet value = $state<DateRange>({\n\t\tstart: new CalendarDate(2025, 6, 12),\n\t\tend: new CalendarDate(2025, 6, 26),\n\t});\n</script>\n\n<div class=\"flex min-w-0 flex-col gap-2\">\n\t<RangeCalendar bind:value minDays={5} class=\"rounded-lg border shadow-sm\" />\n\t<div class=\"text-muted-foreground text-center text-xs\">A minimum of 5 days is required</div>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/calendar-07.svelte",
    "content": "<script lang=\"ts\">\n\timport RangeCalendar from \"$lib/registry/ui/range-calendar/range-calendar.svelte\";\n\timport { CalendarDate } from \"@internationalized/date\";\n\timport type { DateRange } from \"bits-ui\";\n\n\tlet value = $state<DateRange>({\n\t\tstart: new CalendarDate(2025, 6, 18),\n\t\tend: new CalendarDate(2025, 7, 7),\n\t});\n</script>\n\n<div class=\"flex min-w-0 flex-col gap-2\">\n\t<RangeCalendar\n\t\tbind:value\n\t\tminDays={2}\n\t\tmaxDays={20}\n\t\tnumberOfMonths={2}\n\t\tclass=\"rounded-lg border shadow-sm\"\n\t/>\n\t<div class=\"text-muted-foreground text-center text-xs\">\n\t\tYour stay must be between 2 and 20 nights\n\t</div>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/calendar-08.svelte",
    "content": "<script lang=\"ts\">\n\timport Calendar from \"$lib/registry/ui/calendar/calendar.svelte\";\n\timport { CalendarDate } from \"@internationalized/date\";\n\n\tlet value = $state<CalendarDate | undefined>(new CalendarDate(2025, 6, 12));\n</script>\n\n<Calendar\n\ttype=\"single\"\n\tbind:value\n\tclass=\"rounded-lg border shadow-sm\"\n\tminValue={new CalendarDate(2025, 6, 12)}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/calendar-09.svelte",
    "content": "<script lang=\"ts\">\n\timport RangeCalendar from \"$lib/registry/ui/range-calendar/range-calendar.svelte\";\n\timport { CalendarDate, isWeekend } from \"@internationalized/date\";\n\timport type { DateRange } from \"bits-ui\";\n\n\tlet value = $state<DateRange>({\n\t\tstart: new CalendarDate(2025, 6, 17),\n\t\tend: new CalendarDate(2025, 6, 20),\n\t});\n</script>\n\n<div class=\"flex min-w-0 flex-col gap-2\">\n\t<RangeCalendar\n\t\tbind:value\n\t\tnumberOfMonths={2}\n\t\tisDateDisabled={(date) => isWeekend(date, \"en-US\")}\n\t\tclass=\"rounded-lg border shadow-sm\"\n\t\texcludeDisabled\n\t/>\n\t<div class=\"text-muted-foreground text-center text-xs\">\n\t\tYour stay cannot extend through the weekend\n\t</div>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/calendar-10.svelte",
    "content": "<script lang=\"ts\">\n\timport Calendar from \"$lib/registry/ui/calendar/calendar.svelte\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport { CalendarDate, getLocalTimeZone, today } from \"@internationalized/date\";\n\n\tlet value = $state<CalendarDate | undefined>(new CalendarDate(2025, 6, 12));\n</script>\n\n<Card.Root>\n\t<Card.Header>\n\t\t<Card.Title>Appointment</Card.Title>\n\t\t<Card.Description>Find a date.</Card.Description>\n\t\t<Card.Action>\n\t\t\t<Button size=\"sm\" variant=\"outline\" onclick={() => (value = today(getLocalTimeZone()))}>\n\t\t\t\tToday\n\t\t\t</Button>\n\t\t</Card.Action>\n\t</Card.Header>\n\t<Card.Content>\n\t\t<Calendar type=\"single\" bind:value class=\"bg-transparent p-0\" />\n\t</Card.Content>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/calendar-11.svelte",
    "content": "<script lang=\"ts\">\n\timport RangeCalendar from \"$lib/registry/ui/range-calendar/range-calendar.svelte\";\n\timport { CalendarDate } from \"@internationalized/date\";\n\timport type { DateRange } from \"bits-ui\";\n\n\tlet value = $state<DateRange>({\n\t\tstart: new CalendarDate(2025, 6, 17),\n\t\tend: new CalendarDate(2025, 6, 20),\n\t});\n</script>\n\n<div class=\"flex min-w-0 flex-col gap-2\">\n\t<RangeCalendar\n\t\tbind:value\n\t\tnumberOfMonths={2}\n\t\tminValue={new CalendarDate(2025, 6, 1)}\n\t\tmaxValue={new CalendarDate(2025, 7, 31)}\n\t\tclass=\"rounded-lg border shadow-sm\"\n\t/>\n\t<div class=\"text-muted-foreground text-center text-xs\">We are open in June and July only.</div>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/calendar-12.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Select from \"$lib/registry/ui/select/index.js\";\n\timport { CalendarDate } from \"@internationalized/date\";\n\timport RangeCalendar from \"../ui/range-calendar/range-calendar.svelte\";\n\timport type { DateRange } from \"bits-ui\";\n\n\tlet value = $state<DateRange | undefined>({\n\t\tstart: new CalendarDate(2025, 9, 9),\n\t\tend: new CalendarDate(2025, 9, 17),\n\t});\n\n\tconst localizedStrings = {\n\t\ten: {\n\t\t\ttitle: \"Book an appointment\",\n\t\t\tdescription: \"Select the dates for your appointment\",\n\t\t},\n\t\tes: {\n\t\t\ttitle: \"Reserva una cita\",\n\t\t\tdescription: \"Selecciona las fechas para tu cita\",\n\t\t},\n\t} as const;\n\n\tlet locale = $state<keyof typeof localizedStrings>(\"es\");\n\n\tconst languageOptions = [\n\t\t{\n\t\t\tlabel: \"English\",\n\t\t\tvalue: \"en\",\n\t\t},\n\t\t{\n\t\t\tlabel: \"Español\",\n\t\t\tvalue: \"es\",\n\t\t},\n\t];\n\n\tconst selectedLanguage = $derived(\n\t\tlanguageOptions.find((option) => option.value === locale)?.label ?? \"Language\"\n\t);\n</script>\n\n<Card.Root>\n\t<Card.Header>\n\t\t<Card.Title>{localizedStrings[locale].title}</Card.Title>\n\t\t<Card.Description>{localizedStrings[locale].description}</Card.Description>\n\t\t<Card.Action>\n\t\t\t<Select.Root type=\"single\" bind:value={locale}>\n\t\t\t\t<Select.Trigger class=\"w-[100px]\" aria-label=\"Select language\">\n\t\t\t\t\t{selectedLanguage}\n\t\t\t\t</Select.Trigger>\n\t\t\t\t<Select.Content align=\"end\">\n\t\t\t\t\t{#each languageOptions as option (option.value)}\n\t\t\t\t\t\t<Select.Item value={option.value}>{option.label}</Select.Item>\n\t\t\t\t\t{/each}\n\t\t\t\t</Select.Content>\n\t\t\t</Select.Root>\n\t\t</Card.Action>\n\t</Card.Header>\n\t<Card.Content>\n\t\t<RangeCalendar\n\t\t\tbind:value\n\t\t\tnumberOfMonths={2}\n\t\t\t{locale}\n\t\t\tclass=\"bg-transparent p-0\"\n\t\t\tbuttonVariant=\"outline\"\n\t\t/>\n\t</Card.Content>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/calendar-13.svelte",
    "content": "<script lang=\"ts\">\n\timport Calendar from \"$lib/registry/ui/calendar/calendar.svelte\";\n\timport * as Select from \"$lib/registry/ui/select/index.js\";\n\timport { Label } from \"$lib/registry/ui/label/index.js\";\n\timport { CalendarDate } from \"@internationalized/date\";\n\timport type { ComponentProps } from \"svelte\";\n\n\tlet value = $state<CalendarDate>(new CalendarDate(2025, 6, 12));\n\tlet dropdown = $state<ComponentProps<typeof Calendar>[\"captionLayout\"]>(\"dropdown\");\n\n\tconst dropdownOptions = [\n\t\t{\n\t\t\tlabel: \"Month and Year\",\n\t\t\tvalue: \"dropdown\",\n\t\t},\n\t\t{\n\t\t\tlabel: \"Month Only\",\n\t\t\tvalue: \"dropdown-months\",\n\t\t},\n\t\t{\n\t\t\tlabel: \"Year Only\",\n\t\t\tvalue: \"dropdown-years\",\n\t\t},\n\t];\n\n\tconst selectedDropdown = $derived(\n\t\tdropdownOptions.find((option) => option.value === dropdown)?.label ?? \"Dropdown\"\n\t);\n\n\tconst id = $props.id();\n</script>\n\n<div class=\"flex flex-col gap-4\">\n\t<Calendar\n\t\ttype=\"single\"\n\t\tbind:value\n\t\tclass=\"rounded-lg border shadow-sm\"\n\t\tcaptionLayout={dropdown}\n\t/>\n\t<div class=\"flex flex-col gap-3\">\n\t\t<Label for=\"{id}-dropdown\" class=\"px-1\">Dropdown</Label>\n\t\t<Select.Root type=\"single\" bind:value={dropdown}>\n\t\t\t<Select.Trigger id=\"{id}-dropdown\" size=\"sm\" class=\"bg-background w-full\">\n\t\t\t\t{selectedDropdown}\n\t\t\t</Select.Trigger>\n\t\t\t<Select.Content align=\"center\">\n\t\t\t\t{#each dropdownOptions as option (option.value)}\n\t\t\t\t\t<Select.Item value={option.value}>{option.label}</Select.Item>\n\t\t\t\t{/each}\n\t\t\t</Select.Content>\n\t\t</Select.Root>\n\t</div>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/calendar-14.svelte",
    "content": "<script lang=\"ts\">\n\timport Calendar from \"$lib/registry/ui/calendar/calendar.svelte\";\n\timport { CalendarDate } from \"@internationalized/date\";\n\n\tlet value = $state<CalendarDate | undefined>(new CalendarDate(2025, 6, 12));\n\n\tconst bookedDates = Array.from({ length: 12 }, (_, i) => new CalendarDate(2025, 6, 15 + i));\n</script>\n\n<Calendar\n\ttype=\"single\"\n\tbind:value\n\tclass=\"rounded-lg border shadow-sm\"\n\tisDateUnavailable={(date) => bookedDates.some((d) => d.compare(date) === 0)}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/calendar-15.svelte",
    "content": "<script lang=\"ts\">\n\timport Construction from \"@lucide/svelte/icons/construction\";\n</script>\n\n<div class=\"flex h-full flex-col items-center justify-center gap-4\">\n\t<Construction class=\"size-10\" />\n\t<span>This block is under construction. Check back soon!</span>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/calendar-16.svelte",
    "content": "<script lang=\"ts\">\n\timport Calendar from \"$lib/registry/ui/calendar/calendar.svelte\";\n\timport { CalendarDate } from \"@internationalized/date\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport { Label } from \"$lib/registry/ui/label/index.js\";\n\timport { Input } from \"$lib/registry/ui/input/index.js\";\n\timport Clock2Icon from \"@lucide/svelte/icons/clock-2\";\n\n\tlet value = $state<CalendarDate | undefined>(new CalendarDate(2025, 6, 12));\n</script>\n\n<Card.Root class=\"w-fit py-4\">\n\t<Card.Content class=\"px-4\">\n\t\t<Calendar type=\"single\" bind:value class=\"bg-transparent p-0\" />\n\t</Card.Content>\n\t<Card.Footer class=\"flex flex-col gap-6 border-t px-4 !pt-4\">\n\t\t<div class=\"flex w-full flex-col gap-3\">\n\t\t\t<Label for=\"time-from\">Start Time</Label>\n\t\t\t<div class=\"relative flex w-full items-center gap-2\">\n\t\t\t\t<Clock2Icon\n\t\t\t\t\tclass=\"text-muted-foreground pointer-events-none absolute start-2.5 size-4 select-none\"\n\t\t\t\t/>\n\t\t\t\t<Input\n\t\t\t\t\tid=\"time-from\"\n\t\t\t\t\ttype=\"time\"\n\t\t\t\t\tstep=\"1\"\n\t\t\t\t\tvalue=\"10:30:00\"\n\t\t\t\t\tclass=\"appearance-none ps-8 [&::-webkit-calendar-picker-indicator]:hidden [&::-webkit-calendar-picker-indicator]:appearance-none\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"flex w-full flex-col gap-3\">\n\t\t\t<Label for=\"time-to\">End Time</Label>\n\t\t\t<div class=\"relative flex w-full items-center gap-2\">\n\t\t\t\t<Clock2Icon\n\t\t\t\t\tclass=\"text-muted-foreground pointer-events-none absolute start-2.5 size-4 select-none\"\n\t\t\t\t/>\n\t\t\t\t<Input\n\t\t\t\t\tid=\"time-to\"\n\t\t\t\t\ttype=\"time\"\n\t\t\t\t\tstep=\"1\"\n\t\t\t\t\tvalue=\"12:30:00\"\n\t\t\t\t\tclass=\"appearance-none ps-8 [&::-webkit-calendar-picker-indicator]:hidden [&::-webkit-calendar-picker-indicator]:appearance-none\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</div>\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/calendar-17.svelte",
    "content": "<script lang=\"ts\">\n\timport Calendar from \"$lib/registry/ui/calendar/calendar.svelte\";\n\timport { CalendarDate } from \"@internationalized/date\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport { Label } from \"$lib/registry/ui/label/index.js\";\n\timport { Input } from \"$lib/registry/ui/input/index.js\";\n\n\tlet value = $state<CalendarDate | undefined>(new CalendarDate(2025, 6, 12));\n</script>\n\n<Card.Root class=\"w-fit py-4\">\n\t<Card.Content class=\"px-4\">\n\t\t<Calendar\n\t\t\ttype=\"single\"\n\t\t\tbind:value\n\t\t\tclass=\"bg-transparent p-0 [--cell-size:--spacing(10.5)]\"\n\t\t/>\n\t</Card.Content>\n\t<Card.Footer class=\"flex gap-2 border-t px-4 !pt-4 *:[div]:w-full\">\n\t\t<div>\n\t\t\t<Label for=\"time-from\" class=\"sr-only\">Start Time</Label>\n\t\t\t<Input\n\t\t\t\tid=\"time-from\"\n\t\t\t\ttype=\"time\"\n\t\t\t\tstep=\"1\"\n\t\t\t\tvalue=\"10:30:00\"\n\t\t\t\tclass=\"appearance-none [&::-webkit-calendar-picker-indicator]:hidden [&::-webkit-calendar-picker-indicator]:appearance-none\"\n\t\t\t/>\n\t\t</div>\n\t\t<span>-</span>\n\t\t<div>\n\t\t\t<Label for=\"time-to\" class=\"sr-only\">End Time</Label>\n\t\t\t<Input\n\t\t\t\tid=\"time-to\"\n\t\t\t\ttype=\"time\"\n\t\t\t\tstep=\"1\"\n\t\t\t\tvalue=\"12:30:00\"\n\t\t\t\tclass=\"appearance-none [&::-webkit-calendar-picker-indicator]:hidden [&::-webkit-calendar-picker-indicator]:appearance-none\"\n\t\t\t/>\n\t\t</div>\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/calendar-18.svelte",
    "content": "<script lang=\"ts\">\n\timport Calendar from \"$lib/registry/ui/calendar/calendar.svelte\";\n\timport { CalendarDate } from \"@internationalized/date\";\n\n\tlet value = $state<CalendarDate | undefined>(new CalendarDate(2025, 6, 12));\n</script>\n\n<Calendar\n\ttype=\"single\"\n\tbind:value\n\tclass=\"rounded-lg border [--cell-size:--spacing(11)] md:[--cell-size:--spacing(12)]\"\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/calendar-19.svelte",
    "content": "<script lang=\"ts\">\n\timport Calendar from \"$lib/registry/ui/calendar/calendar.svelte\";\n\timport { CalendarDate, getLocalTimeZone, today } from \"@internationalized/date\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\n\tlet todayDate = today(getLocalTimeZone());\n\tlet value = $state<CalendarDate | undefined>(new CalendarDate(2025, 6, 12));\n</script>\n\n<Card.Root class=\"max-w-[300px] py-4\">\n\t<Card.Content class=\"px-4\">\n\t\t<Calendar\n\t\t\ttype=\"single\"\n\t\t\tbind:value\n\t\t\tclass=\"bg-transparent p-0 [--cell-size:--spacing(9.5)]\"\n\t\t/>\n\t</Card.Content>\n\t<Card.Footer class=\"flex flex-wrap gap-2 border-t px-4 !pt-4\">\n\t\t{#each [{ label: \"Today\", value: 0 }, { label: \"Tomorrow\", value: 1 }, { label: \"In 3 days\", value: 3 }, { label: \"In a week\", value: 7 }, { label: \"In 2 weeks\", value: 14 }] as preset (preset.value)}\n\t\t\t<Button\n\t\t\t\tvariant=\"outline\"\n\t\t\t\tsize=\"sm\"\n\t\t\t\tclass=\"flex-1\"\n\t\t\t\tonclick={() => {\n\t\t\t\t\tvalue = todayDate?.add({ days: preset.value });\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{preset.label}\n\t\t\t</Button>\n\t\t{/each}\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/calendar-20.svelte",
    "content": "<script lang=\"ts\">\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport Calendar from \"$lib/registry/ui/calendar/calendar.svelte\";\n\timport { CalendarDate, getLocalTimeZone } from \"@internationalized/date\";\n\n\tlet value = $state<CalendarDate | undefined>(new CalendarDate(2025, 6, 12));\n\tlet selectedTime = $state<string | null>(\"10:00\");\n\n\tconst bookedDates = Array.from({ length: 3 }, (_, i) => new CalendarDate(2025, 6, 17 + i));\n\tconst timeSlots = Array.from({ length: 37 }, (_, i) => {\n\t\tconst totalMinutes = i * 15;\n\t\tconst hour = Math.floor(totalMinutes / 60) + 9;\n\t\tconst minute = totalMinutes % 60;\n\t\treturn `${hour.toString().padStart(2, \"0\")}:${minute.toString().padStart(2, \"0\")}`;\n\t});\n</script>\n\n<Card.Root class=\"gap-0 p-0\">\n\t<Card.Content class=\"relative p-0 md:pe-48\">\n\t\t<div class=\"p-6\">\n\t\t\t<Calendar\n\t\t\t\ttype=\"single\"\n\t\t\t\tbind:value\n\t\t\t\tisDateUnavailable={(date) => bookedDates.some((d) => d.compare(date) === 0)}\n\t\t\t\tclass=\"bg-transparent p-0 [--cell-size:--spacing(10)] data-unavailable:line-through data-unavailable:opacity-100 md:[--cell-size:--spacing(12)] [&_[data-outside-month]]:hidden\"\n\t\t\t\tweekdayFormat=\"short\"\n\t\t\t/>\n\t\t</div>\n\t\t<div\n\t\t\tclass=\"no-scrollbar inset-y-0 end-0 flex max-h-72 w-full scroll-pb-6 flex-col gap-4 overflow-y-auto border-t p-6 md:absolute md:max-h-none md:w-48 md:border-s md:border-t-0\"\n\t\t>\n\t\t\t<div class=\"grid gap-2\">\n\t\t\t\t{#each timeSlots as time (time)}\n\t\t\t\t\t<Button\n\t\t\t\t\t\tvariant={selectedTime === time ? \"default\" : \"outline\"}\n\t\t\t\t\t\tonclick={() => (selectedTime = time)}\n\t\t\t\t\t\tclass=\"w-full shadow-none\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{time}\n\t\t\t\t\t</Button>\n\t\t\t\t{/each}\n\t\t\t</div>\n\t\t</div>\n\t</Card.Content>\n\t<Card.Footer class=\"flex flex-col gap-4 border-t px-6 !py-5 md:flex-row\">\n\t\t<div class=\"text-sm\">\n\t\t\t{#if value && selectedTime}\n\t\t\t\tYour meeting is booked for\n\t\t\t\t<span class=\"font-medium\">\n\t\t\t\t\t{value.toDate(getLocalTimeZone()).toLocaleDateString(\"en-US\", {\n\t\t\t\t\t\tweekday: \"long\",\n\t\t\t\t\t\tday: \"numeric\",\n\t\t\t\t\t\tmonth: \"short\",\n\t\t\t\t\t})}\n\t\t\t\t</span>\n\t\t\t\tat <span class=\"font-medium\">{selectedTime}</span>.\n\t\t\t{:else}\n\t\t\t\tSelect a date and time for your meeting.\n\t\t\t{/if}\n\t\t</div>\n\t\t<Button\n\t\t\tdisabled={!value || !selectedTime}\n\t\t\tclass=\"w-full md:ms-auto md:w-auto\"\n\t\t\tvariant=\"outline\"\n\t\t>\n\t\t\tContinue\n\t\t</Button>\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/calendar-21.svelte",
    "content": "<script lang=\"ts\">\n\timport RangeCalendar from \"$lib/registry/ui/range-calendar/range-calendar.svelte\";\n\timport RangeCalendarDay from \"$lib/registry/ui/range-calendar/range-calendar-day.svelte\";\n\timport { CalendarDate, isWeekend } from \"@internationalized/date\";\n\timport type { DateRange } from \"bits-ui\";\n\n\tlet value = $state<DateRange | undefined>({\n\t\tstart: new CalendarDate(2025, 6, 12),\n\t\tend: new CalendarDate(2025, 6, 17),\n\t});\n</script>\n\n<RangeCalendar\n\tbind:value\n\tclass=\"rounded-lg border shadow-sm [--cell-size:--spacing(11)] md:[--cell-size:--spacing(13)]\"\n\tmonthFormat=\"long\"\n\tcaptionLayout=\"dropdown\"\n>\n\t{#snippet day({ day, outsideMonth })}\n\t\t{@const dayIsWeekend = isWeekend(day, \"en-US\")}\n\t\t<RangeCalendarDay class=\"flex flex-col items-center\">\n\t\t\t{day.day}\n\t\t\t{#if !outsideMonth}\n\t\t\t\t<span>\n\t\t\t\t\t{dayIsWeekend ? \"$220\" : \"$100\"}\n\t\t\t\t</span>\n\t\t\t{/if}\n\t\t</RangeCalendarDay>\n\t{/snippet}\n</RangeCalendar>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/calendar-22.svelte",
    "content": "<script lang=\"ts\">\n\timport Calendar from \"$lib/registry/ui/calendar/calendar.svelte\";\n\timport * as Popover from \"$lib/registry/ui/popover/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport { Label } from \"$lib/registry/ui/label/index.js\";\n\timport ChevronDownIcon from \"@lucide/svelte/icons/chevron-down\";\n\timport { getLocalTimeZone, today, type CalendarDate } from \"@internationalized/date\";\n\n\tconst id = $props.id();\n\n\tlet open = $state(false);\n\tlet value = $state<CalendarDate | undefined>();\n</script>\n\n<div class=\"flex flex-col gap-3\">\n\t<Label for=\"{id}-date\" class=\"px-1\">Date of birth</Label>\n\t<Popover.Root bind:open>\n\t\t<Popover.Trigger id=\"{id}-date\">\n\t\t\t{#snippet child({ props })}\n\t\t\t\t<Button {...props} variant=\"outline\" class=\"w-48 justify-between font-normal\">\n\t\t\t\t\t{value ? value.toDate(getLocalTimeZone()).toLocaleDateString() : \"Select date\"}\n\t\t\t\t\t<ChevronDownIcon />\n\t\t\t\t</Button>\n\t\t\t{/snippet}\n\t\t</Popover.Trigger>\n\t\t<Popover.Content class=\"w-auto overflow-hidden p-0\" align=\"start\">\n\t\t\t<Calendar\n\t\t\t\ttype=\"single\"\n\t\t\t\tbind:value\n\t\t\t\tcaptionLayout=\"dropdown\"\n\t\t\t\tonValueChange={() => {\n\t\t\t\t\topen = false;\n\t\t\t\t}}\n\t\t\t\tmaxValue={today(getLocalTimeZone())}\n\t\t\t/>\n\t\t</Popover.Content>\n\t</Popover.Root>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/calendar-23.svelte",
    "content": "<script lang=\"ts\">\n\timport RangeCalendar from \"$lib/registry/ui/range-calendar/range-calendar.svelte\";\n\timport * as Popover from \"$lib/registry/ui/popover/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport { Label } from \"$lib/registry/ui/label/index.js\";\n\timport ChevronDownIcon from \"@lucide/svelte/icons/chevron-down\";\n\timport { getLocalTimeZone } from \"@internationalized/date\";\n\timport type { DateRange } from \"bits-ui\";\n\n\tconst id = $props.id();\n\n\tlet open = $state(false);\n\tlet value = $state<DateRange | undefined>();\n</script>\n\n<div class=\"flex flex-col gap-3\">\n\t<Label for=\"{id}-dates\" class=\"px-1\">Select your stay</Label>\n\t<Popover.Root bind:open>\n\t\t<Popover.Trigger id=\"{id}-dates\">\n\t\t\t{#snippet child({ props })}\n\t\t\t\t<Button {...props} variant=\"outline\" class=\"w-56 justify-between font-normal\">\n\t\t\t\t\t{value?.start && value?.end\n\t\t\t\t\t\t? `${value.start.toDate(getLocalTimeZone()).toLocaleDateString()} - ${value.end.toDate(getLocalTimeZone()).toLocaleDateString()}`\n\t\t\t\t\t\t: \"Select date\"}\n\t\t\t\t\t<ChevronDownIcon />\n\t\t\t\t</Button>\n\t\t\t{/snippet}\n\t\t</Popover.Trigger>\n\t\t<Popover.Content class=\"w-auto overflow-hidden p-0\" align=\"start\">\n\t\t\t<RangeCalendar bind:value captionLayout=\"dropdown\" />\n\t\t</Popover.Content>\n\t</Popover.Root>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/calendar-24.svelte",
    "content": "<script lang=\"ts\">\n\timport Calendar from \"$lib/registry/ui/calendar/calendar.svelte\";\n\timport * as Popover from \"$lib/registry/ui/popover/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport { Label } from \"$lib/registry/ui/label/index.js\";\n\timport { Input } from \"$lib/registry/ui/input/index.js\";\n\timport ChevronDownIcon from \"@lucide/svelte/icons/chevron-down\";\n\timport { getLocalTimeZone } from \"@internationalized/date\";\n\timport type { CalendarDate } from \"@internationalized/date\";\n\n\tconst id = $props.id();\n\n\tlet open = $state(false);\n\tlet value = $state<CalendarDate | undefined>();\n</script>\n\n<div class=\"flex gap-4\">\n\t<div class=\"flex flex-col gap-3\">\n\t\t<Label for=\"{id}-date\" class=\"px-1\">Date</Label>\n\t\t<Popover.Root bind:open>\n\t\t\t<Popover.Trigger id=\"{id}-date\">\n\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t<Button {...props} variant=\"outline\" class=\"w-32 justify-between font-normal\">\n\t\t\t\t\t\t{value\n\t\t\t\t\t\t\t? value.toDate(getLocalTimeZone()).toLocaleDateString()\n\t\t\t\t\t\t\t: \"Select date\"}\n\t\t\t\t\t\t<ChevronDownIcon />\n\t\t\t\t\t</Button>\n\t\t\t\t{/snippet}\n\t\t\t</Popover.Trigger>\n\t\t\t<Popover.Content class=\"w-auto overflow-hidden p-0\" align=\"start\">\n\t\t\t\t<Calendar\n\t\t\t\t\ttype=\"single\"\n\t\t\t\t\tbind:value\n\t\t\t\t\tonValueChange={() => {\n\t\t\t\t\t\topen = false;\n\t\t\t\t\t}}\n\t\t\t\t\tcaptionLayout=\"dropdown\"\n\t\t\t\t/>\n\t\t\t</Popover.Content>\n\t\t</Popover.Root>\n\t</div>\n\t<div class=\"flex flex-col gap-3\">\n\t\t<Label for=\"{id}-time\" class=\"px-1\">Time</Label>\n\t\t<Input\n\t\t\ttype=\"time\"\n\t\t\tid=\"{id}-time\"\n\t\t\tstep=\"1\"\n\t\t\tvalue=\"10:30:00\"\n\t\t\tclass=\"bg-background appearance-none [&::-webkit-calendar-picker-indicator]:hidden [&::-webkit-calendar-picker-indicator]:appearance-none\"\n\t\t/>\n\t</div>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/calendar-25.svelte",
    "content": "<script lang=\"ts\">\n\timport Calendar from \"$lib/registry/ui/calendar/calendar.svelte\";\n\timport * as Popover from \"$lib/registry/ui/popover/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport { Label } from \"$lib/registry/ui/label/index.js\";\n\timport { Input } from \"$lib/registry/ui/input/index.js\";\n\timport ChevronDownIcon from \"@lucide/svelte/icons/chevron-down\";\n\timport { getLocalTimeZone } from \"@internationalized/date\";\n\timport type { CalendarDate } from \"@internationalized/date\";\n\n\tconst id = $props.id();\n\n\tlet open = $state(false);\n\tlet value = $state<CalendarDate | undefined>();\n</script>\n\n<div class=\"flex flex-col gap-6\">\n\t<div class=\"flex flex-col gap-3\">\n\t\t<Label for=\"{id}-date\" class=\"px-1\">Date</Label>\n\t\t<Popover.Root bind:open>\n\t\t\t<Popover.Trigger id=\"{id}-date\">\n\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t<Button {...props} variant=\"outline\" class=\"w-full justify-between font-normal\">\n\t\t\t\t\t\t{value\n\t\t\t\t\t\t\t? value.toDate(getLocalTimeZone()).toLocaleDateString()\n\t\t\t\t\t\t\t: \"Select date\"}\n\t\t\t\t\t\t<ChevronDownIcon />\n\t\t\t\t\t</Button>\n\t\t\t\t{/snippet}\n\t\t\t</Popover.Trigger>\n\t\t\t<Popover.Content class=\"w-auto overflow-hidden p-0\" align=\"start\">\n\t\t\t\t<Calendar\n\t\t\t\t\ttype=\"single\"\n\t\t\t\t\tbind:value\n\t\t\t\t\tcaptionLayout=\"dropdown\"\n\t\t\t\t\tonValueChange={() => {\n\t\t\t\t\t\topen = false;\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t</Popover.Content>\n\t\t</Popover.Root>\n\t</div>\n\t<div class=\"flex gap-4\">\n\t\t<div class=\"flex flex-col gap-3\">\n\t\t\t<Label for=\"{id}-time-from\" class=\"px-1\">From</Label>\n\t\t\t<Input\n\t\t\t\ttype=\"time\"\n\t\t\t\tid=\"{id}-time-from\"\n\t\t\t\tstep=\"1\"\n\t\t\t\tvalue=\"10:30:00\"\n\t\t\t\tclass=\"bg-background appearance-none [&::-webkit-calendar-picker-indicator]:hidden [&::-webkit-calendar-picker-indicator]:appearance-none\"\n\t\t\t/>\n\t\t</div>\n\t\t<div class=\"flex flex-col gap-3\">\n\t\t\t<Label for=\"{id}-time-to\" class=\"px-1\">To</Label>\n\t\t\t<Input\n\t\t\t\ttype=\"time\"\n\t\t\t\tid=\"{id}-time-to\"\n\t\t\t\tstep=\"1\"\n\t\t\t\tvalue=\"12:30:00\"\n\t\t\t\tclass=\"bg-background appearance-none [&::-webkit-calendar-picker-indicator]:hidden [&::-webkit-calendar-picker-indicator]:appearance-none\"\n\t\t\t/>\n\t\t</div>\n\t</div>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/calendar-26.svelte",
    "content": "<script lang=\"ts\">\n\timport Calendar from \"$lib/registry/ui/calendar/calendar.svelte\";\n\timport * as Popover from \"$lib/registry/ui/popover/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport { Label } from \"$lib/registry/ui/label/index.js\";\n\timport { Input } from \"$lib/registry/ui/input/index.js\";\n\timport ChevronDownIcon from \"@lucide/svelte/icons/chevron-down\";\n\timport { getLocalTimeZone } from \"@internationalized/date\";\n\timport type { CalendarDate } from \"@internationalized/date\";\n\n\tconst id = $props.id();\n\n\tlet openFrom = $state(false);\n\tlet openTo = $state(false);\n\tlet valueFrom = $state<CalendarDate | undefined>();\n\tlet valueTo = $state<CalendarDate | undefined>();\n</script>\n\n<div class=\"flex flex-col gap-6\">\n\t<div class=\"flex gap-4\">\n\t\t<div class=\"flex flex-1 flex-col gap-3\">\n\t\t\t<Label for=\"{id}-date-from\" class=\"px-1\">Check-in</Label>\n\t\t\t<Popover.Root bind:open={openFrom}>\n\t\t\t\t<Popover.Trigger id=\"{id}-date-from\">\n\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t{...props}\n\t\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\t\tclass=\"w-full justify-between font-normal\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{valueFrom\n\t\t\t\t\t\t\t\t? valueFrom.toDate(getLocalTimeZone()).toLocaleDateString(\"en-US\", {\n\t\t\t\t\t\t\t\t\t\tday: \"2-digit\",\n\t\t\t\t\t\t\t\t\t\tmonth: \"short\",\n\t\t\t\t\t\t\t\t\t\tyear: \"numeric\",\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t: \"Select date\"}\n\t\t\t\t\t\t\t<ChevronDownIcon />\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t{/snippet}\n\t\t\t\t</Popover.Trigger>\n\t\t\t\t<Popover.Content class=\"w-auto overflow-hidden p-0\" align=\"start\">\n\t\t\t\t\t<Calendar\n\t\t\t\t\t\ttype=\"single\"\n\t\t\t\t\t\tbind:value={valueFrom}\n\t\t\t\t\t\tcaptionLayout=\"dropdown\"\n\t\t\t\t\t\tonValueChange={() => {\n\t\t\t\t\t\t\topenFrom = false;\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t</Popover.Content>\n\t\t\t</Popover.Root>\n\t\t</div>\n\t\t<div class=\"flex flex-col gap-3\">\n\t\t\t<Label for=\"{id}-time-from\" class=\"invisible px-1\">From</Label>\n\t\t\t<Input\n\t\t\t\ttype=\"time\"\n\t\t\t\tid=\"{id}-time-from\"\n\t\t\t\tstep=\"1\"\n\t\t\t\tvalue=\"10:30:00\"\n\t\t\t\tclass=\"bg-background appearance-none [&::-webkit-calendar-picker-indicator]:hidden [&::-webkit-calendar-picker-indicator]:appearance-none\"\n\t\t\t/>\n\t\t</div>\n\t</div>\n\t<div class=\"flex gap-4\">\n\t\t<div class=\"flex flex-1 flex-col gap-3\">\n\t\t\t<Label for=\"{id}-date-to\" class=\"px-1\">Check-out</Label>\n\t\t\t<Popover.Root bind:open={openTo}>\n\t\t\t\t<Popover.Trigger id=\"{id}-date-to\">\n\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t{...props}\n\t\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\t\tclass=\"w-full justify-between font-normal\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{valueTo\n\t\t\t\t\t\t\t\t? valueTo.toDate(getLocalTimeZone()).toLocaleDateString(\"en-US\", {\n\t\t\t\t\t\t\t\t\t\tday: \"2-digit\",\n\t\t\t\t\t\t\t\t\t\tmonth: \"short\",\n\t\t\t\t\t\t\t\t\t\tyear: \"numeric\",\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t: \"Select date\"}\n\t\t\t\t\t\t\t<ChevronDownIcon />\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t{/snippet}\n\t\t\t\t</Popover.Trigger>\n\t\t\t\t<Popover.Content class=\"w-auto overflow-hidden p-0\" align=\"start\">\n\t\t\t\t\t<Calendar\n\t\t\t\t\t\ttype=\"single\"\n\t\t\t\t\t\tbind:value={valueTo}\n\t\t\t\t\t\tcaptionLayout=\"dropdown\"\n\t\t\t\t\t\tonValueChange={() => {\n\t\t\t\t\t\t\topenTo = false;\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tisDateDisabled={(date) => {\n\t\t\t\t\t\t\treturn (valueFrom && date.compare(valueFrom) < 0) ?? false;\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t</Popover.Content>\n\t\t\t</Popover.Root>\n\t\t</div>\n\t\t<div class=\"flex flex-col gap-3\">\n\t\t\t<Label for=\"{id}-time-to\" class=\"invisible px-1\">To</Label>\n\t\t\t<Input\n\t\t\t\ttype=\"time\"\n\t\t\t\tid=\"{id}-time-to\"\n\t\t\t\tstep=\"1\"\n\t\t\t\tvalue=\"12:30:00\"\n\t\t\t\tclass=\"bg-background appearance-none [&::-webkit-calendar-picker-indicator]:hidden [&::-webkit-calendar-picker-indicator]:appearance-none\"\n\t\t\t/>\n\t\t</div>\n\t</div>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/calendar-27.svelte",
    "content": "<script lang=\"ts\">\n\timport CalendarIcon from \"@lucide/svelte/icons/calendar\";\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Popover from \"$lib/registry/ui/popover/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport { BarChart, Highlight, type ChartContextValue } from \"layerchart\";\n\timport RangeCalendar from \"$lib/registry/ui/range-calendar/range-calendar.svelte\";\n\timport type { DateRange } from \"bits-ui\";\n\timport { CalendarDate, getLocalTimeZone } from \"@internationalized/date\";\n\timport { scaleBand } from \"d3-scale\";\n\timport { cubicInOut } from \"svelte/easing\";\n\n\tlet value = $state<DateRange | undefined>({\n\t\tstart: new CalendarDate(2025, 6, 5),\n\t\tend: new CalendarDate(2025, 6, 20),\n\t});\n\n\tconst chartData = [\n\t\t{ date: new Date(\"2025-06-01\"), visitors: 178 },\n\t\t{ date: new Date(\"2025-06-02\"), visitors: 470 },\n\t\t{ date: new Date(\"2025-06-03\"), visitors: 103 },\n\t\t{ date: new Date(\"2025-06-04\"), visitors: 439 },\n\t\t{ date: new Date(\"2025-06-05\"), visitors: 88 },\n\t\t{ date: new Date(\"2025-06-06\"), visitors: 294 },\n\t\t{ date: new Date(\"2025-06-07\"), visitors: 323 },\n\t\t{ date: new Date(\"2025-06-08\"), visitors: 385 },\n\t\t{ date: new Date(\"2025-06-09\"), visitors: 438 },\n\t\t{ date: new Date(\"2025-06-10\"), visitors: 155 },\n\t\t{ date: new Date(\"2025-06-11\"), visitors: 92 },\n\t\t{ date: new Date(\"2025-06-12\"), visitors: 492 },\n\t\t{ date: new Date(\"2025-06-13\"), visitors: 81 },\n\t\t{ date: new Date(\"2025-06-14\"), visitors: 426 },\n\t\t{ date: new Date(\"2025-06-15\"), visitors: 307 },\n\t\t{ date: new Date(\"2025-06-16\"), visitors: 371 },\n\t\t{ date: new Date(\"2025-06-17\"), visitors: 475 },\n\t\t{ date: new Date(\"2025-06-18\"), visitors: 107 },\n\t\t{ date: new Date(\"2025-06-19\"), visitors: 341 },\n\t\t{ date: new Date(\"2025-06-20\"), visitors: 408 },\n\t\t{ date: new Date(\"2025-06-21\"), visitors: 169 },\n\t\t{ date: new Date(\"2025-06-22\"), visitors: 317 },\n\t\t{ date: new Date(\"2025-06-23\"), visitors: 480 },\n\t\t{ date: new Date(\"2025-06-24\"), visitors: 132 },\n\t\t{ date: new Date(\"2025-06-25\"), visitors: 141 },\n\t\t{ date: new Date(\"2025-06-26\"), visitors: 434 },\n\t\t{ date: new Date(\"2025-06-27\"), visitors: 448 },\n\t\t{ date: new Date(\"2025-06-28\"), visitors: 149 },\n\t\t{ date: new Date(\"2025-06-29\"), visitors: 103 },\n\t\t{ date: new Date(\"2025-06-30\"), visitors: 446 },\n\t];\n\n\tconst total = chartData.reduce((acc, curr) => acc + curr.visitors, 0);\n\n\tconst chartConfig = {\n\t\tvisitors: {\n\t\t\tlabel: \"Visitors\",\n\t\t\tcolor: \"var(--color-primary)\",\n\t\t},\n\t} satisfies Chart.ChartConfig;\n\n\tconst filteredData = $derived.by(() => {\n\t\tif (!value?.start || !value?.end) return chartData;\n\t\treturn chartData.filter(({ date }) => {\n\t\t\tconst dateObj = new Date(date);\n\t\t\tif (!value) return true;\n\t\t\tconst startDate = value.start!.toDate(getLocalTimeZone());\n\t\t\tconst endDate = value.end!.toDate(getLocalTimeZone());\n\t\t\t// set end date to end of day to include the full day\n\t\t\tendDate.setHours(23, 59, 59, 999);\n\t\t\treturn dateObj >= startDate && dateObj <= endDate;\n\t\t});\n\t});\n\n\tlet context = $state<ChartContextValue>();\n</script>\n\n<Card.Root class=\"@container/card w-full max-w-xl\">\n\t<Card.Header class=\"flex flex-col border-b @md/card:grid\">\n\t\t<Card.Title>Web Analytics</Card.Title>\n\t\t<Card.Description>Showing total visitors for this month.</Card.Description>\n\t\t<Card.Action class=\"mt-2 @md/card:mt-0\">\n\t\t\t<Popover.Root>\n\t\t\t\t<Popover.Trigger>\n\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t<Button {...props} variant=\"outline\">\n\t\t\t\t\t\t\t<CalendarIcon />\n\t\t\t\t\t\t\t{value?.start && value?.end\n\t\t\t\t\t\t\t\t? `${value.start.toDate(getLocalTimeZone()).toLocaleDateString()} - ${value.end.toDate(getLocalTimeZone()).toLocaleDateString()}`\n\t\t\t\t\t\t\t\t: \"June 2025\"}\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t{/snippet}\n\t\t\t\t</Popover.Trigger>\n\t\t\t\t<Popover.Content class=\"w-auto overflow-hidden p-0\" align=\"end\">\n\t\t\t\t\t<RangeCalendar\n\t\t\t\t\t\tclass=\"w-full\"\n\t\t\t\t\t\tfixedWeeks\n\t\t\t\t\t\tbind:value\n\t\t\t\t\t\tminValue={new CalendarDate(2025, 6, 1)}\n\t\t\t\t\t\tmaxValue={new CalendarDate(2025, 6, 31)}\n\t\t\t\t\t/>\n\t\t\t\t</Popover.Content>\n\t\t\t</Popover.Root>\n\t\t</Card.Action>\n\t</Card.Header>\n\t<Card.Content class=\"px-4\">\n\t\t<Chart.Container config={chartConfig} class=\"aspect-auto h-[250px] w-full\">\n\t\t\t<BarChart\n\t\t\t\tbind:context\n\t\t\t\tdata={filteredData}\n\t\t\t\txScale={scaleBand().padding(0.25)}\n\t\t\t\tx=\"date\"\n\t\t\t\taxis=\"x\"\n\t\t\t\ty=\"visitors\"\n\t\t\t\tprops={{\n\t\t\t\t\tbars: {\n\t\t\t\t\t\tstroke: \"none\",\n\t\t\t\t\t\trounded: \"all\",\n\t\t\t\t\t\tradius: 4,\n\t\t\t\t\t\t// use the height of the chart to animate the bars\n\t\t\t\t\t\tinitialY: context?.height,\n\t\t\t\t\t\tinitialHeight: 0,\n\t\t\t\t\t\tmotion: {\n\t\t\t\t\t\t\tx: { type: \"tween\", duration: 500, easing: cubicInOut },\n\t\t\t\t\t\t\twidth: { type: \"tween\", duration: 500, easing: cubicInOut },\n\t\t\t\t\t\t\theight: { type: \"tween\", duration: 500, easing: cubicInOut },\n\t\t\t\t\t\t\ty: { type: \"tween\", duration: 500, easing: cubicInOut },\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\txAxis: { format: (d) => d.toLocaleDateString(\"en-US\", { day: \"numeric\" }) },\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{#snippet belowMarks()}\n\t\t\t\t\t<Highlight area={{ class: \"fill-muted\" }} />\n\t\t\t\t{/snippet}\n\t\t\t\t{#snippet tooltip()}\n\t\t\t\t\t<Chart.Tooltip\n\t\t\t\t\t\tclass=\"w-[150px]\"\n\t\t\t\t\t\tnameKey=\"visitors\"\n\t\t\t\t\t\tlabelFormatter={(d) =>\n\t\t\t\t\t\t\td.toLocaleDateString(\"en-US\", {\n\t\t\t\t\t\t\t\tmonth: \"short\",\n\t\t\t\t\t\t\t\tday: \"numeric\",\n\t\t\t\t\t\t\t\tyear: \"numeric\",\n\t\t\t\t\t\t\t})}\n\t\t\t\t\t/>\n\t\t\t\t{/snippet}\n\t\t\t</BarChart>\n\t\t</Chart.Container>\n\t</Card.Content>\n\t<Card.Footer class=\"border-t\">\n\t\t<div class=\"text-sm\">\n\t\t\tYou had\n\t\t\t<span class=\"font-semibold\">{total.toLocaleString()}</span>\n\t\t\tvisitors for the month of June.\n\t\t</div>\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/calendar-28.svelte",
    "content": "<script lang=\"ts\">\n\timport CalendarIcon from \"@lucide/svelte/icons/calendar\";\n\timport { CalendarDate, getLocalTimeZone, type DateValue } from \"@internationalized/date\";\n\timport { untrack } from \"svelte\";\n\timport Calendar from \"$lib/registry/ui/calendar/calendar.svelte\";\n\timport { Input } from \"$lib/registry/ui/input/index.js\";\n\timport { Label } from \"$lib/registry/ui/label/index.js\";\n\timport * as Popover from \"$lib/registry/ui/popover/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\n\tfunction formatDate(date: DateValue | undefined) {\n\t\tif (!date) return \"\";\n\t\treturn date.toDate(getLocalTimeZone()).toLocaleDateString(\"en-US\", {\n\t\t\tday: \"2-digit\",\n\t\t\tmonth: \"long\",\n\t\t\tyear: \"numeric\",\n\t\t});\n\t}\n\n\tfunction isValidDate(date: Date | undefined): date is Date {\n\t\tif (!date) return false;\n\t\treturn !isNaN(date.getTime());\n\t}\n\n\tconst id = $props.id();\n\tlet value = $state<DateValue | undefined>(new CalendarDate(2025, 6, 1));\n\tlet open = $state(false);\n\tlet inputValue = $state(untrack(() => formatDate(value)));\n</script>\n\n<div class=\"flex flex-col gap-3\">\n\t<Label for=\"{id}-date\" class=\"px-1\">Subscription Date</Label>\n\t<div class=\"relative flex gap-2\">\n\t\t<Input\n\t\t\tid=\"{id}-date\"\n\t\t\tplaceholder=\"June 01, 2025\"\n\t\t\tclass=\"bg-background pe-10\"\n\t\t\tbind:value={\n\t\t\t\t() => inputValue,\n\t\t\t\t(v) => {\n\t\t\t\t\tconst date = new Date(v);\n\t\t\t\t\tinputValue = v;\n\t\t\t\t\tif (isValidDate(date)) {\n\t\t\t\t\t\tvalue = new CalendarDate(\n\t\t\t\t\t\t\tdate.getFullYear(),\n\t\t\t\t\t\t\tdate.getMonth(),\n\t\t\t\t\t\t\tdate.getDate()\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tonkeydown={(e) => {\n\t\t\t\tif (e.key === \"ArrowDown\") {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\topen = true;\n\t\t\t\t}\n\t\t\t}}\n\t\t/>\n\t\t<Popover.Root bind:open>\n\t\t\t<Popover.Trigger id=\"{id}-date-picker\">\n\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t<Button\n\t\t\t\t\t\t{...props}\n\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\tclass=\"absolute end-2 top-1/2 size-6 -translate-y-1/2\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<CalendarIcon class=\"size-3.5\" />\n\t\t\t\t\t\t<span class=\"sr-only\">Select date</span>\n\t\t\t\t\t</Button>\n\t\t\t\t{/snippet}\n\t\t\t</Popover.Trigger>\n\t\t\t<Popover.Content\n\t\t\t\tclass=\"w-auto overflow-hidden p-0\"\n\t\t\t\talign=\"end\"\n\t\t\t\talignOffset={-8}\n\t\t\t\tsideOffset={10}\n\t\t\t>\n\t\t\t\t<Calendar\n\t\t\t\t\ttype=\"single\"\n\t\t\t\t\tbind:value\n\t\t\t\t\tcaptionLayout=\"dropdown\"\n\t\t\t\t\tonValueChange={(v) => {\n\t\t\t\t\t\tinputValue = formatDate(v);\n\t\t\t\t\t\topen = false;\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t</Popover.Content>\n\t\t</Popover.Root>\n\t</div>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/calendar-29.svelte",
    "content": "<script lang=\"ts\">\n\timport { Label } from \"$lib/registry/ui/label/index.js\";\n\timport * as Popover from \"$lib/registry/ui/popover/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport { Calendar } from \"$lib/registry/ui/calendar/index.js\";\n\timport { Input } from \"$lib/registry/ui/input/index.js\";\n\timport CalendarIcon from \"@lucide/svelte/icons/calendar\";\n\timport { parseDate } from \"chrono-node\";\n\timport { CalendarDate, getLocalTimeZone, type DateValue } from \"@internationalized/date\";\n\timport { untrack } from \"svelte\";\n\n\tfunction formatDate(date: DateValue | undefined) {\n\t\tif (!date) return \"\";\n\n\t\treturn date.toDate(getLocalTimeZone()).toLocaleDateString(\"en-US\", {\n\t\t\tday: \"2-digit\",\n\t\t\tmonth: \"long\",\n\t\t\tyear: \"numeric\",\n\t\t});\n\t}\n\n\tconst id = $props.id();\n\n\tlet open = $state(false);\n\tlet inputValue = $state(\"In 2 days\");\n\tlet value = $state<DateValue | undefined>(\n\t\tuntrack(() => {\n\t\t\tconst date = parseDate(inputValue);\n\t\t\tif (date)\n\t\t\t\treturn new CalendarDate(date.getFullYear(), date.getMonth() + 1, date.getDate());\n\t\t\treturn undefined;\n\t\t})\n\t);\n</script>\n\n<div class=\"flex flex-col gap-3\">\n\t<Label for=\"{id}-date\" class=\"px-1\">Schedule Date</Label>\n\t<div class=\"relative flex gap-2\">\n\t\t<Input\n\t\t\tid=\"date\"\n\t\t\tbind:value={\n\t\t\t\t() => inputValue,\n\t\t\t\t(v) => {\n\t\t\t\t\tinputValue = v;\n\t\t\t\t\tconst date = parseDate(v);\n\t\t\t\t\tif (date) {\n\t\t\t\t\t\tvalue = new CalendarDate(\n\t\t\t\t\t\t\tdate.getFullYear(),\n\t\t\t\t\t\t\tdate.getMonth() + 1,\n\t\t\t\t\t\t\tdate.getDate()\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tplaceholder=\"Tomorrow or next week\"\n\t\t\tclass=\"bg-background pe-10\"\n\t\t\tonkeydown={(e) => {\n\t\t\t\tif (e.key === \"ArrowDown\") {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\topen = true;\n\t\t\t\t}\n\t\t\t}}\n\t\t/>\n\t\t<Popover.Root bind:open>\n\t\t\t<Popover.Trigger id=\"{id}-date-picker\">\n\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t<Button\n\t\t\t\t\t\t{...props}\n\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\tclass=\"absolute end-2 top-1/2 size-6 -translate-y-1/2\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<CalendarIcon class=\"size-3.5\" />\n\t\t\t\t\t\t<span class=\"sr-only\">Select date</span>\n\t\t\t\t\t</Button>\n\t\t\t\t{/snippet}\n\t\t\t</Popover.Trigger>\n\t\t\t<Popover.Content class=\"w-auto overflow-hidden p-0\" align=\"end\">\n\t\t\t\t<Calendar\n\t\t\t\t\ttype=\"single\"\n\t\t\t\t\tbind:value\n\t\t\t\t\tcaptionLayout=\"dropdown\"\n\t\t\t\t\tonValueChange={(v) => {\n\t\t\t\t\t\tinputValue = formatDate(v);\n\t\t\t\t\t\topen = false;\n\t\t\t\t\t}}\n\t\t\t\t/>\n\t\t\t</Popover.Content>\n\t\t</Popover.Root>\n\t</div>\n\t<div class=\"text-muted-foreground px-1 text-sm\">\n\t\tYour post will be published on\n\t\t<span class=\"font-medium\">{formatDate(value)}</span>.\n\t</div>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/calendar-30.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Popover from \"$lib/registry/ui/popover/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport RangeCalendar from \"$lib/registry/ui/range-calendar/range-calendar.svelte\";\n\timport { Label } from \"$lib/registry/ui/label/index.js\";\n\timport ChevronDownIcon from \"@lucide/svelte/icons/chevron-down\";\n\timport type { DateRange } from \"bits-ui\";\n\timport { CalendarDate, getLocalTimeZone, type DateValue } from \"@internationalized/date\";\n\timport { formatDateRange } from \"little-date\";\n\n\tconst id = $props.id();\n\n\tlet value = $state<DateRange | undefined>({\n\t\tstart: new CalendarDate(2025, 6, 4),\n\t\tend: new CalendarDate(2025, 6, 10),\n\t});\n\n\tfunction formatRange(start: DateValue, end: DateValue) {\n\t\treturn formatDateRange(start.toDate(getLocalTimeZone()), end.toDate(getLocalTimeZone()), {\n\t\t\tincludeTime: false,\n\t\t});\n\t}\n</script>\n\n<div class=\"flex flex-col gap-3\">\n\t<Label for=\"{id}-dates\" class=\"px-1\">Select your stay</Label>\n\t<Popover.Root>\n\t\t<Popover.Trigger id=\"{id}-dates\">\n\t\t\t{#snippet child({ props })}\n\t\t\t\t<Button {...props} variant=\"outline\" class=\"w-56 justify-between font-normal\">\n\t\t\t\t\t{#if value?.start && value?.end}\n\t\t\t\t\t\t{formatRange(value.start, value.end)}\n\t\t\t\t\t{:else}\n\t\t\t\t\t\tSelect date\n\t\t\t\t\t{/if}\n\t\t\t\t\t<ChevronDownIcon />\n\t\t\t\t</Button>\n\t\t\t{/snippet}\n\t\t</Popover.Trigger>\n\t\t<Popover.Content class=\"w-auto overflow-hidden p-0\" align=\"start\">\n\t\t\t<RangeCalendar bind:value captionLayout=\"dropdown\" />\n\t\t</Popover.Content>\n\t</Popover.Root>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/calendar-31.svelte",
    "content": "<script lang=\"ts\">\n\timport { formatDateRange } from \"little-date\";\n\timport PlusIcon from \"@lucide/svelte/icons/plus\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport Calendar from \"$lib/registry/ui/calendar/calendar.svelte\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport { CalendarDate, getLocalTimeZone, type DateValue } from \"@internationalized/date\";\n\n\tconst events = [\n\t\t{\n\t\t\ttitle: \"Team Sync Meeting\",\n\t\t\tstart: \"2025-06-12T09:00:00\",\n\t\t\tend: \"2025-06-12T10:00:00\",\n\t\t},\n\t\t{\n\t\t\ttitle: \"Design Review\",\n\t\t\tstart: \"2025-06-12T11:30:00\",\n\t\t\tend: \"2025-06-12T12:30:00\",\n\t\t},\n\t\t{\n\t\t\ttitle: \"Client Presentation\",\n\t\t\tstart: \"2025-06-12T14:00:00\",\n\t\t\tend: \"2025-06-12T15:00:00\",\n\t\t},\n\t];\n\n\tlet value = $state<DateValue | undefined>(new CalendarDate(2025, 6, 12));\n</script>\n\n<Card.Root class=\"w-fit py-4\">\n\t<Card.Content class=\"px-4\">\n\t\t<Calendar type=\"single\" bind:value class=\"bg-transparent p-0\" preventDeselect />\n\t</Card.Content>\n\t<Card.Footer class=\"flex flex-col items-start gap-3 border-t px-4 !pt-4\">\n\t\t<div class=\"flex w-full items-center justify-between px-1\">\n\t\t\t<div class=\"text-sm font-medium\">\n\t\t\t\t{value?.toDate(getLocalTimeZone()).toLocaleDateString(\"en-US\", {\n\t\t\t\t\tday: \"numeric\",\n\t\t\t\t\tmonth: \"long\",\n\t\t\t\t\tyear: \"numeric\",\n\t\t\t\t})}\n\t\t\t</div>\n\t\t\t<Button variant=\"ghost\" size=\"icon\" class=\"size-6\" title=\"Add Event\">\n\t\t\t\t<PlusIcon />\n\t\t\t\t<span class=\"sr-only\">Add Event</span>\n\t\t\t</Button>\n\t\t</div>\n\t\t<div class=\"flex w-full flex-col gap-2\">\n\t\t\t{#each events as event (event.title)}\n\t\t\t\t<div\n\t\t\t\t\tclass=\"bg-muted after:bg-primary/70 relative rounded-md p-2 ps-6 text-sm after:absolute after:inset-y-2 after:start-2 after:w-1 after:rounded-full\"\n\t\t\t\t>\n\t\t\t\t\t<div class=\"font-medium\">{event.title}</div>\n\t\t\t\t\t<div class=\"text-muted-foreground text-xs\">\n\t\t\t\t\t\t{formatDateRange(new Date(event.start), new Date(event.end))}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t{/each}\n\t\t</div>\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/calendar-32.svelte",
    "content": "<script lang=\"ts\">\n\timport { getLocalTimeZone, type DateValue } from \"@internationalized/date\";\n\timport CalendarPlusIcon from \"@lucide/svelte/icons/calendar-plus\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport Calendar from \"$lib/registry/ui/calendar/calendar.svelte\";\n\timport * as Drawer from \"$lib/registry/ui/drawer/index.js\";\n\timport { Label } from \"$lib/registry/ui/label/index.js\";\n\n\tlet open = $state(false);\n\tlet value = $state<DateValue | undefined>();\n\tconst id = $props.id();\n\n\tconst triggerLabel = $derived.by(() => {\n\t\tif (value) return value.toDate(getLocalTimeZone()).toLocaleDateString();\n\t\treturn \"Select date\";\n\t});\n</script>\n\n<div class=\"flex flex-col gap-3\">\n\t<Label for=\"{id}-date\" class=\"px-1\">Date of birth</Label>\n\t<Drawer.Root bind:open>\n\t\t<Drawer.Trigger id=\"{id}-date\">\n\t\t\t{#snippet child({ props })}\n\t\t\t\t<Button {...props} variant=\"outline\" class=\"w-48 justify-between font-normal\">\n\t\t\t\t\t{triggerLabel}\n\t\t\t\t\t<CalendarPlusIcon />\n\t\t\t\t</Button>\n\t\t\t{/snippet}\n\t\t</Drawer.Trigger>\n\t\t<Drawer.Content class=\"w-auto overflow-hidden p-0\">\n\t\t\t<Drawer.Header class=\"sr-only\">\n\t\t\t\t<Drawer.Title>Select date</Drawer.Title>\n\t\t\t\t<Drawer.Description>Set your date of birth</Drawer.Description>\n\t\t\t</Drawer.Header>\n\t\t\t<Calendar\n\t\t\t\ttype=\"single\"\n\t\t\t\tbind:value\n\t\t\t\tcaptionLayout=\"dropdown\"\n\t\t\t\tonValueChange={(v) => {\n\t\t\t\t\tif (v) {\n\t\t\t\t\t\topen = false;\n\t\t\t\t\t}\n\t\t\t\t}}\n\t\t\t\tclass=\"mx-auto [--cell-size:clamp(0px,calc(100vw/7.5),52px)]\"\n\t\t\t/>\n\t\t</Drawer.Content>\n\t</Drawer.Root>\n\t<div class=\"text-muted-foreground px-1 text-sm\">This example works best on mobile.</div>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/chart-area-axes.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport { scaleUtc } from \"d3-scale\";\n\timport { curveNatural } from \"d3-shape\";\n\timport { AreaChart } from \"layerchart\";\n\timport TrendingUpIcon from \"@lucide/svelte/icons/trending-up\";\n\n\tconst chartData = [\n\t\t{ date: new Date(\"2024-01-01\"), desktop: 186, mobile: 80 },\n\t\t{ date: new Date(\"2024-02-01\"), desktop: 305, mobile: 200 },\n\t\t{ date: new Date(\"2024-03-01\"), desktop: 237, mobile: 120 },\n\t\t{ date: new Date(\"2024-04-01\"), desktop: 73, mobile: 190 },\n\t\t{ date: new Date(\"2024-05-01\"), desktop: 209, mobile: 130 },\n\t\t{ date: new Date(\"2024-06-01\"), desktop: 214, mobile: 140 },\n\t];\n\n\tconst chartConfig = {\n\t\tdesktop: { label: \"Desktop\", color: \"var(--chart-1)\" },\n\t\tmobile: { label: \"Mobile\", color: \"var(--chart-2)\" },\n\t} satisfies Chart.ChartConfig;\n</script>\n\n<Card.Root>\n\t<Card.Header>\n\t\t<Card.Title>Area Chart - Axes</Card.Title>\n\t\t<Card.Description>Showing total visitors for the last 6 months</Card.Description>\n\t</Card.Header>\n\t<Card.Content>\n\t\t<Chart.Container config={chartConfig}>\n\t\t\t<AreaChart\n\t\t\t\tdata={chartData}\n\t\t\t\tx=\"date\"\n\t\t\t\txScale={scaleUtc()}\n\t\t\t\tyDomain={[0, 600]}\n\t\t\t\tseries={[\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"mobile\",\n\t\t\t\t\t\tlabel: \"Mobile\",\n\t\t\t\t\t\tcolor: chartConfig.mobile.color,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"desktop\",\n\t\t\t\t\t\tlabel: \"Desktop\",\n\t\t\t\t\t\tcolor: chartConfig.desktop.color,\n\t\t\t\t\t},\n\t\t\t\t]}\n\t\t\t\tseriesLayout=\"stack\"\n\t\t\t\tprops={{\n\t\t\t\t\tarea: {\n\t\t\t\t\t\tcurve: curveNatural,\n\t\t\t\t\t\t\"fill-opacity\": 0.4,\n\t\t\t\t\t\tline: { class: \"stroke-1\" },\n\t\t\t\t\t\tmotion: \"tween\",\n\t\t\t\t\t},\n\t\t\t\t\txAxis: {\n\t\t\t\t\t\tformat: (v: Date) => v.toLocaleDateString(\"en-US\", { month: \"short\" }),\n\t\t\t\t\t},\n\t\t\t\t\tyAxis: { ticks: [0, 300, 600] },\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{#snippet tooltip()}\n\t\t\t\t\t<Chart.Tooltip\n\t\t\t\t\t\tlabelFormatter={(v: Date) => {\n\t\t\t\t\t\t\treturn v.toLocaleDateString(\"en-US\", {\n\t\t\t\t\t\t\t\tmonth: \"long\",\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tindicator=\"dot\"\n\t\t\t\t\t/>\n\t\t\t\t{/snippet}\n\t\t\t</AreaChart>\n\t\t</Chart.Container>\n\t</Card.Content>\n\t<Card.Footer>\n\t\t<div class=\"flex w-full items-start gap-2 text-sm\">\n\t\t\t<div class=\"grid gap-2\">\n\t\t\t\t<div class=\"flex items-center gap-2 leading-none font-medium\">\n\t\t\t\t\tTrending up by 5.2% this month <TrendingUpIcon class=\"size-4\" />\n\t\t\t\t</div>\n\t\t\t\t<div class=\"text-muted-foreground flex items-center gap-2 leading-none\">\n\t\t\t\t\tJanuary - June 2024\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/chart-area-default.svelte",
    "content": "<script lang=\"ts\">\n\timport { AreaChart } from \"layerchart\";\n\timport TrendingUpIcon from \"@lucide/svelte/icons/trending-up\";\n\timport { curveNatural } from \"d3-shape\";\n\timport { scaleUtc } from \"d3-scale\";\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\n\tconst chartData = [\n\t\t{ date: new Date(\"2024-01-01\"), desktop: 186 },\n\t\t{ date: new Date(\"2024-02-01\"), desktop: 305 },\n\t\t{ date: new Date(\"2024-03-01\"), desktop: 237 },\n\t\t{ date: new Date(\"2024-04-01\"), desktop: 73 },\n\t\t{ date: new Date(\"2024-05-01\"), desktop: 209 },\n\t\t{ date: new Date(\"2024-06-01\"), desktop: 214 },\n\t];\n\n\tconst chartConfig = {\n\t\tdesktop: { label: \"Desktop\", color: \"var(--chart-1)\" },\n\t} satisfies Chart.ChartConfig;\n</script>\n\n<Card.Root>\n\t<Card.Header>\n\t\t<Card.Title>Area Chart</Card.Title>\n\t\t<Card.Description>Showing total visitors for the last 6 months</Card.Description>\n\t</Card.Header>\n\t<Card.Content>\n\t\t<Chart.Container config={chartConfig}>\n\t\t\t<AreaChart\n\t\t\t\tdata={chartData}\n\t\t\t\tx=\"date\"\n\t\t\t\txScale={scaleUtc()}\n\t\t\t\tseries={[\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"desktop\",\n\t\t\t\t\t\tlabel: \"Desktop\",\n\t\t\t\t\t\tcolor: chartConfig.desktop.color,\n\t\t\t\t\t},\n\t\t\t\t]}\n\t\t\t\taxis=\"x\"\n\t\t\t\tprops={{\n\t\t\t\t\tarea: {\n\t\t\t\t\t\tcurve: curveNatural,\n\t\t\t\t\t\t\"fill-opacity\": 0.4,\n\t\t\t\t\t\tline: { class: \"stroke-1\" },\n\t\t\t\t\t\tmotion: \"tween\",\n\t\t\t\t\t},\n\t\t\t\t\txAxis: {\n\t\t\t\t\t\tformat: (v: Date) => v.toLocaleDateString(\"en-US\", { month: \"short\" }),\n\t\t\t\t\t},\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{#snippet tooltip()}\n\t\t\t\t\t<Chart.Tooltip\n\t\t\t\t\t\tlabelFormatter={(v: Date) =>\n\t\t\t\t\t\t\tv.toLocaleDateString(\"en-US\", { month: \"long\" })}\n\t\t\t\t\t\tindicator=\"line\"\n\t\t\t\t\t/>\n\t\t\t\t{/snippet}\n\t\t\t</AreaChart>\n\t\t</Chart.Container>\n\t</Card.Content>\n\t<Card.Footer>\n\t\t<div class=\"flex w-full items-start gap-2 text-sm\">\n\t\t\t<div class=\"grid gap-2\">\n\t\t\t\t<div class=\"flex items-center gap-2 leading-none font-medium\">\n\t\t\t\t\tTrending up by 5.2% this month <TrendingUpIcon class=\"size-4\" />\n\t\t\t\t</div>\n\t\t\t\t<div class=\"text-muted-foreground flex items-center gap-2 leading-none\">\n\t\t\t\t\tJanuary - June 2024\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/chart-area-gradient.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport { scaleUtc } from \"d3-scale\";\n\timport { curveNatural } from \"d3-shape\";\n\timport { Area, AreaChart, LinearGradient } from \"layerchart\";\n\timport TrendingUpIcon from \"@lucide/svelte/icons/trending-up\";\n\n\tconst chartData = [\n\t\t{ date: new Date(\"2024-01-01\"), desktop: 186, mobile: 80 },\n\t\t{ date: new Date(\"2024-02-01\"), desktop: 305, mobile: 200 },\n\t\t{ date: new Date(\"2024-03-01\"), desktop: 237, mobile: 120 },\n\t\t{ date: new Date(\"2024-04-01\"), desktop: 73, mobile: 190 },\n\t\t{ date: new Date(\"2024-05-01\"), desktop: 209, mobile: 130 },\n\t\t{ date: new Date(\"2024-06-01\"), desktop: 214, mobile: 140 },\n\t];\n\n\tconst chartConfig = {\n\t\tdesktop: { label: \"Desktop\", color: \"var(--chart-1)\" },\n\t\tmobile: { label: \"Mobile\", color: \"var(--chart-2)\" },\n\t} satisfies Chart.ChartConfig;\n</script>\n\n<Card.Root>\n\t<Card.Header>\n\t\t<Card.Title>Area Chart - Gradient</Card.Title>\n\t\t<Card.Description>Showing total visitors for the last 6 months</Card.Description>\n\t</Card.Header>\n\t<Card.Content>\n\t\t<Chart.Container config={chartConfig}>\n\t\t\t<AreaChart\n\t\t\t\tdata={chartData}\n\t\t\t\tx=\"date\"\n\t\t\t\txScale={scaleUtc()}\n\t\t\t\tyPadding={[0, 25]}\n\t\t\t\tseries={[\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"mobile\",\n\t\t\t\t\t\tlabel: \"Mobile\",\n\t\t\t\t\t\tcolor: \"var(--color-mobile)\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"desktop\",\n\t\t\t\t\t\tlabel: \"Desktop\",\n\t\t\t\t\t\tcolor: \"var(--color-desktop)\",\n\t\t\t\t\t},\n\t\t\t\t]}\n\t\t\t\tseriesLayout=\"stack\"\n\t\t\t\tprops={{\n\t\t\t\t\tarea: {\n\t\t\t\t\t\tcurve: curveNatural,\n\t\t\t\t\t\t\"fill-opacity\": 0.4,\n\t\t\t\t\t\tline: { class: \"stroke-1\" },\n\t\t\t\t\t\tmotion: \"tween\",\n\t\t\t\t\t},\n\t\t\t\t\txAxis: {\n\t\t\t\t\t\tformat: (v: Date) => v.toLocaleDateString(\"en-US\", { month: \"short\" }),\n\t\t\t\t\t},\n\t\t\t\t\tyAxis: { format: () => \"\" },\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{#snippet tooltip()}\n\t\t\t\t\t<Chart.Tooltip\n\t\t\t\t\t\tindicator=\"dot\"\n\t\t\t\t\t\tlabelFormatter={(v: Date) => {\n\t\t\t\t\t\t\treturn v.toLocaleDateString(\"en-US\", {\n\t\t\t\t\t\t\t\tmonth: \"long\",\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t{/snippet}\n\t\t\t\t{#snippet marks({ series, getAreaProps })}\n\t\t\t\t\t{#each series as s, i (s.key)}\n\t\t\t\t\t\t<LinearGradient\n\t\t\t\t\t\t\tstops={[\n\t\t\t\t\t\t\t\ts.color ?? \"\",\n\t\t\t\t\t\t\t\t\"color-mix(in lch, \" + s.color + \" 10%, transparent)\",\n\t\t\t\t\t\t\t]}\n\t\t\t\t\t\t\tvertical\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{#snippet children({ gradient })}\n\t\t\t\t\t\t\t\t<Area {...getAreaProps(s, i)} fill={gradient} />\n\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t</LinearGradient>\n\t\t\t\t\t{/each}\n\t\t\t\t{/snippet}\n\t\t\t</AreaChart>\n\t\t</Chart.Container>\n\t</Card.Content>\n\t<Card.Footer>\n\t\t<div class=\"flex w-full items-start gap-2 text-sm\">\n\t\t\t<div class=\"grid gap-2\">\n\t\t\t\t<div class=\"flex items-center gap-2 leading-none font-medium\">\n\t\t\t\t\tTrending up by 5.2% this month <TrendingUpIcon class=\"size-4\" />\n\t\t\t\t</div>\n\t\t\t\t<div class=\"text-muted-foreground flex items-center gap-2 leading-none\">\n\t\t\t\t\tJanuary - June 2024\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/chart-area-icons.svelte",
    "content": "<script lang=\"ts\">\n\timport { AreaChart } from \"layerchart\";\n\timport TrendingUpIcon from \"@lucide/svelte/icons/trending-up\";\n\timport TrendingDownIcon from \"@lucide/svelte/icons/trending-down\";\n\timport { curveNatural } from \"d3-shape\";\n\timport { scaleUtc } from \"d3-scale\";\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\n\tconst chartData = [\n\t\t{ date: new Date(\"2024-01-01\"), desktop: 186, mobile: 80 },\n\t\t{ date: new Date(\"2024-02-01\"), desktop: 305, mobile: 200 },\n\t\t{ date: new Date(\"2024-03-01\"), desktop: 237, mobile: 120 },\n\t\t{ date: new Date(\"2024-04-01\"), desktop: 73, mobile: 190 },\n\t\t{ date: new Date(\"2024-05-01\"), desktop: 209, mobile: 130 },\n\t\t{ date: new Date(\"2024-06-01\"), desktop: 214, mobile: 140 },\n\t];\n\n\tconst chartConfig = {\n\t\tdesktop: { label: \"Desktop\", color: \"var(--chart-1)\", icon: TrendingDownIcon },\n\t\tmobile: { label: \"Mobile\", color: \"var(--chart-2)\", icon: TrendingUpIcon },\n\t} satisfies Chart.ChartConfig;\n</script>\n\n<Card.Root>\n\t<Card.Header>\n\t\t<Card.Title>Area Chart - Icons</Card.Title>\n\t\t<Card.Description>Showing total visitors for the last 6 months</Card.Description>\n\t</Card.Header>\n\t<Card.Content>\n\t\t<Chart.Container config={chartConfig}>\n\t\t\t<AreaChart\n\t\t\t\tlegend\n\t\t\t\tdata={chartData}\n\t\t\t\tx=\"date\"\n\t\t\t\txScale={scaleUtc()}\n\t\t\t\tseries={[\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"mobile\",\n\t\t\t\t\t\tlabel: \"Mobile\",\n\t\t\t\t\t\tcolor: chartConfig.mobile.color,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"desktop\",\n\t\t\t\t\t\tlabel: \"Desktop\",\n\t\t\t\t\t\tcolor: chartConfig.desktop.color,\n\t\t\t\t\t},\n\t\t\t\t]}\n\t\t\t\tseriesLayout=\"stack\"\n\t\t\t\tprops={{\n\t\t\t\t\tarea: {\n\t\t\t\t\t\tcurve: curveNatural,\n\t\t\t\t\t\t\"fill-opacity\": 0.4,\n\t\t\t\t\t\tline: { class: \"stroke-1\" },\n\t\t\t\t\t\tmotion: \"tween\",\n\t\t\t\t\t},\n\t\t\t\t\txAxis: {\n\t\t\t\t\t\tformat: (v: Date) => v.toLocaleDateString(\"en-US\", { month: \"short\" }),\n\t\t\t\t\t},\n\t\t\t\t\tyAxis: { format: () => \"\" },\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{#snippet tooltip()}\n\t\t\t\t\t<Chart.Tooltip\n\t\t\t\t\t\tlabelFormatter={(v: Date) => {\n\t\t\t\t\t\t\treturn v.toLocaleDateString(\"en-US\", {\n\t\t\t\t\t\t\t\tmonth: \"long\",\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t{/snippet}\n\t\t\t</AreaChart>\n\t\t</Chart.Container>\n\t</Card.Content>\n\t<Card.Footer>\n\t\t<div class=\"flex w-full items-start gap-2 text-sm\">\n\t\t\t<div class=\"grid gap-2\">\n\t\t\t\t<div class=\"flex items-center gap-2 leading-none font-medium\">\n\t\t\t\t\tTrending up by 5.2% this month <TrendingUpIcon class=\"size-4\" />\n\t\t\t\t</div>\n\t\t\t\t<div class=\"text-muted-foreground flex items-center gap-2 leading-none\">\n\t\t\t\t\tJanuary - June 2024\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/chart-area-interactive.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Select from \"$lib/registry/ui/select/index.js\";\n\timport { scaleUtc } from \"d3-scale\";\n\timport { Area, AreaChart, ChartClipPath } from \"layerchart\";\n\timport { curveNatural } from \"d3-shape\";\n\timport ChartContainer from \"../ui/chart/chart-container.svelte\";\n\timport { cubicInOut } from \"svelte/easing\";\n\n\tconst chartData = [\n\t\t{ date: new Date(\"2024-04-01\"), desktop: 222, mobile: 150 },\n\t\t{ date: new Date(\"2024-04-02\"), desktop: 97, mobile: 180 },\n\t\t{ date: new Date(\"2024-04-03\"), desktop: 167, mobile: 120 },\n\t\t{ date: new Date(\"2024-04-04\"), desktop: 242, mobile: 260 },\n\t\t{ date: new Date(\"2024-04-05\"), desktop: 373, mobile: 290 },\n\t\t{ date: new Date(\"2024-04-06\"), desktop: 301, mobile: 340 },\n\t\t{ date: new Date(\"2024-04-07\"), desktop: 245, mobile: 180 },\n\t\t{ date: new Date(\"2024-04-08\"), desktop: 409, mobile: 320 },\n\t\t{ date: new Date(\"2024-04-09\"), desktop: 59, mobile: 110 },\n\t\t{ date: new Date(\"2024-04-10\"), desktop: 261, mobile: 190 },\n\t\t{ date: new Date(\"2024-04-11\"), desktop: 327, mobile: 350 },\n\t\t{ date: new Date(\"2024-04-12\"), desktop: 292, mobile: 210 },\n\t\t{ date: new Date(\"2024-04-13\"), desktop: 342, mobile: 380 },\n\t\t{ date: new Date(\"2024-04-14\"), desktop: 137, mobile: 220 },\n\t\t{ date: new Date(\"2024-04-15\"), desktop: 120, mobile: 170 },\n\t\t{ date: new Date(\"2024-04-16\"), desktop: 138, mobile: 190 },\n\t\t{ date: new Date(\"2024-04-17\"), desktop: 446, mobile: 360 },\n\t\t{ date: new Date(\"2024-04-18\"), desktop: 364, mobile: 410 },\n\t\t{ date: new Date(\"2024-04-19\"), desktop: 243, mobile: 180 },\n\t\t{ date: new Date(\"2024-04-20\"), desktop: 89, mobile: 150 },\n\t\t{ date: new Date(\"2024-04-21\"), desktop: 137, mobile: 200 },\n\t\t{ date: new Date(\"2024-04-22\"), desktop: 224, mobile: 170 },\n\t\t{ date: new Date(\"2024-04-23\"), desktop: 138, mobile: 230 },\n\t\t{ date: new Date(\"2024-04-24\"), desktop: 387, mobile: 290 },\n\t\t{ date: new Date(\"2024-04-25\"), desktop: 215, mobile: 250 },\n\t\t{ date: new Date(\"2024-04-26\"), desktop: 75, mobile: 130 },\n\t\t{ date: new Date(\"2024-04-27\"), desktop: 383, mobile: 420 },\n\t\t{ date: new Date(\"2024-04-28\"), desktop: 122, mobile: 180 },\n\t\t{ date: new Date(\"2024-04-29\"), desktop: 315, mobile: 240 },\n\t\t{ date: new Date(\"2024-04-30\"), desktop: 454, mobile: 380 },\n\t\t{ date: new Date(\"2024-05-01\"), desktop: 165, mobile: 220 },\n\t\t{ date: new Date(\"2024-05-02\"), desktop: 293, mobile: 310 },\n\t\t{ date: new Date(\"2024-05-03\"), desktop: 247, mobile: 190 },\n\t\t{ date: new Date(\"2024-05-04\"), desktop: 385, mobile: 420 },\n\t\t{ date: new Date(\"2024-05-05\"), desktop: 481, mobile: 390 },\n\t\t{ date: new Date(\"2024-05-06\"), desktop: 498, mobile: 520 },\n\t\t{ date: new Date(\"2024-05-07\"), desktop: 388, mobile: 300 },\n\t\t{ date: new Date(\"2024-05-08\"), desktop: 149, mobile: 210 },\n\t\t{ date: new Date(\"2024-05-09\"), desktop: 227, mobile: 180 },\n\t\t{ date: new Date(\"2024-05-10\"), desktop: 293, mobile: 330 },\n\t\t{ date: new Date(\"2024-05-11\"), desktop: 335, mobile: 270 },\n\t\t{ date: new Date(\"2024-05-12\"), desktop: 197, mobile: 240 },\n\t\t{ date: new Date(\"2024-05-13\"), desktop: 197, mobile: 160 },\n\t\t{ date: new Date(\"2024-05-14\"), desktop: 448, mobile: 490 },\n\t\t{ date: new Date(\"2024-05-15\"), desktop: 473, mobile: 380 },\n\t\t{ date: new Date(\"2024-05-16\"), desktop: 338, mobile: 400 },\n\t\t{ date: new Date(\"2024-05-17\"), desktop: 499, mobile: 420 },\n\t\t{ date: new Date(\"2024-05-18\"), desktop: 315, mobile: 350 },\n\t\t{ date: new Date(\"2024-05-19\"), desktop: 235, mobile: 180 },\n\t\t{ date: new Date(\"2024-05-20\"), desktop: 177, mobile: 230 },\n\t\t{ date: new Date(\"2024-05-21\"), desktop: 82, mobile: 140 },\n\t\t{ date: new Date(\"2024-05-22\"), desktop: 81, mobile: 120 },\n\t\t{ date: new Date(\"2024-05-23\"), desktop: 252, mobile: 290 },\n\t\t{ date: new Date(\"2024-05-24\"), desktop: 294, mobile: 220 },\n\t\t{ date: new Date(\"2024-05-25\"), desktop: 201, mobile: 250 },\n\t\t{ date: new Date(\"2024-05-26\"), desktop: 213, mobile: 170 },\n\t\t{ date: new Date(\"2024-05-27\"), desktop: 420, mobile: 460 },\n\t\t{ date: new Date(\"2024-05-28\"), desktop: 233, mobile: 190 },\n\t\t{ date: new Date(\"2024-05-29\"), desktop: 78, mobile: 130 },\n\t\t{ date: new Date(\"2024-05-30\"), desktop: 340, mobile: 280 },\n\t\t{ date: new Date(\"2024-05-31\"), desktop: 178, mobile: 230 },\n\t\t{ date: new Date(\"2024-06-01\"), desktop: 178, mobile: 200 },\n\t\t{ date: new Date(\"2024-06-02\"), desktop: 470, mobile: 410 },\n\t\t{ date: new Date(\"2024-06-03\"), desktop: 103, mobile: 160 },\n\t\t{ date: new Date(\"2024-06-04\"), desktop: 439, mobile: 380 },\n\t\t{ date: new Date(\"2024-06-05\"), desktop: 88, mobile: 140 },\n\t\t{ date: new Date(\"2024-06-06\"), desktop: 294, mobile: 250 },\n\t\t{ date: new Date(\"2024-06-07\"), desktop: 323, mobile: 370 },\n\t\t{ date: new Date(\"2024-06-08\"), desktop: 385, mobile: 320 },\n\t\t{ date: new Date(\"2024-06-09\"), desktop: 438, mobile: 480 },\n\t\t{ date: new Date(\"2024-06-10\"), desktop: 155, mobile: 200 },\n\t\t{ date: new Date(\"2024-06-11\"), desktop: 92, mobile: 150 },\n\t\t{ date: new Date(\"2024-06-12\"), desktop: 492, mobile: 420 },\n\t\t{ date: new Date(\"2024-06-13\"), desktop: 81, mobile: 130 },\n\t\t{ date: new Date(\"2024-06-14\"), desktop: 426, mobile: 380 },\n\t\t{ date: new Date(\"2024-06-15\"), desktop: 307, mobile: 350 },\n\t\t{ date: new Date(\"2024-06-16\"), desktop: 371, mobile: 310 },\n\t\t{ date: new Date(\"2024-06-17\"), desktop: 475, mobile: 520 },\n\t\t{ date: new Date(\"2024-06-18\"), desktop: 107, mobile: 170 },\n\t\t{ date: new Date(\"2024-06-19\"), desktop: 341, mobile: 290 },\n\t\t{ date: new Date(\"2024-06-20\"), desktop: 408, mobile: 450 },\n\t\t{ date: new Date(\"2024-06-21\"), desktop: 169, mobile: 210 },\n\t\t{ date: new Date(\"2024-06-22\"), desktop: 317, mobile: 270 },\n\t\t{ date: new Date(\"2024-06-23\"), desktop: 480, mobile: 530 },\n\t\t{ date: new Date(\"2024-06-24\"), desktop: 132, mobile: 180 },\n\t\t{ date: new Date(\"2024-06-25\"), desktop: 141, mobile: 190 },\n\t\t{ date: new Date(\"2024-06-26\"), desktop: 434, mobile: 380 },\n\t\t{ date: new Date(\"2024-06-27\"), desktop: 448, mobile: 490 },\n\t\t{ date: new Date(\"2024-06-28\"), desktop: 149, mobile: 200 },\n\t\t{ date: new Date(\"2024-06-29\"), desktop: 103, mobile: 160 },\n\t\t{ date: new Date(\"2024-06-30\"), desktop: 446, mobile: 400 },\n\t];\n\n\tlet timeRange = $state(\"90d\");\n\n\tconst selectedLabel = $derived.by(() => {\n\t\tswitch (timeRange) {\n\t\t\tcase \"90d\":\n\t\t\t\treturn \"Last 3 months\";\n\t\t\tcase \"30d\":\n\t\t\t\treturn \"Last 30 days\";\n\t\t\tcase \"7d\":\n\t\t\t\treturn \"Last 7 days\";\n\t\t\tdefault:\n\t\t\t\treturn \"Last 3 months\";\n\t\t}\n\t});\n\n\tconst filteredData = $derived(\n\t\tchartData.filter((item) => {\n\t\t\t// eslint-disable-next-line svelte/prefer-svelte-reactivity\n\t\t\tconst referenceDate = new Date(\"2024-06-30\");\n\t\t\tlet daysToSubtract = 90;\n\t\t\tif (timeRange === \"30d\") {\n\t\t\t\tdaysToSubtract = 30;\n\t\t\t} else if (timeRange === \"7d\") {\n\t\t\t\tdaysToSubtract = 7;\n\t\t\t}\n\n\t\t\treferenceDate.setDate(referenceDate.getDate() - daysToSubtract);\n\t\t\treturn item.date >= referenceDate;\n\t\t})\n\t);\n\n\tconst chartConfig = {\n\t\tdesktop: { label: \"Desktop\", color: \"var(--chart-1)\" },\n\t\tmobile: { label: \"Mobile\", color: \"var(--chart-2)\" },\n\t} satisfies Chart.ChartConfig;\n</script>\n\n<Card.Root>\n\t<Card.Header class=\"flex items-center gap-2 space-y-0 border-b py-5 sm:flex-row\">\n\t\t<div class=\"grid flex-1 gap-1 text-center sm:text-start\">\n\t\t\t<Card.Title>Area Chart - Interactive</Card.Title>\n\t\t\t<Card.Description>Showing total visitors for the last 3 months</Card.Description>\n\t\t</div>\n\t\t<Select.Root type=\"single\" bind:value={timeRange}>\n\t\t\t<Select.Trigger class=\"w-40 rounded-lg sm:ms-auto\" aria-label=\"Select a value\">\n\t\t\t\t{selectedLabel}\n\t\t\t</Select.Trigger>\n\t\t\t<Select.Content class=\"rounded-xl\">\n\t\t\t\t<Select.Item value=\"90d\" class=\"rounded-lg\">Last 3 months</Select.Item>\n\t\t\t\t<Select.Item value=\"30d\" class=\"rounded-lg\">Last 30 days</Select.Item>\n\t\t\t\t<Select.Item value=\"7d\" class=\"rounded-lg\">Last 7 days</Select.Item>\n\t\t\t</Select.Content>\n\t\t</Select.Root>\n\t</Card.Header>\n\t<Card.Content>\n\t\t<ChartContainer config={chartConfig} class=\"-ml-3 aspect-auto h-[250px] w-full\">\n\t\t\t<AreaChart\n\t\t\t\tlegend\n\t\t\t\tdata={filteredData}\n\t\t\t\tx=\"date\"\n\t\t\t\txScale={scaleUtc()}\n\t\t\t\tseries={[\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"mobile\",\n\t\t\t\t\t\tlabel: \"Mobile\",\n\t\t\t\t\t\tcolor: chartConfig.mobile.color,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"desktop\",\n\t\t\t\t\t\tlabel: \"Desktop\",\n\t\t\t\t\t\tcolor: chartConfig.desktop.color,\n\t\t\t\t\t},\n\t\t\t\t]}\n\t\t\t\tseriesLayout=\"stack\"\n\t\t\t\tprops={{\n\t\t\t\t\tarea: {\n\t\t\t\t\t\tcurve: curveNatural,\n\t\t\t\t\t\t\"fill-opacity\": 0.4,\n\t\t\t\t\t\tline: { class: \"stroke-1\" },\n\t\t\t\t\t\tmotion: \"tween\",\n\t\t\t\t\t},\n\t\t\t\t\txAxis: {\n\t\t\t\t\t\tticks: timeRange === \"7d\" ? 7 : undefined,\n\t\t\t\t\t\tformat: (v) => {\n\t\t\t\t\t\t\treturn v.toLocaleDateString(\"en-US\", {\n\t\t\t\t\t\t\t\tmonth: \"short\",\n\t\t\t\t\t\t\t\tday: \"numeric\",\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\n\t\t\t\t\tyAxis: { format: () => \"\" },\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{#snippet marks({ series, getAreaProps })}\n\t\t\t\t\t<defs>\n\t\t\t\t\t\t<linearGradient id=\"fillDesktop\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n\t\t\t\t\t\t\t<stop\n\t\t\t\t\t\t\t\toffset=\"5%\"\n\t\t\t\t\t\t\t\tstop-color=\"var(--color-desktop)\"\n\t\t\t\t\t\t\t\tstop-opacity={1.0}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<stop\n\t\t\t\t\t\t\t\toffset=\"95%\"\n\t\t\t\t\t\t\t\tstop-color=\"var(--color-desktop)\"\n\t\t\t\t\t\t\t\tstop-opacity={0.1}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</linearGradient>\n\t\t\t\t\t\t<linearGradient id=\"fillMobile\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n\t\t\t\t\t\t\t<stop offset=\"5%\" stop-color=\"var(--color-mobile)\" stop-opacity={0.8} />\n\t\t\t\t\t\t\t<stop\n\t\t\t\t\t\t\t\toffset=\"95%\"\n\t\t\t\t\t\t\t\tstop-color=\"var(--color-mobile)\"\n\t\t\t\t\t\t\t\tstop-opacity={0.1}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</linearGradient>\n\t\t\t\t\t</defs>\n\t\t\t\t\t<ChartClipPath\n\t\t\t\t\t\tinitialWidth={0}\n\t\t\t\t\t\tmotion={{\n\t\t\t\t\t\t\twidth: { type: \"tween\", duration: 1000, easing: cubicInOut },\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{#each series as s, i (s.key)}\n\t\t\t\t\t\t\t<Area\n\t\t\t\t\t\t\t\t{...getAreaProps(s, i)}\n\t\t\t\t\t\t\t\tfill={s.key === \"desktop\"\n\t\t\t\t\t\t\t\t\t? \"url(#fillDesktop)\"\n\t\t\t\t\t\t\t\t\t: \"url(#fillMobile)\"}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</ChartClipPath>\n\t\t\t\t{/snippet}\n\t\t\t\t{#snippet tooltip()}\n\t\t\t\t\t<Chart.Tooltip\n\t\t\t\t\t\tlabelFormatter={(v: Date) => {\n\t\t\t\t\t\t\treturn v.toLocaleDateString(\"en-US\", {\n\t\t\t\t\t\t\t\tmonth: \"long\",\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tindicator=\"line\"\n\t\t\t\t\t/>\n\t\t\t\t{/snippet}\n\t\t\t</AreaChart>\n\t\t</ChartContainer>\n\t</Card.Content>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/chart-area-legend.svelte",
    "content": "<script lang=\"ts\">\n\timport { AreaChart } from \"layerchart\";\n\timport TrendingUpIcon from \"@lucide/svelte/icons/trending-up\";\n\timport { curveNatural } from \"d3-shape\";\n\timport { scaleUtc } from \"d3-scale\";\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\n\tconst chartData = [\n\t\t{ date: new Date(\"2024-01-01\"), desktop: 186, mobile: 80 },\n\t\t{ date: new Date(\"2024-02-01\"), desktop: 305, mobile: 200 },\n\t\t{ date: new Date(\"2024-03-01\"), desktop: 237, mobile: 120 },\n\t\t{ date: new Date(\"2024-04-01\"), desktop: 73, mobile: 190 },\n\t\t{ date: new Date(\"2024-05-01\"), desktop: 209, mobile: 130 },\n\t\t{ date: new Date(\"2024-06-01\"), desktop: 214, mobile: 140 },\n\t];\n\n\tconst chartConfig = {\n\t\tdesktop: { label: \"Desktop\", color: \"var(--chart-1)\" },\n\t\tmobile: { label: \"Mobile\", color: \"var(--chart-2)\" },\n\t} satisfies Chart.ChartConfig;\n</script>\n\n<Card.Root>\n\t<Card.Header>\n\t\t<Card.Title>Area Chart - Legend</Card.Title>\n\t\t<Card.Description>Showing total visitors for the last 6 months</Card.Description>\n\t</Card.Header>\n\t<Card.Content>\n\t\t<Chart.Container config={chartConfig}>\n\t\t\t<AreaChart\n\t\t\t\tlegend\n\t\t\t\tdata={chartData}\n\t\t\t\tx=\"date\"\n\t\t\t\txScale={scaleUtc()}\n\t\t\t\tyPadding={[0, 25]}\n\t\t\t\tseries={[\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"mobile\",\n\t\t\t\t\t\tlabel: \"Mobile\",\n\t\t\t\t\t\tcolor: chartConfig.mobile.color,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"desktop\",\n\t\t\t\t\t\tlabel: \"Desktop\",\n\t\t\t\t\t\tcolor: chartConfig.desktop.color,\n\t\t\t\t\t},\n\t\t\t\t]}\n\t\t\t\tseriesLayout=\"stack\"\n\t\t\t\tprops={{\n\t\t\t\t\tarea: {\n\t\t\t\t\t\tcurve: curveNatural,\n\t\t\t\t\t\t\"fill-opacity\": 0.4,\n\t\t\t\t\t\tline: { class: \"stroke-1\" },\n\t\t\t\t\t\tmotion: \"tween\",\n\t\t\t\t\t},\n\t\t\t\t\txAxis: {\n\t\t\t\t\t\tformat: (v: Date) => v.toLocaleDateString(\"en-US\", { month: \"short\" }),\n\t\t\t\t\t},\n\t\t\t\t\tyAxis: { format: () => \"\" },\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{#snippet tooltip()}\n\t\t\t\t\t<Chart.Tooltip\n\t\t\t\t\t\tlabelFormatter={(v: Date) => {\n\t\t\t\t\t\t\treturn v.toLocaleDateString(\"en-US\", {\n\t\t\t\t\t\t\t\tmonth: \"long\",\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tindicator=\"line\"\n\t\t\t\t\t/>\n\t\t\t\t{/snippet}\n\t\t\t</AreaChart>\n\t\t</Chart.Container>\n\t</Card.Content>\n\t<Card.Footer>\n\t\t<div class=\"flex w-full items-start gap-2 text-sm\">\n\t\t\t<div class=\"grid gap-2\">\n\t\t\t\t<div class=\"flex items-center gap-2 leading-none font-medium\">\n\t\t\t\t\tTrending up by 5.2% this month <TrendingUpIcon class=\"size-4\" />\n\t\t\t\t</div>\n\t\t\t\t<div class=\"text-muted-foreground flex items-center gap-2 leading-none\">\n\t\t\t\t\tJanuary - June 2024\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/chart-area-linear.svelte",
    "content": "<script lang=\"ts\">\n\timport { AreaChart } from \"layerchart\";\n\timport TrendingUpIcon from \"@lucide/svelte/icons/trending-up\";\n\timport { curveLinear } from \"d3-shape\";\n\timport { scaleUtc } from \"d3-scale\";\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\n\tconst chartData = [\n\t\t{ date: new Date(\"2024-01-01\"), desktop: 186 },\n\t\t{ date: new Date(\"2024-02-01\"), desktop: 305 },\n\t\t{ date: new Date(\"2024-03-01\"), desktop: 237 },\n\t\t{ date: new Date(\"2024-04-01\"), desktop: 73 },\n\t\t{ date: new Date(\"2024-05-01\"), desktop: 209 },\n\t\t{ date: new Date(\"2024-06-01\"), desktop: 214 },\n\t];\n\n\tconst chartConfig = {\n\t\tdesktop: { label: \"Desktop\", color: \"var(--chart-1)\" },\n\t} satisfies Chart.ChartConfig;\n</script>\n\n<Card.Root>\n\t<Card.Header>\n\t\t<Card.Title>Area Chart - Linear</Card.Title>\n\t\t<Card.Description>Showing total visitors for the last 6 months</Card.Description>\n\t</Card.Header>\n\t<Card.Content>\n\t\t<Chart.Container config={chartConfig}>\n\t\t\t<AreaChart\n\t\t\t\tdata={chartData}\n\t\t\t\tx=\"date\"\n\t\t\t\txScale={scaleUtc()}\n\t\t\t\tseries={[\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"desktop\",\n\t\t\t\t\t\tlabel: \"Desktop\",\n\t\t\t\t\t\tcolor: chartConfig.desktop.color,\n\t\t\t\t\t},\n\t\t\t\t]}\n\t\t\t\tseriesLayout=\"stack\"\n\t\t\t\tprops={{\n\t\t\t\t\tarea: {\n\t\t\t\t\t\tcurve: curveLinear,\n\t\t\t\t\t\t\"fill-opacity\": 0.4,\n\t\t\t\t\t\tline: { class: \"stroke-1\" },\n\t\t\t\t\t\tmotion: \"tween\",\n\t\t\t\t\t},\n\t\t\t\t\txAxis: {\n\t\t\t\t\t\tformat: (v: Date) => v.toLocaleDateString(\"en-US\", { month: \"short\" }),\n\t\t\t\t\t},\n\t\t\t\t\tyAxis: { format: () => \"\" },\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{#snippet tooltip()}\n\t\t\t\t\t<Chart.Tooltip hideLabel />\n\t\t\t\t{/snippet}\n\t\t\t</AreaChart>\n\t\t</Chart.Container>\n\t</Card.Content>\n\t<Card.Footer>\n\t\t<div class=\"flex w-full items-start gap-2 text-sm\">\n\t\t\t<div class=\"grid gap-2\">\n\t\t\t\t<div class=\"flex items-center gap-2 leading-none font-medium\">\n\t\t\t\t\tTrending up by 5.2% this month <TrendingUpIcon class=\"size-4\" />\n\t\t\t\t</div>\n\t\t\t\t<div class=\"text-muted-foreground flex items-center gap-2 leading-none\">\n\t\t\t\t\tJanuary - June 2024\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/chart-area-stacked-expand.svelte",
    "content": "<script lang=\"ts\">\n\timport { AreaChart } from \"layerchart\";\n\timport TrendingUpIcon from \"@lucide/svelte/icons/trending-up\";\n\timport { curveNatural } from \"d3-shape\";\n\timport { scaleUtc } from \"d3-scale\";\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\n\tconst chartData = [\n\t\t{ date: new Date(\"2024-01-01\"), desktop: 186, mobile: 80, other: 45 },\n\t\t{ date: new Date(\"2024-02-01\"), desktop: 305, mobile: 200, other: 100 },\n\t\t{ date: new Date(\"2024-03-01\"), desktop: 237, mobile: 120, other: 150 },\n\t\t{ date: new Date(\"2024-04-01\"), desktop: 73, mobile: 190, other: 50 },\n\t\t{ date: new Date(\"2024-05-01\"), desktop: 209, mobile: 130, other: 100 },\n\t\t{ date: new Date(\"2024-06-01\"), desktop: 214, mobile: 140, other: 160 },\n\t];\n\n\tconst chartConfig = {\n\t\tdesktop: { label: \"Desktop\", color: \"var(--chart-1)\" },\n\t\tmobile: { label: \"Mobile\", color: \"var(--chart-2)\" },\n\t\tother: { label: \"Other\", color: \"var(--chart-3)\" },\n\t} satisfies Chart.ChartConfig;\n</script>\n\n<Card.Root>\n\t<Card.Header>\n\t\t<Card.Title>Area Chart - Stacked Expanded</Card.Title>\n\t\t<Card.Description>Showing total visitors for the last 6 months</Card.Description>\n\t</Card.Header>\n\t<Card.Content>\n\t\t<Chart.Container config={chartConfig}>\n\t\t\t<AreaChart\n\t\t\t\tdata={chartData}\n\t\t\t\tx=\"date\"\n\t\t\t\txScale={scaleUtc()}\n\t\t\t\tseriesLayout=\"stackExpand\"\n\t\t\t\taxis=\"x\"\n\t\t\t\tseries={[\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"other\",\n\t\t\t\t\t\tlabel: \"Other\",\n\t\t\t\t\t\tcolor: chartConfig.other.color,\n\t\t\t\t\t\tprops: { opacity: 0.1 },\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"mobile\",\n\t\t\t\t\t\tlabel: \"Mobile\",\n\t\t\t\t\t\tcolor: chartConfig.mobile.color,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"desktop\",\n\t\t\t\t\t\tlabel: \"Desktop\",\n\t\t\t\t\t\tcolor: chartConfig.desktop.color,\n\t\t\t\t\t},\n\t\t\t\t]}\n\t\t\t\tprops={{\n\t\t\t\t\tarea: {\n\t\t\t\t\t\tcurve: curveNatural,\n\t\t\t\t\t\t\"fill-opacity\": 0.4,\n\t\t\t\t\t\tline: { class: \"stroke-1\" },\n\t\t\t\t\t\tmotion: \"tween\",\n\t\t\t\t\t},\n\t\t\t\t\txAxis: {\n\t\t\t\t\t\tformat: (v: Date) => v.toLocaleDateString(\"en-US\", { month: \"short\" }),\n\t\t\t\t\t},\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{#snippet tooltip()}\n\t\t\t\t\t<Chart.Tooltip\n\t\t\t\t\t\tlabelFormatter={(v: Date) => {\n\t\t\t\t\t\t\treturn v.toLocaleDateString(\"en-US\", {\n\t\t\t\t\t\t\t\tmonth: \"long\",\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tindicator=\"line\"\n\t\t\t\t\t/>\n\t\t\t\t{/snippet}\n\t\t\t</AreaChart>\n\t\t</Chart.Container>\n\t</Card.Content>\n\t<Card.Footer>\n\t\t<div class=\"flex w-full items-start gap-2 text-sm\">\n\t\t\t<div class=\"grid gap-2\">\n\t\t\t\t<div class=\"flex items-center gap-2 leading-none font-medium\">\n\t\t\t\t\tTrending up by 5.2% this month <TrendingUpIcon class=\"size-4\" />\n\t\t\t\t</div>\n\t\t\t\t<div class=\"text-muted-foreground flex items-center gap-2 leading-none\">\n\t\t\t\t\tJanuary - June 2024\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/chart-area-stacked.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport { scaleUtc } from \"d3-scale\";\n\timport { curveNatural } from \"d3-shape\";\n\timport { AreaChart } from \"layerchart\";\n\timport TrendingUpIcon from \"@lucide/svelte/icons/trending-up\";\n\n\tconst chartData = [\n\t\t{ date: new Date(\"2024-01-01\"), desktop: 186, mobile: 80 },\n\t\t{ date: new Date(\"2024-02-01\"), desktop: 305, mobile: 200 },\n\t\t{ date: new Date(\"2024-03-01\"), desktop: 237, mobile: 120 },\n\t\t{ date: new Date(\"2024-04-01\"), desktop: 73, mobile: 190 },\n\t\t{ date: new Date(\"2024-05-01\"), desktop: 209, mobile: 130 },\n\t\t{ date: new Date(\"2024-06-01\"), desktop: 214, mobile: 140 },\n\t];\n\n\tconst chartConfig = {\n\t\tdesktop: { label: \"Desktop\", color: \"var(--chart-1)\" },\n\t\tmobile: { label: \"Mobile\", color: \"var(--chart-2)\" },\n\t} satisfies Chart.ChartConfig;\n</script>\n\n<Card.Root>\n\t<Card.Header>\n\t\t<Card.Title>Area Chart - Stacked</Card.Title>\n\t\t<Card.Description>Showing total visitors for the last 6 months</Card.Description>\n\t</Card.Header>\n\t<Card.Content>\n\t\t<Chart.Container config={chartConfig}>\n\t\t\t<AreaChart\n\t\t\t\tdata={chartData}\n\t\t\t\tx=\"date\"\n\t\t\t\txScale={scaleUtc()}\n\t\t\t\tyPadding={[0, 25]}\n\t\t\t\taxis=\"x\"\n\t\t\t\tseries={[\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"mobile\",\n\t\t\t\t\t\tlabel: \"Mobile\",\n\t\t\t\t\t\tcolor: \"var(--color-mobile)\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"desktop\",\n\t\t\t\t\t\tlabel: \"Desktop\",\n\t\t\t\t\t\tcolor: \"var(--color-desktop)\",\n\t\t\t\t\t},\n\t\t\t\t]}\n\t\t\t\tseriesLayout=\"stack\"\n\t\t\t\tprops={{\n\t\t\t\t\tarea: {\n\t\t\t\t\t\tcurve: curveNatural,\n\t\t\t\t\t\t\"fill-opacity\": 0.4,\n\t\t\t\t\t\tline: { class: \"stroke-1\" },\n\t\t\t\t\t\tmotion: \"tween\",\n\t\t\t\t\t},\n\t\t\t\t\txAxis: {\n\t\t\t\t\t\tformat: (v: Date) => v.toLocaleDateString(\"en-US\", { month: \"short\" }),\n\t\t\t\t\t},\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{#snippet tooltip()}\n\t\t\t\t\t<Chart.Tooltip\n\t\t\t\t\t\tindicator=\"dot\"\n\t\t\t\t\t\tlabelFormatter={(v: Date) => {\n\t\t\t\t\t\t\treturn v.toLocaleDateString(\"en-US\", {\n\t\t\t\t\t\t\t\tmonth: \"long\",\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t{/snippet}\n\t\t\t</AreaChart>\n\t\t</Chart.Container>\n\t</Card.Content>\n\t<Card.Footer>\n\t\t<div class=\"flex w-full items-start gap-2 text-sm\">\n\t\t\t<div class=\"grid gap-2\">\n\t\t\t\t<div class=\"flex items-center gap-2 leading-none font-medium\">\n\t\t\t\t\tTrending up by 5.2% this month <TrendingUpIcon class=\"size-4\" />\n\t\t\t\t</div>\n\t\t\t\t<div class=\"text-muted-foreground flex items-center gap-2 leading-none\">\n\t\t\t\t\tJanuary - June 2024\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/chart-area-step.svelte",
    "content": "<script lang=\"ts\">\n\timport { AreaChart } from \"layerchart\";\n\timport TrendingUpIcon from \"@lucide/svelte/icons/trending-up\";\n\timport { curveStep } from \"d3-shape\";\n\timport { scaleUtc } from \"d3-scale\";\n\timport ActivityIcon from \"@lucide/svelte/icons/activity\";\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\n\tconst chartData = [\n\t\t{ date: new Date(\"2024-01-01\"), desktop: 186 },\n\t\t{ date: new Date(\"2024-02-01\"), desktop: 305 },\n\t\t{ date: new Date(\"2024-03-01\"), desktop: 237 },\n\t\t{ date: new Date(\"2024-04-01\"), desktop: 73 },\n\t\t{ date: new Date(\"2024-05-01\"), desktop: 209 },\n\t\t{ date: new Date(\"2024-06-01\"), desktop: 214 },\n\t];\n\n\tconst chartConfig = {\n\t\tdesktop: { label: \"Desktop\", color: \"var(--chart-1)\", icon: ActivityIcon },\n\t} satisfies Chart.ChartConfig;\n</script>\n\n<Card.Root>\n\t<Card.Header>\n\t\t<Card.Title>Area Chart - Step</Card.Title>\n\t\t<Card.Description>Showing total visitors for the last 6 months</Card.Description>\n\t</Card.Header>\n\t<Card.Content>\n\t\t<Chart.Container config={chartConfig}>\n\t\t\t<AreaChart\n\t\t\t\tdata={chartData}\n\t\t\t\tx=\"date\"\n\t\t\t\txScale={scaleUtc()}\n\t\t\t\tseries={[\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"desktop\",\n\t\t\t\t\t\tlabel: \"Desktop\",\n\t\t\t\t\t\tcolor: chartConfig.desktop.color,\n\t\t\t\t\t},\n\t\t\t\t]}\n\t\t\t\tseriesLayout=\"stack\"\n\t\t\t\tprops={{\n\t\t\t\t\tarea: {\n\t\t\t\t\t\tcurve: curveStep,\n\t\t\t\t\t\t\"fill-opacity\": 0.4,\n\t\t\t\t\t\tline: { class: \"stroke-1\" },\n\t\t\t\t\t\tmotion: \"tween\",\n\t\t\t\t\t},\n\t\t\t\t\txAxis: {\n\t\t\t\t\t\tformat: (v: Date) => v.toLocaleDateString(\"en-US\", { month: \"short\" }),\n\t\t\t\t\t},\n\t\t\t\t\tyAxis: { format: () => \"\" },\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{#snippet tooltip()}\n\t\t\t\t\t<Chart.Tooltip hideLabel />\n\t\t\t\t{/snippet}\n\t\t\t</AreaChart>\n\t\t</Chart.Container>\n\t</Card.Content>\n\t<Card.Footer>\n\t\t<div class=\"flex w-full items-start gap-2 text-sm\">\n\t\t\t<div class=\"grid gap-2\">\n\t\t\t\t<div class=\"flex items-center gap-2 leading-none font-medium\">\n\t\t\t\t\tTrending up by 5.2% this month <TrendingUpIcon class=\"size-4\" />\n\t\t\t\t</div>\n\t\t\t\t<div class=\"text-muted-foreground flex items-center gap-2 leading-none\">\n\t\t\t\t\tJanuary - June 2024\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/chart-bar-active.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport { scaleBand } from \"d3-scale\";\n\timport { Bar, BarChart, type ChartContextValue } from \"layerchart\";\n\timport TrendingUpIcon from \"@lucide/svelte/icons/trending-up\";\n\timport { cubicInOut } from \"svelte/easing\";\n\n\tconst chartData = [\n\t\t{ browser: \"chrome\", visitors: 187, color: \"var(--color-chrome)\" },\n\t\t{ browser: \"safari\", visitors: 200, color: \"var(--color-safari)\" },\n\t\t{ browser: \"firefox\", visitors: 275, color: \"var(--color-firefox)\" },\n\t\t{ browser: \"edge\", visitors: 173, color: \"var(--color-edge)\" },\n\t\t{ browser: \"other\", visitors: 90, color: \"var(--color-other)\" },\n\t];\n\n\tconst chartConfig = {\n\t\tvisitors: { label: \"Visitors\" },\n\t\tchrome: { label: \"Chrome\", color: \"var(--chart-1)\" },\n\t\tsafari: { label: \"Safari\", color: \"var(--chart-2)\" },\n\t\tfirefox: { label: \"Firefox\", color: \"var(--chart-3)\" },\n\t\tedge: { label: \"Edge\", color: \"var(--chart-4)\" },\n\t\tother: { label: \"Other\", color: \"var(--chart-5)\" },\n\t} satisfies Chart.ChartConfig;\n\n\tlet context = $state<ChartContextValue>();\n</script>\n\n<Card.Root>\n\t<Card.Header>\n\t\t<Card.Title>Bar Chart - Active</Card.Title>\n\t\t<Card.Description>January - June 2024</Card.Description>\n\t</Card.Header>\n\t<Card.Content>\n\t\t<Chart.Container config={chartConfig}>\n\t\t\t<BarChart\n\t\t\t\tbind:context\n\t\t\t\tdata={chartData}\n\t\t\t\tx=\"browser\"\n\t\t\t\tc=\"color\"\n\t\t\t\ty=\"visitors\"\n\t\t\t\tcRange={chartData.map((c) => c.color)}\n\t\t\t\txScale={scaleBand().padding(0.25)}\n\t\t\t\taxis=\"x\"\n\t\t\t\trule={false}\n\t\t\t\tprops={{\n\t\t\t\t\tbars: {\n\t\t\t\t\t\tstroke: \"none\",\n\t\t\t\t\t\tradius: 8,\n\t\t\t\t\t\trounded: \"all\", // use the height of the chart to animate the bars\n\t\t\t\t\t\tinitialY: context?.height,\n\t\t\t\t\t\tinitialHeight: 0,\n\t\t\t\t\t\tmotion: {\n\t\t\t\t\t\t\ty: { type: \"tween\", duration: 500, easing: cubicInOut },\n\t\t\t\t\t\t\theight: { type: \"tween\", duration: 500, easing: cubicInOut },\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\txAxis: {\n\t\t\t\t\t\tformat: (d) => chartConfig[d as keyof typeof chartConfig].label,\n\t\t\t\t\t},\n\t\t\t\t\thighlight: { area: { fill: \"none\" } },\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{#snippet tooltip()}\n\t\t\t\t\t<Chart.Tooltip hideLabel nameKey=\"visitors\" />\n\t\t\t\t{/snippet}\n\t\t\t\t{#snippet marks({ getBarsProps, visibleSeries })}\n\t\t\t\t\t{@const baseBarProps = getBarsProps(visibleSeries[0], 0)}\n\t\t\t\t\t{#each chartData as data, i (i)}\n\t\t\t\t\t\t{#if i === 2}\n\t\t\t\t\t\t\t<!-- The \"active\" bar -->\n\t\t\t\t\t\t\t<Bar\n\t\t\t\t\t\t\t\t{...baseBarProps}\n\t\t\t\t\t\t\t\tmotion=\"tween\"\n\t\t\t\t\t\t\t\tfill={data.color}\n\t\t\t\t\t\t\t\t{data}\n\t\t\t\t\t\t\t\tfillOpacity={0.8}\n\t\t\t\t\t\t\t\tstroke={data.color}\n\t\t\t\t\t\t\t\tstrokeWidth={2}\n\t\t\t\t\t\t\t\tstroke-dasharray={4}\n\t\t\t\t\t\t\t\tstroke-dashoffset={4}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t{:else}\n\t\t\t\t\t\t\t<Bar {...baseBarProps} fill={data.color} {data} motion=\"tween\" />\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t{/each}\n\t\t\t\t{/snippet}\n\t\t\t</BarChart>\n\t\t\t<!-- todo -->\n\t\t</Chart.Container>\n\t</Card.Content>\n\t<Card.Footer>\n\t\t<div class=\"flex w-full items-start gap-2 text-sm\">\n\t\t\t<div class=\"grid gap-2\">\n\t\t\t\t<div class=\"flex items-center gap-2 leading-none font-medium\">\n\t\t\t\t\tTrending up by 5.2% this month <TrendingUpIcon class=\"size-4\" />\n\t\t\t\t</div>\n\t\t\t\t<div class=\"text-muted-foreground flex items-center gap-2 leading-none\">\n\t\t\t\t\tShowing total visitors for the last 6 months\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/chart-bar-default.svelte",
    "content": "<script lang=\"ts\">\n\timport { scaleBand } from \"d3-scale\";\n\timport { BarChart, type ChartContextValue } from \"layerchart\";\n\timport TrendingUpIcon from \"@lucide/svelte/icons/trending-up\";\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport { cubicInOut } from \"svelte/easing\";\n\n\tconst chartData = [\n\t\t{ month: \"January\", desktop: 186 },\n\t\t{ month: \"February\", desktop: 305 },\n\t\t{ month: \"March\", desktop: 237 },\n\t\t{ month: \"April\", desktop: 73 },\n\t\t{ month: \"May\", desktop: 209 },\n\t\t{ month: \"June\", desktop: 214 },\n\t];\n\n\tconst chartConfig = {\n\t\tdesktop: { label: \"Desktop\", color: \"var(--chart-1)\" },\n\t} satisfies Chart.ChartConfig;\n\n\tlet context = $state<ChartContextValue>();\n</script>\n\n<Card.Root>\n\t<Card.Header>\n\t\t<Card.Title>Bar Chart</Card.Title>\n\t\t<Card.Description>January - June 2024</Card.Description>\n\t</Card.Header>\n\t<Card.Content>\n\t\t<Chart.Container config={chartConfig}>\n\t\t\t<BarChart\n\t\t\t\tbind:context\n\t\t\t\tdata={chartData}\n\t\t\t\txScale={scaleBand().padding(0.25)}\n\t\t\t\tx=\"month\"\n\t\t\t\taxis=\"x\"\n\t\t\t\tseries={[{ key: \"desktop\", label: \"Desktop\", color: chartConfig.desktop.color }]}\n\t\t\t\tprops={{\n\t\t\t\t\tbars: {\n\t\t\t\t\t\tstroke: \"none\",\n\t\t\t\t\t\trounded: \"all\",\n\t\t\t\t\t\tradius: 8,\n\t\t\t\t\t\t// use the height of the chart to animate the bars\n\t\t\t\t\t\tinitialY: context?.height,\n\t\t\t\t\t\tinitialHeight: 0,\n\t\t\t\t\t\tmotion: {\n\t\t\t\t\t\t\tx: { type: \"tween\", duration: 500, easing: cubicInOut },\n\t\t\t\t\t\t\twidth: { type: \"tween\", duration: 500, easing: cubicInOut },\n\t\t\t\t\t\t\theight: { type: \"tween\", duration: 500, easing: cubicInOut },\n\t\t\t\t\t\t\ty: { type: \"tween\", duration: 500, easing: cubicInOut },\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\thighlight: { area: { fill: \"none\" } },\n\t\t\t\t\txAxis: { format: (d) => d.slice(0, 3) },\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{#snippet tooltip()}\n\t\t\t\t\t<Chart.Tooltip hideLabel />\n\t\t\t\t{/snippet}\n\t\t\t</BarChart>\n\t\t</Chart.Container>\n\t</Card.Content>\n\t<Card.Footer>\n\t\t<div class=\"flex w-full items-start gap-2 text-sm\">\n\t\t\t<div class=\"grid gap-2\">\n\t\t\t\t<div class=\"flex items-center gap-2 leading-none font-medium\">\n\t\t\t\t\tTrending up by 5.2% this month <TrendingUpIcon class=\"size-4\" />\n\t\t\t\t</div>\n\t\t\t\t<div class=\"text-muted-foreground flex items-center gap-2 leading-none\">\n\t\t\t\t\tShowing total visitors for the last 6 months\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/chart-bar-horizontal.svelte",
    "content": "<script lang=\"ts\">\n\timport { BarChart } from \"layerchart\";\n\timport TrendingUpIcon from \"@lucide/svelte/icons/trending-up\";\n\timport { scaleBand } from \"d3-scale\";\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport { cubicInOut } from \"svelte/easing\";\n\n\tconst chartData = [\n\t\t{ month: \"January\", desktop: 186 },\n\t\t{ month: \"February\", desktop: 305 },\n\t\t{ month: \"March\", desktop: 237 },\n\t\t{ month: \"April\", desktop: 73 },\n\t\t{ month: \"May\", desktop: 209 },\n\t\t{ month: \"June\", desktop: 214 },\n\t];\n\n\tconst chartConfig = {\n\t\tdesktop: { label: \"Desktop\", color: \"var(--chart-1)\" },\n\t} satisfies Chart.ChartConfig;\n</script>\n\n<Card.Root>\n\t<Card.Header>\n\t\t<Card.Title>Bar Chart - Horizontal</Card.Title>\n\t\t<Card.Description>January - June 2024</Card.Description>\n\t</Card.Header>\n\t<Card.Content>\n\t\t<Chart.Container config={chartConfig}>\n\t\t\t<BarChart\n\t\t\t\tdata={chartData}\n\t\t\t\torientation=\"horizontal\"\n\t\t\t\tyScale={scaleBand().padding(0.25)}\n\t\t\t\ty=\"month\"\n\t\t\t\tseries={[{ key: \"desktop\", label: \"Desktop\", color: chartConfig.desktop.color }]}\n\t\t\t\tpadding={{ left: 20 }}\n\t\t\t\tgrid={false}\n\t\t\t\trule={false}\n\t\t\t\taxis=\"y\"\n\t\t\t\tprops={{\n\t\t\t\t\tbars: {\n\t\t\t\t\t\tstroke: \"none\",\n\t\t\t\t\t\tradius: 5,\n\t\t\t\t\t\tinsets: {\n\t\t\t\t\t\t\tleft: 24,\n\t\t\t\t\t\t},\n\t\t\t\t\t\trounded: \"all\",\n\t\t\t\t\t\tinitialWidth: 0,\n\t\t\t\t\t\tinitialX: 0,\n\t\t\t\t\t\tmotion: {\n\t\t\t\t\t\t\tx: { type: \"tween\", duration: 500, easing: cubicInOut },\n\t\t\t\t\t\t\twidth: { type: \"tween\", duration: 500, easing: cubicInOut },\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\thighlight: { area: { fill: \"none\" } },\n\t\t\t\t\tyAxis: { format: (d) => d.slice(0, 3) },\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{#snippet tooltip()}\n\t\t\t\t\t<Chart.Tooltip hideLabel />\n\t\t\t\t{/snippet}\n\t\t\t</BarChart>\n\t\t</Chart.Container>\n\t</Card.Content>\n\t<Card.Footer>\n\t\t<div class=\"flex w-full items-start gap-2 text-sm\">\n\t\t\t<div class=\"grid gap-2\">\n\t\t\t\t<div class=\"flex items-center gap-2 leading-none font-medium\">\n\t\t\t\t\tTrending up by 5.2% this month <TrendingUpIcon class=\"size-4\" />\n\t\t\t\t</div>\n\t\t\t\t<div class=\"text-muted-foreground flex items-center gap-2 leading-none\">\n\t\t\t\t\tShowing total visitors for the last 6 months\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/chart-bar-interactive.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport { scaleUtc } from \"d3-scale\";\n\timport { BarChart, type ChartContextValue, Highlight } from \"layerchart\";\n\timport { cubicInOut } from \"svelte/easing\";\n\n\tconst chartData = [\n\t\t{ date: new Date(\"2024-04-01\"), desktop: 222, mobile: 150 },\n\t\t{ date: new Date(\"2024-04-02\"), desktop: 97, mobile: 180 },\n\t\t{ date: new Date(\"2024-04-03\"), desktop: 167, mobile: 120 },\n\t\t{ date: new Date(\"2024-04-04\"), desktop: 242, mobile: 260 },\n\t\t{ date: new Date(\"2024-04-05\"), desktop: 373, mobile: 290 },\n\t\t{ date: new Date(\"2024-04-06\"), desktop: 301, mobile: 340 },\n\t\t{ date: new Date(\"2024-04-07\"), desktop: 245, mobile: 180 },\n\t\t{ date: new Date(\"2024-04-08\"), desktop: 409, mobile: 320 },\n\t\t{ date: new Date(\"2024-04-09\"), desktop: 59, mobile: 110 },\n\t\t{ date: new Date(\"2024-04-10\"), desktop: 261, mobile: 190 },\n\t\t{ date: new Date(\"2024-04-11\"), desktop: 327, mobile: 350 },\n\t\t{ date: new Date(\"2024-04-12\"), desktop: 292, mobile: 210 },\n\t\t{ date: new Date(\"2024-04-13\"), desktop: 342, mobile: 380 },\n\t\t{ date: new Date(\"2024-04-14\"), desktop: 137, mobile: 220 },\n\t\t{ date: new Date(\"2024-04-15\"), desktop: 120, mobile: 170 },\n\t\t{ date: new Date(\"2024-04-16\"), desktop: 138, mobile: 190 },\n\t\t{ date: new Date(\"2024-04-17\"), desktop: 446, mobile: 360 },\n\t\t{ date: new Date(\"2024-04-18\"), desktop: 364, mobile: 410 },\n\t\t{ date: new Date(\"2024-04-19\"), desktop: 243, mobile: 180 },\n\t\t{ date: new Date(\"2024-04-20\"), desktop: 89, mobile: 150 },\n\t\t{ date: new Date(\"2024-04-21\"), desktop: 137, mobile: 200 },\n\t\t{ date: new Date(\"2024-04-22\"), desktop: 224, mobile: 170 },\n\t\t{ date: new Date(\"2024-04-23\"), desktop: 138, mobile: 230 },\n\t\t{ date: new Date(\"2024-04-24\"), desktop: 387, mobile: 290 },\n\t\t{ date: new Date(\"2024-04-25\"), desktop: 215, mobile: 250 },\n\t\t{ date: new Date(\"2024-04-26\"), desktop: 75, mobile: 130 },\n\t\t{ date: new Date(\"2024-04-27\"), desktop: 383, mobile: 420 },\n\t\t{ date: new Date(\"2024-04-28\"), desktop: 122, mobile: 180 },\n\t\t{ date: new Date(\"2024-04-29\"), desktop: 315, mobile: 240 },\n\t\t{ date: new Date(\"2024-04-30\"), desktop: 454, mobile: 380 },\n\t\t{ date: new Date(\"2024-05-01\"), desktop: 165, mobile: 220 },\n\t\t{ date: new Date(\"2024-05-02\"), desktop: 293, mobile: 310 },\n\t\t{ date: new Date(\"2024-05-03\"), desktop: 247, mobile: 190 },\n\t\t{ date: new Date(\"2024-05-04\"), desktop: 385, mobile: 420 },\n\t\t{ date: new Date(\"2024-05-05\"), desktop: 481, mobile: 390 },\n\t\t{ date: new Date(\"2024-05-06\"), desktop: 498, mobile: 520 },\n\t\t{ date: new Date(\"2024-05-07\"), desktop: 388, mobile: 300 },\n\t\t{ date: new Date(\"2024-05-08\"), desktop: 149, mobile: 210 },\n\t\t{ date: new Date(\"2024-05-09\"), desktop: 227, mobile: 180 },\n\t\t{ date: new Date(\"2024-05-10\"), desktop: 293, mobile: 330 },\n\t\t{ date: new Date(\"2024-05-11\"), desktop: 335, mobile: 270 },\n\t\t{ date: new Date(\"2024-05-12\"), desktop: 197, mobile: 240 },\n\t\t{ date: new Date(\"2024-05-13\"), desktop: 197, mobile: 160 },\n\t\t{ date: new Date(\"2024-05-14\"), desktop: 448, mobile: 490 },\n\t\t{ date: new Date(\"2024-05-15\"), desktop: 473, mobile: 380 },\n\t\t{ date: new Date(\"2024-05-16\"), desktop: 338, mobile: 400 },\n\t\t{ date: new Date(\"2024-05-17\"), desktop: 499, mobile: 420 },\n\t\t{ date: new Date(\"2024-05-18\"), desktop: 315, mobile: 350 },\n\t\t{ date: new Date(\"2024-05-19\"), desktop: 235, mobile: 180 },\n\t\t{ date: new Date(\"2024-05-20\"), desktop: 177, mobile: 230 },\n\t\t{ date: new Date(\"2024-05-21\"), desktop: 82, mobile: 140 },\n\t\t{ date: new Date(\"2024-05-22\"), desktop: 81, mobile: 120 },\n\t\t{ date: new Date(\"2024-05-23\"), desktop: 252, mobile: 290 },\n\t\t{ date: new Date(\"2024-05-24\"), desktop: 294, mobile: 220 },\n\t\t{ date: new Date(\"2024-05-25\"), desktop: 201, mobile: 250 },\n\t\t{ date: new Date(\"2024-05-26\"), desktop: 213, mobile: 170 },\n\t\t{ date: new Date(\"2024-05-27\"), desktop: 420, mobile: 460 },\n\t\t{ date: new Date(\"2024-05-28\"), desktop: 233, mobile: 190 },\n\t\t{ date: new Date(\"2024-05-29\"), desktop: 78, mobile: 130 },\n\t\t{ date: new Date(\"2024-05-30\"), desktop: 340, mobile: 280 },\n\t\t{ date: new Date(\"2024-05-31\"), desktop: 178, mobile: 230 },\n\t\t{ date: new Date(\"2024-06-01\"), desktop: 178, mobile: 200 },\n\t\t{ date: new Date(\"2024-06-02\"), desktop: 470, mobile: 410 },\n\t\t{ date: new Date(\"2024-06-03\"), desktop: 103, mobile: 160 },\n\t\t{ date: new Date(\"2024-06-04\"), desktop: 439, mobile: 380 },\n\t\t{ date: new Date(\"2024-06-05\"), desktop: 88, mobile: 140 },\n\t\t{ date: new Date(\"2024-06-06\"), desktop: 294, mobile: 250 },\n\t\t{ date: new Date(\"2024-06-07\"), desktop: 323, mobile: 370 },\n\t\t{ date: new Date(\"2024-06-08\"), desktop: 385, mobile: 320 },\n\t\t{ date: new Date(\"2024-06-09\"), desktop: 438, mobile: 480 },\n\t\t{ date: new Date(\"2024-06-10\"), desktop: 155, mobile: 200 },\n\t\t{ date: new Date(\"2024-06-11\"), desktop: 92, mobile: 150 },\n\t\t{ date: new Date(\"2024-06-12\"), desktop: 492, mobile: 420 },\n\t\t{ date: new Date(\"2024-06-13\"), desktop: 81, mobile: 130 },\n\t\t{ date: new Date(\"2024-06-14\"), desktop: 426, mobile: 380 },\n\t\t{ date: new Date(\"2024-06-15\"), desktop: 307, mobile: 350 },\n\t\t{ date: new Date(\"2024-06-16\"), desktop: 371, mobile: 310 },\n\t\t{ date: new Date(\"2024-06-17\"), desktop: 475, mobile: 520 },\n\t\t{ date: new Date(\"2024-06-18\"), desktop: 107, mobile: 170 },\n\t\t{ date: new Date(\"2024-06-19\"), desktop: 341, mobile: 290 },\n\t\t{ date: new Date(\"2024-06-20\"), desktop: 408, mobile: 450 },\n\t\t{ date: new Date(\"2024-06-21\"), desktop: 169, mobile: 210 },\n\t\t{ date: new Date(\"2024-06-22\"), desktop: 317, mobile: 270 },\n\t\t{ date: new Date(\"2024-06-23\"), desktop: 480, mobile: 530 },\n\t\t{ date: new Date(\"2024-06-24\"), desktop: 132, mobile: 180 },\n\t\t{ date: new Date(\"2024-06-25\"), desktop: 141, mobile: 190 },\n\t\t{ date: new Date(\"2024-06-26\"), desktop: 434, mobile: 380 },\n\t\t{ date: new Date(\"2024-06-27\"), desktop: 448, mobile: 490 },\n\t\t{ date: new Date(\"2024-06-28\"), desktop: 149, mobile: 200 },\n\t\t{ date: new Date(\"2024-06-29\"), desktop: 103, mobile: 160 },\n\t\t{ date: new Date(\"2024-06-30\"), desktop: 446, mobile: 400 },\n\t];\n\n\tconst chartConfig = {\n\t\tviews: { label: \"Page Views\", color: \"\" },\n\t\tdesktop: { label: \"Desktop\", color: \"var(--chart-2)\" },\n\t\tmobile: { label: \"Mobile\", color: \"var(--chart-1)\" },\n\t} satisfies Chart.ChartConfig;\n\tlet context = $state<ChartContextValue>();\n\n\tlet activeChart = $state<keyof typeof chartConfig>(\"desktop\");\n\n\tconst total = $derived({\n\t\tdesktop: chartData.reduce((acc, curr) => acc + curr.desktop, 0),\n\t\tmobile: chartData.reduce((acc, curr) => acc + curr.mobile, 0),\n\t});\n\n\tconst activeSeries = $derived([\n\t\t{\n\t\t\tkey: activeChart,\n\t\t\tlabel: chartConfig[activeChart].label,\n\t\t\tcolor: chartConfig[activeChart].color,\n\t\t},\n\t]);\n</script>\n\n<Card.Root>\n\t<Card.Header class=\"flex flex-col items-stretch space-y-0 border-b p-0 sm:flex-row\">\n\t\t<div class=\"flex flex-1 flex-col justify-center gap-1 px-6 py-5 sm:py-6\">\n\t\t\t<Card.Title>Bar Chart - Interactive</Card.Title>\n\t\t\t<Card.Description>Showing total visitors for the last 3 months</Card.Description>\n\t\t</div>\n\t\t<div class=\"flex\">\n\t\t\t{#each [\"desktop\", \"mobile\"] as key (key)}\n\t\t\t\t{@const chart = key as keyof typeof chartConfig}\n\t\t\t\t<button\n\t\t\t\t\tdata-active={activeChart === chart}\n\t\t\t\t\tclass=\"data-[active=true]:bg-muted/50 relative z-30 flex flex-1 flex-col justify-center gap-1 border-t px-6 py-4 text-start even:border-s sm:border-s sm:border-t-0 sm:px-8 sm:py-6\"\n\t\t\t\t\tonclick={() => (activeChart = chart)}\n\t\t\t\t>\n\t\t\t\t\t<span class=\"text-muted-foreground text-xs\">\n\t\t\t\t\t\t{chartConfig[chart].label}\n\t\t\t\t\t</span>\n\t\t\t\t\t<span class=\"text-lg leading-none font-bold sm:text-3xl\">\n\t\t\t\t\t\t{total[key as keyof typeof total].toLocaleString()}\n\t\t\t\t\t</span>\n\t\t\t\t</button>\n\t\t\t{/each}\n\t\t</div>\n\t</Card.Header>\n\t<Card.Content class=\"px-2 sm:p-6\">\n\t\t<Chart.Container config={chartConfig} class=\"aspect-auto h-[250px] w-full\">\n\t\t\t<BarChart\n\t\t\t\tbind:context\n\t\t\t\tdata={chartData}\n\t\t\t\tx=\"date\"\n\t\t\t\taxis=\"x\"\n\t\t\t\tseries={activeSeries}\n\t\t\t\tprops={{\n\t\t\t\t\tbars: {\n\t\t\t\t\t\tstroke: \"none\",\n\t\t\t\t\t\trounded: \"none\",\n\t\t\t\t\t\t// use the height of the chart to animate the bars\n\t\t\t\t\t\tinitialY: context?.height,\n\t\t\t\t\t\tinitialHeight: 0,\n\t\t\t\t\t\tmotion: {\n\t\t\t\t\t\t\ty: { type: \"tween\", duration: 500, easing: cubicInOut },\n\t\t\t\t\t\t\theight: { type: \"tween\", duration: 500, easing: cubicInOut },\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\thighlight: { area: { fill: \"none\" } },\n\t\t\t\t\txAxis: {\n\t\t\t\t\t\tformat: (d: Date) => {\n\t\t\t\t\t\t\treturn d.toLocaleDateString(\"en-US\", {\n\t\t\t\t\t\t\t\tmonth: \"short\",\n\t\t\t\t\t\t\t\tday: \"2-digit\",\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t},\n\t\t\t\t\t\tticks: (scale) => scaleUtc(scale.domain(), scale.range()).ticks(),\n\t\t\t\t\t},\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{#snippet belowMarks()}\n\t\t\t\t\t<Highlight area={{ class: \"fill-muted\" }} />\n\t\t\t\t{/snippet}\n\t\t\t\t{#snippet tooltip()}\n\t\t\t\t\t<Chart.Tooltip\n\t\t\t\t\t\tnameKey=\"views\"\n\t\t\t\t\t\tlabelFormatter={(v: Date) => {\n\t\t\t\t\t\t\treturn v.toLocaleDateString(\"en-US\", {\n\t\t\t\t\t\t\t\tmonth: \"short\",\n\t\t\t\t\t\t\t\tday: \"numeric\",\n\t\t\t\t\t\t\t\tyear: \"numeric\",\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t{/snippet}\n\t\t\t</BarChart>\n\t\t</Chart.Container>\n\t</Card.Content>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/chart-bar-label-custom.svelte",
    "content": "<script lang=\"ts\">\n\timport TrendingUpIcon from \"@lucide/svelte/icons/trending-up\";\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport { BarChart } from \"layerchart\";\n\timport { scaleBand } from \"d3-scale\";\n\timport { cubicInOut } from \"svelte/easing\";\n\n\tconst chartData = [\n\t\t{ month: \"January\", desktop: 186, mobile: 80 },\n\t\t{ month: \"February\", desktop: 305, mobile: 200 },\n\t\t{ month: \"March\", desktop: 237, mobile: 120 },\n\t\t{ month: \"April\", desktop: 73, mobile: 190 },\n\t\t{ month: \"May\", desktop: 209, mobile: 130 },\n\t\t{ month: \"June\", desktop: 214, mobile: 140 },\n\t];\n\n\tconst chartConfig = {\n\t\tdesktop: { label: \"Desktop\", color: \"var(--chart-1)\" },\n\t\tmobile: { label: \"Mobile\", color: \"var(--chart-2)\" },\n\t\tlabel: { color: \"var(--background)\" },\n\t} satisfies Chart.ChartConfig;\n</script>\n\n<Card.Root>\n\t<Card.Header>\n\t\t<Card.Title>Bar Chart - Custom Label</Card.Title>\n\t\t<Card.Description>January - June 2024</Card.Description>\n\t</Card.Header>\n\t<Card.Content>\n\t\t<Chart.Container config={chartConfig}>\n\t\t\t<BarChart\n\t\t\t\tlabels={{ offset: 12 }}\n\t\t\t\tdata={chartData}\n\t\t\t\torientation=\"horizontal\"\n\t\t\t\tyScale={scaleBand().padding(0.25)}\n\t\t\t\ty=\"month\"\n\t\t\t\taxis=\"y\"\n\t\t\t\trule={false}\n\t\t\t\tseries={[{ key: \"desktop\", label: \"Desktop\", color: chartConfig.desktop.color }]}\n\t\t\t\tpadding={{ right: 16 }}\n\t\t\t\tprops={{\n\t\t\t\t\tbars: {\n\t\t\t\t\t\tstroke: \"none\",\n\t\t\t\t\t\tradius: 5,\n\t\t\t\t\t\trounded: \"all\",\n\t\t\t\t\t\tinitialWidth: 0,\n\t\t\t\t\t\tinitialX: 0,\n\t\t\t\t\t\tmotion: {\n\t\t\t\t\t\t\tx: { type: \"tween\", duration: 500, easing: cubicInOut },\n\t\t\t\t\t\t\twidth: { type: \"tween\", duration: 500, easing: cubicInOut },\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\thighlight: { area: { fill: \"none\" } },\n\t\t\t\t\tyAxis: {\n\t\t\t\t\t\ttickLabelProps: {\n\t\t\t\t\t\t\ttextAnchor: \"start\",\n\t\t\t\t\t\t\tdx: 6,\n\t\t\t\t\t\t\tclass: \"stroke-none fill-background!\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttickLength: 0,\n\t\t\t\t\t},\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{#snippet tooltip()}\n\t\t\t\t\t<Chart.Tooltip hideLabel />\n\t\t\t\t{/snippet}\n\t\t\t</BarChart>\n\t\t</Chart.Container>\n\t</Card.Content>\n\t<Card.Footer>\n\t\t<div class=\"flex w-full items-start gap-2 text-sm\">\n\t\t\t<div class=\"grid gap-2\">\n\t\t\t\t<div class=\"flex items-center gap-2 leading-none font-medium\">\n\t\t\t\t\tTrending up by 5.2% this month <TrendingUpIcon class=\"size-4\" />\n\t\t\t\t</div>\n\t\t\t\t<div class=\"text-muted-foreground flex items-center gap-2 leading-none\">\n\t\t\t\t\tShowing total visitors for the last 6 months\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/chart-bar-label.svelte",
    "content": "<script lang=\"ts\">\n\timport { scaleBand } from \"d3-scale\";\n\timport { BarChart, type ChartContextValue } from \"layerchart\";\n\timport TrendingUpIcon from \"@lucide/svelte/icons/trending-up\";\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport { cubicInOut } from \"svelte/easing\";\n\n\tconst chartData = [\n\t\t{ month: \"January\", desktop: 186 },\n\t\t{ month: \"February\", desktop: 305 },\n\t\t{ month: \"March\", desktop: 237 },\n\t\t{ month: \"April\", desktop: 73 },\n\t\t{ month: \"May\", desktop: 209 },\n\t\t{ month: \"June\", desktop: 214 },\n\t];\n\n\tconst chartConfig = {\n\t\tdesktop: { label: \"Desktop\", color: \"var(--chart-1)\" },\n\t} satisfies Chart.ChartConfig;\n\n\tlet context = $state<ChartContextValue>();\n</script>\n\n<Card.Root>\n\t<Card.Header>\n\t\t<Card.Title>Bar Chart - Label</Card.Title>\n\t\t<Card.Description>January - June 2024</Card.Description>\n\t</Card.Header>\n\t<Card.Content>\n\t\t<Chart.Container config={chartConfig}>\n\t\t\t<BarChart\n\t\t\t\tlabels={{ offset: 12 }}\n\t\t\t\tdata={chartData}\n\t\t\t\txScale={scaleBand().padding(0.25)}\n\t\t\t\tx=\"month\"\n\t\t\t\tseries={[{ key: \"desktop\", label: \"Desktop\", color: chartConfig.desktop.color }]}\n\t\t\t\taxis=\"x\"\n\t\t\t\trule={false}\n\t\t\t\tprops={{\n\t\t\t\t\tbars: {\n\t\t\t\t\t\tstroke: \"none\",\n\t\t\t\t\t\tradius: 8,\n\t\t\t\t\t\trounded: \"all\",\n\t\t\t\t\t\t// use the height of the chart to animate the bars\n\t\t\t\t\t\tinitialY: (context?.height ?? 0) + 180,\n\t\t\t\t\t\tinitialHeight: 0,\n\t\t\t\t\t\tmotion: {\n\t\t\t\t\t\t\ty: { type: \"tween\", duration: 500, easing: cubicInOut },\n\t\t\t\t\t\t\theight: { type: \"tween\", duration: 500, easing: cubicInOut },\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\thighlight: { area: { fill: \"none\" } },\n\t\t\t\t\txAxis: { format: (d) => d.slice(0, 3) },\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{#snippet tooltip()}\n\t\t\t\t\t<Chart.Tooltip hideLabel />\n\t\t\t\t{/snippet}\n\t\t\t</BarChart>\n\t\t</Chart.Container>\n\t</Card.Content>\n\t<Card.Footer>\n\t\t<div class=\"flex w-full items-start gap-2 text-sm\">\n\t\t\t<div class=\"grid gap-2\">\n\t\t\t\t<div class=\"flex items-center gap-2 leading-none font-medium\">\n\t\t\t\t\tTrending up by 5.2% this month <TrendingUpIcon class=\"size-4\" />\n\t\t\t\t</div>\n\t\t\t\t<div class=\"text-muted-foreground flex items-center gap-2 leading-none\">\n\t\t\t\t\tShowing total visitors for the last 6 months\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/chart-bar-mixed.svelte",
    "content": "<script lang=\"ts\">\n\timport { BarChart } from \"layerchart\";\n\timport TrendingUpIcon from \"@lucide/svelte/icons/trending-up\";\n\timport { scaleBand } from \"d3-scale\";\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport { cubicInOut } from \"svelte/easing\";\n\n\tconst chartData = [\n\t\t{ browser: \"chrome\", visitors: 275, color: \"var(--color-chrome)\" },\n\t\t{ browser: \"safari\", visitors: 200, color: \"var(--color-safari)\" },\n\t\t{ browser: \"firefox\", visitors: 187, color: \"var(--color-firefox)\" },\n\t\t{ browser: \"edge\", visitors: 173, color: \"var(--color-edge)\" },\n\t\t{ browser: \"other\", visitors: 90, color: \"var(--color-other)\" },\n\t];\n\n\tconst chartConfig = {\n\t\tvisitors: { label: \"Visitors\" },\n\t\tchrome: { label: \"Chrome\", color: \"var(--chart-1)\" },\n\t\tsafari: { label: \"Safari\", color: \"var(--chart-2)\" },\n\t\tfirefox: { label: \"Firefox\", color: \"var(--chart-3)\" },\n\t\tedge: { label: \"Edge\", color: \"var(--chart-4)\" },\n\t\tother: { label: \"Other\", color: \"var(--chart-5)\" },\n\t} satisfies Chart.ChartConfig;\n</script>\n\n<Card.Root>\n\t<Card.Header>\n\t\t<Card.Title>Bar Chart - Mixed</Card.Title>\n\t\t<Card.Description>January - June 2024</Card.Description>\n\t</Card.Header>\n\t<Card.Content>\n\t\t<Chart.Container config={chartConfig}>\n\t\t\t<BarChart\n\t\t\t\tdata={chartData}\n\t\t\t\torientation=\"horizontal\"\n\t\t\t\tyScale={scaleBand().padding(0.25)}\n\t\t\t\ty=\"browser\"\n\t\t\t\tx=\"visitors\"\n\t\t\t\tcRange={chartData.map((c) => c.color)}\n\t\t\t\tc=\"color\"\n\t\t\t\tpadding={{ left: 48 }}\n\t\t\t\tgrid={false}\n\t\t\t\trule={false}\n\t\t\t\taxis=\"y\"\n\t\t\t\tprops={{\n\t\t\t\t\tbars: {\n\t\t\t\t\t\tstroke: \"none\",\n\t\t\t\t\t\tradius: 5,\n\t\t\t\t\t\trounded: \"all\",\n\t\t\t\t\t\tinitialWidth: 0,\n\t\t\t\t\t\tinitialX: 0,\n\t\t\t\t\t\tmotion: {\n\t\t\t\t\t\t\tx: { type: \"tween\", duration: 500, easing: cubicInOut },\n\t\t\t\t\t\t\twidth: { type: \"tween\", duration: 500, easing: cubicInOut },\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\thighlight: { area: { fill: \"none\" } },\n\t\t\t\t\tyAxis: {\n\t\t\t\t\t\tformat: (d) => chartConfig[d as keyof typeof chartConfig].label,\n\t\t\t\t\t\ttickLabelProps: {\n\t\t\t\t\t\t\tsvgProps: {\n\t\t\t\t\t\t\t\tx: -16,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{#snippet tooltip()}\n\t\t\t\t\t<Chart.Tooltip hideLabel nameKey=\"visitors\" />\n\t\t\t\t{/snippet}\n\t\t\t</BarChart>\n\t\t</Chart.Container>\n\t</Card.Content>\n\t<Card.Footer>\n\t\t<div class=\"flex w-full items-start gap-2 text-sm\">\n\t\t\t<div class=\"grid gap-2\">\n\t\t\t\t<div class=\"flex items-center gap-2 leading-none font-medium\">\n\t\t\t\t\tTrending up by 5.2% this month <TrendingUpIcon class=\"size-4\" />\n\t\t\t\t</div>\n\t\t\t\t<div class=\"text-muted-foreground flex items-center gap-2 leading-none\">\n\t\t\t\t\tShowing total visitors for the last 6 months\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/chart-bar-multiple.svelte",
    "content": "<script lang=\"ts\">\n\timport { scaleBand } from \"d3-scale\";\n\timport { BarChart, type ChartContextValue } from \"layerchart\";\n\timport TrendingUpIcon from \"@lucide/svelte/icons/trending-up\";\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport { cubicInOut } from \"svelte/easing\";\n\n\tconst chartData = [\n\t\t{ month: \"January\", desktop: 186, mobile: 80 },\n\t\t{ month: \"February\", desktop: 305, mobile: 200 },\n\t\t{ month: \"March\", desktop: 237, mobile: 120 },\n\t\t{ month: \"April\", desktop: 73, mobile: 190 },\n\t\t{ month: \"May\", desktop: 209, mobile: 130 },\n\t\t{ month: \"June\", desktop: 214, mobile: 140 },\n\t];\n\n\tconst chartConfig = {\n\t\tdesktop: { label: \"Desktop\", color: \"var(--chart-1)\" },\n\t\tmobile: { label: \"Mobile\", color: \"var(--chart-2)\" },\n\t} satisfies Chart.ChartConfig;\n\n\tlet context = $state<ChartContextValue>();\n</script>\n\n<Card.Root>\n\t<Card.Header>\n\t\t<Card.Title>Bar Chart - Multiple</Card.Title>\n\t\t<Card.Description>January - June 2024</Card.Description>\n\t</Card.Header>\n\t<Card.Content>\n\t\t<Chart.Container config={chartConfig}>\n\t\t\t<BarChart\n\t\t\t\tbind:context\n\t\t\t\tdata={chartData}\n\t\t\t\txScale={scaleBand().padding(0.25)}\n\t\t\t\tx=\"month\"\n\t\t\t\taxis=\"x\"\n\t\t\t\tseries={[\n\t\t\t\t\t{ key: \"desktop\", label: \"Desktop\", color: chartConfig.desktop.color },\n\t\t\t\t\t{ key: \"mobile\", label: \"Mobile\", color: chartConfig.mobile.color },\n\t\t\t\t]}\n\t\t\t\tx1Scale={scaleBand().paddingInner(0.2)}\n\t\t\t\tseriesLayout=\"group\"\n\t\t\t\trule={false}\n\t\t\t\tprops={{\n\t\t\t\t\tbars: {\n\t\t\t\t\t\tstroke: \"none\",\n\t\t\t\t\t\tstrokeWidth: 0,\n\t\t\t\t\t\trounded: \"all\",\n\t\t\t\t\t\t// use the height of the chart to animate the bars\n\t\t\t\t\t\tinitialY: context?.height,\n\t\t\t\t\t\tinitialHeight: 0,\n\t\t\t\t\t\tmotion: {\n\t\t\t\t\t\t\ty: { type: \"tween\", duration: 500, easing: cubicInOut },\n\t\t\t\t\t\t\theight: { type: \"tween\", duration: 500, easing: cubicInOut },\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\thighlight: { area: { fill: \"none\" } },\n\t\t\t\t\txAxis: { format: (d) => d.slice(0, 3) },\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{#snippet tooltip()}\n\t\t\t\t\t<Chart.Tooltip indicator=\"dashed\" />\n\t\t\t\t{/snippet}\n\t\t\t</BarChart>\n\t\t</Chart.Container>\n\t</Card.Content>\n\t<Card.Footer>\n\t\t<div class=\"flex w-full items-start gap-2 text-sm\">\n\t\t\t<div class=\"grid gap-2\">\n\t\t\t\t<div class=\"flex items-center gap-2 leading-none font-medium\">\n\t\t\t\t\tTrending up by 5.2% this month <TrendingUpIcon class=\"size-4\" />\n\t\t\t\t</div>\n\t\t\t\t<div class=\"text-muted-foreground flex items-center gap-2 leading-none\">\n\t\t\t\t\tShowing total visitors for the last 6 months\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/chart-bar-negative.svelte",
    "content": "<script lang=\"ts\">\n\timport { scaleBand } from \"d3-scale\";\n\timport { BarChart } from \"layerchart\";\n\timport TrendingUpIcon from \"@lucide/svelte/icons/trending-up\";\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\n\tconst chartData = [\n\t\t{ month: \"January\", visitors: 186 },\n\t\t{ month: \"February\", visitors: 205 },\n\t\t{ month: \"March\", visitors: -207 },\n\t\t{ month: \"April\", visitors: 173 },\n\t\t{ month: \"May\", visitors: -209 },\n\t\t{ month: \"June\", visitors: 214 },\n\t];\n\n\tconst chartConfig = {\n\t\tvisitors: { label: \"Visitors\" },\n\t} satisfies Chart.ChartConfig;\n</script>\n\n<Card.Root>\n\t<Card.Header>\n\t\t<Card.Title>Bar Chart - Negative</Card.Title>\n\t\t<Card.Description>January - June 2024</Card.Description>\n\t</Card.Header>\n\t<Card.Content>\n\t\t<Chart.Container config={chartConfig}>\n\t\t\t<BarChart\n\t\t\t\tlabels={{\n\t\t\t\t\toffset: 5,\n\t\t\t\t\tvalue: (d) => d.month,\n\t\t\t\t\tfill: (d) => {\n\t\t\t\t\t\tif (d.visitors > 0) {\n\t\t\t\t\t\t\treturn \"var(--chart-1)\";\n\t\t\t\t\t\t} else if (d.visitors < 0) {\n\t\t\t\t\t\t\treturn \"var(--chart-2)\";\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t}}\n\t\t\t\tdata={chartData}\n\t\t\t\txScale={scaleBand().padding(0.25)}\n\t\t\t\tx=\"month\"\n\t\t\t\ty=\"visitors\"\n\t\t\t\tyNice={4}\n\t\t\t\tyBaseline={0}\n\t\t\t\tcRange={[\"var(--chart-1)\", \"var(--chart-2)\"]}\n\t\t\t\tc={(d) => (d.visitors > 0 ? \"var(--chart-1)\" : \"var(--chart-2)\")}\n\t\t\t\taxis={false}\n\t\t\t\tprops={{\n\t\t\t\t\tbars: { stroke: \"none\", radius: 0 },\n\t\t\t\t\thighlight: { area: { fill: \"none\" } },\n\t\t\t\t\txAxis: { format: (d) => d.slice(0, 3) },\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{#snippet tooltip()}\n\t\t\t\t\t<Chart.Tooltip hideLabel hideIndicator nameKey=\"visitors\" />\n\t\t\t\t{/snippet}\n\t\t\t</BarChart>\n\t\t</Chart.Container>\n\t</Card.Content>\n\t<Card.Footer>\n\t\t<div class=\"flex w-full items-start gap-2 text-sm\">\n\t\t\t<div class=\"grid gap-2\">\n\t\t\t\t<div class=\"flex items-center gap-2 leading-none font-medium\">\n\t\t\t\t\tTrending up by 5.2% this month <TrendingUpIcon class=\"size-4\" />\n\t\t\t\t</div>\n\t\t\t\t<div class=\"text-muted-foreground flex items-center gap-2 leading-none\">\n\t\t\t\t\tShowing total visitors for the last 6 months\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/chart-bar-stacked.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport { scaleBand } from \"d3-scale\";\n\timport { BarChart, Highlight, type ChartContextValue } from \"layerchart\";\n\timport TrendingUpIcon from \"@lucide/svelte/icons/trending-up\";\n\timport { cubicInOut } from \"svelte/easing\";\n\n\tconst chartData = [\n\t\t{ month: \"January\", desktop: 186, mobile: 80 },\n\t\t{ month: \"February\", desktop: 305, mobile: 200 },\n\t\t{ month: \"March\", desktop: 237, mobile: 120 },\n\t\t{ month: \"April\", desktop: 73, mobile: 190 },\n\t\t{ month: \"May\", desktop: 209, mobile: 130 },\n\t\t{ month: \"June\", desktop: 214, mobile: 140 },\n\t];\n\n\tconst chartConfig = {\n\t\tdesktop: { label: \"Desktop\", color: \"var(--chart-1)\" },\n\t\tmobile: { label: \"Mobile\", color: \"var(--chart-2)\" },\n\t} satisfies Chart.ChartConfig;\n\n\tlet context = $state<ChartContextValue>();\n</script>\n\n<Card.Root>\n\t<Card.Header>\n\t\t<Card.Title>Bar Chart - Stacked + Legend</Card.Title>\n\t\t<Card.Description>January - June 2024</Card.Description>\n\t</Card.Header>\n\t<Card.Content>\n\t\t<Chart.Container config={chartConfig}>\n\t\t\t<BarChart\n\t\t\t\tbind:context\n\t\t\t\tdata={chartData}\n\t\t\t\txScale={scaleBand().padding(0.25)}\n\t\t\t\tx=\"month\"\n\t\t\t\taxis=\"x\"\n\t\t\t\trule={false}\n\t\t\t\tseries={[\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"desktop\",\n\t\t\t\t\t\tlabel: \"Desktop\",\n\t\t\t\t\t\tcolor: chartConfig.desktop.color,\n\t\t\t\t\t\tprops: { rounded: \"bottom\" },\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"mobile\",\n\t\t\t\t\t\tlabel: \"Mobile\",\n\t\t\t\t\t\tcolor: chartConfig.mobile.color,\n\t\t\t\t\t},\n\t\t\t\t]}\n\t\t\t\tseriesLayout=\"stack\"\n\t\t\t\tprops={{\n\t\t\t\t\tbars: {\n\t\t\t\t\t\tstroke: \"none\",\n\t\t\t\t\t\tinitialY: context?.height,\n\t\t\t\t\t\tinitialHeight: 0,\n\t\t\t\t\t\tmotion: {\n\t\t\t\t\t\t\ty: { type: \"tween\", duration: 500, easing: cubicInOut },\n\t\t\t\t\t\t\theight: { type: \"tween\", duration: 500, easing: cubicInOut },\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\thighlight: { area: false },\n\t\t\t\t\txAxis: { format: (d) => d.slice(0, 3) },\n\t\t\t\t}}\n\t\t\t\tlegend\n\t\t\t>\n\t\t\t\t{#snippet belowMarks()}\n\t\t\t\t\t<Highlight area={{ class: \"fill-muted\" }} />\n\t\t\t\t{/snippet}\n\n\t\t\t\t{#snippet tooltip()}\n\t\t\t\t\t<Chart.Tooltip />\n\t\t\t\t{/snippet}\n\t\t\t</BarChart>\n\t\t</Chart.Container>\n\t</Card.Content>\n\t<Card.Footer>\n\t\t<div class=\"flex w-full items-start gap-2 text-sm\">\n\t\t\t<div class=\"grid gap-2\">\n\t\t\t\t<div class=\"flex items-center gap-2 leading-none font-medium\">\n\t\t\t\t\tTrending up by 5.2% this month <TrendingUpIcon class=\"size-4\" />\n\t\t\t\t</div>\n\t\t\t\t<div class=\"text-muted-foreground flex items-center gap-2 leading-none\">\n\t\t\t\t\tShowing total visitors for the last 6 months\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/chart-line-default.svelte",
    "content": "<script lang=\"ts\">\n\timport { LineChart } from \"layerchart\";\n\timport TrendingUpIcon from \"@lucide/svelte/icons/trending-up\";\n\timport { scaleUtc } from \"d3-scale\";\n\timport { curveNatural } from \"d3-shape\";\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\n\tconst chartData = [\n\t\t{ date: new Date(\"2024-01-01\"), desktop: 186 },\n\t\t{ date: new Date(\"2024-02-01\"), desktop: 305 },\n\t\t{ date: new Date(\"2024-03-01\"), desktop: 237 },\n\t\t{ date: new Date(\"2024-04-01\"), desktop: 73 },\n\t\t{ date: new Date(\"2024-05-01\"), desktop: 209 },\n\t\t{ date: new Date(\"2024-06-01\"), desktop: 214 },\n\t];\n\n\tconst chartConfig = {\n\t\tdesktop: { label: \"Desktop\", color: \"var(--chart-1)\" },\n\t} satisfies Chart.ChartConfig;\n</script>\n\n<Card.Root>\n\t<Card.Header>\n\t\t<Card.Title>Line Chart</Card.Title>\n\t\t<Card.Description>Showing total visitors for the last 6 months</Card.Description>\n\t</Card.Header>\n\t<Card.Content>\n\t\t<Chart.Container config={chartConfig}>\n\t\t\t<LineChart\n\t\t\t\tdata={chartData}\n\t\t\t\tx=\"date\"\n\t\t\t\txScale={scaleUtc()}\n\t\t\t\taxis=\"x\"\n\t\t\t\tseries={[\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"desktop\",\n\t\t\t\t\t\tlabel: \"Desktop\",\n\t\t\t\t\t\tcolor: chartConfig.desktop.color,\n\t\t\t\t\t},\n\t\t\t\t]}\n\t\t\t\tprops={{\n\t\t\t\t\tspline: { curve: curveNatural, motion: \"tween\", strokeWidth: 2 },\n\t\t\t\t\txAxis: {\n\t\t\t\t\t\tformat: (v: Date) => v.toLocaleDateString(\"en-US\", { month: \"short\" }),\n\t\t\t\t\t},\n\t\t\t\t\thighlight: { points: { r: 4 } },\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{#snippet tooltip()}\n\t\t\t\t\t<Chart.Tooltip hideLabel />\n\t\t\t\t{/snippet}\n\t\t\t</LineChart>\n\t\t</Chart.Container>\n\t</Card.Content>\n\t<Card.Footer>\n\t\t<div class=\"flex w-full items-start gap-2 text-sm\">\n\t\t\t<div class=\"grid gap-2\">\n\t\t\t\t<div class=\"flex items-center gap-2 leading-none font-medium\">\n\t\t\t\t\tTrending up by 5.2% this month <TrendingUpIcon class=\"size-4\" />\n\t\t\t\t</div>\n\t\t\t\t<div class=\"text-muted-foreground flex items-center gap-2 leading-none\">\n\t\t\t\t\tJanuary - June 2024\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/chart-line-dots-colors.svelte",
    "content": "<script lang=\"ts\">\n\timport TrendingUpIcon from \"@lucide/svelte/icons/trending-up\";\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport { LineChart } from \"layerchart\";\n\timport { curveNatural } from \"d3-shape\";\n\timport { scaleBand } from \"d3-scale\";\n\n\tconst chartData = [\n\t\t{ browser: \"chrome\", visitors: 275, color: \"var(--color-chrome)\" },\n\t\t{ browser: \"safari\", visitors: 200, color: \"var(--color-safari)\" },\n\t\t{ browser: \"firefox\", visitors: 187, color: \"var(--color-firefox)\" },\n\t\t{ browser: \"edge\", visitors: 173, color: \"var(--color-edge)\" },\n\t\t{ browser: \"other\", visitors: 90, color: \"var(--color-other)\" },\n\t];\n\n\tconst chartConfig = {\n\t\tvisitors: { label: \"Visitors\", color: \"var(--chart-2)\" },\n\t\tchrome: { label: \"Chrome\", color: \"var(--chart-1)\" },\n\t\tsafari: { label: \"Safari\", color: \"var(--chart-2)\" },\n\t\tfirefox: { label: \"Firefox\", color: \"var(--chart-3)\" },\n\t\tedge: { label: \"Edge\", color: \"var(--chart-4)\" },\n\t\tother: { label: \"Other\", color: \"var(--chart-5)\" },\n\t} satisfies Chart.ChartConfig;\n</script>\n\n<Card.Root>\n\t<Card.Header>\n\t\t<Card.Title>Line Chart - Dots Colors</Card.Title>\n\t\t<Card.Description>Showing total visitors for the last 6 months</Card.Description>\n\t</Card.Header>\n\t<Card.Content>\n\t\t<Chart.Container config={chartConfig}>\n\t\t\t<LineChart\n\t\t\t\tdata={chartData}\n\t\t\t\ty=\"visitors\"\n\t\t\t\tc={(v) => v.color}\n\t\t\t\tyPadding={[0, 25]}\n\t\t\t\tx=\"browser\"\n\t\t\t\taxis={false}\n\t\t\t\txScale={scaleBand()}\n\t\t\t\tprops={{\n\t\t\t\t\tspline: {\n\t\t\t\t\t\tcurve: curveNatural,\n\t\t\t\t\t\tmotion: \"tween\",\n\t\t\t\t\t\tstrokeWidth: 2,\n\t\t\t\t\t\tstroke: \"var(--color-visitors)\",\n\t\t\t\t\t},\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{#snippet tooltip()}\n\t\t\t\t\t<Chart.Tooltip hideLabel />\n\t\t\t\t{/snippet}\n\t\t\t</LineChart>\n\t\t</Chart.Container>\n\t</Card.Content>\n\t<Card.Footer>\n\t\t<div class=\"flex w-full items-start gap-2 text-sm\">\n\t\t\t<div class=\"grid gap-2\">\n\t\t\t\t<div class=\"flex items-center gap-2 leading-none font-medium\">\n\t\t\t\t\tTrending up by 5.2% this month <TrendingUpIcon class=\"size-4\" />\n\t\t\t\t</div>\n\t\t\t\t<div class=\"text-muted-foreground flex items-center gap-2 leading-none\">\n\t\t\t\t\tJanuary - June 2024\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/chart-line-dots-custom.svelte",
    "content": "<script lang=\"ts\">\n\timport { LineChart, Points } from \"layerchart\";\n\timport TrendingUpIcon from \"@lucide/svelte/icons/trending-up\";\n\timport GitCommitVerticalIcon from \"@lucide/svelte/icons/git-commit-vertical\";\n\timport { scaleUtc } from \"d3-scale\";\n\timport { curveNatural } from \"d3-shape\";\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\n\tconst chartData = [\n\t\t{ date: new Date(\"2024-01-01\"), desktop: 186 },\n\t\t{ date: new Date(\"2024-02-01\"), desktop: 305 },\n\t\t{ date: new Date(\"2024-03-01\"), desktop: 237 },\n\t\t{ date: new Date(\"2024-04-01\"), desktop: 73 },\n\t\t{ date: new Date(\"2024-05-01\"), desktop: 209 },\n\t\t{ date: new Date(\"2024-06-01\"), desktop: 214 },\n\t];\n\n\tconst chartConfig = {\n\t\tdesktop: { label: \"Desktop\", color: \"var(--chart-1)\" },\n\t} satisfies Chart.ChartConfig;\n</script>\n\n<Card.Root>\n\t<Card.Header>\n\t\t<Card.Title>Line Chart - Dots Custom</Card.Title>\n\t\t<Card.Description>Showing total visitors for the last 6 months</Card.Description>\n\t</Card.Header>\n\t<Card.Content>\n\t\t<Chart.Container config={chartConfig}>\n\t\t\t<LineChart\n\t\t\t\tdata={chartData}\n\t\t\t\tx=\"date\"\n\t\t\t\txScale={scaleUtc()}\n\t\t\t\taxis=\"x\"\n\t\t\t\tseries={[\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"desktop\",\n\t\t\t\t\t\tlabel: \"Desktop\",\n\t\t\t\t\t\tcolor: chartConfig.desktop.color,\n\t\t\t\t\t},\n\t\t\t\t]}\n\t\t\t\tprops={{\n\t\t\t\t\tspline: { curve: curveNatural, motion: \"tween\", strokeWidth: 2 },\n\t\t\t\t\thighlight: {\n\t\t\t\t\t\tpoints: {\n\t\t\t\t\t\t\tmotion: \"none\",\n\t\t\t\t\t\t\tr: 3,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\txAxis: {\n\t\t\t\t\t\tformat: (v: Date) => v.toLocaleDateString(\"en-US\", { month: \"short\" }),\n\t\t\t\t\t},\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{#snippet tooltip()}\n\t\t\t\t\t<Chart.Tooltip hideLabel />\n\t\t\t\t{/snippet}\n\t\t\t\t{#snippet points({ visibleSeries, getPointsProps })}\n\t\t\t\t\t{#each visibleSeries as s, i (i)}\n\t\t\t\t\t\t<Points {...getPointsProps(s, i)}>\n\t\t\t\t\t\t\t{#snippet children({ points })}\n\t\t\t\t\t\t\t\t{#each points as p, i (i)}\n\t\t\t\t\t\t\t\t\t{@const r = 24}\n\t\t\t\t\t\t\t\t\t<GitCommitVerticalIcon\n\t\t\t\t\t\t\t\t\t\tx={p.x - r / 2}\n\t\t\t\t\t\t\t\t\t\ty={p.y - r / 2}\n\t\t\t\t\t\t\t\t\t\twidth={r}\n\t\t\t\t\t\t\t\t\t\theight={r}\n\t\t\t\t\t\t\t\t\t\tfill=\"var(--background)\"\n\t\t\t\t\t\t\t\t\t\tcolor=\"var(--color-desktop)\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t</Points>\n\t\t\t\t\t{/each}\n\t\t\t\t{/snippet}\n\t\t\t</LineChart>\n\t\t</Chart.Container>\n\t</Card.Content>\n\t<Card.Footer>\n\t\t<div class=\"flex w-full items-start gap-2 text-sm\">\n\t\t\t<div class=\"grid gap-2\">\n\t\t\t\t<div class=\"flex items-center gap-2 leading-none font-medium\">\n\t\t\t\t\tTrending up by 5.2% this month <TrendingUpIcon class=\"size-4\" />\n\t\t\t\t</div>\n\t\t\t\t<div class=\"text-muted-foreground flex items-center gap-2 leading-none\">\n\t\t\t\t\tJanuary - June 2024\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/chart-line-dots.svelte",
    "content": "<script lang=\"ts\">\n\timport { LineChart } from \"layerchart\";\n\timport TrendingUpIcon from \"@lucide/svelte/icons/trending-up\";\n\timport { scaleUtc } from \"d3-scale\";\n\timport { curveNatural } from \"d3-shape\";\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\n\tconst chartData = [\n\t\t{ date: new Date(\"2024-01-01\"), desktop: 186 },\n\t\t{ date: new Date(\"2024-02-01\"), desktop: 305 },\n\t\t{ date: new Date(\"2024-03-01\"), desktop: 237 },\n\t\t{ date: new Date(\"2024-04-01\"), desktop: 73 },\n\t\t{ date: new Date(\"2024-05-01\"), desktop: 209 },\n\t\t{ date: new Date(\"2024-06-01\"), desktop: 214 },\n\t];\n\n\tconst chartConfig = {\n\t\tdesktop: { label: \"Desktop\", color: \"var(--chart-1)\" },\n\t} satisfies Chart.ChartConfig;\n</script>\n\n<Card.Root>\n\t<Card.Header>\n\t\t<Card.Title>Line Chart - Dots</Card.Title>\n\t\t<Card.Description>Showing total visitors for the last 6 months</Card.Description>\n\t</Card.Header>\n\t<Card.Content>\n\t\t<Chart.Container config={chartConfig}>\n\t\t\t<LineChart\n\t\t\t\tpoints={{ r: 4 }}\n\t\t\t\tdata={chartData}\n\t\t\t\tx=\"date\"\n\t\t\t\txScale={scaleUtc()}\n\t\t\t\taxis=\"x\"\n\t\t\t\tseries={[\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"desktop\",\n\t\t\t\t\t\tlabel: \"Desktop\",\n\t\t\t\t\t\tcolor: chartConfig.desktop.color,\n\t\t\t\t\t},\n\t\t\t\t]}\n\t\t\t\tprops={{\n\t\t\t\t\tspline: { curve: curveNatural, motion: \"tween\", strokeWidth: 2 },\n\t\t\t\t\thighlight: {\n\t\t\t\t\t\tpoints: {\n\t\t\t\t\t\t\tmotion: \"none\",\n\t\t\t\t\t\t\tr: 6,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\txAxis: {\n\t\t\t\t\t\tformat: (v: Date) => v.toLocaleDateString(\"en-US\", { month: \"short\" }),\n\t\t\t\t\t},\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{#snippet tooltip()}\n\t\t\t\t\t<Chart.Tooltip hideLabel />\n\t\t\t\t{/snippet}\n\t\t\t</LineChart>\n\t\t</Chart.Container>\n\t</Card.Content>\n\t<Card.Footer>\n\t\t<div class=\"flex w-full items-start gap-2 text-sm\">\n\t\t\t<div class=\"grid gap-2\">\n\t\t\t\t<div class=\"flex items-center gap-2 leading-none font-medium\">\n\t\t\t\t\tTrending up by 5.2% this month <TrendingUpIcon class=\"size-4\" />\n\t\t\t\t</div>\n\t\t\t\t<div class=\"text-muted-foreground flex items-center gap-2 leading-none\">\n\t\t\t\t\tJanuary - June 2024\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/chart-line-interactive.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport { scaleUtc } from \"d3-scale\";\n\timport { LineChart } from \"layerchart\";\n\timport { curveNatural } from \"d3-shape\";\n\n\tconst chartData = [\n\t\t{ date: new Date(\"2024-04-01\"), desktop: 222, mobile: 150 },\n\t\t{ date: new Date(\"2024-04-02\"), desktop: 97, mobile: 180 },\n\t\t{ date: new Date(\"2024-04-03\"), desktop: 167, mobile: 120 },\n\t\t{ date: new Date(\"2024-04-04\"), desktop: 242, mobile: 260 },\n\t\t{ date: new Date(\"2024-04-05\"), desktop: 373, mobile: 290 },\n\t\t{ date: new Date(\"2024-04-06\"), desktop: 301, mobile: 340 },\n\t\t{ date: new Date(\"2024-04-07\"), desktop: 245, mobile: 180 },\n\t\t{ date: new Date(\"2024-04-08\"), desktop: 409, mobile: 320 },\n\t\t{ date: new Date(\"2024-04-09\"), desktop: 59, mobile: 110 },\n\t\t{ date: new Date(\"2024-04-10\"), desktop: 261, mobile: 190 },\n\t\t{ date: new Date(\"2024-04-11\"), desktop: 327, mobile: 350 },\n\t\t{ date: new Date(\"2024-04-12\"), desktop: 292, mobile: 210 },\n\t\t{ date: new Date(\"2024-04-13\"), desktop: 342, mobile: 380 },\n\t\t{ date: new Date(\"2024-04-14\"), desktop: 137, mobile: 220 },\n\t\t{ date: new Date(\"2024-04-15\"), desktop: 120, mobile: 170 },\n\t\t{ date: new Date(\"2024-04-16\"), desktop: 138, mobile: 190 },\n\t\t{ date: new Date(\"2024-04-17\"), desktop: 446, mobile: 360 },\n\t\t{ date: new Date(\"2024-04-18\"), desktop: 364, mobile: 410 },\n\t\t{ date: new Date(\"2024-04-19\"), desktop: 243, mobile: 180 },\n\t\t{ date: new Date(\"2024-04-20\"), desktop: 89, mobile: 150 },\n\t\t{ date: new Date(\"2024-04-21\"), desktop: 137, mobile: 200 },\n\t\t{ date: new Date(\"2024-04-22\"), desktop: 224, mobile: 170 },\n\t\t{ date: new Date(\"2024-04-23\"), desktop: 138, mobile: 230 },\n\t\t{ date: new Date(\"2024-04-24\"), desktop: 387, mobile: 290 },\n\t\t{ date: new Date(\"2024-04-25\"), desktop: 215, mobile: 250 },\n\t\t{ date: new Date(\"2024-04-26\"), desktop: 75, mobile: 130 },\n\t\t{ date: new Date(\"2024-04-27\"), desktop: 383, mobile: 420 },\n\t\t{ date: new Date(\"2024-04-28\"), desktop: 122, mobile: 180 },\n\t\t{ date: new Date(\"2024-04-29\"), desktop: 315, mobile: 240 },\n\t\t{ date: new Date(\"2024-04-30\"), desktop: 454, mobile: 380 },\n\t\t{ date: new Date(\"2024-05-01\"), desktop: 165, mobile: 220 },\n\t\t{ date: new Date(\"2024-05-02\"), desktop: 293, mobile: 310 },\n\t\t{ date: new Date(\"2024-05-03\"), desktop: 247, mobile: 190 },\n\t\t{ date: new Date(\"2024-05-04\"), desktop: 385, mobile: 420 },\n\t\t{ date: new Date(\"2024-05-05\"), desktop: 481, mobile: 390 },\n\t\t{ date: new Date(\"2024-05-06\"), desktop: 498, mobile: 520 },\n\t\t{ date: new Date(\"2024-05-07\"), desktop: 388, mobile: 300 },\n\t\t{ date: new Date(\"2024-05-08\"), desktop: 149, mobile: 210 },\n\t\t{ date: new Date(\"2024-05-09\"), desktop: 227, mobile: 180 },\n\t\t{ date: new Date(\"2024-05-10\"), desktop: 293, mobile: 330 },\n\t\t{ date: new Date(\"2024-05-11\"), desktop: 335, mobile: 270 },\n\t\t{ date: new Date(\"2024-05-12\"), desktop: 197, mobile: 240 },\n\t\t{ date: new Date(\"2024-05-13\"), desktop: 197, mobile: 160 },\n\t\t{ date: new Date(\"2024-05-14\"), desktop: 448, mobile: 490 },\n\t\t{ date: new Date(\"2024-05-15\"), desktop: 473, mobile: 380 },\n\t\t{ date: new Date(\"2024-05-16\"), desktop: 338, mobile: 400 },\n\t\t{ date: new Date(\"2024-05-17\"), desktop: 499, mobile: 420 },\n\t\t{ date: new Date(\"2024-05-18\"), desktop: 315, mobile: 350 },\n\t\t{ date: new Date(\"2024-05-19\"), desktop: 235, mobile: 180 },\n\t\t{ date: new Date(\"2024-05-20\"), desktop: 177, mobile: 230 },\n\t\t{ date: new Date(\"2024-05-21\"), desktop: 82, mobile: 140 },\n\t\t{ date: new Date(\"2024-05-22\"), desktop: 81, mobile: 120 },\n\t\t{ date: new Date(\"2024-05-23\"), desktop: 252, mobile: 290 },\n\t\t{ date: new Date(\"2024-05-24\"), desktop: 294, mobile: 220 },\n\t\t{ date: new Date(\"2024-05-25\"), desktop: 201, mobile: 250 },\n\t\t{ date: new Date(\"2024-05-26\"), desktop: 213, mobile: 170 },\n\t\t{ date: new Date(\"2024-05-27\"), desktop: 420, mobile: 460 },\n\t\t{ date: new Date(\"2024-05-28\"), desktop: 233, mobile: 190 },\n\t\t{ date: new Date(\"2024-05-29\"), desktop: 78, mobile: 130 },\n\t\t{ date: new Date(\"2024-05-30\"), desktop: 340, mobile: 280 },\n\t\t{ date: new Date(\"2024-05-31\"), desktop: 178, mobile: 230 },\n\t\t{ date: new Date(\"2024-06-01\"), desktop: 178, mobile: 200 },\n\t\t{ date: new Date(\"2024-06-02\"), desktop: 470, mobile: 410 },\n\t\t{ date: new Date(\"2024-06-03\"), desktop: 103, mobile: 160 },\n\t\t{ date: new Date(\"2024-06-04\"), desktop: 439, mobile: 380 },\n\t\t{ date: new Date(\"2024-06-05\"), desktop: 88, mobile: 140 },\n\t\t{ date: new Date(\"2024-06-06\"), desktop: 294, mobile: 250 },\n\t\t{ date: new Date(\"2024-06-07\"), desktop: 323, mobile: 370 },\n\t\t{ date: new Date(\"2024-06-08\"), desktop: 385, mobile: 320 },\n\t\t{ date: new Date(\"2024-06-09\"), desktop: 438, mobile: 480 },\n\t\t{ date: new Date(\"2024-06-10\"), desktop: 155, mobile: 200 },\n\t\t{ date: new Date(\"2024-06-11\"), desktop: 92, mobile: 150 },\n\t\t{ date: new Date(\"2024-06-12\"), desktop: 492, mobile: 420 },\n\t\t{ date: new Date(\"2024-06-13\"), desktop: 81, mobile: 130 },\n\t\t{ date: new Date(\"2024-06-14\"), desktop: 426, mobile: 380 },\n\t\t{ date: new Date(\"2024-06-15\"), desktop: 307, mobile: 350 },\n\t\t{ date: new Date(\"2024-06-16\"), desktop: 371, mobile: 310 },\n\t\t{ date: new Date(\"2024-06-17\"), desktop: 475, mobile: 520 },\n\t\t{ date: new Date(\"2024-06-18\"), desktop: 107, mobile: 170 },\n\t\t{ date: new Date(\"2024-06-19\"), desktop: 341, mobile: 290 },\n\t\t{ date: new Date(\"2024-06-20\"), desktop: 408, mobile: 450 },\n\t\t{ date: new Date(\"2024-06-21\"), desktop: 169, mobile: 210 },\n\t\t{ date: new Date(\"2024-06-22\"), desktop: 317, mobile: 270 },\n\t\t{ date: new Date(\"2024-06-23\"), desktop: 480, mobile: 530 },\n\t\t{ date: new Date(\"2024-06-24\"), desktop: 132, mobile: 180 },\n\t\t{ date: new Date(\"2024-06-25\"), desktop: 141, mobile: 190 },\n\t\t{ date: new Date(\"2024-06-26\"), desktop: 434, mobile: 380 },\n\t\t{ date: new Date(\"2024-06-27\"), desktop: 448, mobile: 490 },\n\t\t{ date: new Date(\"2024-06-28\"), desktop: 149, mobile: 200 },\n\t\t{ date: new Date(\"2024-06-29\"), desktop: 103, mobile: 160 },\n\t\t{ date: new Date(\"2024-06-30\"), desktop: 446, mobile: 400 },\n\t];\n\n\tconst chartConfig = {\n\t\tviews: { label: \"Page Views\", color: \"\" },\n\t\tdesktop: { label: \"Desktop\", color: \"var(--chart-1)\" },\n\t\tmobile: { label: \"Mobile\", color: \"var(--chart-2)\" },\n\t} satisfies Chart.ChartConfig;\n\n\tlet activeChart = $state<keyof typeof chartConfig>(\"desktop\");\n\n\tconst total = $derived({\n\t\tdesktop: chartData.reduce((acc, curr) => acc + curr.desktop, 0),\n\t\tmobile: chartData.reduce((acc, curr) => acc + curr.mobile, 0),\n\t});\n\n\tconst activeSeries = $derived([\n\t\t{\n\t\t\tkey: activeChart,\n\t\t\tlabel: chartConfig[activeChart].label,\n\t\t\tcolor: chartConfig[activeChart].color,\n\t\t},\n\t]);\n</script>\n\n<Card.Root>\n\t<Card.Header class=\"flex flex-col items-stretch space-y-0 border-b p-0 sm:flex-row\">\n\t\t<div class=\"flex flex-1 flex-col justify-center gap-1 px-6 py-5 sm:py-6\">\n\t\t\t<Card.Title>Line Chart - Interactive</Card.Title>\n\t\t\t<Card.Description>Showing total visitors for the last 3 months</Card.Description>\n\t\t</div>\n\t\t<div class=\"flex\">\n\t\t\t{#each [\"desktop\", \"mobile\"] as key (key)}\n\t\t\t\t{@const chart = key as keyof typeof chartConfig}\n\t\t\t\t<button\n\t\t\t\t\tdata-active={activeChart === chart}\n\t\t\t\t\tclass=\"data-[active=true]:bg-muted/50 relative z-30 flex flex-1 flex-col justify-center gap-1 border-t px-6 py-4 text-start even:border-s sm:border-s sm:border-t-0 sm:px-8 sm:py-6\"\n\t\t\t\t\tonclick={() => (activeChart = chart)}\n\t\t\t\t>\n\t\t\t\t\t<span class=\"text-muted-foreground text-xs\">\n\t\t\t\t\t\t{chartConfig[chart].label}\n\t\t\t\t\t</span>\n\t\t\t\t\t<span class=\"text-lg leading-none font-bold sm:text-3xl\">\n\t\t\t\t\t\t{total[key as keyof typeof total].toLocaleString()}\n\t\t\t\t\t</span>\n\t\t\t\t</button>\n\t\t\t{/each}\n\t\t</div>\n\t</Card.Header>\n\t<Card.Content class=\"px-2 sm:p-6\">\n\t\t<Chart.Container config={chartConfig} class=\"aspect-auto h-[250px] w-full\">\n\t\t\t<LineChart\n\t\t\t\tdata={chartData}\n\t\t\t\tx=\"date\"\n\t\t\t\txScale={scaleUtc()}\n\t\t\t\taxis=\"x\"\n\t\t\t\tseries={activeSeries}\n\t\t\t\tprops={{\n\t\t\t\t\tspline: { curve: curveNatural, motion: \"tween\", strokeWidth: 2 },\n\t\t\t\t\txAxis: {\n\t\t\t\t\t\tformat: (v: Date) => {\n\t\t\t\t\t\t\treturn v.toLocaleDateString(\"en-US\", {\n\t\t\t\t\t\t\t\tmonth: \"short\",\n\t\t\t\t\t\t\t\tday: \"numeric\",\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\thighlight: { points: { r: 4 } },\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{#snippet tooltip()}\n\t\t\t\t\t<Chart.Tooltip hideLabel />\n\t\t\t\t{/snippet}\n\t\t\t</LineChart>\n\t\t</Chart.Container>\n\t</Card.Content>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/chart-line-label-custom.svelte",
    "content": "<script lang=\"ts\">\n\timport TrendingUpIcon from \"@lucide/svelte/icons/trending-up\";\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport { LineChart } from \"layerchart\";\n\timport { curveNatural } from \"d3-shape\";\n\timport { scaleBand } from \"d3-scale\";\n\n\tconst chartData = [\n\t\t{ browser: \"chrome\", visitors: 275, color: \"var(--color-chrome)\" },\n\t\t{ browser: \"safari\", visitors: 200, color: \"var(--color-safari)\" },\n\t\t{ browser: \"firefox\", visitors: 187, color: \"var(--color-firefox)\" },\n\t\t{ browser: \"edge\", visitors: 173, color: \"var(--color-edge)\" },\n\t\t{ browser: \"other\", visitors: 90, color: \"var(--color-other)\" },\n\t];\n\n\tconst chartConfig = {\n\t\tvisitors: { label: \"Visitors\", color: \"var(--chart-2)\" },\n\t\tchrome: { label: \"Chrome\", color: \"var(--chart-1)\" },\n\t\tsafari: { label: \"Safari\", color: \"var(--chart-2)\" },\n\t\tfirefox: { label: \"Firefox\", color: \"var(--chart-3)\" },\n\t\tedge: { label: \"Edge\", color: \"var(--chart-4)\" },\n\t\tother: { label: \"Other\", color: \"var(--chart-5)\" },\n\t} satisfies Chart.ChartConfig;\n</script>\n\n<Card.Root>\n\t<Card.Header>\n\t\t<Card.Title>Line Chart - Custom Label</Card.Title>\n\t\t<Card.Description>Showing total visitors for the last 6 months</Card.Description>\n\t</Card.Header>\n\t<Card.Content>\n\t\t<Chart.Container config={chartConfig}>\n\t\t\t<LineChart\n\t\t\t\tdata={chartData}\n\t\t\t\ty=\"visitors\"\n\t\t\t\tyPadding={[0, 25]}\n\t\t\t\tx=\"browser\"\n\t\t\t\taxis={false}\n\t\t\t\txScale={scaleBand()}\n\t\t\t\tprops={{\n\t\t\t\t\tspline: {\n\t\t\t\t\t\tcurve: curveNatural,\n\t\t\t\t\t\tmotion: \"tween\",\n\t\t\t\t\t\tstrokeWidth: 2,\n\t\t\t\t\t\tstroke: \"var(--color-visitors)\",\n\t\t\t\t\t},\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{#snippet tooltip()}\n\t\t\t\t\t<Chart.Tooltip hideLabel />\n\t\t\t\t{/snippet}\n\t\t\t</LineChart>\n\t\t</Chart.Container>\n\t</Card.Content>\n\t<Card.Footer>\n\t\t<div class=\"flex w-full items-start gap-2 text-sm\">\n\t\t\t<div class=\"grid gap-2\">\n\t\t\t\t<div class=\"flex items-center gap-2 leading-none font-medium\">\n\t\t\t\t\tTrending up by 5.2% this month <TrendingUpIcon class=\"size-4\" />\n\t\t\t\t</div>\n\t\t\t\t<div class=\"text-muted-foreground flex items-center gap-2 leading-none\">\n\t\t\t\t\tJanuary - June 2024\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/chart-line-label.svelte",
    "content": "<script lang=\"ts\">\n\timport { LineChart } from \"layerchart\";\n\timport TrendingUpIcon from \"@lucide/svelte/icons/trending-up\";\n\timport { scaleUtc } from \"d3-scale\";\n\timport { curveNatural } from \"d3-shape\";\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\n\tconst chartData = [\n\t\t{ date: new Date(\"2024-01-01\"), desktop: 186 },\n\t\t{ date: new Date(\"2024-02-01\"), desktop: 305 },\n\t\t{ date: new Date(\"2024-03-01\"), desktop: 237 },\n\t\t{ date: new Date(\"2024-04-01\"), desktop: 73 },\n\t\t{ date: new Date(\"2024-05-01\"), desktop: 209 },\n\t\t{ date: new Date(\"2024-06-01\"), desktop: 214 },\n\t];\n\n\tconst chartConfig = {\n\t\tdesktop: { label: \"Desktop\", color: \"var(--chart-1)\" },\n\t} satisfies Chart.ChartConfig;\n</script>\n\n<Card.Root>\n\t<Card.Header>\n\t\t<Card.Title>Line Chart - Label</Card.Title>\n\t\t<Card.Description>Showing total visitors for the last 6 months</Card.Description>\n\t</Card.Header>\n\t<Card.Content>\n\t\t<Chart.Container config={chartConfig}>\n\t\t\t<LineChart\n\t\t\t\tpoints={{ r: 4 }}\n\t\t\t\tlabels={{ offset: 12 }}\n\t\t\t\tdata={chartData}\n\t\t\t\tx=\"date\"\n\t\t\t\taxis=\"x\"\n\t\t\t\txScale={scaleUtc()}\n\t\t\t\tseries={[\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"desktop\",\n\t\t\t\t\t\tlabel: \"Desktop\",\n\t\t\t\t\t\tcolor: chartConfig.desktop.color,\n\t\t\t\t\t},\n\t\t\t\t]}\n\t\t\t\tprops={{\n\t\t\t\t\tspline: { curve: curveNatural, motion: \"tween\", strokeWidth: 2 },\n\t\t\t\t\thighlight: {\n\t\t\t\t\t\tpoints: {\n\t\t\t\t\t\t\tmotion: \"none\",\n\t\t\t\t\t\t\tr: 6,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\txAxis: {\n\t\t\t\t\t\tformat: (v: Date) => v.toLocaleDateString(\"en-US\", { month: \"short\" }),\n\t\t\t\t\t},\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{#snippet tooltip()}\n\t\t\t\t\t<Chart.Tooltip\n\t\t\t\t\t\tlabelFormatter={(v: Date) => {\n\t\t\t\t\t\t\treturn v.toLocaleDateString(\"en-US\", {\n\t\t\t\t\t\t\t\tmonth: \"long\",\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tindicator=\"line\"\n\t\t\t\t\t/>\n\t\t\t\t{/snippet}\n\t\t\t</LineChart>\n\t\t</Chart.Container>\n\t</Card.Content>\n\t<Card.Footer>\n\t\t<div class=\"flex w-full items-start gap-2 text-sm\">\n\t\t\t<div class=\"grid gap-2\">\n\t\t\t\t<div class=\"flex items-center gap-2 leading-none font-medium\">\n\t\t\t\t\tTrending up by 5.2% this month <TrendingUpIcon class=\"size-4\" />\n\t\t\t\t</div>\n\t\t\t\t<div class=\"text-muted-foreground flex items-center gap-2 leading-none\">\n\t\t\t\t\tJanuary - June 2024\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/chart-line-linear.svelte",
    "content": "<script lang=\"ts\">\n\timport { LineChart } from \"layerchart\";\n\timport TrendingUpIcon from \"@lucide/svelte/icons/trending-up\";\n\timport { scaleUtc } from \"d3-scale\";\n\timport { curveLinear } from \"d3-shape\";\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\n\tconst chartData = [\n\t\t{ date: new Date(\"2024-01-01\"), desktop: 186 },\n\t\t{ date: new Date(\"2024-02-01\"), desktop: 305 },\n\t\t{ date: new Date(\"2024-03-01\"), desktop: 237 },\n\t\t{ date: new Date(\"2024-04-01\"), desktop: 73 },\n\t\t{ date: new Date(\"2024-05-01\"), desktop: 209 },\n\t\t{ date: new Date(\"2024-06-01\"), desktop: 214 },\n\t];\n\n\tconst chartConfig = {\n\t\tdesktop: { label: \"Desktop\", color: \"var(--chart-1)\" },\n\t} satisfies Chart.ChartConfig;\n</script>\n\n<Card.Root>\n\t<Card.Header>\n\t\t<Card.Title>Line Chart - Linear</Card.Title>\n\t\t<Card.Description>Showing total visitors for the last 6 months</Card.Description>\n\t</Card.Header>\n\t<Card.Content>\n\t\t<Chart.Container config={chartConfig}>\n\t\t\t<LineChart\n\t\t\t\tdata={chartData}\n\t\t\t\tx=\"date\"\n\t\t\t\txScale={scaleUtc()}\n\t\t\t\taxis=\"x\"\n\t\t\t\tseries={[\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"desktop\",\n\t\t\t\t\t\tlabel: \"Desktop\",\n\t\t\t\t\t\tcolor: chartConfig.desktop.color,\n\t\t\t\t\t},\n\t\t\t\t]}\n\t\t\t\tprops={{\n\t\t\t\t\tspline: { curve: curveLinear, motion: \"tween\", strokeWidth: 2 },\n\t\t\t\t\txAxis: {\n\t\t\t\t\t\tformat: (v: Date) => v.toLocaleDateString(\"en-US\", { month: \"short\" }),\n\t\t\t\t\t},\n\t\t\t\t\thighlight: { points: { r: 4 } },\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{#snippet tooltip()}\n\t\t\t\t\t<Chart.Tooltip hideLabel />\n\t\t\t\t{/snippet}\n\t\t\t</LineChart>\n\t\t</Chart.Container>\n\t</Card.Content>\n\t<Card.Footer>\n\t\t<div class=\"flex w-full items-start gap-2 text-sm\">\n\t\t\t<div class=\"grid gap-2\">\n\t\t\t\t<div class=\"flex items-center gap-2 leading-none font-medium\">\n\t\t\t\t\tTrending up by 5.2% this month <TrendingUpIcon class=\"size-4\" />\n\t\t\t\t</div>\n\t\t\t\t<div class=\"text-muted-foreground flex items-center gap-2 leading-none\">\n\t\t\t\t\tJanuary - June 2024\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/chart-line-multiple.svelte",
    "content": "<script lang=\"ts\">\n\timport { LineChart } from \"layerchart\";\n\timport TrendingUpIcon from \"@lucide/svelte/icons/trending-up\";\n\timport { scaleUtc } from \"d3-scale\";\n\timport { curveNatural } from \"d3-shape\";\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\n\tconst chartData = [\n\t\t{ date: new Date(\"2024-01-01\"), desktop: 186, mobile: 80 },\n\t\t{ date: new Date(\"2024-02-01\"), desktop: 305, mobile: 200 },\n\t\t{ date: new Date(\"2024-03-01\"), desktop: 237, mobile: 120 },\n\t\t{ date: new Date(\"2024-04-01\"), desktop: 73, mobile: 190 },\n\t\t{ date: new Date(\"2024-05-01\"), desktop: 209, mobile: 130 },\n\t\t{ date: new Date(\"2024-06-01\"), desktop: 214, mobile: 140 },\n\t];\n\n\tconst chartConfig = {\n\t\tdesktop: { label: \"Desktop\", color: \"var(--chart-1)\" },\n\t\tmobile: { label: \"Mobile\", color: \"var(--chart-2)\" },\n\t} satisfies Chart.ChartConfig;\n</script>\n\n<Card.Root>\n\t<Card.Header>\n\t\t<Card.Title>Line Chart - Multiple</Card.Title>\n\t\t<Card.Description>Showing total visitors for the last 6 months</Card.Description>\n\t</Card.Header>\n\t<Card.Content>\n\t\t<Chart.Container config={chartConfig}>\n\t\t\t<LineChart\n\t\t\t\tdata={chartData}\n\t\t\t\tx=\"date\"\n\t\t\t\txScale={scaleUtc()}\n\t\t\t\taxis=\"x\"\n\t\t\t\tseries={[\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"desktop\",\n\t\t\t\t\t\tlabel: \"Desktop\",\n\t\t\t\t\t\tcolor: chartConfig.desktop.color,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"mobile\",\n\t\t\t\t\t\tlabel: \"Mobile\",\n\t\t\t\t\t\tcolor: chartConfig.mobile.color,\n\t\t\t\t\t},\n\t\t\t\t]}\n\t\t\t\tprops={{\n\t\t\t\t\tspline: { curve: curveNatural, motion: \"tween\", strokeWidth: 2 },\n\t\t\t\t\txAxis: {\n\t\t\t\t\t\tformat: (v: Date) => v.toLocaleDateString(\"en-US\", { month: \"short\" }),\n\t\t\t\t\t},\n\t\t\t\t\thighlight: { points: { r: 4 } },\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{#snippet tooltip()}\n\t\t\t\t\t<Chart.Tooltip hideLabel />\n\t\t\t\t{/snippet}\n\t\t\t</LineChart>\n\t\t</Chart.Container>\n\t</Card.Content>\n\t<Card.Footer>\n\t\t<div class=\"flex w-full items-start gap-2 text-sm\">\n\t\t\t<div class=\"grid gap-2\">\n\t\t\t\t<div class=\"flex items-center gap-2 leading-none font-medium\">\n\t\t\t\t\tTrending up by 5.2% this month <TrendingUpIcon class=\"size-4\" />\n\t\t\t\t</div>\n\t\t\t\t<div class=\"text-muted-foreground flex items-center gap-2 leading-none\">\n\t\t\t\t\tJanuary - June 2024\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/chart-line-step.svelte",
    "content": "<script lang=\"ts\">\n\timport { LineChart } from \"layerchart\";\n\timport TrendingUpIcon from \"@lucide/svelte/icons/trending-up\";\n\timport { scaleUtc } from \"d3-scale\";\n\timport { curveStep } from \"d3-shape\";\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\n\tconst chartData = [\n\t\t{ date: new Date(\"2024-01-01\"), desktop: 186 },\n\t\t{ date: new Date(\"2024-02-01\"), desktop: 305 },\n\t\t{ date: new Date(\"2024-03-01\"), desktop: 237 },\n\t\t{ date: new Date(\"2024-04-01\"), desktop: 73 },\n\t\t{ date: new Date(\"2024-05-01\"), desktop: 209 },\n\t\t{ date: new Date(\"2024-06-01\"), desktop: 214 },\n\t];\n\n\tconst chartConfig = {\n\t\tdesktop: { label: \"Desktop\", color: \"var(--chart-1)\" },\n\t} satisfies Chart.ChartConfig;\n</script>\n\n<Card.Root>\n\t<Card.Header>\n\t\t<Card.Title>Line Chart - Step</Card.Title>\n\t\t<Card.Description>Showing total visitors for the last 6 months</Card.Description>\n\t</Card.Header>\n\t<Card.Content>\n\t\t<Chart.Container config={chartConfig}>\n\t\t\t<LineChart\n\t\t\t\tdata={chartData}\n\t\t\t\tx=\"date\"\n\t\t\t\txScale={scaleUtc()}\n\t\t\t\taxis=\"x\"\n\t\t\t\tseries={[\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"desktop\",\n\t\t\t\t\t\tlabel: \"Desktop\",\n\t\t\t\t\t\tcolor: chartConfig.desktop.color,\n\t\t\t\t\t},\n\t\t\t\t]}\n\t\t\t\tprops={{\n\t\t\t\t\tspline: { curve: curveStep, motion: \"tween\", strokeWidth: 2 },\n\t\t\t\t\txAxis: {\n\t\t\t\t\t\tformat: (v: Date) => v.toLocaleDateString(\"en-US\", { month: \"short\" }),\n\t\t\t\t\t},\n\t\t\t\t\thighlight: { points: { r: 4 } },\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{#snippet tooltip()}\n\t\t\t\t\t<Chart.Tooltip hideLabel />\n\t\t\t\t{/snippet}\n\t\t\t</LineChart>\n\t\t</Chart.Container>\n\t</Card.Content>\n\t<Card.Footer>\n\t\t<div class=\"flex w-full items-start gap-2 text-sm\">\n\t\t\t<div class=\"grid gap-2\">\n\t\t\t\t<div class=\"flex items-center gap-2 leading-none font-medium\">\n\t\t\t\t\tTrending up by 5.2% this month <TrendingUpIcon class=\"size-4\" />\n\t\t\t\t</div>\n\t\t\t\t<div class=\"text-muted-foreground flex items-center gap-2 leading-none\">\n\t\t\t\t\tJanuary - June 2024\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/chart-pie-donut-active.svelte",
    "content": "<script lang=\"ts\">\n\timport TrendingUpIcon from \"@lucide/svelte/icons/trending-up\";\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport { Arc, PieChart } from \"layerchart\";\n\n\tconst chartData = [\n\t\t{ browser: \"chrome\", visitors: 275, color: \"var(--color-chrome)\" },\n\t\t{ browser: \"safari\", visitors: 200, color: \"var(--color-safari)\" },\n\t\t{ browser: \"firefox\", visitors: 287, color: \"var(--color-firefox)\" },\n\t\t{ browser: \"edge\", visitors: 173, color: \"var(--color-edge)\" },\n\t\t{ browser: \"other\", visitors: 190, color: \"var(--color-other)\" },\n\t];\n\n\tconst chartConfig = {\n\t\tvisitors: {\n\t\t\tlabel: \"Visitors\",\n\t\t},\n\t\tchrome: {\n\t\t\tlabel: \"Chrome\",\n\t\t\tcolor: \"var(--chart-1)\",\n\t\t},\n\t\tsafari: {\n\t\t\tlabel: \"Safari\",\n\t\t\tcolor: \"var(--chart-2)\",\n\t\t},\n\t\tfirefox: {\n\t\t\tlabel: \"Firefox\",\n\t\t\tcolor: \"var(--chart-3)\",\n\t\t},\n\t\tedge: {\n\t\t\tlabel: \"Edge\",\n\t\t\tcolor: \"var(--chart-4)\",\n\t\t},\n\t\tother: {\n\t\t\tlabel: \"Other\",\n\t\t\tcolor: \"var(--chart-5)\",\n\t\t},\n\t} satisfies Chart.ChartConfig;\n</script>\n\n<Card.Root class=\"flex flex-col\">\n\t<Card.Header class=\"items-center\">\n\t\t<Card.Title>Pie Chart - Donut Active</Card.Title>\n\t\t<Card.Description>January - June 2024</Card.Description>\n\t</Card.Header>\n\t<Card.Content class=\"flex-1\">\n\t\t<Chart.Container config={chartConfig} class=\"mx-auto aspect-square max-h-[250px]\">\n\t\t\t<PieChart\n\t\t\t\tdata={chartData}\n\t\t\t\tkey=\"browser\"\n\t\t\t\tvalue=\"visitors\"\n\t\t\t\tc=\"color\"\n\t\t\t\tinnerRadius={60}\n\t\t\t\tprops={{\n\t\t\t\t\tpie: { motion: \"tween\" },\n\t\t\t\t\tarc: {\n\t\t\t\t\t\tstrokeWidth: 5,\n\t\t\t\t\t},\n\t\t\t\t}}\n\t\t\t\tpadding={29}\n\t\t\t>\n\t\t\t\t{#snippet tooltip()}\n\t\t\t\t\t<Chart.Tooltip hideLabel />\n\t\t\t\t{/snippet}\n\t\t\t\t{#snippet arc({ props, index })}\n\t\t\t\t\t{@const arcProps =\n\t\t\t\t\t\tindex === 0 ? { ...props, outerRadius: 60, innerRadius: 105 } : props}\n\t\t\t\t\t<Arc {...arcProps} />\n\t\t\t\t{/snippet}\n\t\t\t</PieChart>\n\t\t</Chart.Container>\n\t</Card.Content>\n\t<Card.Footer class=\"flex-col gap-2 text-sm\">\n\t\t<div class=\"flex items-center gap-2 leading-none font-medium\">\n\t\t\tTrending up by 5.2% this month <TrendingUpIcon class=\"size-4\" />\n\t\t</div>\n\t\t<div class=\"text-muted-foreground leading-none\">\n\t\t\tShowing total visitors for the last 6 months\n\t\t</div>\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/chart-pie-donut-text.svelte",
    "content": "<script lang=\"ts\">\n\timport TrendingUpIcon from \"@lucide/svelte/icons/trending-up\";\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport { PieChart, Text } from \"layerchart\";\n\n\tconst chartData = [\n\t\t{ browser: \"chrome\", visitors: 275, color: \"var(--color-chrome)\" },\n\t\t{ browser: \"safari\", visitors: 200, color: \"var(--color-safari)\" },\n\t\t{ browser: \"firefox\", visitors: 287, color: \"var(--color-firefox)\" },\n\t\t{ browser: \"edge\", visitors: 173, color: \"var(--color-edge)\" },\n\t\t{ browser: \"other\", visitors: 190, color: \"var(--color-other)\" },\n\t];\n\n\tconst chartConfig = {\n\t\tvisitors: { label: \"Visitors\" },\n\t\tchrome: { label: \"Chrome\", color: \"var(--chart-1)\" },\n\t\tsafari: { label: \"Safari\", color: \"var(--chart-2)\" },\n\t\tfirefox: { label: \"Firefox\", color: \"var(--chart-3)\" },\n\t\tedge: { label: \"Edge\", color: \"var(--chart-4)\" },\n\t\tother: { label: \"Other\", color: \"var(--chart-5)\" },\n\t} satisfies Chart.ChartConfig;\n\n\tconst totalVisitors = chartData.reduce((acc, curr) => acc + curr.visitors, 0);\n</script>\n\n<Card.Root class=\"flex flex-col\">\n\t<Card.Header class=\"items-center\">\n\t\t<Card.Title>Pie Chart - Donut with Text</Card.Title>\n\t\t<Card.Description>January - June 2024</Card.Description>\n\t</Card.Header>\n\t<Card.Content class=\"flex-1\">\n\t\t<Chart.Container config={chartConfig} class=\"mx-auto aspect-square max-h-[250px]\">\n\t\t\t<PieChart\n\t\t\t\tdata={chartData}\n\t\t\t\tkey=\"browser\"\n\t\t\t\tvalue=\"visitors\"\n\t\t\t\tc=\"color\"\n\t\t\t\tinnerRadius={60}\n\t\t\t\tpadding={28}\n\t\t\t\tprops={{ pie: { motion: \"tween\" } }}\n\t\t\t>\n\t\t\t\t{#snippet aboveMarks()}\n\t\t\t\t\t<Text\n\t\t\t\t\t\tvalue={String(totalVisitors)}\n\t\t\t\t\t\ttextAnchor=\"middle\"\n\t\t\t\t\t\tverticalAnchor=\"middle\"\n\t\t\t\t\t\tclass=\"fill-foreground text-3xl! font-bold\"\n\t\t\t\t\t\tdy={3}\n\t\t\t\t\t/>\n\t\t\t\t\t<Text\n\t\t\t\t\t\tvalue=\"Visitors\"\n\t\t\t\t\t\ttextAnchor=\"middle\"\n\t\t\t\t\t\tverticalAnchor=\"middle\"\n\t\t\t\t\t\tclass=\"fill-muted-foreground! text-muted-foreground\"\n\t\t\t\t\t\tdy={22}\n\t\t\t\t\t/>\n\t\t\t\t{/snippet}\n\t\t\t\t{#snippet tooltip()}\n\t\t\t\t\t<Chart.Tooltip hideLabel />\n\t\t\t\t{/snippet}\n\t\t\t</PieChart>\n\t\t</Chart.Container>\n\t</Card.Content>\n\t<Card.Footer class=\"flex-col gap-2 text-sm\">\n\t\t<div class=\"flex items-center gap-2 leading-none font-medium\">\n\t\t\tTrending up by 5.2% this month <TrendingUpIcon class=\"size-4\" />\n\t\t</div>\n\t\t<div class=\"text-muted-foreground leading-none\">\n\t\t\tShowing total visitors for the last 6 months\n\t\t</div>\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/chart-pie-donut.svelte",
    "content": "<script lang=\"ts\">\n\timport TrendingUpIcon from \"@lucide/svelte/icons/trending-up\";\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport { PieChart } from \"layerchart\";\n\n\tconst chartData = [\n\t\t{ browser: \"chrome\", visitors: 275, color: \"var(--color-chrome)\" },\n\t\t{ browser: \"safari\", visitors: 200, color: \"var(--color-safari)\" },\n\t\t{ browser: \"firefox\", visitors: 287, color: \"var(--color-firefox)\" },\n\t\t{ browser: \"edge\", visitors: 173, color: \"var(--color-edge)\" },\n\t\t{ browser: \"other\", visitors: 190, color: \"var(--color-other)\" },\n\t];\n\n\tconst chartConfig = {\n\t\tvisitors: { label: \"Visitors\" },\n\t\tchrome: { label: \"Chrome\", color: \"var(--chart-1)\" },\n\t\tsafari: { label: \"Safari\", color: \"var(--chart-2)\" },\n\t\tfirefox: { label: \"Firefox\", color: \"var(--chart-3)\" },\n\t\tedge: { label: \"Edge\", color: \"var(--chart-4)\" },\n\t\tother: { label: \"Other\", color: \"var(--chart-5)\" },\n\t} satisfies Chart.ChartConfig;\n</script>\n\n<Card.Root class=\"flex flex-col\">\n\t<Card.Header class=\"items-center\">\n\t\t<Card.Title>Pie Chart - Donut</Card.Title>\n\t\t<Card.Description>January - June 2024</Card.Description>\n\t</Card.Header>\n\t<Card.Content class=\"flex-1\">\n\t\t<Chart.Container config={chartConfig} class=\"mx-auto aspect-square max-h-[250px]\">\n\t\t\t<PieChart\n\t\t\t\tdata={chartData}\n\t\t\t\tkey=\"browser\"\n\t\t\t\tvalue=\"visitors\"\n\t\t\t\tc=\"color\"\n\t\t\t\tinnerRadius={60}\n\t\t\t\tpadding={29}\n\t\t\t\tprops={{ pie: { motion: \"tween\" } }}\n\t\t\t>\n\t\t\t\t{#snippet tooltip()}\n\t\t\t\t\t<Chart.Tooltip hideLabel />\n\t\t\t\t{/snippet}\n\t\t\t</PieChart>\n\t\t</Chart.Container>\n\t</Card.Content>\n\t<Card.Footer class=\"flex-col gap-2 text-sm\">\n\t\t<div class=\"flex items-center gap-2 leading-none font-medium\">\n\t\t\tTrending up by 5.2% this month <TrendingUpIcon class=\"size-4\" />\n\t\t</div>\n\t\t<div class=\"text-muted-foreground leading-none\">\n\t\t\tShowing total visitors for the last 6 months\n\t\t</div>\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/chart-pie-interactive.svelte",
    "content": "<script lang=\"ts\">\n\timport { Arc, PieChart, Text } from \"layerchart\";\n\timport TrendingUpIcon from \"@lucide/svelte/icons/trending-up\";\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Select from \"$lib/registry/ui/select/index.js\";\n\timport ChartStyle from \"../ui/chart/chart-style.svelte\";\n\n\tconst desktopData = [\n\t\t{ month: \"january\", desktop: 186, color: \"var(--color-january)\" },\n\t\t{ month: \"february\", desktop: 305, color: \"var(--color-february)\" },\n\t\t{ month: \"march\", desktop: 237, color: \"var(--color-march)\" },\n\t\t{ month: \"april\", desktop: 173, color: \"var(--color-april)\" },\n\t\t{ month: \"may\", desktop: 209, color: \"var(--color-may)\" },\n\t];\n\n\tconst chartConfig = {\n\t\tdesktop: { label: \"Desktop\" },\n\t\tjanuary: { label: \"January\", color: \"var(--chart-1)\" },\n\t\tfebruary: { label: \"February\", color: \"var(--chart-2)\" },\n\t\tmarch: { label: \"March\", color: \"var(--chart-3)\" },\n\t\tapril: { label: \"April\", color: \"var(--chart-4)\" },\n\t\tmay: { label: \"May\", color: \"var(--chart-5)\" },\n\t} satisfies Chart.ChartConfig;\n\n\tlet activeMonth = $state(desktopData[0].month);\n\n\tconst id = \"pie-interactive\";\n\n\tconst activeIndex = $derived(desktopData.findIndex((item) => item.month === activeMonth));\n\n\tconst months = $derived(desktopData.map((item) => item.month));\n</script>\n\n<Card.Root data-chart={id} class=\"flex flex-col\">\n\t<ChartStyle {id} config={chartConfig} />\n\t<Card.Header class=\"flex flex-row items-start space-y-0 pb-0\">\n\t\t<div class=\"grid gap-1\">\n\t\t\t<Card.Title>Pie Chart - Interactive</Card.Title>\n\t\t\t<Card.Description>January - June 2024</Card.Description>\n\t\t</div>\n\t\t<Select.Root type=\"single\" bind:value={activeMonth}>\n\t\t\t<Select.Trigger\n\t\t\t\tclass=\"ms-auto h-7 w-[130px] rounded-lg ps-2.5 text-sm\"\n\t\t\t\taria-label=\"Select a value\"\n\t\t\t>\n\t\t\t\t<span\n\t\t\t\t\tclass=\"flex h-3 w-3 shrink-0 rounded-sm\"\n\t\t\t\t\tstyle:background-color={`var(--color-${activeMonth})`}\n\t\t\t\t></span>\n\t\t\t\t{activeMonth\n\t\t\t\t\t? chartConfig[activeMonth as keyof typeof chartConfig].label\n\t\t\t\t\t: \"Select month\"}\n\t\t\t</Select.Trigger>\n\t\t\t<Select.Content align=\"end\" class=\"rounded-xl\">\n\t\t\t\t{#each months as month (month)}\n\t\t\t\t\t{@const config = chartConfig[month as keyof typeof chartConfig]}\n\n\t\t\t\t\t{#if config}\n\t\t\t\t\t\t<Select.Item\n\t\t\t\t\t\t\tvalue={month}\n\t\t\t\t\t\t\tlabel={config.label}\n\t\t\t\t\t\t\tclass=\"rounded-lg [&_span]:flex\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div class=\"flex items-center gap-2 text-xs\">\n\t\t\t\t\t\t\t\t{config?.label}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</Select.Item>\n\t\t\t\t\t{/if}\n\t\t\t\t{/each}\n\t\t\t</Select.Content>\n\t\t</Select.Root>\n\t</Card.Header>\n\t<Card.Content class=\"flex-1\">\n\t\t<Chart.Container {id} config={chartConfig} class=\"mx-auto aspect-square max-h-[250px]\">\n\t\t\t<PieChart\n\t\t\t\tdata={desktopData}\n\t\t\t\tlabel=\"month\"\n\t\t\t\tkey=\"month\"\n\t\t\t\tvalue=\"desktop\"\n\t\t\t\tc=\"color\"\n\t\t\t\tprops={{\n\t\t\t\t\tpie: {\n\t\t\t\t\t\tsort: (a, b) => {\n\t\t\t\t\t\t\tconst monthOrder = [\"january\", \"february\", \"march\", \"april\", \"may\"];\n\t\t\t\t\t\t\treturn monthOrder.indexOf(a.month) - monthOrder.indexOf(b.month);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tmotion: \"tween\",\n\t\t\t\t\t},\n\t\t\t\t}}\n\t\t\t\tinnerRadius={60}\n\t\t\t\tpadding={29}\n\t\t\t>\n\t\t\t\t{#snippet aboveMarks()}\n\t\t\t\t\t<Text\n\t\t\t\t\t\tvalue={desktopData[activeIndex].desktop.toLocaleString()}\n\t\t\t\t\t\ttextAnchor=\"middle\"\n\t\t\t\t\t\tverticalAnchor=\"middle\"\n\t\t\t\t\t\tclass=\"fill-foreground !text-3xl font-bold\"\n\t\t\t\t\t\tdy={3}\n\t\t\t\t\t/>\n\t\t\t\t\t<Text\n\t\t\t\t\t\tvalue=\"Visitors\"\n\t\t\t\t\t\ttextAnchor=\"middle\"\n\t\t\t\t\t\tverticalAnchor=\"middle\"\n\t\t\t\t\t\tclass=\"!fill-muted-foreground text-muted-foreground\"\n\t\t\t\t\t\tdy={22}\n\t\t\t\t\t/>\n\t\t\t\t{/snippet}\n\t\t\t\t{#snippet arc({ props, index })}\n\t\t\t\t\t{@const isActive = index === activeIndex}\n\t\t\t\t\t{@const arcProps = isActive\n\t\t\t\t\t\t? { ...props, outerRadius: 60, innerRadius: 105 }\n\t\t\t\t\t\t: props}\n\n\t\t\t\t\t{#if isActive}\n\t\t\t\t\t\t<g>\n\t\t\t\t\t\t\t<Arc {...arcProps} />\n\t\t\t\t\t\t\t<Arc {...arcProps} outerRadius={107} innerRadius={119} />\n\t\t\t\t\t\t</g>\n\t\t\t\t\t{:else}\n\t\t\t\t\t\t<Arc {...arcProps} />\n\t\t\t\t\t{/if}\n\t\t\t\t{/snippet}\n\t\t\t\t{#snippet tooltip()}\n\t\t\t\t\t<Chart.Tooltip\n\t\t\t\t\t\tlabelKey=\"visitors\"\n\t\t\t\t\t\tnameKey=\"month\"\n\t\t\t\t\t\tindicator=\"line\"\n\t\t\t\t\t\tlabelFormatter={(_, payload) => {\n\t\t\t\t\t\t\treturn chartConfig[payload?.[0].key as keyof typeof chartConfig].label;\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t{/snippet}\n\t\t\t</PieChart>\n\t\t</Chart.Container>\n\t</Card.Content>\n\t<Card.Footer class=\"flex-col gap-2 text-sm\">\n\t\t<div class=\"flex items-center gap-2 leading-none font-medium\">\n\t\t\tTrending up by 5.2% this month <TrendingUpIcon class=\"size-4\" />\n\t\t</div>\n\t\t<div class=\"text-muted-foreground leading-none\">\n\t\t\tShowing total visitors for the last 6 months\n\t\t</div>\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/chart-pie-label-custom.svelte",
    "content": "<script lang=\"ts\">\n\timport { Arc, PieChart, Text } from \"layerchart\";\n\timport TrendingUpIcon from \"@lucide/svelte/icons/trending-up\";\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\n\tconst chartData = [\n\t\t{ browser: \"chrome\", visitors: 275, color: \"var(--color-chrome)\" },\n\t\t{ browser: \"safari\", visitors: 200, color: \"var(--color-safari)\" },\n\t\t{ browser: \"firefox\", visitors: 187, color: \"var(--color-firefox)\" },\n\t\t{ browser: \"edge\", visitors: 173, color: \"var(--color-edge)\" },\n\t\t{ browser: \"other\", visitors: 90, color: \"var(--color-other)\" },\n\t];\n\n\tconst chartConfig = {\n\t\tvisitors: { label: \"Visitors\" },\n\t\tchrome: { label: \"Chrome\", color: \"var(--chart-1)\" },\n\t\tsafari: { label: \"Safari\", color: \"var(--chart-2)\" },\n\t\tfirefox: { label: \"Firefox\", color: \"var(--chart-3)\" },\n\t\tedge: { label: \"Edge\", color: \"var(--chart-4)\" },\n\t\tother: { label: \"Other\", color: \"var(--chart-5)\" },\n\t} satisfies Chart.ChartConfig;\n</script>\n\n<Card.Root class=\"flex flex-col\">\n\t<Card.Header class=\"items-center\">\n\t\t<Card.Title>Pie Chart - Custom Label</Card.Title>\n\t\t<Card.Description>January - June 2024</Card.Description>\n\t</Card.Header>\n\t<Card.Content class=\"flex-1\">\n\t\t<Chart.Container config={chartConfig} class=\"mx-auto aspect-square max-h-[250px]\">\n\t\t\t<PieChart\n\t\t\t\tdata={chartData}\n\t\t\t\tkey=\"browser\"\n\t\t\t\tvalue=\"visitors\"\n\t\t\t\tcRange={chartData.map((d) => d.color)}\n\t\t\t\tc=\"color\"\n\t\t\t\tprops={{\n\t\t\t\t\tpie: {\n\t\t\t\t\t\tmotion: \"tween\",\n\t\t\t\t\t},\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{#snippet tooltip()}\n\t\t\t\t\t<Chart.Tooltip hideLabel />\n\t\t\t\t{/snippet}\n\t\t\t\t{#snippet arc({ props, visibleData, index })}\n\t\t\t\t\t<Arc {...props}>\n\t\t\t\t\t\t{#snippet children({ getArcTextProps })}\n\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\tvalue={visibleData[index].visitors}\n\t\t\t\t\t\t\t\t{...getArcTextProps(\"outer\", {\n\t\t\t\t\t\t\t\t\tstartOffset: \"50%\",\n\t\t\t\t\t\t\t\t\touterPadding: 10,\n\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\tclass=\"fill-foreground\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t</Arc>\n\t\t\t\t{/snippet}\n\t\t\t</PieChart>\n\t\t</Chart.Container>\n\t</Card.Content>\n\t<Card.Footer class=\"flex-col gap-2 text-sm\">\n\t\t<div class=\"flex items-center gap-2 leading-none font-medium\">\n\t\t\tTrending up by 5.2% this month <TrendingUpIcon class=\"size-4\" />\n\t\t</div>\n\t\t<div class=\"text-muted-foreground leading-none\">\n\t\t\tShowing total visitors for the last 6 months\n\t\t</div>\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/chart-pie-label-list.svelte",
    "content": "<script lang=\"ts\">\n\timport { Arc, PieChart, Text } from \"layerchart\";\n\timport TrendingUpIcon from \"@lucide/svelte/icons/trending-up\";\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\n\tconst chartData = [\n\t\t{ browser: \"chrome\", visitors: 275, color: \"var(--color-chrome)\" },\n\t\t{ browser: \"safari\", visitors: 200, color: \"var(--color-safari)\" },\n\t\t{ browser: \"firefox\", visitors: 187, color: \"var(--color-firefox)\" },\n\t\t{ browser: \"edge\", visitors: 173, color: \"var(--color-edge)\" },\n\t\t{ browser: \"other\", visitors: 90, color: \"var(--color-other)\" },\n\t];\n\n\tconst chartConfig = {\n\t\tvisitors: { label: \"Visitors\" },\n\t\tchrome: { label: \"Chrome\", color: \"var(--chart-1)\" },\n\t\tsafari: { label: \"Safari\", color: \"var(--chart-2)\" },\n\t\tfirefox: { label: \"Firefox\", color: \"var(--chart-3)\" },\n\t\tedge: { label: \"Edge\", color: \"var(--chart-4)\" },\n\t\tother: { label: \"Other\", color: \"var(--chart-5)\" },\n\t} satisfies Chart.ChartConfig;\n</script>\n\n<Card.Root class=\"flex flex-col\">\n\t<Card.Header class=\"items-center\">\n\t\t<Card.Title>Pie Chart - Label List</Card.Title>\n\t\t<Card.Description>January - June 2024</Card.Description>\n\t</Card.Header>\n\t<Card.Content class=\"flex-1\">\n\t\t<Chart.Container config={chartConfig} class=\"mx-auto aspect-square max-h-[250px]\">\n\t\t\t<PieChart\n\t\t\t\tdata={chartData}\n\t\t\t\tkey=\"browser\"\n\t\t\t\tvalue=\"visitors\"\n\t\t\t\tcRange={chartData.map((d) => d.color)}\n\t\t\t\tc=\"color\"\n\t\t\t\tprops={{\n\t\t\t\t\tpie: {\n\t\t\t\t\t\tmotion: \"tween\",\n\t\t\t\t\t},\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{#snippet tooltip()}\n\t\t\t\t\t<Chart.Tooltip hideLabel />\n\t\t\t\t{/snippet}\n\t\t\t\t{#snippet arc({ props, visibleData, index })}\n\t\t\t\t\t{@const browser = visibleData[index].browser}\n\t\t\t\t\t<Arc {...props}>\n\t\t\t\t\t\t{#snippet children({ centroid })}\n\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\tvalue={browser}\n\t\t\t\t\t\t\t\tx={centroid[0]}\n\t\t\t\t\t\t\t\ty={centroid[1]}\n\t\t\t\t\t\t\t\ttextAnchor=\"middle\"\n\t\t\t\t\t\t\t\tverticalAnchor=\"middle\"\n\t\t\t\t\t\t\t\tfont-size=\"12\"\n\t\t\t\t\t\t\t\tclass=\"fill-background capitalize\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t</Arc>\n\t\t\t\t{/snippet}\n\t\t\t</PieChart>\n\t\t</Chart.Container>\n\t</Card.Content>\n\t<Card.Footer class=\"flex-col gap-2 text-sm\">\n\t\t<div class=\"flex items-center gap-2 leading-none font-medium\">\n\t\t\tTrending up by 5.2% this month <TrendingUpIcon class=\"size-4\" />\n\t\t</div>\n\t\t<div class=\"text-muted-foreground leading-none\">\n\t\t\tShowing total visitors for the last 6 months\n\t\t</div>\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/chart-pie-label.svelte",
    "content": "<script lang=\"ts\">\n\timport { Arc, PieChart, Text } from \"layerchart\";\n\timport TrendingUpIcon from \"@lucide/svelte/icons/trending-up\";\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\n\tconst chartData = [\n\t\t{ browser: \"chrome\", visitors: 275, color: \"var(--color-chrome)\" },\n\t\t{ browser: \"safari\", visitors: 200, color: \"var(--color-safari)\" },\n\t\t{ browser: \"firefox\", visitors: 187, color: \"var(--color-firefox)\" },\n\t\t{ browser: \"edge\", visitors: 173, color: \"var(--color-edge)\" },\n\t\t{ browser: \"other\", visitors: 90, color: \"var(--color-other)\" },\n\t];\n\n\tconst chartConfig = {\n\t\tvisitors: { label: \"Visitors\" },\n\t\tchrome: { label: \"Chrome\", color: \"var(--chart-1)\" },\n\t\tsafari: { label: \"Safari\", color: \"var(--chart-2)\" },\n\t\tfirefox: { label: \"Firefox\", color: \"var(--chart-3)\" },\n\t\tedge: { label: \"Edge\", color: \"var(--chart-4)\" },\n\t\tother: { label: \"Other\", color: \"var(--chart-5)\" },\n\t} satisfies Chart.ChartConfig;\n</script>\n\n<Card.Root class=\"flex flex-col\">\n\t<Card.Header class=\"items-center\">\n\t\t<Card.Title>Pie Chart - Label</Card.Title>\n\t\t<Card.Description>January - June 2024</Card.Description>\n\t</Card.Header>\n\t<Card.Content class=\"flex-1\">\n\t\t<Chart.Container config={chartConfig} class=\"mx-auto aspect-square max-h-[250px]\">\n\t\t\t<PieChart\n\t\t\t\tdata={chartData}\n\t\t\t\tkey=\"browser\"\n\t\t\t\tvalue=\"visitors\"\n\t\t\t\tcRange={chartData.map((d) => d.color)}\n\t\t\t\tc=\"color\"\n\t\t\t\tprops={{\n\t\t\t\t\tpie: {\n\t\t\t\t\t\tmotion: \"tween\",\n\t\t\t\t\t},\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{#snippet tooltip()}\n\t\t\t\t\t<Chart.Tooltip hideLabel />\n\t\t\t\t{/snippet}\n\t\t\t\t{#snippet arc({ props, visibleData, index })}\n\t\t\t\t\t{@const browser = visibleData[index].browser}\n\t\t\t\t\t<Arc {...props}>\n\t\t\t\t\t\t{#snippet children({ getArcTextProps })}\n\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\tvalue={browser}\n\t\t\t\t\t\t\t\t{...getArcTextProps(\"centroid\")}\n\t\t\t\t\t\t\t\tfont-size=\"12\"\n\t\t\t\t\t\t\t\tclass=\"fill-background capitalize\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t</Arc>\n\t\t\t\t{/snippet}\n\t\t\t</PieChart>\n\t\t</Chart.Container>\n\t</Card.Content>\n\t<Card.Footer class=\"flex-col gap-2 text-sm\">\n\t\t<div class=\"flex items-center gap-2 leading-none font-medium\">\n\t\t\tTrending up by 5.2% this month <TrendingUpIcon class=\"size-4\" />\n\t\t</div>\n\t\t<div class=\"text-muted-foreground leading-none\">\n\t\t\tShowing total visitors for the last 6 months\n\t\t</div>\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/chart-pie-legend.svelte",
    "content": "<script lang=\"ts\">\n\timport { PieChart } from \"layerchart\";\n\timport TrendingUpIcon from \"@lucide/svelte/icons/trending-up\";\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\n\tconst chartData = [\n\t\t{ browser: \"chrome\", visitors: 275, color: \"var(--color-chrome)\" },\n\t\t{ browser: \"safari\", visitors: 200, color: \"var(--color-safari)\" },\n\t\t{ browser: \"firefox\", visitors: 187, color: \"var(--color-firefox)\" },\n\t\t{ browser: \"edge\", visitors: 173, color: \"var(--color-edge)\" },\n\t\t{ browser: \"other\", visitors: 90, color: \"var(--color-other)\" },\n\t];\n\n\tconst chartConfig = {\n\t\tvisitors: { label: \"Visitors\" },\n\t\tchrome: { label: \"Chrome\", color: \"var(--chart-1)\" },\n\t\tsafari: { label: \"Safari\", color: \"var(--chart-2)\" },\n\t\tfirefox: { label: \"Firefox\", color: \"var(--chart-3)\" },\n\t\tedge: { label: \"Edge\", color: \"var(--chart-4)\" },\n\t\tother: { label: \"Other\", color: \"var(--chart-5)\" },\n\t} satisfies Chart.ChartConfig;\n</script>\n\n<Card.Root class=\"flex flex-col\">\n\t<Card.Header class=\"items-center\">\n\t\t<Card.Title>Pie Chart - Legend</Card.Title>\n\t\t<Card.Description>January - June 2024</Card.Description>\n\t</Card.Header>\n\t<Card.Content class=\"flex-1\">\n\t\t<Chart.Container config={chartConfig} class=\"mx-auto aspect-square max-h-[250px]\">\n\t\t\t<PieChart\n\t\t\t\tdata={chartData}\n\t\t\t\tkey=\"browser\"\n\t\t\t\tvalue=\"visitors\"\n\t\t\t\tlabel={(d) =>\n\t\t\t\t\td.browser\n\t\t\t\t\t\t.split(\"\")\n\t\t\t\t\t\t.map((c, i) => (i === 0 ? c.toUpperCase() : c))\n\t\t\t\t\t\t.join(\"\")}\n\t\t\t\tcRange={chartData.map((d) => d.color)}\n\t\t\t\tprops={{\n\t\t\t\t\tpie: {\n\t\t\t\t\t\tmotion: \"tween\",\n\t\t\t\t\t},\n\t\t\t\t}}\n\t\t\t\tlegend\n\t\t\t>\n\t\t\t\t{#snippet tooltip()}\n\t\t\t\t\t<Chart.Tooltip hideLabel />\n\t\t\t\t{/snippet}\n\t\t\t</PieChart>\n\t\t</Chart.Container>\n\t</Card.Content>\n\t<Card.Footer class=\"flex-col gap-2 text-sm\">\n\t\t<div class=\"flex items-center gap-2 leading-none font-medium\">\n\t\t\tTrending up by 5.2% this month <TrendingUpIcon class=\"size-4\" />\n\t\t</div>\n\t\t<div class=\"text-muted-foreground leading-none\">\n\t\t\tShowing total visitors for the last 6 months\n\t\t</div>\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/chart-pie-separator-none.svelte",
    "content": "<script lang=\"ts\">\n\timport TrendingUpIcon from \"@lucide/svelte/icons/trending-up\";\n\t// import * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n</script>\n\n<Card.Root class=\"flex flex-col\">\n\t<Card.Header class=\"items-center\">\n\t\t<Card.Title>Pie Chart - Separator None</Card.Title>\n\t\t<Card.Description>January - June 2024</Card.Description>\n\t</Card.Header>\n\t<Card.Content class=\"flex-1\">\n\t\t<!-- <Chart.Container class=\"mx-auto aspect-square max-h-[250px]\"></Chart.Container> -->\n\t</Card.Content>\n\t<Card.Footer class=\"flex-col gap-2 text-sm\">\n\t\t<div class=\"flex items-center gap-2 leading-none font-medium\">\n\t\t\tTrending up by 5.2% this month <TrendingUpIcon class=\"size-4\" />\n\t\t</div>\n\t\t<div class=\"text-muted-foreground leading-none\">\n\t\t\tShowing total visitors for the last 6 months\n\t\t</div>\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/chart-pie-simple.svelte",
    "content": "<script lang=\"ts\">\n\timport { PieChart } from \"layerchart\";\n\timport TrendingUpIcon from \"@lucide/svelte/icons/trending-up\";\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\n\tconst chartData = [\n\t\t{ browser: \"chrome\", visitors: 275, color: \"var(--color-chrome)\" },\n\t\t{ browser: \"safari\", visitors: 200, color: \"var(--color-safari)\" },\n\t\t{ browser: \"firefox\", visitors: 187, color: \"var(--color-firefox)\" },\n\t\t{ browser: \"edge\", visitors: 173, color: \"var(--color-edge)\" },\n\t\t{ browser: \"other\", visitors: 90, color: \"var(--color-other)\" },\n\t];\n\n\tconst chartConfig = {\n\t\tvisitors: { label: \"Visitors\" },\n\t\tchrome: { label: \"Chrome\", color: \"var(--chart-1)\" },\n\t\tsafari: { label: \"Safari\", color: \"var(--chart-2)\" },\n\t\tfirefox: { label: \"Firefox\", color: \"var(--chart-3)\" },\n\t\tedge: { label: \"Edge\", color: \"var(--chart-4)\" },\n\t\tother: { label: \"Other\", color: \"var(--chart-5)\" },\n\t} satisfies Chart.ChartConfig;\n</script>\n\n<Card.Root class=\"flex flex-col\">\n\t<Card.Header class=\"items-center\">\n\t\t<Card.Title>Pie Chart</Card.Title>\n\t\t<Card.Description>January - June 2024</Card.Description>\n\t</Card.Header>\n\t<Card.Content class=\"flex-1\">\n\t\t<Chart.Container config={chartConfig} class=\"mx-auto aspect-square max-h-[250px]\">\n\t\t\t<PieChart\n\t\t\t\tdata={chartData}\n\t\t\t\tkey=\"browser\"\n\t\t\t\tvalue=\"visitors\"\n\t\t\t\tcRange={chartData.map((d) => d.color)}\n\t\t\t\tc=\"color\"\n\t\t\t\tprops={{\n\t\t\t\t\tpie: {\n\t\t\t\t\t\tmotion: \"tween\",\n\t\t\t\t\t},\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{#snippet tooltip()}\n\t\t\t\t\t<Chart.Tooltip hideLabel />\n\t\t\t\t{/snippet}\n\t\t\t</PieChart>\n\t\t</Chart.Container>\n\t</Card.Content>\n\t<Card.Footer class=\"flex-col gap-2 text-sm\">\n\t\t<div class=\"flex items-center gap-2 leading-none font-medium\">\n\t\t\tTrending up by 5.2% this month <TrendingUpIcon class=\"size-4\" />\n\t\t</div>\n\t\t<div class=\"text-muted-foreground leading-none\">\n\t\t\tShowing total visitors for the last 6 months\n\t\t</div>\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/chart-pie-stacked.svelte",
    "content": "<script lang=\"ts\">\n\timport { Arc, PieChart } from \"layerchart\";\n\timport TrendingUpIcon from \"@lucide/svelte/icons/trending-up\";\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\n\tconst desktopData = [\n\t\t{ month: \"january\", desktop: 186, color: \"var(--color-january)\" },\n\t\t{ month: \"february\", desktop: 305, color: \"var(--color-february)\" },\n\t\t{ month: \"march\", desktop: 237, color: \"var(--color-march)\" },\n\t\t{ month: \"april\", desktop: 173, color: \"var(--color-april)\" },\n\t\t{ month: \"may\", desktop: 209, color: \"var(--color-may)\" },\n\t];\n\n\tconst mobileData = [\n\t\t{ month: \"january\", mobile: 80, color: \"var(--color-january)\" },\n\t\t{ month: \"february\", mobile: 200, color: \"var(--color-february)\" },\n\t\t{ month: \"march\", mobile: 120, color: \"var(--color-march)\" },\n\t\t{ month: \"april\", mobile: 190, color: \"var(--color-april)\" },\n\t\t{ month: \"may\", mobile: 130, color: \"var(--color-may)\" },\n\t];\n\n\tconst chartConfig = {\n\t\tdesktop: { label: \"Desktop\" },\n\t\tmobile: { label: \"Mobile\" },\n\t\tjanuary: { label: \"January\", color: \"var(--chart-1)\" },\n\t\tfebruary: { label: \"February\", color: \"var(--chart-2)\" },\n\t\tmarch: { label: \"March\", color: \"var(--chart-3)\" },\n\t\tapril: { label: \"April\", color: \"var(--chart-4)\" },\n\t\tmay: { label: \"May\", color: \"var(--chart-5)\" },\n\t} satisfies Chart.ChartConfig;\n</script>\n\n<Card.Root class=\"flex flex-col\">\n\t<Card.Header class=\"items-center\">\n\t\t<Card.Title>Pie Chart - Stacked</Card.Title>\n\t\t<Card.Description>January - June 2024</Card.Description>\n\t</Card.Header>\n\t<Card.Content class=\"flex-1\">\n\t\t<Chart.Container config={chartConfig} class=\"mx-auto aspect-square max-h-[250px]\">\n\t\t\t<PieChart\n\t\t\t\tlabel=\"month\"\n\t\t\t\tc={(d) => {\n\t\t\t\t\treturn d.color;\n\t\t\t\t}}\n\t\t\t\tprops={{\n\t\t\t\t\tpie: {\n\t\t\t\t\t\tsort: (a, b) => {\n\t\t\t\t\t\t\tconst monthOrder = [\"january\", \"february\", \"march\", \"april\", \"may\"];\n\t\t\t\t\t\t\treturn monthOrder.indexOf(a.month) - monthOrder.indexOf(b.month);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tmotion: \"tween\",\n\t\t\t\t\t},\n\t\t\t\t\ttooltip: {\n\t\t\t\t\t\tcontext: {\n\t\t\t\t\t\t\thideDelay: 250,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t}}\n\t\t\t\tseries={[\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"desktop\",\n\t\t\t\t\t\tvalue: \"desktop\",\n\t\t\t\t\t\tdata: desktopData.map((d) => ({\n\t\t\t\t\t\t\tmonth: d.month,\n\t\t\t\t\t\t\tvalue: d.desktop,\n\t\t\t\t\t\t\tcolor: d.color,\n\t\t\t\t\t\t\tkey: \"desktop\",\n\t\t\t\t\t\t})),\n\t\t\t\t\t\tprops: { innerRadius: -20 },\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"mobile\",\n\t\t\t\t\t\tvalue: \"mobile\",\n\t\t\t\t\t\tdata: mobileData.map((d) => ({\n\t\t\t\t\t\t\tmonth: d.month,\n\t\t\t\t\t\t\tvalue: d.mobile,\n\t\t\t\t\t\t\tcolor: d.color,\n\t\t\t\t\t\t\tkey: \"mobile\",\n\t\t\t\t\t\t})),\n\t\t\t\t\t\tprops: { outerRadius: -30 },\n\t\t\t\t\t},\n\t\t\t\t]}\n\t\t\t\tpadding={29}\n\t\t\t>\n\t\t\t\t{#snippet arc({ props })}\n\t\t\t\t\t<Arc {...props} fill={props.data.color} />\n\t\t\t\t{/snippet}\n\t\t\t\t{#snippet tooltip()}\n\t\t\t\t\t<Chart.Tooltip\n\t\t\t\t\t\tlabelKey=\"visitors\"\n\t\t\t\t\t\tnameKey=\"month\"\n\t\t\t\t\t\tindicator=\"line\"\n\t\t\t\t\t\tlabelFormatter={(_, payload) => {\n\t\t\t\t\t\t\treturn chartConfig[payload?.[0].key as keyof typeof chartConfig].label;\n\t\t\t\t\t\t}}\n\t\t\t\t\t/>\n\t\t\t\t{/snippet}\n\t\t\t</PieChart>\n\t\t</Chart.Container>\n\t</Card.Content>\n\t<Card.Footer class=\"flex-col gap-2 text-sm\">\n\t\t<div class=\"flex items-center gap-2 leading-none font-medium\">\n\t\t\tTrending up by 5.2% this month <TrendingUpIcon class=\"size-4\" />\n\t\t</div>\n\t\t<div class=\"text-muted-foreground leading-none\">\n\t\t\tShowing total visitors for the last 6 months\n\t\t</div>\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/chart-radar-default.svelte",
    "content": "<script lang=\"ts\">\n\timport { LineChart } from \"layerchart\";\n\timport TrendingUpIcon from \"@lucide/svelte/icons/trending-up\";\n\timport { curveLinearClosed } from \"d3-shape\";\n\timport { scaleBand } from \"d3-scale\";\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\n\tconst chartData = [\n\t\t{ month: \"January\", desktop: 186 },\n\t\t{ month: \"February\", desktop: 305 },\n\t\t{ month: \"March\", desktop: 237 },\n\t\t{ month: \"April\", desktop: 273 },\n\t\t{ month: \"May\", desktop: 209 },\n\t\t{ month: \"June\", desktop: 214 },\n\t];\n\n\tconst chartConfig = {\n\t\tdesktop: { label: \"Desktop\", color: \"var(--chart-1)\" },\n\t} satisfies Chart.ChartConfig;\n</script>\n\n<Card.Root>\n\t<Card.Header class=\"items-center\">\n\t\t<Card.Title>Radar Chart</Card.Title>\n\t\t<Card.Description>Showing total visitors for the last 6 months</Card.Description>\n\t</Card.Header>\n\t<Card.Content class=\"flex-1\">\n\t\t<Chart.Container config={chartConfig} class=\"mx-auto aspect-square max-h-[250px]\">\n\t\t\t<LineChart\n\t\t\t\tdata={chartData}\n\t\t\t\tseries={[\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"desktop\",\n\t\t\t\t\t\tlabel: \"Desktop\",\n\t\t\t\t\t\tcolor: chartConfig.desktop.color,\n\t\t\t\t\t},\n\t\t\t\t]}\n\t\t\t\tradial\n\t\t\t\tx=\"month\"\n\t\t\t\txScale={scaleBand()}\n\t\t\t\tpadding={12}\n\t\t\t\tprops={{\n\t\t\t\t\tspline: {\n\t\t\t\t\t\tcurve: curveLinearClosed,\n\t\t\t\t\t\tfill: \"var(--color-desktop)\",\n\t\t\t\t\t\tfillOpacity: 0.6,\n\t\t\t\t\t\tstroke: \"0\",\n\t\t\t\t\t\tmotion: \"tween\",\n\t\t\t\t\t},\n\t\t\t\t\txAxis: {\n\t\t\t\t\t\ttickLength: 0,\n\t\t\t\t\t},\n\t\t\t\t\tyAxis: {\n\t\t\t\t\t\tformat: () => \"\",\n\t\t\t\t\t},\n\t\t\t\t\tgrid: {\n\t\t\t\t\t\tradialY: \"linear\",\n\t\t\t\t\t},\n\t\t\t\t\ttooltip: {\n\t\t\t\t\t\tcontext: {\n\t\t\t\t\t\t\tmode: \"voronoi\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\thighlight: {\n\t\t\t\t\t\tlines: false,\n\t\t\t\t\t},\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{#snippet tooltip()}\n\t\t\t\t\t<Chart.Tooltip />\n\t\t\t\t{/snippet}\n\t\t\t</LineChart>\n\t\t</Chart.Container>\n\t</Card.Content>\n\t<Card.Footer class=\"flex-col gap-2 text-sm\">\n\t\t<div class=\"flex items-center gap-2 leading-none font-medium\">\n\t\t\tTrending up by 5.2% this month <TrendingUpIcon class=\"size-4\" />\n\t\t</div>\n\t\t<div class=\"text-muted-foreground flex items-center gap-2 leading-none\">\n\t\t\tJanuary - June 2024\n\t\t</div>\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/chart-radar-dots.svelte",
    "content": "<script lang=\"ts\">\n\timport { LineChart } from \"layerchart\";\n\timport TrendingUpIcon from \"@lucide/svelte/icons/trending-up\";\n\timport { curveLinearClosed } from \"d3-shape\";\n\timport { scaleBand } from \"d3-scale\";\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\n\tconst chartData = [\n\t\t{ month: \"January\", desktop: 186 },\n\t\t{ month: \"February\", desktop: 305 },\n\t\t{ month: \"March\", desktop: 237 },\n\t\t{ month: \"April\", desktop: 273 },\n\t\t{ month: \"May\", desktop: 209 },\n\t\t{ month: \"June\", desktop: 214 },\n\t];\n\n\tconst chartConfig = {\n\t\tdesktop: { label: \"Desktop\", color: \"var(--chart-1)\" },\n\t} satisfies Chart.ChartConfig;\n</script>\n\n<Card.Root>\n\t<Card.Header class=\"items-center\">\n\t\t<Card.Title>Radar Chart - Dots</Card.Title>\n\t\t<Card.Description>Showing total visitors for the last 6 months</Card.Description>\n\t</Card.Header>\n\t<Card.Content class=\"flex-1\">\n\t\t<Chart.Container config={chartConfig} class=\"mx-auto aspect-square max-h-[250px]\">\n\t\t\t<LineChart\n\t\t\t\tdata={chartData}\n\t\t\t\tseries={[\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"desktop\",\n\t\t\t\t\t\tlabel: \"Desktop\",\n\t\t\t\t\t\tcolor: chartConfig.desktop.color,\n\t\t\t\t\t},\n\t\t\t\t]}\n\t\t\t\tradial\n\t\t\t\tx=\"month\"\n\t\t\t\txScale={scaleBand()}\n\t\t\t\tpoints={{ r: 4 }}\n\t\t\t\tpadding={12}\n\t\t\t\tprops={{\n\t\t\t\t\tspline: {\n\t\t\t\t\t\tcurve: curveLinearClosed,\n\t\t\t\t\t\tfill: \"var(--color-desktop)\",\n\t\t\t\t\t\tfillOpacity: 0.6,\n\t\t\t\t\t\tstroke: \"0\",\n\t\t\t\t\t\tmotion: \"tween\",\n\t\t\t\t\t},\n\t\t\t\t\txAxis: {\n\t\t\t\t\t\ttickLength: 0,\n\t\t\t\t\t},\n\t\t\t\t\tyAxis: {\n\t\t\t\t\t\tformat: () => \"\",\n\t\t\t\t\t},\n\t\t\t\t\tgrid: {\n\t\t\t\t\t\tradialY: \"linear\",\n\t\t\t\t\t},\n\t\t\t\t\ttooltip: {\n\t\t\t\t\t\tcontext: {\n\t\t\t\t\t\t\tmode: \"voronoi\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\thighlight: {\n\t\t\t\t\t\tlines: false,\n\t\t\t\t\t\tpoints: false,\n\t\t\t\t\t},\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{#snippet tooltip()}\n\t\t\t\t\t<Chart.Tooltip />\n\t\t\t\t{/snippet}\n\t\t\t</LineChart>\n\t\t</Chart.Container>\n\t</Card.Content>\n\t<Card.Footer class=\"flex-col gap-2 text-sm\">\n\t\t<div class=\"flex items-center gap-2 leading-none font-medium\">\n\t\t\tTrending up by 5.2% this month <TrendingUpIcon class=\"size-4\" />\n\t\t</div>\n\t\t<div class=\"text-muted-foreground flex items-center gap-2 leading-none\">\n\t\t\tJanuary - June 2024\n\t\t</div>\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/chart-radar-grid-circle-fill.svelte",
    "content": "<script lang=\"ts\">\n\timport { LineChart } from \"layerchart\";\n\timport TrendingUpIcon from \"@lucide/svelte/icons/trending-up\";\n\timport { curveLinearClosed } from \"d3-shape\";\n\timport { scaleBand } from \"d3-scale\";\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\n\tconst chartData = [\n\t\t{ month: \"January\", desktop: 186 },\n\t\t{ month: \"February\", desktop: 285 },\n\t\t{ month: \"March\", desktop: 237 },\n\t\t{ month: \"April\", desktop: 203 },\n\t\t{ month: \"May\", desktop: 209 },\n\t\t{ month: \"June\", desktop: 264 },\n\t];\n\n\tconst chartConfig = {\n\t\tdesktop: { label: \"Desktop\", color: \"var(--chart-1)\" },\n\t} satisfies Chart.ChartConfig;\n</script>\n\n<Card.Root>\n\t<Card.Header class=\"items-center\">\n\t\t<Card.Title>Radar Chart - Grid Circle Filled</Card.Title>\n\t\t<Card.Description>Showing total visitors for the last 6 months</Card.Description>\n\t</Card.Header>\n\t<Card.Content class=\"flex-1\">\n\t\t<Chart.Container config={chartConfig} class=\"mx-auto aspect-square max-h-[250px]\">\n\t\t\t<LineChart\n\t\t\t\tdata={chartData}\n\t\t\t\tseries={[\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"desktop\",\n\t\t\t\t\t\tlabel: \"Desktop\",\n\t\t\t\t\t\tcolor: chartConfig.desktop.color,\n\t\t\t\t\t},\n\t\t\t\t]}\n\t\t\t\tradial\n\t\t\t\tx=\"month\"\n\t\t\t\txScale={scaleBand()}\n\t\t\t\tpadding={12}\n\t\t\t\tyPadding={[0, 8]}\n\t\t\t\tprops={{\n\t\t\t\t\tspline: {\n\t\t\t\t\t\tcurve: curveLinearClosed,\n\t\t\t\t\t\tfill: \"var(--color-desktop)\",\n\t\t\t\t\t\tfillOpacity: 0.5,\n\t\t\t\t\t\tstroke: \"0\",\n\t\t\t\t\t\tmotion: \"tween\",\n\t\t\t\t\t},\n\t\t\t\t\txAxis: {\n\t\t\t\t\t\ttickLength: 0,\n\t\t\t\t\t},\n\t\t\t\t\tyAxis: {\n\t\t\t\t\t\tformat: () => \"\",\n\t\t\t\t\t},\n\t\t\t\t\tgrid: {\n\t\t\t\t\t\tradialY: \"circle\",\n\t\t\t\t\t\tclass: \"fill-(--color-desktop)\",\n\t\t\t\t\t\tclasses: {\n\t\t\t\t\t\t\tline: \"fill-(--color-desktop) opacity-20!\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\ttooltip: {\n\t\t\t\t\t\tcontext: {\n\t\t\t\t\t\t\tmode: \"voronoi\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\thighlight: {\n\t\t\t\t\t\tlines: false,\n\t\t\t\t\t},\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{#snippet tooltip()}\n\t\t\t\t\t<Chart.Tooltip />\n\t\t\t\t{/snippet}\n\t\t\t</LineChart>\n\t\t</Chart.Container>\n\t</Card.Content>\n\t<Card.Footer class=\"flex-col gap-2 text-sm\">\n\t\t<div class=\"flex items-center gap-2 leading-none font-medium\">\n\t\t\tTrending up by 5.2% this month <TrendingUpIcon class=\"size-4\" />\n\t\t</div>\n\t\t<div class=\"text-muted-foreground flex items-center gap-2 leading-none\">\n\t\t\tJanuary - June 2024\n\t\t</div>\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/chart-radar-grid-circle-no-lines.svelte",
    "content": "<script lang=\"ts\">\n\timport { LineChart } from \"layerchart\";\n\timport TrendingUpIcon from \"@lucide/svelte/icons/trending-up\";\n\timport { curveLinearClosed } from \"d3-shape\";\n\timport { scaleBand } from \"d3-scale\";\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\n\tconst chartData = [\n\t\t{ month: \"January\", desktop: 186 },\n\t\t{ month: \"February\", desktop: 305 },\n\t\t{ month: \"March\", desktop: 237 },\n\t\t{ month: \"April\", desktop: 203 },\n\t\t{ month: \"May\", desktop: 209 },\n\t\t{ month: \"June\", desktop: 214 },\n\t];\n\n\tconst chartConfig = {\n\t\tdesktop: { label: \"Desktop\", color: \"var(--chart-1)\" },\n\t} satisfies Chart.ChartConfig;\n</script>\n\n<Card.Root>\n\t<Card.Header class=\"items-center\">\n\t\t<Card.Title>Radar Chart - Grid Circle - No Lines</Card.Title>\n\t\t<Card.Description>Showing total visitors for the last 6 months</Card.Description>\n\t</Card.Header>\n\t<Card.Content class=\"flex-1\">\n\t\t<Chart.Container config={chartConfig} class=\"mx-auto aspect-square max-h-[250px]\">\n\t\t\t<LineChart\n\t\t\t\tdata={chartData}\n\t\t\t\tseries={[\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"desktop\",\n\t\t\t\t\t\tlabel: \"Desktop\",\n\t\t\t\t\t\tcolor: chartConfig.desktop.color,\n\t\t\t\t\t},\n\t\t\t\t]}\n\t\t\t\tradial\n\t\t\t\tx=\"month\"\n\t\t\t\txScale={scaleBand()}\n\t\t\t\tpoints={{ r: 4 }}\n\t\t\t\tpadding={12}\n\t\t\t\tprops={{\n\t\t\t\t\tspline: {\n\t\t\t\t\t\tcurve: curveLinearClosed,\n\t\t\t\t\t\tfill: \"var(--color-desktop)\",\n\t\t\t\t\t\tfillOpacity: 0.6,\n\t\t\t\t\t\tstroke: \"0\",\n\t\t\t\t\t\tmotion: \"tween\",\n\t\t\t\t\t},\n\t\t\t\t\txAxis: {\n\t\t\t\t\t\ttickLength: 0,\n\t\t\t\t\t},\n\t\t\t\t\tyAxis: {\n\t\t\t\t\t\tformat: () => \"\",\n\t\t\t\t\t},\n\t\t\t\t\tgrid: {\n\t\t\t\t\t\tradialY: \"circle\",\n\t\t\t\t\t\tx: false,\n\t\t\t\t\t},\n\t\t\t\t\ttooltip: {\n\t\t\t\t\t\tcontext: {\n\t\t\t\t\t\t\tmode: \"voronoi\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\thighlight: {\n\t\t\t\t\t\tlines: false,\n\t\t\t\t\t\tpoints: false,\n\t\t\t\t\t},\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{#snippet tooltip()}\n\t\t\t\t\t<Chart.Tooltip />\n\t\t\t\t{/snippet}\n\t\t\t</LineChart>\n\t\t</Chart.Container>\n\t</Card.Content>\n\t<Card.Footer class=\"flex-col gap-2 text-sm\">\n\t\t<div class=\"flex items-center gap-2 leading-none font-medium\">\n\t\t\tTrending up by 5.2% this month <TrendingUpIcon class=\"size-4\" />\n\t\t</div>\n\t\t<div class=\"text-muted-foreground flex items-center gap-2 leading-none\">\n\t\t\tJanuary - June 2024\n\t\t</div>\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/chart-radar-grid-circle.svelte",
    "content": "<script lang=\"ts\">\n\timport { LineChart } from \"layerchart\";\n\timport TrendingUpIcon from \"@lucide/svelte/icons/trending-up\";\n\timport { curveLinearClosed } from \"d3-shape\";\n\timport { scaleBand } from \"d3-scale\";\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\n\tconst chartData = [\n\t\t{ month: \"January\", desktop: 186 },\n\t\t{ month: \"February\", desktop: 305 },\n\t\t{ month: \"March\", desktop: 237 },\n\t\t{ month: \"April\", desktop: 273 },\n\t\t{ month: \"May\", desktop: 209 },\n\t\t{ month: \"June\", desktop: 214 },\n\t];\n\n\tconst chartConfig = {\n\t\tdesktop: { label: \"Desktop\", color: \"var(--chart-1)\" },\n\t} satisfies Chart.ChartConfig;\n</script>\n\n<Card.Root>\n\t<Card.Header class=\"items-center\">\n\t\t<Card.Title>Radar Chart - Grid Circle</Card.Title>\n\t\t<Card.Description>Showing total visitors for the last 6 months</Card.Description>\n\t</Card.Header>\n\t<Card.Content class=\"flex-1\">\n\t\t<Chart.Container config={chartConfig} class=\"mx-auto aspect-square max-h-[250px]\">\n\t\t\t<LineChart\n\t\t\t\tdata={chartData}\n\t\t\t\tseries={[\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"desktop\",\n\t\t\t\t\t\tlabel: \"Desktop\",\n\t\t\t\t\t\tcolor: chartConfig.desktop.color,\n\t\t\t\t\t},\n\t\t\t\t]}\n\t\t\t\tradial\n\t\t\t\tx=\"month\"\n\t\t\t\ty=\"desktop\"\n\t\t\t\txScale={scaleBand()}\n\t\t\t\tpoints={{ r: 4 }}\n\t\t\t\tpadding={12}\n\t\t\t\tprops={{\n\t\t\t\t\tspline: {\n\t\t\t\t\t\tcurve: curveLinearClosed,\n\t\t\t\t\t\tfill: \"var(--color-desktop)\",\n\t\t\t\t\t\tfillOpacity: 0.6,\n\t\t\t\t\t\tstroke: \"0\",\n\t\t\t\t\t\tmotion: \"tween\",\n\t\t\t\t\t},\n\t\t\t\t\txAxis: {\n\t\t\t\t\t\ttickLength: 0,\n\t\t\t\t\t},\n\t\t\t\t\tyAxis: {\n\t\t\t\t\t\tformat: () => \"\",\n\t\t\t\t\t},\n\t\t\t\t\tgrid: {\n\t\t\t\t\t\tradialY: \"circle\",\n\t\t\t\t\t},\n\t\t\t\t\ttooltip: {\n\t\t\t\t\t\tcontext: {\n\t\t\t\t\t\t\tmode: \"voronoi\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\thighlight: {\n\t\t\t\t\t\tlines: false,\n\t\t\t\t\t\tpoints: false,\n\t\t\t\t\t},\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{#snippet tooltip()}\n\t\t\t\t\t<Chart.Tooltip />\n\t\t\t\t{/snippet}\n\t\t\t</LineChart>\n\t\t</Chart.Container>\n\t</Card.Content>\n\t<Card.Footer class=\"flex-col gap-2 text-sm\">\n\t\t<div class=\"flex items-center gap-2 leading-none font-medium\">\n\t\t\tTrending up by 5.2% this month <TrendingUpIcon class=\"size-4\" />\n\t\t</div>\n\t\t<div class=\"text-muted-foreground flex items-center gap-2 leading-none\">\n\t\t\tJanuary - June 2024\n\t\t</div>\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/chart-radar-grid-custom.svelte",
    "content": "<script lang=\"ts\">\n\timport { Grid, LineChart } from \"layerchart\";\n\timport TrendingUpIcon from \"@lucide/svelte/icons/trending-up\";\n\timport { curveLinearClosed } from \"d3-shape\";\n\timport { scaleBand } from \"d3-scale\";\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\n\tconst chartData = [\n\t\t{ month: \"January\", desktop: 186 },\n\t\t{ month: \"February\", desktop: 305 },\n\t\t{ month: \"March\", desktop: 237 },\n\t\t{ month: \"April\", desktop: 273 },\n\t\t{ month: \"May\", desktop: 209 },\n\t\t{ month: \"June\", desktop: 214 },\n\t];\n\n\tconst chartConfig = {\n\t\tdesktop: { label: \"Desktop\", color: \"var(--chart-1)\" },\n\t} satisfies Chart.ChartConfig;\n</script>\n\n<Card.Root>\n\t<Card.Header class=\"items-center\">\n\t\t<Card.Title>Radar Chart - Grid Custom</Card.Title>\n\t\t<Card.Description>Showing total visitors for the last 6 months</Card.Description>\n\t</Card.Header>\n\t<Card.Content class=\"flex-1\">\n\t\t<Chart.Container config={chartConfig} class=\"mx-auto aspect-square max-h-[250px]\">\n\t\t\t<LineChart\n\t\t\t\tdata={chartData}\n\t\t\t\tseries={[\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"desktop\",\n\t\t\t\t\t\tlabel: \"Desktop\",\n\t\t\t\t\t\tcolor: chartConfig.desktop.color,\n\t\t\t\t\t},\n\t\t\t\t]}\n\t\t\t\tradial\n\t\t\t\tx=\"month\"\n\t\t\t\txScale={scaleBand()}\n\t\t\t\tpadding={12}\n\t\t\t\tprops={{\n\t\t\t\t\tspline: {\n\t\t\t\t\t\tcurve: curveLinearClosed,\n\t\t\t\t\t\tfill: \"var(--color-desktop)\",\n\t\t\t\t\t\tfillOpacity: 0.6,\n\t\t\t\t\t\tstroke: \"0\",\n\t\t\t\t\t\tmotion: \"tween\",\n\t\t\t\t\t},\n\t\t\t\t\txAxis: {\n\t\t\t\t\t\ttickLength: 0,\n\t\t\t\t\t},\n\t\t\t\t\tyAxis: {\n\t\t\t\t\t\tformat: () => \"\",\n\t\t\t\t\t},\n\t\t\t\t\ttooltip: {\n\t\t\t\t\t\tcontext: {\n\t\t\t\t\t\t\tmode: \"voronoi\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\thighlight: {\n\t\t\t\t\t\tlines: false,\n\t\t\t\t\t},\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{#snippet grid()}\n\t\t\t\t\t<Grid\n\t\t\t\t\t\ty\n\t\t\t\t\t\tradialY=\"linear\"\n\t\t\t\t\t\tyTicks={[Math.max(...chartData.map((m) => m.desktop))]}\n\t\t\t\t\t/>\n\t\t\t\t{/snippet}\n\t\t\t\t{#snippet tooltip()}\n\t\t\t\t\t<Chart.Tooltip />\n\t\t\t\t{/snippet}\n\t\t\t</LineChart>\n\t\t</Chart.Container>\n\t</Card.Content>\n\t<Card.Footer class=\"flex-col gap-2 text-sm\">\n\t\t<div class=\"flex items-center gap-2 leading-none font-medium\">\n\t\t\tTrending up by 5.2% this month <TrendingUpIcon class=\"size-4\" />\n\t\t</div>\n\t\t<div class=\"text-muted-foreground flex items-center gap-2 leading-none\">\n\t\t\tJanuary - June 2024\n\t\t</div>\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/chart-radar-grid-fill.svelte",
    "content": "<script lang=\"ts\">\n\timport { LineChart } from \"layerchart\";\n\timport TrendingUpIcon from \"@lucide/svelte/icons/trending-up\";\n\timport { curveLinearClosed } from \"d3-shape\";\n\timport { scaleBand } from \"d3-scale\";\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\n\tconst chartData = [\n\t\t{ month: \"January\", desktop: 186 },\n\t\t{ month: \"February\", desktop: 285 },\n\t\t{ month: \"March\", desktop: 237 },\n\t\t{ month: \"April\", desktop: 203 },\n\t\t{ month: \"May\", desktop: 209 },\n\t\t{ month: \"June\", desktop: 264 },\n\t];\n\n\tconst chartConfig = {\n\t\tdesktop: { label: \"Desktop\", color: \"var(--chart-1)\" },\n\t} satisfies Chart.ChartConfig;\n</script>\n\n<Card.Root>\n\t<Card.Header class=\"items-center\">\n\t\t<Card.Title>Radar Chart - Grid Filled</Card.Title>\n\t\t<Card.Description>Showing total visitors for the last 6 months</Card.Description>\n\t</Card.Header>\n\t<Card.Content class=\"flex-1\">\n\t\t<Chart.Container config={chartConfig} class=\"mx-auto aspect-square max-h-[250px]\">\n\t\t\t<LineChart\n\t\t\t\tdata={chartData}\n\t\t\t\tseries={[\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"desktop\",\n\t\t\t\t\t\tlabel: \"Desktop\",\n\t\t\t\t\t\tcolor: chartConfig.desktop.color,\n\t\t\t\t\t},\n\t\t\t\t]}\n\t\t\t\tradial\n\t\t\t\tx=\"month\"\n\t\t\t\txScale={scaleBand()}\n\t\t\t\tpadding={12}\n\t\t\t\tyPadding={[0, 8]}\n\t\t\t\tprops={{\n\t\t\t\t\tspline: {\n\t\t\t\t\t\tcurve: curveLinearClosed,\n\t\t\t\t\t\tfill: \"var(--color-desktop)\",\n\t\t\t\t\t\tfillOpacity: 0.5,\n\t\t\t\t\t\tstroke: \"0\",\n\t\t\t\t\t\tmotion: \"tween\",\n\t\t\t\t\t},\n\t\t\t\t\txAxis: {\n\t\t\t\t\t\ttickLength: 0,\n\t\t\t\t\t},\n\t\t\t\t\tyAxis: {\n\t\t\t\t\t\tformat: () => \"\",\n\t\t\t\t\t},\n\t\t\t\t\tgrid: {\n\t\t\t\t\t\tradialY: \"linear\",\n\t\t\t\t\t\tclass: \"fill-(--color-desktop)\",\n\t\t\t\t\t\tclasses: {\n\t\t\t\t\t\t\tline: \"fill-(--color-desktop) opacity-20!\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\ttooltip: {\n\t\t\t\t\t\tcontext: {\n\t\t\t\t\t\t\tmode: \"voronoi\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\thighlight: {\n\t\t\t\t\t\tlines: false,\n\t\t\t\t\t},\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{#snippet tooltip()}\n\t\t\t\t\t<Chart.Tooltip />\n\t\t\t\t{/snippet}\n\t\t\t</LineChart>\n\t\t</Chart.Container>\n\t</Card.Content>\n\t<Card.Footer class=\"flex-col gap-2 text-sm\">\n\t\t<div class=\"flex items-center gap-2 leading-none font-medium\">\n\t\t\tTrending up by 5.2% this month <TrendingUpIcon class=\"size-4\" />\n\t\t</div>\n\t\t<div class=\"text-muted-foreground flex items-center gap-2 leading-none\">\n\t\t\tJanuary - June 2024\n\t\t</div>\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/chart-radar-grid-none.svelte",
    "content": "<script lang=\"ts\">\n\timport { LineChart } from \"layerchart\";\n\timport TrendingUpIcon from \"@lucide/svelte/icons/trending-up\";\n\timport { curveLinearClosed } from \"d3-shape\";\n\timport { scaleBand } from \"d3-scale\";\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\n\tconst chartData = [\n\t\t{ month: \"January\", desktop: 186 },\n\t\t{ month: \"February\", desktop: 305 },\n\t\t{ month: \"March\", desktop: 237 },\n\t\t{ month: \"April\", desktop: 273 },\n\t\t{ month: \"May\", desktop: 209 },\n\t\t{ month: \"June\", desktop: 214 },\n\t];\n\n\tconst chartConfig = {\n\t\tdesktop: { label: \"Desktop\", color: \"var(--chart-1)\" },\n\t} satisfies Chart.ChartConfig;\n</script>\n\n<Card.Root>\n\t<Card.Header class=\"items-center\">\n\t\t<Card.Title>Radar Chart - Grid None</Card.Title>\n\t\t<Card.Description>Showing total visitors for the last 6 months</Card.Description>\n\t</Card.Header>\n\t<Card.Content class=\"flex-1\">\n\t\t<Chart.Container config={chartConfig} class=\"mx-auto aspect-square max-h-[250px]\">\n\t\t\t<LineChart\n\t\t\t\tdata={chartData}\n\t\t\t\tseries={[\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"desktop\",\n\t\t\t\t\t\tlabel: \"Desktop\",\n\t\t\t\t\t\tcolor: chartConfig.desktop.color,\n\t\t\t\t\t},\n\t\t\t\t]}\n\t\t\t\tradial\n\t\t\t\tx=\"month\"\n\t\t\t\txScale={scaleBand()}\n\t\t\t\tpoints={{ r: 4 }}\n\t\t\t\tpadding={12}\n\t\t\t\tgrid={false}\n\t\t\t\tprops={{\n\t\t\t\t\tspline: {\n\t\t\t\t\t\tcurve: curveLinearClosed,\n\t\t\t\t\t\tfill: \"var(--color-desktop)\",\n\t\t\t\t\t\tfillOpacity: 0.6,\n\t\t\t\t\t\tstroke: \"0\",\n\t\t\t\t\t\tmotion: \"tween\",\n\t\t\t\t\t},\n\t\t\t\t\txAxis: {\n\t\t\t\t\t\ttickLength: 0,\n\t\t\t\t\t},\n\t\t\t\t\tyAxis: {\n\t\t\t\t\t\tformat: () => \"\",\n\t\t\t\t\t},\n\n\t\t\t\t\ttooltip: {\n\t\t\t\t\t\tcontext: {\n\t\t\t\t\t\t\tmode: \"voronoi\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\thighlight: {\n\t\t\t\t\t\tlines: false,\n\t\t\t\t\t\tpoints: false,\n\t\t\t\t\t},\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{#snippet tooltip()}\n\t\t\t\t\t<Chart.Tooltip />\n\t\t\t\t{/snippet}\n\t\t\t</LineChart>\n\t\t</Chart.Container>\n\t</Card.Content>\n\t<Card.Footer class=\"flex-col gap-2 text-sm\">\n\t\t<div class=\"flex items-center gap-2 leading-none font-medium\">\n\t\t\tTrending up by 5.2% this month <TrendingUpIcon class=\"size-4\" />\n\t\t</div>\n\t\t<div class=\"text-muted-foreground flex items-center gap-2 leading-none\">\n\t\t\tJanuary - June 2024\n\t\t</div>\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/chart-radar-icons.svelte",
    "content": "<script lang=\"ts\">\n\timport { LineChart } from \"layerchart\";\n\timport TrendingUpIcon from \"@lucide/svelte/icons/trending-up\";\n\timport ArrowDownFromLineIcon from \"@lucide/svelte/icons/arrow-down-from-line\";\n\timport ArrowUpFromLineIcon from \"@lucide/svelte/icons/arrow-up-from-line\";\n\timport { curveLinearClosed } from \"d3-shape\";\n\timport { scaleBand } from \"d3-scale\";\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\n\tconst chartData = [\n\t\t{ month: \"January\", desktop: 186, mobile: 80 },\n\t\t{ month: \"February\", desktop: 305, mobile: 200 },\n\t\t{ month: \"March\", desktop: 237, mobile: 120 },\n\t\t{ month: \"April\", desktop: 73, mobile: 190 },\n\t\t{ month: \"May\", desktop: 209, mobile: 130 },\n\t\t{ month: \"June\", desktop: 214, mobile: 140 },\n\t];\n\n\tconst chartConfig = {\n\t\tdesktop: { label: \"Desktop\", color: \"var(--chart-1)\", icon: ArrowDownFromLineIcon },\n\t\tmobile: { label: \"Mobile\", color: \"var(--chart-2)\", icon: ArrowUpFromLineIcon },\n\t} satisfies Chart.ChartConfig;\n</script>\n\n<Card.Root>\n\t<Card.Header class=\"items-center\">\n\t\t<Card.Title>Radar Chart - Icons</Card.Title>\n\t\t<Card.Description>Showing total visitors for the last 6 months</Card.Description>\n\t</Card.Header>\n\t<Card.Content class=\"flex-1\">\n\t\t<Chart.Container config={chartConfig} class=\"mx-auto aspect-square max-h-[250px]\">\n\t\t\t<LineChart\n\t\t\t\tdata={chartData}\n\t\t\t\tseries={[\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"desktop\",\n\t\t\t\t\t\tlabel: \"Desktop\",\n\t\t\t\t\t\tcolor: chartConfig.desktop.color,\n\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\tfill: chartConfig.desktop.color,\n\t\t\t\t\t\t\tfillOpacity: 0.6,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"mobile\",\n\t\t\t\t\t\tlabel: \"Mobile\",\n\t\t\t\t\t\tcolor: chartConfig.mobile.color,\n\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\tfill: chartConfig.mobile.color,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t]}\n\t\t\t\tradial\n\t\t\t\tx=\"month\"\n\t\t\t\txScale={scaleBand()}\n\t\t\t\tpadding={8}\n\t\t\t\tlegend={{ classes: { root: \"-bottom-5\" } }}\n\t\t\t\tprops={{\n\t\t\t\t\tspline: {\n\t\t\t\t\t\tcurve: curveLinearClosed,\n\t\t\t\t\t\tstroke: \"0\",\n\t\t\t\t\t\tmotion: \"tween\",\n\t\t\t\t\t},\n\t\t\t\t\txAxis: {\n\t\t\t\t\t\ttickLength: -8,\n\t\t\t\t\t},\n\t\t\t\t\tyAxis: {\n\t\t\t\t\t\tformat: () => \"\",\n\t\t\t\t\t},\n\t\t\t\t\tgrid: {\n\t\t\t\t\t\tradialY: \"linear\",\n\t\t\t\t\t},\n\t\t\t\t\ttooltip: {\n\t\t\t\t\t\tcontext: {\n\t\t\t\t\t\t\tmode: \"voronoi\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\thighlight: {\n\t\t\t\t\t\tlines: false,\n\t\t\t\t\t\tpoints: { r: 4 },\n\t\t\t\t\t},\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{#snippet tooltip()}\n\t\t\t\t\t<Chart.Tooltip />\n\t\t\t\t{/snippet}\n\t\t\t</LineChart>\n\t\t</Chart.Container>\n\t</Card.Content>\n\t<Card.Footer class=\"flex-col gap-2 pt-4 text-sm\">\n\t\t<div class=\"flex items-center gap-2 leading-none font-medium\">\n\t\t\tTrending up by 5.2% this month <TrendingUpIcon class=\"size-4\" />\n\t\t</div>\n\t\t<div class=\"text-muted-foreground flex items-center gap-2 leading-none\">\n\t\t\tJanuary - June 2024\n\t\t</div>\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/chart-radar-label-custom.svelte",
    "content": "<script lang=\"ts\">\n\timport { Axis, LineChart, Text } from \"layerchart\";\n\timport TrendingUpIcon from \"@lucide/svelte/icons/trending-up\";\n\timport { curveLinearClosed } from \"d3-shape\";\n\timport { scaleBand } from \"d3-scale\";\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\n\tconst chartData = [\n\t\t{ month: \"January\", desktop: 186, mobile: 80 },\n\t\t{ month: \"February\", desktop: 305, mobile: 200 },\n\t\t{ month: \"March\", desktop: 237, mobile: 120 },\n\t\t{ month: \"April\", desktop: 73, mobile: 190 },\n\t\t{ month: \"May\", desktop: 209, mobile: 130 },\n\t\t{ month: \"June\", desktop: 214, mobile: 140 },\n\t];\n\n\tconst chartConfig = {\n\t\tdesktop: { label: \"Desktop\", color: \"var(--chart-1)\" },\n\t\tmobile: { label: \"Mobile\", color: \"var(--chart-2)\" },\n\t} satisfies Chart.ChartConfig;\n</script>\n\n<Card.Root>\n\t<Card.Header class=\"items-center\">\n\t\t<Card.Title>Radar Chart - Custom Label</Card.Title>\n\t\t<Card.Description>Showing total visitors for the last 6 months</Card.Description>\n\t</Card.Header>\n\t<Card.Content class=\"flex-1\">\n\t\t<Chart.Container config={chartConfig} class=\"mx-auto aspect-square max-h-[250px]\">\n\t\t\t<LineChart\n\t\t\t\tdata={chartData}\n\t\t\t\tseries={[\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"desktop\",\n\t\t\t\t\t\tlabel: \"Desktop\",\n\t\t\t\t\t\tcolor: chartConfig.desktop.color,\n\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\tfill: chartConfig.desktop.color,\n\t\t\t\t\t\t\tfillOpacity: 0.6,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"mobile\",\n\t\t\t\t\t\tlabel: \"Mobile\",\n\t\t\t\t\t\tcolor: chartConfig.mobile.color,\n\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\tfill: chartConfig.mobile.color,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t]}\n\t\t\t\tradial\n\t\t\t\tx=\"month\"\n\t\t\t\txScale={scaleBand()}\n\t\t\t\tpadding={12}\n\t\t\t\tprops={{\n\t\t\t\t\tspline: {\n\t\t\t\t\t\tcurve: curveLinearClosed,\n\t\t\t\t\t\tstroke: \"0\",\n\t\t\t\t\t\tmotion: \"tween\",\n\t\t\t\t\t},\n\t\t\t\t\txAxis: {\n\t\t\t\t\t\ttickLength: 0,\n\t\t\t\t\t},\n\t\t\t\t\tyAxis: {\n\t\t\t\t\t\tformat: () => \"\",\n\t\t\t\t\t},\n\t\t\t\t\tgrid: {\n\t\t\t\t\t\tradialY: \"linear\",\n\t\t\t\t\t},\n\t\t\t\t\ttooltip: {\n\t\t\t\t\t\tcontext: {\n\t\t\t\t\t\t\tmode: \"voronoi\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\thighlight: {\n\t\t\t\t\t\tlines: false,\n\t\t\t\t\t\tpoints: { r: 4 },\n\t\t\t\t\t},\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{#snippet axis({ getAxisProps })}\n\t\t\t\t\t<Axis {...getAxisProps(\"x\")}>\n\t\t\t\t\t\t{#snippet tickLabel({ props, index })}\n\t\t\t\t\t\t\t{@const y = props.y\n\t\t\t\t\t\t\t\t? typeof props.y === \"number\"\n\t\t\t\t\t\t\t\t\t? props.y\n\t\t\t\t\t\t\t\t\t: Number.parseInt(props.y)\n\t\t\t\t\t\t\t\t: 0}\n\t\t\t\t\t\t\t{@const data = chartData[index]}\n\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\t{...props}\n\t\t\t\t\t\t\t\t{y}\n\t\t\t\t\t\t\t\tvalue=\"{data.desktop} / {data.mobile}\"\n\t\t\t\t\t\t\t\tclass=\"fill-foreground\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<Text {...props} y={y + 14} />\n\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t</Axis>\n\t\t\t\t\t<Axis {...getAxisProps(\"y\")} />\n\t\t\t\t{/snippet}\n\t\t\t\t{#snippet tooltip()}\n\t\t\t\t\t<Chart.Tooltip />\n\t\t\t\t{/snippet}\n\t\t\t</LineChart>\n\t\t</Chart.Container>\n\t</Card.Content>\n\t<Card.Footer class=\"flex-col gap-2 text-sm\">\n\t\t<div class=\"flex items-center gap-2 leading-none font-medium\">\n\t\t\tTrending up by 5.2% this month <TrendingUpIcon class=\"size-4\" />\n\t\t</div>\n\t\t<div class=\"text-muted-foreground flex items-center gap-2 leading-none\">\n\t\t\tJanuary - June 2024\n\t\t</div>\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/chart-radar-legend.svelte",
    "content": "<script lang=\"ts\">\n\timport { LineChart } from \"layerchart\";\n\timport TrendingUpIcon from \"@lucide/svelte/icons/trending-up\";\n\timport { curveLinearClosed } from \"d3-shape\";\n\timport { scaleBand } from \"d3-scale\";\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\n\tconst chartData = [\n\t\t{ month: \"January\", desktop: 186, mobile: 80 },\n\t\t{ month: \"February\", desktop: 305, mobile: 200 },\n\t\t{ month: \"March\", desktop: 237, mobile: 120 },\n\t\t{ month: \"April\", desktop: 73, mobile: 190 },\n\t\t{ month: \"May\", desktop: 209, mobile: 130 },\n\t\t{ month: \"June\", desktop: 214, mobile: 140 },\n\t];\n\n\tconst chartConfig = {\n\t\tdesktop: { label: \"Desktop\", color: \"var(--chart-1)\" },\n\t\tmobile: { label: \"Mobile\", color: \"var(--chart-2)\" },\n\t} satisfies Chart.ChartConfig;\n</script>\n\n<Card.Root>\n\t<Card.Header class=\"items-center\">\n\t\t<Card.Title>Radar Chart - Legend</Card.Title>\n\t\t<Card.Description>Showing total visitors for the last 6 months</Card.Description>\n\t</Card.Header>\n\t<Card.Content class=\"flex-1\">\n\t\t<Chart.Container config={chartConfig} class=\"mx-auto aspect-square max-h-[250px]\">\n\t\t\t<LineChart\n\t\t\t\tdata={chartData}\n\t\t\t\tseries={[\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"desktop\",\n\t\t\t\t\t\tlabel: \"Desktop\",\n\t\t\t\t\t\tcolor: chartConfig.desktop.color,\n\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\tfill: chartConfig.desktop.color,\n\t\t\t\t\t\t\tfillOpacity: 0.6,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"mobile\",\n\t\t\t\t\t\tlabel: \"Mobile\",\n\t\t\t\t\t\tcolor: chartConfig.mobile.color,\n\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\tfill: chartConfig.mobile.color,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t]}\n\t\t\t\tradial\n\t\t\t\tx=\"month\"\n\t\t\t\txScale={scaleBand()}\n\t\t\t\tpadding={8}\n\t\t\t\tlegend={{ classes: { root: \"-bottom-5\" } }}\n\t\t\t\tprops={{\n\t\t\t\t\tspline: {\n\t\t\t\t\t\tcurve: curveLinearClosed,\n\t\t\t\t\t\tstroke: \"0\",\n\t\t\t\t\t\tmotion: \"tween\",\n\t\t\t\t\t},\n\t\t\t\t\txAxis: {\n\t\t\t\t\t\ttickLength: -8,\n\t\t\t\t\t},\n\t\t\t\t\tyAxis: {\n\t\t\t\t\t\tformat: () => \"\",\n\t\t\t\t\t},\n\t\t\t\t\tgrid: {\n\t\t\t\t\t\tradialY: \"linear\",\n\t\t\t\t\t},\n\t\t\t\t\ttooltip: {\n\t\t\t\t\t\tcontext: {\n\t\t\t\t\t\t\tmode: \"voronoi\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\thighlight: {\n\t\t\t\t\t\tlines: false,\n\t\t\t\t\t\tpoints: { r: 4 },\n\t\t\t\t\t},\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{#snippet tooltip()}\n\t\t\t\t\t<Chart.Tooltip />\n\t\t\t\t{/snippet}\n\t\t\t</LineChart>\n\t\t</Chart.Container>\n\t</Card.Content>\n\t<Card.Footer class=\"flex-col gap-2 pt-4 text-sm\">\n\t\t<div class=\"flex items-center gap-2 leading-none font-medium\">\n\t\t\tTrending up by 5.2% this month <TrendingUpIcon class=\"size-4\" />\n\t\t</div>\n\t\t<div class=\"text-muted-foreground flex items-center gap-2 leading-none\">\n\t\t\tJanuary - June 2024\n\t\t</div>\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/chart-radar-lines-only.svelte",
    "content": "<script lang=\"ts\">\n\timport { LineChart } from \"layerchart\";\n\timport TrendingUpIcon from \"@lucide/svelte/icons/trending-up\";\n\timport { curveLinearClosed } from \"d3-shape\";\n\timport { scaleBand } from \"d3-scale\";\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\n\tconst chartData = [\n\t\t{ month: \"January\", desktop: 186, mobile: 160 },\n\t\t{ month: \"February\", desktop: 185, mobile: 170 },\n\t\t{ month: \"March\", desktop: 207, mobile: 180 },\n\t\t{ month: \"April\", desktop: 173, mobile: 160 },\n\t\t{ month: \"May\", desktop: 160, mobile: 190 },\n\t\t{ month: \"June\", desktop: 174, mobile: 204 },\n\t];\n\n\tconst chartConfig = {\n\t\tdesktop: { label: \"Desktop\", color: \"var(--chart-1)\" },\n\t\tmobile: { label: \"Mobile\", color: \"var(--chart-2)\" },\n\t} satisfies Chart.ChartConfig;\n</script>\n\n<Card.Root>\n\t<Card.Header class=\"items-center\">\n\t\t<Card.Title>Radar Chart - Lines Only</Card.Title>\n\t\t<Card.Description>Showing total visitors for the last 6 months</Card.Description>\n\t</Card.Header>\n\t<Card.Content class=\"flex-1\">\n\t\t<Chart.Container config={chartConfig} class=\"mx-auto aspect-square max-h-[250px]\">\n\t\t\t<LineChart\n\t\t\t\tradial\n\t\t\t\tdata={chartData}\n\t\t\t\tx=\"month\"\n\t\t\t\txScale={scaleBand()}\n\t\t\t\tpadding={12}\n\t\t\t\tseries={[\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"desktop\",\n\t\t\t\t\t\tlabel: \"Desktop\",\n\t\t\t\t\t\tcolor: chartConfig.desktop.color,\n\t\t\t\t\t\tprops: { class: \"fill-none stroke-[2]\" },\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"mobile\",\n\t\t\t\t\t\tlabel: \"Mobile\",\n\t\t\t\t\t\tcolor: chartConfig.mobile.color,\n\t\t\t\t\t\tprops: { class: \"fill-none stroke-[2]\" },\n\t\t\t\t\t},\n\t\t\t\t]}\n\t\t\t\tprops={{\n\t\t\t\t\tspline: { curve: curveLinearClosed, motion: \"tween\" },\n\t\t\t\t\tgrid: { radialY: \"linear\", x: false },\n\t\t\t\t\tyAxis: { format: () => \"\" },\n\t\t\t\t\ttooltip: { context: { mode: \"voronoi\" } },\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{#snippet tooltip()}\n\t\t\t\t\t<Chart.Tooltip />\n\t\t\t\t{/snippet}\n\t\t\t</LineChart>\n\t\t</Chart.Container>\n\t</Card.Content>\n\t<Card.Footer class=\"flex-col gap-2 text-sm\">\n\t\t<div class=\"flex items-center gap-2 leading-none font-medium\">\n\t\t\tTrending up by 5.2% this month <TrendingUpIcon class=\"size-4\" />\n\t\t</div>\n\t\t<div class=\"text-muted-foreground flex items-center gap-2 leading-none\">\n\t\t\tJanuary - June 2024\n\t\t</div>\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/chart-radar-multiple.svelte",
    "content": "<script lang=\"ts\">\n\timport { LineChart } from \"layerchart\";\n\timport TrendingUpIcon from \"@lucide/svelte/icons/trending-up\";\n\timport { curveLinearClosed } from \"d3-shape\";\n\timport { scaleBand } from \"d3-scale\";\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\n\tconst chartData = [\n\t\t{ month: \"January\", desktop: 186, mobile: 80 },\n\t\t{ month: \"February\", desktop: 305, mobile: 200 },\n\t\t{ month: \"March\", desktop: 237, mobile: 120 },\n\t\t{ month: \"April\", desktop: 73, mobile: 190 },\n\t\t{ month: \"May\", desktop: 209, mobile: 130 },\n\t\t{ month: \"June\", desktop: 214, mobile: 140 },\n\t];\n\n\tconst chartConfig = {\n\t\tdesktop: { label: \"Desktop\", color: \"var(--chart-1)\" },\n\t\tmobile: { label: \"Mobile\", color: \"var(--chart-2)\" },\n\t} satisfies Chart.ChartConfig;\n</script>\n\n<Card.Root>\n\t<Card.Header class=\"items-center\">\n\t\t<Card.Title>Radar Chart - Multiple</Card.Title>\n\t\t<Card.Description>Showing total visitors for the last 6 months</Card.Description>\n\t</Card.Header>\n\t<Card.Content class=\"flex-1\">\n\t\t<Chart.Container config={chartConfig} class=\"mx-auto aspect-square max-h-[250px]\">\n\t\t\t<LineChart\n\t\t\t\tdata={chartData}\n\t\t\t\tseries={[\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"desktop\",\n\t\t\t\t\t\tlabel: \"Desktop\",\n\t\t\t\t\t\tcolor: chartConfig.desktop.color,\n\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\tfill: chartConfig.desktop.color,\n\t\t\t\t\t\t\tfillOpacity: 0.6,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"mobile\",\n\t\t\t\t\t\tlabel: \"Mobile\",\n\t\t\t\t\t\tcolor: chartConfig.mobile.color,\n\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\tfill: chartConfig.mobile.color,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t]}\n\t\t\t\tradial\n\t\t\t\tx=\"month\"\n\t\t\t\txScale={scaleBand()}\n\t\t\t\tpadding={12}\n\t\t\t\tprops={{\n\t\t\t\t\tspline: {\n\t\t\t\t\t\tcurve: curveLinearClosed,\n\t\t\t\t\t\tstroke: \"0\",\n\t\t\t\t\t\tmotion: \"tween\",\n\t\t\t\t\t},\n\t\t\t\t\txAxis: {\n\t\t\t\t\t\ttickLength: 0,\n\t\t\t\t\t},\n\t\t\t\t\tyAxis: {\n\t\t\t\t\t\tformat: () => \"\",\n\t\t\t\t\t},\n\t\t\t\t\tgrid: {\n\t\t\t\t\t\tradialY: \"linear\",\n\t\t\t\t\t},\n\t\t\t\t\ttooltip: {\n\t\t\t\t\t\tcontext: {\n\t\t\t\t\t\t\tmode: \"voronoi\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\thighlight: {\n\t\t\t\t\t\tlines: false,\n\t\t\t\t\t\tpoints: { r: 4 },\n\t\t\t\t\t},\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{#snippet tooltip()}\n\t\t\t\t\t<Chart.Tooltip />\n\t\t\t\t{/snippet}\n\t\t\t</LineChart>\n\t\t</Chart.Container>\n\t</Card.Content>\n\t<Card.Footer class=\"flex-col gap-2 text-sm\">\n\t\t<div class=\"flex items-center gap-2 leading-none font-medium\">\n\t\t\tTrending up by 5.2% this month <TrendingUpIcon class=\"size-4\" />\n\t\t</div>\n\t\t<div class=\"text-muted-foreground flex items-center gap-2 leading-none\">\n\t\t\tJanuary - June 2024\n\t\t</div>\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/chart-radar-radius.svelte",
    "content": "<script lang=\"ts\">\n\timport { Axis, LineChart } from \"layerchart\";\n\timport TrendingUpIcon from \"@lucide/svelte/icons/trending-up\";\n\timport { curveLinearClosed } from \"d3-shape\";\n\timport { scaleBand } from \"d3-scale\";\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\n\tconst chartData = [\n\t\t{ month: \"January\", desktop: 186, mobile: 80 },\n\t\t{ month: \"February\", desktop: 305, mobile: 200 },\n\t\t{ month: \"March\", desktop: 237, mobile: 120 },\n\t\t{ month: \"April\", desktop: 73, mobile: 190 },\n\t\t{ month: \"May\", desktop: 209, mobile: 130 },\n\t\t{ month: \"June\", desktop: 214, mobile: 140 },\n\t];\n\n\tconst chartConfig = {\n\t\tdesktop: { label: \"Desktop\", color: \"var(--chart-1)\" },\n\t\tmobile: { label: \"Mobile\", color: \"var(--chart-2)\" },\n\t} satisfies Chart.ChartConfig;\n</script>\n\n<Card.Root>\n\t<Card.Header class=\"items-center\">\n\t\t<Card.Title>Radar Chart - Radius Axis</Card.Title>\n\t\t<Card.Description>Showing total visitors for the last 6 months</Card.Description>\n\t</Card.Header>\n\t<Card.Content class=\"flex-1\">\n\t\t<Chart.Container config={chartConfig} class=\"mx-auto aspect-square max-h-[250px]\">\n\t\t\t<LineChart\n\t\t\t\tdata={chartData}\n\t\t\t\tseries={[\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"desktop\",\n\t\t\t\t\t\tlabel: \"Desktop\",\n\t\t\t\t\t\tcolor: chartConfig.desktop.color,\n\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\tfill: chartConfig.desktop.color,\n\t\t\t\t\t\t\tfillOpacity: 0.6,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"mobile\",\n\t\t\t\t\t\tlabel: \"Mobile\",\n\t\t\t\t\t\tcolor: chartConfig.mobile.color,\n\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\tfill: chartConfig.mobile.color,\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t]}\n\t\t\t\tradial\n\t\t\t\tx=\"month\"\n\t\t\t\ty=\"desktop\"\n\t\t\t\txScale={scaleBand()}\n\t\t\t\tpadding={12}\n\t\t\t\tprops={{\n\t\t\t\t\tspline: {\n\t\t\t\t\t\tcurve: curveLinearClosed,\n\t\t\t\t\t\tstroke: \"0\",\n\t\t\t\t\t\tmotion: \"tween\",\n\t\t\t\t\t},\n\t\t\t\t\txAxis: {\n\t\t\t\t\t\tplacement: \"angle\",\n\t\t\t\t\t\tformat: () => \"\",\n\t\t\t\t\t},\n\t\t\t\t\tyAxis: {\n\t\t\t\t\t\tformat: \"metric\",\n\n\t\t\t\t\t\ttickLabelProps: {\n\t\t\t\t\t\t\tclass: \"fill-background!\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tgrid: {\n\t\t\t\t\t\tyTicks: 6,\n\t\t\t\t\t\tradialY: \"linear\",\n\t\t\t\t\t},\n\t\t\t\t\ttooltip: {\n\t\t\t\t\t\tcontext: {\n\t\t\t\t\t\t\tmode: \"voronoi\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\thighlight: {\n\t\t\t\t\t\tlines: false,\n\t\t\t\t\t\tpoints: { r: 4 },\n\t\t\t\t\t},\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{#snippet axis({ getAxisProps })}\n\t\t\t\t\t<Axis {...getAxisProps(\"x\")} />\n\t\t\t\t\t<Axis {...getAxisProps(\"y\")} />\n\t\t\t\t{/snippet}\n\t\t\t\t{#snippet tooltip()}\n\t\t\t\t\t<Chart.Tooltip />\n\t\t\t\t{/snippet}\n\t\t\t</LineChart>\n\t\t</Chart.Container>\n\t</Card.Content>\n\t<Card.Footer class=\"flex-col gap-2 text-sm\">\n\t\t<div class=\"flex items-center gap-2 leading-none font-medium\">\n\t\t\tTrending up by 5.2% this month <TrendingUpIcon class=\"size-4\" />\n\t\t</div>\n\t\t<div class=\"text-muted-foreground flex items-center gap-2 leading-none\">\n\t\t\tJanuary - June 2024\n\t\t</div>\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/chart-radial-grid.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport { ArcChart } from \"layerchart\";\n\timport TrendingUpIcon from \"@lucide/svelte/icons/trending-up\";\n\n\tconst chartData = [\n\t\t{ browser: \"other\", visitors: 90, color: \"var(--color-other)\" },\n\t\t{ browser: \"edge\", visitors: 173, color: \"var(--color-edge)\" },\n\t\t{ browser: \"firefox\", visitors: 187, color: \"var(--color-firefox)\" },\n\t\t{ browser: \"safari\", visitors: 200, color: \"var(--color-safari)\" },\n\t\t{ browser: \"chrome\", visitors: 275, color: \"var(--color-chrome)\" },\n\t];\n\n\tconst chartConfig = {\n\t\tvisitors: { label: \"Visitors\" },\n\t\tchrome: { label: \"Chrome\", color: \"var(--chart-1)\" },\n\t\tsafari: { label: \"Safari\", color: \"var(--chart-2)\" },\n\t\tfirefox: { label: \"Firefox\", color: \"var(--chart-3)\" },\n\t\tedge: { label: \"Edge\", color: \"var(--chart-4)\" },\n\t\tother: { label: \"Other\", color: \"var(--chart-5)\" },\n\t} satisfies Chart.ChartConfig;\n</script>\n\n<Card.Root>\n\t<Card.Header class=\"items-center\">\n\t\t<Card.Title>Radial Chart - Grid</Card.Title>\n\t\t<Card.Description>Showing total visitors for the last 6 months</Card.Description>\n\t</Card.Header>\n\t<Card.Content class=\"flex-1\">\n\t\t<Chart.Container config={chartConfig} class=\"mx-auto aspect-square max-h-[250px]\">\n\t\t\t<ArcChart\n\t\t\t\tlabel=\"browser\"\n\t\t\t\tvalue=\"visitors\"\n\t\t\t\touterRadius={-17}\n\t\t\t\tinnerRadius={-12.5}\n\t\t\t\tpadding={20}\n\t\t\t\trange={[90, -270]}\n\t\t\t\tmaxValue={Math.max(...chartData.map((d) => d.visitors))}\n\t\t\t\tseries={chartData.map((d) => ({\n\t\t\t\t\tkey: d.browser,\n\t\t\t\t\tcolor: d.color,\n\t\t\t\t\tdata: [d],\n\t\t\t\t}))}\n\t\t\t\tprops={{\n\t\t\t\t\tarc: { track: { fill: \"var(--muted)\" }, motion: \"tween\" },\n\t\t\t\t\ttooltip: { context: { hideDelay: 350 } },\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{#snippet tooltip()}\n\t\t\t\t\t<Chart.Tooltip hideLabel nameKey=\"browser\" />\n\t\t\t\t{/snippet}\n\t\t\t</ArcChart>\n\t\t</Chart.Container>\n\t</Card.Content>\n\t<Card.Footer class=\"flex-col gap-2 text-sm\">\n\t\t<div class=\"flex items-center gap-2 leading-none font-medium\">\n\t\t\tTrending up by 5.2% this month <TrendingUpIcon class=\"size-4\" />\n\t\t</div>\n\t\t<div class=\"text-muted-foreground flex items-center gap-2 leading-none\">\n\t\t\tJanuary - June 2024\n\t\t</div>\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/chart-radial-label.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport { Arc, ArcChart, Text } from \"layerchart\";\n\timport TrendingUpIcon from \"@lucide/svelte/icons/trending-up\";\n\n\tconst chartData = [\n\t\t{ browser: \"other\", visitors: 90, color: \"var(--color-other)\" },\n\t\t{ browser: \"edge\", visitors: 173, color: \"var(--color-edge)\" },\n\t\t{ browser: \"firefox\", visitors: 187, color: \"var(--color-firefox)\" },\n\t\t{ browser: \"safari\", visitors: 200, color: \"var(--color-safari)\" },\n\t\t{ browser: \"chrome\", visitors: 275, color: \"var(--color-chrome)\" },\n\t];\n\n\tconst chartConfig = {\n\t\tvisitors: { label: \"Visitors\" },\n\t\tchrome: { label: \"Chrome\", color: \"var(--chart-1)\" },\n\t\tsafari: { label: \"Safari\", color: \"var(--chart-2)\" },\n\t\tfirefox: { label: \"Firefox\", color: \"var(--chart-3)\" },\n\t\tedge: { label: \"Edge\", color: \"var(--chart-4)\" },\n\t\tother: { label: \"Other\", color: \"var(--chart-5)\" },\n\t} satisfies Chart.ChartConfig;\n</script>\n\n<Card.Root>\n\t<Card.Header class=\"items-center\">\n\t\t<Card.Title>Radial Chart - Label</Card.Title>\n\t\t<Card.Description>Showing total visitors for the last 6 months</Card.Description>\n\t</Card.Header>\n\t<Card.Content class=\"flex-1\">\n\t\t<Chart.Container config={chartConfig} class=\"mx-auto aspect-square max-h-[250px]\">\n\t\t\t<ArcChart\n\t\t\t\tlabel=\"browser\"\n\t\t\t\tvalue=\"visitors\"\n\t\t\t\touterRadius={-17}\n\t\t\t\tinnerRadius={-12.5}\n\t\t\t\tpadding={20}\n\t\t\t\trange={[180, -180]}\n\t\t\t\tmaxValue={Math.max(...chartData.map((d) => d.visitors)) + 0}\n\t\t\t\tseries={chartData.map((d) => ({\n\t\t\t\t\tkey: d.browser,\n\t\t\t\t\tcolor: d.color,\n\t\t\t\t\tdata: [d],\n\t\t\t\t\tlabel: d.browser,\n\t\t\t\t}))}\n\t\t\t\tprops={{\n\t\t\t\t\tarc: { track: { fill: \"var(--muted)\" }, motion: \"tween\" },\n\t\t\t\t\ttooltip: { context: { hideDelay: 350 } },\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{#snippet tooltip()}\n\t\t\t\t\t<Chart.Tooltip hideLabel nameKey=\"browser\" />\n\t\t\t\t{/snippet}\n\t\t\t\t{#snippet arc({ props, seriesIndex, visibleSeries })}\n\t\t\t\t\t<Arc {...props}>\n\t\t\t\t\t\t{#snippet children({ getTrackTextProps })}\n\t\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\t\t{...getTrackTextProps(\"middle\", { startOffset: \"1%\" })}\n\t\t\t\t\t\t\t\tclass=\"pointer-events-none capitalize select-none\"\n\t\t\t\t\t\t\t\tvalue={visibleSeries[seriesIndex].label}\n\t\t\t\t\t\t\t\tfill=\"white\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t</Arc>\n\t\t\t\t{/snippet}\n\t\t\t</ArcChart>\n\t\t</Chart.Container>\n\t</Card.Content>\n\t<Card.Footer class=\"flex-col gap-2 text-sm\">\n\t\t<div class=\"flex items-center gap-2 leading-none font-medium\">\n\t\t\tTrending up by 5.2% this month <TrendingUpIcon class=\"size-4\" />\n\t\t</div>\n\t\t<div class=\"text-muted-foreground flex items-center gap-2 leading-none\">\n\t\t\tJanuary - June 2024\n\t\t</div>\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/chart-radial-shape.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport { ArcChart, Text } from \"layerchart\";\n\timport TrendingUpIcon from \"@lucide/svelte/icons/trending-up\";\n\n\tconst chartData = [{ browser: \"safari\", visitors: 1260, color: \"var(--color-safari)\" }];\n\n\tconst chartConfig = {\n\t\tvisitors: { label: \"Visitors\" },\n\t\tsafari: { label: \"Safari\", color: \"var(--chart-2)\" },\n\t} satisfies Chart.ChartConfig;\n</script>\n\n<Card.Root>\n\t<Card.Header class=\"items-center\">\n\t\t<Card.Title>Radial Chart - Shape</Card.Title>\n\t\t<Card.Description>Showing total visitors for the last 6 months</Card.Description>\n\t</Card.Header>\n\t<Card.Content class=\"flex-1\">\n\t\t<Chart.Container config={chartConfig} class=\"mx-auto aspect-square max-h-[250px]\">\n\t\t\t<ArcChart\n\t\t\t\tlabel=\"browser\"\n\t\t\t\tvalue=\"visitors\"\n\t\t\t\touterRadius={88}\n\t\t\t\tinnerRadius={66}\n\t\t\t\ttrackOuterRadius={83}\n\t\t\t\ttrackInnerRadius={72}\n\t\t\t\tpadding={40}\n\t\t\t\trange={[90, -270]}\n\t\t\t\tmaxValue={chartData[0].visitors * 4}\n\t\t\t\tseries={chartData.map((d) => ({\n\t\t\t\t\tkey: d.browser,\n\t\t\t\t\tcolor: d.color,\n\t\t\t\t\tdata: [d],\n\t\t\t\t}))}\n\t\t\t\tprops={{\n\t\t\t\t\tarc: { track: { fill: \"var(--muted)\" }, motion: \"tween\" },\n\t\t\t\t\ttooltip: { context: { hideDelay: 350 } },\n\t\t\t\t}}\n\t\t\t\ttooltip={false}\n\t\t\t>\n\t\t\t\t{#snippet belowMarks()}\n\t\t\t\t\t<circle cx=\"0\" cy=\"0\" r=\"80\" class=\"fill-background\" />\n\t\t\t\t{/snippet}\n\t\t\t\t{#snippet aboveMarks()}\n\t\t\t\t\t<Text\n\t\t\t\t\t\tvalue={String(chartData[0].visitors)}\n\t\t\t\t\t\ttextAnchor=\"middle\"\n\t\t\t\t\t\tverticalAnchor=\"middle\"\n\t\t\t\t\t\tclass=\"fill-foreground text-4xl! font-bold\"\n\t\t\t\t\t\tdy={3}\n\t\t\t\t\t/>\n\t\t\t\t\t<Text\n\t\t\t\t\t\tvalue=\"Visitors\"\n\t\t\t\t\t\ttextAnchor=\"middle\"\n\t\t\t\t\t\tverticalAnchor=\"middle\"\n\t\t\t\t\t\tclass=\"fill-muted-foreground!\"\n\t\t\t\t\t\tdy={22}\n\t\t\t\t\t/>\n\t\t\t\t{/snippet}\n\t\t\t</ArcChart>\n\t\t</Chart.Container>\n\t</Card.Content>\n\t<Card.Footer class=\"flex-col gap-2 text-sm\">\n\t\t<div class=\"flex items-center gap-2 leading-none font-medium\">\n\t\t\tTrending up by 5.2% this month <TrendingUpIcon class=\"size-4\" />\n\t\t</div>\n\t\t<div class=\"text-muted-foreground flex items-center gap-2 leading-none\">\n\t\t\tJanuary - June 2024\n\t\t</div>\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/chart-radial-simple.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport { ArcChart } from \"layerchart\";\n\timport TrendingUpIcon from \"@lucide/svelte/icons/trending-up\";\n\n\tconst chartData = [\n\t\t{ browser: \"other\", visitors: 90, color: \"var(--color-other)\" },\n\t\t{ browser: \"edge\", visitors: 173, color: \"var(--color-edge)\" },\n\t\t{ browser: \"firefox\", visitors: 187, color: \"var(--color-firefox)\" },\n\t\t{ browser: \"safari\", visitors: 200, color: \"var(--color-safari)\" },\n\t\t{ browser: \"chrome\", visitors: 275, color: \"var(--color-chrome)\" },\n\t];\n\n\tconst chartConfig = {\n\t\tvisitors: { label: \"Visitors\" },\n\t\tchrome: { label: \"Chrome\", color: \"var(--chart-1)\" },\n\t\tsafari: { label: \"Safari\", color: \"var(--chart-2)\" },\n\t\tfirefox: { label: \"Firefox\", color: \"var(--chart-3)\" },\n\t\tedge: { label: \"Edge\", color: \"var(--chart-4)\" },\n\t\tother: { label: \"Other\", color: \"var(--chart-5)\" },\n\t} satisfies Chart.ChartConfig;\n</script>\n\n<Card.Root>\n\t<Card.Header class=\"items-center\">\n\t\t<Card.Title>Radial Chart</Card.Title>\n\t\t<Card.Description>Showing total visitors for the last 6 months</Card.Description>\n\t</Card.Header>\n\t<Card.Content class=\"flex-1\">\n\t\t<Chart.Container config={chartConfig} class=\"mx-auto aspect-square max-h-[250px]\">\n\t\t\t<ArcChart\n\t\t\t\tlabel=\"browser\"\n\t\t\t\tvalue=\"visitors\"\n\t\t\t\touterRadius={-17}\n\t\t\t\tinnerRadius={-12.5}\n\t\t\t\tpadding={20}\n\t\t\t\trange={[90, -270]}\n\t\t\t\tmaxValue={Math.max(...chartData.map((d) => d.visitors))}\n\t\t\t\tseries={chartData.map((d) => ({\n\t\t\t\t\tkey: d.browser,\n\t\t\t\t\tcolor: d.color,\n\t\t\t\t\tdata: [d],\n\t\t\t\t}))}\n\t\t\t\tprops={{\n\t\t\t\t\tarc: { track: { fill: \"var(--muted)\" }, motion: \"tween\" },\n\t\t\t\t\ttooltip: { context: { hideDelay: 350 } },\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{#snippet tooltip()}\n\t\t\t\t\t<Chart.Tooltip hideLabel nameKey=\"browser\" />\n\t\t\t\t{/snippet}\n\t\t\t</ArcChart>\n\t\t</Chart.Container>\n\t</Card.Content>\n\t<Card.Footer class=\"flex-col gap-2 text-sm\">\n\t\t<div class=\"flex items-center gap-2 leading-none font-medium\">\n\t\t\tTrending up by 5.2% this month <TrendingUpIcon class=\"size-4\" />\n\t\t</div>\n\t\t<div class=\"text-muted-foreground flex items-center gap-2 leading-none\">\n\t\t\tJanuary - June 2024\n\t\t</div>\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/chart-radial-stacked.svelte",
    "content": "<script lang=\"ts\">\n\timport TrendingUpIcon from \"@lucide/svelte/icons/trending-up\";\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport { PieChart, Text } from \"layerchart\";\n\n\tconst chartData = [{ month: \"january\", desktop: 1260, mobile: 570 }];\n\n\tconst chartConfig = {\n\t\tdesktop: { label: \"Desktop\", color: \"var(--chart-1)\" },\n\t\tmobile: { label: \"Mobile\", color: \"var(--chart-2)\" },\n\t} satisfies Chart.ChartConfig;\n</script>\n\n<Card.Root class=\"flex flex-col\">\n\t<Card.Header class=\"items-center\">\n\t\t<Card.Title>Radial Chart - Stacked</Card.Title>\n\t\t<Card.Description>January - June 2024</Card.Description>\n\t</Card.Header>\n\t<Card.Content class=\"flex-1\">\n\t\t<Chart.Container config={chartConfig} class=\"mx-auto aspect-square max-h-[250px]\">\n\t\t\t<PieChart\n\t\t\t\tdata={[\n\t\t\t\t\t{ platform: \"mobile\", visitors: 570, color: chartConfig.mobile.color },\n\t\t\t\t\t{ platform: \"desktop\", visitors: 1260, color: chartConfig.desktop.color },\n\t\t\t\t]}\n\t\t\t\tkey=\"platform\"\n\t\t\t\tvalue=\"visitors\"\n\t\t\t\tc=\"color\"\n\t\t\t\tinnerRadius={76}\n\t\t\t\tpadding={29}\n\t\t\t\trange={[-90, 90]}\n\t\t\t\tprops={{ pie: { sort: null } }}\n\t\t\t\tcornerRadius={4}\n\t\t\t>\n\t\t\t\t{#snippet aboveMarks()}\n\t\t\t\t\t<Text\n\t\t\t\t\t\tvalue={String(chartData[0].desktop + chartData[0].mobile)}\n\t\t\t\t\t\ttextAnchor=\"middle\"\n\t\t\t\t\t\tverticalAnchor=\"middle\"\n\t\t\t\t\t\tclass=\"fill-foreground text-2xl! font-bold\"\n\t\t\t\t\t\tdy={-24}\n\t\t\t\t\t/>\n\t\t\t\t\t<Text\n\t\t\t\t\t\tvalue=\"Visitors\"\n\t\t\t\t\t\ttextAnchor=\"middle\"\n\t\t\t\t\t\tverticalAnchor=\"middle\"\n\t\t\t\t\t\tclass=\"fill-muted-foreground! text-muted-foreground\"\n\t\t\t\t\t\tdy={-4}\n\t\t\t\t\t/>\n\t\t\t\t{/snippet}\n\t\t\t\t{#snippet tooltip()}\n\t\t\t\t\t<Chart.Tooltip hideLabel />\n\t\t\t\t{/snippet}\n\t\t\t</PieChart>\n\t\t</Chart.Container>\n\t</Card.Content>\n\t<Card.Footer class=\"flex-col gap-2 text-sm\">\n\t\t<div class=\"flex items-center gap-2 leading-none font-medium\">\n\t\t\tTrending up by 5.2% this month <TrendingUpIcon class=\"size-4\" />\n\t\t</div>\n\t\t<div class=\"text-muted-foreground leading-none\">\n\t\t\tShowing total visitors for the last 6 months\n\t\t</div>\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/chart-radial-text.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport { ArcChart, Text } from \"layerchart\";\n\timport TrendingUpIcon from \"@lucide/svelte/icons/trending-up\";\n\n\tconst chartData = [{ browser: \"safari\", visitors: 200, color: \"var(--color-safari)\" }];\n\n\tconst chartConfig = {\n\t\tvisitors: { label: \"Visitors\" },\n\t\tsafari: { label: \"Safari\", color: \"var(--chart-2)\" },\n\t} satisfies Chart.ChartConfig;\n</script>\n\n<Card.Root>\n\t<Card.Header class=\"items-center\">\n\t\t<Card.Title>Radial Chart - Text</Card.Title>\n\t\t<Card.Description>Showing total visitors for the last 6 months</Card.Description>\n\t</Card.Header>\n\t<Card.Content class=\"flex-1\">\n\t\t<Chart.Container config={chartConfig} class=\"mx-auto aspect-square max-h-[250px]\">\n\t\t\t<ArcChart\n\t\t\t\tlabel=\"browser\"\n\t\t\t\tvalue=\"visitors\"\n\t\t\t\touterRadius={-20}\n\t\t\t\tinnerRadius={-12}\n\t\t\t\tpadding={40}\n\t\t\t\trange={[90, -270]}\n\t\t\t\tmaxValue={300}\n\t\t\t\tcornerRadius={20}\n\t\t\t\tseries={chartData.map((d) => ({\n\t\t\t\t\tkey: d.browser,\n\t\t\t\t\tcolor: d.color,\n\t\t\t\t\tdata: [d],\n\t\t\t\t}))}\n\t\t\t\tprops={{\n\t\t\t\t\tarc: { track: { fill: \"var(--muted)\" }, motion: \"tween\" },\n\t\t\t\t\ttooltip: { context: { hideDelay: 350 } },\n\t\t\t\t}}\n\t\t\t\ttooltip={false}\n\t\t\t>\n\t\t\t\t{#snippet belowMarks()}\n\t\t\t\t\t<circle cx=\"0\" cy=\"0\" r=\"60\" class=\"fill-background\" />\n\t\t\t\t{/snippet}\n\n\t\t\t\t{#snippet aboveMarks()}\n\t\t\t\t\t<Text\n\t\t\t\t\t\tvalue={String(chartData[0].visitors)}\n\t\t\t\t\t\ttextAnchor=\"middle\"\n\t\t\t\t\t\tverticalAnchor=\"middle\"\n\t\t\t\t\t\tclass=\"fill-foreground text-4xl! font-bold\"\n\t\t\t\t\t\tdy={3}\n\t\t\t\t\t/>\n\t\t\t\t\t<Text\n\t\t\t\t\t\tvalue=\"Visitors\"\n\t\t\t\t\t\ttextAnchor=\"middle\"\n\t\t\t\t\t\tverticalAnchor=\"middle\"\n\t\t\t\t\t\tclass=\"fill-muted-foreground!\"\n\t\t\t\t\t\tdy={22}\n\t\t\t\t\t/>\n\t\t\t\t{/snippet}\n\t\t\t</ArcChart>\n\t\t</Chart.Container>\n\t</Card.Content>\n\t<Card.Footer class=\"flex-col gap-2 text-sm\">\n\t\t<div class=\"flex items-center gap-2 leading-none font-medium\">\n\t\t\tTrending up by 5.2% this month <TrendingUpIcon class=\"size-4\" />\n\t\t</div>\n\t\t<div class=\"text-muted-foreground flex items-center gap-2 leading-none\">\n\t\t\tJanuary - June 2024\n\t\t</div>\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/chart-tooltip-advanced.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport { scaleBand } from \"d3-scale\";\n\timport { BarChart, type ChartContextValue } from \"layerchart\";\n\timport { cubicInOut } from \"svelte/easing\";\n\n\tconst chartData = [\n\t\t{ date: \"2024-07-15\", running: 450, swimming: 300 },\n\t\t{ date: \"2024-07-16\", running: 380, swimming: 420 },\n\t\t{ date: \"2024-07-17\", running: 520, swimming: 120 },\n\t\t{ date: \"2024-07-18\", running: 140, swimming: 550 },\n\t\t{ date: \"2024-07-19\", running: 600, swimming: 350 },\n\t\t{ date: \"2024-07-20\", running: 480, swimming: 400 },\n\t];\n\n\tconst chartConfig = {\n\t\trunning: { label: \"Running\", color: \"var(--chart-1)\" },\n\t\tswimming: { label: \"Swimming\", color: \"var(--chart-2)\" },\n\t} satisfies Chart.ChartConfig;\n\n\tlet context = $state<ChartContextValue>();\n</script>\n\n<Card.Root>\n\t<Card.Header>\n\t\t<Card.Title>Tooltip - Advanced</Card.Title>\n\t\t<Card.Description>Tooltip with custom formatter and total.</Card.Description>\n\t</Card.Header>\n\t<Card.Content>\n\t\t<Chart.Container config={chartConfig}>\n\t\t\t<BarChart\n\t\t\t\tbind:context\n\t\t\t\tdata={chartData}\n\t\t\t\txScale={scaleBand().padding(0.25)}\n\t\t\t\tx=\"date\"\n\t\t\t\taxis=\"x\"\n\t\t\t\trule={false}\n\t\t\t\tseries={[\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"running\",\n\t\t\t\t\t\tlabel: \"Running\",\n\t\t\t\t\t\tcolor: chartConfig.running.color,\n\t\t\t\t\t\tprops: { rounded: \"bottom\" },\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"swimming\",\n\t\t\t\t\t\tlabel: \"Swimming\",\n\t\t\t\t\t\tcolor: chartConfig.swimming.color,\n\t\t\t\t\t},\n\t\t\t\t]}\n\t\t\t\tseriesLayout=\"stack\"\n\t\t\t\tgrid={false}\n\t\t\t\thighlight={false}\n\t\t\t\tprops={{\n\t\t\t\t\tbars: {\n\t\t\t\t\t\tstroke: \"none\",\n\t\t\t\t\t\tinitialY: context?.height,\n\t\t\t\t\t\tinitialHeight: 0,\n\t\t\t\t\t\tmotion: {\n\t\t\t\t\t\t\ty: { type: \"tween\", duration: 500, easing: cubicInOut },\n\t\t\t\t\t\t\theight: { type: \"tween\", duration: 500, easing: cubicInOut },\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\txAxis: {\n\t\t\t\t\t\tformat: (d) =>\n\t\t\t\t\t\t\tnew Date(d).toLocaleDateString(\"en-US\", {\n\t\t\t\t\t\t\t\tweekday: \"short\",\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\ttickLabelProps: {\n\t\t\t\t\t\t\tsvgProps: {\n\t\t\t\t\t\t\t\ty: 13,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{#snippet tooltip()}\n\t\t\t\t\t<Chart.Tooltip hideLabel class=\"w-[180px]\">\n\t\t\t\t\t\t{#snippet formatter({ name, index, value, item })}\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tstyle=\"--color-bg: var(--color-{name.toLowerCase()})\"\n\t\t\t\t\t\t\t\tclass=\"size-2.5 shrink-0 rounded-[2px] bg-(--color-bg)\"\n\t\t\t\t\t\t\t></div>\n\t\t\t\t\t\t\t{chartConfig[name as keyof typeof chartConfig]?.label || name}\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclass=\"text-foreground ms-auto flex items-baseline gap-0.5 font-mono font-medium tabular-nums\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{value}\n\t\t\t\t\t\t\t\t<span class=\"text-muted-foreground font-normal\"> kcal </span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<!-- Add this after the last item-->\n\t\t\t\t\t\t\t{#if index === 1}\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclass=\"text-foreground mt-1.5 flex basis-full items-center border-t pt-1.5 text-xs font-medium\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\tTotal\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tclass=\"text-foreground ms-auto flex items-baseline gap-0.5 font-mono font-medium tabular-nums\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{item.payload.running + item.payload.swimming}\n\t\t\t\t\t\t\t\t\t\t<span class=\"text-muted-foreground font-normal\">\n\t\t\t\t\t\t\t\t\t\t\tkcal\n\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t</Chart.Tooltip>\n\t\t\t\t{/snippet}\n\t\t\t</BarChart>\n\t\t</Chart.Container>\n\t</Card.Content>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/chart-tooltip-default.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport { scaleBand } from \"d3-scale\";\n\timport { BarChart, type ChartContextValue } from \"layerchart\";\n\timport { cubicInOut } from \"svelte/easing\";\n\n\tconst chartData = [\n\t\t{ date: \"2024-07-15\", running: 450, swimming: 300 },\n\t\t{ date: \"2024-07-16\", running: 380, swimming: 420 },\n\t\t{ date: \"2024-07-17\", running: 520, swimming: 120 },\n\t\t{ date: \"2024-07-18\", running: 140, swimming: 550 },\n\t\t{ date: \"2024-07-19\", running: 600, swimming: 350 },\n\t\t{ date: \"2024-07-20\", running: 480, swimming: 400 },\n\t];\n\n\tconst chartConfig = {\n\t\trunning: { label: \"Running\", color: \"var(--chart-1)\" },\n\t\tswimming: { label: \"Swimming\", color: \"var(--chart-2)\" },\n\t} satisfies Chart.ChartConfig;\n\n\tlet context = $state<ChartContextValue>();\n</script>\n\n<Card.Root>\n\t<Card.Header>\n\t\t<Card.Title>Tooltip - Default</Card.Title>\n\t\t<Card.Description>Default tooltip with ChartTooltip.</Card.Description>\n\t</Card.Header>\n\t<Card.Content>\n\t\t<Chart.Container config={chartConfig}>\n\t\t\t<BarChart\n\t\t\t\tbind:context\n\t\t\t\tdata={chartData}\n\t\t\t\txScale={scaleBand().padding(0.25)}\n\t\t\t\tx=\"date\"\n\t\t\t\taxis=\"x\"\n\t\t\t\trule={false}\n\t\t\t\tseries={[\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"running\",\n\t\t\t\t\t\tlabel: \"Running\",\n\t\t\t\t\t\tcolor: chartConfig.running.color,\n\t\t\t\t\t\tprops: { rounded: \"bottom\" },\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"swimming\",\n\t\t\t\t\t\tlabel: \"Swimming\",\n\t\t\t\t\t\tcolor: chartConfig.swimming.color,\n\t\t\t\t\t},\n\t\t\t\t]}\n\t\t\t\tseriesLayout=\"stack\"\n\t\t\t\tgrid={false}\n\t\t\t\thighlight={false}\n\t\t\t\tprops={{\n\t\t\t\t\tbars: {\n\t\t\t\t\t\tstroke: \"none\",\n\t\t\t\t\t\tinitialY: context?.height,\n\t\t\t\t\t\tinitialHeight: 0,\n\t\t\t\t\t\tmotion: {\n\t\t\t\t\t\t\ty: { type: \"tween\", duration: 500, easing: cubicInOut },\n\t\t\t\t\t\t\theight: { type: \"tween\", duration: 500, easing: cubicInOut },\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\txAxis: {\n\t\t\t\t\t\tformat: (d) =>\n\t\t\t\t\t\t\tnew Date(d).toLocaleDateString(\"en-US\", {\n\t\t\t\t\t\t\t\tweekday: \"short\",\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\ttickLabelProps: {\n\t\t\t\t\t\t\tsvgProps: {\n\t\t\t\t\t\t\t\ty: 13,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{#snippet tooltip()}\n\t\t\t\t\t<Chart.Tooltip />\n\t\t\t\t{/snippet}\n\t\t\t</BarChart>\n\t\t</Chart.Container>\n\t</Card.Content>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/chart-tooltip-formatter.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport { scaleBand } from \"d3-scale\";\n\timport { BarChart, type ChartContextValue } from \"layerchart\";\n\timport { cubicInOut } from \"svelte/easing\";\n\n\tconst chartData = [\n\t\t{ date: \"2024-07-15\", running: 450, swimming: 300 },\n\t\t{ date: \"2024-07-16\", running: 380, swimming: 420 },\n\t\t{ date: \"2024-07-17\", running: 520, swimming: 120 },\n\t\t{ date: \"2024-07-18\", running: 140, swimming: 550 },\n\t\t{ date: \"2024-07-19\", running: 600, swimming: 350 },\n\t\t{ date: \"2024-07-20\", running: 480, swimming: 400 },\n\t];\n\n\tconst chartConfig = {\n\t\trunning: { label: \"Running\", color: \"var(--chart-1)\" },\n\t\tswimming: { label: \"Swimming\", color: \"var(--chart-2)\" },\n\t} satisfies Chart.ChartConfig;\n\n\tlet context = $state<ChartContextValue>();\n</script>\n\n<Card.Root>\n\t<Card.Header>\n\t\t<Card.Title>Tooltip - Formatter</Card.Title>\n\t\t<Card.Description>Tooltip with custom formatter.</Card.Description>\n\t</Card.Header>\n\t<Card.Content>\n\t\t<Chart.Container config={chartConfig}>\n\t\t\t<BarChart\n\t\t\t\tbind:context\n\t\t\t\tdata={chartData}\n\t\t\t\txScale={scaleBand().padding(0.25)}\n\t\t\t\tx=\"date\"\n\t\t\t\taxis=\"x\"\n\t\t\t\trule={false}\n\t\t\t\tseries={[\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"running\",\n\t\t\t\t\t\tlabel: \"Running\",\n\t\t\t\t\t\tcolor: chartConfig.running.color,\n\t\t\t\t\t\tprops: { rounded: \"bottom\" },\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"swimming\",\n\t\t\t\t\t\tlabel: \"Swimming\",\n\t\t\t\t\t\tcolor: chartConfig.swimming.color,\n\t\t\t\t\t},\n\t\t\t\t]}\n\t\t\t\tseriesLayout=\"stack\"\n\t\t\t\tgrid={false}\n\t\t\t\thighlight={false}\n\t\t\t\tprops={{\n\t\t\t\t\tbars: {\n\t\t\t\t\t\tstroke: \"none\",\n\t\t\t\t\t\tinitialY: context?.height,\n\t\t\t\t\t\tinitialHeight: 0,\n\t\t\t\t\t\tmotion: {\n\t\t\t\t\t\t\ty: { type: \"tween\", duration: 500, easing: cubicInOut },\n\t\t\t\t\t\t\theight: { type: \"tween\", duration: 500, easing: cubicInOut },\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\txAxis: {\n\t\t\t\t\t\tformat: (d) =>\n\t\t\t\t\t\t\tnew Date(d).toLocaleDateString(\"en-US\", {\n\t\t\t\t\t\t\t\tweekday: \"short\",\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\ttickLabelProps: {\n\t\t\t\t\t\t\tsvgProps: {\n\t\t\t\t\t\t\t\ty: 13,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{#snippet tooltip()}\n\t\t\t\t\t<Chart.Tooltip hideLabel>\n\t\t\t\t\t\t{#snippet formatter({ name, value })}\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclass=\"text-muted-foreground flex min-w-[130px] items-center text-xs\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{chartConfig[name as keyof typeof chartConfig]?.label || name}\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclass=\"text-foreground ms-auto flex items-baseline gap-0.5 font-mono font-medium tabular-nums\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{value}\n\t\t\t\t\t\t\t\t\t<span class=\"text-muted-foreground font-normal\"> kcal </span>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t</Chart.Tooltip>\n\t\t\t\t{/snippet}\n\t\t\t</BarChart>\n\t\t</Chart.Container>\n\t</Card.Content>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/chart-tooltip-icons.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport { scaleBand } from \"d3-scale\";\n\timport { BarChart, type ChartContextValue } from \"layerchart\";\n\timport { cubicInOut } from \"svelte/easing\";\n\timport FootprintsIcon from \"@lucide/svelte/icons/footprints\";\n\timport WavesIcon from \"@lucide/svelte/icons/waves\";\n\n\tconst chartData = [\n\t\t{ date: \"2024-07-15\", running: 450, swimming: 300 },\n\t\t{ date: \"2024-07-16\", running: 380, swimming: 420 },\n\t\t{ date: \"2024-07-17\", running: 520, swimming: 120 },\n\t\t{ date: \"2024-07-18\", running: 140, swimming: 550 },\n\t\t{ date: \"2024-07-19\", running: 600, swimming: 350 },\n\t\t{ date: \"2024-07-20\", running: 480, swimming: 400 },\n\t];\n\n\tconst chartConfig = {\n\t\trunning: { label: \"Running\", color: \"var(--chart-1)\", icon: FootprintsIcon },\n\t\tswimming: { label: \"Swimming\", color: \"var(--chart-2)\", icon: WavesIcon },\n\t} satisfies Chart.ChartConfig;\n\n\tlet context = $state<ChartContextValue>();\n</script>\n\n<Card.Root>\n\t<Card.Header>\n\t\t<Card.Title>Tooltip - Icons</Card.Title>\n\t\t<Card.Description>Tooltip with icons.</Card.Description>\n\t</Card.Header>\n\t<Card.Content>\n\t\t<Chart.Container config={chartConfig}>\n\t\t\t<BarChart\n\t\t\t\tbind:context\n\t\t\t\tdata={chartData}\n\t\t\t\txScale={scaleBand().padding(0.25)}\n\t\t\t\tx=\"date\"\n\t\t\t\taxis=\"x\"\n\t\t\t\trule={false}\n\t\t\t\tseries={[\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"running\",\n\t\t\t\t\t\tlabel: \"Running\",\n\t\t\t\t\t\tcolor: chartConfig.running.color,\n\t\t\t\t\t\tprops: { rounded: \"bottom\" },\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"swimming\",\n\t\t\t\t\t\tlabel: \"Swimming\",\n\t\t\t\t\t\tcolor: chartConfig.swimming.color,\n\t\t\t\t\t},\n\t\t\t\t]}\n\t\t\t\tseriesLayout=\"stack\"\n\t\t\t\tgrid={false}\n\t\t\t\thighlight={false}\n\t\t\t\tprops={{\n\t\t\t\t\tbars: {\n\t\t\t\t\t\tstroke: \"none\",\n\t\t\t\t\t\tinitialY: context?.height,\n\t\t\t\t\t\tinitialHeight: 0,\n\t\t\t\t\t\tmotion: {\n\t\t\t\t\t\t\ty: { type: \"tween\", duration: 500, easing: cubicInOut },\n\t\t\t\t\t\t\theight: { type: \"tween\", duration: 500, easing: cubicInOut },\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\txAxis: {\n\t\t\t\t\t\tformat: (d) =>\n\t\t\t\t\t\t\tnew Date(d).toLocaleDateString(\"en-US\", {\n\t\t\t\t\t\t\t\tweekday: \"short\",\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\ttickLabelProps: {\n\t\t\t\t\t\t\tsvgProps: {\n\t\t\t\t\t\t\t\ty: 13,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{#snippet tooltip()}\n\t\t\t\t\t<Chart.Tooltip hideLabel />\n\t\t\t\t{/snippet}\n\t\t\t</BarChart>\n\t\t</Chart.Container>\n\t</Card.Content>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/chart-tooltip-indicator-line.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport { scaleBand } from \"d3-scale\";\n\timport { BarChart, type ChartContextValue } from \"layerchart\";\n\timport { cubicInOut } from \"svelte/easing\";\n\n\tconst chartData = [\n\t\t{ date: \"2024-07-15\", running: 450, swimming: 300 },\n\t\t{ date: \"2024-07-16\", running: 380, swimming: 420 },\n\t\t{ date: \"2024-07-17\", running: 520, swimming: 120 },\n\t\t{ date: \"2024-07-18\", running: 140, swimming: 550 },\n\t\t{ date: \"2024-07-19\", running: 600, swimming: 350 },\n\t\t{ date: \"2024-07-20\", running: 480, swimming: 400 },\n\t];\n\n\tconst chartConfig = {\n\t\trunning: { label: \"Running\", color: \"var(--chart-1)\" },\n\t\tswimming: { label: \"Swimming\", color: \"var(--chart-2)\" },\n\t} satisfies Chart.ChartConfig;\n\n\tlet context = $state<ChartContextValue>();\n</script>\n\n<Card.Root>\n\t<Card.Header>\n\t\t<Card.Title>Tooltip - Line Indicator</Card.Title>\n\t\t<Card.Description>Tooltip with line indicator.</Card.Description>\n\t</Card.Header>\n\t<Card.Content>\n\t\t<Chart.Container config={chartConfig}>\n\t\t\t<BarChart\n\t\t\t\tbind:context\n\t\t\t\tdata={chartData}\n\t\t\t\txScale={scaleBand().padding(0.25)}\n\t\t\t\tx=\"date\"\n\t\t\t\taxis=\"x\"\n\t\t\t\trule={false}\n\t\t\t\tseries={[\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"running\",\n\t\t\t\t\t\tlabel: \"Running\",\n\t\t\t\t\t\tcolor: chartConfig.running.color,\n\t\t\t\t\t\tprops: { rounded: \"bottom\" },\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"swimming\",\n\t\t\t\t\t\tlabel: \"Swimming\",\n\t\t\t\t\t\tcolor: chartConfig.swimming.color,\n\t\t\t\t\t},\n\t\t\t\t]}\n\t\t\t\tseriesLayout=\"stack\"\n\t\t\t\tgrid={false}\n\t\t\t\thighlight={false}\n\t\t\t\tprops={{\n\t\t\t\t\tbars: {\n\t\t\t\t\t\tstroke: \"none\",\n\t\t\t\t\t\tinitialY: context?.height,\n\t\t\t\t\t\tinitialHeight: 0,\n\t\t\t\t\t\tmotion: {\n\t\t\t\t\t\t\ty: { type: \"tween\", duration: 500, easing: cubicInOut },\n\t\t\t\t\t\t\theight: { type: \"tween\", duration: 500, easing: cubicInOut },\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\txAxis: {\n\t\t\t\t\t\tformat: (d) =>\n\t\t\t\t\t\t\tnew Date(d).toLocaleDateString(\"en-US\", {\n\t\t\t\t\t\t\t\tweekday: \"short\",\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\ttickLabelProps: {\n\t\t\t\t\t\t\tsvgProps: {\n\t\t\t\t\t\t\t\ty: 13,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{#snippet tooltip()}\n\t\t\t\t\t<Chart.Tooltip indicator=\"line\" />\n\t\t\t\t{/snippet}\n\t\t\t</BarChart>\n\t\t</Chart.Container>\n\t</Card.Content>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/chart-tooltip-indicator-none.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport { scaleBand } from \"d3-scale\";\n\timport { BarChart, type ChartContextValue } from \"layerchart\";\n\timport { cubicInOut } from \"svelte/easing\";\n\n\tconst chartData = [\n\t\t{ date: \"2024-07-15\", running: 450, swimming: 300 },\n\t\t{ date: \"2024-07-16\", running: 380, swimming: 420 },\n\t\t{ date: \"2024-07-17\", running: 520, swimming: 120 },\n\t\t{ date: \"2024-07-18\", running: 140, swimming: 550 },\n\t\t{ date: \"2024-07-19\", running: 600, swimming: 350 },\n\t\t{ date: \"2024-07-20\", running: 480, swimming: 400 },\n\t];\n\n\tconst chartConfig = {\n\t\trunning: { label: \"Running\", color: \"var(--chart-1)\" },\n\t\tswimming: { label: \"Swimming\", color: \"var(--chart-2)\" },\n\t} satisfies Chart.ChartConfig;\n\n\tlet context = $state<ChartContextValue>();\n</script>\n\n<Card.Root>\n\t<Card.Header>\n\t\t<Card.Title>Tooltip - No Indicator</Card.Title>\n\t\t<Card.Description>Tooltip with no indicator.</Card.Description>\n\t</Card.Header>\n\t<Card.Content>\n\t\t<Chart.Container config={chartConfig}>\n\t\t\t<BarChart\n\t\t\t\tbind:context\n\t\t\t\tdata={chartData}\n\t\t\t\txScale={scaleBand().padding(0.25)}\n\t\t\t\tx=\"date\"\n\t\t\t\taxis=\"x\"\n\t\t\t\trule={false}\n\t\t\t\tseries={[\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"running\",\n\t\t\t\t\t\tlabel: \"Running\",\n\t\t\t\t\t\tcolor: chartConfig.running.color,\n\t\t\t\t\t\tprops: { rounded: \"bottom\" },\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"swimming\",\n\t\t\t\t\t\tlabel: \"Swimming\",\n\t\t\t\t\t\tcolor: chartConfig.swimming.color,\n\t\t\t\t\t},\n\t\t\t\t]}\n\t\t\t\tseriesLayout=\"stack\"\n\t\t\t\tgrid={false}\n\t\t\t\thighlight={false}\n\t\t\t\tprops={{\n\t\t\t\t\tbars: {\n\t\t\t\t\t\tstroke: \"none\",\n\t\t\t\t\t\tinitialY: context?.height,\n\t\t\t\t\t\tinitialHeight: 0,\n\t\t\t\t\t\tmotion: {\n\t\t\t\t\t\t\ty: { type: \"tween\", duration: 500, easing: cubicInOut },\n\t\t\t\t\t\t\theight: { type: \"tween\", duration: 500, easing: cubicInOut },\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\txAxis: {\n\t\t\t\t\t\tformat: (d) =>\n\t\t\t\t\t\t\tnew Date(d).toLocaleDateString(\"en-US\", {\n\t\t\t\t\t\t\t\tweekday: \"short\",\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\ttickLabelProps: {\n\t\t\t\t\t\t\tsvgProps: {\n\t\t\t\t\t\t\t\ty: 13,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{#snippet tooltip()}\n\t\t\t\t\t<Chart.Tooltip hideIndicator />\n\t\t\t\t{/snippet}\n\t\t\t</BarChart>\n\t\t</Chart.Container>\n\t</Card.Content>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/chart-tooltip-label-custom.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport { scaleBand } from \"d3-scale\";\n\timport { BarChart, type ChartContextValue } from \"layerchart\";\n\timport { cubicInOut } from \"svelte/easing\";\n\n\tconst chartData = [\n\t\t{ date: \"2024-07-15\", running: 450, swimming: 300 },\n\t\t{ date: \"2024-07-16\", running: 380, swimming: 420 },\n\t\t{ date: \"2024-07-17\", running: 520, swimming: 120 },\n\t\t{ date: \"2024-07-18\", running: 140, swimming: 550 },\n\t\t{ date: \"2024-07-19\", running: 600, swimming: 350 },\n\t\t{ date: \"2024-07-20\", running: 480, swimming: 400 },\n\t];\n\n\tconst chartConfig = {\n\t\tactivities: { label: \"Activities\" },\n\t\trunning: { label: \"Running\", color: \"var(--chart-1)\" },\n\t\tswimming: { label: \"Swimming\", color: \"var(--chart-2)\" },\n\t} satisfies Chart.ChartConfig;\n\n\tlet context = $state<ChartContextValue>();\n</script>\n\n<Card.Root>\n\t<Card.Header>\n\t\t<Card.Title>Tooltip - Custom Label</Card.Title>\n\t\t<Card.Description>Tooltip with custom label from chartConfig.</Card.Description>\n\t</Card.Header>\n\t<Card.Content>\n\t\t<Chart.Container config={chartConfig}>\n\t\t\t<BarChart\n\t\t\t\tbind:context\n\t\t\t\tdata={chartData}\n\t\t\t\txScale={scaleBand().padding(0.25)}\n\t\t\t\tx=\"date\"\n\t\t\t\taxis=\"x\"\n\t\t\t\trule={false}\n\t\t\t\tseries={[\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"running\",\n\t\t\t\t\t\tlabel: \"Running\",\n\t\t\t\t\t\tcolor: chartConfig.running.color,\n\t\t\t\t\t\tprops: { rounded: \"bottom\" },\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"swimming\",\n\t\t\t\t\t\tlabel: \"Swimming\",\n\t\t\t\t\t\tcolor: chartConfig.swimming.color,\n\t\t\t\t\t},\n\t\t\t\t]}\n\t\t\t\tseriesLayout=\"stack\"\n\t\t\t\tgrid={false}\n\t\t\t\thighlight={false}\n\t\t\t\tprops={{\n\t\t\t\t\tbars: {\n\t\t\t\t\t\tstroke: \"none\",\n\t\t\t\t\t\tinitialY: context?.height,\n\t\t\t\t\t\tinitialHeight: 0,\n\t\t\t\t\t\tmotion: {\n\t\t\t\t\t\t\ty: { type: \"tween\", duration: 500, easing: cubicInOut },\n\t\t\t\t\t\t\theight: { type: \"tween\", duration: 500, easing: cubicInOut },\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\txAxis: {\n\t\t\t\t\t\tformat: (d) =>\n\t\t\t\t\t\t\tnew Date(d).toLocaleDateString(\"en-US\", {\n\t\t\t\t\t\t\t\tweekday: \"short\",\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\ttickLabelProps: {\n\t\t\t\t\t\t\tsvgProps: {\n\t\t\t\t\t\t\t\ty: 13,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{#snippet tooltip()}\n\t\t\t\t\t<Chart.Tooltip labelKey=\"activities\" indicator=\"line\" />\n\t\t\t\t{/snippet}\n\t\t\t</BarChart>\n\t\t</Chart.Container>\n\t</Card.Content>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/chart-tooltip-label-formatter.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport { scaleBand } from \"d3-scale\";\n\timport { BarChart, type ChartContextValue } from \"layerchart\";\n\timport { cubicInOut } from \"svelte/easing\";\n\n\tconst chartData = [\n\t\t{ date: \"2024-07-15\", running: 450, swimming: 300 },\n\t\t{ date: \"2024-07-16\", running: 380, swimming: 420 },\n\t\t{ date: \"2024-07-17\", running: 520, swimming: 120 },\n\t\t{ date: \"2024-07-18\", running: 140, swimming: 550 },\n\t\t{ date: \"2024-07-19\", running: 600, swimming: 350 },\n\t\t{ date: \"2024-07-20\", running: 480, swimming: 400 },\n\t];\n\n\tconst chartConfig = {\n\t\trunning: { label: \"Running\", color: \"var(--chart-1)\" },\n\t\tswimming: { label: \"Swimming\", color: \"var(--chart-2)\" },\n\t} satisfies Chart.ChartConfig;\n\n\tlet context = $state<ChartContextValue>();\n</script>\n\n<Card.Root>\n\t<Card.Header>\n\t\t<Card.Title>Tooltip - Label Formatter</Card.Title>\n\t\t<Card.Description>Tooltip with label formatter.</Card.Description>\n\t</Card.Header>\n\t<Card.Content>\n\t\t<Chart.Container config={chartConfig}>\n\t\t\t<BarChart\n\t\t\t\tbind:context\n\t\t\t\tdata={chartData}\n\t\t\t\txScale={scaleBand().padding(0.25)}\n\t\t\t\tx=\"date\"\n\t\t\t\taxis=\"x\"\n\t\t\t\trule={false}\n\t\t\t\tseries={[\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"running\",\n\t\t\t\t\t\tlabel: \"Running\",\n\t\t\t\t\t\tcolor: chartConfig.running.color,\n\t\t\t\t\t\tprops: { rounded: \"bottom\" },\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"swimming\",\n\t\t\t\t\t\tlabel: \"Swimming\",\n\t\t\t\t\t\tcolor: chartConfig.swimming.color,\n\t\t\t\t\t},\n\t\t\t\t]}\n\t\t\t\tseriesLayout=\"stack\"\n\t\t\t\tgrid={false}\n\t\t\t\thighlight={false}\n\t\t\t\tprops={{\n\t\t\t\t\tbars: {\n\t\t\t\t\t\tstroke: \"none\",\n\t\t\t\t\t\tinitialY: context?.height,\n\t\t\t\t\t\tinitialHeight: 0,\n\t\t\t\t\t\tmotion: {\n\t\t\t\t\t\t\ty: { type: \"tween\", duration: 500, easing: cubicInOut },\n\t\t\t\t\t\t\theight: { type: \"tween\", duration: 500, easing: cubicInOut },\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\txAxis: {\n\t\t\t\t\t\tformat: (d) =>\n\t\t\t\t\t\t\tnew Date(d).toLocaleDateString(\"en-US\", {\n\t\t\t\t\t\t\t\tweekday: \"short\",\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\ttickLabelProps: {\n\t\t\t\t\t\t\tsvgProps: {\n\t\t\t\t\t\t\t\ty: 13,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{#snippet tooltip()}\n\t\t\t\t\t<Chart.Tooltip\n\t\t\t\t\t\tlabelFormatter={(d) =>\n\t\t\t\t\t\t\tnew Date(d).toLocaleDateString(\"en-US\", {\n\t\t\t\t\t\t\t\tday: \"numeric\",\n\t\t\t\t\t\t\t\tmonth: \"long\",\n\t\t\t\t\t\t\t\tyear: \"numeric\",\n\t\t\t\t\t\t\t})}\n\t\t\t\t\t/>\n\t\t\t\t{/snippet}\n\t\t\t</BarChart>\n\t\t</Chart.Container>\n\t</Card.Content>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/chart-tooltip-label-none.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport { scaleBand } from \"d3-scale\";\n\timport { BarChart, type ChartContextValue } from \"layerchart\";\n\timport { cubicInOut } from \"svelte/easing\";\n\n\tconst chartData = [\n\t\t{ date: \"2024-07-15\", running: 450, swimming: 300 },\n\t\t{ date: \"2024-07-16\", running: 380, swimming: 420 },\n\t\t{ date: \"2024-07-17\", running: 520, swimming: 120 },\n\t\t{ date: \"2024-07-18\", running: 140, swimming: 550 },\n\t\t{ date: \"2024-07-19\", running: 600, swimming: 350 },\n\t\t{ date: \"2024-07-20\", running: 480, swimming: 400 },\n\t];\n\n\tconst chartConfig = {\n\t\trunning: { label: \"Running\", color: \"var(--chart-1)\" },\n\t\tswimming: { label: \"Swimming\", color: \"var(--chart-2)\" },\n\t} satisfies Chart.ChartConfig;\n\n\tlet context = $state<ChartContextValue>();\n</script>\n\n<Card.Root>\n\t<Card.Header>\n\t\t<Card.Title>Tooltip - No Label</Card.Title>\n\t\t<Card.Description>Tooltip with no label.</Card.Description>\n\t</Card.Header>\n\t<Card.Content>\n\t\t<Chart.Container config={chartConfig}>\n\t\t\t<BarChart\n\t\t\t\tbind:context\n\t\t\t\tdata={chartData}\n\t\t\t\txScale={scaleBand().padding(0.25)}\n\t\t\t\tx=\"date\"\n\t\t\t\taxis=\"x\"\n\t\t\t\trule={false}\n\t\t\t\tseries={[\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"running\",\n\t\t\t\t\t\tlabel: \"Running\",\n\t\t\t\t\t\tcolor: chartConfig.running.color,\n\t\t\t\t\t\tprops: { rounded: \"bottom\" },\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"swimming\",\n\t\t\t\t\t\tlabel: \"Swimming\",\n\t\t\t\t\t\tcolor: chartConfig.swimming.color,\n\t\t\t\t\t},\n\t\t\t\t]}\n\t\t\t\tseriesLayout=\"stack\"\n\t\t\t\tgrid={false}\n\t\t\t\thighlight={false}\n\t\t\t\tprops={{\n\t\t\t\t\tbars: {\n\t\t\t\t\t\tstroke: \"none\",\n\t\t\t\t\t\tinitialY: context?.height,\n\t\t\t\t\t\tinitialHeight: 0,\n\t\t\t\t\t\tmotion: {\n\t\t\t\t\t\t\ty: { type: \"tween\", duration: 500, easing: cubicInOut },\n\t\t\t\t\t\t\theight: { type: \"tween\", duration: 500, easing: cubicInOut },\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\txAxis: {\n\t\t\t\t\t\tformat: (d) =>\n\t\t\t\t\t\t\tnew Date(d).toLocaleDateString(\"en-US\", {\n\t\t\t\t\t\t\t\tweekday: \"short\",\n\t\t\t\t\t\t\t}),\n\t\t\t\t\t\ttickLabelProps: {\n\t\t\t\t\t\t\tsvgProps: {\n\t\t\t\t\t\t\t\ty: 13,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{#snippet tooltip()}\n\t\t\t\t\t<Chart.Tooltip hideLabel hideIndicator />\n\t\t\t\t{/snippet}\n\t\t\t</BarChart>\n\t\t</Chart.Container>\n\t</Card.Content>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/dashboard-01/+page.svelte",
    "content": "<script lang=\"ts\">\n\timport data from \"./data.js\";\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\timport AppSidebar from \"./components/app-sidebar.svelte\";\n\timport SiteHeader from \"./components/site-header.svelte\";\n\timport SectionCards from \"./components/section-cards.svelte\";\n\timport ChartAreaInteractive from \"./components/chart-area-interactive.svelte\";\n\timport DataTable from \"./components/data-table.svelte\";\n</script>\n\n<Sidebar.Provider\n\tstyle=\"--sidebar-width: calc(var(--spacing) * 72); --header-height: calc(var(--spacing) * 12);\"\n>\n\t<AppSidebar variant=\"inset\" />\n\t<Sidebar.Inset>\n\t\t<SiteHeader />\n\t\t<div class=\"flex flex-1 flex-col\">\n\t\t\t<div class=\"@container/main flex flex-1 flex-col gap-2\">\n\t\t\t\t<div class=\"flex flex-col gap-4 py-4 md:gap-6 md:py-6\">\n\t\t\t\t\t<SectionCards />\n\t\t\t\t\t<div class=\"px-4 lg:px-6\">\n\t\t\t\t\t\t<ChartAreaInteractive />\n\t\t\t\t\t</div>\n\t\t\t\t\t<DataTable {data} />\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</Sidebar.Inset>\n</Sidebar.Provider>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/dashboard-01/components/app-sidebar.svelte",
    "content": "<script lang=\"ts\">\n\timport CameraIcon from \"@tabler/icons-svelte/icons/camera\";\n\timport ChartBarIcon from \"@tabler/icons-svelte/icons/chart-bar\";\n\timport DashboardIcon from \"@tabler/icons-svelte/icons/dashboard\";\n\timport DatabaseIcon from \"@tabler/icons-svelte/icons/database\";\n\timport FileAiIcon from \"@tabler/icons-svelte/icons/file-ai\";\n\timport FileDescriptionIcon from \"@tabler/icons-svelte/icons/file-description\";\n\timport FileWordIcon from \"@tabler/icons-svelte/icons/file-word\";\n\timport FolderIcon from \"@tabler/icons-svelte/icons/folder\";\n\timport HelpIcon from \"@tabler/icons-svelte/icons/help\";\n\timport InnerShadowTopIcon from \"@tabler/icons-svelte/icons/inner-shadow-top\";\n\timport ListDetailsIcon from \"@tabler/icons-svelte/icons/list-details\";\n\timport ReportIcon from \"@tabler/icons-svelte/icons/report\";\n\timport SearchIcon from \"@tabler/icons-svelte/icons/search\";\n\timport SettingsIcon from \"@tabler/icons-svelte/icons/settings\";\n\timport UsersIcon from \"@tabler/icons-svelte/icons/users\";\n\timport NavDocuments from \"./nav-documents.svelte\";\n\timport NavMain from \"./nav-main.svelte\";\n\timport NavSecondary from \"./nav-secondary.svelte\";\n\timport NavUser from \"./nav-user.svelte\";\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\timport type { ComponentProps } from \"svelte\";\n\n\tconst data = {\n\t\tuser: {\n\t\t\tname: \"shadcn\",\n\t\t\temail: \"m@example.com\",\n\t\t\tavatar: \"/avatars/shadcn.jpg\",\n\t\t},\n\t\tnavMain: [\n\t\t\t{\n\t\t\t\ttitle: \"Dashboard\",\n\t\t\t\turl: \"#\",\n\t\t\t\ticon: DashboardIcon,\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"Lifecycle\",\n\t\t\t\turl: \"#\",\n\t\t\t\ticon: ListDetailsIcon,\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"Analytics\",\n\t\t\t\turl: \"#\",\n\t\t\t\ticon: ChartBarIcon,\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"Projects\",\n\t\t\t\turl: \"#\",\n\t\t\t\ticon: FolderIcon,\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"Team\",\n\t\t\t\turl: \"#\",\n\t\t\t\ticon: UsersIcon,\n\t\t\t},\n\t\t],\n\t\tnavClouds: [\n\t\t\t{\n\t\t\t\ttitle: \"Capture\",\n\t\t\t\ticon: CameraIcon,\n\t\t\t\tisActive: true,\n\t\t\t\turl: \"#\",\n\t\t\t\titems: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Active Proposals\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Archived\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"Proposal\",\n\t\t\t\ticon: FileDescriptionIcon,\n\t\t\t\turl: \"#\",\n\t\t\t\titems: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Active Proposals\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Archived\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"Prompts\",\n\t\t\t\ticon: FileAiIcon,\n\t\t\t\turl: \"#\",\n\t\t\t\titems: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Active Proposals\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Archived\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t\tnavSecondary: [\n\t\t\t{\n\t\t\t\ttitle: \"Settings\",\n\t\t\t\turl: \"#\",\n\t\t\t\ticon: SettingsIcon,\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"Get Help\",\n\t\t\t\turl: \"#\",\n\t\t\t\ticon: HelpIcon,\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"Search\",\n\t\t\t\turl: \"#\",\n\t\t\t\ticon: SearchIcon,\n\t\t\t},\n\t\t],\n\t\tdocuments: [\n\t\t\t{\n\t\t\t\tname: \"Data Library\",\n\t\t\t\turl: \"#\",\n\t\t\t\ticon: DatabaseIcon,\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"Reports\",\n\t\t\t\turl: \"#\",\n\t\t\t\ticon: ReportIcon,\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"Word Assistant\",\n\t\t\t\turl: \"#\",\n\t\t\t\ticon: FileWordIcon,\n\t\t\t},\n\t\t],\n\t};\n\n\tlet { ...restProps }: ComponentProps<typeof Sidebar.Root> = $props();\n</script>\n\n<Sidebar.Root collapsible=\"offcanvas\" {...restProps}>\n\t<Sidebar.Header>\n\t\t<Sidebar.Menu>\n\t\t\t<Sidebar.MenuItem>\n\t\t\t\t<Sidebar.MenuButton class=\"data-[slot=sidebar-menu-button]:!p-1.5\">\n\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t<a href=\"##\" {...props}>\n\t\t\t\t\t\t\t<InnerShadowTopIcon class=\"!size-5\" />\n\t\t\t\t\t\t\t<span class=\"text-base font-semibold\">Acme Inc.</span>\n\t\t\t\t\t\t</a>\n\t\t\t\t\t{/snippet}\n\t\t\t\t</Sidebar.MenuButton>\n\t\t\t</Sidebar.MenuItem>\n\t\t</Sidebar.Menu>\n\t</Sidebar.Header>\n\t<Sidebar.Content>\n\t\t<NavMain items={data.navMain} />\n\t\t<NavDocuments items={data.documents} />\n\t\t<NavSecondary items={data.navSecondary} class=\"mt-auto\" />\n\t</Sidebar.Content>\n\t<Sidebar.Footer>\n\t\t<NavUser user={data.user} />\n\t</Sidebar.Footer>\n</Sidebar.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/dashboard-01/components/chart-area-interactive.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Select from \"$lib/registry/ui/select/index.js\";\n\timport * as ToggleGroup from \"$lib/registry/ui/toggle-group/index.js\";\n\timport { scaleUtc } from \"d3-scale\";\n\timport { Area, AreaChart } from \"layerchart\";\n\timport { curveNatural } from \"d3-shape\";\n\n\tconst chartData = [\n\t\t{ date: new Date(\"2024-04-01\"), desktop: 222, mobile: 150 },\n\t\t{ date: new Date(\"2024-04-02\"), desktop: 97, mobile: 180 },\n\t\t{ date: new Date(\"2024-04-03\"), desktop: 167, mobile: 120 },\n\t\t{ date: new Date(\"2024-04-04\"), desktop: 242, mobile: 260 },\n\t\t{ date: new Date(\"2024-04-05\"), desktop: 373, mobile: 290 },\n\t\t{ date: new Date(\"2024-04-06\"), desktop: 301, mobile: 340 },\n\t\t{ date: new Date(\"2024-04-07\"), desktop: 245, mobile: 180 },\n\t\t{ date: new Date(\"2024-04-08\"), desktop: 409, mobile: 320 },\n\t\t{ date: new Date(\"2024-04-09\"), desktop: 59, mobile: 110 },\n\t\t{ date: new Date(\"2024-04-10\"), desktop: 261, mobile: 190 },\n\t\t{ date: new Date(\"2024-04-11\"), desktop: 327, mobile: 350 },\n\t\t{ date: new Date(\"2024-04-12\"), desktop: 292, mobile: 210 },\n\t\t{ date: new Date(\"2024-04-13\"), desktop: 342, mobile: 380 },\n\t\t{ date: new Date(\"2024-04-14\"), desktop: 137, mobile: 220 },\n\t\t{ date: new Date(\"2024-04-15\"), desktop: 120, mobile: 170 },\n\t\t{ date: new Date(\"2024-04-16\"), desktop: 138, mobile: 190 },\n\t\t{ date: new Date(\"2024-04-17\"), desktop: 446, mobile: 360 },\n\t\t{ date: new Date(\"2024-04-18\"), desktop: 364, mobile: 410 },\n\t\t{ date: new Date(\"2024-04-19\"), desktop: 243, mobile: 180 },\n\t\t{ date: new Date(\"2024-04-20\"), desktop: 89, mobile: 150 },\n\t\t{ date: new Date(\"2024-04-21\"), desktop: 137, mobile: 200 },\n\t\t{ date: new Date(\"2024-04-22\"), desktop: 224, mobile: 170 },\n\t\t{ date: new Date(\"2024-04-23\"), desktop: 138, mobile: 230 },\n\t\t{ date: new Date(\"2024-04-24\"), desktop: 387, mobile: 290 },\n\t\t{ date: new Date(\"2024-04-25\"), desktop: 215, mobile: 250 },\n\t\t{ date: new Date(\"2024-04-26\"), desktop: 75, mobile: 130 },\n\t\t{ date: new Date(\"2024-04-27\"), desktop: 383, mobile: 420 },\n\t\t{ date: new Date(\"2024-04-28\"), desktop: 122, mobile: 180 },\n\t\t{ date: new Date(\"2024-04-29\"), desktop: 315, mobile: 240 },\n\t\t{ date: new Date(\"2024-04-30\"), desktop: 454, mobile: 380 },\n\t\t{ date: new Date(\"2024-05-01\"), desktop: 165, mobile: 220 },\n\t\t{ date: new Date(\"2024-05-02\"), desktop: 293, mobile: 310 },\n\t\t{ date: new Date(\"2024-05-03\"), desktop: 247, mobile: 190 },\n\t\t{ date: new Date(\"2024-05-04\"), desktop: 385, mobile: 420 },\n\t\t{ date: new Date(\"2024-05-05\"), desktop: 481, mobile: 390 },\n\t\t{ date: new Date(\"2024-05-06\"), desktop: 498, mobile: 520 },\n\t\t{ date: new Date(\"2024-05-07\"), desktop: 388, mobile: 300 },\n\t\t{ date: new Date(\"2024-05-08\"), desktop: 149, mobile: 210 },\n\t\t{ date: new Date(\"2024-05-09\"), desktop: 227, mobile: 180 },\n\t\t{ date: new Date(\"2024-05-10\"), desktop: 293, mobile: 330 },\n\t\t{ date: new Date(\"2024-05-11\"), desktop: 335, mobile: 270 },\n\t\t{ date: new Date(\"2024-05-12\"), desktop: 197, mobile: 240 },\n\t\t{ date: new Date(\"2024-05-13\"), desktop: 197, mobile: 160 },\n\t\t{ date: new Date(\"2024-05-14\"), desktop: 448, mobile: 490 },\n\t\t{ date: new Date(\"2024-05-15\"), desktop: 473, mobile: 380 },\n\t\t{ date: new Date(\"2024-05-16\"), desktop: 338, mobile: 400 },\n\t\t{ date: new Date(\"2024-05-17\"), desktop: 499, mobile: 420 },\n\t\t{ date: new Date(\"2024-05-18\"), desktop: 315, mobile: 350 },\n\t\t{ date: new Date(\"2024-05-19\"), desktop: 235, mobile: 180 },\n\t\t{ date: new Date(\"2024-05-20\"), desktop: 177, mobile: 230 },\n\t\t{ date: new Date(\"2024-05-21\"), desktop: 82, mobile: 140 },\n\t\t{ date: new Date(\"2024-05-22\"), desktop: 81, mobile: 120 },\n\t\t{ date: new Date(\"2024-05-23\"), desktop: 252, mobile: 290 },\n\t\t{ date: new Date(\"2024-05-24\"), desktop: 294, mobile: 220 },\n\t\t{ date: new Date(\"2024-05-25\"), desktop: 201, mobile: 250 },\n\t\t{ date: new Date(\"2024-05-26\"), desktop: 213, mobile: 170 },\n\t\t{ date: new Date(\"2024-05-27\"), desktop: 420, mobile: 460 },\n\t\t{ date: new Date(\"2024-05-28\"), desktop: 233, mobile: 190 },\n\t\t{ date: new Date(\"2024-05-29\"), desktop: 78, mobile: 130 },\n\t\t{ date: new Date(\"2024-05-30\"), desktop: 340, mobile: 280 },\n\t\t{ date: new Date(\"2024-05-31\"), desktop: 178, mobile: 230 },\n\t\t{ date: new Date(\"2024-06-01\"), desktop: 178, mobile: 200 },\n\t\t{ date: new Date(\"2024-06-02\"), desktop: 470, mobile: 410 },\n\t\t{ date: new Date(\"2024-06-03\"), desktop: 103, mobile: 160 },\n\t\t{ date: new Date(\"2024-06-04\"), desktop: 439, mobile: 380 },\n\t\t{ date: new Date(\"2024-06-05\"), desktop: 88, mobile: 140 },\n\t\t{ date: new Date(\"2024-06-06\"), desktop: 294, mobile: 250 },\n\t\t{ date: new Date(\"2024-06-07\"), desktop: 323, mobile: 370 },\n\t\t{ date: new Date(\"2024-06-08\"), desktop: 385, mobile: 320 },\n\t\t{ date: new Date(\"2024-06-09\"), desktop: 438, mobile: 480 },\n\t\t{ date: new Date(\"2024-06-10\"), desktop: 155, mobile: 200 },\n\t\t{ date: new Date(\"2024-06-11\"), desktop: 92, mobile: 150 },\n\t\t{ date: new Date(\"2024-06-12\"), desktop: 492, mobile: 420 },\n\t\t{ date: new Date(\"2024-06-13\"), desktop: 81, mobile: 130 },\n\t\t{ date: new Date(\"2024-06-14\"), desktop: 426, mobile: 380 },\n\t\t{ date: new Date(\"2024-06-15\"), desktop: 307, mobile: 350 },\n\t\t{ date: new Date(\"2024-06-16\"), desktop: 371, mobile: 310 },\n\t\t{ date: new Date(\"2024-06-17\"), desktop: 475, mobile: 520 },\n\t\t{ date: new Date(\"2024-06-18\"), desktop: 107, mobile: 170 },\n\t\t{ date: new Date(\"2024-06-19\"), desktop: 341, mobile: 290 },\n\t\t{ date: new Date(\"2024-06-20\"), desktop: 408, mobile: 450 },\n\t\t{ date: new Date(\"2024-06-21\"), desktop: 169, mobile: 210 },\n\t\t{ date: new Date(\"2024-06-22\"), desktop: 317, mobile: 270 },\n\t\t{ date: new Date(\"2024-06-23\"), desktop: 480, mobile: 530 },\n\t\t{ date: new Date(\"2024-06-24\"), desktop: 132, mobile: 180 },\n\t\t{ date: new Date(\"2024-06-25\"), desktop: 141, mobile: 190 },\n\t\t{ date: new Date(\"2024-06-26\"), desktop: 434, mobile: 380 },\n\t\t{ date: new Date(\"2024-06-27\"), desktop: 448, mobile: 490 },\n\t\t{ date: new Date(\"2024-06-28\"), desktop: 149, mobile: 200 },\n\t\t{ date: new Date(\"2024-06-29\"), desktop: 103, mobile: 160 },\n\t\t{ date: new Date(\"2024-06-30\"), desktop: 446, mobile: 400 },\n\t];\n\n\tlet timeRange = $state(\"90d\");\n\n\tconst selectedLabel = $derived.by(() => {\n\t\tswitch (timeRange) {\n\t\t\tcase \"90d\":\n\t\t\t\treturn \"Last 3 months\";\n\t\t\tcase \"30d\":\n\t\t\t\treturn \"Last 30 days\";\n\t\t\tcase \"7d\":\n\t\t\t\treturn \"Last 7 days\";\n\t\t\tdefault:\n\t\t\t\treturn \"Last 3 months\";\n\t\t}\n\t});\n\n\tconst filteredData = $derived(\n\t\tchartData.filter((item) => {\n\t\t\t// eslint-disable-next-line svelte/prefer-svelte-reactivity\n\t\t\tconst referenceDate = new Date(\"2024-06-30\");\n\t\t\tlet daysToSubtract = 90;\n\t\t\tif (timeRange === \"30d\") {\n\t\t\t\tdaysToSubtract = 30;\n\t\t\t} else if (timeRange === \"7d\") {\n\t\t\t\tdaysToSubtract = 7;\n\t\t\t}\n\n\t\t\treferenceDate.setDate(referenceDate.getDate() - daysToSubtract);\n\t\t\treturn item.date >= referenceDate;\n\t\t})\n\t);\n\n\tconst chartConfig = {\n\t\tdesktop: { label: \"Desktop\", color: \"var(--primary)\" },\n\t\tmobile: { label: \"Mobile\", color: \"var(--primary)\" },\n\t} satisfies Chart.ChartConfig;\n</script>\n\n<Card.Root class=\"@container/card\">\n\t<Card.Header>\n\t\t<Card.Title>Total Visitors</Card.Title>\n\t\t<Card.Description>\n\t\t\t<span class=\"hidden @[540px]/card:block\"> Total for the last 3 months </span>\n\t\t\t<span class=\"@[540px]/card:hidden\">Last 3 months</span>\n\t\t</Card.Description>\n\t\t<Card.Action>\n\t\t\t<ToggleGroup.Root\n\t\t\t\ttype=\"single\"\n\t\t\t\tbind:value={timeRange}\n\t\t\t\tvariant=\"outline\"\n\t\t\t\tclass=\"hidden *:data-[slot=toggle-group-item]:!px-4 @[767px]/card:flex\"\n\t\t\t>\n\t\t\t\t<ToggleGroup.Item value=\"90d\">Last 3 months</ToggleGroup.Item>\n\t\t\t\t<ToggleGroup.Item value=\"30d\">Last 30 days</ToggleGroup.Item>\n\t\t\t\t<ToggleGroup.Item value=\"7d\">Last 7 days</ToggleGroup.Item>\n\t\t\t</ToggleGroup.Root>\n\t\t\t<Select.Root type=\"single\" bind:value={timeRange}>\n\t\t\t\t<Select.Trigger\n\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\tclass=\"flex w-40 **:data-[slot=select-value]:block **:data-[slot=select-value]:truncate @[767px]/card:hidden\"\n\t\t\t\t\taria-label=\"Select a value\"\n\t\t\t\t>\n\t\t\t\t\t<span data-slot=\"select-value\">\n\t\t\t\t\t\t{selectedLabel}\n\t\t\t\t\t</span>\n\t\t\t\t</Select.Trigger>\n\t\t\t\t<Select.Content class=\"rounded-xl\">\n\t\t\t\t\t<Select.Item value=\"90d\" class=\"rounded-lg\">Last 3 months</Select.Item>\n\t\t\t\t\t<Select.Item value=\"30d\" class=\"rounded-lg\">Last 30 days</Select.Item>\n\t\t\t\t\t<Select.Item value=\"7d\" class=\"rounded-lg\">Last 7 days</Select.Item>\n\t\t\t\t</Select.Content>\n\t\t\t</Select.Root>\n\t\t</Card.Action>\n\t</Card.Header>\n\t<Card.Content class=\"px-2 pt-4 sm:px-6 sm:pt-6\">\n\t\t<Chart.Container config={chartConfig} class=\"aspect-auto h-[250px] w-full\">\n\t\t\t<AreaChart\n\t\t\t\tlegend\n\t\t\t\tdata={filteredData}\n\t\t\t\tx=\"date\"\n\t\t\t\txScale={scaleUtc()}\n\t\t\t\tseries={[\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"mobile\",\n\t\t\t\t\t\tlabel: \"Mobile\",\n\t\t\t\t\t\tcolor: chartConfig.mobile.color,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"desktop\",\n\t\t\t\t\t\tlabel: \"Desktop\",\n\t\t\t\t\t\tcolor: chartConfig.desktop.color,\n\t\t\t\t\t},\n\t\t\t\t]}\n\t\t\t\tseriesLayout=\"stack\"\n\t\t\t\tprops={{\n\t\t\t\t\tarea: {\n\t\t\t\t\t\tcurve: curveNatural,\n\t\t\t\t\t\t\"fill-opacity\": 0.4,\n\t\t\t\t\t\tline: { class: \"stroke-1\" },\n\t\t\t\t\t\tmotion: \"tween\",\n\t\t\t\t\t},\n\t\t\t\t\txAxis: {\n\t\t\t\t\t\tticks: timeRange === \"7d\" ? 7 : undefined,\n\t\t\t\t\t\tformat: (v) => {\n\t\t\t\t\t\t\treturn v.toLocaleDateString(\"en-US\", {\n\t\t\t\t\t\t\t\tmonth: \"short\",\n\t\t\t\t\t\t\t\tday: \"numeric\",\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\n\t\t\t\t\tyAxis: { format: () => \"\" },\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{#snippet marks({ series, getAreaProps })}\n\t\t\t\t\t<defs>\n\t\t\t\t\t\t<linearGradient id=\"fillDesktop\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n\t\t\t\t\t\t\t<stop\n\t\t\t\t\t\t\t\toffset=\"5%\"\n\t\t\t\t\t\t\t\tstop-color=\"var(--color-desktop)\"\n\t\t\t\t\t\t\t\tstop-opacity={1.0}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<stop\n\t\t\t\t\t\t\t\toffset=\"95%\"\n\t\t\t\t\t\t\t\tstop-color=\"var(--color-desktop)\"\n\t\t\t\t\t\t\t\tstop-opacity={0.1}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</linearGradient>\n\t\t\t\t\t\t<linearGradient id=\"fillMobile\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n\t\t\t\t\t\t\t<stop offset=\"5%\" stop-color=\"var(--color-mobile)\" stop-opacity={0.8} />\n\t\t\t\t\t\t\t<stop\n\t\t\t\t\t\t\t\toffset=\"95%\"\n\t\t\t\t\t\t\t\tstop-color=\"var(--color-mobile)\"\n\t\t\t\t\t\t\t\tstop-opacity={0.1}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</linearGradient>\n\t\t\t\t\t</defs>\n\t\t\t\t\t{#each series as s, i (s.key)}\n\t\t\t\t\t\t<Area\n\t\t\t\t\t\t\t{...getAreaProps(s, i)}\n\t\t\t\t\t\t\tfill={s.key === \"desktop\" ? \"url(#fillDesktop)\" : \"url(#fillMobile)\"}\n\t\t\t\t\t\t/>\n\t\t\t\t\t{/each}\n\t\t\t\t{/snippet}\n\t\t\t\t{#snippet tooltip()}\n\t\t\t\t\t<Chart.Tooltip\n\t\t\t\t\t\tlabelFormatter={(v: Date) => {\n\t\t\t\t\t\t\treturn v.toLocaleDateString(\"en-US\", {\n\t\t\t\t\t\t\t\tmonth: \"short\",\n\t\t\t\t\t\t\t\tday: \"numeric\",\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tindicator=\"line\"\n\t\t\t\t\t/>\n\t\t\t\t{/snippet}\n\t\t\t</AreaChart>\n\t\t</Chart.Container>\n\t</Card.Content>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/dashboard-01/components/data-table-actions.svelte",
    "content": "<script lang=\"ts\">\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport DotsVerticalIcon from \"@tabler/icons-svelte/icons/dots-vertical\";\n</script>\n\n<DropdownMenu.Root>\n\t<DropdownMenu.Trigger class=\"data-[state=open]:bg-muted text-muted-foreground flex size-8\">\n\t\t{#snippet child({ props })}\n\t\t\t<Button variant=\"ghost\" size=\"icon\" {...props}>\n\t\t\t\t<DotsVerticalIcon />\n\t\t\t\t<span class=\"sr-only\">Open menu</span>\n\t\t\t</Button>\n\t\t{/snippet}\n\t</DropdownMenu.Trigger>\n\t<DropdownMenu.Content align=\"end\" class=\"w-32\">\n\t\t<DropdownMenu.Item>Edit</DropdownMenu.Item>\n\t\t<DropdownMenu.Item>Make a copy</DropdownMenu.Item>\n\t\t<DropdownMenu.Item>Favorite</DropdownMenu.Item>\n\t\t<DropdownMenu.Separator />\n\t\t<DropdownMenu.Item variant=\"destructive\">Delete</DropdownMenu.Item>\n\t</DropdownMenu.Content>\n</DropdownMenu.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/dashboard-01/components/data-table-cell-viewer.svelte",
    "content": "<script lang=\"ts\">\n\timport TrendingUpIcon from \"@tabler/icons-svelte/icons/trending-up\";\n\timport { AreaChart } from \"layerchart\";\n\timport { scaleUtc } from \"d3-scale\";\n\timport { curveNatural } from \"d3-shape\";\n\n\timport * as Drawer from \"$lib/registry/ui/drawer/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport { IsMobile } from \"$lib/registry/hooks/is-mobile.svelte.js\";\n\timport { Label } from \"$lib/registry/ui/label/index.js\";\n\timport { Input } from \"$lib/registry/ui/input/index.js\";\n\timport * as Select from \"$lib/registry/ui/select/index.js\";\n\timport { Separator } from \"$lib/registry/ui/separator/index.js\";\n\timport type { Schema } from \"./schemas.js\";\n\n\tconst chartData = [\n\t\t{ date: new Date(\"2024-01-01\"), desktop: 186, mobile: 80 },\n\t\t{ date: new Date(\"2024-02-01\"), desktop: 305, mobile: 200 },\n\t\t{ date: new Date(\"2024-03-01\"), desktop: 237, mobile: 120 },\n\t\t{ date: new Date(\"2024-04-01\"), desktop: 73, mobile: 190 },\n\t\t{ date: new Date(\"2024-05-01\"), desktop: 209, mobile: 130 },\n\t\t{ date: new Date(\"2024-06-01\"), desktop: 214, mobile: 140 },\n\t];\n\n\tconst chartConfig = {\n\t\tdesktop: {\n\t\t\tlabel: \"Desktop\",\n\t\t\tcolor: \"var(--primary)\",\n\t\t},\n\t\tmobile: {\n\t\t\tlabel: \"Mobile\",\n\t\t\tcolor: \"var(--primary)\",\n\t\t},\n\t} satisfies Chart.ChartConfig;\n\n\tconst isMobile = new IsMobile();\n\n\tlet { item }: { item: Schema } = $props();\n\n\tlet type = $derived(item.type);\n\tlet status = $derived(item.status);\n\tlet reviewer = $derived(item.reviewer);\n</script>\n\n<Drawer.Root direction={isMobile.current ? \"bottom\" : \"right\"}>\n\t<Drawer.Trigger>\n\t\t{#snippet child({ props })}\n\t\t\t<Button variant=\"link\" class=\"text-foreground w-fit px-0 text-start\" {...props}>\n\t\t\t\t{item.header}\n\t\t\t</Button>\n\t\t{/snippet}\n\t</Drawer.Trigger>\n\t<Drawer.Content>\n\t\t<Drawer.Header class=\"gap-1\">\n\t\t\t<Drawer.Title>{item.header}</Drawer.Title>\n\t\t\t<Drawer.Description>Showing total visitors for the last 6 months</Drawer.Description>\n\t\t</Drawer.Header>\n\t\t<div class=\"flex flex-col gap-4 overflow-y-auto px-4 text-sm\">\n\t\t\t{#if !isMobile.current}\n\t\t\t\t<Chart.Container config={chartConfig}>\n\t\t\t\t\t<AreaChart\n\t\t\t\t\t\tdata={chartData}\n\t\t\t\t\t\tx=\"date\"\n\t\t\t\t\t\txScale={scaleUtc()}\n\t\t\t\t\t\tyDomain={[0, 600]}\n\t\t\t\t\t\tseries={[\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tkey: \"mobile\",\n\t\t\t\t\t\t\t\tlabel: \"Mobile\",\n\t\t\t\t\t\t\t\tcolor: chartConfig.mobile.color,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tkey: \"desktop\",\n\t\t\t\t\t\t\t\tlabel: \"Desktop\",\n\t\t\t\t\t\t\t\tcolor: chartConfig.desktop.color,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t]}\n\t\t\t\t\t\tseriesLayout=\"stack\"\n\t\t\t\t\t\tprops={{\n\t\t\t\t\t\t\tarea: {\n\t\t\t\t\t\t\t\tcurve: curveNatural,\n\t\t\t\t\t\t\t\t\"fill-opacity\": 0.4,\n\t\t\t\t\t\t\t\tline: { class: \"stroke-1\" },\n\t\t\t\t\t\t\t\tmotion: \"tween\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\txAxis: {\n\t\t\t\t\t\t\t\tformat: (v) => v.toLocaleDateString(\"en-US\", { month: \"short\" }),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tyAxis: { ticks: [0, 300, 600] },\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{#snippet tooltip()}\n\t\t\t\t\t\t\t<Chart.Tooltip\n\t\t\t\t\t\t\t\tlabelFormatter={(v: Date) => {\n\t\t\t\t\t\t\t\t\treturn v.toLocaleDateString(\"en-US\", {\n\t\t\t\t\t\t\t\t\t\tmonth: \"long\",\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tindicator=\"dot\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t</AreaChart>\n\t\t\t\t</Chart.Container>\n\t\t\t\t<Separator />\n\t\t\t\t<div class=\"grid gap-2\">\n\t\t\t\t\t<div class=\"flex gap-2 leading-none font-medium\">\n\t\t\t\t\t\tTrending up by 5.2% this month\n\t\t\t\t\t\t<TrendingUpIcon class=\"size-4\" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"text-muted-foreground\">\n\t\t\t\t\t\tShowing total visitors for the last 6 months. This is just some random text\n\t\t\t\t\t\tto test the layout. It spans multiple lines and should wrap around.\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<Separator />\n\t\t\t{/if}\n\t\t\t<form class=\"flex flex-col gap-4\">\n\t\t\t\t<div class=\"flex flex-col gap-3\">\n\t\t\t\t\t<Label for=\"header\">Header</Label>\n\t\t\t\t\t<Input id=\"header\" value={item.header} />\n\t\t\t\t</div>\n\t\t\t\t<div class=\"grid grid-cols-2 gap-4\">\n\t\t\t\t\t<div class=\"flex flex-col gap-3\">\n\t\t\t\t\t\t<Label for=\"type\">Type</Label>\n\t\t\t\t\t\t<Select.Root type=\"single\" bind:value={type}>\n\t\t\t\t\t\t\t<Select.Trigger id=\"type\" class=\"w-full\">\n\t\t\t\t\t\t\t\t{type ?? \"Select a type\"}\n\t\t\t\t\t\t\t</Select.Trigger>\n\t\t\t\t\t\t\t<Select.Content>\n\t\t\t\t\t\t\t\t<Select.Item value=\"Table of Contents\"\n\t\t\t\t\t\t\t\t\t>Table of Contents</Select.Item\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<Select.Item value=\"Executive Summary\"\n\t\t\t\t\t\t\t\t\t>Executive Summary</Select.Item\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<Select.Item value=\"Technical Approach\">\n\t\t\t\t\t\t\t\t\tTechnical Approach\n\t\t\t\t\t\t\t\t</Select.Item>\n\t\t\t\t\t\t\t\t<Select.Item value=\"Design\">Design</Select.Item>\n\t\t\t\t\t\t\t\t<Select.Item value=\"Capabilities\">Capabilities</Select.Item>\n\t\t\t\t\t\t\t\t<Select.Item value=\"Focus Documents\">Focus Documents</Select.Item>\n\t\t\t\t\t\t\t\t<Select.Item value=\"Narrative\">Narrative</Select.Item>\n\t\t\t\t\t\t\t\t<Select.Item value=\"Cover Page\">Cover Page</Select.Item>\n\t\t\t\t\t\t\t</Select.Content>\n\t\t\t\t\t\t</Select.Root>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"flex flex-col gap-3\">\n\t\t\t\t\t\t<Label for=\"status\">Status</Label>\n\t\t\t\t\t\t<Select.Root type=\"single\" bind:value={status}>\n\t\t\t\t\t\t\t<Select.Trigger id=\"status\" class=\"w-full\">\n\t\t\t\t\t\t\t\t{status ?? \"Select a status\"}\n\t\t\t\t\t\t\t</Select.Trigger>\n\t\t\t\t\t\t\t<Select.Content>\n\t\t\t\t\t\t\t\t<Select.Item value=\"Done\">Done</Select.Item>\n\t\t\t\t\t\t\t\t<Select.Item value=\"In Progress\">In Progress</Select.Item>\n\t\t\t\t\t\t\t\t<Select.Item value=\"Not Started\">Not Started</Select.Item>\n\t\t\t\t\t\t\t</Select.Content>\n\t\t\t\t\t\t</Select.Root>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"grid grid-cols-2 gap-4\">\n\t\t\t\t\t<div class=\"flex flex-col gap-3\">\n\t\t\t\t\t\t<Label for=\"target\">Target</Label>\n\t\t\t\t\t\t<Input id=\"target\" value={item.target} />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"flex flex-col gap-3\">\n\t\t\t\t\t\t<Label for=\"limit\">Limit</Label>\n\t\t\t\t\t\t<Input id=\"limit\" value={item.limit} />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"flex flex-col gap-3\">\n\t\t\t\t\t<Label for=\"reviewer\">Reviewer</Label>\n\t\t\t\t\t<Select.Root type=\"single\" bind:value={reviewer}>\n\t\t\t\t\t\t<Select.Trigger id=\"reviewer\" class=\"w-full\">\n\t\t\t\t\t\t\t{reviewer ?? \"Select a reviewer\"}\n\t\t\t\t\t\t</Select.Trigger>\n\t\t\t\t\t\t<Select.Content>\n\t\t\t\t\t\t\t<Select.Item value=\"Eddie Lake\">Eddie Lake</Select.Item>\n\t\t\t\t\t\t\t<Select.Item value=\"Jamik Tashpulatov\">Jamik Tashpulatov</Select.Item>\n\t\t\t\t\t\t\t<Select.Item value=\"Emily Whalen\">Emily Whalen</Select.Item>\n\t\t\t\t\t\t</Select.Content>\n\t\t\t\t\t</Select.Root>\n\t\t\t\t</div>\n\t\t\t</form>\n\t\t</div>\n\t\t<Drawer.Footer>\n\t\t\t<Button>Submit</Button>\n\t\t\t<Drawer.Close>\n\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t<Button variant=\"outline\" {...props}>Done</Button>\n\t\t\t\t{/snippet}\n\t\t\t</Drawer.Close>\n\t\t</Drawer.Footer>\n\t</Drawer.Content>\n</Drawer.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/dashboard-01/components/data-table-checkbox.svelte",
    "content": "<script lang=\"ts\">\n\timport { Checkbox } from \"$lib/registry/ui/checkbox/index.js\";\n\timport type { ComponentProps } from \"svelte\";\n\n\tlet {\n\t\tchecked = false,\n\t\tonCheckedChange = (v) => (checked = v),\n\t\t...restProps\n\t}: ComponentProps<typeof Checkbox> = $props();\n</script>\n\n<div class=\"flex items-center justify-center\">\n\t<Checkbox bind:checked={() => checked, onCheckedChange} {...restProps} />\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/dashboard-01/components/data-table-drag-handle.svelte",
    "content": "<script lang=\"ts\">\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport GripVerticalIcon from \"@tabler/icons-svelte/icons/grip-vertical\";\n\timport type { Attachment } from \"svelte/attachments\";\n\n\tlet { attach }: { attach?: Attachment } = $props();\n</script>\n\n<Button\n\t{@attach attach}\n\tvariant=\"ghost\"\n\tsize=\"icon\"\n\tclass=\"text-muted-foreground size-7 hover:bg-transparent\"\n>\n\t<GripVerticalIcon class=\"text-muted-foreground size-3\" />\n\t<span class=\"sr-only\">Drag to reorder</span>\n</Button>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/dashboard-01/components/data-table-header-limit.svelte",
    "content": "<div class=\"w-full text-end\">Limit</div>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/dashboard-01/components/data-table-header-target.svelte",
    "content": "<div class=\"w-full text-end\">Target</div>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/dashboard-01/components/data-table-limit.svelte",
    "content": "<script lang=\"ts\">\n\timport { Label } from \"$lib/registry/ui/label/index.js\";\n\timport { Input } from \"$lib/registry/ui/input/index.js\";\n\timport { toast } from \"svelte-sonner\";\n\timport type { Row } from \"@tanstack/table-core\";\n\timport type { Schema } from \"./schemas.js\";\n\n\tlet { row }: { row: Row<Schema> } = $props();\n</script>\n\n<form\n\tonsubmit={(e) => {\n\t\te.preventDefault();\n\t\ttoast.promise(new Promise((resolve) => setTimeout(resolve, 1000)), {\n\t\t\tloading: `Saving ${row.original.header}`,\n\t\t\tsuccess: \"Done\",\n\t\t\terror: \"Error\",\n\t\t});\n\t}}\n>\n\t<Label for=\"{row.original.id}-limit\" class=\"sr-only\">Limit</Label>\n\t<Input\n\t\tclass=\"hover:bg-input/30 focus-visible:bg-background dark:hover:bg-input/30 dark:focus-visible:bg-input/30 h-8 w-16 border-transparent bg-transparent text-end shadow-none focus-visible:border dark:bg-transparent\"\n\t\tvalue={row.original.limit}\n\t\tid=\"{row.original.id}-limit\"\n\t/>\n</form>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/dashboard-01/components/data-table-reviewer.svelte",
    "content": "<script lang=\"ts\">\n\timport type { Row } from \"@tanstack/table-core\";\n\timport type { Schema } from \"./schemas.js\";\n\timport { Label } from \"$lib/registry/ui/label/index.js\";\n\timport * as Select from \"$lib/registry/ui/select/index.js\";\n\n\tlet { row }: { row: Row<Schema> } = $props();\n\n\tconst isAssigned = $derived(row.original.reviewer !== \"Assign reviewer\");\n\tlet reviewer = $state(\"\");\n</script>\n\n{#if isAssigned}\n\t{row.original.reviewer}\n{:else}\n\t<Label for=\"{row.original.id}-reviewer\" class=\"sr-only\">Reviewer</Label>\n\t<Select.Root type=\"single\" bind:value={reviewer}>\n\t\t<Select.Trigger\n\t\t\tclass=\"w-38 **:data-[slot=select-value]:block **:data-[slot=select-value]:truncate\"\n\t\t\tsize=\"sm\"\n\t\t\tid=\"{row.original.id}-reviewer\"\n\t\t>\n\t\t\t<span data-slot=\"select-value\">\n\t\t\t\t{reviewer ?? \"Assign reviewer\"}\n\t\t\t</span>\n\t\t</Select.Trigger>\n\t\t<Select.Content align=\"end\">\n\t\t\t<Select.Item value=\"Eddie Lake\">Eddie Lake</Select.Item>\n\t\t\t<Select.Item value=\"Jamik Tashpulatov\">Jamik Tashpulatov</Select.Item>\n\t\t</Select.Content>\n\t</Select.Root>\n{/if}\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/dashboard-01/components/data-table-status.svelte",
    "content": "<script lang=\"ts\">\n\timport { Badge } from \"$lib/registry/ui/badge/index.js\";\n\timport CircleCheckFilledIcon from \"@tabler/icons-svelte/icons/circle-check-filled\";\n\timport LoaderIcon from \"@tabler/icons-svelte/icons/loader\";\n\timport type { Row } from \"@tanstack/table-core\";\n\timport type { Schema } from \"./schemas.js\";\n\n\tlet { row }: { row: Row<Schema> } = $props();\n</script>\n\n<Badge variant=\"outline\" class=\"text-muted-foreground px-1.5\">\n\t{#if row.original.status === \"Done\"}\n\t\t<CircleCheckFilledIcon class=\"fill-green-500 dark:fill-green-400\" />\n\t{:else}\n\t\t<LoaderIcon />\n\t{/if}\n\t{row.original.status}\n</Badge>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/dashboard-01/components/data-table-target.svelte",
    "content": "<script lang=\"ts\">\n\timport { Label } from \"$lib/registry/ui/label/index.js\";\n\timport { Input } from \"$lib/registry/ui/input/index.js\";\n\timport { toast } from \"svelte-sonner\";\n\timport type { Row } from \"@tanstack/table-core\";\n\timport type { Schema } from \"./schemas.js\";\n\n\tlet { row }: { row: Row<Schema> } = $props();\n</script>\n\n<form\n\tonsubmit={(e) => {\n\t\te.preventDefault();\n\t\ttoast.promise(new Promise((resolve) => setTimeout(resolve, 1000)), {\n\t\t\tloading: `Saving ${row.original.header}`,\n\t\t\tsuccess: \"Done\",\n\t\t\terror: \"Error\",\n\t\t});\n\t}}\n>\n\t<Label for=\"{row.original.id}-target\" class=\"sr-only\">Target</Label>\n\t<Input\n\t\tclass=\"hover:bg-input/30 focus-visible:bg-background dark:hover:bg-input/30 dark:focus-visible:bg-input/30 h-8 w-16 border-transparent bg-transparent text-end shadow-none focus-visible:border dark:bg-transparent\"\n\t\tvalue={row.original.target}\n\t\tid=\"{row.original.id}-target\"\n\t/>\n</form>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/dashboard-01/components/data-table-type.svelte",
    "content": "<script lang=\"ts\">\n\timport { Badge } from \"$lib/registry/ui/badge/index.js\";\n\timport type { Row } from \"@tanstack/table-core\";\n\timport type { Schema } from \"./schemas.js\";\n\n\tlet { row }: { row: Row<Schema> } = $props();\n</script>\n\n<div class=\"w-32\">\n\t<Badge variant=\"outline\" class=\"text-muted-foreground px-1.5\">\n\t\t{row.original.type}\n\t</Badge>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/dashboard-01/components/data-table.svelte",
    "content": "<script lang=\"ts\" module>\n\texport const columns: ColumnDef<Schema>[] = [\n\t\t{\n\t\t\tid: \"drag\",\n\t\t\theader: () => null,\n\t\t\tcell: () => renderComponent(DataTableDragHandle, {}),\n\t\t},\n\t\t{\n\t\t\tid: \"select\",\n\t\t\theader: ({ table }) =>\n\t\t\t\trenderComponent(DataTableCheckbox, {\n\t\t\t\t\tchecked: table.getIsAllPageRowsSelected(),\n\t\t\t\t\tindeterminate:\n\t\t\t\t\t\ttable.getIsSomePageRowsSelected() && !table.getIsAllPageRowsSelected(),\n\t\t\t\t\tonCheckedChange: (value) => table.toggleAllPageRowsSelected(!!value),\n\t\t\t\t\t\"aria-label\": \"Select all\",\n\t\t\t\t}),\n\t\t\tcell: ({ row }) =>\n\t\t\t\trenderComponent(DataTableCheckbox, {\n\t\t\t\t\tchecked: row.getIsSelected(),\n\t\t\t\t\tonCheckedChange: (value) => row.toggleSelected(!!value),\n\t\t\t\t\t\"aria-label\": \"Select row\",\n\t\t\t\t}),\n\t\t\tenableSorting: false,\n\t\t\tenableHiding: false,\n\t\t},\n\t\t{\n\t\t\taccessorKey: \"header\",\n\t\t\theader: \"Header\",\n\t\t\tcell: ({ row }) => renderComponent(DataTableCellViewer, { item: row.original }),\n\t\t\tenableHiding: false,\n\t\t},\n\t\t{\n\t\t\taccessorKey: \"type\",\n\t\t\theader: \"Section Type\",\n\t\t\tcell: ({ row }) => renderComponent(DataTableType, { row }),\n\t\t},\n\t\t{\n\t\t\taccessorKey: \"status\",\n\t\t\theader: \"Status\",\n\t\t\tcell: ({ row }) => renderComponent(DataTableStatus, { row }),\n\t\t},\n\t\t{\n\t\t\taccessorKey: \"target\",\n\t\t\theader: () => renderComponent(DataTableHeaderTarget, {}),\n\t\t\tcell: ({ row }) => renderComponent(DataTableTarget, { row }),\n\t\t},\n\t\t{\n\t\t\taccessorKey: \"limit\",\n\t\t\theader: () => renderComponent(DataTableHeaderLimit, {}),\n\t\t\tcell: ({ row }) => renderComponent(DataTableLimit, { row }),\n\t\t},\n\t\t{\n\t\t\taccessorKey: \"reviewer\",\n\t\t\theader: \"Reviewer\",\n\t\t\tcell: ({ row }) => renderComponent(DataTableReviewer, { row }),\n\t\t},\n\t\t{\n\t\t\tid: \"actions\",\n\t\t\tcell: () => renderComponent(DataTableActions, {}),\n\t\t},\n\t];\n</script>\n\n<script lang=\"ts\">\n\timport {\n\t\tgetCoreRowModel,\n\t\tgetFacetedRowModel,\n\t\tgetFacetedUniqueValues,\n\t\tgetFilteredRowModel,\n\t\tgetPaginationRowModel,\n\t\tgetSortedRowModel,\n\t\ttype ColumnDef,\n\t\ttype ColumnFiltersState,\n\t\ttype PaginationState,\n\t\ttype Row,\n\t\ttype RowSelectionState,\n\t\ttype SortingState,\n\t\ttype VisibilityState,\n\t} from \"@tanstack/table-core\";\n\timport type { Schema } from \"./schemas.js\";\n\timport { RestrictToVerticalAxis } from \"@dnd-kit/abstract/modifiers\";\n\timport { createSvelteTable } from \"$lib/registry/ui/data-table/data-table.svelte.js\";\n\timport * as Tabs from \"$lib/registry/ui/tabs/index.js\";\n\timport * as Table from \"$lib/registry/ui/table/index.js\";\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Select from \"$lib/registry/ui/select/index.js\";\n\timport { Label } from \"$lib/registry/ui/label/index.js\";\n\timport { FlexRender, renderComponent } from \"$lib/registry/ui/data-table/index.js\";\n\timport LayoutColumnsIcon from \"@tabler/icons-svelte/icons/layout-columns\";\n\timport ChevronDownIcon from \"@tabler/icons-svelte/icons/chevron-down\";\n\timport PlusIcon from \"@tabler/icons-svelte/icons/plus\";\n\timport ChevronsLeftIcon from \"@tabler/icons-svelte/icons/chevrons-left\";\n\timport ChevronLeftIcon from \"@tabler/icons-svelte/icons/chevron-left\";\n\timport ChevronRightIcon from \"@tabler/icons-svelte/icons/chevron-right\";\n\timport ChevronsRightIcon from \"@tabler/icons-svelte/icons/chevrons-right\";\n\timport DataTableCheckbox from \"./data-table-checkbox.svelte\";\n\timport DataTableCellViewer from \"./data-table-cell-viewer.svelte\";\n\timport DataTableReviewer from \"./data-table-reviewer.svelte\";\n\timport DataTableActions from \"./data-table-actions.svelte\";\n\timport DataTableDragHandle from \"./data-table-drag-handle.svelte\";\n\timport DataTableType from \"./data-table-type.svelte\";\n\timport DataTableStatus from \"./data-table-status.svelte\";\n\timport DataTableTarget from \"./data-table-target.svelte\";\n\timport DataTableLimit from \"./data-table-limit.svelte\";\n\timport DataTableHeaderTarget from \"./data-table-header-target.svelte\";\n\timport DataTableHeaderLimit from \"./data-table-header-limit.svelte\";\n\timport { DragDropProvider } from \"@dnd-kit-svelte/svelte\";\n\timport { move } from \"@dnd-kit/helpers\";\n\timport { useSortable } from \"@dnd-kit-svelte/svelte/sortable\";\n\timport { Badge } from \"$lib/registry/ui/badge/index.js\";\n\n\tlet { data }: { data: Schema[] } = $props();\n\tlet pagination = $state<PaginationState>({ pageIndex: 0, pageSize: 10 });\n\tlet sorting = $state<SortingState>([]);\n\tlet columnFilters = $state<ColumnFiltersState>([]);\n\tlet rowSelection = $state<RowSelectionState>({});\n\tlet columnVisibility = $state<VisibilityState>({});\n\n\tconst table = createSvelteTable({\n\t\tget data() {\n\t\t\treturn data;\n\t\t},\n\t\tcolumns,\n\t\tstate: {\n\t\t\tget pagination() {\n\t\t\t\treturn pagination;\n\t\t\t},\n\t\t\tget sorting() {\n\t\t\t\treturn sorting;\n\t\t\t},\n\t\t\tget columnVisibility() {\n\t\t\t\treturn columnVisibility;\n\t\t\t},\n\t\t\tget rowSelection() {\n\t\t\t\treturn rowSelection;\n\t\t\t},\n\t\t\tget columnFilters() {\n\t\t\t\treturn columnFilters;\n\t\t\t},\n\t\t},\n\t\tgetRowId: (row) => row.id.toString(),\n\t\tenableRowSelection: true,\n\t\tgetCoreRowModel: getCoreRowModel(),\n\t\tgetPaginationRowModel: getPaginationRowModel(),\n\t\tgetSortedRowModel: getSortedRowModel(),\n\t\tgetFacetedRowModel: getFacetedRowModel(),\n\t\tgetFacetedUniqueValues: getFacetedUniqueValues(),\n\t\tgetFilteredRowModel: getFilteredRowModel(),\n\t\tonPaginationChange: (updater) => {\n\t\t\tif (typeof updater === \"function\") {\n\t\t\t\tpagination = updater(pagination);\n\t\t\t} else {\n\t\t\t\tpagination = updater;\n\t\t\t}\n\t\t},\n\t\tonSortingChange: (updater) => {\n\t\t\tif (typeof updater === \"function\") {\n\t\t\t\tsorting = updater(sorting);\n\t\t\t} else {\n\t\t\t\tsorting = updater;\n\t\t\t}\n\t\t},\n\t\tonColumnFiltersChange: (updater) => {\n\t\t\tif (typeof updater === \"function\") {\n\t\t\t\tcolumnFilters = updater(columnFilters);\n\t\t\t} else {\n\t\t\t\tcolumnFilters = updater;\n\t\t\t}\n\t\t},\n\t\tonColumnVisibilityChange: (updater) => {\n\t\t\tif (typeof updater === \"function\") {\n\t\t\t\tcolumnVisibility = updater(columnVisibility);\n\t\t\t} else {\n\t\t\t\tcolumnVisibility = updater;\n\t\t\t}\n\t\t},\n\t\tonRowSelectionChange: (updater) => {\n\t\t\tif (typeof updater === \"function\") {\n\t\t\t\trowSelection = updater(rowSelection);\n\t\t\t} else {\n\t\t\t\trowSelection = updater;\n\t\t\t}\n\t\t},\n\t});\n\n\tlet views = [\n\t\t{\n\t\t\tid: \"outline\",\n\t\t\tlabel: \"Outline\",\n\t\t\tbadge: 0,\n\t\t},\n\t\t{\n\t\t\tid: \"past-performance\",\n\t\t\tlabel: \"Past Performance\",\n\t\t\tbadge: 3,\n\t\t},\n\t\t{\n\t\t\tid: \"key-personnel\",\n\t\t\tlabel: \"Key Personnel\",\n\t\t\tbadge: 2,\n\t\t},\n\t\t{\n\t\t\tid: \"focus-documents\",\n\t\t\tlabel: \"Focus Documents\",\n\t\t\tbadge: 0,\n\t\t},\n\t];\n\n\tlet view = $state(\"outline\");\n\tlet viewLabel = $derived(views.find((v) => view === v.id)?.label ?? \"Select a view\");\n</script>\n\n<Tabs.Root value=\"outline\" class=\"w-full flex-col justify-start gap-6\">\n\t<div class=\"flex items-center justify-between px-4 lg:px-6\">\n\t\t<Label for=\"view-selector\" class=\"sr-only\">View</Label>\n\t\t<Select.Root type=\"single\" bind:value={view}>\n\t\t\t<Select.Trigger class=\"flex w-fit @4xl/main:hidden\" size=\"sm\" id=\"view-selector\">\n\t\t\t\t{viewLabel}\n\t\t\t</Select.Trigger>\n\t\t\t<Select.Content>\n\t\t\t\t{#each views as view (view.id)}\n\t\t\t\t\t<Select.Item value={view.id}>{view.label}</Select.Item>\n\t\t\t\t{/each}\n\t\t\t</Select.Content>\n\t\t</Select.Root>\n\t\t<Tabs.List\n\t\t\tclass=\"**:data-[slot=badge]:bg-muted-foreground/30 hidden **:data-[slot=badge]:size-5 **:data-[slot=badge]:rounded-full **:data-[slot=badge]:px-1 @4xl/main:flex\"\n\t\t>\n\t\t\t{#each views as view (view.id)}\n\t\t\t\t<Tabs.Trigger value={view.id}>\n\t\t\t\t\t{view.label}\n\t\t\t\t\t{#if view.badge > 0}\n\t\t\t\t\t\t<Badge variant=\"secondary\">{view.badge}</Badge>\n\t\t\t\t\t{/if}\n\t\t\t\t</Tabs.Trigger>\n\t\t\t{/each}\n\t\t</Tabs.List>\n\t\t<div class=\"flex items-center gap-2\">\n\t\t\t<DropdownMenu.Root>\n\t\t\t\t<DropdownMenu.Trigger>\n\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t<Button variant=\"outline\" size=\"sm\" {...props}>\n\t\t\t\t\t\t\t<LayoutColumnsIcon />\n\t\t\t\t\t\t\t<span class=\"hidden lg:inline\">Customize Columns</span>\n\t\t\t\t\t\t\t<span class=\"lg:hidden\">Columns</span>\n\t\t\t\t\t\t\t<ChevronDownIcon />\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t{/snippet}\n\t\t\t\t</DropdownMenu.Trigger>\n\t\t\t\t<DropdownMenu.Content align=\"end\" class=\"w-56\">\n\t\t\t\t\t{#each table\n\t\t\t\t\t\t.getAllColumns()\n\t\t\t\t\t\t.filter((col) => typeof col.accessorFn !== \"undefined\" && col.getCanHide()) as column (column.id)}\n\t\t\t\t\t\t<DropdownMenu.CheckboxItem\n\t\t\t\t\t\t\tclass=\"capitalize\"\n\t\t\t\t\t\t\tchecked={column.getIsVisible()}\n\t\t\t\t\t\t\tonCheckedChange={(value) => column.toggleVisibility(!!value)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{column.id}\n\t\t\t\t\t\t</DropdownMenu.CheckboxItem>\n\t\t\t\t\t{/each}\n\t\t\t\t</DropdownMenu.Content>\n\t\t\t</DropdownMenu.Root>\n\t\t\t<Button variant=\"outline\" size=\"sm\">\n\t\t\t\t<PlusIcon />\n\t\t\t\t<span class=\"hidden lg:inline\">Add Section</span>\n\t\t\t</Button>\n\t\t</div>\n\t</div>\n\t<Tabs.Content value=\"outline\" class=\"relative flex flex-col gap-4 overflow-auto px-4 lg:px-6\">\n\t\t<div class=\"overflow-hidden rounded-lg border\">\n\t\t\t<DragDropProvider\n\t\t\t\tmodifiers={[\n\t\t\t\t\t// @ts-expect-error @dnd-kit/abstract types are botched atm\n\t\t\t\t\tRestrictToVerticalAxis,\n\t\t\t\t]}\n\t\t\t\tonDragEnd={(e) => (data = move(data, e))}\n\t\t\t>\n\t\t\t\t<Table.Root>\n\t\t\t\t\t<Table.Header class=\"bg-muted sticky top-0 z-10\">\n\t\t\t\t\t\t{#each table.getHeaderGroups() as headerGroup (headerGroup.id)}\n\t\t\t\t\t\t\t<Table.Row>\n\t\t\t\t\t\t\t\t{#each headerGroup.headers as header (header.id)}\n\t\t\t\t\t\t\t\t\t<Table.Head colspan={header.colSpan}>\n\t\t\t\t\t\t\t\t\t\t{#if !header.isPlaceholder}\n\t\t\t\t\t\t\t\t\t\t\t<FlexRender\n\t\t\t\t\t\t\t\t\t\t\t\tcontent={header.column.columnDef.header}\n\t\t\t\t\t\t\t\t\t\t\t\tcontext={header.getContext()}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\t\t\t</Table.Head>\n\t\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t</Table.Row>\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</Table.Header>\n\t\t\t\t\t<Table.Body class=\"**:data-[slot=table-cell]:first:w-8\">\n\t\t\t\t\t\t{#if table.getRowModel().rows?.length}\n\t\t\t\t\t\t\t{#each table.getRowModel().rows as row, index (row.id)}\n\t\t\t\t\t\t\t\t{@render DraggableRow({ row, index })}\n\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t{:else}\n\t\t\t\t\t\t\t<Table.Row>\n\t\t\t\t\t\t\t\t<Table.Cell colspan={columns.length} class=\"h-24 text-center\">\n\t\t\t\t\t\t\t\t\tNo results.\n\t\t\t\t\t\t\t\t</Table.Cell>\n\t\t\t\t\t\t\t</Table.Row>\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t</Table.Body>\n\t\t\t\t</Table.Root>\n\t\t\t</DragDropProvider>\n\t\t</div>\n\t\t<div class=\"flex items-center justify-between px-4\">\n\t\t\t<div class=\"text-muted-foreground hidden flex-1 text-sm lg:flex\">\n\t\t\t\t{table.getFilteredSelectedRowModel().rows.length} of\n\t\t\t\t{table.getFilteredRowModel().rows.length} row(s) selected.\n\t\t\t</div>\n\t\t\t<div class=\"flex w-full items-center gap-8 lg:w-fit\">\n\t\t\t\t<div class=\"hidden items-center gap-2 lg:flex\">\n\t\t\t\t\t<Label for=\"rows-per-page\" class=\"text-sm font-medium\">Rows per page</Label>\n\t\t\t\t\t<Select.Root\n\t\t\t\t\t\ttype=\"single\"\n\t\t\t\t\t\tbind:value={\n\t\t\t\t\t\t\t() => `${table.getState().pagination.pageSize}`,\n\t\t\t\t\t\t\t(v) => table.setPageSize(Number(v))\n\t\t\t\t\t\t}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Select.Trigger size=\"sm\" class=\"w-20\" id=\"rows-per-page\">\n\t\t\t\t\t\t\t{table.getState().pagination.pageSize}\n\t\t\t\t\t\t</Select.Trigger>\n\t\t\t\t\t\t<Select.Content side=\"top\">\n\t\t\t\t\t\t\t{#each [10, 20, 30, 40, 50] as pageSize (pageSize)}\n\t\t\t\t\t\t\t\t<Select.Item value={pageSize.toString()}>\n\t\t\t\t\t\t\t\t\t{pageSize}\n\t\t\t\t\t\t\t\t</Select.Item>\n\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t</Select.Content>\n\t\t\t\t\t</Select.Root>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"flex w-fit items-center justify-center text-sm font-medium\">\n\t\t\t\t\tPage {table.getState().pagination.pageIndex + 1} of\n\t\t\t\t\t{table.getPageCount()}\n\t\t\t\t</div>\n\t\t\t\t<div class=\"ms-auto flex items-center gap-2 lg:ms-0\">\n\t\t\t\t\t<Button\n\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\tclass=\"hidden h-8 w-8 p-0 lg:flex\"\n\t\t\t\t\t\tonclick={() => table.setPageIndex(0)}\n\t\t\t\t\t\tdisabled={!table.getCanPreviousPage()}\n\t\t\t\t\t>\n\t\t\t\t\t\t<span class=\"sr-only\">Go to first page</span>\n\t\t\t\t\t\t<ChevronsLeftIcon />\n\t\t\t\t\t</Button>\n\t\t\t\t\t<Button\n\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\tclass=\"size-8\"\n\t\t\t\t\t\tsize=\"icon\"\n\t\t\t\t\t\tonclick={() => table.previousPage()}\n\t\t\t\t\t\tdisabled={!table.getCanPreviousPage()}\n\t\t\t\t\t>\n\t\t\t\t\t\t<span class=\"sr-only\">Go to previous page</span>\n\t\t\t\t\t\t<ChevronLeftIcon />\n\t\t\t\t\t</Button>\n\t\t\t\t\t<Button\n\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\tclass=\"size-8\"\n\t\t\t\t\t\tsize=\"icon\"\n\t\t\t\t\t\tonclick={() => table.nextPage()}\n\t\t\t\t\t\tdisabled={!table.getCanNextPage()}\n\t\t\t\t\t>\n\t\t\t\t\t\t<span class=\"sr-only\">Go to next page</span>\n\t\t\t\t\t\t<ChevronRightIcon />\n\t\t\t\t\t</Button>\n\t\t\t\t\t<Button\n\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\tclass=\"hidden size-8 lg:flex\"\n\t\t\t\t\t\tsize=\"icon\"\n\t\t\t\t\t\tonclick={() => table.setPageIndex(table.getPageCount() - 1)}\n\t\t\t\t\t\tdisabled={!table.getCanNextPage()}\n\t\t\t\t\t>\n\t\t\t\t\t\t<span class=\"sr-only\">Go to last page</span>\n\t\t\t\t\t\t<ChevronsRightIcon />\n\t\t\t\t\t</Button>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</Tabs.Content>\n\t<Tabs.Content value=\"past-performance\" class=\"flex flex-col px-4 lg:px-6\">\n\t\t<div class=\"aspect-video w-full flex-1 rounded-lg border border-dashed\"></div>\n\t</Tabs.Content>\n\t<Tabs.Content value=\"key-personnel\" class=\"flex flex-col px-4 lg:px-6\">\n\t\t<div class=\"aspect-video w-full flex-1 rounded-lg border border-dashed\"></div>\n\t</Tabs.Content>\n\t<Tabs.Content value=\"focus-documents\" class=\"flex flex-col px-4 lg:px-6\">\n\t\t<div class=\"aspect-video w-full flex-1 rounded-lg border border-dashed\"></div>\n\t</Tabs.Content>\n</Tabs.Root>\n\n{#snippet DraggableRow({ row, index }: { row: Row<Schema>; index: number })}\n\t{@const { ref, isDragging, handleRef } = useSortable({\n\t\tid: row.original.id,\n\t\tindex: () => index,\n\t})}\n\n\t<Table.Row\n\t\tdata-state={row.getIsSelected() && \"selected\"}\n\t\tdata-dragging={isDragging.current}\n\t\tclass=\"relative z-0 data-[dragging=true]:z-10 data-[dragging=true]:opacity-80\"\n\t\t{@attach ref}\n\t>\n\t\t{#each row.getVisibleCells() as cell (cell.id)}\n\t\t\t<Table.Cell>\n\t\t\t\t<FlexRender\n\t\t\t\t\tattach={handleRef}\n\t\t\t\t\tcontent={cell.column.columnDef.cell}\n\t\t\t\t\tcontext={cell.getContext()}\n\t\t\t\t/>\n\t\t\t</Table.Cell>\n\t\t{/each}\n\t</Table.Row>\n{/snippet}\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/dashboard-01/components/nav-documents.svelte",
    "content": "<script lang=\"ts\">\n\timport DotsIcon from \"@tabler/icons-svelte/icons/dots\";\n\timport FolderIcon from \"@tabler/icons-svelte/icons/folder\";\n\timport Share3Icon from \"@tabler/icons-svelte/icons/share-3\";\n\timport TrashIcon from \"@tabler/icons-svelte/icons/trash\";\n\timport type { Icon } from \"@tabler/icons-svelte\";\n\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\n\tlet { items }: { items: { name: string; url: string; icon: Icon }[] } = $props();\n\n\tconst sidebar = Sidebar.useSidebar();\n</script>\n\n<Sidebar.Group class=\"group-data-[collapsible=icon]:hidden\">\n\t<Sidebar.GroupLabel>Documents</Sidebar.GroupLabel>\n\t<Sidebar.Menu>\n\t\t{#each items as item (item.name)}\n\t\t\t<Sidebar.MenuItem>\n\t\t\t\t<Sidebar.MenuButton>\n\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t<a {...props} href={item.url}>\n\t\t\t\t\t\t\t<item.icon />\n\t\t\t\t\t\t\t<span>{item.name}</span>\n\t\t\t\t\t\t</a>\n\t\t\t\t\t{/snippet}\n\t\t\t\t</Sidebar.MenuButton>\n\t\t\t\t<DropdownMenu.Root>\n\t\t\t\t\t<DropdownMenu.Trigger>\n\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t<Sidebar.MenuAction\n\t\t\t\t\t\t\t\t{...props}\n\t\t\t\t\t\t\t\tshowOnHover\n\t\t\t\t\t\t\t\tclass=\"data-[state=open]:bg-accent rounded-sm\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<DotsIcon />\n\t\t\t\t\t\t\t\t<span class=\"sr-only\">More</span>\n\t\t\t\t\t\t\t</Sidebar.MenuAction>\n\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t</DropdownMenu.Trigger>\n\t\t\t\t\t<DropdownMenu.Content\n\t\t\t\t\t\tclass=\"w-24 rounded-lg\"\n\t\t\t\t\t\tside={sidebar.isMobile ? \"bottom\" : \"right\"}\n\t\t\t\t\t\talign={sidebar.isMobile ? \"end\" : \"start\"}\n\t\t\t\t\t>\n\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t<FolderIcon />\n\t\t\t\t\t\t\t<span>Open</span>\n\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t<Share3Icon />\n\t\t\t\t\t\t\t<span>Share</span>\n\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t\t\t<DropdownMenu.Item variant=\"destructive\">\n\t\t\t\t\t\t\t<TrashIcon />\n\t\t\t\t\t\t\t<span>Delete</span>\n\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t</DropdownMenu.Content>\n\t\t\t\t</DropdownMenu.Root>\n\t\t\t</Sidebar.MenuItem>\n\t\t{/each}\n\t\t<Sidebar.MenuItem>\n\t\t\t<Sidebar.MenuButton class=\"text-sidebar-foreground/70\">\n\t\t\t\t<DotsIcon class=\"text-sidebar-foreground/70\" />\n\t\t\t\t<span>More</span>\n\t\t\t</Sidebar.MenuButton>\n\t\t</Sidebar.MenuItem>\n\t</Sidebar.Menu>\n</Sidebar.Group>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/dashboard-01/components/nav-main.svelte",
    "content": "<script lang=\"ts\">\n\timport CirclePlusFilledIcon from \"@tabler/icons-svelte/icons/circle-plus-filled\";\n\timport MailIcon from \"@tabler/icons-svelte/icons/mail\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\timport type { Icon } from \"@tabler/icons-svelte\";\n\n\tlet { items }: { items: { title: string; url: string; icon?: Icon }[] } = $props();\n</script>\n\n<Sidebar.Group>\n\t<Sidebar.GroupContent class=\"flex flex-col gap-2\">\n\t\t<Sidebar.Menu>\n\t\t\t<Sidebar.MenuItem class=\"flex items-center gap-2\">\n\t\t\t\t<Sidebar.MenuButton\n\t\t\t\t\tclass=\"bg-primary text-primary-foreground hover:bg-primary/90 hover:text-primary-foreground active:bg-primary/90 active:text-primary-foreground min-w-8 duration-200 ease-linear\"\n\t\t\t\t\ttooltipContent=\"Quick create\"\n\t\t\t\t>\n\t\t\t\t\t<CirclePlusFilledIcon />\n\t\t\t\t\t<span>Quick Create</span>\n\t\t\t\t</Sidebar.MenuButton>\n\t\t\t\t<Button\n\t\t\t\t\tsize=\"icon\"\n\t\t\t\t\tclass=\"size-8 group-data-[collapsible=icon]:opacity-0\"\n\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t>\n\t\t\t\t\t<MailIcon />\n\t\t\t\t\t<span class=\"sr-only\">Inbox</span>\n\t\t\t\t</Button>\n\t\t\t</Sidebar.MenuItem>\n\t\t</Sidebar.Menu>\n\t\t<Sidebar.Menu>\n\t\t\t{#each items as item (item.title)}\n\t\t\t\t<Sidebar.MenuItem>\n\t\t\t\t\t<Sidebar.MenuButton tooltipContent={item.title}>\n\t\t\t\t\t\t{#if item.icon}\n\t\t\t\t\t\t\t<item.icon />\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t<span>{item.title}</span>\n\t\t\t\t\t</Sidebar.MenuButton>\n\t\t\t\t</Sidebar.MenuItem>\n\t\t\t{/each}\n\t\t</Sidebar.Menu>\n\t</Sidebar.GroupContent>\n</Sidebar.Group>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/dashboard-01/components/nav-secondary.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\timport type { WithoutChildren } from \"$lib/utils.js\";\n\timport type { ComponentProps } from \"svelte\";\n\timport type { Icon } from \"@tabler/icons-svelte\";\n\n\tlet {\n\t\titems,\n\t\t...restProps\n\t}: { items: { title: string; url: string; icon: Icon }[] } & WithoutChildren<\n\t\tComponentProps<typeof Sidebar.Group>\n\t> = $props();\n</script>\n\n<Sidebar.Group {...restProps}>\n\t<Sidebar.GroupContent>\n\t\t<Sidebar.Menu>\n\t\t\t{#each items as item (item.title)}\n\t\t\t\t<Sidebar.MenuItem>\n\t\t\t\t\t<Sidebar.MenuButton>\n\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t<a href={item.url} {...props}>\n\t\t\t\t\t\t\t\t<item.icon />\n\t\t\t\t\t\t\t\t<span>{item.title}</span>\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t</Sidebar.MenuButton>\n\t\t\t\t</Sidebar.MenuItem>\n\t\t\t{/each}\n\t\t</Sidebar.Menu>\n\t</Sidebar.GroupContent>\n</Sidebar.Group>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/dashboard-01/components/nav-user.svelte",
    "content": "<script lang=\"ts\">\n\timport CreditCardIcon from \"@tabler/icons-svelte/icons/credit-card\";\n\timport DotsVerticalIcon from \"@tabler/icons-svelte/icons/dots-vertical\";\n\timport LogoutIcon from \"@tabler/icons-svelte/icons/logout\";\n\timport NotificationIcon from \"@tabler/icons-svelte/icons/notification\";\n\timport UserCircleIcon from \"@tabler/icons-svelte/icons/user-circle\";\n\timport * as Avatar from \"$lib/registry/ui/avatar/index.js\";\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\n\tlet { user }: { user: { name: string; email: string; avatar: string } } = $props();\n\n\tconst sidebar = Sidebar.useSidebar();\n</script>\n\n<Sidebar.Menu>\n\t<Sidebar.MenuItem>\n\t\t<DropdownMenu.Root>\n\t\t\t<DropdownMenu.Trigger>\n\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t<Sidebar.MenuButton\n\t\t\t\t\t\t{...props}\n\t\t\t\t\t\tsize=\"lg\"\n\t\t\t\t\t\tclass=\"data-[state=open]:bg-sidebar-accent data-[state=open]:text-sidebar-accent-foreground\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<Avatar.Root class=\"size-8 rounded-lg grayscale\">\n\t\t\t\t\t\t\t<Avatar.Image src={user.avatar} alt={user.name} />\n\t\t\t\t\t\t\t<Avatar.Fallback class=\"rounded-lg\">CN</Avatar.Fallback>\n\t\t\t\t\t\t</Avatar.Root>\n\t\t\t\t\t\t<div class=\"grid flex-1 text-start text-sm leading-tight\">\n\t\t\t\t\t\t\t<span class=\"truncate font-medium\">{user.name}</span>\n\t\t\t\t\t\t\t<span class=\"text-muted-foreground truncate text-xs\">\n\t\t\t\t\t\t\t\t{user.email}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<DotsVerticalIcon class=\"ms-auto size-4\" />\n\t\t\t\t\t</Sidebar.MenuButton>\n\t\t\t\t{/snippet}\n\t\t\t</DropdownMenu.Trigger>\n\t\t\t<DropdownMenu.Content\n\t\t\t\tclass=\"w-(--bits-dropdown-menu-anchor-width) min-w-56 rounded-lg\"\n\t\t\t\tside={sidebar.isMobile ? \"bottom\" : \"right\"}\n\t\t\t\talign=\"end\"\n\t\t\t\tsideOffset={4}\n\t\t\t>\n\t\t\t\t<DropdownMenu.Label class=\"p-0 font-normal\">\n\t\t\t\t\t<div class=\"flex items-center gap-2 px-1 py-1.5 text-start text-sm\">\n\t\t\t\t\t\t<Avatar.Root class=\"size-8 rounded-lg\">\n\t\t\t\t\t\t\t<Avatar.Image src={user.avatar} alt={user.name} />\n\t\t\t\t\t\t\t<Avatar.Fallback class=\"rounded-lg\">CN</Avatar.Fallback>\n\t\t\t\t\t\t</Avatar.Root>\n\t\t\t\t\t\t<div class=\"grid flex-1 text-start text-sm leading-tight\">\n\t\t\t\t\t\t\t<span class=\"truncate font-medium\">{user.name}</span>\n\t\t\t\t\t\t\t<span class=\"text-muted-foreground truncate text-xs\">\n\t\t\t\t\t\t\t\t{user.email}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</DropdownMenu.Label>\n\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t<DropdownMenu.Group>\n\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t<UserCircleIcon />\n\t\t\t\t\t\tAccount\n\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t<CreditCardIcon />\n\t\t\t\t\t\tBilling\n\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t<NotificationIcon />\n\t\t\t\t\t\tNotifications\n\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t</DropdownMenu.Group>\n\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t<LogoutIcon />\n\t\t\t\t\tLog out\n\t\t\t\t</DropdownMenu.Item>\n\t\t\t</DropdownMenu.Content>\n\t\t</DropdownMenu.Root>\n\t</Sidebar.MenuItem>\n</Sidebar.Menu>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/dashboard-01/components/schemas.ts",
    "content": "import { z } from \"zod\";\n\nexport const schema = z.object({\n\tid: z.number(),\n\theader: z.string(),\n\ttype: z.string(),\n\tstatus: z.string(),\n\ttarget: z.string(),\n\tlimit: z.string(),\n\treviewer: z.string(),\n});\n\nexport type Schema = z.infer<typeof schema>;\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/dashboard-01/components/section-cards.svelte",
    "content": "<script lang=\"ts\">\n\timport TrendingDownIcon from \"@tabler/icons-svelte/icons/trending-down\";\n\timport TrendingUpIcon from \"@tabler/icons-svelte/icons/trending-up\";\n\timport { Badge } from \"$lib/registry/ui/badge/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n</script>\n\n<div\n\tclass=\"*:data-[slot=card]:from-primary/5 *:data-[slot=card]:to-card dark:*:data-[slot=card]:bg-card grid grid-cols-1 gap-4 px-4 *:data-[slot=card]:bg-gradient-to-t *:data-[slot=card]:shadow-xs lg:px-6 @xl/main:grid-cols-2 @5xl/main:grid-cols-4\"\n>\n\t<Card.Root class=\"@container/card\">\n\t\t<Card.Header>\n\t\t\t<Card.Description>Total Revenue</Card.Description>\n\t\t\t<Card.Title class=\"text-2xl font-semibold tabular-nums @[250px]/card:text-3xl\">\n\t\t\t\t$1,250.00\n\t\t\t</Card.Title>\n\t\t\t<Card.Action>\n\t\t\t\t<Badge variant=\"outline\">\n\t\t\t\t\t<TrendingUpIcon />\n\t\t\t\t\t+12.5%\n\t\t\t\t</Badge>\n\t\t\t</Card.Action>\n\t\t</Card.Header>\n\t\t<Card.Footer class=\"flex-col items-start gap-1.5 text-sm\">\n\t\t\t<div class=\"line-clamp-1 flex gap-2 font-medium\">\n\t\t\t\tTrending up this month <TrendingUpIcon class=\"size-4\" />\n\t\t\t</div>\n\t\t\t<div class=\"text-muted-foreground\">Visitors for the last 6 months</div>\n\t\t</Card.Footer>\n\t</Card.Root>\n\t<Card.Root class=\"@container/card\">\n\t\t<Card.Header>\n\t\t\t<Card.Description>New Customers</Card.Description>\n\t\t\t<Card.Title class=\"text-2xl font-semibold tabular-nums @[250px]/card:text-3xl\">\n\t\t\t\t1,234\n\t\t\t</Card.Title>\n\t\t\t<Card.Action>\n\t\t\t\t<Badge variant=\"outline\">\n\t\t\t\t\t<TrendingDownIcon />\n\t\t\t\t\t-20%\n\t\t\t\t</Badge>\n\t\t\t</Card.Action>\n\t\t</Card.Header>\n\t\t<Card.Footer class=\"flex-col items-start gap-1.5 text-sm\">\n\t\t\t<div class=\"line-clamp-1 flex gap-2 font-medium\">\n\t\t\t\tDown 20% this period <TrendingDownIcon class=\"size-4\" />\n\t\t\t</div>\n\t\t\t<div class=\"text-muted-foreground\">Acquisition needs attention</div>\n\t\t</Card.Footer>\n\t</Card.Root>\n\t<Card.Root class=\"@container/card\">\n\t\t<Card.Header>\n\t\t\t<Card.Description>Active Accounts</Card.Description>\n\t\t\t<Card.Title class=\"text-2xl font-semibold tabular-nums @[250px]/card:text-3xl\">\n\t\t\t\t45,678\n\t\t\t</Card.Title>\n\t\t\t<Card.Action>\n\t\t\t\t<Badge variant=\"outline\">\n\t\t\t\t\t<TrendingUpIcon />\n\t\t\t\t\t+12.5%\n\t\t\t\t</Badge>\n\t\t\t</Card.Action>\n\t\t</Card.Header>\n\t\t<Card.Footer class=\"flex-col items-start gap-1.5 text-sm\">\n\t\t\t<div class=\"line-clamp-1 flex gap-2 font-medium\">\n\t\t\t\tStrong user retention <TrendingUpIcon class=\"size-4\" />\n\t\t\t</div>\n\t\t\t<div class=\"text-muted-foreground\">Engagement exceed targets</div>\n\t\t</Card.Footer>\n\t</Card.Root>\n\t<Card.Root class=\"@container/card\">\n\t\t<Card.Header>\n\t\t\t<Card.Description>Growth Rate</Card.Description>\n\t\t\t<Card.Title class=\"text-2xl font-semibold tabular-nums @[250px]/card:text-3xl\">\n\t\t\t\t4.5%\n\t\t\t</Card.Title>\n\t\t\t<Card.Action>\n\t\t\t\t<Badge variant=\"outline\">\n\t\t\t\t\t<TrendingUpIcon />\n\t\t\t\t\t+4.5%\n\t\t\t\t</Badge>\n\t\t\t</Card.Action>\n\t\t</Card.Header>\n\t\t<Card.Footer class=\"flex-col items-start gap-1.5 text-sm\">\n\t\t\t<div class=\"line-clamp-1 flex gap-2 font-medium\">\n\t\t\t\tSteady performance increase <TrendingUpIcon class=\"size-4\" />\n\t\t\t</div>\n\t\t\t<div class=\"text-muted-foreground\">Meets growth projections</div>\n\t\t</Card.Footer>\n\t</Card.Root>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/dashboard-01/components/site-header.svelte",
    "content": "<script lang=\"ts\">\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport { Separator } from \"$lib/registry/ui/separator/index.js\";\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n</script>\n\n<header\n\tclass=\"flex h-(--header-height) shrink-0 items-center gap-2 border-b transition-[width,height] ease-linear group-has-data-[collapsible=icon]/sidebar-wrapper:h-(--header-height)\"\n>\n\t<div class=\"flex w-full items-center gap-1 px-4 lg:gap-2 lg:px-6\">\n\t\t<Sidebar.Trigger class=\"-ms-1\" />\n\t\t<Separator orientation=\"vertical\" class=\"mx-2 data-[orientation=vertical]:h-4\" />\n\t\t<h1 class=\"text-base font-medium\">Documents</h1>\n\t\t<div class=\"ms-auto flex items-center gap-2\">\n\t\t\t<Button\n\t\t\t\thref=\"https://github.com/shadcn-ui/ui/tree/main/apps/v4/app/(examples)/dashboard\"\n\t\t\t\tvariant=\"ghost\"\n\t\t\t\tsize=\"sm\"\n\t\t\t\tclass=\"dark:text-foreground hidden sm:flex\"\n\t\t\t\ttarget=\"_blank\"\n\t\t\t\trel=\"noopener noreferrer\"\n\t\t\t>\n\t\t\t\tGitHub\n\t\t\t</Button>\n\t\t</div>\n\t</div>\n</header>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/dashboard-01/data.ts",
    "content": "export default [\n\t{\n\t\tid: 1,\n\t\theader: \"Cover page\",\n\t\ttype: \"Cover page\",\n\t\tstatus: \"In Process\",\n\t\ttarget: \"18\",\n\t\tlimit: \"5\",\n\t\treviewer: \"Eddie Lake\",\n\t},\n\t{\n\t\tid: 2,\n\t\theader: \"Table of contents\",\n\t\ttype: \"Table of contents\",\n\t\tstatus: \"Done\",\n\t\ttarget: \"29\",\n\t\tlimit: \"24\",\n\t\treviewer: \"Eddie Lake\",\n\t},\n\t{\n\t\tid: 3,\n\t\theader: \"Executive summary\",\n\t\ttype: \"Narrative\",\n\t\tstatus: \"Done\",\n\t\ttarget: \"10\",\n\t\tlimit: \"13\",\n\t\treviewer: \"Eddie Lake\",\n\t},\n\t{\n\t\tid: 4,\n\t\theader: \"Technical approach\",\n\t\ttype: \"Narrative\",\n\t\tstatus: \"Done\",\n\t\ttarget: \"27\",\n\t\tlimit: \"23\",\n\t\treviewer: \"Jamik Tashpulatov\",\n\t},\n\t{\n\t\tid: 5,\n\t\theader: \"Design\",\n\t\ttype: \"Narrative\",\n\t\tstatus: \"In Process\",\n\t\ttarget: \"2\",\n\t\tlimit: \"16\",\n\t\treviewer: \"Jamik Tashpulatov\",\n\t},\n\t{\n\t\tid: 6,\n\t\theader: \"Capabilities\",\n\t\ttype: \"Narrative\",\n\t\tstatus: \"In Process\",\n\t\ttarget: \"20\",\n\t\tlimit: \"8\",\n\t\treviewer: \"Jamik Tashpulatov\",\n\t},\n\t{\n\t\tid: 7,\n\t\theader: \"Integration with existing systems\",\n\t\ttype: \"Narrative\",\n\t\tstatus: \"In Process\",\n\t\ttarget: \"19\",\n\t\tlimit: \"21\",\n\t\treviewer: \"Jamik Tashpulatov\",\n\t},\n\t{\n\t\tid: 8,\n\t\theader: \"Innovation and Advantages\",\n\t\ttype: \"Narrative\",\n\t\tstatus: \"Done\",\n\t\ttarget: \"25\",\n\t\tlimit: \"26\",\n\t\treviewer: \"Assign reviewer\",\n\t},\n\t{\n\t\tid: 9,\n\t\theader: \"Overview of EMR's Innovative Solutions\",\n\t\ttype: \"Technical content\",\n\t\tstatus: \"Done\",\n\t\ttarget: \"7\",\n\t\tlimit: \"23\",\n\t\treviewer: \"Assign reviewer\",\n\t},\n\t{\n\t\tid: 10,\n\t\theader: \"Advanced Algorithms and Machine Learning\",\n\t\ttype: \"Narrative\",\n\t\tstatus: \"Done\",\n\t\ttarget: \"30\",\n\t\tlimit: \"28\",\n\t\treviewer: \"Assign reviewer\",\n\t},\n\t{\n\t\tid: 11,\n\t\theader: \"Adaptive Communication Protocols\",\n\t\ttype: \"Narrative\",\n\t\tstatus: \"Done\",\n\t\ttarget: \"9\",\n\t\tlimit: \"31\",\n\t\treviewer: \"Assign reviewer\",\n\t},\n\t{\n\t\tid: 12,\n\t\theader: \"Advantages Over Current Technologies\",\n\t\ttype: \"Narrative\",\n\t\tstatus: \"Done\",\n\t\ttarget: \"12\",\n\t\tlimit: \"0\",\n\t\treviewer: \"Assign reviewer\",\n\t},\n\t{\n\t\tid: 13,\n\t\theader: \"Past Performance\",\n\t\ttype: \"Narrative\",\n\t\tstatus: \"Done\",\n\t\ttarget: \"22\",\n\t\tlimit: \"33\",\n\t\treviewer: \"Assign reviewer\",\n\t},\n\t{\n\t\tid: 14,\n\t\theader: \"Customer Feedback and Satisfaction Levels\",\n\t\ttype: \"Narrative\",\n\t\tstatus: \"Done\",\n\t\ttarget: \"15\",\n\t\tlimit: \"34\",\n\t\treviewer: \"Assign reviewer\",\n\t},\n\t{\n\t\tid: 15,\n\t\theader: \"Implementation Challenges and Solutions\",\n\t\ttype: \"Narrative\",\n\t\tstatus: \"Done\",\n\t\ttarget: \"3\",\n\t\tlimit: \"35\",\n\t\treviewer: \"Assign reviewer\",\n\t},\n\t{\n\t\tid: 16,\n\t\theader: \"Security Measures and Data Protection Policies\",\n\t\ttype: \"Narrative\",\n\t\tstatus: \"In Process\",\n\t\ttarget: \"6\",\n\t\tlimit: \"36\",\n\t\treviewer: \"Assign reviewer\",\n\t},\n\t{\n\t\tid: 17,\n\t\theader: \"Scalability and Future Proofing\",\n\t\ttype: \"Narrative\",\n\t\tstatus: \"Done\",\n\t\ttarget: \"4\",\n\t\tlimit: \"37\",\n\t\treviewer: \"Assign reviewer\",\n\t},\n\t{\n\t\tid: 18,\n\t\theader: \"Cost-Benefit Analysis\",\n\t\ttype: \"Plain language\",\n\t\tstatus: \"Done\",\n\t\ttarget: \"14\",\n\t\tlimit: \"38\",\n\t\treviewer: \"Assign reviewer\",\n\t},\n\t{\n\t\tid: 19,\n\t\theader: \"User Training and Onboarding Experience\",\n\t\ttype: \"Narrative\",\n\t\tstatus: \"Done\",\n\t\ttarget: \"17\",\n\t\tlimit: \"39\",\n\t\treviewer: \"Assign reviewer\",\n\t},\n\t{\n\t\tid: 20,\n\t\theader: \"Future Development Roadmap\",\n\t\ttype: \"Narrative\",\n\t\tstatus: \"Done\",\n\t\ttarget: \"11\",\n\t\tlimit: \"40\",\n\t\treviewer: \"Assign reviewer\",\n\t},\n\t{\n\t\tid: 21,\n\t\theader: \"System Architecture Overview\",\n\t\ttype: \"Technical content\",\n\t\tstatus: \"In Process\",\n\t\ttarget: \"24\",\n\t\tlimit: \"18\",\n\t\treviewer: \"Maya Johnson\",\n\t},\n\t{\n\t\tid: 22,\n\t\theader: \"Risk Management Plan\",\n\t\ttype: \"Narrative\",\n\t\tstatus: \"Done\",\n\t\ttarget: \"15\",\n\t\tlimit: \"22\",\n\t\treviewer: \"Carlos Rodriguez\",\n\t},\n\t{\n\t\tid: 23,\n\t\theader: \"Compliance Documentation\",\n\t\ttype: \"Legal\",\n\t\tstatus: \"In Process\",\n\t\ttarget: \"31\",\n\t\tlimit: \"27\",\n\t\treviewer: \"Sarah Chen\",\n\t},\n\t{\n\t\tid: 24,\n\t\theader: \"API Documentation\",\n\t\ttype: \"Technical content\",\n\t\tstatus: \"Done\",\n\t\ttarget: \"8\",\n\t\tlimit: \"12\",\n\t\treviewer: \"Raj Patel\",\n\t},\n\t{\n\t\tid: 25,\n\t\theader: \"User Interface Mockups\",\n\t\ttype: \"Visual\",\n\t\tstatus: \"In Process\",\n\t\ttarget: \"19\",\n\t\tlimit: \"25\",\n\t\treviewer: \"Leila Ahmadi\",\n\t},\n\t{\n\t\tid: 26,\n\t\theader: \"Database Schema\",\n\t\ttype: \"Technical content\",\n\t\tstatus: \"Done\",\n\t\ttarget: \"22\",\n\t\tlimit: \"20\",\n\t\treviewer: \"Thomas Wilson\",\n\t},\n\t{\n\t\tid: 27,\n\t\theader: \"Testing Methodology\",\n\t\ttype: \"Technical content\",\n\t\tstatus: \"In Process\",\n\t\ttarget: \"17\",\n\t\tlimit: \"14\",\n\t\treviewer: \"Assign reviewer\",\n\t},\n\t{\n\t\tid: 28,\n\t\theader: \"Deployment Strategy\",\n\t\ttype: \"Narrative\",\n\t\tstatus: \"Done\",\n\t\ttarget: \"26\",\n\t\tlimit: \"30\",\n\t\treviewer: \"Eddie Lake\",\n\t},\n\t{\n\t\tid: 29,\n\t\theader: \"Budget Breakdown\",\n\t\ttype: \"Financial\",\n\t\tstatus: \"In Process\",\n\t\ttarget: \"13\",\n\t\tlimit: \"16\",\n\t\treviewer: \"Jamik Tashpulatov\",\n\t},\n\t{\n\t\tid: 30,\n\t\theader: \"Market Analysis\",\n\t\ttype: \"Research\",\n\t\tstatus: \"Done\",\n\t\ttarget: \"29\",\n\t\tlimit: \"32\",\n\t\treviewer: \"Sophia Martinez\",\n\t},\n\t{\n\t\tid: 31,\n\t\theader: \"Competitor Comparison\",\n\t\ttype: \"Research\",\n\t\tstatus: \"In Process\",\n\t\ttarget: \"21\",\n\t\tlimit: \"19\",\n\t\treviewer: \"Assign reviewer\",\n\t},\n\t{\n\t\tid: 32,\n\t\theader: \"Maintenance Plan\",\n\t\ttype: \"Technical content\",\n\t\tstatus: \"Done\",\n\t\ttarget: \"16\",\n\t\tlimit: \"23\",\n\t\treviewer: \"Alex Thompson\",\n\t},\n\t{\n\t\tid: 33,\n\t\theader: \"User Personas\",\n\t\ttype: \"Research\",\n\t\tstatus: \"In Process\",\n\t\ttarget: \"27\",\n\t\tlimit: \"24\",\n\t\treviewer: \"Nina Patel\",\n\t},\n\t{\n\t\tid: 34,\n\t\theader: \"Accessibility Compliance\",\n\t\ttype: \"Legal\",\n\t\tstatus: \"Done\",\n\t\ttarget: \"18\",\n\t\tlimit: \"21\",\n\t\treviewer: \"Assign reviewer\",\n\t},\n\t{\n\t\tid: 35,\n\t\theader: \"Performance Metrics\",\n\t\ttype: \"Technical content\",\n\t\tstatus: \"In Process\",\n\t\ttarget: \"23\",\n\t\tlimit: \"26\",\n\t\treviewer: \"David Kim\",\n\t},\n\t{\n\t\tid: 36,\n\t\theader: \"Disaster Recovery Plan\",\n\t\ttype: \"Technical content\",\n\t\tstatus: \"Done\",\n\t\ttarget: \"14\",\n\t\tlimit: \"17\",\n\t\treviewer: \"Jamik Tashpulatov\",\n\t},\n\t{\n\t\tid: 37,\n\t\theader: \"Third-party Integrations\",\n\t\ttype: \"Technical content\",\n\t\tstatus: \"In Process\",\n\t\ttarget: \"25\",\n\t\tlimit: \"28\",\n\t\treviewer: \"Eddie Lake\",\n\t},\n\t{\n\t\tid: 38,\n\t\theader: \"User Feedback Summary\",\n\t\ttype: \"Research\",\n\t\tstatus: \"Done\",\n\t\ttarget: \"20\",\n\t\tlimit: \"15\",\n\t\treviewer: \"Assign reviewer\",\n\t},\n\t{\n\t\tid: 39,\n\t\theader: \"Localization Strategy\",\n\t\ttype: \"Narrative\",\n\t\tstatus: \"In Process\",\n\t\ttarget: \"12\",\n\t\tlimit: \"19\",\n\t\treviewer: \"Maria Garcia\",\n\t},\n\t{\n\t\tid: 40,\n\t\theader: \"Mobile Compatibility\",\n\t\ttype: \"Technical content\",\n\t\tstatus: \"Done\",\n\t\ttarget: \"28\",\n\t\tlimit: \"31\",\n\t\treviewer: \"James Wilson\",\n\t},\n\t{\n\t\tid: 41,\n\t\theader: \"Data Migration Plan\",\n\t\ttype: \"Technical content\",\n\t\tstatus: \"In Process\",\n\t\ttarget: \"19\",\n\t\tlimit: \"22\",\n\t\treviewer: \"Assign reviewer\",\n\t},\n\t{\n\t\tid: 42,\n\t\theader: \"Quality Assurance Protocols\",\n\t\ttype: \"Technical content\",\n\t\tstatus: \"Done\",\n\t\ttarget: \"30\",\n\t\tlimit: \"33\",\n\t\treviewer: \"Priya Singh\",\n\t},\n\t{\n\t\tid: 43,\n\t\theader: \"Stakeholder Analysis\",\n\t\ttype: \"Research\",\n\t\tstatus: \"In Process\",\n\t\ttarget: \"11\",\n\t\tlimit: \"14\",\n\t\treviewer: \"Eddie Lake\",\n\t},\n\t{\n\t\tid: 44,\n\t\theader: \"Environmental Impact Assessment\",\n\t\ttype: \"Research\",\n\t\tstatus: \"Done\",\n\t\ttarget: \"24\",\n\t\tlimit: \"27\",\n\t\treviewer: \"Assign reviewer\",\n\t},\n\t{\n\t\tid: 45,\n\t\theader: \"Intellectual Property Rights\",\n\t\ttype: \"Legal\",\n\t\tstatus: \"In Process\",\n\t\ttarget: \"17\",\n\t\tlimit: \"20\",\n\t\treviewer: \"Sarah Johnson\",\n\t},\n\t{\n\t\tid: 46,\n\t\theader: \"Customer Support Framework\",\n\t\ttype: \"Narrative\",\n\t\tstatus: \"Done\",\n\t\ttarget: \"22\",\n\t\tlimit: \"25\",\n\t\treviewer: \"Jamik Tashpulatov\",\n\t},\n\t{\n\t\tid: 47,\n\t\theader: \"Version Control Strategy\",\n\t\ttype: \"Technical content\",\n\t\tstatus: \"In Process\",\n\t\ttarget: \"15\",\n\t\tlimit: \"18\",\n\t\treviewer: \"Assign reviewer\",\n\t},\n\t{\n\t\tid: 48,\n\t\theader: \"Continuous Integration Pipeline\",\n\t\ttype: \"Technical content\",\n\t\tstatus: \"Done\",\n\t\ttarget: \"26\",\n\t\tlimit: \"29\",\n\t\treviewer: \"Michael Chen\",\n\t},\n\t{\n\t\tid: 49,\n\t\theader: \"Regulatory Compliance\",\n\t\ttype: \"Legal\",\n\t\tstatus: \"In Process\",\n\t\ttarget: \"13\",\n\t\tlimit: \"16\",\n\t\treviewer: \"Assign reviewer\",\n\t},\n\t{\n\t\tid: 50,\n\t\theader: \"User Authentication System\",\n\t\ttype: \"Technical content\",\n\t\tstatus: \"Done\",\n\t\ttarget: \"28\",\n\t\tlimit: \"31\",\n\t\treviewer: \"Eddie Lake\",\n\t},\n\t{\n\t\tid: 51,\n\t\theader: \"Data Analytics Framework\",\n\t\ttype: \"Technical content\",\n\t\tstatus: \"In Process\",\n\t\ttarget: \"21\",\n\t\tlimit: \"24\",\n\t\treviewer: \"Jamik Tashpulatov\",\n\t},\n\t{\n\t\tid: 52,\n\t\theader: \"Cloud Infrastructure\",\n\t\ttype: \"Technical content\",\n\t\tstatus: \"Done\",\n\t\ttarget: \"16\",\n\t\tlimit: \"19\",\n\t\treviewer: \"Assign reviewer\",\n\t},\n\t{\n\t\tid: 53,\n\t\theader: \"Network Security Measures\",\n\t\ttype: \"Technical content\",\n\t\tstatus: \"In Process\",\n\t\ttarget: \"29\",\n\t\tlimit: \"32\",\n\t\treviewer: \"Lisa Wong\",\n\t},\n\t{\n\t\tid: 54,\n\t\theader: \"Project Timeline\",\n\t\ttype: \"Planning\",\n\t\tstatus: \"Done\",\n\t\ttarget: \"14\",\n\t\tlimit: \"17\",\n\t\treviewer: \"Eddie Lake\",\n\t},\n\t{\n\t\tid: 55,\n\t\theader: \"Resource Allocation\",\n\t\ttype: \"Planning\",\n\t\tstatus: \"In Process\",\n\t\ttarget: \"27\",\n\t\tlimit: \"30\",\n\t\treviewer: \"Assign reviewer\",\n\t},\n\t{\n\t\tid: 56,\n\t\theader: \"Team Structure and Roles\",\n\t\ttype: \"Planning\",\n\t\tstatus: \"Done\",\n\t\ttarget: \"20\",\n\t\tlimit: \"23\",\n\t\treviewer: \"Jamik Tashpulatov\",\n\t},\n\t{\n\t\tid: 57,\n\t\theader: \"Communication Protocols\",\n\t\ttype: \"Planning\",\n\t\tstatus: \"In Process\",\n\t\ttarget: \"15\",\n\t\tlimit: \"18\",\n\t\treviewer: \"Assign reviewer\",\n\t},\n\t{\n\t\tid: 58,\n\t\theader: \"Success Metrics\",\n\t\ttype: \"Planning\",\n\t\tstatus: \"Done\",\n\t\ttarget: \"30\",\n\t\tlimit: \"33\",\n\t\treviewer: \"Eddie Lake\",\n\t},\n\t{\n\t\tid: 59,\n\t\theader: \"Internationalization Support\",\n\t\ttype: \"Technical content\",\n\t\tstatus: \"In Process\",\n\t\ttarget: \"23\",\n\t\tlimit: \"26\",\n\t\treviewer: \"Jamik Tashpulatov\",\n\t},\n\t{\n\t\tid: 60,\n\t\theader: \"Backup and Recovery Procedures\",\n\t\ttype: \"Technical content\",\n\t\tstatus: \"Done\",\n\t\ttarget: \"18\",\n\t\tlimit: \"21\",\n\t\treviewer: \"Assign reviewer\",\n\t},\n\t{\n\t\tid: 61,\n\t\theader: \"Monitoring and Alerting System\",\n\t\ttype: \"Technical content\",\n\t\tstatus: \"In Process\",\n\t\ttarget: \"25\",\n\t\tlimit: \"28\",\n\t\treviewer: \"Daniel Park\",\n\t},\n\t{\n\t\tid: 62,\n\t\theader: \"Code Review Guidelines\",\n\t\ttype: \"Technical content\",\n\t\tstatus: \"Done\",\n\t\ttarget: \"12\",\n\t\tlimit: \"15\",\n\t\treviewer: \"Eddie Lake\",\n\t},\n\t{\n\t\tid: 63,\n\t\theader: \"Documentation Standards\",\n\t\ttype: \"Technical content\",\n\t\tstatus: \"In Process\",\n\t\ttarget: \"27\",\n\t\tlimit: \"30\",\n\t\treviewer: \"Jamik Tashpulatov\",\n\t},\n\t{\n\t\tid: 64,\n\t\theader: \"Release Management Process\",\n\t\ttype: \"Planning\",\n\t\tstatus: \"Done\",\n\t\ttarget: \"22\",\n\t\tlimit: \"25\",\n\t\treviewer: \"Assign reviewer\",\n\t},\n\t{\n\t\tid: 65,\n\t\theader: \"Feature Prioritization Matrix\",\n\t\ttype: \"Planning\",\n\t\tstatus: \"In Process\",\n\t\ttarget: \"19\",\n\t\tlimit: \"22\",\n\t\treviewer: \"Emma Davis\",\n\t},\n\t{\n\t\tid: 66,\n\t\theader: \"Technical Debt Assessment\",\n\t\ttype: \"Technical content\",\n\t\tstatus: \"Done\",\n\t\ttarget: \"24\",\n\t\tlimit: \"27\",\n\t\treviewer: \"Eddie Lake\",\n\t},\n\t{\n\t\tid: 67,\n\t\theader: \"Capacity Planning\",\n\t\ttype: \"Planning\",\n\t\tstatus: \"In Process\",\n\t\ttarget: \"21\",\n\t\tlimit: \"24\",\n\t\treviewer: \"Jamik Tashpulatov\",\n\t},\n\t{\n\t\tid: 68,\n\t\theader: \"Service Level Agreements\",\n\t\ttype: \"Legal\",\n\t\tstatus: \"Done\",\n\t\ttarget: \"26\",\n\t\tlimit: \"29\",\n\t\treviewer: \"Assign reviewer\",\n\t},\n];\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/demo-sidebar-controlled.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport PanelLeftOpenIcon from \"@lucide/svelte/icons/panel-left-open\";\n\timport PanelLeftCloseIcon from \"@lucide/svelte/icons/panel-left-close\";\n\timport LifeBuoyIcon from \"@lucide/svelte/icons/life-buoy\";\n\timport SendIcon from \"@lucide/svelte/icons/send\";\n\timport FrameIcon from \"@lucide/svelte/icons/frame\";\n\timport ChartPieIcon from \"@lucide/svelte/icons/chart-pie\";\n\timport MapIcon from \"@lucide/svelte/icons/map\";\n\n\tconst projects = [\n\t\t{\n\t\t\tname: \"Design Engineering\",\n\t\t\turl: \"#\",\n\t\t\ticon: FrameIcon,\n\t\t},\n\t\t{\n\t\t\tname: \"Sales & Marketing\",\n\t\t\turl: \"#\",\n\t\t\ticon: ChartPieIcon,\n\t\t},\n\t\t{\n\t\t\tname: \"Travel\",\n\t\t\turl: \"#\",\n\t\t\ticon: MapIcon,\n\t\t},\n\t\t{\n\t\t\tname: \"Support\",\n\t\t\turl: \"#\",\n\t\t\ticon: LifeBuoyIcon,\n\t\t},\n\t\t{\n\t\t\tname: \"Feedback\",\n\t\t\turl: \"#\",\n\t\t\ticon: SendIcon,\n\t\t},\n\t];\n\n\tlet open = $state(true);\n</script>\n\n<Sidebar.Provider bind:open={() => open, (v) => (open = v)}>\n\t<Sidebar.Root>\n\t\t<Sidebar.Content>\n\t\t\t<Sidebar.Group>\n\t\t\t\t<Sidebar.GroupLabel>Projects</Sidebar.GroupLabel>\n\t\t\t\t<Sidebar.GroupContent>\n\t\t\t\t\t<Sidebar.Menu>\n\t\t\t\t\t\t{#each projects as project (project.name)}\n\t\t\t\t\t\t\t<Sidebar.MenuItem>\n\t\t\t\t\t\t\t\t<Sidebar.MenuButton>\n\t\t\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t\t\t<a href={project.url} {...props}>\n\t\t\t\t\t\t\t\t\t\t\t<project.icon />\n\t\t\t\t\t\t\t\t\t\t\t<span>{project.name}</span>\n\t\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t\t\t</Sidebar.MenuButton>\n\t\t\t\t\t\t\t</Sidebar.MenuItem>\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</Sidebar.Menu>\n\t\t\t\t</Sidebar.GroupContent>\n\t\t\t</Sidebar.Group>\n\t\t</Sidebar.Content>\n\t</Sidebar.Root>\n\t<Sidebar.Inset>\n\t\t<header class=\"flex h-12 items-center justify-between px-4\">\n\t\t\t<Button onclick={() => (open = !open)} size=\"sm\" variant=\"ghost\">\n\t\t\t\t{#if open}\n\t\t\t\t\t<PanelLeftCloseIcon />\n\t\t\t\t{:else}\n\t\t\t\t\t<PanelLeftOpenIcon />\n\t\t\t\t{/if}\n\t\t\t\t<span>{open ? \"Close\" : \"Open\"} Sidebar</span>\n\t\t\t</Button>\n\t\t</header>\n\t</Sidebar.Inset>\n</Sidebar.Provider>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/demo-sidebar-footer.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\timport ChevronUpIcon from \"@lucide/svelte/icons/chevron-up\";\n</script>\n\n<Sidebar.Provider>\n\t<Sidebar.Root>\n\t\t<Sidebar.Header />\n\t\t<Sidebar.Content />\n\t\t<Sidebar.Footer>\n\t\t\t<Sidebar.Menu>\n\t\t\t\t<Sidebar.MenuItem>\n\t\t\t\t\t<DropdownMenu.Root>\n\t\t\t\t\t\t<DropdownMenu.Trigger>\n\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t<Sidebar.MenuButton\n\t\t\t\t\t\t\t\t\t{...props}\n\t\t\t\t\t\t\t\t\tclass=\"data-[state=open]:bg-sidebar-accent data-[state=open]:text-sidebar-accent-foreground\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\tUsername\n\t\t\t\t\t\t\t\t\t<ChevronUpIcon class=\"ms-auto\" />\n\t\t\t\t\t\t\t\t</Sidebar.MenuButton>\n\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t</DropdownMenu.Trigger>\n\t\t\t\t\t\t<DropdownMenu.Content\n\t\t\t\t\t\t\tside=\"top\"\n\t\t\t\t\t\t\tclass=\"w-(--bits-dropdown-menu-anchor-width)\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t\t<span>Account</span>\n\t\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t\t<span>Billing</span>\n\t\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t\t<span>Sign out</span>\n\t\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t</DropdownMenu.Content>\n\t\t\t\t\t</DropdownMenu.Root>\n\t\t\t\t</Sidebar.MenuItem>\n\t\t\t</Sidebar.Menu>\n\t\t</Sidebar.Footer>\n\t</Sidebar.Root>\n\t<Sidebar.Inset>\n\t\t<header class=\"flex h-12 items-center justify-between px-4\">\n\t\t\t<Sidebar.Trigger />\n\t\t</header>\n\t</Sidebar.Inset>\n</Sidebar.Provider>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/demo-sidebar-group-action.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\timport { Toaster } from \"$lib/registry/ui/sonner/index.js\";\n\timport PlusIcon from \"@lucide/svelte/icons/plus\";\n\timport FrameIcon from \"@lucide/svelte/icons/frame\";\n\timport ChartPieIcon from \"@lucide/svelte/icons/chart-pie\";\n\timport MapIcon from \"@lucide/svelte/icons/map\";\n\timport { toast } from \"svelte-sonner\";\n</script>\n\n<Sidebar.Provider>\n\t<Toaster\n\t\tposition=\"bottom-left\"\n\t\ttoastOptions={{\n\t\t\tclass: \"ms-[160px]\",\n\t\t}}\n\t/>\n\t<Sidebar.Root>\n\t\t<Sidebar.Content>\n\t\t\t<Sidebar.Group>\n\t\t\t\t<Sidebar.GroupLabel>Projects</Sidebar.GroupLabel>\n\t\t\t\t<Sidebar.GroupAction\n\t\t\t\t\ttitle=\"Add Project\"\n\t\t\t\t\tonclick={() => toast(\"You clicked the group action!\")}\n\t\t\t\t>\n\t\t\t\t\t<PlusIcon /> <span class=\"sr-only\">Add Project</span>\n\t\t\t\t</Sidebar.GroupAction>\n\t\t\t\t<Sidebar.GroupContent>\n\t\t\t\t\t<Sidebar.Menu>\n\t\t\t\t\t\t<Sidebar.MenuItem>\n\t\t\t\t\t\t\t<Sidebar.MenuButton>\n\t\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t\t<a href=\"##\" {...props}>\n\t\t\t\t\t\t\t\t\t\t<FrameIcon />\n\t\t\t\t\t\t\t\t\t\t<span>Design Engineering</span>\n\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t\t</Sidebar.MenuButton>\n\t\t\t\t\t\t</Sidebar.MenuItem>\n\t\t\t\t\t\t<Sidebar.MenuItem>\n\t\t\t\t\t\t\t<Sidebar.MenuButton>\n\t\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t\t<a href=\"##\" {...props}>\n\t\t\t\t\t\t\t\t\t\t<ChartPieIcon />\n\t\t\t\t\t\t\t\t\t\t<span>Sales & Marketing</span>\n\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t\t</Sidebar.MenuButton>\n\t\t\t\t\t\t</Sidebar.MenuItem>\n\t\t\t\t\t\t<Sidebar.MenuItem>\n\t\t\t\t\t\t\t<Sidebar.MenuButton>\n\t\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t\t<a href=\"##\" {...props}>\n\t\t\t\t\t\t\t\t\t\t<MapIcon />\n\t\t\t\t\t\t\t\t\t\t<span>Travel</span>\n\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t\t</Sidebar.MenuButton>\n\t\t\t\t\t\t</Sidebar.MenuItem>\n\t\t\t\t\t</Sidebar.Menu>\n\t\t\t\t</Sidebar.GroupContent>\n\t\t\t</Sidebar.Group>\n\t\t</Sidebar.Content>\n\t</Sidebar.Root>\n</Sidebar.Provider>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/demo-sidebar-group-collapsible.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\timport * as Collapsible from \"$lib/registry/ui/collapsible/index.js\";\n\timport ChevronDownIcon from \"@lucide/svelte/icons/chevron-down\";\n\timport LifeBuoyIcon from \"@lucide/svelte/icons/life-buoy\";\n\timport SendIcon from \"@lucide/svelte/icons/send\";\n</script>\n\n<Sidebar.Provider>\n\t<Sidebar.Root>\n\t\t<Sidebar.Content>\n\t\t\t<Collapsible.Root open class=\"group/collapsible\">\n\t\t\t\t<Sidebar.Group>\n\t\t\t\t\t<Sidebar.GroupLabel\n\t\t\t\t\t\tclass=\"hover:bg-sidebar-accent hover:text-sidebar-accent-foreground text-sm\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t<Collapsible.Trigger {...props}>\n\t\t\t\t\t\t\t\tHelp\n\t\t\t\t\t\t\t\t<ChevronDownIcon\n\t\t\t\t\t\t\t\t\tclass=\"ms-auto transition-transform group-data-[state=open]/collapsible:rotate-180\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</Collapsible.Trigger>\n\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t</Sidebar.GroupLabel>\n\t\t\t\t\t<Collapsible.Content>\n\t\t\t\t\t\t<Sidebar.GroupContent>\n\t\t\t\t\t\t\t<Sidebar.Menu>\n\t\t\t\t\t\t\t\t<Sidebar.MenuItem>\n\t\t\t\t\t\t\t\t\t<Sidebar.MenuButton>\n\t\t\t\t\t\t\t\t\t\t<LifeBuoyIcon />\n\t\t\t\t\t\t\t\t\t\tSupport\n\t\t\t\t\t\t\t\t\t</Sidebar.MenuButton>\n\t\t\t\t\t\t\t\t</Sidebar.MenuItem>\n\t\t\t\t\t\t\t\t<Sidebar.MenuItem>\n\t\t\t\t\t\t\t\t\t<Sidebar.MenuButton>\n\t\t\t\t\t\t\t\t\t\t<SendIcon />\n\t\t\t\t\t\t\t\t\t\tFeedback\n\t\t\t\t\t\t\t\t\t</Sidebar.MenuButton>\n\t\t\t\t\t\t\t\t</Sidebar.MenuItem>\n\t\t\t\t\t\t\t</Sidebar.Menu>\n\t\t\t\t\t\t</Sidebar.GroupContent>\n\t\t\t\t\t</Collapsible.Content>\n\t\t\t\t</Sidebar.Group>\n\t\t\t</Collapsible.Root>\n\t\t</Sidebar.Content>\n\t</Sidebar.Root>\n</Sidebar.Provider>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/demo-sidebar-group.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\timport LifeBuoyIcon from \"@lucide/svelte/icons/life-buoy\";\n\timport SendIcon from \"@lucide/svelte/icons/send\";\n</script>\n\n<Sidebar.Provider>\n\t<Sidebar.Root>\n\t\t<Sidebar.Content>\n\t\t\t<Sidebar.Group>\n\t\t\t\t<Sidebar.GroupLabel>Help</Sidebar.GroupLabel>\n\t\t\t\t<Sidebar.GroupContent>\n\t\t\t\t\t<Sidebar.Menu>\n\t\t\t\t\t\t<Sidebar.MenuItem>\n\t\t\t\t\t\t\t<Sidebar.MenuButton>\n\t\t\t\t\t\t\t\t<LifeBuoyIcon />\n\t\t\t\t\t\t\t\tSupport\n\t\t\t\t\t\t\t</Sidebar.MenuButton>\n\t\t\t\t\t\t</Sidebar.MenuItem>\n\t\t\t\t\t\t<Sidebar.MenuItem>\n\t\t\t\t\t\t\t<Sidebar.MenuButton>\n\t\t\t\t\t\t\t\t<SendIcon />\n\t\t\t\t\t\t\t\tFeedback\n\t\t\t\t\t\t\t</Sidebar.MenuButton>\n\t\t\t\t\t\t</Sidebar.MenuItem>\n\t\t\t\t\t</Sidebar.Menu>\n\t\t\t\t</Sidebar.GroupContent>\n\t\t\t</Sidebar.Group>\n\t\t</Sidebar.Content>\n\t</Sidebar.Root>\n</Sidebar.Provider>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/demo-sidebar-header.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\timport ChevronDownIcon from \"@lucide/svelte/icons/chevron-down\";\n</script>\n\n<Sidebar.Provider>\n\t<Sidebar.Root>\n\t\t<Sidebar.Header>\n\t\t\t<Sidebar.Menu>\n\t\t\t\t<Sidebar.MenuItem>\n\t\t\t\t\t<DropdownMenu.Root>\n\t\t\t\t\t\t<DropdownMenu.Trigger>\n\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t<Sidebar.MenuButton\n\t\t\t\t\t\t\t\t\t{...props}\n\t\t\t\t\t\t\t\t\tclass=\"data-[state=open]:bg-sidebar-accent data-[state=open]:text-sidebar-accent-foreground\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\tSelect Workspace\n\t\t\t\t\t\t\t\t\t<ChevronDownIcon class=\"ms-auto\" />\n\t\t\t\t\t\t\t\t</Sidebar.MenuButton>\n\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t</DropdownMenu.Trigger>\n\t\t\t\t\t\t<DropdownMenu.Content class=\"w-(--bits-dropdown-menu-anchor-width)\">\n\t\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t\t<span>Acme Inc</span>\n\t\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t\t<span>Acme Corp.</span>\n\t\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t</DropdownMenu.Content>\n\t\t\t\t\t</DropdownMenu.Root>\n\t\t\t\t</Sidebar.MenuItem>\n\t\t\t</Sidebar.Menu>\n\t\t</Sidebar.Header>\n\t</Sidebar.Root>\n\t<Sidebar.Inset>\n\t\t<header class=\"flex h-12 items-center justify-between px-4\">\n\t\t\t<Sidebar.Trigger />\n\t\t</header>\n\t</Sidebar.Inset>\n</Sidebar.Provider>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/demo-sidebar-menu-action.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\timport EllipsisIcon from \"@lucide/svelte/icons/ellipsis\";\n\timport LifeBuoyIcon from \"@lucide/svelte/icons/life-buoy\";\n\timport SendIcon from \"@lucide/svelte/icons/send\";\n\timport FrameIcon from \"@lucide/svelte/icons/frame\";\n\timport ChartPieIcon from \"@lucide/svelte/icons/chart-pie\";\n\timport MapIcon from \"@lucide/svelte/icons/map\";\n\n\tconst projects = [\n\t\t{\n\t\t\tname: \"Design Engineering\",\n\t\t\turl: \"#\",\n\t\t\ticon: FrameIcon,\n\t\t},\n\t\t{\n\t\t\tname: \"Sales & Marketing\",\n\t\t\turl: \"#\",\n\t\t\ticon: ChartPieIcon,\n\t\t},\n\t\t{\n\t\t\tname: \"Travel\",\n\t\t\turl: \"#\",\n\t\t\ticon: MapIcon,\n\t\t},\n\t\t{\n\t\t\tname: \"Support\",\n\t\t\turl: \"#\",\n\t\t\ticon: LifeBuoyIcon,\n\t\t},\n\t\t{\n\t\t\tname: \"Feedback\",\n\t\t\turl: \"#\",\n\t\t\ticon: SendIcon,\n\t\t},\n\t];\n</script>\n\n<Sidebar.Provider>\n\t<Sidebar.Root>\n\t\t<Sidebar.Content>\n\t\t\t<Sidebar.Group>\n\t\t\t\t<Sidebar.GroupLabel>Projects</Sidebar.GroupLabel>\n\t\t\t\t<Sidebar.GroupContent>\n\t\t\t\t\t<Sidebar.Menu>\n\t\t\t\t\t\t{#each projects as project (project.name)}\n\t\t\t\t\t\t\t<Sidebar.MenuItem>\n\t\t\t\t\t\t\t\t<Sidebar.MenuButton\n\t\t\t\t\t\t\t\t\tclass=\"group-has-[[data-state=open]]/menu-item:bg-sidebar-accent\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t\t\t<a href={project.url} {...props}>\n\t\t\t\t\t\t\t\t\t\t\t<project.icon />\n\t\t\t\t\t\t\t\t\t\t\t<span>{project.name}</span>\n\t\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t\t\t</Sidebar.MenuButton>\n\t\t\t\t\t\t\t\t<DropdownMenu.Root>\n\t\t\t\t\t\t\t\t\t<DropdownMenu.Trigger>\n\t\t\t\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t\t\t\t<Sidebar.MenuAction {...props}>\n\t\t\t\t\t\t\t\t\t\t\t\t<EllipsisIcon />\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"sr-only\">More</span>\n\t\t\t\t\t\t\t\t\t\t\t</Sidebar.MenuAction>\n\t\t\t\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t\t\t\t</DropdownMenu.Trigger>\n\t\t\t\t\t\t\t\t\t<DropdownMenu.Content side=\"right\" align=\"start\">\n\t\t\t\t\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t\t\t\t\t<span>Edit Project</span>\n\t\t\t\t\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t\t\t\t\t<span>Delete Project</span>\n\t\t\t\t\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t\t\t\t</DropdownMenu.Content>\n\t\t\t\t\t\t\t\t</DropdownMenu.Root>\n\t\t\t\t\t\t\t</Sidebar.MenuItem>\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</Sidebar.Menu>\n\t\t\t\t</Sidebar.GroupContent>\n\t\t\t</Sidebar.Group>\n\t\t</Sidebar.Content>\n\t</Sidebar.Root>\n</Sidebar.Provider>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/demo-sidebar-menu-badge.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\timport LifeBuoyIcon from \"@lucide/svelte/icons/life-buoy\";\n\timport SendIcon from \"@lucide/svelte/icons/send\";\n\timport FrameIcon from \"@lucide/svelte/icons/frame\";\n\timport ChartPieIcon from \"@lucide/svelte/icons/chart-pie\";\n\timport MapIcon from \"@lucide/svelte/icons/map\";\n\n\tconst projects = [\n\t\t{\n\t\t\tname: \"Design Engineering\",\n\t\t\turl: \"#\",\n\t\t\ticon: FrameIcon,\n\t\t\tbadge: \"24\",\n\t\t},\n\t\t{\n\t\t\tname: \"Sales & Marketing\",\n\t\t\turl: \"#\",\n\t\t\ticon: ChartPieIcon,\n\t\t\tbadge: \"12\",\n\t\t},\n\t\t{\n\t\t\tname: \"Travel\",\n\t\t\turl: \"#\",\n\t\t\ticon: MapIcon,\n\t\t\tbadge: \"3\",\n\t\t},\n\t\t{\n\t\t\tname: \"Support\",\n\t\t\turl: \"#\",\n\t\t\ticon: LifeBuoyIcon,\n\t\t\tbadge: \"21\",\n\t\t},\n\t\t{\n\t\t\tname: \"Feedback\",\n\t\t\turl: \"#\",\n\t\t\ticon: SendIcon,\n\t\t\tbadge: \"8\",\n\t\t},\n\t];\n</script>\n\n<Sidebar.Provider>\n\t<Sidebar.Root>\n\t\t<Sidebar.Content>\n\t\t\t<Sidebar.Group>\n\t\t\t\t<Sidebar.GroupLabel>Projects</Sidebar.GroupLabel>\n\t\t\t\t<Sidebar.GroupContent>\n\t\t\t\t\t<Sidebar.Menu>\n\t\t\t\t\t\t{#each projects as project (project.name)}\n\t\t\t\t\t\t\t<Sidebar.MenuItem>\n\t\t\t\t\t\t\t\t<Sidebar.MenuButton\n\t\t\t\t\t\t\t\t\tclass=\"group-has-[[data-state=open]]/menu-item:bg-sidebar-accent\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t\t\t<a href={project.url} {...props}>\n\t\t\t\t\t\t\t\t\t\t\t<project.icon />\n\t\t\t\t\t\t\t\t\t\t\t<span>{project.name}</span>\n\t\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t\t\t</Sidebar.MenuButton>\n\t\t\t\t\t\t\t\t<Sidebar.MenuBadge>{project.badge}</Sidebar.MenuBadge>\n\t\t\t\t\t\t\t</Sidebar.MenuItem>\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</Sidebar.Menu>\n\t\t\t\t</Sidebar.GroupContent>\n\t\t\t</Sidebar.Group>\n\t\t</Sidebar.Content>\n\t</Sidebar.Root>\n</Sidebar.Provider>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/demo-sidebar-menu-collapsible.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\timport * as Collapsible from \"$lib/registry/ui/collapsible/index.js\";\n\timport ChevronRightIcon from \"@lucide/svelte/icons/chevron-right\";\n\n\tconst items = [\n\t\t{\n\t\t\ttitle: \"Getting Started\",\n\t\t\turl: \"#\",\n\t\t\titems: [\n\t\t\t\t{\n\t\t\t\t\ttitle: \"Installation\",\n\t\t\t\t\turl: \"#\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttitle: \"Project Structure\",\n\t\t\t\t\turl: \"#\",\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\ttitle: \"Build Your Application\",\n\t\t\turl: \"#\",\n\t\t\titems: [\n\t\t\t\t{\n\t\t\t\t\ttitle: \"Routing\",\n\t\t\t\t\turl: \"#\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttitle: \"Data Fetching\",\n\t\t\t\t\turl: \"#\",\n\t\t\t\t\tisActive: true,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttitle: \"Rendering\",\n\t\t\t\t\turl: \"#\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttitle: \"Caching\",\n\t\t\t\t\turl: \"#\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttitle: \"Styling\",\n\t\t\t\t\turl: \"#\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttitle: \"Optimizing\",\n\t\t\t\t\turl: \"#\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttitle: \"Configuring\",\n\t\t\t\t\turl: \"#\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttitle: \"Testing\",\n\t\t\t\t\turl: \"#\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttitle: \"Authentication\",\n\t\t\t\t\turl: \"#\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttitle: \"Deploying\",\n\t\t\t\t\turl: \"#\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttitle: \"Upgrading\",\n\t\t\t\t\turl: \"#\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttitle: \"Examples\",\n\t\t\t\t\turl: \"#\",\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\ttitle: \"API Reference\",\n\t\t\turl: \"#\",\n\t\t\titems: [\n\t\t\t\t{\n\t\t\t\t\ttitle: \"Components\",\n\t\t\t\t\turl: \"#\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttitle: \"File Conventions\",\n\t\t\t\t\turl: \"#\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttitle: \"Functions\",\n\t\t\t\t\turl: \"#\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttitle: \"next.config.js Options\",\n\t\t\t\t\turl: \"#\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttitle: \"CLI\",\n\t\t\t\t\turl: \"#\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttitle: \"Edge Runtime\",\n\t\t\t\t\turl: \"#\",\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\ttitle: \"Architecture\",\n\t\t\turl: \"#\",\n\t\t\titems: [\n\t\t\t\t{\n\t\t\t\t\ttitle: \"Accessibility\",\n\t\t\t\t\turl: \"#\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttitle: \"Fast Refresh\",\n\t\t\t\t\turl: \"#\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttitle: \"Next.js Compiler\",\n\t\t\t\t\turl: \"#\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttitle: \"Supported Browsers\",\n\t\t\t\t\turl: \"#\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttitle: \"Turbopack\",\n\t\t\t\t\turl: \"#\",\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t];\n</script>\n\n<Sidebar.Provider>\n\t<Sidebar.Root>\n\t\t<Sidebar.Content>\n\t\t\t<Sidebar.Group>\n\t\t\t\t<Sidebar.GroupContent>\n\t\t\t\t\t<Sidebar.Menu>\n\t\t\t\t\t\t{#each items as item, index (index)}\n\t\t\t\t\t\t\t<Collapsible.Root class=\"group/collapsible\" open={index === 0}>\n\t\t\t\t\t\t\t\t<Sidebar.MenuItem>\n\t\t\t\t\t\t\t\t\t<Collapsible.Trigger>\n\t\t\t\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t\t\t\t<Sidebar.MenuButton {...props}>\n\t\t\t\t\t\t\t\t\t\t\t\t<span>{item.title}</span>\n\t\t\t\t\t\t\t\t\t\t\t\t<ChevronRightIcon\n\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"ms-auto transition-transform group-data-[state=open]/collapsible:rotate-90\"\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t</Sidebar.MenuButton>\n\t\t\t\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t\t\t\t</Collapsible.Trigger>\n\t\t\t\t\t\t\t\t\t<Collapsible.Content>\n\t\t\t\t\t\t\t\t\t\t<Sidebar.MenuSub>\n\t\t\t\t\t\t\t\t\t\t\t{#each item.items as subItem, subIndex (subIndex)}\n\t\t\t\t\t\t\t\t\t\t\t\t<Sidebar.MenuSubItem>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Sidebar.MenuSubButton>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href={subItem.url} {...props}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span>{subItem.title}</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t\t\t\t\t\t\t\t</Sidebar.MenuSubButton>\n\t\t\t\t\t\t\t\t\t\t\t\t</Sidebar.MenuSubItem>\n\t\t\t\t\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t\t\t\t</Sidebar.MenuSub>\n\t\t\t\t\t\t\t\t\t</Collapsible.Content>\n\t\t\t\t\t\t\t\t</Sidebar.MenuItem>\n\t\t\t\t\t\t\t</Collapsible.Root>\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</Sidebar.Menu>\n\t\t\t\t</Sidebar.GroupContent>\n\t\t\t</Sidebar.Group>\n\t\t</Sidebar.Content>\n\t</Sidebar.Root>\n</Sidebar.Provider>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/demo-sidebar-menu-sub.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\n\tconst items = [\n\t\t{\n\t\t\ttitle: \"Getting Started\",\n\t\t\turl: \"#\",\n\t\t\titems: [\n\t\t\t\t{\n\t\t\t\t\ttitle: \"Installation\",\n\t\t\t\t\turl: \"#\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttitle: \"Project Structure\",\n\t\t\t\t\turl: \"#\",\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\ttitle: \"Build Your Application\",\n\t\t\turl: \"#\",\n\t\t\titems: [\n\t\t\t\t{\n\t\t\t\t\ttitle: \"Routing\",\n\t\t\t\t\turl: \"#\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttitle: \"Data Fetching\",\n\t\t\t\t\turl: \"#\",\n\t\t\t\t\tisActive: true,\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttitle: \"Rendering\",\n\t\t\t\t\turl: \"#\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttitle: \"Caching\",\n\t\t\t\t\turl: \"#\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttitle: \"Styling\",\n\t\t\t\t\turl: \"#\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttitle: \"Optimizing\",\n\t\t\t\t\turl: \"#\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttitle: \"Configuring\",\n\t\t\t\t\turl: \"#\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttitle: \"Testing\",\n\t\t\t\t\turl: \"#\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttitle: \"Authentication\",\n\t\t\t\t\turl: \"#\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttitle: \"Deploying\",\n\t\t\t\t\turl: \"#\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttitle: \"Upgrading\",\n\t\t\t\t\turl: \"#\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttitle: \"Examples\",\n\t\t\t\t\turl: \"#\",\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\ttitle: \"API Reference\",\n\t\t\turl: \"#\",\n\t\t\titems: [\n\t\t\t\t{\n\t\t\t\t\ttitle: \"Components\",\n\t\t\t\t\turl: \"#\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttitle: \"File Conventions\",\n\t\t\t\t\turl: \"#\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttitle: \"Functions\",\n\t\t\t\t\turl: \"#\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttitle: \"next.config.js Options\",\n\t\t\t\t\turl: \"#\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttitle: \"CLI\",\n\t\t\t\t\turl: \"#\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttitle: \"Edge Runtime\",\n\t\t\t\t\turl: \"#\",\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\ttitle: \"Architecture\",\n\t\t\turl: \"#\",\n\t\t\titems: [\n\t\t\t\t{\n\t\t\t\t\ttitle: \"Accessibility\",\n\t\t\t\t\turl: \"#\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttitle: \"Fast Refresh\",\n\t\t\t\t\turl: \"#\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttitle: \"Next.js Compiler\",\n\t\t\t\t\turl: \"#\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttitle: \"Supported Browsers\",\n\t\t\t\t\turl: \"#\",\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttitle: \"Turbopack\",\n\t\t\t\t\turl: \"#\",\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t];\n</script>\n\n<Sidebar.Provider>\n\t<Sidebar.Root>\n\t\t<Sidebar.Content>\n\t\t\t<Sidebar.Group>\n\t\t\t\t<Sidebar.GroupContent>\n\t\t\t\t\t<Sidebar.Menu>\n\t\t\t\t\t\t{#each items as item, index (index)}\n\t\t\t\t\t\t\t<Sidebar.MenuItem>\n\t\t\t\t\t\t\t\t<Sidebar.MenuButton>\n\t\t\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t\t\t<a href={item.url} {...props}>\n\t\t\t\t\t\t\t\t\t\t\t<span>{item.title}</span>\n\t\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t\t\t</Sidebar.MenuButton>\n\t\t\t\t\t\t\t\t<Sidebar.MenuSub>\n\t\t\t\t\t\t\t\t\t{#each item.items as subItem, subIndex (subIndex)}\n\t\t\t\t\t\t\t\t\t\t<Sidebar.MenuSubItem>\n\t\t\t\t\t\t\t\t\t\t\t<Sidebar.MenuSubButton>\n\t\t\t\t\t\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t\t\t\t\t\t<a href={subItem.url} {...props}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span>{subItem.title}</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t\t\t\t\t\t</Sidebar.MenuSubButton>\n\t\t\t\t\t\t\t\t\t\t</Sidebar.MenuSubItem>\n\t\t\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t\t</Sidebar.MenuSub>\n\t\t\t\t\t\t\t</Sidebar.MenuItem>\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</Sidebar.Menu>\n\t\t\t\t</Sidebar.GroupContent>\n\t\t\t</Sidebar.Group>\n\t\t</Sidebar.Content>\n\t</Sidebar.Root>\n</Sidebar.Provider>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/demo-sidebar-menu.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\timport LifeBuoyIcon from \"@lucide/svelte/icons/life-buoy\";\n\timport SendIcon from \"@lucide/svelte/icons/send\";\n\timport FrameIcon from \"@lucide/svelte/icons/frame\";\n\timport ChartPieIcon from \"@lucide/svelte/icons/chart-pie\";\n\timport MapIcon from \"@lucide/svelte/icons/map\";\n\tconst projects = [\n\t\t{\n\t\t\tname: \"Design Engineering\",\n\t\t\turl: \"#\",\n\t\t\ticon: FrameIcon,\n\t\t},\n\t\t{\n\t\t\tname: \"Sales & Marketing\",\n\t\t\turl: \"#\",\n\t\t\ticon: ChartPieIcon,\n\t\t},\n\t\t{\n\t\t\tname: \"Travel\",\n\t\t\turl: \"#\",\n\t\t\ticon: MapIcon,\n\t\t},\n\t\t{\n\t\t\tname: \"Support\",\n\t\t\turl: \"#\",\n\t\t\ticon: LifeBuoyIcon,\n\t\t},\n\t\t{\n\t\t\tname: \"Feedback\",\n\t\t\turl: \"#\",\n\t\t\ticon: SendIcon,\n\t\t},\n\t];\n</script>\n\n<Sidebar.Provider>\n\t<Sidebar.Root>\n\t\t<Sidebar.Content>\n\t\t\t<Sidebar.Group>\n\t\t\t\t<Sidebar.GroupLabel>Projects</Sidebar.GroupLabel>\n\t\t\t\t<Sidebar.GroupContent>\n\t\t\t\t\t<Sidebar.Menu>\n\t\t\t\t\t\t{#each projects as project (project.name)}\n\t\t\t\t\t\t\t<Sidebar.MenuItem>\n\t\t\t\t\t\t\t\t<Sidebar.MenuButton>\n\t\t\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t\t\t<a href={project.url} {...props}>\n\t\t\t\t\t\t\t\t\t\t\t<project.icon />\n\t\t\t\t\t\t\t\t\t\t\t<span>{project.name}</span>\n\t\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t\t\t</Sidebar.MenuButton>\n\t\t\t\t\t\t\t</Sidebar.MenuItem>\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</Sidebar.Menu>\n\t\t\t\t</Sidebar.GroupContent>\n\t\t\t</Sidebar.Group>\n\t\t</Sidebar.Content>\n\t</Sidebar.Root>\n</Sidebar.Provider>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/demo-sidebar.svelte",
    "content": "<script lang=\"ts\">\n\timport CalendarIcon from \"@lucide/svelte/icons/calendar\";\n\timport HouseIcon from \"@lucide/svelte/icons/house\";\n\timport InboxIcon from \"@lucide/svelte/icons/inbox\";\n\timport SearchIcon from \"@lucide/svelte/icons/search\";\n\timport SettingsIcon from \"@lucide/svelte/icons/settings\";\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\n\t// Menu items.\n\tconst items = [\n\t\t{\n\t\t\ttitle: \"Home\",\n\t\t\turl: \"#\",\n\t\t\ticon: HouseIcon,\n\t\t},\n\t\t{\n\t\t\ttitle: \"Inbox\",\n\t\t\turl: \"#\",\n\t\t\ticon: InboxIcon,\n\t\t},\n\t\t{\n\t\t\ttitle: \"Calendar\",\n\t\t\turl: \"#\",\n\t\t\ticon: CalendarIcon,\n\t\t},\n\t\t{\n\t\t\ttitle: \"Search\",\n\t\t\turl: \"#\",\n\t\t\ticon: SearchIcon,\n\t\t},\n\t\t{\n\t\t\ttitle: \"Settings\",\n\t\t\turl: \"#\",\n\t\t\ticon: SettingsIcon,\n\t\t},\n\t];\n</script>\n\n<Sidebar.Provider>\n\t<Sidebar.Root>\n\t\t<Sidebar.Content>\n\t\t\t<Sidebar.Group>\n\t\t\t\t<Sidebar.GroupLabel>Application</Sidebar.GroupLabel>\n\t\t\t\t<Sidebar.GroupContent>\n\t\t\t\t\t<Sidebar.Menu>\n\t\t\t\t\t\t{#each items as item (item.title)}\n\t\t\t\t\t\t\t<Sidebar.MenuItem>\n\t\t\t\t\t\t\t\t<Sidebar.MenuButton>\n\t\t\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t\t\t<a href={item.url} {...props}>\n\t\t\t\t\t\t\t\t\t\t\t<item.icon />\n\t\t\t\t\t\t\t\t\t\t\t<span>{item.title}</span>\n\t\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t\t\t</Sidebar.MenuButton>\n\t\t\t\t\t\t\t</Sidebar.MenuItem>\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</Sidebar.Menu>\n\t\t\t\t</Sidebar.GroupContent>\n\t\t\t</Sidebar.Group>\n\t\t</Sidebar.Content>\n\t</Sidebar.Root>\n\t<Sidebar.Inset>\n\t\t<header class=\"flex h-12 items-center justify-between px-4\">\n\t\t\t<Sidebar.Trigger />\n\t\t</header>\n\t</Sidebar.Inset>\n</Sidebar.Provider>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/login-01/+page.svelte",
    "content": "<script lang=\"ts\">\n\timport LoginForm from \"./components/login-form.svelte\";\n</script>\n\n<div class=\"flex h-screen w-full items-center justify-center px-4\">\n\t<LoginForm />\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/login-01/components/login-form.svelte",
    "content": "<script lang=\"ts\">\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport { Input } from \"$lib/registry/ui/input/index.js\";\n\timport {\n\t\tFieldGroup,\n\t\tField,\n\t\tFieldLabel,\n\t\tFieldDescription,\n\t} from \"$lib/registry/ui/field/index.js\";\n\n\tconst id = $props.id();\n</script>\n\n<Card.Root class=\"mx-auto w-full max-w-sm\">\n\t<Card.Header>\n\t\t<Card.Title class=\"text-2xl\">Login</Card.Title>\n\t\t<Card.Description>Enter your email below to login to your account</Card.Description>\n\t</Card.Header>\n\t<Card.Content>\n\t\t<form>\n\t\t\t<FieldGroup>\n\t\t\t\t<Field>\n\t\t\t\t\t<FieldLabel for=\"email-{id}\">Email</FieldLabel>\n\t\t\t\t\t<Input id=\"email-{id}\" type=\"email\" placeholder=\"m@example.com\" required />\n\t\t\t\t</Field>\n\t\t\t\t<Field>\n\t\t\t\t\t<div class=\"flex items-center\">\n\t\t\t\t\t\t<FieldLabel for=\"password-{id}\">Password</FieldLabel>\n\t\t\t\t\t\t<a href=\"##\" class=\"ms-auto inline-block text-sm underline\">\n\t\t\t\t\t\t\tForgot your password?\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</div>\n\t\t\t\t\t<Input id=\"password-{id}\" type=\"password\" required />\n\t\t\t\t</Field>\n\t\t\t\t<Field>\n\t\t\t\t\t<Button type=\"submit\" class=\"w-full\">Login</Button>\n\t\t\t\t\t<Button variant=\"outline\" class=\"w-full\">\n\t\t\t\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\td=\"M12.48 10.92v3.28h7.84c-.24 1.84-.853 3.187-1.787 4.133-1.147 1.147-2.933 2.4-6.053 2.4-4.827 0-8.6-3.893-8.6-8.72s3.773-8.72 8.6-8.72c2.6 0 4.507 1.027 5.907 2.347l2.307-2.307C18.747 1.44 16.133 0 12.48 0 5.867 0 .307 5.387.307 12s5.56 12 12.173 12c3.573 0 6.267-1.173 8.373-3.36 2.16-2.16 2.84-5.213 2.84-7.667 0-.76-.053-1.467-.173-2.053H12.48z\"\n\t\t\t\t\t\t\t\tfill=\"currentColor\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</svg>\n\t\t\t\t\t\tLogin with Google\n\t\t\t\t\t</Button>\n\t\t\t\t\t<FieldDescription class=\"text-center\">\n\t\t\t\t\t\tDon't have an account? <a href=\"##\">Sign up</a>\n\t\t\t\t\t</FieldDescription>\n\t\t\t\t</Field>\n\t\t\t</FieldGroup>\n\t\t</form>\n\t</Card.Content>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/login-02/+page.svelte",
    "content": "<script lang=\"ts\">\n\timport GalleryVerticalEndIcon from \"@lucide/svelte/icons/gallery-vertical-end\";\n\timport LoginForm from \"./components/login-form.svelte\";\n</script>\n\n<div class=\"grid min-h-svh lg:grid-cols-2\">\n\t<div class=\"flex flex-col gap-4 p-6 md:p-10\">\n\t\t<div class=\"flex justify-center gap-2 md:justify-start\">\n\t\t\t<a href=\"##\" class=\"flex items-center gap-2 font-medium\">\n\t\t\t\t<div\n\t\t\t\t\tclass=\"bg-primary text-primary-foreground flex size-6 items-center justify-center rounded-md\"\n\t\t\t\t>\n\t\t\t\t\t<GalleryVerticalEndIcon class=\"size-4\" />\n\t\t\t\t</div>\n\t\t\t\tAcme Inc.\n\t\t\t</a>\n\t\t</div>\n\t\t<div class=\"flex flex-1 items-center justify-center\">\n\t\t\t<div class=\"w-full max-w-xs\">\n\t\t\t\t<LoginForm />\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\t<div class=\"bg-muted relative hidden lg:block\">\n\t\t<img\n\t\t\tsrc=\"/placeholder.svg\"\n\t\t\talt=\"placeholder\"\n\t\t\tclass=\"absolute inset-0 h-full w-full object-cover dark:brightness-[0.2] dark:grayscale\"\n\t\t/>\n\t</div>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/login-02/components/login-form.svelte",
    "content": "<script lang=\"ts\">\n\timport {\n\t\tFieldGroup,\n\t\tField,\n\t\tFieldLabel,\n\t\tFieldDescription,\n\t\tFieldSeparator,\n\t} from \"$lib/registry/ui/field/index.js\";\n\timport { Input } from \"$lib/registry/ui/input/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\timport type { HTMLFormAttributes } from \"svelte/elements\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\t...restProps\n\t}: WithElementRef<HTMLFormAttributes> = $props();\n\n\tconst id = $props.id();\n</script>\n\n<form class={cn(\"flex flex-col gap-6\", className)} bind:this={ref} {...restProps}>\n\t<FieldGroup>\n\t\t<div class=\"flex flex-col items-center gap-1 text-center\">\n\t\t\t<h1 class=\"text-2xl font-bold\">Login to your account</h1>\n\t\t\t<p class=\"text-muted-foreground text-sm text-balance\">\n\t\t\t\tEnter your email below to login to your account\n\t\t\t</p>\n\t\t</div>\n\t\t<Field>\n\t\t\t<FieldLabel for=\"email-{id}\">Email</FieldLabel>\n\t\t\t<Input id=\"email-{id}\" type=\"email\" placeholder=\"m@example.com\" required />\n\t\t</Field>\n\t\t<Field>\n\t\t\t<div class=\"flex items-center\">\n\t\t\t\t<FieldLabel for=\"password-{id}\">Password</FieldLabel>\n\t\t\t\t<a href=\"##\" class=\"ms-auto text-sm underline-offset-4 hover:underline\">\n\t\t\t\t\tForgot your password?\n\t\t\t\t</a>\n\t\t\t</div>\n\t\t\t<Input id=\"password-{id}\" type=\"password\" required />\n\t\t</Field>\n\t\t<Field>\n\t\t\t<Button type=\"submit\">Login</Button>\n\t\t</Field>\n\t\t<FieldSeparator>Or continue with</FieldSeparator>\n\t\t<Field>\n\t\t\t<Button variant=\"outline\" type=\"button\">\n\t\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n\t\t\t\t\t<path\n\t\t\t\t\t\td=\"M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12\"\n\t\t\t\t\t\tfill=\"currentColor\"\n\t\t\t\t\t/>\n\t\t\t\t</svg>\n\t\t\t\tLogin with GitHub\n\t\t\t</Button>\n\t\t\t<FieldDescription class=\"text-center\">\n\t\t\t\tDon't have an account?\n\t\t\t\t<a href=\"##\" class=\"underline underline-offset-4\">Sign up</a>\n\t\t\t</FieldDescription>\n\t\t</Field>\n\t</FieldGroup>\n</form>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/login-03/+page.svelte",
    "content": "<script lang=\"ts\">\n\timport LoginForm from \"./components/login-form.svelte\";\n\timport GalleryVerticalEndIcon from \"@lucide/svelte/icons/gallery-vertical-end\";\n</script>\n\n<div class=\"bg-muted flex min-h-svh flex-col items-center justify-center gap-6 p-6 md:p-10\">\n\t<div class=\"flex w-full max-w-sm flex-col gap-6\">\n\t\t<a href=\"##\" class=\"flex items-center gap-2 self-center font-medium\">\n\t\t\t<div\n\t\t\t\tclass=\"bg-primary text-primary-foreground flex size-6 items-center justify-center rounded-md\"\n\t\t\t>\n\t\t\t\t<GalleryVerticalEndIcon class=\"size-4\" />\n\t\t\t</div>\n\t\t\tAcme Inc.\n\t\t</a>\n\t\t<LoginForm />\n\t</div>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/login-03/components/login-form.svelte",
    "content": "<script lang=\"ts\">\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport {\n\t\tFieldGroup,\n\t\tField,\n\t\tFieldLabel,\n\t\tFieldDescription,\n\t\tFieldSeparator,\n\t} from \"$lib/registry/ui/field/index.js\";\n\timport { Input } from \"$lib/registry/ui/input/index.js\";\n\timport { cn } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet { class: className, ...restProps }: HTMLAttributes<HTMLDivElement> = $props();\n\n\tconst id = $props.id();\n</script>\n\n<div class={cn(\"flex flex-col gap-6\", className)} {...restProps}>\n\t<Card.Root>\n\t\t<Card.Header class=\"text-center\">\n\t\t\t<Card.Title class=\"text-xl\">Welcome back</Card.Title>\n\t\t\t<Card.Description>Login with your Apple or Google account</Card.Description>\n\t\t</Card.Header>\n\t\t<Card.Content>\n\t\t\t<form>\n\t\t\t\t<FieldGroup>\n\t\t\t\t\t<Field>\n\t\t\t\t\t\t<Button variant=\"outline\" type=\"button\">\n\t\t\t\t\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\td=\"M12.152 6.896c-.948 0-2.415-1.078-3.96-1.04-2.04.027-3.91 1.183-4.961 3.014-2.117 3.675-.546 9.103 1.519 12.09 1.013 1.454 2.208 3.09 3.792 3.039 1.52-.065 2.09-.987 3.935-.987 1.831 0 2.35.987 3.96.948 1.637-.026 2.676-1.48 3.676-2.948 1.156-1.688 1.636-3.325 1.662-3.415-.039-.013-3.182-1.221-3.22-4.857-.026-3.04 2.48-4.494 2.597-4.559-1.429-2.09-3.623-2.324-4.39-2.376-2-.156-3.675 1.09-4.61 1.09zM15.53 3.83c.843-1.012 1.4-2.427 1.245-3.83-1.207.052-2.662.805-3.532 1.818-.78.896-1.454 2.338-1.273 3.714 1.338.104 2.715-.688 3.559-1.701\"\n\t\t\t\t\t\t\t\t\tfill=\"currentColor\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t\tLogin with Apple\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t<Button variant=\"outline\" type=\"button\">\n\t\t\t\t\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\td=\"M12.48 10.92v3.28h7.84c-.24 1.84-.853 3.187-1.787 4.133-1.147 1.147-2.933 2.4-6.053 2.4-4.827 0-8.6-3.893-8.6-8.72s3.773-8.72 8.6-8.72c2.6 0 4.507 1.027 5.907 2.347l2.307-2.307C18.747 1.44 16.133 0 12.48 0 5.867 0 .307 5.387.307 12s5.56 12 12.173 12c3.573 0 6.267-1.173 8.373-3.36 2.16-2.16 2.84-5.213 2.84-7.667 0-.76-.053-1.467-.173-2.053H12.48z\"\n\t\t\t\t\t\t\t\t\tfill=\"currentColor\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t\tLogin with Google\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</Field>\n\t\t\t\t\t<FieldSeparator class=\"*:data-[slot=field-separator-content]:bg-card\">\n\t\t\t\t\t\tOr continue with\n\t\t\t\t\t</FieldSeparator>\n\t\t\t\t\t<Field>\n\t\t\t\t\t\t<FieldLabel for=\"email-{id}\">Email</FieldLabel>\n\t\t\t\t\t\t<Input id=\"email-{id}\" type=\"email\" placeholder=\"m@example.com\" required />\n\t\t\t\t\t</Field>\n\t\t\t\t\t<Field>\n\t\t\t\t\t\t<div class=\"flex items-center\">\n\t\t\t\t\t\t\t<FieldLabel for=\"password-{id}\">Password</FieldLabel>\n\t\t\t\t\t\t\t<a href=\"##\" class=\"ms-auto text-sm underline-offset-4 hover:underline\">\n\t\t\t\t\t\t\t\tForgot your password?\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<Input id=\"password-{id}\" type=\"password\" required />\n\t\t\t\t\t</Field>\n\t\t\t\t\t<Field>\n\t\t\t\t\t\t<Button type=\"submit\">Login</Button>\n\t\t\t\t\t\t<FieldDescription class=\"text-center\">\n\t\t\t\t\t\t\tDon't have an account? <a href=\"##\">Sign up</a>\n\t\t\t\t\t\t</FieldDescription>\n\t\t\t\t\t</Field>\n\t\t\t\t</FieldGroup>\n\t\t\t</form>\n\t\t</Card.Content>\n\t</Card.Root>\n\t<FieldDescription class=\"px-6 text-center\">\n\t\tBy clicking continue, you agree to our <a href=\"##\">Terms of Service</a>\n\t\tand <a href=\"##\">Privacy Policy</a>.\n\t</FieldDescription>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/login-04/+page.svelte",
    "content": "<script lang=\"ts\">\n\timport LoginForm from \"./components/login-form.svelte\";\n</script>\n\n<div class=\"bg-muted flex min-h-svh flex-col items-center justify-center p-6 md:p-10\">\n\t<div class=\"w-full max-w-sm md:max-w-3xl\">\n\t\t<LoginForm />\n\t</div>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/login-04/components/login-form.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport {\n\t\tFieldGroup,\n\t\tField,\n\t\tFieldLabel,\n\t\tFieldDescription,\n\t\tFieldSeparator,\n\t} from \"$lib/registry/ui/field/index.js\";\n\timport { Input } from \"$lib/registry/ui/input/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport { cn } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet { class: className, ...restProps }: HTMLAttributes<HTMLDivElement> = $props();\n\n\tconst id = $props.id();\n</script>\n\n<div class={cn(\"flex flex-col gap-6\", className)} {...restProps}>\n\t<Card.Root class=\"overflow-hidden p-0\">\n\t\t<Card.Content class=\"grid p-0 md:grid-cols-2\">\n\t\t\t<form class=\"p-6 md:p-8\">\n\t\t\t\t<FieldGroup>\n\t\t\t\t\t<div class=\"flex flex-col items-center gap-2 text-center\">\n\t\t\t\t\t\t<h1 class=\"text-2xl font-bold\">Welcome back</h1>\n\t\t\t\t\t\t<p class=\"text-muted-foreground text-balance\">\n\t\t\t\t\t\t\tLogin to your Acme Inc account\n\t\t\t\t\t\t</p>\n\t\t\t\t\t</div>\n\t\t\t\t\t<Field>\n\t\t\t\t\t\t<FieldLabel for=\"email-{id}\">Email</FieldLabel>\n\t\t\t\t\t\t<Input id=\"email-{id}\" type=\"email\" placeholder=\"m@example.com\" required />\n\t\t\t\t\t</Field>\n\t\t\t\t\t<Field>\n\t\t\t\t\t\t<div class=\"flex items-center\">\n\t\t\t\t\t\t\t<FieldLabel for=\"password-{id}\">Password</FieldLabel>\n\t\t\t\t\t\t\t<a href=\"##\" class=\"ms-auto text-sm underline-offset-2 hover:underline\">\n\t\t\t\t\t\t\t\tForgot your password?\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<Input id=\"password-{id}\" type=\"password\" required />\n\t\t\t\t\t</Field>\n\t\t\t\t\t<Field>\n\t\t\t\t\t\t<Button type=\"submit\">Login</Button>\n\t\t\t\t\t</Field>\n\t\t\t\t\t<FieldSeparator class=\"*:data-[slot=field-separator-content]:bg-card\">\n\t\t\t\t\t\tOr continue with\n\t\t\t\t\t</FieldSeparator>\n\t\t\t\t\t<Field class=\"grid grid-cols-3 gap-4\">\n\t\t\t\t\t\t<Button variant=\"outline\" type=\"button\">\n\t\t\t\t\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\td=\"M12.152 6.896c-.948 0-2.415-1.078-3.96-1.04-2.04.027-3.91 1.183-4.961 3.014-2.117 3.675-.546 9.103 1.519 12.09 1.013 1.454 2.208 3.09 3.792 3.039 1.52-.065 2.09-.987 3.935-.987 1.831 0 2.35.987 3.96.948 1.637-.026 2.676-1.48 3.676-2.948 1.156-1.688 1.636-3.325 1.662-3.415-.039-.013-3.182-1.221-3.22-4.857-.026-3.04 2.48-4.494 2.597-4.559-1.429-2.09-3.623-2.324-4.39-2.376-2-.156-3.675 1.09-4.61 1.09zM15.53 3.83c.843-1.012 1.4-2.427 1.245-3.83-1.207.052-2.662.805-3.532 1.818-.78.896-1.454 2.338-1.273 3.714 1.338.104 2.715-.688 3.559-1.701\"\n\t\t\t\t\t\t\t\t\tfill=\"currentColor\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t\t<span class=\"sr-only\">Login with Apple</span>\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t<Button variant=\"outline\" type=\"button\">\n\t\t\t\t\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\td=\"M12.48 10.92v3.28h7.84c-.24 1.84-.853 3.187-1.787 4.133-1.147 1.147-2.933 2.4-6.053 2.4-4.827 0-8.6-3.893-8.6-8.72s3.773-8.72 8.6-8.72c2.6 0 4.507 1.027 5.907 2.347l2.307-2.307C18.747 1.44 16.133 0 12.48 0 5.867 0 .307 5.387.307 12s5.56 12 12.173 12c3.573 0 6.267-1.173 8.373-3.36 2.16-2.16 2.84-5.213 2.84-7.667 0-.76-.053-1.467-.173-2.053H12.48z\"\n\t\t\t\t\t\t\t\t\tfill=\"currentColor\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t\t<span class=\"sr-only\">Login with Google</span>\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t<Button variant=\"outline\" type=\"button\">\n\t\t\t\t\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\td=\"M6.915 4.03c-1.968 0-3.683 1.28-4.871 3.113C.704 9.208 0 11.883 0 14.449c0 .706.07 1.369.21 1.973a6.624 6.624 0 0 0 .265.86 5.297 5.297 0 0 0 .371.761c.696 1.159 1.818 1.927 3.593 1.927 1.497 0 2.633-.671 3.965-2.444.76-1.012 1.144-1.626 2.663-4.32l.756-1.339.186-.325c.061.1.121.196.183.3l2.152 3.595c.724 1.21 1.665 2.556 2.47 3.314 1.046.987 1.992 1.22 3.06 1.22 1.075 0 1.876-.355 2.455-.843a3.743 3.743 0 0 0 .81-.973c.542-.939.861-2.127.861-3.745 0-2.72-.681-5.357-2.084-7.45-1.282-1.912-2.957-2.93-4.716-2.93-1.047 0-2.088.467-3.053 1.308-.652.57-1.257 1.29-1.82 2.05-.69-.875-1.335-1.547-1.958-2.056-1.182-.966-2.315-1.303-3.454-1.303zm10.16 2.053c1.147 0 2.188.758 2.992 1.999 1.132 1.748 1.647 4.195 1.647 6.4 0 1.548-.368 2.9-1.839 2.9-.58 0-1.027-.23-1.664-1.004-.496-.601-1.343-1.878-2.832-4.358l-.617-1.028a44.908 44.908 0 0 0-1.255-1.98c.07-.109.141-.224.211-.327 1.12-1.667 2.118-2.602 3.358-2.602zm-10.201.553c1.265 0 2.058.791 2.675 1.446.307.327.737.871 1.234 1.579l-1.02 1.566c-.757 1.163-1.882 3.017-2.837 4.338-1.191 1.649-1.81 1.817-2.486 1.817-.524 0-1.038-.237-1.383-.794-.263-.426-.464-1.13-.464-2.046 0-2.221.63-4.535 1.66-6.088.454-.687.964-1.226 1.533-1.533a2.264 2.264 0 0 1 1.088-.285z\"\n\t\t\t\t\t\t\t\t\tfill=\"currentColor\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t\t<span class=\"sr-only\">Login with Meta</span>\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</Field>\n\t\t\t\t\t<FieldDescription class=\"text-center\">\n\t\t\t\t\t\tDon't have an account? <a href=\"##\">Sign up</a>\n\t\t\t\t\t</FieldDescription>\n\t\t\t\t</FieldGroup>\n\t\t\t</form>\n\t\t\t<div class=\"bg-muted relative hidden md:block\">\n\t\t\t\t<img\n\t\t\t\t\tsrc=\"/placeholder.svg\"\n\t\t\t\t\talt=\"placeholder\"\n\t\t\t\t\tclass=\"absolute inset-0 h-full w-full object-cover dark:brightness-[0.2] dark:grayscale\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</Card.Content>\n\t</Card.Root>\n\t<FieldDescription class=\"px-6 text-center\">\n\t\tBy clicking continue, you agree to our <a href=\"##\">Terms of Service</a> and\n\t\t<a href=\"##\">Privacy Policy</a>.\n\t</FieldDescription>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/login-05/+page.svelte",
    "content": "<script lang=\"ts\">\n\timport LoginForm from \"./components/login-form.svelte\";\n</script>\n\n<div class=\"bg-background flex min-h-svh flex-col items-center justify-center gap-6 p-6 md:p-10\">\n\t<div class=\"w-full max-w-sm\">\n\t\t<LoginForm />\n\t</div>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/login-05/components/login-form.svelte",
    "content": "<script lang=\"ts\">\n\timport GalleryVerticalEndIcon from \"@lucide/svelte/icons/gallery-vertical-end\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\timport {\n\t\tFieldGroup,\n\t\tField,\n\t\tFieldLabel,\n\t\tFieldDescription,\n\t\tFieldSeparator,\n\t} from \"$lib/registry/ui/field/index.js\";\n\timport { Input } from \"$lib/registry/ui/input/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLDivElement>> = $props();\n\n\tconst id = $props.id();\n</script>\n\n<div class={cn(\"flex flex-col gap-6\", className)} bind:this={ref} {...restProps}>\n\t<form>\n\t\t<FieldGroup>\n\t\t\t<div class=\"flex flex-col items-center gap-2 text-center\">\n\t\t\t\t<a href=\"##\" class=\"flex flex-col items-center gap-2 font-medium\">\n\t\t\t\t\t<div class=\"flex size-8 items-center justify-center rounded-md\">\n\t\t\t\t\t\t<GalleryVerticalEndIcon class=\"size-6\" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<span class=\"sr-only\">Acme Inc.</span>\n\t\t\t\t</a>\n\t\t\t\t<h1 class=\"text-xl font-bold\">Welcome to Acme Inc.</h1>\n\t\t\t\t<FieldDescription>\n\t\t\t\t\tDon't have an account? <a href=\"##\">Sign up</a>\n\t\t\t\t</FieldDescription>\n\t\t\t</div>\n\t\t\t<Field>\n\t\t\t\t<FieldLabel for=\"email-{id}\">Email</FieldLabel>\n\t\t\t\t<Input id=\"email-{id}\" type=\"email\" placeholder=\"m@example.com\" required />\n\t\t\t</Field>\n\t\t\t<Field>\n\t\t\t\t<Button type=\"submit\">Login</Button>\n\t\t\t</Field>\n\t\t\t<FieldSeparator>Or</FieldSeparator>\n\t\t\t<Field class=\"grid gap-4 sm:grid-cols-2\">\n\t\t\t\t<Button variant=\"outline\" type=\"button\">\n\t\t\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\td=\"M12.152 6.896c-.948 0-2.415-1.078-3.96-1.04-2.04.027-3.91 1.183-4.961 3.014-2.117 3.675-.546 9.103 1.519 12.09 1.013 1.454 2.208 3.09 3.792 3.039 1.52-.065 2.09-.987 3.935-.987 1.831 0 2.35.987 3.96.948 1.637-.026 2.676-1.48 3.676-2.948 1.156-1.688 1.636-3.325 1.662-3.415-.039-.013-3.182-1.221-3.22-4.857-.026-3.04 2.48-4.494 2.597-4.559-1.429-2.09-3.623-2.324-4.39-2.376-2-.156-3.675 1.09-4.61 1.09zM15.53 3.83c.843-1.012 1.4-2.427 1.245-3.83-1.207.052-2.662.805-3.532 1.818-.78.896-1.454 2.338-1.273 3.714 1.338.104 2.715-.688 3.559-1.701\"\n\t\t\t\t\t\t\tfill=\"currentColor\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</svg>\n\t\t\t\t\tContinue with Apple\n\t\t\t\t</Button>\n\t\t\t\t<Button variant=\"outline\" type=\"button\">\n\t\t\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\td=\"M12.48 10.92v3.28h7.84c-.24 1.84-.853 3.187-1.787 4.133-1.147 1.147-2.933 2.4-6.053 2.4-4.827 0-8.6-3.893-8.6-8.72s3.773-8.72 8.6-8.72c2.6 0 4.507 1.027 5.907 2.347l2.307-2.307C18.747 1.44 16.133 0 12.48 0 5.867 0 .307 5.387.307 12s5.56 12 12.173 12c3.573 0 6.267-1.173 8.373-3.36 2.16-2.16 2.84-5.213 2.84-7.667 0-.76-.053-1.467-.173-2.053H12.48z\"\n\t\t\t\t\t\t\tfill=\"currentColor\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</svg>\n\t\t\t\t\tContinue with Google\n\t\t\t\t</Button>\n\t\t\t</Field>\n\t\t</FieldGroup>\n\t</form>\n\t<FieldDescription class=\"px-6 text-center\">\n\t\tBy clicking continue, you agree to our <a href=\"##\">Terms of Service</a> and\n\t\t<a href=\"##\">Privacy Policy</a>.\n\t</FieldDescription>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/new-components-01/+page.svelte",
    "content": "<script lang=\"ts\">\n\timport AppearanceSettings from \"./components/appearance-settings.svelte\";\n\timport ButtonGroupDemo from \"./components/button-group-demo.svelte\";\n\timport ButtonGroupInputGroup from \"./components/button-group-input-group.svelte\";\n\timport ButtonGroupNested from \"./components/button-group-nested.svelte\";\n\timport ButtonGroupPopover from \"./components/button-group-popover.svelte\";\n\timport EmptyAvatarGroup from \"./components/empty-avatar-group.svelte\";\n\timport FieldDemo from \"./components/field-demo.svelte\";\n\timport FieldSlider from \"./components/field-slider.svelte\";\n\timport InputGroupButtonExample from \"./components/input-group-button.svelte\";\n\timport InputGroupDemo from \"./components/input-group-demo.svelte\";\n\timport ItemDemo from \"./components/item-demo.svelte\";\n\timport NotionPromptForm from \"./components/notion-prompt-form.svelte\";\n\timport SpinnerBadge from \"./components/spinner-badge.svelte\";\n\timport SpinnerEmpty from \"./components/spinner-empty.svelte\";\n\timport { Checkbox } from \"$lib/registry/ui/checkbox/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport * as Tooltip from \"$lib/registry/ui/tooltip/index.js\";\n</script>\n\n<Tooltip.Provider>\n\t<div class=\"flex flex-col justify-center\">\n\t\t<div\n\t\t\tclass=\"theme-container mx-auto grid max-w-[2200px] gap-8 p-6 md:grid-cols-2 md:p-8 lg:grid-cols-3 xl:grid-cols-4\"\n\t\t>\n\t\t\t<div class=\"flex flex-col gap-6 *:[div]:w-full *:[div]:max-w-full\">\n\t\t\t\t<FieldDemo />\n\t\t\t</div>\n\t\t\t<div class=\"flex flex-col gap-6 *:[div]:w-full *:[div]:max-w-full\">\n\t\t\t\t<div class=\"*:[div]:border\">\n\t\t\t\t\t<EmptyAvatarGroup />\n\t\t\t\t</div>\n\t\t\t\t<ButtonGroupInputGroup />\n\t\t\t\t<FieldSlider />\n\t\t\t\t<InputGroupDemo />\n\t\t\t</div>\n\t\t\t<div class=\"flex flex-col gap-6 *:[div]:w-full *:[div]:max-w-full\">\n\t\t\t\t<ItemDemo />\n\t\t\t\t<Field.Separator>Appearance Settings</Field.Separator>\n\t\t\t\t<AppearanceSettings />\n\t\t\t</div>\n\t\t\t<div\n\t\t\t\tclass=\"order-first flex flex-col gap-6 min-[1400px]:order-last *:[div]:w-full *:[div]:max-w-full\"\n\t\t\t>\n\t\t\t\t<div class=\"flex gap-2\">\n\t\t\t\t\t<SpinnerBadge />\n\t\t\t\t</div>\n\t\t\t\t<InputGroupButtonExample />\n\t\t\t\t<NotionPromptForm />\n\t\t\t\t<ButtonGroupDemo />\n\t\t\t\t<div class=\"flex gap-6\">\n\t\t\t\t\t<Field.Label for=\"checkbox-demo\">\n\t\t\t\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t\t\t\t<Checkbox id=\"checkbox-demo\" checked />\n\t\t\t\t\t\t\t<Field.Label for=\"checkbox-demo\" class=\"line-clamp-1\">\n\t\t\t\t\t\t\t\tI agree to the terms and conditions\n\t\t\t\t\t\t\t</Field.Label>\n\t\t\t\t\t\t</Field.Field>\n\t\t\t\t\t</Field.Label>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"flex gap-4\">\n\t\t\t\t\t<ButtonGroupNested />\n\t\t\t\t\t<ButtonGroupPopover />\n\t\t\t\t</div>\n\t\t\t\t<div class=\"*:[div]:border\">\n\t\t\t\t\t<SpinnerEmpty />\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n</Tooltip.Provider>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/new-components-01/components/appearance-settings.svelte",
    "content": "<script lang=\"ts\">\n\timport MinusIcon from \"@tabler/icons-svelte/icons/minus\";\n\timport PlusIcon from \"@tabler/icons-svelte/icons/plus\";\n\timport CheckIcon from \"@lucide/svelte/icons/check\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as ButtonGroup from \"$lib/registry/ui/button-group/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport { Input } from \"$lib/registry/ui/input/index.js\";\n\timport { Label } from \"$lib/registry/ui/label/index.js\";\n\timport * as RadioGroup from \"$lib/registry/ui/radio-group/index.js\";\n\n\timport { Switch } from \"$lib/registry/ui/switch/index.js\";\n\n\tconst accents = [\n\t\t{\n\t\t\tname: \"Blue\",\n\t\t\tvalue: \"blue\",\n\t\t},\n\t\t{\n\t\t\tname: \"Amber\",\n\t\t\tvalue: \"amber\",\n\t\t},\n\t\t{\n\t\t\tname: \"Green\",\n\t\t\tvalue: \"green\",\n\t\t},\n\t\t{\n\t\t\tname: \"Rose\",\n\t\t\tvalue: \"rose\",\n\t\t},\n\t];\n</script>\n\n<Field.Set>\n\t<Field.Group>\n\t\t<Field.Set>\n\t\t\t<Field.Legend>Compute Environment</Field.Legend>\n\t\t\t<Field.Description>Select the compute environment for your cluster.</Field.Description>\n\t\t\t<RadioGroup.Root value=\"kubernetes\">\n\t\t\t\t<Field.Label for=\"kubernetes-r2h\">\n\t\t\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t\t\t<Field.Content>\n\t\t\t\t\t\t\t<Field.Title>Kubernetes</Field.Title>\n\t\t\t\t\t\t\t<Field.Description>\n\t\t\t\t\t\t\t\tRun GPU workloads on a K8s configured cluster. This is the default.\n\t\t\t\t\t\t\t</Field.Description>\n\t\t\t\t\t\t</Field.Content>\n\t\t\t\t\t\t<RadioGroup.Item value=\"kubernetes\" id=\"kubernetes-r2h\" />\n\t\t\t\t\t</Field.Field>\n\t\t\t\t</Field.Label>\n\t\t\t\t<Field.Label for=\"vm-z4k\">\n\t\t\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t\t\t<Field.Content>\n\t\t\t\t\t\t\t<Field.Title>Virtual Machine</Field.Title>\n\t\t\t\t\t\t\t<Field.Description>\n\t\t\t\t\t\t\t\tAccess a VM configured cluster to run workloads. (Coming soon)\n\t\t\t\t\t\t\t</Field.Description>\n\t\t\t\t\t\t</Field.Content>\n\t\t\t\t\t\t<RadioGroup.Item value=\"vm\" id=\"vm-z4k\" />\n\t\t\t\t\t</Field.Field>\n\t\t\t\t</Field.Label>\n\t\t\t</RadioGroup.Root>\n\t\t</Field.Set>\n\t\t<Field.Separator />\n\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t<Field.Content>\n\t\t\t\t<Field.Title>Accent</Field.Title>\n\t\t\t\t<Field.Description>Select the accent color to use.</Field.Description>\n\t\t\t</Field.Content>\n\t\t\t<Field.Set aria-label=\"Accent\">\n\t\t\t\t<RadioGroup.Root class=\"flex flex-wrap gap-2\" value=\"blue\">\n\t\t\t\t\t{#each accents as accent (accent.value)}\n\t\t\t\t\t\t<Label\n\t\t\t\t\t\t\tfor={accent.value}\n\t\t\t\t\t\t\tdata-theme={accent.value}\n\t\t\t\t\t\t\tclass=\"flex size-6 items-center justify-center rounded-full data-[theme=amber]:bg-amber-600 data-[theme=blue]:bg-blue-700 data-[theme=green]:bg-green-600 data-[theme=rose]:bg-rose-600\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<RadioGroup.Item\n\t\t\t\t\t\t\t\tid={accent.value}\n\t\t\t\t\t\t\t\tvalue={accent.value}\n\t\t\t\t\t\t\t\taria-label={accent.name}\n\t\t\t\t\t\t\t\tclass=\"peer sr-only\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<CheckIcon\n\t\t\t\t\t\t\t\tclass=\"hidden size-4 stroke-white peer-data-[state=checked]:block\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</Label>\n\t\t\t\t\t{/each}\n\t\t\t\t</RadioGroup.Root>\n\t\t\t</Field.Set>\n\t\t</Field.Field>\n\t\t<Field.Separator />\n\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t<Field.Content>\n\t\t\t\t<Field.Label for=\"number-of-gpus-f6l\">Number of GPUs</Field.Label>\n\t\t\t\t<Field.Description>You can add more later.</Field.Description>\n\t\t\t</Field.Content>\n\t\t\t<ButtonGroup.Root>\n\t\t\t\t<Input\n\t\t\t\t\tid=\"number-of-gpus-f6l\"\n\t\t\t\t\tplaceholder=\"8\"\n\t\t\t\t\tsize={3}\n\t\t\t\t\tclass=\"w-14! font-mono\"\n\t\t\t\t\tmaxlength={3}\n\t\t\t\t/>\n\t\t\t\t<Button variant=\"outline\" size=\"icon-sm\" type=\"button\">\n\t\t\t\t\t<MinusIcon />\n\t\t\t\t</Button>\n\t\t\t\t<Button variant=\"outline\" size=\"icon-sm\" type=\"button\">\n\t\t\t\t\t<PlusIcon />\n\t\t\t\t</Button>\n\t\t\t</ButtonGroup.Root>\n\t\t</Field.Field>\n\t\t<Field.Separator />\n\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t<Field.Content>\n\t\t\t\t<Field.Label for=\"tinting\">Wallpaper Tinting</Field.Label>\n\t\t\t\t<Field.Description>Allow the wallpaper to be tinted.</Field.Description>\n\t\t\t</Field.Content>\n\t\t\t<Switch id=\"tinting\" checked />\n\t\t</Field.Field>\n\t</Field.Group>\n</Field.Set>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/new-components-01/components/button-group-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport ArchiveIcon from \"@lucide/svelte/icons/archive\";\n\timport ArrowLeftIcon from \"@lucide/svelte/icons/arrow-left\";\n\timport CalendarPlusIcon from \"@lucide/svelte/icons/calendar-plus\";\n\timport ClockIcon from \"@lucide/svelte/icons/clock\";\n\timport ListFilterIcon from \"@lucide/svelte/icons/list-filter\";\n\timport MailCheckIcon from \"@lucide/svelte/icons/mail-check\";\n\timport MoreHorizontalIcon from \"@lucide/svelte/icons/more-horizontal\";\n\timport TagIcon from \"@lucide/svelte/icons/tag\";\n\timport Trash2Icon from \"@lucide/svelte/icons/trash-2\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as ButtonGroup from \"$lib/registry/ui/button-group/index.js\";\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\n\tlet label = $state(\"personal\");\n</script>\n\n<ButtonGroup.Root>\n\t<ButtonGroup.Root class=\"hidden sm:flex\">\n\t\t<Button variant=\"outline\" size=\"icon\" aria-label=\"Go Back\">\n\t\t\t<ArrowLeftIcon />\n\t\t</Button>\n\t</ButtonGroup.Root>\n\t<ButtonGroup.Root>\n\t\t<Button variant=\"outline\">Archive</Button>\n\t</ButtonGroup.Root>\n\t<ButtonGroup.Root>\n\t\t<Button variant=\"outline\">Snooze</Button>\n\t\t<DropdownMenu.Root>\n\t\t\t<DropdownMenu.Trigger>\n\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t<Button variant=\"outline\" size=\"icon\" aria-label=\"More Options\" {...props}>\n\t\t\t\t\t\t<MoreHorizontalIcon />\n\t\t\t\t\t</Button>\n\t\t\t\t{/snippet}\n\t\t\t</DropdownMenu.Trigger>\n\t\t\t<DropdownMenu.Content align=\"end\" class=\"w-52\">\n\t\t\t\t<DropdownMenu.Group>\n\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t<MailCheckIcon />\n\t\t\t\t\t\tMark as Read\n\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t<ArchiveIcon />\n\t\t\t\t\t\tArchive\n\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t</DropdownMenu.Group>\n\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t<DropdownMenu.Group>\n\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t<ClockIcon />\n\t\t\t\t\t\tSnooze\n\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t<CalendarPlusIcon />\n\t\t\t\t\t\tAdd to Calendar\n\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t<ListFilterIcon />\n\t\t\t\t\t\tAdd to List\n\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t<DropdownMenu.Sub>\n\t\t\t\t\t\t<DropdownMenu.SubTrigger>\n\t\t\t\t\t\t\t<TagIcon />\n\t\t\t\t\t\t\tLabel As...\n\t\t\t\t\t\t</DropdownMenu.SubTrigger>\n\t\t\t\t\t\t<DropdownMenu.SubContent>\n\t\t\t\t\t\t\t<DropdownMenu.RadioGroup bind:value={label}>\n\t\t\t\t\t\t\t\t<DropdownMenu.RadioItem value=\"personal\">\n\t\t\t\t\t\t\t\t\tPersonal\n\t\t\t\t\t\t\t\t</DropdownMenu.RadioItem>\n\t\t\t\t\t\t\t\t<DropdownMenu.RadioItem value=\"work\">Work</DropdownMenu.RadioItem>\n\t\t\t\t\t\t\t\t<DropdownMenu.RadioItem value=\"other\">Other</DropdownMenu.RadioItem>\n\t\t\t\t\t\t\t</DropdownMenu.RadioGroup>\n\t\t\t\t\t\t</DropdownMenu.SubContent>\n\t\t\t\t\t</DropdownMenu.Sub>\n\t\t\t\t</DropdownMenu.Group>\n\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t<DropdownMenu.Group>\n\t\t\t\t\t<DropdownMenu.Item variant=\"destructive\">\n\t\t\t\t\t\t<Trash2Icon />\n\t\t\t\t\t\tTrash\n\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t</DropdownMenu.Group>\n\t\t\t</DropdownMenu.Content>\n\t\t</DropdownMenu.Root>\n\t</ButtonGroup.Root>\n</ButtonGroup.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/new-components-01/components/button-group-input-group.svelte",
    "content": "<script lang=\"ts\">\n\timport AudioLines from \"@lucide/svelte/icons/audio-lines\";\n\timport Plus from \"@lucide/svelte/icons/plus\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as ButtonGroup from \"$lib/registry/ui/button-group/index.js\";\n\timport * as InputGroup from \"$lib/registry/ui/input-group/index.js\";\n\timport * as Tooltip from \"$lib/registry/ui/tooltip/index.js\";\n\n\tlet voiceEnabled = $state(false);\n</script>\n\n<ButtonGroup.Root class=\"[--radius:9999rem]\">\n\t<ButtonGroup.Root>\n\t\t<Button variant=\"outline\" size=\"icon\">\n\t\t\t<Plus />\n\t\t</Button>\n\t</ButtonGroup.Root>\n\t<ButtonGroup.Root>\n\t\t<InputGroup.Root>\n\t\t\t<InputGroup.Input\n\t\t\t\tplaceholder={voiceEnabled ? \"Record and send audio...\" : \"Send a message...\"}\n\t\t\t\tdisabled={voiceEnabled}\n\t\t\t/>\n\t\t\t<InputGroup.Addon align=\"inline-end\">\n\t\t\t\t<Tooltip.Root>\n\t\t\t\t\t<Tooltip.Trigger>\n\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t<InputGroup.Button\n\t\t\t\t\t\t\t\t{...props}\n\t\t\t\t\t\t\t\tonclick={() => (voiceEnabled = !voiceEnabled)}\n\t\t\t\t\t\t\t\tsize=\"icon-xs\"\n\t\t\t\t\t\t\t\tdata-active={voiceEnabled}\n\t\t\t\t\t\t\t\tclass=\"data-[active=true]:bg-orange-100 data-[active=true]:text-orange-700 dark:data-[active=true]:bg-orange-800 dark:data-[active=true]:text-orange-100\"\n\t\t\t\t\t\t\t\taria-pressed={voiceEnabled}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<AudioLines />\n\t\t\t\t\t\t\t</InputGroup.Button>\n\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t</Tooltip.Trigger>\n\t\t\t\t\t<Tooltip.Content>Voice Mode</Tooltip.Content>\n\t\t\t\t</Tooltip.Root>\n\t\t\t</InputGroup.Addon>\n\t\t</InputGroup.Root>\n\t</ButtonGroup.Root>\n</ButtonGroup.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/new-components-01/components/button-group-nested.svelte",
    "content": "<script lang=\"ts\">\n\timport ArrowLeft from \"@lucide/svelte/icons/arrow-left\";\n\timport ArrowRight from \"@lucide/svelte/icons/arrow-right\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as ButtonGroup from \"$lib/registry/ui/button-group/index.js\";\n</script>\n\n<ButtonGroup.Root>\n\t<ButtonGroup.Root>\n\t\t<Button variant=\"outline\" size=\"sm\">1</Button>\n\t\t<Button variant=\"outline\" size=\"sm\">2</Button>\n\t\t<Button variant=\"outline\" size=\"sm\">3</Button>\n\t\t<Button variant=\"outline\" size=\"sm\">4</Button>\n\t\t<Button variant=\"outline\" size=\"sm\">5</Button>\n\t</ButtonGroup.Root>\n\t<ButtonGroup.Root>\n\t\t<Button variant=\"outline\" size=\"icon-sm\" aria-label=\"Previous\">\n\t\t\t<ArrowLeft />\n\t\t</Button>\n\t\t<Button variant=\"outline\" size=\"icon-sm\" aria-label=\"Next\">\n\t\t\t<ArrowRight />\n\t\t</Button>\n\t</ButtonGroup.Root>\n</ButtonGroup.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/new-components-01/components/button-group-popover.svelte",
    "content": "<script lang=\"ts\">\n\timport Bot from \"@lucide/svelte/icons/bot\";\n\timport ChevronDown from \"@lucide/svelte/icons/chevron-down\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as ButtonGroup from \"$lib/registry/ui/button-group/index.js\";\n\timport * as Popover from \"$lib/registry/ui/popover/index.js\";\n\timport { Separator } from \"$lib/registry/ui/separator/index.js\";\n\timport { Textarea } from \"$lib/registry/ui/textarea/index.js\";\n</script>\n\n<ButtonGroup.Root>\n\t<Button variant=\"outline\">\n\t\t<Bot />\n\t\tCopilot\n\t</Button>\n\t<Popover.Root>\n\t\t<Popover.Trigger>\n\t\t\t{#snippet child({ props })}\n\t\t\t\t<Button {...props} variant=\"outline\" size=\"icon\" aria-label=\"Open Popover\">\n\t\t\t\t\t<ChevronDown />\n\t\t\t\t</Button>\n\t\t\t{/snippet}\n\t\t</Popover.Trigger>\n\t\t<Popover.Content align=\"end\" class=\"rounded-xl p-0 text-sm\">\n\t\t\t<div class=\"px-4 py-3\">\n\t\t\t\t<div class=\"text-sm font-medium\">Agent Tasks</div>\n\t\t\t</div>\n\t\t\t<Separator />\n\t\t\t<div class=\"p-4 text-sm *:[p:not(:last-child)]:mb-2\">\n\t\t\t\t<Textarea\n\t\t\t\t\tplaceholder=\"Describe your task in natural language.\"\n\t\t\t\t\tclass=\"mb-4 resize-none\"\n\t\t\t\t/>\n\t\t\t\t<p class=\"font-medium\">Start a new task with Copilot</p>\n\t\t\t\t<p class=\"text-muted-foreground\">\n\t\t\t\t\tDescribe your task in natural language. Copilot will work in the background and\n\t\t\t\t\topen a pull request for your review.\n\t\t\t\t</p>\n\t\t\t</div>\n\t\t</Popover.Content>\n\t</Popover.Root>\n</ButtonGroup.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/new-components-01/components/empty-avatar-group.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Empty from \"$lib/registry/ui/empty/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Avatar from \"$lib/registry/ui/avatar/index.js\";\n\timport PlusIcon from \"@lucide/svelte/icons/plus\";\n</script>\n\n<Empty.Root>\n\t<Empty.Header>\n\t\t<Empty.Media>\n\t\t\t<div class=\"*:ring-background flex -space-x-2 *:size-12 *:ring-2 *:grayscale\">\n\t\t\t\t<Avatar.Root>\n\t\t\t\t\t<Avatar.Image src=\"https://github.com/shadcn.png\" alt=\"@shadcn\" />\n\t\t\t\t\t<Avatar.Fallback>CN</Avatar.Fallback>\n\t\t\t\t</Avatar.Root>\n\t\t\t\t<Avatar.Root>\n\t\t\t\t\t<Avatar.Image src=\"https://github.com/maxleiter.png\" alt=\"@maxleiter\" />\n\t\t\t\t\t<Avatar.Fallback>LR</Avatar.Fallback>\n\t\t\t\t</Avatar.Root>\n\t\t\t\t<Avatar.Root>\n\t\t\t\t\t<Avatar.Image src=\"https://github.com/evilrabbit.png\" alt=\"@evilrabbit\" />\n\t\t\t\t\t<Avatar.Fallback>ER</Avatar.Fallback>\n\t\t\t\t</Avatar.Root>\n\t\t\t</div>\n\t\t</Empty.Media>\n\t\t<Empty.Title>No Team Members</Empty.Title>\n\t\t<Empty.Description>Invite your team to collaborate on this project.</Empty.Description>\n\t</Empty.Header>\n\t<Empty.Content>\n\t\t<Button size=\"sm\">\n\t\t\t<PlusIcon />\n\t\t\tInvite Members\n\t\t</Button>\n\t</Empty.Content>\n</Empty.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/new-components-01/components/empty-input-group.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Empty from \"$lib/registry/ui/empty/index.js\";\n\timport * as InputGroup from \"$lib/registry/ui/input-group/index.js\";\n\timport * as Kbd from \"$lib/registry/ui/kbd/index.js\";\n\timport SearchIcon from \"@lucide/svelte/icons/search\";\n</script>\n\n<Empty.Root>\n\t<Empty.Header>\n\t\t<Empty.Title>404 - Not Found</Empty.Title>\n\t\t<Empty.Description>\n\t\t\tThe page you're looking for doesn't exist. Try searching for what you need below.\n\t\t</Empty.Description>\n\t</Empty.Header>\n\t<Empty.Content>\n\t\t<InputGroup.Root class=\"sm:w-3/4\">\n\t\t\t<InputGroup.Input placeholder=\"Try searching for pages...\" />\n\t\t\t<InputGroup.Addon>\n\t\t\t\t<SearchIcon />\n\t\t\t</InputGroup.Addon>\n\t\t\t<InputGroup.Addon align=\"inline-end\">\n\t\t\t\t<Kbd.Root>/</Kbd.Root>\n\t\t\t</InputGroup.Addon>\n\t\t</InputGroup.Root>\n\t\t<Empty.Description>\n\t\t\tNeed help? <a href=\"#/\">Contact support</a>\n\t\t</Empty.Description>\n\t</Empty.Content>\n</Empty.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/new-components-01/components/field-choice-card.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport * as RadioGroup from \"$lib/registry/ui/radio-group/index.js\";\n\n\tlet computeEnvironment = $state(\"kubernetes\");\n</script>\n\n<div class=\"w-full max-w-md\">\n\t<Field.Group>\n\t\t<Field.Set>\n\t\t\t<Field.Label for=\"compute-environment-p8w\">Compute Environment</Field.Label>\n\t\t\t<Field.Description>Select the compute environment for your cluster.</Field.Description>\n\t\t\t<RadioGroup.Root bind:value={computeEnvironment}>\n\t\t\t\t<Field.Label for=\"kubernetes-r2h\">\n\t\t\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t\t\t<Field.Content>\n\t\t\t\t\t\t\t<Field.Title>Kubernetes</Field.Title>\n\t\t\t\t\t\t\t<Field.Description>\n\t\t\t\t\t\t\t\tRun GPU workloads on a K8s configured cluster.\n\t\t\t\t\t\t\t</Field.Description>\n\t\t\t\t\t\t</Field.Content>\n\t\t\t\t\t\t<RadioGroup.Item value=\"kubernetes\" id=\"kubernetes-r2h\" />\n\t\t\t\t\t</Field.Field>\n\t\t\t\t</Field.Label>\n\t\t\t\t<Field.Label for=\"vm-z4k\">\n\t\t\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t\t\t<Field.Content>\n\t\t\t\t\t\t\t<Field.Title>Virtual Machine</Field.Title>\n\t\t\t\t\t\t\t<Field.Description>\n\t\t\t\t\t\t\t\tAccess a VM configured cluster to run GPU workloads.\n\t\t\t\t\t\t\t</Field.Description>\n\t\t\t\t\t\t</Field.Content>\n\t\t\t\t\t\t<RadioGroup.Item value=\"vm\" id=\"vm-z4k\" />\n\t\t\t\t\t</Field.Field>\n\t\t\t\t</Field.Label>\n\t\t\t</RadioGroup.Root>\n\t\t</Field.Set>\n\t</Field.Group>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/new-components-01/components/field-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport { Checkbox } from \"$lib/registry/ui/checkbox/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport { Input } from \"$lib/registry/ui/input/index.js\";\n\timport * as Select from \"$lib/registry/ui/select/index.js\";\n\timport { Textarea } from \"$lib/registry/ui/textarea/index.js\";\n\n\tlet month = $state<string>();\n\tlet year = $state<string>();\n</script>\n\n<div class=\"w-full max-w-md\">\n\t<form>\n\t\t<Field.Group>\n\t\t\t<Field.Set>\n\t\t\t\t<Field.Legend>Payment Method</Field.Legend>\n\t\t\t\t<Field.Description>All transactions are secure and encrypted</Field.Description>\n\t\t\t\t<Field.Group>\n\t\t\t\t\t<Field.Field>\n\t\t\t\t\t\t<Field.Label for=\"checkout-7j9-card-name-43j\">Name on Card</Field.Label>\n\t\t\t\t\t\t<Input id=\"checkout-7j9-card-name-43j\" placeholder=\"Evil Rabbit\" required />\n\t\t\t\t\t</Field.Field>\n\t\t\t\t\t<Field.Field>\n\t\t\t\t\t\t<Field.Label for=\"checkout-7j9-card-number-uw1\">Card Number</Field.Label>\n\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\tid=\"checkout-7j9-card-number-uw1\"\n\t\t\t\t\t\t\tplaceholder=\"1234 5678 9012 3456\"\n\t\t\t\t\t\t\trequired\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<Field.Description>Enter your 16-digit card number</Field.Description>\n\t\t\t\t\t</Field.Field>\n\t\t\t\t\t<div class=\"grid grid-cols-3 gap-4\">\n\t\t\t\t\t\t<Field.Field>\n\t\t\t\t\t\t\t<Field.Label for=\"checkout-exp-month-ts6\">Month</Field.Label>\n\t\t\t\t\t\t\t<Select.Root type=\"single\" bind:value={month}>\n\t\t\t\t\t\t\t\t<Select.Trigger id=\"checkout-exp-month-ts6\">\n\t\t\t\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t\t\t\t{month || \"MM\"}\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t</Select.Trigger>\n\t\t\t\t\t\t\t\t<Select.Content>\n\t\t\t\t\t\t\t\t\t<Select.Item value=\"01\">01</Select.Item>\n\t\t\t\t\t\t\t\t\t<Select.Item value=\"02\">02</Select.Item>\n\t\t\t\t\t\t\t\t\t<Select.Item value=\"03\">03</Select.Item>\n\t\t\t\t\t\t\t\t\t<Select.Item value=\"04\">04</Select.Item>\n\t\t\t\t\t\t\t\t\t<Select.Item value=\"05\">05</Select.Item>\n\t\t\t\t\t\t\t\t\t<Select.Item value=\"06\">06</Select.Item>\n\t\t\t\t\t\t\t\t\t<Select.Item value=\"07\">07</Select.Item>\n\t\t\t\t\t\t\t\t\t<Select.Item value=\"08\">08</Select.Item>\n\t\t\t\t\t\t\t\t\t<Select.Item value=\"09\">09</Select.Item>\n\t\t\t\t\t\t\t\t\t<Select.Item value=\"10\">10</Select.Item>\n\t\t\t\t\t\t\t\t\t<Select.Item value=\"11\">11</Select.Item>\n\t\t\t\t\t\t\t\t\t<Select.Item value=\"12\">12</Select.Item>\n\t\t\t\t\t\t\t\t</Select.Content>\n\t\t\t\t\t\t\t</Select.Root>\n\t\t\t\t\t\t</Field.Field>\n\t\t\t\t\t\t<Field.Field>\n\t\t\t\t\t\t\t<Field.Label for=\"checkout-7j9-exp-year-f59\">Year</Field.Label>\n\t\t\t\t\t\t\t<Select.Root type=\"single\" bind:value={year}>\n\t\t\t\t\t\t\t\t<Select.Trigger id=\"checkout-7j9-exp-year-f59\">\n\t\t\t\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t\t\t\t{year || \"YYYY\"}\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t</Select.Trigger>\n\t\t\t\t\t\t\t\t<Select.Content>\n\t\t\t\t\t\t\t\t\t<Select.Item value=\"2024\">2024</Select.Item>\n\t\t\t\t\t\t\t\t\t<Select.Item value=\"2025\">2025</Select.Item>\n\t\t\t\t\t\t\t\t\t<Select.Item value=\"2026\">2026</Select.Item>\n\t\t\t\t\t\t\t\t\t<Select.Item value=\"2027\">2027</Select.Item>\n\t\t\t\t\t\t\t\t\t<Select.Item value=\"2028\">2028</Select.Item>\n\t\t\t\t\t\t\t\t\t<Select.Item value=\"2029\">2029</Select.Item>\n\t\t\t\t\t\t\t\t</Select.Content>\n\t\t\t\t\t\t\t</Select.Root>\n\t\t\t\t\t\t</Field.Field>\n\t\t\t\t\t\t<Field.Field>\n\t\t\t\t\t\t\t<Field.Label for=\"checkout-7j9-cvv\">CVV</Field.Label>\n\t\t\t\t\t\t\t<Input id=\"checkout-7j9-cvv\" placeholder=\"123\" required />\n\t\t\t\t\t\t</Field.Field>\n\t\t\t\t\t</div>\n\t\t\t\t</Field.Group>\n\t\t\t</Field.Set>\n\t\t\t<Field.Separator />\n\t\t\t<Field.Set>\n\t\t\t\t<Field.Legend>Billing Address</Field.Legend>\n\t\t\t\t<Field.Description>\n\t\t\t\t\tThe billing address associated with your payment method\n\t\t\t\t</Field.Description>\n\t\t\t\t<Field.Group>\n\t\t\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t\t\t<Checkbox id=\"checkout-7j9-same-as-shipping-wgm\" checked={true} />\n\t\t\t\t\t\t<Field.Label for=\"checkout-7j9-same-as-shipping-wgm\" class=\"font-normal\">\n\t\t\t\t\t\t\tSame as shipping address\n\t\t\t\t\t\t</Field.Label>\n\t\t\t\t\t</Field.Field>\n\t\t\t\t</Field.Group>\n\t\t\t</Field.Set>\n\t\t\t<Field.Separator />\n\t\t\t<Field.Set>\n\t\t\t\t<Field.Group>\n\t\t\t\t\t<Field.Field>\n\t\t\t\t\t\t<Field.Label for=\"checkout-7j9-optional-comments\">Comments</Field.Label>\n\t\t\t\t\t\t<Textarea\n\t\t\t\t\t\t\tid=\"checkout-7j9-optional-comments\"\n\t\t\t\t\t\t\tplaceholder=\"Add any additional comments\"\n\t\t\t\t\t\t\tclass=\"resize-none\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Field.Field>\n\t\t\t\t</Field.Group>\n\t\t\t</Field.Set>\n\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t<Button type=\"submit\">Submit</Button>\n\t\t\t\t<Button variant=\"outline\" type=\"button\">Cancel</Button>\n\t\t\t</Field.Field>\n\t\t</Field.Group>\n\t</form>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/new-components-01/components/field-slider.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport { Slider } from \"$lib/registry/ui/slider/index.js\";\n\n\tlet value = $state([200, 800]);\n</script>\n\n<div class=\"w-full max-w-md\">\n\t<Field.Field>\n\t\t<Field.Label>Price Range</Field.Label>\n\t\t<Field.Description>\n\t\t\tSet your budget range ($<span class=\"font-medium tabular-nums\">{value[0]}</span> -\n\t\t\t<span class=\"font-medium tabular-nums\">{value[1]}</span>).\n\t\t</Field.Description>\n\t\t<Slider\n\t\t\ttype=\"multiple\"\n\t\t\tbind:value\n\t\t\tmax={1000}\n\t\t\tmin={0}\n\t\t\tstep={10}\n\t\t\tclass=\"mt-2 w-full\"\n\t\t\taria-label=\"Price Range\"\n\t\t/>\n\t</Field.Field>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/new-components-01/components/input-group-button.svelte",
    "content": "<script lang=\"ts\">\n\timport * as InputGroup from \"$lib/registry/ui/input-group/index.js\";\n\timport { Label } from \"$lib/registry/ui/label/index.js\";\n\timport * as Popover from \"$lib/registry/ui/popover/index.js\";\n\timport InfoIcon from \"@lucide/svelte/icons/info\";\n\timport StarIcon from \"@lucide/svelte/icons/star\";\n\n\tlet isFavorite = $state(false);\n</script>\n\n<div class=\"grid w-full max-w-sm gap-6\">\n\t<Label for=\"input-secure-19\" class=\"sr-only\">Input Secure</Label>\n\t<InputGroup.Root class=\"[--radius:9999px]\">\n\t\t<InputGroup.Input id=\"input-secure-19\" class=\"!ps-0.5\" />\n\t\t<Popover.Root>\n\t\t\t<Popover.Trigger>\n\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t<InputGroup.Addon>\n\t\t\t\t\t\t<InputGroup.Button\n\t\t\t\t\t\t\t{...props}\n\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\tsize=\"icon-xs\"\n\t\t\t\t\t\t\taria-label=\"Info\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<InfoIcon />\n\t\t\t\t\t\t</InputGroup.Button>\n\t\t\t\t\t</InputGroup.Addon>\n\t\t\t\t{/snippet}\n\t\t\t</Popover.Trigger>\n\t\t\t<Popover.Content\n\t\t\t\talign=\"start\"\n\t\t\t\talignOffset={10}\n\t\t\t\tclass=\"flex flex-col gap-1 rounded-xl text-sm\"\n\t\t\t>\n\t\t\t\t<p class=\"font-medium\">Your connection is not secure.</p>\n\t\t\t\t<p>You should not enter any sensitive information on this site.</p>\n\t\t\t</Popover.Content>\n\t\t</Popover.Root>\n\t\t<InputGroup.Addon class=\"text-muted-foreground !ps-1\">https://</InputGroup.Addon>\n\t\t<InputGroup.Addon align=\"inline-end\">\n\t\t\t<InputGroup.Button\n\t\t\t\tonclick={() => (isFavorite = !isFavorite)}\n\t\t\t\tsize=\"icon-xs\"\n\t\t\t\taria-label=\"Favorite\"\n\t\t\t>\n\t\t\t\t<StarIcon\n\t\t\t\t\tdata-favorite={isFavorite}\n\t\t\t\t\tclass=\"data-[favorite=true]:fill-primary data-[favorite=true]:stroke-primary\"\n\t\t\t\t/>\n\t\t\t</InputGroup.Button>\n\t\t</InputGroup.Addon>\n\t</InputGroup.Root>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/new-components-01/components/input-group-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport * as InputGroup from \"$lib/registry/ui/input-group/index.js\";\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\timport * as Tooltip from \"$lib/registry/ui/tooltip/index.js\";\n\timport { Separator } from \"$lib/registry/ui/separator/index.js\";\n\timport SearchIcon from \"@lucide/svelte/icons/search\";\n\timport ArrowUpIcon from \"@lucide/svelte/icons/arrow-up\";\n\timport InfoIcon from \"@lucide/svelte/icons/info\";\n\timport PlusIcon from \"@lucide/svelte/icons/plus\";\n\timport CheckIcon from \"@lucide/svelte/icons/check\";\n</script>\n\n<div class=\"grid w-full max-w-sm gap-6\">\n\t<InputGroup.Root>\n\t\t<InputGroup.Input placeholder=\"Search...\" />\n\t\t<InputGroup.Addon>\n\t\t\t<SearchIcon />\n\t\t</InputGroup.Addon>\n\t\t<InputGroup.Addon align=\"inline-end\">12 results</InputGroup.Addon>\n\t</InputGroup.Root>\n\t<InputGroup.Root>\n\t\t<InputGroup.Input placeholder=\"example.com\" class=\"!ps-1\" />\n\t\t<InputGroup.Addon>\n\t\t\t<InputGroup.Text>https://</InputGroup.Text>\n\t\t</InputGroup.Addon>\n\t\t<InputGroup.Addon align=\"inline-end\">\n\t\t\t<Tooltip.Root>\n\t\t\t\t<Tooltip.Trigger>\n\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t<InputGroup.Button {...props} class=\"rounded-full\" size=\"icon-xs\">\n\t\t\t\t\t\t\t<InfoIcon />\n\t\t\t\t\t\t</InputGroup.Button>\n\t\t\t\t\t{/snippet}\n\t\t\t\t</Tooltip.Trigger>\n\t\t\t\t<Tooltip.Content>This is content in a tooltip.</Tooltip.Content>\n\t\t\t</Tooltip.Root>\n\t\t</InputGroup.Addon>\n\t</InputGroup.Root>\n\t<InputGroup.Root>\n\t\t<InputGroup.Textarea placeholder=\"Ask, Search or Chat...\" />\n\t\t<InputGroup.Addon align=\"block-end\">\n\t\t\t<InputGroup.Button variant=\"outline\" class=\"rounded-full\" size=\"icon-xs\">\n\t\t\t\t<PlusIcon />\n\t\t\t</InputGroup.Button>\n\t\t\t<DropdownMenu.Root>\n\t\t\t\t<DropdownMenu.Trigger>\n\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t<InputGroup.Button {...props} variant=\"ghost\">Auto</InputGroup.Button>\n\t\t\t\t\t{/snippet}\n\t\t\t\t</DropdownMenu.Trigger>\n\t\t\t\t<DropdownMenu.Content side=\"top\" align=\"start\" class=\"[--radius:0.95rem]\">\n\t\t\t\t\t<DropdownMenu.Item>Auto</DropdownMenu.Item>\n\t\t\t\t\t<DropdownMenu.Item>Agent</DropdownMenu.Item>\n\t\t\t\t\t<DropdownMenu.Item>Manual</DropdownMenu.Item>\n\t\t\t\t</DropdownMenu.Content>\n\t\t\t</DropdownMenu.Root>\n\t\t\t<InputGroup.Text class=\"ms-auto\">52% used</InputGroup.Text>\n\t\t\t<Separator orientation=\"vertical\" class=\"!h-4\" />\n\t\t\t<InputGroup.Button variant=\"default\" class=\"rounded-full\" size=\"icon-xs\" disabled>\n\t\t\t\t<ArrowUpIcon />\n\t\t\t\t<span class=\"sr-only\">Send</span>\n\t\t\t</InputGroup.Button>\n\t\t</InputGroup.Addon>\n\t</InputGroup.Root>\n\t<InputGroup.Root>\n\t\t<InputGroup.Input placeholder=\"@shadcn\" />\n\t\t<InputGroup.Addon align=\"inline-end\">\n\t\t\t<div\n\t\t\t\tclass=\"bg-primary text-primary-foreground flex size-4 items-center justify-center rounded-full\"\n\t\t\t>\n\t\t\t\t<CheckIcon class=\"size-3\" />\n\t\t\t</div>\n\t\t</InputGroup.Addon>\n\t</InputGroup.Root>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/new-components-01/components/input-group-textarea.svelte",
    "content": "<script lang=\"ts\">\n\timport * as InputGroup from \"$lib/registry/ui/input-group/index.js\";\n\timport CopyIcon from \"@lucide/svelte/icons/copy\";\n\timport CornerDownLeftIcon from \"@lucide/svelte/icons/corner-down-left\";\n\timport RefreshCwIcon from \"@lucide/svelte/icons/refresh-cw\";\n</script>\n\n<div class=\"grid w-full max-w-md gap-4\">\n\t<InputGroup.Root>\n\t\t<InputGroup.Addon align=\"block-start\" class=\"border-b\">\n\t\t\t<InputGroup.Text class=\"font-mono font-medium\">\n\t\t\t\t<svg\n\t\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\t\t\twidth=\"16\"\n\t\t\t\t\theight=\"16\"\n\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\tfill=\"none\"\n\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\tstroke-width=\"2\"\n\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t\tclass=\"lucide lucide-file-code\"\n\t\t\t\t>\n\t\t\t\t\t<path\n\t\t\t\t\t\td=\"M14.5 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7.5L14.5 2z\"\n\t\t\t\t\t/>\n\t\t\t\t\t<polyline points=\"14,2 14,8 20,8\" />\n\t\t\t\t\t<path d=\"m10 13-2 2 2 2\" />\n\t\t\t\t\t<path d=\"m14 17 2-2-2-2\" />\n\t\t\t\t</svg>\n\t\t\t\tscript.js\n\t\t\t</InputGroup.Text>\n\t\t\t<InputGroup.Button class=\"ms-auto\" size=\"icon-xs\">\n\t\t\t\t<RefreshCwIcon />\n\t\t\t</InputGroup.Button>\n\t\t\t<InputGroup.Button variant=\"ghost\" size=\"icon-xs\">\n\t\t\t\t<CopyIcon />\n\t\t\t</InputGroup.Button>\n\t\t</InputGroup.Addon>\n\t\t<InputGroup.Textarea placeholder=\"console.log('Hello, world!');\" class=\"min-h-[200px]\" />\n\t\t<InputGroup.Addon align=\"block-end\" class=\"border-t\">\n\t\t\t<InputGroup.Text>Line 1, Column 1</InputGroup.Text>\n\t\t\t<InputGroup.Button size=\"sm\" class=\"ms-auto\" variant=\"default\">\n\t\t\t\tRun <CornerDownLeftIcon />\n\t\t\t</InputGroup.Button>\n\t\t</InputGroup.Addon>\n\t</InputGroup.Root>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/new-components-01/components/item-avatar.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Item from \"$lib/registry/ui/item/index.js\";\n\timport * as Avatar from \"$lib/registry/ui/avatar/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport Plus from \"@lucide/svelte/icons/plus\";\n</script>\n\n<div class=\"flex w-full max-w-lg flex-col gap-6\">\n\t<Item.Root variant=\"outline\">\n\t\t<Item.Media>\n\t\t\t<Avatar.Root class=\"size-10\">\n\t\t\t\t<Avatar.Image src=\"https://github.com/evilrabbit.png\" />\n\t\t\t\t<Avatar.Fallback>ER</Avatar.Fallback>\n\t\t\t</Avatar.Root>\n\t\t</Item.Media>\n\t\t<Item.Content>\n\t\t\t<Item.Title>Evil Rabbit</Item.Title>\n\t\t\t<Item.Description>Last seen 5 months ago</Item.Description>\n\t\t</Item.Content>\n\t\t<Item.Actions>\n\t\t\t<Button size=\"icon\" variant=\"outline\" class=\"rounded-full\" aria-label=\"Invite\">\n\t\t\t\t<Plus />\n\t\t\t</Button>\n\t\t</Item.Actions>\n\t</Item.Root>\n\t<Item.Root variant=\"outline\">\n\t\t<Item.Media>\n\t\t\t<div\n\t\t\t\tclass=\"*:data-[slot=avatar]:ring-background flex -space-x-2 *:data-[slot=avatar]:ring-2 *:data-[slot=avatar]:grayscale\"\n\t\t\t>\n\t\t\t\t<Avatar.Root class=\"hidden sm:flex\">\n\t\t\t\t\t<Avatar.Image src=\"https://github.com/shadcn.png\" alt=\"@shadcn\" />\n\t\t\t\t\t<Avatar.Fallback>CN</Avatar.Fallback>\n\t\t\t\t</Avatar.Root>\n\t\t\t\t<Avatar.Root class=\"hidden sm:flex\">\n\t\t\t\t\t<Avatar.Image src=\"https://github.com/maxleiter.png\" alt=\"@maxleiter\" />\n\t\t\t\t\t<Avatar.Fallback>LR</Avatar.Fallback>\n\t\t\t\t</Avatar.Root>\n\t\t\t\t<Avatar.Root>\n\t\t\t\t\t<Avatar.Image src=\"https://github.com/evilrabbit.png\" alt=\"@evilrabbit\" />\n\t\t\t\t\t<Avatar.Fallback>ER</Avatar.Fallback>\n\t\t\t\t</Avatar.Root>\n\t\t\t</div>\n\t\t</Item.Media>\n\t\t<Item.Content>\n\t\t\t<Item.Title>No Team Members</Item.Title>\n\t\t\t<Item.Description>Invite your team to collaborate on this project.</Item.Description>\n\t\t</Item.Content>\n\t\t<Item.Actions>\n\t\t\t<Button size=\"sm\" variant=\"outline\">Invite</Button>\n\t\t</Item.Actions>\n\t</Item.Root>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/new-components-01/components/item-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport BadgeCheckIcon from \"@lucide/svelte/icons/badge-check\";\n\timport ChevronRightIcon from \"@lucide/svelte/icons/chevron-right\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Item from \"$lib/registry/ui/item/index.js\";\n</script>\n\n<div class=\"flex w-full max-w-md flex-col gap-6\">\n\t<Item.Root variant=\"outline\">\n\t\t<Item.Content>\n\t\t\t<Item.Title>Two-factor authentication</Item.Title>\n\t\t\t<Item.Description class=\"text-pretty xl:hidden 2xl:block\">\n\t\t\t\tVerify via email or phone number.\n\t\t\t</Item.Description>\n\t\t</Item.Content>\n\t\t<Item.Actions>\n\t\t\t<Button size=\"sm\">Enable</Button>\n\t\t</Item.Actions>\n\t</Item.Root>\n\t<Item.Root variant=\"outline\" size=\"sm\">\n\t\t{#snippet child({ props })}\n\t\t\t<a href=\"#/\" {...props}>\n\t\t\t\t<Item.Media>\n\t\t\t\t\t<BadgeCheckIcon class=\"size-5\" />\n\t\t\t\t</Item.Media>\n\t\t\t\t<Item.Content>\n\t\t\t\t\t<Item.Title>Your profile has been verified.</Item.Title>\n\t\t\t\t</Item.Content>\n\t\t\t\t<Item.Actions>\n\t\t\t\t\t<ChevronRightIcon class=\"size-4\" />\n\t\t\t\t</Item.Actions>\n\t\t\t</a>\n\t\t{/snippet}\n\t</Item.Root>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/new-components-01/components/notion-prompt-form.svelte",
    "content": "<script lang=\"ts\">\n\timport AtIcon from \"@lucide/svelte/icons/at-sign\";\n\timport ArrowUpIcon from \"@lucide/svelte/icons/arrow-up\";\n\timport AppsIcon from \"@lucide/svelte/icons/grid-3x3\";\n\timport BookIcon from \"@lucide/svelte/icons/book\";\n\timport CirclePlusIcon from \"@lucide/svelte/icons/circle-plus\";\n\timport PaperclipIcon from \"@lucide/svelte/icons/paperclip\";\n\timport PlusIcon from \"@lucide/svelte/icons/plus\";\n\timport GlobeIcon from \"@lucide/svelte/icons/globe\";\n\timport XIcon from \"@lucide/svelte/icons/x\";\n\timport { Avatar, AvatarFallback, AvatarImage } from \"$lib/registry/ui/avatar/index.js\";\n\timport { Badge } from \"$lib/registry/ui/badge/index.js\";\n\timport * as Command from \"$lib/registry/ui/command/index.js\";\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport * as InputGroup from \"$lib/registry/ui/input-group/index.js\";\n\timport * as Popover from \"$lib/registry/ui/popover/index.js\";\n\timport { Switch } from \"$lib/registry/ui/switch/index.js\";\n\timport * as Tooltip from \"$lib/registry/ui/tooltip/index.js\";\n\n\tconst SAMPLE_DATA = {\n\t\tmentionable: [\n\t\t\t{\n\t\t\t\ttype: \"page\",\n\t\t\t\ttitle: \"Meeting Notes\",\n\t\t\t\timage: \"📝\",\n\t\t\t},\n\t\t\t{\n\t\t\t\ttype: \"page\",\n\t\t\t\ttitle: \"Project Dashboard\",\n\t\t\t\timage: \"📊\",\n\t\t\t},\n\t\t\t{\n\t\t\t\ttype: \"page\",\n\t\t\t\ttitle: \"Ideas & Brainstorming\",\n\t\t\t\timage: \"💡\",\n\t\t\t},\n\t\t\t{\n\t\t\t\ttype: \"page\",\n\t\t\t\ttitle: \"Calendar & Events\",\n\t\t\t\timage: \"📅\",\n\t\t\t},\n\t\t\t{\n\t\t\t\ttype: \"page\",\n\t\t\t\ttitle: \"Documentation\",\n\t\t\t\timage: \"📚\",\n\t\t\t},\n\t\t\t{\n\t\t\t\ttype: \"page\",\n\t\t\t\ttitle: \"Goals & Objectives\",\n\t\t\t\timage: \"🎯\",\n\t\t\t},\n\t\t\t{\n\t\t\t\ttype: \"page\",\n\t\t\t\ttitle: \"Budget Planning\",\n\t\t\t\timage: \"💰\",\n\t\t\t},\n\t\t\t{\n\t\t\t\ttype: \"page\",\n\t\t\t\ttitle: \"Team Directory\",\n\t\t\t\timage: \"👥\",\n\t\t\t},\n\t\t\t{\n\t\t\t\ttype: \"page\",\n\t\t\t\ttitle: \"Technical Specs\",\n\t\t\t\timage: \"🔧\",\n\t\t\t},\n\t\t\t{\n\t\t\t\ttype: \"page\",\n\t\t\t\ttitle: \"Analytics Report\",\n\t\t\t\timage: \"📈\",\n\t\t\t},\n\t\t\t{\n\t\t\t\ttype: \"user\",\n\t\t\t\ttitle: \"shadcn\",\n\t\t\t\timage: \"https://github.com/shadcn.png\",\n\t\t\t\tworkspace: \"Workspace\",\n\t\t\t},\n\t\t\t{\n\t\t\t\ttype: \"user\",\n\t\t\t\ttitle: \"maxleiter\",\n\t\t\t\timage: \"https://github.com/maxleiter.png\",\n\t\t\t\tworkspace: \"Workspace\",\n\t\t\t},\n\t\t\t{\n\t\t\t\ttype: \"user\",\n\t\t\t\ttitle: \"evilrabbit\",\n\t\t\t\timage: \"https://github.com/evilrabbit.png\",\n\t\t\t\tworkspace: \"Workspace\",\n\t\t\t},\n\t\t],\n\t\tmodels: [\n\t\t\t{\n\t\t\t\tname: \"Auto\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"Agent Mode\",\n\t\t\t\tbadge: \"Beta\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"Plan Mode\",\n\t\t\t},\n\t\t],\n\t};\n\n\tlet mentions = $state<string[]>([]);\n\tlet mentionPopoverOpen = $state(false);\n\tlet modelPopoverOpen = $state(false);\n\tlet selectedModel = $state(SAMPLE_DATA.models[0]);\n\tlet scopeMenuOpen = $state(false);\n\n\tconst grouped = $derived(() => {\n\t\treturn SAMPLE_DATA.mentionable.reduce(\n\t\t\t(acc, item) => {\n\t\t\t\tconst isAvailable = !mentions.includes(item.title);\n\n\t\t\t\tif (isAvailable) {\n\t\t\t\t\tif (!acc[item.type]) {\n\t\t\t\t\t\tacc[item.type] = [];\n\t\t\t\t\t}\n\t\t\t\t\tacc[item.type].push(item);\n\t\t\t\t}\n\t\t\t\treturn acc;\n\t\t\t},\n\t\t\t{} as Record<string, typeof SAMPLE_DATA.mentionable>\n\t\t);\n\t});\n\n\tconst hasMentions = $derived(mentions.length > 0);\n</script>\n\n{#snippet MentionableIcon({ item }: { item: (typeof SAMPLE_DATA.mentionable)[0] })}\n\t{#if item.type === \"page\"}\n\t\t<span class=\"flex size-4 items-center justify-center\">\n\t\t\t{item.image}\n\t\t</span>\n\t{:else}\n\t\t<Avatar class=\"size-4\">\n\t\t\t<AvatarImage src={item.image} />\n\t\t\t<AvatarFallback>{item.title[0]}</AvatarFallback>\n\t\t</Avatar>\n\t{/if}\n{/snippet}\n\n<form class=\"[--radius:1.2rem]\">\n\t<Field.Group>\n\t\t<Field.Label for=\"notion-prompt\" class=\"sr-only\">Prompt</Field.Label>\n\t\t<InputGroup.Root>\n\t\t\t<InputGroup.Textarea\n\t\t\t\tid=\"notion-prompt\"\n\t\t\t\tplaceholder=\"Ask, search, or make anything...\"\n\t\t\t/>\n\t\t\t<InputGroup.Addon align=\"block-start\">\n\t\t\t\t<Popover.Root bind:open={mentionPopoverOpen}>\n\t\t\t\t\t<Tooltip.Root>\n\t\t\t\t\t\t<Tooltip.Trigger>\n\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t<Popover.Trigger {...props}>\n\t\t\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t\t\t<InputGroup.Button\n\t\t\t\t\t\t\t\t\t\t\t{...props}\n\t\t\t\t\t\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\t\t\t\t\t\tsize={!hasMentions ? \"sm\" : \"icon-sm\"}\n\t\t\t\t\t\t\t\t\t\t\tclass=\"rounded-full transition-transform\"\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<AtIcon />\n\t\t\t\t\t\t\t\t\t\t\t{!hasMentions && \"Add context\"}\n\t\t\t\t\t\t\t\t\t\t</InputGroup.Button>\n\t\t\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t\t\t</Popover.Trigger>\n\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t</Tooltip.Trigger>\n\t\t\t\t\t\t<Tooltip.Content>Mention a person, page, or date</Tooltip.Content>\n\t\t\t\t\t</Tooltip.Root>\n\t\t\t\t\t<Popover.Content class=\"p-0 [--radius:1.2rem]\" align=\"start\">\n\t\t\t\t\t\t<Command.Root>\n\t\t\t\t\t\t\t<Command.Input placeholder=\"Search pages...\" />\n\t\t\t\t\t\t\t<Command.List>\n\t\t\t\t\t\t\t\t<Command.Empty>No pages found</Command.Empty>\n\t\t\t\t\t\t\t\t{#each Object.entries(grouped) as [type, items] (type)}\n\t\t\t\t\t\t\t\t\t<Command.Group heading={type === \"page\" ? \"Pages\" : \"Users\"}>\n\t\t\t\t\t\t\t\t\t\t{#each items as item (item.title)}\n\t\t\t\t\t\t\t\t\t\t\t<Command.Item\n\t\t\t\t\t\t\t\t\t\t\t\tvalue={item.title}\n\t\t\t\t\t\t\t\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tmentions = [...mentions, item];\n\t\t\t\t\t\t\t\t\t\t\t\t\tmentionPopoverOpen = false;\n\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{@render MentionableIcon({ item })}\n\t\t\t\t\t\t\t\t\t\t\t\t{item.title}\n\t\t\t\t\t\t\t\t\t\t\t</Command.Item>\n\t\t\t\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t\t\t</Command.Group>\n\t\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t</Command.List>\n\t\t\t\t\t\t</Command.Root>\n\t\t\t\t\t</Popover.Content>\n\t\t\t\t</Popover.Root>\n\t\t\t\t<div class=\"no-scrollbar -m-1.5 flex gap-1 overflow-y-auto p-1.5\">\n\t\t\t\t\t{#each mentions as mention (mention)}\n\t\t\t\t\t\t{@const item = SAMPLE_DATA.mentionable.find(\n\t\t\t\t\t\t\t(item) => item.title === mention\n\t\t\t\t\t\t)}\n\t\t\t\t\t\t{#if item}\n\t\t\t\t\t\t\t<InputGroup.Button\n\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\tclass=\"rounded-full !ps-2\"\n\t\t\t\t\t\t\t\tonclick={() => {\n\t\t\t\t\t\t\t\t\tmentions = mentions.filter((m) => m !== mention);\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{@render MentionableIcon({ item })}\n\t\t\t\t\t\t\t\t{item.title}\n\t\t\t\t\t\t\t\t<XIcon />\n\t\t\t\t\t\t\t</InputGroup.Button>\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t{/each}\n\t\t\t\t</div>\n\t\t\t</InputGroup.Addon>\n\t\t\t<InputGroup.Addon align=\"block-end\" class=\"gap-1\">\n\t\t\t\t<Tooltip.Root>\n\t\t\t\t\t<Tooltip.Trigger>\n\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t<InputGroup.Button\n\t\t\t\t\t\t\t\t{...props}\n\t\t\t\t\t\t\t\tsize=\"icon-sm\"\n\t\t\t\t\t\t\t\tclass=\"rounded-full\"\n\t\t\t\t\t\t\t\taria-label=\"Attach file\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<PaperclipIcon />\n\t\t\t\t\t\t\t</InputGroup.Button>\n\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t</Tooltip.Trigger>\n\t\t\t\t\t<Tooltip.Content>Attach file</Tooltip.Content>\n\t\t\t\t</Tooltip.Root>\n\t\t\t\t<DropdownMenu.Root bind:open={modelPopoverOpen}>\n\t\t\t\t\t<Tooltip.Root>\n\t\t\t\t\t\t<Tooltip.Trigger>\n\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t<DropdownMenu.Trigger {...props}>\n\t\t\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t\t\t<InputGroup.Button\n\t\t\t\t\t\t\t\t\t\t\t{...props}\n\t\t\t\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\t\t\t\tclass=\"rounded-full\"\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{selectedModel.name}\n\t\t\t\t\t\t\t\t\t\t</InputGroup.Button>\n\t\t\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t\t\t</DropdownMenu.Trigger>\n\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t</Tooltip.Trigger>\n\t\t\t\t\t\t<Tooltip.Content>Select AI model</Tooltip.Content>\n\t\t\t\t\t</Tooltip.Root>\n\t\t\t\t\t<DropdownMenu.Content side=\"top\" align=\"start\" class=\"[--radius:1rem]\">\n\t\t\t\t\t\t<DropdownMenu.Group class=\"w-42\">\n\t\t\t\t\t\t\t<DropdownMenu.Label class=\"text-muted-foreground text-xs\">\n\t\t\t\t\t\t\t\tSelect Agent Mode\n\t\t\t\t\t\t\t</DropdownMenu.Label>\n\t\t\t\t\t\t\t{#each SAMPLE_DATA.models as model (model.name)}\n\t\t\t\t\t\t\t\t<DropdownMenu.CheckboxItem\n\t\t\t\t\t\t\t\t\tchecked={model.name === selectedModel.name}\n\t\t\t\t\t\t\t\t\tonCheckedChange={(checked) => {\n\t\t\t\t\t\t\t\t\t\tif (checked) {\n\t\t\t\t\t\t\t\t\t\t\tselectedModel = model;\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\tclass=\"ps-2 *:[span:first-child]:start-auto *:[span:first-child]:end-2\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{model.name}\n\t\t\t\t\t\t\t\t\t{#if model.badge}\n\t\t\t\t\t\t\t\t\t\t<Badge\n\t\t\t\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\t\t\t\tclass=\"h-5 rounded-sm bg-blue-100 px-1 text-xs text-blue-800 dark:bg-blue-900 dark:text-blue-100\"\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{model.badge}\n\t\t\t\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\t\t</DropdownMenu.CheckboxItem>\n\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t</DropdownMenu.Group>\n\t\t\t\t\t</DropdownMenu.Content>\n\t\t\t\t</DropdownMenu.Root>\n\t\t\t\t<DropdownMenu.Root bind:open={scopeMenuOpen}>\n\t\t\t\t\t<DropdownMenu.Trigger>\n\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t<InputGroup.Button {...props} size=\"sm\" class=\"rounded-full\">\n\t\t\t\t\t\t\t\t<GlobeIcon /> All Sources\n\t\t\t\t\t\t\t</InputGroup.Button>\n\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t</DropdownMenu.Trigger>\n\t\t\t\t\t<DropdownMenu.Content side=\"top\" align=\"end\" class=\"[--radius:1rem]\">\n\t\t\t\t\t\t<DropdownMenu.Group>\n\t\t\t\t\t\t\t<DropdownMenu.Item onSelect={(e) => e.preventDefault()}>\n\t\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t\t<label for=\"web-search\" {...props}>\n\t\t\t\t\t\t\t\t\t\t<GlobeIcon /> Web Search\n\t\t\t\t\t\t\t\t\t\t<Switch id=\"web-search\" class=\"ms-auto\" checked />\n\t\t\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t</DropdownMenu.Group>\n\t\t\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t\t\t<DropdownMenu.Group>\n\t\t\t\t\t\t\t<DropdownMenu.Item onSelect={(e) => e.preventDefault()}>\n\t\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t\t<label for=\"apps\" {...props}>\n\t\t\t\t\t\t\t\t\t\t<AppsIcon /> Apps and Integrations\n\t\t\t\t\t\t\t\t\t\t<Switch id=\"apps\" class=\"ms-auto\" checked />\n\t\t\t\t\t\t\t\t\t</label>\n\t\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t\t<CirclePlusIcon /> All Sources I can access\n\t\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t\t<DropdownMenu.Sub>\n\t\t\t\t\t\t\t\t<DropdownMenu.SubTrigger>\n\t\t\t\t\t\t\t\t\t<Avatar class=\"size-4\">\n\t\t\t\t\t\t\t\t\t\t<AvatarImage src=\"https://github.com/shadcn.png\" />\n\t\t\t\t\t\t\t\t\t\t<AvatarFallback>CN</AvatarFallback>\n\t\t\t\t\t\t\t\t\t</Avatar>\n\t\t\t\t\t\t\t\t\tshadcn\n\t\t\t\t\t\t\t\t</DropdownMenu.SubTrigger>\n\t\t\t\t\t\t\t\t<DropdownMenu.SubContent class=\"w-72 p-0 [--radius:1rem]\">\n\t\t\t\t\t\t\t\t\t<Command.Root>\n\t\t\t\t\t\t\t\t\t\t<Command.Input\n\t\t\t\t\t\t\t\t\t\t\tplaceholder=\"Find or use knowledge in...\"\n\t\t\t\t\t\t\t\t\t\t\tautofocus\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t<Command.List>\n\t\t\t\t\t\t\t\t\t\t\t<Command.Empty>No knowledge found</Command.Empty>\n\t\t\t\t\t\t\t\t\t\t\t<Command.Group>\n\t\t\t\t\t\t\t\t\t\t\t\t{#each SAMPLE_DATA.mentionable.filter((item) => item.type === \"user\") as user (user.title)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Command.Item\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalue={user.title}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t// Handle user selection here\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"Selected user:\",\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tuser.title\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Avatar class=\"size-4\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<AvatarImage src={user.image} />\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<AvatarFallback>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{user.title[0]}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t</AvatarFallback>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Avatar>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{user.title}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"text-muted-foreground\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t- {user.workspace}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</Command.Item>\n\t\t\t\t\t\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t\t\t\t\t</Command.Group>\n\t\t\t\t\t\t\t\t\t\t</Command.List>\n\t\t\t\t\t\t\t\t\t</Command.Root>\n\t\t\t\t\t\t\t\t</DropdownMenu.SubContent>\n\t\t\t\t\t\t\t</DropdownMenu.Sub>\n\t\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t\t<BookIcon /> Help Center\n\t\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t</DropdownMenu.Group>\n\t\t\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t\t\t<DropdownMenu.Group>\n\t\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t\t<PlusIcon /> Connect Apps\n\t\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t\t<DropdownMenu.Label class=\"text-muted-foreground text-xs\">\n\t\t\t\t\t\t\t\tWe'll only search in the sources selected here.\n\t\t\t\t\t\t\t</DropdownMenu.Label>\n\t\t\t\t\t\t</DropdownMenu.Group>\n\t\t\t\t\t</DropdownMenu.Content>\n\t\t\t\t</DropdownMenu.Root>\n\t\t\t\t<InputGroup.Button\n\t\t\t\t\taria-label=\"Send\"\n\t\t\t\t\tclass=\"ms-auto rounded-full\"\n\t\t\t\t\tvariant=\"default\"\n\t\t\t\t\tsize=\"icon-sm\"\n\t\t\t\t>\n\t\t\t\t\t<ArrowUpIcon />\n\t\t\t\t</InputGroup.Button>\n\t\t\t</InputGroup.Addon>\n\t\t</InputGroup.Root>\n\t</Field.Group>\n</form>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/new-components-01/components/spinner-badge.svelte",
    "content": "<script lang=\"ts\">\n\timport { Badge } from \"$lib/registry/ui/badge/index.js\";\n\timport { Spinner } from \"$lib/registry/ui/spinner/index.js\";\n</script>\n\n<div class=\"flex items-center gap-4 [--radius:1.2rem]\">\n\t<Badge>\n\t\t<Spinner />\n\t\tSyncing\n\t</Badge>\n\t<Badge variant=\"secondary\">\n\t\t<Spinner />\n\t\tUpdating\n\t</Badge>\n\t<Badge variant=\"outline\">\n\t\t<Spinner />\n\t\tProcessing\n\t</Badge>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/new-components-01/components/spinner-empty.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Empty from \"$lib/registry/ui/empty/index.js\";\n\timport { Spinner } from \"$lib/registry/ui/spinner/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n</script>\n\n<Empty.Root class=\"w-full\">\n\t<Empty.Header>\n\t\t<Empty.Media variant=\"icon\">\n\t\t\t<Spinner />\n\t\t</Empty.Media>\n\t\t<Empty.Title>Processing your request</Empty.Title>\n\t\t<Empty.Description>\n\t\t\tPlease wait while we process your request. Do not refresh the page.\n\t\t</Empty.Description>\n\t</Empty.Header>\n\t<Empty.Content>\n\t\t<Button variant=\"outline\" size=\"sm\">Cancel</Button>\n\t</Empty.Content>\n</Empty.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/otp-01/+page.svelte",
    "content": "<script>\n\timport OTPForm from \"./components/otp-form.svelte\";\n</script>\n\n<div class=\"flex min-h-svh w-full items-center justify-center p-6 md:p-10\">\n\t<div class=\"w-full max-w-xs\">\n\t\t<OTPForm />\n\t</div>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/otp-01/components/otp-form.svelte",
    "content": "<script lang=\"ts\">\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport * as InputOTP from \"$lib/registry/ui/input-otp/index.js\";\n\timport type { ComponentProps } from \"svelte\";\n\n\tlet { ...props }: ComponentProps<typeof Card.Root> = $props();\n</script>\n\n<Card.Root {...props}>\n\t<Card.Header>\n\t\t<Card.Title>Enter verification code</Card.Title>\n\t\t<Card.Description>We sent a 6-digit code to your email.</Card.Description>\n\t</Card.Header>\n\t<Card.Content>\n\t\t<form>\n\t\t\t<Field.Group>\n\t\t\t\t<Field.Field>\n\t\t\t\t\t<Field.Label for=\"otp\">Verification code</Field.Label>\n\t\t\t\t\t<InputOTP.Root maxlength={6} id=\"otp\" required>\n\t\t\t\t\t\t{#snippet children({ cells })}\n\t\t\t\t\t\t\t<InputOTP.Group\n\t\t\t\t\t\t\t\tclass=\"gap-2.5 *:data-[slot=input-otp-slot]:rounded-md *:data-[slot=input-otp-slot]:border\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{#each cells as cell (cell)}\n\t\t\t\t\t\t\t\t\t<InputOTP.Slot {cell} />\n\t\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t</InputOTP.Group>\n\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t</InputOTP.Root>\n\t\t\t\t\t<Field.Description>\n\t\t\t\t\t\tEnter the 6-digit code sent to your email.\n\t\t\t\t\t</Field.Description>\n\t\t\t\t</Field.Field>\n\t\t\t\t<Field.Group>\n\t\t\t\t\t<Button type=\"submit\">Verify</Button>\n\t\t\t\t\t<Field.Description class=\"text-center\">\n\t\t\t\t\t\tDidn't receive the code? <a href=\"#/\">Resend</a>\n\t\t\t\t\t</Field.Description>\n\t\t\t\t</Field.Group>\n\t\t\t</Field.Group>\n\t\t</form>\n\t</Card.Content>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/otp-02/+page.svelte",
    "content": "<script>\n\timport OTPForm from \"./components/otp-form.svelte\";\n</script>\n\n<div class=\"flex min-h-svh w-full\">\n\t<div class=\"flex w-full items-center justify-center p-6 lg:w-1/2\">\n\t\t<div class=\"w-full max-w-xs\">\n\t\t\t<OTPForm />\n\t\t</div>\n\t</div>\n\t<div class=\"relative hidden w-1/2 lg:block\">\n\t\t<img\n\t\t\talt=\"Authentication\"\n\t\t\tclass=\"absolute inset-0 h-full w-full object-cover\"\n\t\t\theight={1080}\n\t\t\tsrc=\"/placeholder.svg\"\n\t\t\twidth={1920}\n\t\t/>\n\t</div>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/otp-02/components/otp-form.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn } from \"$lib/utils.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport * as InputOTP from \"$lib/registry/ui/input-otp/index.js\";\n\n\tlet className: string | undefined = undefined;\n\texport { className as class };\n</script>\n\n<div class={cn(\"flex flex-col gap-6\", className)} {...$$restProps}>\n\t<form>\n\t\t<Field.Group>\n\t\t\t<div class=\"flex flex-col items-center gap-1 text-center\">\n\t\t\t\t<h1 class=\"text-2xl font-bold\">Enter verification code</h1>\n\t\t\t\t<p class=\"text-muted-foreground text-sm text-balance\">\n\t\t\t\t\tWe sent a 6-digit code to your email.\n\t\t\t\t</p>\n\t\t\t</div>\n\t\t\t<Field.Field>\n\t\t\t\t<Field.Label for=\"otp\" class=\"sr-only\">Verification code</Field.Label>\n\t\t\t\t<InputOTP.Root maxlength={6} id=\"otp\" required>\n\t\t\t\t\t{#snippet children({ cells })}\n\t\t\t\t\t\t<InputOTP.Group\n\t\t\t\t\t\t\tclass=\"gap-2 *:data-[slot=input-otp-slot]:rounded-md *:data-[slot=input-otp-slot]:border\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{#each cells.slice(0, 2) as cell (cell)}\n\t\t\t\t\t\t\t\t<InputOTP.Slot {cell} />\n\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t</InputOTP.Group>\n\t\t\t\t\t\t<InputOTP.Separator />\n\t\t\t\t\t\t<InputOTP.Group\n\t\t\t\t\t\t\tclass=\"gap-2 *:data-[slot=input-otp-slot]:rounded-md *:data-[slot=input-otp-slot]:border\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{#each cells.slice(2, 4) as cell (cell)}\n\t\t\t\t\t\t\t\t<InputOTP.Slot {cell} />\n\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t</InputOTP.Group>\n\t\t\t\t\t\t<InputOTP.Separator />\n\t\t\t\t\t\t<InputOTP.Group\n\t\t\t\t\t\t\tclass=\"gap-2 *:data-[slot=input-otp-slot]:rounded-md *:data-[slot=input-otp-slot]:border\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{#each cells.slice(4, 6) as cell (cell)}\n\t\t\t\t\t\t\t\t<InputOTP.Slot {cell} />\n\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t</InputOTP.Group>\n\t\t\t\t\t{/snippet}\n\t\t\t\t</InputOTP.Root>\n\t\t\t\t<Field.Description class=\"text-center\">\n\t\t\t\t\tEnter the 6-digit code sent to your email.\n\t\t\t\t</Field.Description>\n\t\t\t</Field.Field>\n\t\t\t<Button type=\"submit\">Verify</Button>\n\t\t\t<Field.Description class=\"text-center\">\n\t\t\t\tDidn't receive the code? <a href=\"#/\">Resend</a>\n\t\t\t</Field.Description>\n\t\t</Field.Group>\n\t</form>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/otp-03/+page.svelte",
    "content": "<script>\n\timport GalleryVerticalEndIcon from \"@lucide/svelte/icons/gallery-vertical-end\";\n\timport OTPForm from \"./components/otp-form.svelte\";\n</script>\n\n<div class=\"bg-muted flex min-h-svh flex-col items-center justify-center gap-6 p-6 md:p-10\">\n\t<div class=\"flex w-full max-w-xs flex-col gap-6\">\n\t\t<a href=\"#/\" class=\"flex items-center gap-2 self-center font-medium\">\n\t\t\t<div\n\t\t\t\tclass=\"bg-primary text-primary-foreground flex size-6 items-center justify-center rounded-md\"\n\t\t\t>\n\t\t\t\t<GalleryVerticalEndIcon class=\"size-4\" />\n\t\t\t</div>\n\t\t\tAcme Inc.\n\t\t</a>\n\t\t<OTPForm />\n\t</div>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/otp-03/components/otp-form.svelte",
    "content": "<script lang=\"ts\">\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport * as InputOTP from \"$lib/registry/ui/input-otp/index.js\";\n\timport type { ComponentProps } from \"svelte\";\n\n\tlet { ...restProps }: ComponentProps<typeof Card.Root> = $props();\n</script>\n\n<Card.Root {...restProps}>\n\t<Card.Header class=\"text-center\">\n\t\t<Card.Title class=\"text-xl\">Enter verification code</Card.Title>\n\t\t<Card.Description>We sent a 6-digit code to your email.</Card.Description>\n\t</Card.Header>\n\t<Card.Content>\n\t\t<form>\n\t\t\t<Field.Group>\n\t\t\t\t<Field.Field>\n\t\t\t\t\t<Field.Label for=\"otp\" class=\"sr-only\">Verification code</Field.Label>\n\t\t\t\t\t<InputOTP.Root maxlength={6} id=\"otp\" required>\n\t\t\t\t\t\t{#snippet children({ cells })}\n\t\t\t\t\t\t\t<InputOTP.Group\n\t\t\t\t\t\t\t\tclass=\"gap-2.5 *:data-[slot=input-otp-slot]:rounded-md *:data-[slot=input-otp-slot]:border\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{#each cells as cell (cell)}\n\t\t\t\t\t\t\t\t\t<InputOTP.Slot {cell} />\n\t\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t</InputOTP.Group>\n\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t</InputOTP.Root>\n\t\t\t\t\t<Field.Description class=\"text-center\">\n\t\t\t\t\t\tEnter the 6-digit code sent to your email.\n\t\t\t\t\t</Field.Description>\n\t\t\t\t</Field.Field>\n\t\t\t\t<Button type=\"submit\">Verify</Button>\n\t\t\t\t<Field.Description class=\"text-center\">\n\t\t\t\t\tDidn't receive the code? <a href=\"#/\">Resend</a>\n\t\t\t\t</Field.Description>\n\t\t\t</Field.Group>\n\t\t</form>\n\t</Card.Content>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/otp-04/+page.svelte",
    "content": "<script>\n\timport OTPForm from \"./components/otp-form.svelte\";\n</script>\n\n<div class=\"flex min-h-svh w-full items-center justify-center p-6 md:p-10\">\n\t<div class=\"w-full max-w-sm md:max-w-3xl\">\n\t\t<OTPForm />\n\t</div>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/otp-04/components/otp-form.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn } from \"$lib/utils.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport * as InputOTP from \"$lib/registry/ui/input-otp/index.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet { class: className, ...restProps }: HTMLAttributes<HTMLDivElement> = $props();\n</script>\n\n<div class={cn(\"flex flex-col gap-6 md:min-h-[450px]\", className)} {...restProps}>\n\t<Card.Root class=\"flex-1 overflow-hidden p-0\">\n\t\t<Card.Content class=\"grid flex-1 p-0 md:grid-cols-2\">\n\t\t\t<form class=\"flex flex-col items-center justify-center p-6 md:p-8\">\n\t\t\t\t<Field.Group>\n\t\t\t\t\t<Field.Field class=\"items-center text-center\">\n\t\t\t\t\t\t<h1 class=\"text-2xl font-bold\">Enter verification code</h1>\n\t\t\t\t\t\t<p class=\"text-muted-foreground text-sm text-balance\">\n\t\t\t\t\t\t\tWe sent a 6-digit code to your email\n\t\t\t\t\t\t</p>\n\t\t\t\t\t</Field.Field>\n\t\t\t\t\t<Field.Field>\n\t\t\t\t\t\t<Field.Label for=\"otp\" class=\"sr-only\">Verification code</Field.Label>\n\t\t\t\t\t\t<InputOTP.Root maxlength={6} id=\"otp\" required class=\"gap-4\">\n\t\t\t\t\t\t\t{#snippet children({ cells })}\n\t\t\t\t\t\t\t\t<InputOTP.Group>\n\t\t\t\t\t\t\t\t\t{#each cells.slice(0, 3) as cell (cell)}\n\t\t\t\t\t\t\t\t\t\t<InputOTP.Slot {cell} />\n\t\t\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t\t</InputOTP.Group>\n\t\t\t\t\t\t\t\t<InputOTP.Separator />\n\t\t\t\t\t\t\t\t<InputOTP.Group>\n\t\t\t\t\t\t\t\t\t{#each cells.slice(3, 6) as cell (cell)}\n\t\t\t\t\t\t\t\t\t\t<InputOTP.Slot {cell} />\n\t\t\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t\t</InputOTP.Group>\n\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t</InputOTP.Root>\n\t\t\t\t\t\t<Field.Description class=\"text-center\">\n\t\t\t\t\t\t\tEnter the 6-digit code sent to your email.\n\t\t\t\t\t\t</Field.Description>\n\t\t\t\t\t</Field.Field>\n\t\t\t\t\t<Field.Field>\n\t\t\t\t\t\t<Button type=\"submit\">Verify</Button>\n\t\t\t\t\t\t<Field.Description class=\"text-center\">\n\t\t\t\t\t\t\tDidn't receive the code? <a href=\"#/\">Resend</a>\n\t\t\t\t\t\t</Field.Description>\n\t\t\t\t\t</Field.Field>\n\t\t\t\t</Field.Group>\n\t\t\t</form>\n\t\t\t<div class=\"bg-muted relative hidden md:block\">\n\t\t\t\t<img\n\t\t\t\t\tsrc=\"/placeholder.svg\"\n\t\t\t\t\talt=\"\"\n\t\t\t\t\tclass=\"absolute inset-0 h-full w-full object-cover dark:brightness-[0.2] dark:grayscale\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</Card.Content>\n\t</Card.Root>\n\t<Field.Description class=\"text-center\">\n\t\tBy clicking continue, you agree to our <a href=\"#/\">Terms of Service</a>\n\t\tand <a href=\"#/\">Privacy Policy</a>.\n\t</Field.Description>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/otp-05/+page.svelte",
    "content": "<script>\n\timport OTPForm from \"./components/otp-form.svelte\";\n</script>\n\n<div class=\"bg-background flex min-h-svh flex-col items-center justify-center gap-6 p-6 md:p-10\">\n\t<div class=\"w-full max-w-sm\">\n\t\t<OTPForm />\n\t</div>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/otp-05/components/otp-form.svelte",
    "content": "<script lang=\"ts\">\n\timport GalleryVerticalEndIcon from \"@lucide/svelte/icons/gallery-vertical-end\";\n\timport { cn } from \"$lib/utils.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport * as InputOTP from \"$lib/registry/ui/input-otp/index.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet { class: className, ...restProps }: HTMLAttributes<HTMLDivElement> = $props();\n</script>\n\n<div class={cn(\"flex flex-col gap-6\", className)} {...restProps}>\n\t<form>\n\t\t<Field.Group>\n\t\t\t<div class=\"flex flex-col items-center gap-2 text-center\">\n\t\t\t\t<a href=\"#/\" class=\"flex flex-col items-center gap-2 font-medium\">\n\t\t\t\t\t<div class=\"flex size-8 items-center justify-center rounded-md\">\n\t\t\t\t\t\t<GalleryVerticalEndIcon class=\"size-6\" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<span class=\"sr-only\">Acme Inc.</span>\n\t\t\t\t</a>\n\t\t\t\t<h1 class=\"text-xl font-bold\">Enter verification code</h1>\n\t\t\t\t<Field.Description>We sent a 6-digit code to your email address</Field.Description>\n\t\t\t</div>\n\t\t\t<Field.Field>\n\t\t\t\t<Field.Label for=\"otp\" class=\"sr-only\">Verification code</Field.Label>\n\t\t\t\t<InputOTP.Root maxlength={6} id=\"otp\" required class=\"gap-4\">\n\t\t\t\t\t{#snippet children({ cells })}\n\t\t\t\t\t\t<InputOTP.Group\n\t\t\t\t\t\t\tclass=\"gap-2.5 *:data-[slot=input-otp-slot]:h-16 *:data-[slot=input-otp-slot]:w-12 *:data-[slot=input-otp-slot]:rounded-md *:data-[slot=input-otp-slot]:border *:data-[slot=input-otp-slot]:text-xl\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{#each cells.slice(0, 3) as cell (cell)}\n\t\t\t\t\t\t\t\t<InputOTP.Slot {cell} />\n\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t</InputOTP.Group>\n\t\t\t\t\t\t<InputOTP.Separator />\n\t\t\t\t\t\t<InputOTP.Group\n\t\t\t\t\t\t\tclass=\"gap-2.5 *:data-[slot=input-otp-slot]:h-16 *:data-[slot=input-otp-slot]:w-12 *:data-[slot=input-otp-slot]:rounded-md *:data-[slot=input-otp-slot]:border *:data-[slot=input-otp-slot]:text-xl\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{#each cells.slice(3, 6) as cell (cell)}\n\t\t\t\t\t\t\t\t<InputOTP.Slot {cell} />\n\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t</InputOTP.Group>\n\t\t\t\t\t{/snippet}\n\t\t\t\t</InputOTP.Root>\n\t\t\t\t<Field.Description class=\"text-center\">\n\t\t\t\t\tDidn't receive the code? <a href=\"#/\">Resend</a>\n\t\t\t\t</Field.Description>\n\t\t\t</Field.Field>\n\t\t\t<Field.Field>\n\t\t\t\t<Button type=\"submit\">Verify</Button>\n\t\t\t</Field.Field>\n\t\t</Field.Group>\n\t</form>\n\t<Field.Description class=\"px-6 text-center\">\n\t\tBy clicking continue, you agree to our <a href=\"#/\">Terms of Service</a>\n\t\tand <a href=\"#/\">Privacy Policy</a>.\n\t</Field.Description>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/sidebar-01/+page.svelte",
    "content": "<script lang=\"ts\">\n\timport AppSidebar from \"./components/app-sidebar.svelte\";\n\timport * as Breadcrumb from \"$lib/registry/ui/breadcrumb/index.js\";\n\timport { Separator } from \"$lib/registry/ui/separator/index.js\";\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n</script>\n\n<Sidebar.Provider>\n\t<AppSidebar />\n\t<Sidebar.Inset>\n\t\t<header class=\"flex h-16 shrink-0 items-center gap-2 border-b px-4\">\n\t\t\t<Sidebar.Trigger class=\"-ms-1\" />\n\t\t\t<Separator orientation=\"vertical\" class=\"me-2 h-4\" />\n\t\t\t<Breadcrumb.Root>\n\t\t\t\t<Breadcrumb.List>\n\t\t\t\t\t<Breadcrumb.Item class=\"hidden md:block\">\n\t\t\t\t\t\t<Breadcrumb.Link href=\"##\">Build Your Application</Breadcrumb.Link>\n\t\t\t\t\t</Breadcrumb.Item>\n\t\t\t\t\t<Breadcrumb.Separator class=\"hidden md:block\" />\n\t\t\t\t\t<Breadcrumb.Item>\n\t\t\t\t\t\t<Breadcrumb.Page>Data Fetching</Breadcrumb.Page>\n\t\t\t\t\t</Breadcrumb.Item>\n\t\t\t\t</Breadcrumb.List>\n\t\t\t</Breadcrumb.Root>\n\t\t</header>\n\t\t<div class=\"flex flex-1 flex-col gap-4 p-4\">\n\t\t\t<div class=\"grid auto-rows-min gap-4 md:grid-cols-3\">\n\t\t\t\t<div class=\"bg-muted/50 aspect-video rounded-xl\"></div>\n\t\t\t\t<div class=\"bg-muted/50 aspect-video rounded-xl\"></div>\n\t\t\t\t<div class=\"bg-muted/50 aspect-video rounded-xl\"></div>\n\t\t\t</div>\n\t\t\t<div class=\"bg-muted/50 min-h-screen flex-1 rounded-xl md:min-h-min\"></div>\n\t\t</div>\n\t</Sidebar.Inset>\n</Sidebar.Provider>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/sidebar-01/components/app-sidebar.svelte",
    "content": "<script lang=\"ts\" module>\n\t// sample data\n\tconst data = {\n\t\tversions: [\"1.0.1\", \"1.1.0-alpha\", \"2.0.0-beta1\"],\n\t\tnavMain: [\n\t\t\t{\n\t\t\t\ttitle: \"Getting Started\",\n\t\t\t\turl: \"#\",\n\t\t\t\titems: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Installation\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Project Structure\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"Build Your Application\",\n\t\t\t\turl: \"#\",\n\t\t\t\titems: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Routing\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Data Fetching\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t\tisActive: true,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Rendering\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Caching\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Styling\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Optimizing\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Configuring\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Testing\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Authentication\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Deploying\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Upgrading\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Examples\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"API Reference\",\n\t\t\t\turl: \"#\",\n\t\t\t\titems: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Components\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"File Conventions\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Functions\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"next.config.js Options\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"CLI\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Edge Runtime\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"Architecture\",\n\t\t\t\turl: \"#\",\n\t\t\t\titems: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Accessibility\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Fast Refresh\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Svelte Compiler\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Supported Browsers\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Rollup\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t};\n</script>\n\n<script lang=\"ts\">\n\timport SearchForm from \"./search-form.svelte\";\n\timport VersionSwitcher from \"./version-switcher.svelte\";\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\timport type { ComponentProps } from \"svelte\";\n\n\tlet { ref = $bindable(null), ...restProps }: ComponentProps<typeof Sidebar.Root> = $props();\n</script>\n\n<Sidebar.Root {...restProps} bind:ref>\n\t<Sidebar.Header>\n\t\t<VersionSwitcher versions={data.versions} defaultVersion={data.versions[0]} />\n\t\t<SearchForm />\n\t</Sidebar.Header>\n\t<Sidebar.Content>\n\t\t<!-- We create a Sidebar.Group for each parent. -->\n\t\t{#each data.navMain as group (group.title)}\n\t\t\t<Sidebar.Group>\n\t\t\t\t<Sidebar.GroupLabel>{group.title}</Sidebar.GroupLabel>\n\t\t\t\t<Sidebar.GroupContent>\n\t\t\t\t\t<Sidebar.Menu>\n\t\t\t\t\t\t{#each group.items as item (item.title)}\n\t\t\t\t\t\t\t<Sidebar.MenuItem>\n\t\t\t\t\t\t\t\t<Sidebar.MenuButton isActive={item.isActive}>\n\t\t\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t\t\t<a href={item.url} {...props}>{item.title}</a>\n\t\t\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t\t\t</Sidebar.MenuButton>\n\t\t\t\t\t\t\t</Sidebar.MenuItem>\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</Sidebar.Menu>\n\t\t\t\t</Sidebar.GroupContent>\n\t\t\t</Sidebar.Group>\n\t\t{/each}\n\t</Sidebar.Content>\n\t<Sidebar.Rail />\n</Sidebar.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/sidebar-01/components/search-form.svelte",
    "content": "<script lang=\"ts\">\n\timport { Label } from \"$lib/registry/ui/label/index.js\";\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\timport type { WithElementRef } from \"$lib/utils.js\";\n\timport SearchIcon from \"@lucide/svelte/icons/search\";\n\timport type { HTMLFormAttributes } from \"svelte/elements\";\n\n\tlet { ref = $bindable(null), ...restProps }: WithElementRef<HTMLFormAttributes> = $props();\n</script>\n\n<form bind:this={ref} {...restProps}>\n\t<Sidebar.Group class=\"py-0\">\n\t\t<Sidebar.GroupContent class=\"relative\">\n\t\t\t<Label for=\"search\" class=\"sr-only\">Search</Label>\n\t\t\t<Sidebar.Input id=\"search\" placeholder=\"Search the docs...\" class=\"ps-8\" />\n\t\t\t<SearchIcon\n\t\t\t\tclass=\"pointer-events-none absolute start-2 top-1/2 size-4 -translate-y-1/2 opacity-50 select-none\"\n\t\t\t/>\n\t\t</Sidebar.GroupContent>\n\t</Sidebar.Group>\n</form>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/sidebar-01/components/version-switcher.svelte",
    "content": "<script lang=\"ts\">\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\timport CheckIcon from \"@lucide/svelte/icons/check\";\n\timport ChevronsUpDownIcon from \"@lucide/svelte/icons/chevrons-up-down\";\n\timport GalleryVerticalEndIcon from \"@lucide/svelte/icons/gallery-vertical-end\";\n\n\tlet { versions, defaultVersion }: { versions: string[]; defaultVersion: string } = $props();\n\n\t// svelte-ignore state_referenced_locally\n\tlet selectedVersion = $state(defaultVersion);\n</script>\n\n<Sidebar.Menu>\n\t<Sidebar.MenuItem>\n\t\t<DropdownMenu.Root>\n\t\t\t<DropdownMenu.Trigger>\n\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t<Sidebar.MenuButton\n\t\t\t\t\t\tsize=\"lg\"\n\t\t\t\t\t\tclass=\"data-[state=open]:bg-sidebar-accent data-[state=open]:text-sidebar-accent-foreground\"\n\t\t\t\t\t\t{...props}\n\t\t\t\t\t>\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclass=\"bg-sidebar-primary text-sidebar-primary-foreground flex aspect-square size-8 items-center justify-center rounded-lg\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<GalleryVerticalEndIcon class=\"size-4\" />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"flex flex-col gap-0.5 leading-none\">\n\t\t\t\t\t\t\t<span class=\"font-semibold\">Documentation</span>\n\t\t\t\t\t\t\t<span class=\"\">v{selectedVersion}</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<ChevronsUpDownIcon class=\"ms-auto\" />\n\t\t\t\t\t</Sidebar.MenuButton>\n\t\t\t\t{/snippet}\n\t\t\t</DropdownMenu.Trigger>\n\t\t\t<DropdownMenu.Content class=\"w-(--bits-dropdown-menu-anchor-width)\" align=\"start\">\n\t\t\t\t{#each versions as version (version)}\n\t\t\t\t\t<DropdownMenu.Item onSelect={() => (selectedVersion = version)}>\n\t\t\t\t\t\tv{version}\n\t\t\t\t\t\t{#if version === selectedVersion}\n\t\t\t\t\t\t\t<CheckIcon class=\"ms-auto\" />\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t{/each}\n\t\t\t</DropdownMenu.Content>\n\t\t</DropdownMenu.Root>\n\t</Sidebar.MenuItem>\n</Sidebar.Menu>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/sidebar-02/+page.svelte",
    "content": "<script lang=\"ts\">\n\timport AppSidebar from \"./components/app-sidebar.svelte\";\n\timport * as Breadcrumb from \"$lib/registry/ui/breadcrumb/index.js\";\n\timport { Separator } from \"$lib/registry/ui/separator/index.js\";\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n</script>\n\n<Sidebar.Provider>\n\t<AppSidebar />\n\t<Sidebar.Inset>\n\t\t<header\n\t\t\tclass=\"bg-background sticky top-0 flex h-16 shrink-0 items-center gap-2 border-b px-4\"\n\t\t>\n\t\t\t<Sidebar.Trigger class=\"-ms-1\" />\n\t\t\t<Separator orientation=\"vertical\" class=\"me-2 h-4\" />\n\t\t\t<Breadcrumb.Root>\n\t\t\t\t<Breadcrumb.List>\n\t\t\t\t\t<Breadcrumb.Item class=\"hidden md:block\">\n\t\t\t\t\t\t<Breadcrumb.Link href=\"##\">Build Your Application</Breadcrumb.Link>\n\t\t\t\t\t</Breadcrumb.Item>\n\t\t\t\t\t<Breadcrumb.Separator class=\"hidden md:block\" />\n\t\t\t\t\t<Breadcrumb.Item>\n\t\t\t\t\t\t<Breadcrumb.Page>Data Fetching</Breadcrumb.Page>\n\t\t\t\t\t</Breadcrumb.Item>\n\t\t\t\t</Breadcrumb.List>\n\t\t\t</Breadcrumb.Root>\n\t\t</header>\n\t\t<div class=\"flex flex-1 flex-col gap-4 p-4\">\n\t\t\t{#each Array.from({ length: 24 }) as _, index (index)}\n\t\t\t\t<div class=\"bg-muted/50 aspect-video h-12 w-full rounded-lg\"></div>\n\t\t\t{/each}\n\t\t</div>\n\t</Sidebar.Inset>\n</Sidebar.Provider>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/sidebar-02/components/app-sidebar.svelte",
    "content": "<script lang=\"ts\" module>\n\t// sample data\n\tconst data = {\n\t\tversions: [\"1.0.1\", \"1.1.0-alpha\", \"2.0.0-beta1\"],\n\t\tnavMain: [\n\t\t\t{\n\t\t\t\ttitle: \"Getting Started\",\n\t\t\t\turl: \"#\",\n\t\t\t\titems: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Installation\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Project Structure\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"Build Your Application\",\n\t\t\t\turl: \"#\",\n\t\t\t\titems: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Routing\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Data Fetching\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t\tisActive: true,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Rendering\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Caching\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Styling\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Optimizing\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Configuring\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Testing\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Authentication\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Deploying\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Upgrading\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Examples\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"API Reference\",\n\t\t\t\turl: \"#\",\n\t\t\t\titems: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Components\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"File Conventions\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Functions\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"next.config.js Options\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"CLI\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Edge Runtime\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"Architecture\",\n\t\t\t\turl: \"#\",\n\t\t\t\titems: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Accessibility\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Fast Refresh\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Next.js Compiler\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Supported Browsers\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Turbopack\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"Community\",\n\t\t\t\turl: \"#\",\n\t\t\t\titems: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Contribution Guide\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t};\n</script>\n\n<script lang=\"ts\">\n\timport SearchForm from \"./search-form.svelte\";\n\timport VersionSwitcher from \"./version-switcher.svelte\";\n\timport * as Collapsible from \"$lib/registry/ui/collapsible/index.js\";\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\timport ChevronRightIcon from \"@lucide/svelte/icons/chevron-right\";\n\timport type { ComponentProps } from \"svelte\";\n\n\tlet { ref = $bindable(null), ...restProps }: ComponentProps<typeof Sidebar.Root> = $props();\n</script>\n\n<Sidebar.Root bind:ref {...restProps}>\n\t<Sidebar.Header>\n\t\t<VersionSwitcher versions={data.versions} defaultVersion={data.versions[0]} />\n\t\t<SearchForm />\n\t</Sidebar.Header>\n\t<Sidebar.Content class=\"gap-0\">\n\t\t<!-- We create a collapsible SidebarGroup for each parent. -->\n\t\t{#each data.navMain as item (item.title)}\n\t\t\t<Collapsible.Root title={item.title} open class=\"group/collapsible\">\n\t\t\t\t<Sidebar.Group>\n\t\t\t\t\t<Sidebar.GroupLabel\n\t\t\t\t\t\tclass=\"group/label text-sidebar-foreground hover:bg-sidebar-accent hover:text-sidebar-accent-foreground text-sm\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t<Collapsible.Trigger {...props}>\n\t\t\t\t\t\t\t\t{item.title}\n\t\t\t\t\t\t\t\t<ChevronRightIcon\n\t\t\t\t\t\t\t\t\tclass=\"ms-auto transition-transform group-data-[state=open]/collapsible:rotate-90\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</Collapsible.Trigger>\n\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t</Sidebar.GroupLabel>\n\t\t\t\t\t<Collapsible.Content>\n\t\t\t\t\t\t<Sidebar.GroupContent>\n\t\t\t\t\t\t\t<Sidebar.Menu>\n\t\t\t\t\t\t\t\t{#each item.items as subItem (subItem.title)}\n\t\t\t\t\t\t\t\t\t<Sidebar.MenuItem>\n\t\t\t\t\t\t\t\t\t\t<Sidebar.MenuButton isActive={subItem.isActive}>\n\t\t\t\t\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t\t\t\t\t<a href={subItem.url} {...props}>{subItem.title}</a>\n\t\t\t\t\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t\t\t\t\t</Sidebar.MenuButton>\n\t\t\t\t\t\t\t\t\t</Sidebar.MenuItem>\n\t\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t</Sidebar.Menu>\n\t\t\t\t\t\t</Sidebar.GroupContent>\n\t\t\t\t\t</Collapsible.Content>\n\t\t\t\t</Sidebar.Group>\n\t\t\t</Collapsible.Root>\n\t\t{/each}\n\t</Sidebar.Content>\n\t<Sidebar.Rail />\n</Sidebar.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/sidebar-02/components/search-form.svelte",
    "content": "<script lang=\"ts\">\n\timport { Label } from \"$lib/registry/ui/label/index.js\";\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\timport type { WithElementRef } from \"$lib/utils.js\";\n\timport SearchIcon from \"@lucide/svelte/icons/search\";\n\timport type { HTMLFormAttributes } from \"svelte/elements\";\n\n\tlet { ref = $bindable(null), ...restProps }: WithElementRef<HTMLFormAttributes> = $props();\n</script>\n\n<form bind:this={ref} {...restProps}>\n\t<Sidebar.Group class=\"py-0\">\n\t\t<Sidebar.GroupContent class=\"relative\">\n\t\t\t<Label for=\"search\" class=\"sr-only\">Search</Label>\n\t\t\t<Sidebar.Input id=\"search\" placeholder=\"Search the docs...\" class=\"ps-8\" />\n\t\t\t<SearchIcon\n\t\t\t\tclass=\"pointer-events-none absolute start-2 top-1/2 size-4 -translate-y-1/2 opacity-50 select-none\"\n\t\t\t/>\n\t\t</Sidebar.GroupContent>\n\t</Sidebar.Group>\n</form>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/sidebar-02/components/version-switcher.svelte",
    "content": "<script lang=\"ts\">\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\timport CheckIcon from \"@lucide/svelte/icons/check\";\n\timport ChevronsUpDownIcon from \"@lucide/svelte/icons/chevrons-up-down\";\n\timport GalleryVerticalEndIcon from \"@lucide/svelte/icons/gallery-vertical-end\";\n\n\tlet { versions, defaultVersion }: { versions: string[]; defaultVersion: string } = $props();\n\n\t// svelte-ignore state_referenced_locally\n\tlet selectedVersion = $state(defaultVersion);\n</script>\n\n<Sidebar.Menu>\n\t<Sidebar.MenuItem>\n\t\t<DropdownMenu.Root>\n\t\t\t<DropdownMenu.Trigger>\n\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t<Sidebar.MenuButton\n\t\t\t\t\t\tsize=\"lg\"\n\t\t\t\t\t\tclass=\"data-[state=open]:bg-sidebar-accent data-[state=open]:text-sidebar-accent-foreground\"\n\t\t\t\t\t\t{...props}\n\t\t\t\t\t>\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclass=\"bg-sidebar-primary text-sidebar-primary-foreground flex aspect-square size-8 items-center justify-center rounded-lg\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<GalleryVerticalEndIcon class=\"size-4\" />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"flex flex-col gap-0.5 leading-none\">\n\t\t\t\t\t\t\t<span class=\"font-medium\">Documentation</span>\n\t\t\t\t\t\t\t<span class=\"\">v{selectedVersion}</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<ChevronsUpDownIcon class=\"ms-auto\" />\n\t\t\t\t\t</Sidebar.MenuButton>\n\t\t\t\t{/snippet}\n\t\t\t</DropdownMenu.Trigger>\n\t\t\t<DropdownMenu.Content class=\"w-(--bits-dropdown-menu-anchor-width)\" align=\"start\">\n\t\t\t\t{#each versions as version (version)}\n\t\t\t\t\t<DropdownMenu.Item onSelect={() => (selectedVersion = version)}>\n\t\t\t\t\t\tv{version}\n\t\t\t\t\t\t{#if version === selectedVersion}\n\t\t\t\t\t\t\t<CheckIcon class=\"ms-auto\" />\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t{/each}\n\t\t\t</DropdownMenu.Content>\n\t\t</DropdownMenu.Root>\n\t</Sidebar.MenuItem>\n</Sidebar.Menu>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/sidebar-03/+page.svelte",
    "content": "<script lang=\"ts\">\n\timport AppSidebar from \"./components/app-sidebar.svelte\";\n\timport * as Breadcrumb from \"$lib/registry/ui/breadcrumb/index.js\";\n\timport { Separator } from \"$lib/registry/ui/separator/index.js\";\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n</script>\n\n<Sidebar.Provider>\n\t<AppSidebar />\n\t<Sidebar.Inset>\n\t\t<header class=\"flex h-16 shrink-0 items-center gap-2 border-b\">\n\t\t\t<div class=\"flex items-center gap-2 px-3\">\n\t\t\t\t<Sidebar.Trigger />\n\t\t\t\t<Separator orientation=\"vertical\" class=\"me-2 h-4\" />\n\t\t\t\t<Breadcrumb.Root>\n\t\t\t\t\t<Breadcrumb.List>\n\t\t\t\t\t\t<Breadcrumb.Item class=\"hidden md:block\">\n\t\t\t\t\t\t\t<Breadcrumb.Link href=\"##\">Build Your Application</Breadcrumb.Link>\n\t\t\t\t\t\t</Breadcrumb.Item>\n\t\t\t\t\t\t<Breadcrumb.Separator class=\"hidden md:block\" />\n\t\t\t\t\t\t<Breadcrumb.Item>\n\t\t\t\t\t\t\t<Breadcrumb.Page>Data Fetching</Breadcrumb.Page>\n\t\t\t\t\t\t</Breadcrumb.Item>\n\t\t\t\t\t</Breadcrumb.List>\n\t\t\t\t</Breadcrumb.Root>\n\t\t\t</div>\n\t\t</header>\n\t\t<div class=\"flex flex-1 flex-col gap-4 p-4\">\n\t\t\t<div class=\"grid auto-rows-min gap-4 md:grid-cols-3\">\n\t\t\t\t<div class=\"bg-muted/50 aspect-video rounded-xl\"></div>\n\t\t\t\t<div class=\"bg-muted/50 aspect-video rounded-xl\"></div>\n\t\t\t\t<div class=\"bg-muted/50 aspect-video rounded-xl\"></div>\n\t\t\t</div>\n\t\t\t<div class=\"bg-muted/50 min-h-screen flex-1 rounded-xl md:min-h-min\"></div>\n\t\t</div>\n\t</Sidebar.Inset>\n</Sidebar.Provider>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/sidebar-03/components/app-sidebar.svelte",
    "content": "<script lang=\"ts\" module>\n\t// sample data\n\tconst data = {\n\t\tnavMain: [\n\t\t\t{\n\t\t\t\ttitle: \"Getting Started\",\n\t\t\t\turl: \"#\",\n\t\t\t\titems: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Installation\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Project Structure\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"Build Your Application\",\n\t\t\t\turl: \"#\",\n\t\t\t\titems: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Routing\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Data Fetching\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t\tisActive: true,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Rendering\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Caching\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Styling\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Optimizing\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Configuring\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Testing\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Authentication\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Deploying\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Upgrading\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Examples\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"API Reference\",\n\t\t\t\turl: \"#\",\n\t\t\t\titems: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Components\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"File Conventions\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Functions\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"next.config.js Options\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"CLI\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Edge Runtime\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"Architecture\",\n\t\t\t\turl: \"#\",\n\t\t\t\titems: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Accessibility\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Fast Refresh\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Next.js Compiler\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Supported Browsers\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Turbopack\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"Community\",\n\t\t\t\turl: \"#\",\n\t\t\t\titems: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Contribution Guide\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t};\n</script>\n\n<script lang=\"ts\">\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\timport GalleryVerticalEndIcon from \"@lucide/svelte/icons/gallery-vertical-end\";\n\timport type { ComponentProps } from \"svelte\";\n\tlet { ref = $bindable(null), ...restProps }: ComponentProps<typeof Sidebar.Root> = $props();\n</script>\n\n<Sidebar.Root {...restProps} bind:ref>\n\t<Sidebar.Header>\n\t\t<Sidebar.Menu>\n\t\t\t<Sidebar.MenuItem>\n\t\t\t\t<Sidebar.MenuButton size=\"lg\">\n\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t<a href=\"##\" {...props}>\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclass=\"bg-sidebar-primary text-sidebar-primary-foreground flex aspect-square size-8 items-center justify-center rounded-lg\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<GalleryVerticalEndIcon class=\"size-4\" />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"flex flex-col gap-0.5 leading-none\">\n\t\t\t\t\t\t\t\t<span class=\"font-medium\">Documentation</span>\n\t\t\t\t\t\t\t\t<span class=\"\">v1.0.0</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</a>\n\t\t\t\t\t{/snippet}\n\t\t\t\t</Sidebar.MenuButton>\n\t\t\t</Sidebar.MenuItem>\n\t\t</Sidebar.Menu>\n\t</Sidebar.Header>\n\t<Sidebar.Content>\n\t\t<Sidebar.Group>\n\t\t\t<Sidebar.Menu>\n\t\t\t\t{#each data.navMain as item (item.title)}\n\t\t\t\t\t<Sidebar.MenuItem>\n\t\t\t\t\t\t<Sidebar.MenuButton class=\"font-medium\">\n\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t<a href={item.url} {...props}>\n\t\t\t\t\t\t\t\t\t{item.title}\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t</Sidebar.MenuButton>\n\t\t\t\t\t\t{#if item.items?.length}\n\t\t\t\t\t\t\t<Sidebar.MenuSub>\n\t\t\t\t\t\t\t\t{#each item.items as subItem (subItem.title)}\n\t\t\t\t\t\t\t\t\t<Sidebar.MenuSubItem>\n\t\t\t\t\t\t\t\t\t\t<Sidebar.MenuSubButton isActive={subItem.isActive}>\n\t\t\t\t\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t\t\t\t\t<a href={subItem.url} {...props}>{subItem.title}</a>\n\t\t\t\t\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t\t\t\t\t</Sidebar.MenuSubButton>\n\t\t\t\t\t\t\t\t\t</Sidebar.MenuSubItem>\n\t\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t</Sidebar.MenuSub>\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t</Sidebar.MenuItem>\n\t\t\t\t{/each}\n\t\t\t</Sidebar.Menu>\n\t\t</Sidebar.Group>\n\t</Sidebar.Content>\n\t<Sidebar.Rail />\n</Sidebar.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/sidebar-04/+page.svelte",
    "content": "<script lang=\"ts\">\n\timport AppSidebar from \"./components/app-sidebar.svelte\";\n\timport * as Breadcrumb from \"$lib/registry/ui/breadcrumb/index.js\";\n\timport { Separator } from \"$lib/registry/ui/separator/index.js\";\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n</script>\n\n<Sidebar.Provider style=\"--sidebar-width: 19rem;\">\n\t<AppSidebar />\n\t<Sidebar.Inset>\n\t\t<header class=\"flex h-16 shrink-0 items-center gap-2 px-4\">\n\t\t\t<Sidebar.Trigger class=\"-ms-1\" />\n\t\t\t<Separator orientation=\"vertical\" class=\"me-2 data-[orientation=vertical]:h-4\" />\n\t\t\t<Breadcrumb.Root>\n\t\t\t\t<Breadcrumb.List>\n\t\t\t\t\t<Breadcrumb.Item class=\"hidden md:block\">\n\t\t\t\t\t\t<Breadcrumb.Link href=\"##\">Build Your Application</Breadcrumb.Link>\n\t\t\t\t\t</Breadcrumb.Item>\n\t\t\t\t\t<Breadcrumb.Separator class=\"hidden md:block\" />\n\t\t\t\t\t<Breadcrumb.Item>\n\t\t\t\t\t\t<Breadcrumb.Page>Data Fetching</Breadcrumb.Page>\n\t\t\t\t\t</Breadcrumb.Item>\n\t\t\t\t</Breadcrumb.List>\n\t\t\t</Breadcrumb.Root>\n\t\t</header>\n\t\t<div class=\"flex flex-1 flex-col gap-4 p-4 pt-0\">\n\t\t\t<div class=\"grid auto-rows-min gap-4 md:grid-cols-3\">\n\t\t\t\t<div class=\"bg-muted/50 aspect-video rounded-xl\"></div>\n\t\t\t\t<div class=\"bg-muted/50 aspect-video rounded-xl\"></div>\n\t\t\t\t<div class=\"bg-muted/50 aspect-video rounded-xl\"></div>\n\t\t\t</div>\n\t\t\t<div class=\"bg-muted/50 min-h-screen flex-1 rounded-xl md:min-h-min\"></div>\n\t\t</div>\n\t</Sidebar.Inset>\n</Sidebar.Provider>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/sidebar-04/components/app-sidebar.svelte",
    "content": "<script lang=\"ts\" module>\n\t// sample data\n\tconst data = {\n\t\tnavMain: [\n\t\t\t{\n\t\t\t\ttitle: \"Getting Started\",\n\t\t\t\turl: \"#\",\n\t\t\t\titems: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Installation\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Project Structure\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"Build Your Application\",\n\t\t\t\turl: \"#\",\n\t\t\t\titems: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Routing\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Data Fetching\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t\tisActive: true,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Rendering\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Caching\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Styling\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Optimizing\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Configuring\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Testing\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Authentication\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Deploying\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Upgrading\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Examples\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"API Reference\",\n\t\t\t\turl: \"#\",\n\t\t\t\titems: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Components\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"File Conventions\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Functions\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"next.config.js Options\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"CLI\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Edge Runtime\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"Architecture\",\n\t\t\t\turl: \"#\",\n\t\t\t\titems: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Accessibility\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Fast Refresh\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Next.js Compiler\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Supported Browsers\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Turbopack\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"Community\",\n\t\t\t\turl: \"#\",\n\t\t\t\titems: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Contribution Guide\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t};\n</script>\n\n<script lang=\"ts\">\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\timport GalleryVerticalEndIcon from \"@lucide/svelte/icons/gallery-vertical-end\";\n\timport type { ComponentProps } from \"svelte\";\n\n\tlet { ref = $bindable(null), ...restProps }: ComponentProps<typeof Sidebar.Root> = $props();\n</script>\n\n<Sidebar.Root bind:ref variant=\"floating\" {...restProps}>\n\t<Sidebar.Header>\n\t\t<Sidebar.Menu>\n\t\t\t<Sidebar.MenuItem>\n\t\t\t\t<Sidebar.MenuButton size=\"lg\">\n\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t<a href=\"##\" {...props}>\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclass=\"bg-sidebar-primary text-sidebar-primary-foreground flex aspect-square size-8 items-center justify-center rounded-lg\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<GalleryVerticalEndIcon class=\"size-4\" />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"flex flex-col gap-0.5 leading-none\">\n\t\t\t\t\t\t\t\t<span class=\"font-medium\">Documentation</span>\n\t\t\t\t\t\t\t\t<span class=\"\">v1.0.0</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</a>\n\t\t\t\t\t{/snippet}\n\t\t\t\t</Sidebar.MenuButton>\n\t\t\t</Sidebar.MenuItem>\n\t\t</Sidebar.Menu>\n\t</Sidebar.Header>\n\t<Sidebar.Content>\n\t\t<Sidebar.Group>\n\t\t\t<Sidebar.Menu class=\"gap-2\">\n\t\t\t\t{#each data.navMain as item (item.title)}\n\t\t\t\t\t<Sidebar.MenuItem>\n\t\t\t\t\t\t<Sidebar.MenuButton>\n\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t<a href={item.url} class=\"font-medium\" {...props}>\n\t\t\t\t\t\t\t\t\t{item.title}\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t</Sidebar.MenuButton>\n\t\t\t\t\t\t{#if item.items?.length}\n\t\t\t\t\t\t\t<Sidebar.MenuSub class=\"ms-0 border-s-0 px-1.5\">\n\t\t\t\t\t\t\t\t{#each item.items as subItem (subItem.title)}\n\t\t\t\t\t\t\t\t\t<Sidebar.MenuSubItem>\n\t\t\t\t\t\t\t\t\t\t<Sidebar.MenuSubButton isActive={subItem.isActive}>\n\t\t\t\t\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t\t\t\t\t<a href={subItem.url} {...props}>{subItem.title}</a>\n\t\t\t\t\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t\t\t\t\t</Sidebar.MenuSubButton>\n\t\t\t\t\t\t\t\t\t</Sidebar.MenuSubItem>\n\t\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t</Sidebar.MenuSub>\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t</Sidebar.MenuItem>\n\t\t\t\t{/each}\n\t\t\t</Sidebar.Menu>\n\t\t</Sidebar.Group>\n\t</Sidebar.Content>\n</Sidebar.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/sidebar-05/+page.svelte",
    "content": "<script lang=\"ts\">\n\timport AppSidebar from \"./components/app-sidebar.svelte\";\n\timport * as Breadcrumb from \"$lib/registry/ui/breadcrumb/index.js\";\n\timport { Separator } from \"$lib/registry/ui/separator/index.js\";\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n</script>\n\n<Sidebar.Provider>\n\t<AppSidebar />\n\t<Sidebar.Inset>\n\t\t<header class=\"flex h-16 shrink-0 items-center gap-2 border-b px-4\">\n\t\t\t<Sidebar.Trigger class=\"-ms-1\" />\n\t\t\t<Separator orientation=\"vertical\" class=\"me-2 data-[orientation=vertical]:h-4\" />\n\t\t\t<Breadcrumb.Root>\n\t\t\t\t<Breadcrumb.List>\n\t\t\t\t\t<Breadcrumb.Item class=\"hidden md:block\">\n\t\t\t\t\t\t<Breadcrumb.Link href=\"##\">Build Your Application</Breadcrumb.Link>\n\t\t\t\t\t</Breadcrumb.Item>\n\t\t\t\t\t<Breadcrumb.Separator class=\"hidden md:block\" />\n\t\t\t\t\t<Breadcrumb.Item>\n\t\t\t\t\t\t<Breadcrumb.Page>Data Fetching</Breadcrumb.Page>\n\t\t\t\t\t</Breadcrumb.Item>\n\t\t\t\t</Breadcrumb.List>\n\t\t\t</Breadcrumb.Root>\n\t\t</header>\n\t\t<div class=\"flex flex-1 flex-col gap-4 p-4\">\n\t\t\t<div class=\"grid auto-rows-min gap-4 md:grid-cols-3\">\n\t\t\t\t<div class=\"bg-muted/50 aspect-video rounded-xl\"></div>\n\t\t\t\t<div class=\"bg-muted/50 aspect-video rounded-xl\"></div>\n\t\t\t\t<div class=\"bg-muted/50 aspect-video rounded-xl\"></div>\n\t\t\t</div>\n\t\t\t<div class=\"bg-muted/50 min-h-screen flex-1 rounded-xl md:min-h-min\"></div>\n\t\t</div>\n\t</Sidebar.Inset>\n</Sidebar.Provider>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/sidebar-05/components/app-sidebar.svelte",
    "content": "<script lang=\"ts\" module>\n\t// sample data\n\n\t// This is sample data.\n\tconst data = {\n\t\tnavMain: [\n\t\t\t{\n\t\t\t\ttitle: \"Getting Started\",\n\t\t\t\turl: \"#\",\n\t\t\t\titems: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Installation\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Project Structure\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"Build Your Application\",\n\t\t\t\turl: \"#\",\n\t\t\t\titems: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Routing\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Data Fetching\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t\tisActive: true,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Rendering\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Caching\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Styling\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Optimizing\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Configuring\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Testing\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Authentication\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Deploying\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Upgrading\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Examples\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"API Reference\",\n\t\t\t\turl: \"#\",\n\t\t\t\titems: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Components\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"File Conventions\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Functions\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"next.config.js Options\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"CLI\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Edge Runtime\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"Architecture\",\n\t\t\t\turl: \"#\",\n\t\t\t\titems: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Accessibility\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Fast Refresh\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Next.js Compiler\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Supported Browsers\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Turbopack\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"Community\",\n\t\t\t\turl: \"#\",\n\t\t\t\titems: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Contribution Guide\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t};\n</script>\n\n<script lang=\"ts\">\n\timport SearchForm from \"./search-form.svelte\";\n\timport * as Collapsible from \"$lib/registry/ui/collapsible/index.js\";\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\timport GalleryVerticalEndIcon from \"@lucide/svelte/icons/gallery-vertical-end\";\n\timport MinusIcon from \"@lucide/svelte/icons/minus\";\n\timport PlusIcon from \"@lucide/svelte/icons/plus\";\n\timport type { ComponentProps } from \"svelte\";\n\n\tlet { ref = $bindable(null), ...restProps }: ComponentProps<typeof Sidebar.Root> = $props();\n</script>\n\n<Sidebar.Root bind:ref {...restProps}>\n\t<Sidebar.Header>\n\t\t<Sidebar.Menu>\n\t\t\t<Sidebar.MenuItem>\n\t\t\t\t<Sidebar.MenuButton size=\"lg\">\n\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t<a href=\"##\" {...props}>\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclass=\"bg-sidebar-primary text-sidebar-primary-foreground flex aspect-square size-8 items-center justify-center rounded-lg\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<GalleryVerticalEndIcon class=\"size-4\" />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"flex flex-col gap-0.5 leading-none\">\n\t\t\t\t\t\t\t\t<span class=\"font-medium\">Documentation</span>\n\t\t\t\t\t\t\t\t<span class=\"\">v1.0.0</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</a>\n\t\t\t\t\t{/snippet}\n\t\t\t\t</Sidebar.MenuButton>\n\t\t\t</Sidebar.MenuItem>\n\t\t</Sidebar.Menu>\n\t\t<SearchForm />\n\t</Sidebar.Header>\n\t<Sidebar.Content>\n\t\t<Sidebar.Group>\n\t\t\t<Sidebar.Menu>\n\t\t\t\t{#each data.navMain as item, index (item.title)}\n\t\t\t\t\t<Collapsible.Root open={index === 1} class=\"group/collapsible\">\n\t\t\t\t\t\t<Sidebar.MenuItem>\n\t\t\t\t\t\t\t<Collapsible.Trigger>\n\t\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t\t<Sidebar.MenuButton {...props}>\n\t\t\t\t\t\t\t\t\t\t{item.title}\n\t\t\t\t\t\t\t\t\t\t<PlusIcon\n\t\t\t\t\t\t\t\t\t\t\tclass=\"ms-auto group-data-[state=open]/collapsible:hidden\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t<MinusIcon\n\t\t\t\t\t\t\t\t\t\t\tclass=\"ms-auto group-data-[state=closed]/collapsible:hidden\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</Sidebar.MenuButton>\n\t\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t\t</Collapsible.Trigger>\n\t\t\t\t\t\t\t{#if item.items?.length}\n\t\t\t\t\t\t\t\t<Collapsible.Content>\n\t\t\t\t\t\t\t\t\t<Sidebar.MenuSub>\n\t\t\t\t\t\t\t\t\t\t{#each item.items as subItem (subItem.title)}\n\t\t\t\t\t\t\t\t\t\t\t<Sidebar.MenuSubItem>\n\t\t\t\t\t\t\t\t\t\t\t\t<Sidebar.MenuSubButton isActive={subItem.isActive}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href={subItem.url} {...props}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t>{subItem.title}</a\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t\t\t\t\t\t\t</Sidebar.MenuSubButton>\n\t\t\t\t\t\t\t\t\t\t\t</Sidebar.MenuSubItem>\n\t\t\t\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t\t\t</Sidebar.MenuSub>\n\t\t\t\t\t\t\t\t</Collapsible.Content>\n\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t</Sidebar.MenuItem>\n\t\t\t\t\t</Collapsible.Root>\n\t\t\t\t{/each}\n\t\t\t</Sidebar.Menu>\n\t\t</Sidebar.Group>\n\t</Sidebar.Content>\n\t<Sidebar.Rail />\n</Sidebar.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/sidebar-05/components/search-form.svelte",
    "content": "<script lang=\"ts\">\n\timport { Label } from \"$lib/registry/ui/label/index.js\";\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\timport type { WithElementRef } from \"$lib/utils.js\";\n\timport SearchIcon from \"@lucide/svelte/icons/search\";\n\timport type { HTMLFormAttributes } from \"svelte/elements\";\n\n\tlet { ref = $bindable(null), ...restProps }: WithElementRef<HTMLFormAttributes> = $props();\n</script>\n\n<form bind:this={ref} {...restProps}>\n\t<Sidebar.Group class=\"py-0\">\n\t\t<Sidebar.GroupContent class=\"relative\">\n\t\t\t<Label for=\"search\" class=\"sr-only\">Search</Label>\n\t\t\t<Sidebar.Input id=\"search\" placeholder=\"Search the docs...\" class=\"ps-8\" />\n\t\t\t<SearchIcon\n\t\t\t\tclass=\"pointer-events-none absolute start-2 top-1/2 size-4 -translate-y-1/2 opacity-50 select-none\"\n\t\t\t/>\n\t\t</Sidebar.GroupContent>\n\t</Sidebar.Group>\n</form>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/sidebar-06/+page.svelte",
    "content": "<script lang=\"ts\">\n\timport AppSidebar from \"./components/app-sidebar.svelte\";\n\timport * as Breadcrumb from \"$lib/registry/ui/breadcrumb/index.js\";\n\timport { Separator } from \"$lib/registry/ui/separator/index.js\";\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n</script>\n\n<Sidebar.Provider>\n\t<AppSidebar />\n\t<Sidebar.Inset>\n\t\t<header class=\"flex h-16 shrink-0 items-center gap-2 border-b px-4\">\n\t\t\t<Sidebar.Trigger class=\"-ms-1\" />\n\t\t\t<Separator orientation=\"vertical\" class=\"me-2 data-[orientation=vertical]:h-4\" />\n\t\t\t<Breadcrumb.Root>\n\t\t\t\t<Breadcrumb.List>\n\t\t\t\t\t<Breadcrumb.Item class=\"hidden md:block\">\n\t\t\t\t\t\t<Breadcrumb.Link href=\"##\">Build Your Application</Breadcrumb.Link>\n\t\t\t\t\t</Breadcrumb.Item>\n\t\t\t\t\t<Breadcrumb.Separator class=\"hidden md:block\" />\n\t\t\t\t\t<Breadcrumb.Item>\n\t\t\t\t\t\t<Breadcrumb.Page>Data Fetching</Breadcrumb.Page>\n\t\t\t\t\t</Breadcrumb.Item>\n\t\t\t\t</Breadcrumb.List>\n\t\t\t</Breadcrumb.Root>\n\t\t</header>\n\t\t<div class=\"flex flex-1 flex-col gap-4 p-4\">\n\t\t\t<div class=\"grid auto-rows-min gap-4 md:grid-cols-3\">\n\t\t\t\t<div class=\"bg-muted/50 aspect-video rounded-xl\"></div>\n\t\t\t\t<div class=\"bg-muted/50 aspect-video rounded-xl\"></div>\n\t\t\t\t<div class=\"bg-muted/50 aspect-video rounded-xl\"></div>\n\t\t\t</div>\n\t\t\t<div class=\"bg-muted/50 min-h-screen flex-1 rounded-xl md:min-h-min\"></div>\n\t\t</div>\n\t</Sidebar.Inset>\n</Sidebar.Provider>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/sidebar-06/components/app-sidebar.svelte",
    "content": "<script lang=\"ts\" module>\n\t// sample data\n\tconst data = {\n\t\tnavMain: [\n\t\t\t{\n\t\t\t\ttitle: \"Getting Started\",\n\t\t\t\turl: \"#\",\n\t\t\t\titems: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Installation\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Project Structure\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"Build Your Application\",\n\t\t\t\turl: \"#\",\n\t\t\t\titems: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Routing\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Data Fetching\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t\tisActive: true,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Rendering\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Caching\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Styling\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Optimizing\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Configuring\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Testing\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Authentication\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Deploying\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Upgrading\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Examples\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"API Reference\",\n\t\t\t\turl: \"#\",\n\t\t\t\titems: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Components\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"File Conventions\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Functions\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"next.config.js Options\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"CLI\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Edge Runtime\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"Architecture\",\n\t\t\t\turl: \"#\",\n\t\t\t\titems: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Accessibility\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Fast Refresh\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Next.js Compiler\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Supported Browsers\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Turbopack\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t};\n</script>\n\n<script lang=\"ts\">\n\timport NavMain from \"./nav-main.svelte\";\n\timport SidebarOptInForm from \"./sidebar-opt-in-form.svelte\";\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\timport GalleryVerticalEndIcon from \"@lucide/svelte/icons/gallery-vertical-end\";\n\timport type { ComponentProps } from \"svelte\";\n\n\tlet { ref = $bindable(null), ...restProps }: ComponentProps<typeof Sidebar.Root> = $props();\n</script>\n\n<Sidebar.Root bind:ref {...restProps}>\n\t<Sidebar.Header>\n\t\t<Sidebar.Menu>\n\t\t\t<Sidebar.MenuItem>\n\t\t\t\t<Sidebar.MenuButton size=\"lg\">\n\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t<a href=\"##\" {...props}>\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclass=\"bg-sidebar-primary text-sidebar-primary-foreground flex aspect-square size-8 items-center justify-center rounded-lg\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<GalleryVerticalEndIcon class=\"size-4\" />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"flex flex-col gap-0.5 leading-none\">\n\t\t\t\t\t\t\t\t<span class=\"font-medium\">Documentation</span>\n\t\t\t\t\t\t\t\t<span class=\"\">v1.0.0</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</a>\n\t\t\t\t\t{/snippet}\n\t\t\t\t</Sidebar.MenuButton>\n\t\t\t</Sidebar.MenuItem>\n\t\t</Sidebar.Menu>\n\t</Sidebar.Header>\n\t<Sidebar.Content>\n\t\t<NavMain items={data.navMain} />\n\t</Sidebar.Content>\n\t<Sidebar.Footer>\n\t\t<div class=\"p-1\">\n\t\t\t<SidebarOptInForm />\n\t\t</div>\n\t</Sidebar.Footer>\n\t<Sidebar.Rail />\n</Sidebar.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/sidebar-06/components/nav-main.svelte",
    "content": "<script lang=\"ts\">\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\timport { useSidebar } from \"$lib/registry/ui/sidebar/index.js\";\n\timport EllipsisIcon from \"@lucide/svelte/icons/ellipsis\";\n\n\tlet {\n\t\titems,\n\t}: {\n\t\titems: {\n\t\t\ttitle: string;\n\t\t\turl: string;\n\t\t\ticon?: typeof EllipsisIcon;\n\t\t\tisActive?: boolean;\n\t\t\titems?: {\n\t\t\t\ttitle: string;\n\t\t\t\turl: string;\n\t\t\t}[];\n\t\t}[];\n\t} = $props();\n\n\tconst sidebar = useSidebar();\n</script>\n\n<Sidebar.Group>\n\t<Sidebar.Menu>\n\t\t{#each items as item (item.title)}\n\t\t\t<DropdownMenu.Root>\n\t\t\t\t<Sidebar.MenuItem>\n\t\t\t\t\t<DropdownMenu.Trigger>\n\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t<Sidebar.MenuButton\n\t\t\t\t\t\t\t\tclass=\"data-[state=open]:bg-sidebar-accent data-[state=open]:text-sidebar-accent-foreground\"\n\t\t\t\t\t\t\t\t{...props}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{item.title}\n\t\t\t\t\t\t\t\t<EllipsisIcon class=\"ms-auto\" />\n\t\t\t\t\t\t\t</Sidebar.MenuButton>\n\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t</DropdownMenu.Trigger>\n\t\t\t\t\t{#if item.items?.length}\n\t\t\t\t\t\t<DropdownMenu.Content\n\t\t\t\t\t\t\tside={sidebar.isMobile ? \"bottom\" : \"right\"}\n\t\t\t\t\t\t\talign={sidebar.isMobile ? \"end\" : \"start\"}\n\t\t\t\t\t\t\tclass=\"min-w-56 rounded-lg\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{#each item.items as subItem (subItem.title)}\n\t\t\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t\t\t<a href={subItem.url} {...props}>{subItem.title}</a>\n\t\t\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t</DropdownMenu.Content>\n\t\t\t\t\t{/if}\n\t\t\t\t</Sidebar.MenuItem>\n\t\t\t</DropdownMenu.Root>\n\t\t{/each}\n\t</Sidebar.Menu>\n</Sidebar.Group>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/sidebar-06/components/sidebar-opt-in-form.svelte",
    "content": "<script lang=\"ts\">\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n</script>\n\n<Card.Root class=\"gap-2 py-4 shadow-none\">\n\t<Card.Header class=\"px-4\">\n\t\t<Card.Title class=\"text-sm\">Subscribe to our newsletter</Card.Title>\n\t\t<Card.Description>Opt-in to receive updates and news about the sidebar.</Card.Description>\n\t</Card.Header>\n\t<Card.Content class=\"px-4\">\n\t\t<form>\n\t\t\t<div class=\"grid gap-2.5\">\n\t\t\t\t<Sidebar.Input type=\"email\" placeholder=\"Email\" />\n\t\t\t\t<Button\n\t\t\t\t\tclass=\"bg-sidebar-primary text-sidebar-primary-foreground w-full shadow-none\"\n\t\t\t\t\tsize=\"sm\"\n\t\t\t\t>\n\t\t\t\t\tSubscribe\n\t\t\t\t</Button>\n\t\t\t</div>\n\t\t</form>\n\t</Card.Content>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/sidebar-07/+page.svelte",
    "content": "<script lang=\"ts\">\n\timport AppSidebar from \"./components/app-sidebar.svelte\";\n\timport * as Breadcrumb from \"$lib/registry/ui/breadcrumb/index.js\";\n\timport { Separator } from \"$lib/registry/ui/separator/index.js\";\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n</script>\n\n<Sidebar.Provider>\n\t<AppSidebar />\n\t<Sidebar.Inset>\n\t\t<header\n\t\t\tclass=\"flex h-16 shrink-0 items-center gap-2 transition-[width,height] ease-linear group-has-data-[collapsible=icon]/sidebar-wrapper:h-12\"\n\t\t>\n\t\t\t<div class=\"flex items-center gap-2 px-4\">\n\t\t\t\t<Sidebar.Trigger class=\"-ms-1\" />\n\t\t\t\t<Separator orientation=\"vertical\" class=\"me-2 data-[orientation=vertical]:h-4\" />\n\t\t\t\t<Breadcrumb.Root>\n\t\t\t\t\t<Breadcrumb.List>\n\t\t\t\t\t\t<Breadcrumb.Item class=\"hidden md:block\">\n\t\t\t\t\t\t\t<Breadcrumb.Link href=\"##\">Build Your Application</Breadcrumb.Link>\n\t\t\t\t\t\t</Breadcrumb.Item>\n\t\t\t\t\t\t<Breadcrumb.Separator class=\"hidden md:block\" />\n\t\t\t\t\t\t<Breadcrumb.Item>\n\t\t\t\t\t\t\t<Breadcrumb.Page>Data Fetching</Breadcrumb.Page>\n\t\t\t\t\t\t</Breadcrumb.Item>\n\t\t\t\t\t</Breadcrumb.List>\n\t\t\t\t</Breadcrumb.Root>\n\t\t\t</div>\n\t\t</header>\n\t\t<div class=\"flex flex-1 flex-col gap-4 p-4 pt-0\">\n\t\t\t<div class=\"grid auto-rows-min gap-4 md:grid-cols-3\">\n\t\t\t\t<div class=\"bg-muted/50 aspect-video rounded-xl\"></div>\n\t\t\t\t<div class=\"bg-muted/50 aspect-video rounded-xl\"></div>\n\t\t\t\t<div class=\"bg-muted/50 aspect-video rounded-xl\"></div>\n\t\t\t</div>\n\t\t\t<div class=\"bg-muted/50 min-h-screen flex-1 rounded-xl md:min-h-min\"></div>\n\t\t</div>\n\t</Sidebar.Inset>\n</Sidebar.Provider>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/sidebar-07/components/app-sidebar.svelte",
    "content": "<script lang=\"ts\" module>\n\timport AudioWaveformIcon from \"@lucide/svelte/icons/audio-waveform\";\n\timport BookOpenIcon from \"@lucide/svelte/icons/book-open\";\n\timport BotIcon from \"@lucide/svelte/icons/bot\";\n\timport ChartPieIcon from \"@lucide/svelte/icons/chart-pie\";\n\timport CommandIcon from \"@lucide/svelte/icons/command\";\n\timport FrameIcon from \"@lucide/svelte/icons/frame\";\n\timport GalleryVerticalEndIcon from \"@lucide/svelte/icons/gallery-vertical-end\";\n\timport MapIcon from \"@lucide/svelte/icons/map\";\n\timport Settings2Icon from \"@lucide/svelte/icons/settings-2\";\n\timport SquareTerminalIcon from \"@lucide/svelte/icons/square-terminal\";\n\n\t// This is sample data.\n\tconst data = {\n\t\tuser: {\n\t\t\tname: \"shadcn\",\n\t\t\temail: \"m@example.com\",\n\t\t\tavatar: \"/avatars/shadcn.jpg\",\n\t\t},\n\t\tteams: [\n\t\t\t{\n\t\t\t\tname: \"Acme Inc\",\n\t\t\t\tlogo: GalleryVerticalEndIcon,\n\t\t\t\tplan: \"Enterprise\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"Acme Corp.\",\n\t\t\t\tlogo: AudioWaveformIcon,\n\t\t\t\tplan: \"Startup\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"Evil Corp.\",\n\t\t\t\tlogo: CommandIcon,\n\t\t\t\tplan: \"Free\",\n\t\t\t},\n\t\t],\n\t\tnavMain: [\n\t\t\t{\n\t\t\t\ttitle: \"Playground\",\n\t\t\t\turl: \"#\",\n\t\t\t\ticon: SquareTerminalIcon,\n\t\t\t\tisActive: true,\n\t\t\t\titems: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"History\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Starred\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Settings\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"Models\",\n\t\t\t\turl: \"#\",\n\t\t\t\ticon: BotIcon,\n\t\t\t\titems: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Genesis\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Explorer\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Quantum\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"Documentation\",\n\t\t\t\turl: \"#\",\n\t\t\t\ticon: BookOpenIcon,\n\t\t\t\titems: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Introduction\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Get Started\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Tutorials\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Changelog\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"Settings\",\n\t\t\t\turl: \"#\",\n\t\t\t\ticon: Settings2Icon,\n\t\t\t\titems: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"General\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Team\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Billing\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Limits\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t\tprojects: [\n\t\t\t{\n\t\t\t\tname: \"Design Engineering\",\n\t\t\t\turl: \"#\",\n\t\t\t\ticon: FrameIcon,\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"Sales & Marketing\",\n\t\t\t\turl: \"#\",\n\t\t\t\ticon: ChartPieIcon,\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"Travel\",\n\t\t\t\turl: \"#\",\n\t\t\t\ticon: MapIcon,\n\t\t\t},\n\t\t],\n\t};\n</script>\n\n<script lang=\"ts\">\n\timport NavMain from \"./nav-main.svelte\";\n\timport NavProjects from \"./nav-projects.svelte\";\n\timport NavUser from \"./nav-user.svelte\";\n\timport TeamSwitcher from \"./team-switcher.svelte\";\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\timport type { ComponentProps } from \"svelte\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tcollapsible = \"icon\",\n\t\t...restProps\n\t}: ComponentProps<typeof Sidebar.Root> = $props();\n</script>\n\n<Sidebar.Root bind:ref {collapsible} {...restProps}>\n\t<Sidebar.Header>\n\t\t<TeamSwitcher teams={data.teams} />\n\t</Sidebar.Header>\n\t<Sidebar.Content>\n\t\t<NavMain items={data.navMain} />\n\t\t<NavProjects projects={data.projects} />\n\t</Sidebar.Content>\n\t<Sidebar.Footer>\n\t\t<NavUser user={data.user} />\n\t</Sidebar.Footer>\n\t<Sidebar.Rail />\n</Sidebar.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/sidebar-07/components/nav-main.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Collapsible from \"$lib/registry/ui/collapsible/index.js\";\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\timport ChevronRightIcon from \"@lucide/svelte/icons/chevron-right\";\n\n\tlet {\n\t\titems,\n\t}: {\n\t\titems: {\n\t\t\ttitle: string;\n\t\t\turl: string;\n\t\t\t// this should be `Component` after @lucide/svelte updates types\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\ticon?: any;\n\t\t\tisActive?: boolean;\n\t\t\titems?: {\n\t\t\t\ttitle: string;\n\t\t\t\turl: string;\n\t\t\t}[];\n\t\t}[];\n\t} = $props();\n</script>\n\n<Sidebar.Group>\n\t<Sidebar.GroupLabel>Platform</Sidebar.GroupLabel>\n\t<Sidebar.Menu>\n\t\t{#each items as item (item.title)}\n\t\t\t<Collapsible.Root open={item.isActive} class=\"group/collapsible\">\n\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t<Sidebar.MenuItem {...props}>\n\t\t\t\t\t\t<Collapsible.Trigger>\n\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t<Sidebar.MenuButton {...props} tooltipContent={item.title}>\n\t\t\t\t\t\t\t\t\t{#if item.icon}\n\t\t\t\t\t\t\t\t\t\t<item.icon />\n\t\t\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\t\t\t<span>{item.title}</span>\n\t\t\t\t\t\t\t\t\t<ChevronRightIcon\n\t\t\t\t\t\t\t\t\t\tclass=\"ms-auto transition-transform duration-200 group-data-[state=open]/collapsible:rotate-90\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</Sidebar.MenuButton>\n\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t</Collapsible.Trigger>\n\t\t\t\t\t\t<Collapsible.Content>\n\t\t\t\t\t\t\t<Sidebar.MenuSub>\n\t\t\t\t\t\t\t\t{#each item.items ?? [] as subItem (subItem.title)}\n\t\t\t\t\t\t\t\t\t<Sidebar.MenuSubItem>\n\t\t\t\t\t\t\t\t\t\t<Sidebar.MenuSubButton>\n\t\t\t\t\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t\t\t\t\t<a href={subItem.url} {...props}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span>{subItem.title}</span>\n\t\t\t\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t\t\t\t\t</Sidebar.MenuSubButton>\n\t\t\t\t\t\t\t\t\t</Sidebar.MenuSubItem>\n\t\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t</Sidebar.MenuSub>\n\t\t\t\t\t\t</Collapsible.Content>\n\t\t\t\t\t</Sidebar.MenuItem>\n\t\t\t\t{/snippet}\n\t\t\t</Collapsible.Root>\n\t\t{/each}\n\t</Sidebar.Menu>\n</Sidebar.Group>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/sidebar-07/components/nav-projects.svelte",
    "content": "<script lang=\"ts\">\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\timport { useSidebar } from \"$lib/registry/ui/sidebar/context.svelte.js\";\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\timport EllipsisIcon from \"@lucide/svelte/icons/ellipsis\";\n\timport FolderIcon from \"@lucide/svelte/icons/folder\";\n\timport ForwardIcon from \"@lucide/svelte/icons/forward\";\n\timport Trash2Icon from \"@lucide/svelte/icons/trash-2\";\n\n\tlet {\n\t\tprojects,\n\t}: {\n\t\tprojects: {\n\t\t\tname: string;\n\t\t\turl: string;\n\t\t\t// This should be `Component` after @lucide/svelte updates types\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\ticon: any;\n\t\t}[];\n\t} = $props();\n\n\tconst sidebar = useSidebar();\n</script>\n\n<Sidebar.Group class=\"group-data-[collapsible=icon]:hidden\">\n\t<Sidebar.GroupLabel>Projects</Sidebar.GroupLabel>\n\t<Sidebar.Menu>\n\t\t{#each projects as item (item.name)}\n\t\t\t<Sidebar.MenuItem>\n\t\t\t\t<Sidebar.MenuButton>\n\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t<a href={item.url} {...props}>\n\t\t\t\t\t\t\t<item.icon />\n\t\t\t\t\t\t\t<span>{item.name}</span>\n\t\t\t\t\t\t</a>\n\t\t\t\t\t{/snippet}\n\t\t\t\t</Sidebar.MenuButton>\n\t\t\t\t<DropdownMenu.Root>\n\t\t\t\t\t<DropdownMenu.Trigger>\n\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t<Sidebar.MenuAction showOnHover {...props}>\n\t\t\t\t\t\t\t\t<EllipsisIcon />\n\t\t\t\t\t\t\t\t<span class=\"sr-only\">More</span>\n\t\t\t\t\t\t\t</Sidebar.MenuAction>\n\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t</DropdownMenu.Trigger>\n\t\t\t\t\t<DropdownMenu.Content\n\t\t\t\t\t\tclass=\"w-48 rounded-lg\"\n\t\t\t\t\t\tside={sidebar.isMobile ? \"bottom\" : \"right\"}\n\t\t\t\t\t\talign={sidebar.isMobile ? \"end\" : \"start\"}\n\t\t\t\t\t>\n\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t<FolderIcon class=\"text-muted-foreground\" />\n\t\t\t\t\t\t\t<span>View Project</span>\n\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t<ForwardIcon class=\"text-muted-foreground\" />\n\t\t\t\t\t\t\t<span>Share Project</span>\n\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t<Trash2Icon class=\"text-muted-foreground\" />\n\t\t\t\t\t\t\t<span>Delete Project</span>\n\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t</DropdownMenu.Content>\n\t\t\t\t</DropdownMenu.Root>\n\t\t\t</Sidebar.MenuItem>\n\t\t{/each}\n\t\t<Sidebar.MenuItem>\n\t\t\t<Sidebar.MenuButton class=\"text-sidebar-foreground/70\">\n\t\t\t\t<EllipsisIcon class=\"text-sidebar-foreground/70\" />\n\t\t\t\t<span>More</span>\n\t\t\t</Sidebar.MenuButton>\n\t\t</Sidebar.MenuItem>\n\t</Sidebar.Menu>\n</Sidebar.Group>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/sidebar-07/components/nav-user.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Avatar from \"$lib/registry/ui/avatar/index.js\";\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\timport { useSidebar } from \"$lib/registry/ui/sidebar/index.js\";\n\timport BadgeCheckIcon from \"@lucide/svelte/icons/badge-check\";\n\timport BellIcon from \"@lucide/svelte/icons/bell\";\n\timport ChevronsUpDownIcon from \"@lucide/svelte/icons/chevrons-up-down\";\n\timport CreditCardIcon from \"@lucide/svelte/icons/credit-card\";\n\timport LogOutIcon from \"@lucide/svelte/icons/log-out\";\n\timport SparklesIcon from \"@lucide/svelte/icons/sparkles\";\n\n\tlet { user }: { user: { name: string; email: string; avatar: string } } = $props();\n\tconst sidebar = useSidebar();\n</script>\n\n<Sidebar.Menu>\n\t<Sidebar.MenuItem>\n\t\t<DropdownMenu.Root>\n\t\t\t<DropdownMenu.Trigger>\n\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t<Sidebar.MenuButton\n\t\t\t\t\t\tsize=\"lg\"\n\t\t\t\t\t\tclass=\"data-[state=open]:bg-sidebar-accent data-[state=open]:text-sidebar-accent-foreground\"\n\t\t\t\t\t\t{...props}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Avatar.Root class=\"size-8 rounded-lg\">\n\t\t\t\t\t\t\t<Avatar.Image src={user.avatar} alt={user.name} />\n\t\t\t\t\t\t\t<Avatar.Fallback class=\"rounded-lg\">CN</Avatar.Fallback>\n\t\t\t\t\t\t</Avatar.Root>\n\t\t\t\t\t\t<div class=\"grid flex-1 text-start text-sm leading-tight\">\n\t\t\t\t\t\t\t<span class=\"truncate font-medium\">{user.name}</span>\n\t\t\t\t\t\t\t<span class=\"truncate text-xs\">{user.email}</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<ChevronsUpDownIcon class=\"ms-auto size-4\" />\n\t\t\t\t\t</Sidebar.MenuButton>\n\t\t\t\t{/snippet}\n\t\t\t</DropdownMenu.Trigger>\n\t\t\t<DropdownMenu.Content\n\t\t\t\tclass=\"w-(--bits-dropdown-menu-anchor-width) min-w-56 rounded-lg\"\n\t\t\t\tside={sidebar.isMobile ? \"bottom\" : \"right\"}\n\t\t\t\talign=\"end\"\n\t\t\t\tsideOffset={4}\n\t\t\t>\n\t\t\t\t<DropdownMenu.Label class=\"p-0 font-normal\">\n\t\t\t\t\t<div class=\"flex items-center gap-2 px-1 py-1.5 text-start text-sm\">\n\t\t\t\t\t\t<Avatar.Root class=\"size-8 rounded-lg\">\n\t\t\t\t\t\t\t<Avatar.Image src={user.avatar} alt={user.name} />\n\t\t\t\t\t\t\t<Avatar.Fallback class=\"rounded-lg\">CN</Avatar.Fallback>\n\t\t\t\t\t\t</Avatar.Root>\n\t\t\t\t\t\t<div class=\"grid flex-1 text-start text-sm leading-tight\">\n\t\t\t\t\t\t\t<span class=\"truncate font-medium\">{user.name}</span>\n\t\t\t\t\t\t\t<span class=\"truncate text-xs\">{user.email}</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</DropdownMenu.Label>\n\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t<DropdownMenu.Group>\n\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t<SparklesIcon />\n\t\t\t\t\t\tUpgrade to Pro\n\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t</DropdownMenu.Group>\n\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t<DropdownMenu.Group>\n\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t<BadgeCheckIcon />\n\t\t\t\t\t\tAccount\n\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t<CreditCardIcon />\n\t\t\t\t\t\tBilling\n\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t<BellIcon />\n\t\t\t\t\t\tNotifications\n\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t</DropdownMenu.Group>\n\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t<LogOutIcon />\n\t\t\t\t\tLog out\n\t\t\t\t</DropdownMenu.Item>\n\t\t\t</DropdownMenu.Content>\n\t\t</DropdownMenu.Root>\n\t</Sidebar.MenuItem>\n</Sidebar.Menu>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/sidebar-07/components/team-switcher.svelte",
    "content": "<script lang=\"ts\">\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\timport { useSidebar } from \"$lib/registry/ui/sidebar/index.js\";\n\timport ChevronsUpDownIcon from \"@lucide/svelte/icons/chevrons-up-down\";\n\timport PlusIcon from \"@lucide/svelte/icons/plus\";\n\n\t// This should be `Component` after @lucide/svelte updates types\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tlet { teams }: { teams: { name: string; logo: any; plan: string }[] } = $props();\n\tconst sidebar = useSidebar();\n\n\t// svelte-ignore state_referenced_locally\n\tlet activeTeam = $state(teams[0]);\n</script>\n\n<Sidebar.Menu>\n\t<Sidebar.MenuItem>\n\t\t<DropdownMenu.Root>\n\t\t\t<DropdownMenu.Trigger>\n\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t<Sidebar.MenuButton\n\t\t\t\t\t\t{...props}\n\t\t\t\t\t\tsize=\"lg\"\n\t\t\t\t\t\tclass=\"data-[state=open]:bg-sidebar-accent data-[state=open]:text-sidebar-accent-foreground\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclass=\"bg-sidebar-primary text-sidebar-primary-foreground flex aspect-square size-8 items-center justify-center rounded-lg\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<activeTeam.logo class=\"size-4\" />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"grid flex-1 text-start text-sm leading-tight\">\n\t\t\t\t\t\t\t<span class=\"truncate font-medium\">\n\t\t\t\t\t\t\t\t{activeTeam.name}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t<span class=\"truncate text-xs\">{activeTeam.plan}</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<ChevronsUpDownIcon class=\"ms-auto\" />\n\t\t\t\t\t</Sidebar.MenuButton>\n\t\t\t\t{/snippet}\n\t\t\t</DropdownMenu.Trigger>\n\t\t\t<DropdownMenu.Content\n\t\t\t\tclass=\"w-(--bits-dropdown-menu-anchor-width) min-w-56 rounded-lg\"\n\t\t\t\talign=\"start\"\n\t\t\t\tside={sidebar.isMobile ? \"bottom\" : \"right\"}\n\t\t\t\tsideOffset={4}\n\t\t\t>\n\t\t\t\t<DropdownMenu.Label class=\"text-muted-foreground text-xs\">Teams</DropdownMenu.Label>\n\t\t\t\t{#each teams as team, index (team.name)}\n\t\t\t\t\t<DropdownMenu.Item onSelect={() => (activeTeam = team)} class=\"gap-2 p-2\">\n\t\t\t\t\t\t<div class=\"flex size-6 items-center justify-center rounded-md border\">\n\t\t\t\t\t\t\t<team.logo class=\"size-3.5 shrink-0\" />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t{team.name}\n\t\t\t\t\t\t<DropdownMenu.Shortcut>⌘{index + 1}</DropdownMenu.Shortcut>\n\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t{/each}\n\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t<DropdownMenu.Item class=\"gap-2 p-2\">\n\t\t\t\t\t<div\n\t\t\t\t\t\tclass=\"flex size-6 items-center justify-center rounded-md border bg-transparent\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<PlusIcon class=\"size-4\" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"text-muted-foreground font-medium\">Add team</div>\n\t\t\t\t</DropdownMenu.Item>\n\t\t\t</DropdownMenu.Content>\n\t\t</DropdownMenu.Root>\n\t</Sidebar.MenuItem>\n</Sidebar.Menu>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/sidebar-08/+page.svelte",
    "content": "<script lang=\"ts\">\n\timport AppSidebar from \"./components/app-sidebar.svelte\";\n\timport * as Breadcrumb from \"$lib/registry/ui/breadcrumb/index.js\";\n\timport { Separator } from \"$lib/registry/ui/separator/index.js\";\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n</script>\n\n<Sidebar.Provider>\n\t<AppSidebar />\n\t<Sidebar.Inset>\n\t\t<header class=\"flex h-16 shrink-0 items-center gap-2\">\n\t\t\t<div class=\"flex items-center gap-2 px-4\">\n\t\t\t\t<Sidebar.Trigger class=\"-ms-1\" />\n\t\t\t\t<Separator orientation=\"vertical\" class=\"me-2 data-[orientation=vertical]:h-4\" />\n\t\t\t\t<Breadcrumb.Root>\n\t\t\t\t\t<Breadcrumb.List>\n\t\t\t\t\t\t<Breadcrumb.Item class=\"hidden md:block\">\n\t\t\t\t\t\t\t<Breadcrumb.Link href=\"##\">Build Your Application</Breadcrumb.Link>\n\t\t\t\t\t\t</Breadcrumb.Item>\n\t\t\t\t\t\t<Breadcrumb.Separator class=\"hidden md:block\" />\n\t\t\t\t\t\t<Breadcrumb.Item>\n\t\t\t\t\t\t\t<Breadcrumb.Page>Data Fetching</Breadcrumb.Page>\n\t\t\t\t\t\t</Breadcrumb.Item>\n\t\t\t\t\t</Breadcrumb.List>\n\t\t\t\t</Breadcrumb.Root>\n\t\t\t</div>\n\t\t</header>\n\t\t<div class=\"flex flex-1 flex-col gap-4 p-4 pt-0\">\n\t\t\t<div class=\"grid auto-rows-min gap-4 md:grid-cols-3\">\n\t\t\t\t<div class=\"bg-muted/50 aspect-video rounded-xl\"></div>\n\t\t\t\t<div class=\"bg-muted/50 aspect-video rounded-xl\"></div>\n\t\t\t\t<div class=\"bg-muted/50 aspect-video rounded-xl\"></div>\n\t\t\t</div>\n\t\t\t<div class=\"bg-muted/50 min-h-screen flex-1 rounded-xl md:min-h-min\"></div>\n\t\t</div>\n\t</Sidebar.Inset>\n</Sidebar.Provider>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/sidebar-08/components/app-sidebar.svelte",
    "content": "<script lang=\"ts\" module>\n\timport BookOpenIcon from \"@lucide/svelte/icons/book-open\";\n\timport BotIcon from \"@lucide/svelte/icons/bot\";\n\timport ChartPieIcon from \"@lucide/svelte/icons/chart-pie\";\n\timport FrameIcon from \"@lucide/svelte/icons/frame\";\n\timport LifeBuoyIcon from \"@lucide/svelte/icons/life-buoy\";\n\timport MapIcon from \"@lucide/svelte/icons/map\";\n\timport SendIcon from \"@lucide/svelte/icons/send\";\n\timport Settings2Icon from \"@lucide/svelte/icons/settings-2\";\n\timport SquareTerminalIcon from \"@lucide/svelte/icons/square-terminal\";\n\n\tconst data = {\n\t\tuser: {\n\t\t\tname: \"shadcn\",\n\t\t\temail: \"m@example.com\",\n\t\t\tavatar: \"/avatars/shadcn.jpg\",\n\t\t},\n\t\tnavMain: [\n\t\t\t{\n\t\t\t\ttitle: \"Playground\",\n\t\t\t\turl: \"#\",\n\t\t\t\ticon: SquareTerminalIcon,\n\t\t\t\tisActive: true,\n\t\t\t\titems: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"History\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Starred\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Settings\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"Models\",\n\t\t\t\turl: \"#\",\n\t\t\t\ticon: BotIcon,\n\t\t\t\titems: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Genesis\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Explorer\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Quantum\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"Documentation\",\n\t\t\t\turl: \"#\",\n\t\t\t\ticon: BookOpenIcon,\n\t\t\t\titems: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Introduction\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Get Started\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Tutorials\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Changelog\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"Settings\",\n\t\t\t\turl: \"#\",\n\t\t\t\ticon: Settings2Icon,\n\t\t\t\titems: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"General\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Team\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Billing\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Limits\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t\tnavSecondary: [\n\t\t\t{\n\t\t\t\ttitle: \"Support\",\n\t\t\t\turl: \"#\",\n\t\t\t\ticon: LifeBuoyIcon,\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"Feedback\",\n\t\t\t\turl: \"#\",\n\t\t\t\ticon: SendIcon,\n\t\t\t},\n\t\t],\n\t\tprojects: [\n\t\t\t{\n\t\t\t\tname: \"Design Engineering\",\n\t\t\t\turl: \"#\",\n\t\t\t\ticon: FrameIcon,\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"Sales & Marketing\",\n\t\t\t\turl: \"#\",\n\t\t\t\ticon: ChartPieIcon,\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"Travel\",\n\t\t\t\turl: \"#\",\n\t\t\t\ticon: MapIcon,\n\t\t\t},\n\t\t],\n\t};\n</script>\n\n<script lang=\"ts\">\n\timport NavMain from \"./nav-main.svelte\";\n\timport NavProjects from \"./nav-projects.svelte\";\n\timport NavSecondary from \"./nav-secondary.svelte\";\n\timport NavUser from \"./nav-user.svelte\";\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\timport CommandIcon from \"@lucide/svelte/icons/command\";\n\timport type { ComponentProps } from \"svelte\";\n\n\tlet { ref = $bindable(null), ...restProps }: ComponentProps<typeof Sidebar.Root> = $props();\n</script>\n\n<Sidebar.Root bind:ref variant=\"inset\" {...restProps}>\n\t<Sidebar.Header>\n\t\t<Sidebar.Menu>\n\t\t\t<Sidebar.MenuItem>\n\t\t\t\t<Sidebar.MenuButton size=\"lg\">\n\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t<a href=\"##\" {...props}>\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclass=\"bg-sidebar-primary text-sidebar-primary-foreground flex aspect-square size-8 items-center justify-center rounded-lg\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<CommandIcon class=\"size-4\" />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"grid flex-1 text-start text-sm leading-tight\">\n\t\t\t\t\t\t\t\t<span class=\"truncate font-medium\">Acme Inc</span>\n\t\t\t\t\t\t\t\t<span class=\"truncate text-xs\">Enterprise</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</a>\n\t\t\t\t\t{/snippet}\n\t\t\t\t</Sidebar.MenuButton>\n\t\t\t</Sidebar.MenuItem>\n\t\t</Sidebar.Menu>\n\t</Sidebar.Header>\n\t<Sidebar.Content>\n\t\t<NavMain items={data.navMain} />\n\t\t<NavProjects projects={data.projects} />\n\t\t<NavSecondary items={data.navSecondary} class=\"mt-auto\" />\n\t</Sidebar.Content>\n\t<Sidebar.Footer>\n\t\t<NavUser user={data.user} />\n\t</Sidebar.Footer>\n</Sidebar.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/sidebar-08/components/nav-main.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Collapsible from \"$lib/registry/ui/collapsible/index.js\";\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\timport ChevronRightIcon from \"@lucide/svelte/icons/chevron-right\";\n\n\tlet {\n\t\titems,\n\t}: {\n\t\titems: {\n\t\t\ttitle: string;\n\t\t\turl: string;\n\t\t\t// This should be `Component` after @lucide/svelte updates types\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\ticon: any;\n\t\t\tisActive?: boolean;\n\t\t\titems?: {\n\t\t\t\ttitle: string;\n\t\t\t\turl: string;\n\t\t\t}[];\n\t\t}[];\n\t} = $props();\n</script>\n\n<Sidebar.Group>\n\t<Sidebar.GroupLabel>Platform</Sidebar.GroupLabel>\n\t<Sidebar.Menu>\n\t\t{#each items as mainItem (mainItem.title)}\n\t\t\t<Collapsible.Root open={mainItem.isActive}>\n\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t<Sidebar.MenuItem {...props}>\n\t\t\t\t\t\t<Sidebar.MenuButton tooltipContent={mainItem.title}>\n\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t<a href={mainItem.url} {...props}>\n\t\t\t\t\t\t\t\t\t<mainItem.icon />\n\t\t\t\t\t\t\t\t\t<span>{mainItem.title}</span>\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t</Sidebar.MenuButton>\n\t\t\t\t\t\t{#if mainItem.items?.length}\n\t\t\t\t\t\t\t<Collapsible.Trigger>\n\t\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t\t<Sidebar.MenuAction\n\t\t\t\t\t\t\t\t\t\t{...props}\n\t\t\t\t\t\t\t\t\t\tclass=\"data-[state=open]:rotate-90\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<ChevronRightIcon />\n\t\t\t\t\t\t\t\t\t\t<span class=\"sr-only\">Toggle</span>\n\t\t\t\t\t\t\t\t\t</Sidebar.MenuAction>\n\t\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t\t</Collapsible.Trigger>\n\t\t\t\t\t\t\t<Collapsible.Content>\n\t\t\t\t\t\t\t\t<Sidebar.MenuSub>\n\t\t\t\t\t\t\t\t\t{#each mainItem.items as subItem (subItem.title)}\n\t\t\t\t\t\t\t\t\t\t<Sidebar.MenuSubItem>\n\t\t\t\t\t\t\t\t\t\t\t<Sidebar.MenuSubButton href={subItem.url}>\n\t\t\t\t\t\t\t\t\t\t\t\t<span>{subItem.title}</span>\n\t\t\t\t\t\t\t\t\t\t\t</Sidebar.MenuSubButton>\n\t\t\t\t\t\t\t\t\t\t</Sidebar.MenuSubItem>\n\t\t\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t\t</Sidebar.MenuSub>\n\t\t\t\t\t\t\t</Collapsible.Content>\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t</Sidebar.MenuItem>\n\t\t\t\t{/snippet}\n\t\t\t</Collapsible.Root>\n\t\t{/each}\n\t</Sidebar.Menu>\n</Sidebar.Group>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/sidebar-08/components/nav-projects.svelte",
    "content": "<script lang=\"ts\">\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\timport { useSidebar } from \"$lib/registry/ui/sidebar/index.js\";\n\timport EllipsisIcon from \"@lucide/svelte/icons/ellipsis\";\n\timport FolderIcon from \"@lucide/svelte/icons/folder\";\n\timport ShareIcon from \"@lucide/svelte/icons/share\";\n\timport Trash2Icon from \"@lucide/svelte/icons/trash-2\";\n\n\tlet {\n\t\tprojects,\n\t}: {\n\t\tprojects: {\n\t\t\tname: string;\n\t\t\turl: string;\n\t\t\t// This should be `Component` after @lucide/svelte updates types\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\ticon: any;\n\t\t}[];\n\t} = $props();\n\n\tconst sidebar = useSidebar();\n</script>\n\n<Sidebar.Group class=\"group-data-[collapsible=icon]:hidden\">\n\t<Sidebar.GroupLabel>Projects</Sidebar.GroupLabel>\n\t<Sidebar.Menu>\n\t\t{#each projects as item (item.name)}\n\t\t\t<Sidebar.MenuItem>\n\t\t\t\t<Sidebar.MenuButton>\n\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t<a href={item.url} {...props}>\n\t\t\t\t\t\t\t<item.icon />\n\t\t\t\t\t\t\t<span>{item.name}</span>\n\t\t\t\t\t\t</a>\n\t\t\t\t\t{/snippet}\n\t\t\t\t</Sidebar.MenuButton>\n\t\t\t\t<DropdownMenu.Root>\n\t\t\t\t\t<DropdownMenu.Trigger>\n\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t<Sidebar.MenuAction showOnHover {...props}>\n\t\t\t\t\t\t\t\t<EllipsisIcon />\n\t\t\t\t\t\t\t\t<span class=\"sr-only\">More</span>\n\t\t\t\t\t\t\t</Sidebar.MenuAction>\n\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t</DropdownMenu.Trigger>\n\t\t\t\t\t<DropdownMenu.Content\n\t\t\t\t\t\tclass=\"w-48\"\n\t\t\t\t\t\tside={sidebar.isMobile ? \"bottom\" : \"right\"}\n\t\t\t\t\t\talign={sidebar.isMobile ? \"end\" : \"start\"}\n\t\t\t\t\t>\n\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t<FolderIcon class=\"text-muted-foreground\" />\n\t\t\t\t\t\t\t<span>View Project</span>\n\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t<ShareIcon class=\"text-muted-foreground\" />\n\t\t\t\t\t\t\t<span>Share Project</span>\n\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t<Trash2Icon class=\"text-muted-foreground\" />\n\t\t\t\t\t\t\t<span>Delete Project</span>\n\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t</DropdownMenu.Content>\n\t\t\t\t</DropdownMenu.Root>\n\t\t\t</Sidebar.MenuItem>\n\t\t{/each}\n\t\t<Sidebar.MenuItem>\n\t\t\t<Sidebar.MenuButton>\n\t\t\t\t<EllipsisIcon />\n\t\t\t\t<span>More</span>\n\t\t\t</Sidebar.MenuButton>\n\t\t</Sidebar.MenuItem>\n\t</Sidebar.Menu>\n</Sidebar.Group>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/sidebar-08/components/nav-secondary.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\timport type { Component, ComponentProps } from \"svelte\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\titems,\n\t\t...restProps\n\t}: {\n\t\titems: {\n\t\t\ttitle: string;\n\t\t\turl: string;\n\t\t\ticon: Component;\n\t\t}[];\n\t} & ComponentProps<typeof Sidebar.Group> = $props();\n</script>\n\n<Sidebar.Group bind:ref {...restProps}>\n\t<Sidebar.GroupContent>\n\t\t<Sidebar.Menu>\n\t\t\t{#each items as item (item.title)}\n\t\t\t\t<Sidebar.MenuItem>\n\t\t\t\t\t<Sidebar.MenuButton size=\"sm\">\n\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t<a href={item.url} {...props}>\n\t\t\t\t\t\t\t\t<item.icon />\n\t\t\t\t\t\t\t\t<span>{item.title}</span>\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t</Sidebar.MenuButton>\n\t\t\t\t</Sidebar.MenuItem>\n\t\t\t{/each}\n\t\t</Sidebar.Menu>\n\t</Sidebar.GroupContent>\n</Sidebar.Group>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/sidebar-08/components/nav-user.svelte",
    "content": "<script lang=\"ts\">\n\timport BadgeCheckIcon from \"@lucide/svelte/icons/badge-check\";\n\timport BellIcon from \"@lucide/svelte/icons/bell\";\n\timport ChevronsUpDownIcon from \"@lucide/svelte/icons/chevrons-up-down\";\n\timport CreditCardIcon from \"@lucide/svelte/icons/credit-card\";\n\timport LogOutIcon from \"@lucide/svelte/icons/log-out\";\n\timport SparklesIcon from \"@lucide/svelte/icons/sparkles\";\n\n\timport * as Avatar from \"$lib/registry/ui/avatar/index.js\";\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\timport { useSidebar } from \"$lib/registry/ui/sidebar/index.js\";\n\n\tlet {\n\t\tuser,\n\t}: {\n\t\tuser: {\n\t\t\tname: string;\n\t\t\temail: string;\n\t\t\tavatar: string;\n\t\t};\n\t} = $props();\n\n\tconst sidebar = useSidebar();\n</script>\n\n<Sidebar.Menu>\n\t<Sidebar.MenuItem>\n\t\t<DropdownMenu.Root>\n\t\t\t<DropdownMenu.Trigger>\n\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t<Sidebar.MenuButton\n\t\t\t\t\t\t{...props}\n\t\t\t\t\t\tsize=\"lg\"\n\t\t\t\t\t\tclass=\"data-[state=open]:bg-sidebar-accent data-[state=open]:text-sidebar-accent-foreground\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<Avatar.Root class=\"size-8 rounded-lg\">\n\t\t\t\t\t\t\t<Avatar.Image src={user.avatar} alt={user.name} />\n\t\t\t\t\t\t\t<Avatar.Fallback class=\"rounded-lg\">CN</Avatar.Fallback>\n\t\t\t\t\t\t</Avatar.Root>\n\t\t\t\t\t\t<div class=\"grid flex-1 text-start text-sm leading-tight\">\n\t\t\t\t\t\t\t<span class=\"truncate font-medium\">{user.name}</span>\n\t\t\t\t\t\t\t<span class=\"truncate text-xs\">{user.email}</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<ChevronsUpDownIcon class=\"ms-auto size-4\" />\n\t\t\t\t\t</Sidebar.MenuButton>\n\t\t\t\t{/snippet}\n\t\t\t</DropdownMenu.Trigger>\n\t\t\t<DropdownMenu.Content\n\t\t\t\tclass=\"w-(--bits-dropdown-menu-anchor-width) min-w-56 rounded-lg\"\n\t\t\t\tside={sidebar.isMobile ? \"bottom\" : \"right\"}\n\t\t\t\talign=\"end\"\n\t\t\t\tsideOffset={4}\n\t\t\t>\n\t\t\t\t<DropdownMenu.Label class=\"p-0 font-normal\">\n\t\t\t\t\t<div class=\"flex items-center gap-2 px-1 py-1.5 text-start text-sm\">\n\t\t\t\t\t\t<Avatar.Root class=\"size-8 rounded-lg\">\n\t\t\t\t\t\t\t<Avatar.Image src={user.avatar} alt={user.name} />\n\t\t\t\t\t\t\t<Avatar.Fallback class=\"rounded-lg\">CN</Avatar.Fallback>\n\t\t\t\t\t\t</Avatar.Root>\n\t\t\t\t\t\t<div class=\"grid flex-1 text-start text-sm leading-tight\">\n\t\t\t\t\t\t\t<span class=\"truncate font-medium\">{user.name}</span>\n\t\t\t\t\t\t\t<span class=\"truncate text-xs\">{user.email}</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</DropdownMenu.Label>\n\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t<DropdownMenu.Group>\n\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t<SparklesIcon />\n\t\t\t\t\t\tUpgrade to Pro\n\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t</DropdownMenu.Group>\n\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t<DropdownMenu.Group>\n\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t<BadgeCheckIcon />\n\t\t\t\t\t\tAccount\n\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t<CreditCardIcon />\n\t\t\t\t\t\tBilling\n\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t<BellIcon />\n\t\t\t\t\t\tNotifications\n\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t</DropdownMenu.Group>\n\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t<LogOutIcon />\n\t\t\t\t\tLog out\n\t\t\t\t</DropdownMenu.Item>\n\t\t\t</DropdownMenu.Content>\n\t\t</DropdownMenu.Root>\n\t</Sidebar.MenuItem>\n</Sidebar.Menu>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/sidebar-09/+page.svelte",
    "content": "<script lang=\"ts\">\n\timport AppSidebar from \"./components/app-sidebar.svelte\";\n\timport * as Breadcrumb from \"$lib/registry/ui/breadcrumb/index.js\";\n\timport { Separator } from \"$lib/registry/ui/separator/index.js\";\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n</script>\n\n<Sidebar.Provider style=\"--sidebar-width: 350px;\">\n\t<AppSidebar />\n\t<Sidebar.Inset>\n\t\t<header class=\"bg-background sticky top-0 flex shrink-0 items-center gap-2 border-b p-4\">\n\t\t\t<Sidebar.Trigger class=\"-ms-1\" />\n\t\t\t<Separator orientation=\"vertical\" class=\"me-2 data-[orientation=vertical]:h-4\" />\n\t\t\t<Breadcrumb.Root>\n\t\t\t\t<Breadcrumb.List>\n\t\t\t\t\t<Breadcrumb.Item class=\"hidden md:block\">\n\t\t\t\t\t\t<Breadcrumb.Link href=\"##\">All Inboxes</Breadcrumb.Link>\n\t\t\t\t\t</Breadcrumb.Item>\n\t\t\t\t\t<Breadcrumb.Separator class=\"hidden md:block\" />\n\t\t\t\t\t<Breadcrumb.Item>\n\t\t\t\t\t\t<Breadcrumb.Page>Inbox</Breadcrumb.Page>\n\t\t\t\t\t</Breadcrumb.Item>\n\t\t\t\t</Breadcrumb.List>\n\t\t\t</Breadcrumb.Root>\n\t\t</header>\n\t\t<div class=\"flex flex-1 flex-col gap-4 p-4\">\n\t\t\t{#each Array.from({ length: 24 }) as _, index (index)}\n\t\t\t\t<div class=\"bg-muted/50 aspect-video h-12 w-full rounded-lg\"></div>\n\t\t\t{/each}\n\t\t</div>\n\t</Sidebar.Inset>\n</Sidebar.Provider>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/sidebar-09/components/app-sidebar.svelte",
    "content": "<script lang=\"ts\" module>\n\timport ArchiveXIcon from \"@lucide/svelte/icons/archive-x\";\n\timport FileIcon from \"@lucide/svelte/icons/file\";\n\timport InboxIcon from \"@lucide/svelte/icons/inbox\";\n\timport SendIcon from \"@lucide/svelte/icons/send\";\n\timport Trash2Icon from \"@lucide/svelte/icons/trash-2\";\n\n\t// This is sample data\n\tconst data = {\n\t\tuser: {\n\t\t\tname: \"shadcn\",\n\t\t\temail: \"m@example.com\",\n\t\t\tavatar: \"/avatars/shadcn.jpg\",\n\t\t},\n\t\tnavMain: [\n\t\t\t{\n\t\t\t\ttitle: \"Inbox\",\n\t\t\t\turl: \"#\",\n\t\t\t\ticon: InboxIcon,\n\t\t\t\tisActive: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"Drafts\",\n\t\t\t\turl: \"#\",\n\t\t\t\ticon: FileIcon,\n\t\t\t\tisActive: false,\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"Sent\",\n\t\t\t\turl: \"#\",\n\t\t\t\ticon: SendIcon,\n\t\t\t\tisActive: false,\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"Junk\",\n\t\t\t\turl: \"#\",\n\t\t\t\ticon: ArchiveXIcon,\n\t\t\t\tisActive: false,\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"Trash\",\n\t\t\t\turl: \"#\",\n\t\t\t\ticon: Trash2Icon,\n\t\t\t\tisActive: false,\n\t\t\t},\n\t\t],\n\t\tmails: [\n\t\t\t{\n\t\t\t\tname: \"William Smith\",\n\t\t\t\temail: \"williamsmith@example.com\",\n\t\t\t\tsubject: \"Meeting Tomorrow\",\n\t\t\t\tdate: \"09:34 AM\",\n\t\t\t\tteaser: \"Hi team, just a reminder about our meeting tomorrow at 10 AM.\\nPlease come prepared with your project updates.\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"Alice Smith\",\n\t\t\t\temail: \"alicesmith@example.com\",\n\t\t\t\tsubject: \"Re: Project Update\",\n\t\t\t\tdate: \"Yesterday\",\n\t\t\t\tteaser: \"Thanks for the update. The progress looks great so far.\\nLet's schedule a call to discuss the next steps.\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"Bob Johnson\",\n\t\t\t\temail: \"bobjohnson@example.com\",\n\t\t\t\tsubject: \"Weekend Plans\",\n\t\t\t\tdate: \"2 days ago\",\n\t\t\t\tteaser: \"Hey everyone! I'm thinking of organizing a team outing this weekend.\\nWould you be interested in a hiking trip or a beach day?\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"Emily Davis\",\n\t\t\t\temail: \"emilydavis@example.com\",\n\t\t\t\tsubject: \"Re: Question about Budget\",\n\t\t\t\tdate: \"2 days ago\",\n\t\t\t\tteaser: \"I've reviewed the budget numbers you sent over.\\nCan we set up a quick call to discuss some potential adjustments?\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"Michael Wilson\",\n\t\t\t\temail: \"michaelwilson@example.com\",\n\t\t\t\tsubject: \"Important Announcement\",\n\t\t\t\tdate: \"1 week ago\",\n\t\t\t\tteaser: \"Please join us for an all-hands meeting this Friday at 3 PM.\\nWe have some exciting news to share about the company's future.\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"Sarah Brown\",\n\t\t\t\temail: \"sarahbrown@example.com\",\n\t\t\t\tsubject: \"Re: Feedback on Proposal\",\n\t\t\t\tdate: \"1 week ago\",\n\t\t\t\tteaser: \"Thank you for sending over the proposal. I've reviewed it and have some thoughts.\\nCould we schedule a meeting to discuss my feedback in detail?\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"David Lee\",\n\t\t\t\temail: \"davidlee@example.com\",\n\t\t\t\tsubject: \"New Project Idea\",\n\t\t\t\tdate: \"1 week ago\",\n\t\t\t\tteaser: \"I've been brainstorming and came up with an interesting project concept.\\nDo you have time this week to discuss its potential impact and feasibility?\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"Olivia Wilson\",\n\t\t\t\temail: \"oliviawilson@example.com\",\n\t\t\t\tsubject: \"Vacation Plans\",\n\t\t\t\tdate: \"1 week ago\",\n\t\t\t\tteaser: \"Just a heads up that I'll be taking a two-week vacation next month.\\nI'll make sure all my projects are up to date before I leave.\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"James Martin\",\n\t\t\t\temail: \"jamesmartin@example.com\",\n\t\t\t\tsubject: \"Re: Conference Registration\",\n\t\t\t\tdate: \"1 week ago\",\n\t\t\t\tteaser: \"I've completed the registration for the upcoming tech conference.\\nLet me know if you need any additional information from my end.\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"Sophia White\",\n\t\t\t\temail: \"sophiawhite@example.com\",\n\t\t\t\tsubject: \"Team Dinner\",\n\t\t\t\tdate: \"1 week ago\",\n\t\t\t\tteaser: \"To celebrate our recent project success, I'd like to organize a team dinner.\\nAre you available next Friday evening? Please let me know your preferences.\",\n\t\t\t},\n\t\t],\n\t};\n</script>\n\n<script lang=\"ts\">\n\timport NavUser from \"./nav-user.svelte\";\n\timport { Label } from \"$lib/registry/ui/label/index.js\";\n\timport { useSidebar } from \"$lib/registry/ui/sidebar/context.svelte.js\";\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\timport { Switch } from \"$lib/registry/ui/switch/index.js\";\n\timport CommandIcon from \"@lucide/svelte/icons/command\";\n\timport type { ComponentProps } from \"svelte\";\n\n\tlet { ref = $bindable(null), ...restProps }: ComponentProps<typeof Sidebar.Root> = $props();\n\n\tlet activeItem = $state(data.navMain[0]);\n\tlet mails = $state(data.mails);\n\tconst sidebar = useSidebar();\n</script>\n\n<Sidebar.Root\n\tbind:ref\n\tcollapsible=\"icon\"\n\tclass=\"overflow-hidden [&>[data-sidebar=sidebar]]:flex-row\"\n\t{...restProps}\n>\n\t<!-- This is the first sidebar -->\n\t<!-- We disable collapsible and adjust width to icon. -->\n\t<!-- This will make the sidebar appear as icons. -->\n\t<Sidebar.Root collapsible=\"none\" class=\"!w-[calc(var(--sidebar-width-icon)_+_1px)] border-e\">\n\t\t<Sidebar.Header>\n\t\t\t<Sidebar.Menu>\n\t\t\t\t<Sidebar.MenuItem>\n\t\t\t\t\t<Sidebar.MenuButton size=\"lg\" class=\"md:h-8 md:p-0\">\n\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t<a href=\"##\" {...props}>\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclass=\"bg-sidebar-primary text-sidebar-primary-foreground flex aspect-square size-8 items-center justify-center rounded-lg\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<CommandIcon class=\"size-4\" />\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"grid flex-1 text-start text-sm leading-tight\">\n\t\t\t\t\t\t\t\t\t<span class=\"truncate font-medium\">Acme Inc</span>\n\t\t\t\t\t\t\t\t\t<span class=\"truncate text-xs\">Enterprise</span>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t</Sidebar.MenuButton>\n\t\t\t\t</Sidebar.MenuItem>\n\t\t\t</Sidebar.Menu>\n\t\t</Sidebar.Header>\n\t\t<Sidebar.Content>\n\t\t\t<Sidebar.Group>\n\t\t\t\t<Sidebar.GroupContent class=\"px-1.5 md:px-0\">\n\t\t\t\t\t<Sidebar.Menu>\n\t\t\t\t\t\t{#each data.navMain as item (item.title)}\n\t\t\t\t\t\t\t<Sidebar.MenuItem>\n\t\t\t\t\t\t\t\t<Sidebar.MenuButton\n\t\t\t\t\t\t\t\t\ttooltipContentProps={{\n\t\t\t\t\t\t\t\t\t\thidden: false,\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\tonclick={() => {\n\t\t\t\t\t\t\t\t\t\tactiveItem = item;\n\t\t\t\t\t\t\t\t\t\tconst mail = data.mails.sort(() => Math.random() - 0.5);\n\t\t\t\t\t\t\t\t\t\tmails = mail.slice(\n\t\t\t\t\t\t\t\t\t\t\t0,\n\t\t\t\t\t\t\t\t\t\t\tMath.max(5, Math.floor(Math.random() * 10) + 1)\n\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\tsidebar.setOpen(true);\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\tisActive={activeItem.title === item.title}\n\t\t\t\t\t\t\t\t\tclass=\"px-2.5 md:px-2\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{#snippet tooltipContent()}\n\t\t\t\t\t\t\t\t\t\t{item.title}\n\t\t\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t\t\t\t<item.icon />\n\t\t\t\t\t\t\t\t\t<span>{item.title}</span>\n\t\t\t\t\t\t\t\t</Sidebar.MenuButton>\n\t\t\t\t\t\t\t</Sidebar.MenuItem>\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</Sidebar.Menu>\n\t\t\t\t</Sidebar.GroupContent>\n\t\t\t</Sidebar.Group>\n\t\t</Sidebar.Content>\n\t\t<Sidebar.Footer>\n\t\t\t<NavUser user={data.user} />\n\t\t</Sidebar.Footer>\n\t</Sidebar.Root>\n\n\t<!-- This is the second sidebar -->\n\t<!-- We disable collapsible and let it fill remaining space -->\n\t<Sidebar.Root collapsible=\"none\" class=\"hidden flex-1 md:flex\">\n\t\t<Sidebar.Header class=\"gap-3.5 border-b p-4\">\n\t\t\t<div class=\"flex w-full items-center justify-between\">\n\t\t\t\t<div class=\"text-foreground text-base font-medium\">\n\t\t\t\t\t{activeItem.title}\n\t\t\t\t</div>\n\t\t\t\t<Label class=\"flex items-center gap-2 text-sm\">\n\t\t\t\t\t<span>Unreads</span>\n\t\t\t\t\t<Switch class=\"shadow-none\" />\n\t\t\t\t</Label>\n\t\t\t</div>\n\t\t\t<Sidebar.Input placeholder=\"Type to search...\" />\n\t\t</Sidebar.Header>\n\t\t<Sidebar.Content>\n\t\t\t<Sidebar.Group class=\"px-0\">\n\t\t\t\t<Sidebar.GroupContent>\n\t\t\t\t\t{#each mails as mail (mail.email)}\n\t\t\t\t\t\t<a\n\t\t\t\t\t\t\thref=\"##\"\n\t\t\t\t\t\t\tclass=\"hover:bg-sidebar-accent hover:text-sidebar-accent-foreground flex flex-col items-start gap-2 border-b p-4 text-sm leading-tight whitespace-nowrap last:border-b-0\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div class=\"flex w-full items-center gap-2\">\n\t\t\t\t\t\t\t\t<span>{mail.name}</span>\n\t\t\t\t\t\t\t\t<span class=\"ms-auto text-xs\">{mail.date}</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<span class=\"font-medium\">{mail.subject}</span>\n\t\t\t\t\t\t\t<span class=\"line-clamp-2 w-[260px] text-xs whitespace-break-spaces\">\n\t\t\t\t\t\t\t\t{mail.teaser}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</a>\n\t\t\t\t\t{/each}\n\t\t\t\t</Sidebar.GroupContent>\n\t\t\t</Sidebar.Group>\n\t\t</Sidebar.Content>\n\t</Sidebar.Root>\n</Sidebar.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/sidebar-09/components/nav-user.svelte",
    "content": "<script lang=\"ts\">\n\timport BadgeCheckIcon from \"@lucide/svelte/icons/badge-check\";\n\timport BellIcon from \"@lucide/svelte/icons/bell\";\n\timport ChevronsUpDownIcon from \"@lucide/svelte/icons/chevrons-up-down\";\n\timport CreditCardIcon from \"@lucide/svelte/icons/credit-card\";\n\timport LogOutIcon from \"@lucide/svelte/icons/log-out\";\n\timport SparklesIcon from \"@lucide/svelte/icons/sparkles\";\n\n\timport * as Avatar from \"$lib/registry/ui/avatar/index.js\";\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\timport { useSidebar } from \"$lib/registry/ui/sidebar/index.js\";\n\n\tlet { user }: { user: { name: string; email: string; avatar: string } } = $props();\n\n\tconst sidebar = useSidebar();\n</script>\n\n<Sidebar.Menu>\n\t<Sidebar.MenuItem>\n\t\t<DropdownMenu.Root>\n\t\t\t<DropdownMenu.Trigger>\n\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t<Sidebar.MenuButton\n\t\t\t\t\t\t{...props}\n\t\t\t\t\t\tsize=\"lg\"\n\t\t\t\t\t\tclass=\"data-[state=open]:bg-sidebar-accent data-[state=open]:text-sidebar-accent-foreground md:h-8 md:p-0\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<Avatar.Root class=\"size-8 rounded-lg\">\n\t\t\t\t\t\t\t<Avatar.Image src={user.avatar} alt={user.name} />\n\t\t\t\t\t\t\t<Avatar.Fallback class=\"rounded-lg\">CN</Avatar.Fallback>\n\t\t\t\t\t\t</Avatar.Root>\n\t\t\t\t\t\t<div class=\"grid flex-1 text-start text-sm leading-tight\">\n\t\t\t\t\t\t\t<span class=\"truncate font-medium\">{user.name}</span>\n\t\t\t\t\t\t\t<span class=\"truncate text-xs\">{user.email}</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<ChevronsUpDownIcon class=\"ms-auto size-4\" />\n\t\t\t\t\t</Sidebar.MenuButton>\n\t\t\t\t{/snippet}\n\t\t\t</DropdownMenu.Trigger>\n\t\t\t<DropdownMenu.Content\n\t\t\t\tclass=\"w-(--bits-dropdown-menu-anchor-width) min-w-56 rounded-lg\"\n\t\t\t\tside={sidebar.isMobile ? \"bottom\" : \"right\"}\n\t\t\t\talign=\"end\"\n\t\t\t\tsideOffset={4}\n\t\t\t>\n\t\t\t\t<DropdownMenu.Label class=\"p-0 font-normal\">\n\t\t\t\t\t<div class=\"flex items-center gap-2 px-1 py-1.5 text-start text-sm\">\n\t\t\t\t\t\t<Avatar.Root class=\"size-8 rounded-lg\">\n\t\t\t\t\t\t\t<Avatar.Image src={user.avatar} alt={user.name} />\n\t\t\t\t\t\t\t<Avatar.Fallback class=\"rounded-lg\">CN</Avatar.Fallback>\n\t\t\t\t\t\t</Avatar.Root>\n\t\t\t\t\t\t<div class=\"grid flex-1 text-start text-sm leading-tight\">\n\t\t\t\t\t\t\t<span class=\"truncate font-medium\">{user.name}</span>\n\t\t\t\t\t\t\t<span class=\"truncate text-xs\">{user.email}</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</DropdownMenu.Label>\n\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t<DropdownMenu.Group>\n\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t<SparklesIcon />\n\t\t\t\t\t\tUpgrade to Pro\n\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t</DropdownMenu.Group>\n\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t<DropdownMenu.Group>\n\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t<BadgeCheckIcon />\n\t\t\t\t\t\tAccount\n\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t<CreditCardIcon />\n\t\t\t\t\t\tBilling\n\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t<BellIcon />\n\t\t\t\t\t\tNotifications\n\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t</DropdownMenu.Group>\n\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t<LogOutIcon />\n\t\t\t\t\tLog out\n\t\t\t\t</DropdownMenu.Item>\n\t\t\t</DropdownMenu.Content>\n\t\t</DropdownMenu.Root>\n\t</Sidebar.MenuItem>\n</Sidebar.Menu>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/sidebar-10/+page.svelte",
    "content": "<script lang=\"ts\">\n\timport AppSidebar from \"./components/app-sidebar.svelte\";\n\timport NavActions from \"./components/nav-actions.svelte\";\n\timport * as Breadcrumb from \"$lib/registry/ui/breadcrumb/index.js\";\n\timport { Separator } from \"$lib/registry/ui/separator/index.js\";\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n</script>\n\n<Sidebar.Provider>\n\t<AppSidebar />\n\t<Sidebar.Inset>\n\t\t<header class=\"flex h-14 shrink-0 items-center gap-2\">\n\t\t\t<div class=\"flex flex-1 items-center gap-2 px-3\">\n\t\t\t\t<Sidebar.Trigger />\n\t\t\t\t<Separator orientation=\"vertical\" class=\"me-2 data-[orientation=vertical]:h-4\" />\n\t\t\t\t<Breadcrumb.Root>\n\t\t\t\t\t<Breadcrumb.List>\n\t\t\t\t\t\t<Breadcrumb.Item>\n\t\t\t\t\t\t\t<Breadcrumb.Page class=\"line-clamp-1\">\n\t\t\t\t\t\t\t\tProject Management & Task Tracking\n\t\t\t\t\t\t\t</Breadcrumb.Page>\n\t\t\t\t\t\t</Breadcrumb.Item>\n\t\t\t\t\t</Breadcrumb.List>\n\t\t\t\t</Breadcrumb.Root>\n\t\t\t</div>\n\t\t\t<div class=\"ms-auto px-3\">\n\t\t\t\t<NavActions />\n\t\t\t</div>\n\t\t</header>\n\t\t<div class=\"flex flex-1 flex-col gap-4 px-4 py-10\">\n\t\t\t<div class=\"bg-muted/50 mx-auto h-24 w-full max-w-3xl rounded-xl\"></div>\n\t\t\t<div class=\"bg-muted/50 mx-auto h-full w-full max-w-3xl rounded-xl\"></div>\n\t\t</div>\n\t</Sidebar.Inset>\n</Sidebar.Provider>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/sidebar-10/components/app-sidebar.svelte",
    "content": "<script lang=\"ts\" module>\n\timport AudioWaveformIcon from \"@lucide/svelte/icons/audio-waveform\";\n\timport BlocksIcon from \"@lucide/svelte/icons/blocks\";\n\timport CalendarIcon from \"@lucide/svelte/icons/calendar\";\n\timport CommandIcon from \"@lucide/svelte/icons/command\";\n\timport HouseIcon from \"@lucide/svelte/icons/house\";\n\timport InboxIcon from \"@lucide/svelte/icons/inbox\";\n\timport MessageCircleQuestionIcon from \"@lucide/svelte/icons/message-circle-question\";\n\timport SearchIcon from \"@lucide/svelte/icons/search\";\n\timport Settings2Icon from \"@lucide/svelte/icons/settings-2\";\n\timport SparklesIcon from \"@lucide/svelte/icons/sparkles\";\n\timport Trash2Icon from \"@lucide/svelte/icons/trash-2\";\n\t// This is sample data.\n\tconst data = {\n\t\tteams: [\n\t\t\t{\n\t\t\t\tname: \"Acme Inc\",\n\t\t\t\tlogo: CommandIcon,\n\t\t\t\tplan: \"Enterprise\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"Acme Corp.\",\n\t\t\t\tlogo: AudioWaveformIcon,\n\t\t\t\tplan: \"Startup\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"Evil Corp.\",\n\t\t\t\tlogo: CommandIcon,\n\t\t\t\tplan: \"Free\",\n\t\t\t},\n\t\t],\n\t\tnavMain: [\n\t\t\t{\n\t\t\t\ttitle: \"Search\",\n\t\t\t\turl: \"#\",\n\t\t\t\ticon: SearchIcon,\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"Ask AI\",\n\t\t\t\turl: \"#\",\n\t\t\t\ticon: SparklesIcon,\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"Home\",\n\t\t\t\turl: \"#\",\n\t\t\t\ticon: HouseIcon,\n\t\t\t\tisActive: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"Inbox\",\n\t\t\t\turl: \"#\",\n\t\t\t\ticon: InboxIcon,\n\t\t\t\tbadge: \"10\",\n\t\t\t},\n\t\t],\n\t\tnavSecondary: [\n\t\t\t{\n\t\t\t\ttitle: \"Calendar\",\n\t\t\t\turl: \"#\",\n\t\t\t\ticon: CalendarIcon,\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"Settings\",\n\t\t\t\turl: \"#\",\n\t\t\t\ticon: Settings2Icon,\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"Templates\",\n\t\t\t\turl: \"#\",\n\t\t\t\ticon: BlocksIcon,\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"Trash\",\n\t\t\t\turl: \"#\",\n\t\t\t\ticon: Trash2Icon,\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"Help\",\n\t\t\t\turl: \"#\",\n\t\t\t\ticon: MessageCircleQuestionIcon,\n\t\t\t},\n\t\t],\n\t\tfavorites: [\n\t\t\t{\n\t\t\t\tname: \"Project Management & Task Tracking\",\n\t\t\t\turl: \"#\",\n\t\t\t\temoji: \"📊\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"Family Recipe Collection & Meal Planning\",\n\t\t\t\turl: \"#\",\n\t\t\t\temoji: \"🍳\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"Fitness Tracker & Workout Routines\",\n\t\t\t\turl: \"#\",\n\t\t\t\temoji: \"💪\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"Book Notes & Reading List\",\n\t\t\t\turl: \"#\",\n\t\t\t\temoji: \"📚\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"Sustainable Gardening Tips & Plant Care\",\n\t\t\t\turl: \"#\",\n\t\t\t\temoji: \"🌱\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"Language Learning Progress & Resources\",\n\t\t\t\turl: \"#\",\n\t\t\t\temoji: \"🗣️\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"Home Renovation Ideas & Budget Tracker\",\n\t\t\t\turl: \"#\",\n\t\t\t\temoji: \"🏠\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"Personal Finance & Investment Portfolio\",\n\t\t\t\turl: \"#\",\n\t\t\t\temoji: \"💰\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"Movie & TV Show Watchlist with Reviews\",\n\t\t\t\turl: \"#\",\n\t\t\t\temoji: \"🎬\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"Daily Habit Tracker & Goal Setting\",\n\t\t\t\turl: \"#\",\n\t\t\t\temoji: \"✅\",\n\t\t\t},\n\t\t],\n\t\tworkspaces: [\n\t\t\t{\n\t\t\t\tname: \"Personal Life Management\",\n\t\t\t\temoji: \"🏠\",\n\t\t\t\tpages: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"Daily Journal & Reflection\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t\temoji: \"📔\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"Health & Wellness Tracker\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t\temoji: \"🍏\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"Personal Growth & Learning Goals\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t\temoji: \"🌟\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"Professional Development\",\n\t\t\t\temoji: \"💼\",\n\t\t\t\tpages: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"Career Objectives & Milestones\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t\temoji: \"🎯\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"Skill Acquisition & Training Log\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t\temoji: \"🧠\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"Networking Contacts & Events\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t\temoji: \"🤝\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"Creative Projects\",\n\t\t\t\temoji: \"🎨\",\n\t\t\t\tpages: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"Writing Ideas & Story Outlines\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t\temoji: \"✍️\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"Art & Design Portfolio\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t\temoji: \"🖼️\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"Music Composition & Practice Log\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t\temoji: \"🎵\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"Home Management\",\n\t\t\t\temoji: \"🏡\",\n\t\t\t\tpages: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"Household Budget & Expense Tracking\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t\temoji: \"💰\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"Home Maintenance Schedule & Tasks\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t\temoji: \"🔧\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"Family Calendar & Event Planning\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t\temoji: \"📅\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"Travel & Adventure\",\n\t\t\t\temoji: \"🧳\",\n\t\t\t\tpages: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"Trip Planning & Itineraries\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t\temoji: \"🗺️\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"Travel Bucket List & Inspiration\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t\temoji: \"🌎\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"Travel Journal & Photo Gallery\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t\temoji: \"📸\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t};\n</script>\n\n<script lang=\"ts\">\n\timport NavFavorites from \"./nav-favorites.svelte\";\n\timport NavMain from \"./nav-main.svelte\";\n\timport NavSecondary from \"./nav-secondary.svelte\";\n\timport NavWorkspaces from \"./nav-workspaces.svelte\";\n\timport TeamSwitcher from \"./team-switcher.svelte\";\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\timport type { ComponentProps } from \"svelte\";\n\n\tlet { ref = $bindable(null), ...restProps }: ComponentProps<typeof Sidebar.Root> = $props();\n</script>\n\n<Sidebar.Root bind:ref class=\"border-e-0\" {...restProps}>\n\t<Sidebar.Header>\n\t\t<TeamSwitcher teams={data.teams} />\n\t\t<NavMain items={data.navMain} />\n\t</Sidebar.Header>\n\t<Sidebar.Content>\n\t\t<NavFavorites favorites={data.favorites} />\n\t\t<NavWorkspaces workspaces={data.workspaces} />\n\t\t<NavSecondary items={data.navSecondary} class=\"mt-auto\" />\n\t</Sidebar.Content>\n\t<Sidebar.Rail />\n</Sidebar.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/sidebar-10/components/nav-actions.svelte",
    "content": "<script lang=\"ts\" module>\n\timport ArrowDownIcon from \"@lucide/svelte/icons/arrow-down\";\n\timport ArrowUpIcon from \"@lucide/svelte/icons/arrow-up\";\n\timport BellIcon from \"@lucide/svelte/icons/bell\";\n\timport ChartLineIcon from \"@lucide/svelte/icons/chart-line\";\n\timport CopyIcon from \"@lucide/svelte/icons/copy\";\n\timport CornerUpLeftIcon from \"@lucide/svelte/icons/corner-up-left\";\n\timport CornerUpRightIcon from \"@lucide/svelte/icons/corner-up-right\";\n\timport FileTextIcon from \"@lucide/svelte/icons/file-text\";\n\timport GalleryVerticalEndIcon from \"@lucide/svelte/icons/gallery-vertical-end\";\n\timport LinkIcon from \"@lucide/svelte/icons/link\";\n\timport Settings2Icon from \"@lucide/svelte/icons/settings-2\";\n\timport TrashIcon from \"@lucide/svelte/icons/trash\";\n\timport Trash2Icon from \"@lucide/svelte/icons/trash-2\";\n\n\tconst data = [\n\t\t[\n\t\t\t{\n\t\t\t\tlabel: \"Customize Page\",\n\t\t\t\ticon: Settings2Icon,\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: \"Turn into wiki\",\n\t\t\t\ticon: FileTextIcon,\n\t\t\t},\n\t\t],\n\t\t[\n\t\t\t{\n\t\t\t\tlabel: \"Copy Link\",\n\t\t\t\ticon: LinkIcon,\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: \"Duplicate\",\n\t\t\t\ticon: CopyIcon,\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: \"Move to\",\n\t\t\t\ticon: CornerUpRightIcon,\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: \"Move to Trash\",\n\t\t\t\ticon: Trash2Icon,\n\t\t\t},\n\t\t],\n\t\t[\n\t\t\t{\n\t\t\t\tlabel: \"Undo\",\n\t\t\t\ticon: CornerUpLeftIcon,\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: \"View analytics\",\n\t\t\t\ticon: ChartLineIcon,\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: \"Version History\",\n\t\t\t\ticon: GalleryVerticalEndIcon,\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: \"Show delete pages\",\n\t\t\t\ticon: TrashIcon,\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: \"Notifications\",\n\t\t\t\ticon: BellIcon,\n\t\t\t},\n\t\t],\n\t\t[\n\t\t\t{\n\t\t\t\tlabel: \"Import\",\n\t\t\t\ticon: ArrowUpIcon,\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: \"Export\",\n\t\t\t\ticon: ArrowDownIcon,\n\t\t\t},\n\t\t],\n\t];\n</script>\n\n<script lang=\"ts\">\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Popover from \"$lib/registry/ui/popover/index.js\";\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\timport EllipsisIcon from \"@lucide/svelte/icons/ellipsis\";\n\timport StarIcon from \"@lucide/svelte/icons/star\";\n\timport { untrack } from \"svelte\";\n\n\tlet open = $state(false);\n\n\t$effect(() => {\n\t\tuntrack(() => {\n\t\t\topen = true;\n\t\t});\n\t});\n</script>\n\n<div class=\"flex items-center gap-2 text-sm\">\n\t<div class=\"text-muted-foreground hidden font-medium md:inline-block\">Edit Oct 08</div>\n\t<Button variant=\"ghost\" size=\"icon\" class=\"size-7\">\n\t\t<StarIcon />\n\t</Button>\n\t<Popover.Root bind:open>\n\t\t<Popover.Trigger>\n\t\t\t{#snippet child({ props })}\n\t\t\t\t<Button\n\t\t\t\t\t{...props}\n\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\tsize=\"icon\"\n\t\t\t\t\tclass=\"data-[state=open]:bg-accent size-7\"\n\t\t\t\t>\n\t\t\t\t\t<EllipsisIcon />\n\t\t\t\t</Button>\n\t\t\t{/snippet}\n\t\t</Popover.Trigger>\n\t\t<Popover.Content class=\"w-56 overflow-hidden rounded-lg p-0\" align=\"end\">\n\t\t\t<Sidebar.Root collapsible=\"none\" class=\"bg-transparent\">\n\t\t\t\t<Sidebar.Content>\n\t\t\t\t\t{#each data as group, index (index)}\n\t\t\t\t\t\t<Sidebar.Group class=\"border-b last:border-none\">\n\t\t\t\t\t\t\t<Sidebar.GroupContent class=\"gap-0\">\n\t\t\t\t\t\t\t\t<Sidebar.Menu>\n\t\t\t\t\t\t\t\t\t{#each group as item, index (index)}\n\t\t\t\t\t\t\t\t\t\t<Sidebar.MenuItem>\n\t\t\t\t\t\t\t\t\t\t\t<Sidebar.MenuButton\n\t\t\t\t\t\t\t\t\t\t\t\tclass=\"hover:bg-accent hover:text-accent-foreground\"\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<item.icon /> <span>{item.label}</span>\n\t\t\t\t\t\t\t\t\t\t\t</Sidebar.MenuButton>\n\t\t\t\t\t\t\t\t\t\t</Sidebar.MenuItem>\n\t\t\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t\t</Sidebar.Menu>\n\t\t\t\t\t\t\t</Sidebar.GroupContent>\n\t\t\t\t\t\t</Sidebar.Group>\n\t\t\t\t\t{/each}\n\t\t\t\t</Sidebar.Content>\n\t\t\t</Sidebar.Root>\n\t\t</Popover.Content>\n\t</Popover.Root>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/sidebar-10/components/nav-favorites.svelte",
    "content": "<script lang=\"ts\">\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\timport { useSidebar } from \"$lib/registry/ui/sidebar/index.js\";\n\timport ArrowUpRightIcon from \"@lucide/svelte/icons/arrow-up-right\";\n\timport EllipsisIcon from \"@lucide/svelte/icons/ellipsis\";\n\timport LinkIcon from \"@lucide/svelte/icons/link\";\n\timport StarOffIcon from \"@lucide/svelte/icons/star-off\";\n\timport Trash2Icon from \"@lucide/svelte/icons/trash-2\";\n\n\tlet {\n\t\tfavorites,\n\t}: {\n\t\tfavorites: {\n\t\t\tname: string;\n\t\t\turl: string;\n\t\t\temoji: string;\n\t\t}[];\n\t} = $props();\n\n\tconst sidebar = useSidebar();\n</script>\n\n<Sidebar.Group class=\"group-data-[collapsible=icon]:hidden\">\n\t<Sidebar.GroupLabel>Favorites</Sidebar.GroupLabel>\n\t<Sidebar.Menu>\n\t\t{#each favorites as item (item.name)}\n\t\t\t<Sidebar.MenuItem>\n\t\t\t\t<Sidebar.MenuButton>\n\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t<a href={item.url} title={item.name} {...props}>\n\t\t\t\t\t\t\t<span>{item.emoji}</span>\n\t\t\t\t\t\t\t<span>{item.name}</span>\n\t\t\t\t\t\t</a>\n\t\t\t\t\t{/snippet}\n\t\t\t\t</Sidebar.MenuButton>\n\t\t\t\t<DropdownMenu.Root>\n\t\t\t\t\t<DropdownMenu.Trigger>\n\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t<Sidebar.MenuAction showOnHover {...props}>\n\t\t\t\t\t\t\t\t<EllipsisIcon />\n\t\t\t\t\t\t\t\t<span class=\"sr-only\">More</span>\n\t\t\t\t\t\t\t</Sidebar.MenuAction>\n\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t</DropdownMenu.Trigger>\n\t\t\t\t\t<DropdownMenu.Content\n\t\t\t\t\t\tclass=\"w-56 rounded-lg\"\n\t\t\t\t\t\tside={sidebar.isMobile ? \"bottom\" : \"right\"}\n\t\t\t\t\t\talign={sidebar.isMobile ? \"end\" : \"start\"}\n\t\t\t\t\t>\n\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t<StarOffIcon class=\"text-muted-foreground\" />\n\t\t\t\t\t\t\t<span>Remove from Favorites</span>\n\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t<LinkIcon class=\"text-muted-foreground\" />\n\t\t\t\t\t\t\t<span>Copy Link</span>\n\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t<ArrowUpRightIcon class=\"text-muted-foreground\" />\n\t\t\t\t\t\t\t<span>Open in New Tab</span>\n\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t<Trash2Icon class=\"text-muted-foreground\" />\n\t\t\t\t\t\t\t<span>Delete</span>\n\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t</DropdownMenu.Content>\n\t\t\t\t</DropdownMenu.Root>\n\t\t\t</Sidebar.MenuItem>\n\t\t{/each}\n\t\t<Sidebar.MenuItem>\n\t\t\t<Sidebar.MenuButton class=\"text-sidebar-foreground/70\">\n\t\t\t\t<EllipsisIcon />\n\t\t\t\t<span>More</span>\n\t\t\t</Sidebar.MenuButton>\n\t\t</Sidebar.MenuItem>\n\t</Sidebar.Menu>\n</Sidebar.Group>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/sidebar-10/components/nav-main.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\timport type { Component } from \"svelte\";\n\n\tlet {\n\t\titems,\n\t}: {\n\t\titems: {\n\t\t\ttitle: string;\n\t\t\turl: string;\n\t\t\ticon: Component;\n\t\t\tisActive?: boolean;\n\t\t}[];\n\t} = $props();\n</script>\n\n<Sidebar.Menu>\n\t{#each items as item (item.title)}\n\t\t<Sidebar.MenuItem>\n\t\t\t<Sidebar.MenuButton isActive={item.isActive}>\n\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t<a href={item.url} {...props}>\n\t\t\t\t\t\t<item.icon />\n\t\t\t\t\t\t<span>{item.title}</span>\n\t\t\t\t\t</a>\n\t\t\t\t{/snippet}\n\t\t\t</Sidebar.MenuButton>\n\t\t</Sidebar.MenuItem>\n\t{/each}\n</Sidebar.Menu>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/sidebar-10/components/nav-secondary.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\timport type { Component, ComponentProps } from \"svelte\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\titems,\n\t\t...restProps\n\t}: ComponentProps<typeof Sidebar.Group> & {\n\t\titems: {\n\t\t\ttitle: string;\n\t\t\turl: string;\n\t\t\ticon: Component;\n\t\t\tbadge?: string;\n\t\t}[];\n\t} = $props();\n</script>\n\n<Sidebar.Group bind:ref {...restProps}>\n\t<Sidebar.GroupContent>\n\t\t<Sidebar.Menu>\n\t\t\t{#each items as item (item.title)}\n\t\t\t\t<Sidebar.MenuItem>\n\t\t\t\t\t<Sidebar.MenuButton>\n\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t<a href={item.url} {...props}>\n\t\t\t\t\t\t\t\t<item.icon />\n\t\t\t\t\t\t\t\t<span>{item.title}</span>\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t</Sidebar.MenuButton>\n\t\t\t\t\t{#if item.badge}\n\t\t\t\t\t\t<Sidebar.MenuBadge>{item.badge}</Sidebar.MenuBadge>\n\t\t\t\t\t{/if}\n\t\t\t\t</Sidebar.MenuItem>\n\t\t\t{/each}\n\t\t</Sidebar.Menu>\n\t</Sidebar.GroupContent>\n</Sidebar.Group>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/sidebar-10/components/nav-workspaces.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Collapsible from \"$lib/registry/ui/collapsible/index.js\";\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\timport ChevronRightIcon from \"@lucide/svelte/icons/chevron-right\";\n\timport EllipsisIcon from \"@lucide/svelte/icons/ellipsis\";\n\timport PlusIcon from \"@lucide/svelte/icons/plus\";\n\n\tlet {\n\t\tworkspaces,\n\t}: {\n\t\tworkspaces: {\n\t\t\tname: string;\n\t\t\temoji: string;\n\t\t\tpages: {\n\t\t\t\tname: string;\n\t\t\t\temoji: string;\n\t\t\t}[];\n\t\t}[];\n\t} = $props();\n</script>\n\n<Sidebar.Group>\n\t<Sidebar.GroupLabel>Workspaces</Sidebar.GroupLabel>\n\t<Sidebar.GroupContent>\n\t\t<Sidebar.Menu>\n\t\t\t{#each workspaces as workspace (workspace.name)}\n\t\t\t\t<Collapsible.Root>\n\t\t\t\t\t<Sidebar.MenuItem>\n\t\t\t\t\t\t<Sidebar.MenuButton>\n\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t<a href=\"##\" {...props}>\n\t\t\t\t\t\t\t\t\t<span>{workspace.emoji}</span>\n\t\t\t\t\t\t\t\t\t<span>{workspace.name}</span>\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t</Sidebar.MenuButton>\n\t\t\t\t\t\t<Collapsible.Trigger>\n\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t<Sidebar.MenuAction\n\t\t\t\t\t\t\t\t\t{...props}\n\t\t\t\t\t\t\t\t\tclass=\"bg-sidebar-accent text-sidebar-accent-foreground start-2 data-[state=open]:rotate-90\"\n\t\t\t\t\t\t\t\t\tshowOnHover\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<ChevronRightIcon />\n\t\t\t\t\t\t\t\t</Sidebar.MenuAction>\n\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t</Collapsible.Trigger>\n\t\t\t\t\t\t<Sidebar.MenuAction showOnHover>\n\t\t\t\t\t\t\t<PlusIcon />\n\t\t\t\t\t\t</Sidebar.MenuAction>\n\t\t\t\t\t\t<Collapsible.Content>\n\t\t\t\t\t\t\t<Sidebar.MenuSub>\n\t\t\t\t\t\t\t\t{#each workspace.pages as page (page.name)}\n\t\t\t\t\t\t\t\t\t<Sidebar.MenuSubItem>\n\t\t\t\t\t\t\t\t\t\t<Sidebar.MenuSubButton>\n\t\t\t\t\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"##\" {...props}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span>{page.emoji}</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span>{page.name}</span>\n\t\t\t\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t\t\t\t\t</Sidebar.MenuSubButton>\n\t\t\t\t\t\t\t\t\t</Sidebar.MenuSubItem>\n\t\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t</Sidebar.MenuSub>\n\t\t\t\t\t\t</Collapsible.Content>\n\t\t\t\t\t</Sidebar.MenuItem>\n\t\t\t\t</Collapsible.Root>\n\t\t\t{/each}\n\t\t\t<Sidebar.MenuItem>\n\t\t\t\t<Sidebar.MenuButton class=\"text-sidebar-foreground/70\">\n\t\t\t\t\t<EllipsisIcon />\n\t\t\t\t\t<span>More</span>\n\t\t\t\t</Sidebar.MenuButton>\n\t\t\t</Sidebar.MenuItem>\n\t\t</Sidebar.Menu>\n\t</Sidebar.GroupContent>\n</Sidebar.Group>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/sidebar-10/components/team-switcher.svelte",
    "content": "<script lang=\"ts\">\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\timport ChevronDownIcon from \"@lucide/svelte/icons/chevron-down\";\n\timport PlusIcon from \"@lucide/svelte/icons/plus\";\n\n\tlet {\n\t\tteams,\n\t}: {\n\t\tteams: {\n\t\t\tname: string;\n\t\t\t// This should be `Component` after @lucide/svelte updates types\n\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\tlogo: any;\n\t\t\tplan: string;\n\t\t}[];\n\t} = $props();\n\n\t// svelte-ignore state_referenced_locally\n\tlet activeTeam = $state(teams[0]);\n</script>\n\n<Sidebar.Menu>\n\t<Sidebar.MenuItem>\n\t\t<DropdownMenu.Root>\n\t\t\t<DropdownMenu.Trigger>\n\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t<Sidebar.MenuButton {...props} class=\"w-fit px-1.5\">\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclass=\"bg-sidebar-primary text-sidebar-primary-foreground flex aspect-square size-5 items-center justify-center rounded-md\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<activeTeam.logo class=\"size-3\" />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<span class=\"truncate font-medium\">{activeTeam.name}</span>\n\t\t\t\t\t\t<ChevronDownIcon class=\"opacity-50\" />\n\t\t\t\t\t</Sidebar.MenuButton>\n\t\t\t\t{/snippet}\n\t\t\t</DropdownMenu.Trigger>\n\t\t\t<DropdownMenu.Content\n\t\t\t\tclass=\"w-64 rounded-lg\"\n\t\t\t\talign=\"start\"\n\t\t\t\tside=\"bottom\"\n\t\t\t\tsideOffset={4}\n\t\t\t>\n\t\t\t\t<DropdownMenu.Label class=\"text-muted-foreground text-xs\">Teams</DropdownMenu.Label>\n\t\t\t\t{#each teams as team, index (team.name)}\n\t\t\t\t\t<DropdownMenu.Item onSelect={() => (activeTeam = team)} class=\"gap-2 p-2\">\n\t\t\t\t\t\t<div class=\"flex size-6 items-center justify-center rounded-sm border\">\n\t\t\t\t\t\t\t<team.logo class=\"size-4 shrink-0\" />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t{team.name}\n\t\t\t\t\t\t<DropdownMenu.Shortcut>⌘{index + 1}</DropdownMenu.Shortcut>\n\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t{/each}\n\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t<DropdownMenu.Item class=\"gap-2 p-2\">\n\t\t\t\t\t<div\n\t\t\t\t\t\tclass=\"bg-background flex size-6 items-center justify-center rounded-md border\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<PlusIcon class=\"size-4\" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"text-muted-foreground font-medium\">Add team</div>\n\t\t\t\t</DropdownMenu.Item>\n\t\t\t</DropdownMenu.Content>\n\t\t</DropdownMenu.Root>\n\t</Sidebar.MenuItem>\n</Sidebar.Menu>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/sidebar-11/+page.svelte",
    "content": "<script lang=\"ts\">\n\timport AppSidebar from \"./components/app-sidebar.svelte\";\n\timport * as Breadcrumb from \"$lib/registry/ui/breadcrumb/index.js\";\n\timport { Separator } from \"$lib/registry/ui/separator/index.js\";\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n</script>\n\n<Sidebar.Provider>\n\t<AppSidebar />\n\t<Sidebar.Inset>\n\t\t<header class=\"flex h-16 shrink-0 items-center gap-2 border-b px-4\">\n\t\t\t<Sidebar.Trigger class=\"-ms-1\" />\n\t\t\t<Separator orientation=\"vertical\" class=\"me-2 data-[orientation=vertical]:h-4\" />\n\t\t\t<Breadcrumb.Root>\n\t\t\t\t<Breadcrumb.List>\n\t\t\t\t\t<Breadcrumb.Item class=\"hidden md:block\">\n\t\t\t\t\t\t<Breadcrumb.Link href=\"##\">lib</Breadcrumb.Link>\n\t\t\t\t\t</Breadcrumb.Item>\n\t\t\t\t\t<Breadcrumb.Separator class=\"hidden md:block\" />\n\t\t\t\t\t<Breadcrumb.Item class=\"hidden md:block\">\n\t\t\t\t\t\t<Breadcrumb.Link href=\"##\">components</Breadcrumb.Link>\n\t\t\t\t\t</Breadcrumb.Item>\n\t\t\t\t\t<Breadcrumb.Separator class=\"hidden md:block\" />\n\t\t\t\t\t<Breadcrumb.Item>\n\t\t\t\t\t\t<Breadcrumb.Page>button.svelte</Breadcrumb.Page>\n\t\t\t\t\t</Breadcrumb.Item>\n\t\t\t\t</Breadcrumb.List>\n\t\t\t</Breadcrumb.Root>\n\t\t</header>\n\t\t<div class=\"flex flex-1 flex-col gap-4 p-4\">\n\t\t\t<div class=\"grid auto-rows-min gap-4 md:grid-cols-3\">\n\t\t\t\t<div class=\"bg-muted/50 aspect-video rounded-xl\"></div>\n\t\t\t\t<div class=\"bg-muted/50 aspect-video rounded-xl\"></div>\n\t\t\t\t<div class=\"bg-muted/50 aspect-video rounded-xl\"></div>\n\t\t\t</div>\n\t\t\t<div class=\"bg-muted/50 min-h-screen flex-1 rounded-xl md:min-h-min\"></div>\n\t\t</div>\n\t</Sidebar.Inset>\n</Sidebar.Provider>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/sidebar-11/components/app-sidebar.svelte",
    "content": "<script lang=\"ts\" module>\n\t// This is sample data.\n\tconst data = {\n\t\tchanges: [\n\t\t\t{\n\t\t\t\tfile: \"README.md\",\n\t\t\t\tstate: \"M\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tfile: \"routes/+page.svelte\",\n\t\t\t\tstate: \"U\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tfile: \"routes/+layout.svelte\",\n\t\t\t\tstate: \"M\",\n\t\t\t},\n\t\t],\n\t\ttree: [\n\t\t\t[\"lib\", [\"components\", \"button.svelte\", \"card.svelte\"], \"utils.ts\"],\n\t\t\t[\n\t\t\t\t\"routes\",\n\t\t\t\t[\"hello\", \"+page.svelte\", \"+page.ts\"],\n\t\t\t\t\"+page.svelte\",\n\t\t\t\t\"+page.server.ts\",\n\t\t\t\t\"+layout.svelte\",\n\t\t\t],\n\t\t\t[\"static\", \"favicon.ico\", \"svelte.svg\"],\n\t\t\t\"eslint.config.js\",\n\t\t\t\".gitignore\",\n\t\t\t\"svelte.config.js\",\n\t\t\t\"tailwind.config.js\",\n\t\t\t\"package.json\",\n\t\t\t\"README.md\",\n\t\t],\n\t};\n</script>\n\n<script lang=\"ts\">\n\timport * as Collapsible from \"$lib/registry/ui/collapsible/index.js\";\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\timport ChevronRightIcon from \"@lucide/svelte/icons/chevron-right\";\n\timport FileIcon from \"@lucide/svelte/icons/file\";\n\timport FolderIcon from \"@lucide/svelte/icons/folder\";\n\timport type { ComponentProps } from \"svelte\";\n\n\tlet { ref = $bindable(null), ...restProps }: ComponentProps<typeof Sidebar.Root> = $props();\n</script>\n\n<Sidebar.Root bind:ref {...restProps}>\n\t<Sidebar.Content>\n\t\t<Sidebar.Group>\n\t\t\t<Sidebar.GroupLabel>Changes</Sidebar.GroupLabel>\n\t\t\t<Sidebar.GroupContent>\n\t\t\t\t<Sidebar.Menu>\n\t\t\t\t\t{#each data.changes as item, index (index)}\n\t\t\t\t\t\t<Sidebar.MenuItem>\n\t\t\t\t\t\t\t<Sidebar.MenuButton>\n\t\t\t\t\t\t\t\t<FileIcon />\n\t\t\t\t\t\t\t\t{item.file}\n\t\t\t\t\t\t\t</Sidebar.MenuButton>\n\t\t\t\t\t\t\t<Sidebar.MenuBadge>{item.state}</Sidebar.MenuBadge>\n\t\t\t\t\t\t</Sidebar.MenuItem>\n\t\t\t\t\t{/each}\n\t\t\t\t</Sidebar.Menu>\n\t\t\t</Sidebar.GroupContent>\n\t\t</Sidebar.Group>\n\t\t<Sidebar.Group>\n\t\t\t<Sidebar.GroupLabel>Files</Sidebar.GroupLabel>\n\t\t\t<Sidebar.GroupContent>\n\t\t\t\t<Sidebar.Menu>\n\t\t\t\t\t{#each data.tree as item, index (index)}\n\t\t\t\t\t\t{@render Tree({ item })}\n\t\t\t\t\t{/each}\n\t\t\t\t</Sidebar.Menu>\n\t\t\t</Sidebar.GroupContent>\n\t\t</Sidebar.Group>\n\t</Sidebar.Content>\n\t<Sidebar.Rail />\n</Sidebar.Root>\n\n<!-- eslint-disable-next-line @typescript-eslint/no-explicit-any -->\n{#snippet Tree({ item }: { item: string | any[] })}\n\t{@const [name, ...items] = Array.isArray(item) ? item : [item]}\n\t{#if !items.length}\n\t\t<Sidebar.MenuButton\n\t\t\tisActive={name === \"button.svelte\"}\n\t\t\tclass=\"data-[active=true]:bg-transparent\"\n\t\t>\n\t\t\t<FileIcon />\n\t\t\t{name}\n\t\t</Sidebar.MenuButton>\n\t{:else}\n\t\t<Sidebar.MenuItem>\n\t\t\t<Collapsible.Root\n\t\t\t\tclass=\"group/collapsible [&[data-state=open]>button>svg:first-child]:rotate-90\"\n\t\t\t\topen={name === \"lib\" || name === \"components\"}\n\t\t\t>\n\t\t\t\t<Collapsible.Trigger>\n\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t<Sidebar.MenuButton {...props}>\n\t\t\t\t\t\t\t<ChevronRightIcon class=\"transition-transform\" />\n\t\t\t\t\t\t\t<FolderIcon />\n\t\t\t\t\t\t\t{name}\n\t\t\t\t\t\t</Sidebar.MenuButton>\n\t\t\t\t\t{/snippet}\n\t\t\t\t</Collapsible.Trigger>\n\t\t\t\t<Collapsible.Content>\n\t\t\t\t\t<Sidebar.MenuSub>\n\t\t\t\t\t\t{#each items as subItem, index (index)}\n\t\t\t\t\t\t\t{@render Tree({ item: subItem })}\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</Sidebar.MenuSub>\n\t\t\t\t</Collapsible.Content>\n\t\t\t</Collapsible.Root>\n\t\t</Sidebar.MenuItem>\n\t{/if}\n{/snippet}\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/sidebar-12/+page.svelte",
    "content": "<script lang=\"ts\">\n\timport AppSidebar from \"./components/app-sidebar.svelte\";\n\timport * as Breadcrumb from \"$lib/registry/ui/breadcrumb/index.js\";\n\timport { Separator } from \"$lib/registry/ui/separator/index.js\";\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n</script>\n\n<Sidebar.Provider>\n\t<AppSidebar />\n\t<Sidebar.Inset>\n\t\t<header\n\t\t\tclass=\"bg-background sticky top-0 flex h-16 shrink-0 items-center gap-2 border-b px-4\"\n\t\t>\n\t\t\t<Sidebar.Trigger class=\"-ms-1\" />\n\t\t\t<Separator orientation=\"vertical\" class=\"me-2 data-[orientation=vertical]:h-4\" />\n\t\t\t<Breadcrumb.Root>\n\t\t\t\t<Breadcrumb.List>\n\t\t\t\t\t<Breadcrumb.Item>\n\t\t\t\t\t\t<Breadcrumb.Page>October 2024</Breadcrumb.Page>\n\t\t\t\t\t</Breadcrumb.Item>\n\t\t\t\t</Breadcrumb.List>\n\t\t\t</Breadcrumb.Root>\n\t\t</header>\n\t\t<div class=\"flex flex-1 flex-col gap-4 p-4\">\n\t\t\t<div class=\"grid auto-rows-min gap-4 md:grid-cols-5\">\n\t\t\t\t{#each Array.from({ length: 20 }) as _, index (index)}\n\t\t\t\t\t<div class=\"bg-muted/50 aspect-square rounded-xl\"></div>\n\t\t\t\t{/each}\n\t\t\t</div>\n\t\t</div>\n\t</Sidebar.Inset>\n</Sidebar.Provider>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/sidebar-12/components/app-sidebar.svelte",
    "content": "<script lang=\"ts\" module>\n\t// This is sample data.\n\tconst data = {\n\t\tuser: {\n\t\t\tname: \"shadcn\",\n\t\t\temail: \"m@example.com\",\n\t\t\tavatar: \"/avatars/shadcn.jpg\",\n\t\t},\n\t\tcalendars: [\n\t\t\t{\n\t\t\t\tname: \"My Calendars\",\n\t\t\t\titems: [\"Personal\", \"Work\", \"Family\"],\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"Favorites\",\n\t\t\t\titems: [\"Holidays\", \"Birthdays\"],\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"Other\",\n\t\t\t\titems: [\"Travel\", \"Reminders\", \"Deadlines\"],\n\t\t\t},\n\t\t],\n\t};\n</script>\n\n<script lang=\"ts\">\n\timport Calendars from \"./calendars.svelte\";\n\timport DatePicker from \"./date-picker.svelte\";\n\timport NavUser from \"./nav-user.svelte\";\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\timport PlusIcon from \"@lucide/svelte/icons/plus\";\n\timport type { ComponentProps } from \"svelte\";\n\n\tlet { ref = $bindable(null), ...restProps }: ComponentProps<typeof Sidebar.Root> = $props();\n</script>\n\n<Sidebar.Root bind:ref {...restProps}>\n\t<Sidebar.Header class=\"border-sidebar-border h-16 border-b\">\n\t\t<NavUser user={data.user} />\n\t</Sidebar.Header>\n\t<Sidebar.Content>\n\t\t<DatePicker />\n\t\t<Sidebar.Separator class=\"mx-0\" />\n\t\t<Calendars calendars={data.calendars} />\n\t</Sidebar.Content>\n\t<Sidebar.Footer>\n\t\t<Sidebar.Menu>\n\t\t\t<Sidebar.MenuItem>\n\t\t\t\t<Sidebar.MenuButton>\n\t\t\t\t\t<PlusIcon />\n\t\t\t\t\t<span>New Calendar</span>\n\t\t\t\t</Sidebar.MenuButton>\n\t\t\t</Sidebar.MenuItem>\n\t\t</Sidebar.Menu>\n\t</Sidebar.Footer>\n\t<Sidebar.Rail />\n</Sidebar.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/sidebar-12/components/calendars.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Collapsible from \"$lib/registry/ui/collapsible/index.js\";\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\timport CheckIcon from \"@lucide/svelte/icons/check\";\n\timport ChevronRightIcon from \"@lucide/svelte/icons/chevron-right\";\n\n\tlet {\n\t\tcalendars,\n\t}: {\n\t\tcalendars: {\n\t\t\tname: string;\n\t\t\titems: string[];\n\t\t}[];\n\t} = $props();\n</script>\n\n{#each calendars as calendar, index (calendar.name)}\n\t<Sidebar.Group class=\"py-0\">\n\t\t<Collapsible.Root open={index === 0} class=\"group/collapsible\">\n\t\t\t<Sidebar.GroupLabel\n\t\t\t\tclass=\"group/label text-sidebar-foreground hover:bg-sidebar-accent hover:text-sidebar-accent-foreground w-full text-sm\"\n\t\t\t>\n\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t<Collapsible.Trigger {...props}>\n\t\t\t\t\t\t{calendar.name}\n\t\t\t\t\t\t<ChevronRightIcon\n\t\t\t\t\t\t\tclass=\"ms-auto transition-transform group-data-[state=open]/collapsible:rotate-90\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Collapsible.Trigger>\n\t\t\t\t{/snippet}\n\t\t\t</Sidebar.GroupLabel>\n\t\t\t<Collapsible.Content>\n\t\t\t\t<Sidebar.GroupContent>\n\t\t\t\t\t<Sidebar.Menu>\n\t\t\t\t\t\t{#each calendar.items as item, itemIndex (item)}\n\t\t\t\t\t\t\t<Sidebar.MenuItem>\n\t\t\t\t\t\t\t\t<Sidebar.MenuButton>\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tdata-active={itemIndex < 2}\n\t\t\t\t\t\t\t\t\t\tclass=\"group/calendar-item border-sidebar-border text-sidebar-primary-foreground data-[active=true]:border-sidebar-primary data-[active=true]:bg-sidebar-primary flex aspect-square size-4 shrink-0 items-center justify-center rounded-sm border\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<CheckIcon\n\t\t\t\t\t\t\t\t\t\t\tclass=\"hidden size-3 group-data-[active=true]/calendar-item:block\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t{item}\n\t\t\t\t\t\t\t\t</Sidebar.MenuButton>\n\t\t\t\t\t\t\t</Sidebar.MenuItem>\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</Sidebar.Menu>\n\t\t\t\t</Sidebar.GroupContent>\n\t\t\t</Collapsible.Content>\n\t\t</Collapsible.Root>\n\t</Sidebar.Group>\n\t<Sidebar.Separator class=\"mx-0\" />\n{/each}\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/sidebar-12/components/date-picker.svelte",
    "content": "<script lang=\"ts\">\n\timport { Calendar } from \"$lib/registry/ui/calendar/index.js\";\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n</script>\n\n<Sidebar.Group class=\"px-0\">\n\t<Sidebar.GroupContent>\n\t\t<Calendar\n\t\t\treadonly\n\t\t\ttype=\"single\"\n\t\t\tclass=\"[&_[role=gridcell]_[role=button][data-today]]:bg-sidebar-primary [&_[role=gridcell]_[role=button][data-today]]:text-sidebar-primary-foreground select-none [&_[data-bits-calendar-head-cell]]:w-[33px] [&_[role=gridcell]]:w-[33px]\"\n\t\t/>\n\t</Sidebar.GroupContent>\n</Sidebar.Group>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/sidebar-12/components/nav-user.svelte",
    "content": "<script lang=\"ts\">\n\timport BadgeCheckIcon from \"@lucide/svelte/icons/badge-check\";\n\timport BellIcon from \"@lucide/svelte/icons/bell\";\n\timport ChevronsUpDownIcon from \"@lucide/svelte/icons/chevrons-up-down\";\n\timport CreditCardIcon from \"@lucide/svelte/icons/credit-card\";\n\timport LogOutIcon from \"@lucide/svelte/icons/log-out\";\n\timport SparklesIcon from \"@lucide/svelte/icons/sparkles\";\n\n\timport * as Avatar from \"$lib/registry/ui/avatar/index.js\";\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\timport { useSidebar } from \"$lib/registry/ui/sidebar/index.js\";\n\n\tlet { user }: { user: { name: string; email: string; avatar: string } } = $props();\n\tconst sidebar = useSidebar();\n</script>\n\n<Sidebar.Menu>\n\t<Sidebar.MenuItem>\n\t\t<DropdownMenu.Root>\n\t\t\t<DropdownMenu.Trigger>\n\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t<Sidebar.MenuButton\n\t\t\t\t\t\t{...props}\n\t\t\t\t\t\tsize=\"lg\"\n\t\t\t\t\t\tclass=\"data-[state=open]:bg-sidebar-accent data-[state=open]:text-sidebar-accent-foreground\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<Avatar.Root class=\"size-8 rounded-lg\">\n\t\t\t\t\t\t\t<Avatar.Image src={user.avatar} alt={user.name} />\n\t\t\t\t\t\t\t<Avatar.Fallback class=\"rounded-lg\">CN</Avatar.Fallback>\n\t\t\t\t\t\t</Avatar.Root>\n\t\t\t\t\t\t<div class=\"grid flex-1 text-start text-sm leading-tight\">\n\t\t\t\t\t\t\t<span class=\"truncate font-medium\">{user.name}</span>\n\t\t\t\t\t\t\t<span class=\"truncate text-xs\">{user.email}</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<ChevronsUpDownIcon class=\"ms-auto size-4\" />\n\t\t\t\t\t</Sidebar.MenuButton>\n\t\t\t\t{/snippet}\n\t\t\t</DropdownMenu.Trigger>\n\t\t\t<DropdownMenu.Content\n\t\t\t\tclass=\"w-(--bits-dropdown-menu-anchor-width) min-w-56 rounded-lg\"\n\t\t\t\tside={sidebar.isMobile ? \"bottom\" : \"right\"}\n\t\t\t\talign=\"start\"\n\t\t\t\tsideOffset={4}\n\t\t\t>\n\t\t\t\t<DropdownMenu.Label class=\"p-0 font-normal\">\n\t\t\t\t\t<div class=\"flex items-center gap-2 px-1 py-1.5 text-start text-sm\">\n\t\t\t\t\t\t<Avatar.Root class=\"size-8 rounded-lg\">\n\t\t\t\t\t\t\t<Avatar.Image src={user.avatar} alt={user.name} />\n\t\t\t\t\t\t\t<Avatar.Fallback class=\"rounded-lg\">CN</Avatar.Fallback>\n\t\t\t\t\t\t</Avatar.Root>\n\t\t\t\t\t\t<div class=\"grid flex-1 text-start text-sm leading-tight\">\n\t\t\t\t\t\t\t<span class=\"truncate font-medium\">{user.name}</span>\n\t\t\t\t\t\t\t<span class=\"truncate text-xs\">{user.email}</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</DropdownMenu.Label>\n\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t<DropdownMenu.Group>\n\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t<SparklesIcon />\n\t\t\t\t\t\tUpgrade to Pro\n\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t</DropdownMenu.Group>\n\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t<DropdownMenu.Group>\n\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t<BadgeCheckIcon />\n\t\t\t\t\t\tAccount\n\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t<CreditCardIcon />\n\t\t\t\t\t\tBilling\n\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t<BellIcon />\n\t\t\t\t\t\tNotifications\n\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t</DropdownMenu.Group>\n\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t<LogOutIcon />\n\t\t\t\t\tLog out\n\t\t\t\t</DropdownMenu.Item>\n\t\t\t</DropdownMenu.Content>\n\t\t</DropdownMenu.Root>\n\t</Sidebar.MenuItem>\n</Sidebar.Menu>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/sidebar-13/+page.svelte",
    "content": "<script lang=\"ts\">\n\timport SettingsDialog from \"./components/settings-dialog.svelte\";\n</script>\n\n<div class=\"flex h-svh items-center justify-center\">\n\t<SettingsDialog />\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/sidebar-13/components/settings-dialog.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Breadcrumb from \"$lib/registry/ui/breadcrumb/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Dialog from \"$lib/registry/ui/dialog/index.js\";\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\timport BellIcon from \"@lucide/svelte/icons/bell\";\n\timport CheckIcon from \"@lucide/svelte/icons/check\";\n\timport GlobeIcon from \"@lucide/svelte/icons/globe\";\n\timport HouseIcon from \"@lucide/svelte/icons/house\";\n\timport KeyboardIcon from \"@lucide/svelte/icons/keyboard\";\n\timport LinkIcon from \"@lucide/svelte/icons/link\";\n\timport LockIcon from \"@lucide/svelte/icons/lock\";\n\timport MenuIcon from \"@lucide/svelte/icons/menu\";\n\timport MessageCircleIcon from \"@lucide/svelte/icons/message-circle\";\n\timport PaintbrushIcon from \"@lucide/svelte/icons/paintbrush\";\n\timport SettingsIcon from \"@lucide/svelte/icons/settings\";\n\timport VideoIcon from \"@lucide/svelte/icons/video\";\n\n\tconst data = {\n\t\tnav: [\n\t\t\t{ name: \"Notifications\", icon: BellIcon },\n\t\t\t{ name: \"Navigation\", icon: MenuIcon },\n\t\t\t{ name: \"Home\", icon: HouseIcon },\n\t\t\t{ name: \"Appearance\", icon: PaintbrushIcon },\n\t\t\t{ name: \"Messages & media\", icon: MessageCircleIcon },\n\t\t\t{ name: \"Language & region\", icon: GlobeIcon },\n\t\t\t{ name: \"Accessibility\", icon: KeyboardIcon },\n\t\t\t{ name: \"Mark as read\", icon: CheckIcon },\n\t\t\t{ name: \"Audio & video\", icon: VideoIcon },\n\t\t\t{ name: \"Connected accounts\", icon: LinkIcon },\n\t\t\t{ name: \"Privacy & visibility\", icon: LockIcon },\n\t\t\t{ name: \"Advanced\", icon: SettingsIcon },\n\t\t],\n\t};\n\n\tlet open = $state(true);\n</script>\n\n<Dialog.Root bind:open>\n\t<Dialog.Trigger>\n\t\t{#snippet child({ props })}\n\t\t\t<Button size=\"sm\" {...props}>Open Dialog</Button>\n\t\t{/snippet}\n\t</Dialog.Trigger>\n\t<Dialog.Content\n\t\tclass=\"overflow-hidden p-0 md:max-h-[500px] md:max-w-[700px] lg:max-w-[800px]\"\n\t\ttrapFocus={false}\n\t>\n\t\t<Dialog.Title class=\"sr-only\">Settings</Dialog.Title>\n\t\t<Dialog.Description class=\"sr-only\">Customize your settings here.</Dialog.Description>\n\t\t<Sidebar.Provider class=\"items-start\">\n\t\t\t<Sidebar.Root collapsible=\"none\" class=\"hidden md:flex\">\n\t\t\t\t<Sidebar.Content>\n\t\t\t\t\t<Sidebar.Group>\n\t\t\t\t\t\t<Sidebar.GroupContent>\n\t\t\t\t\t\t\t<Sidebar.Menu>\n\t\t\t\t\t\t\t\t{#each data.nav as item (item.name)}\n\t\t\t\t\t\t\t\t\t<Sidebar.MenuItem>\n\t\t\t\t\t\t\t\t\t\t<Sidebar.MenuButton\n\t\t\t\t\t\t\t\t\t\t\tisActive={item.name === \"Messages & media\"}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t\t\t\t\t<a href=\"##\" {...props}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<item.icon />\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span>{item.name}</span>\n\t\t\t\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t\t\t\t\t</Sidebar.MenuButton>\n\t\t\t\t\t\t\t\t\t</Sidebar.MenuItem>\n\t\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t</Sidebar.Menu>\n\t\t\t\t\t\t</Sidebar.GroupContent>\n\t\t\t\t\t</Sidebar.Group>\n\t\t\t\t</Sidebar.Content>\n\t\t\t</Sidebar.Root>\n\t\t\t<main class=\"flex h-[480px] flex-1 flex-col overflow-hidden\">\n\t\t\t\t<header\n\t\t\t\t\tclass=\"flex h-16 shrink-0 items-center gap-2 transition-[width,height] ease-linear group-has-[[data-collapsible=icon]]/sidebar-wrapper:h-12\"\n\t\t\t\t>\n\t\t\t\t\t<div class=\"flex items-center gap-2 px-4\">\n\t\t\t\t\t\t<Breadcrumb.Root>\n\t\t\t\t\t\t\t<Breadcrumb.List>\n\t\t\t\t\t\t\t\t<Breadcrumb.Item class=\"hidden md:block\">\n\t\t\t\t\t\t\t\t\t<Breadcrumb.Link href=\"##\">Settings</Breadcrumb.Link>\n\t\t\t\t\t\t\t\t</Breadcrumb.Item>\n\t\t\t\t\t\t\t\t<Breadcrumb.Separator class=\"hidden md:block\" />\n\t\t\t\t\t\t\t\t<Breadcrumb.Item>\n\t\t\t\t\t\t\t\t\t<Breadcrumb.Page>Messages & media</Breadcrumb.Page>\n\t\t\t\t\t\t\t\t</Breadcrumb.Item>\n\t\t\t\t\t\t\t</Breadcrumb.List>\n\t\t\t\t\t\t</Breadcrumb.Root>\n\t\t\t\t\t</div>\n\t\t\t\t</header>\n\t\t\t\t<div class=\"flex flex-1 flex-col gap-4 overflow-y-auto p-4 pt-0\">\n\t\t\t\t\t{#each Array.from({ length: 10 }) as _, i (i)}\n\t\t\t\t\t\t<div class=\"bg-muted/50 aspect-video max-w-3xl rounded-xl\"></div>\n\t\t\t\t\t{/each}\n\t\t\t\t</div>\n\t\t\t</main>\n\t\t</Sidebar.Provider>\n\t</Dialog.Content>\n</Dialog.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/sidebar-14/+page.svelte",
    "content": "<script lang=\"ts\">\n\timport AppSidebar from \"./components/app-sidebar.svelte\";\n\timport * as Breadcrumb from \"$lib/registry/ui/breadcrumb/index.js\";\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n</script>\n\n<Sidebar.Provider>\n\t<Sidebar.Inset>\n\t\t<header class=\"flex h-16 shrink-0 items-center gap-2 border-b px-4\">\n\t\t\t<Breadcrumb.Root>\n\t\t\t\t<Breadcrumb.List>\n\t\t\t\t\t<Breadcrumb.Item class=\"hidden md:block\">\n\t\t\t\t\t\t<Breadcrumb.Link href=\"##\">Build Your Application</Breadcrumb.Link>\n\t\t\t\t\t</Breadcrumb.Item>\n\t\t\t\t\t<Breadcrumb.Separator class=\"hidden md:block\" />\n\t\t\t\t\t<Breadcrumb.Item>\n\t\t\t\t\t\t<Breadcrumb.Page>Data Fetching</Breadcrumb.Page>\n\t\t\t\t\t</Breadcrumb.Item>\n\t\t\t\t</Breadcrumb.List>\n\t\t\t</Breadcrumb.Root>\n\t\t\t<Sidebar.Trigger class=\"ms-auto -me-1 rotate-180\" />\n\t\t</header>\n\t\t<div class=\"flex flex-1 flex-col gap-4 p-4\">\n\t\t\t<div class=\"grid auto-rows-min gap-4 md:grid-cols-3\">\n\t\t\t\t<div class=\"bg-muted/50 aspect-video rounded-xl\"></div>\n\t\t\t\t<div class=\"bg-muted/50 aspect-video rounded-xl\"></div>\n\t\t\t\t<div class=\"bg-muted/50 aspect-video rounded-xl\"></div>\n\t\t\t</div>\n\t\t\t<div class=\"bg-muted/50 min-h-screen flex-1 rounded-xl md:min-h-min\"></div>\n\t\t</div>\n\t</Sidebar.Inset>\n\t<AppSidebar side=\"right\" />\n</Sidebar.Provider>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/sidebar-14/components/app-sidebar.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\timport type { ComponentProps } from \"svelte\";\n\n\t// This is sample data.\n\tconst data = {\n\t\tnavMain: [\n\t\t\t{\n\t\t\t\ttitle: \"Getting Started\",\n\t\t\t\turl: \"#\",\n\t\t\t\titems: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Installation\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Project Structure\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"Build Your Application\",\n\t\t\t\turl: \"#\",\n\t\t\t\titems: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Routing\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Data Fetching\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t\tisActive: true,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Rendering\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Caching\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Styling\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Optimizing\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Configuring\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Testing\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Authentication\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Deploying\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Upgrading\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Examples\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"API Reference\",\n\t\t\t\turl: \"#\",\n\t\t\t\titems: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Components\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"File Conventions\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Functions\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"next.config.js Options\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"CLI\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Edge Runtime\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"Architecture\",\n\t\t\t\turl: \"#\",\n\t\t\t\titems: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Accessibility\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Fast Refresh\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Next.js Compiler\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Supported Browsers\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Turbopack\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"Community\",\n\t\t\t\turl: \"#\",\n\t\t\t\titems: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Contribution Guide\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t};\n\n\tlet { ref = $bindable(null), ...restProps }: ComponentProps<typeof Sidebar.Root> = $props();\n</script>\n\n<Sidebar.Root bind:ref {...restProps}>\n\t<Sidebar.Content>\n\t\t<Sidebar.Group>\n\t\t\t<Sidebar.GroupLabel>Table of Contents</Sidebar.GroupLabel>\n\t\t\t<Sidebar.GroupContent>\n\t\t\t\t<Sidebar.Menu>\n\t\t\t\t\t{#each data.navMain as item (item.title)}\n\t\t\t\t\t\t<Sidebar.MenuItem>\n\t\t\t\t\t\t\t<Sidebar.MenuButton class=\"font-medium\">\n\t\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t\t<a href={item.url} {...props}>\n\t\t\t\t\t\t\t\t\t\t{item.title}\n\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t\t</Sidebar.MenuButton>\n\t\t\t\t\t\t\t{#if item.items?.length}\n\t\t\t\t\t\t\t\t<Sidebar.MenuSub>\n\t\t\t\t\t\t\t\t\t{#each item.items as subItem (subItem.title)}\n\t\t\t\t\t\t\t\t\t\t<Sidebar.MenuSubItem>\n\t\t\t\t\t\t\t\t\t\t\t<Sidebar.MenuSubButton\n\t\t\t\t\t\t\t\t\t\t\t\thref={subItem.url}\n\t\t\t\t\t\t\t\t\t\t\t\tisActive={subItem.isActive}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{subItem.title}\n\t\t\t\t\t\t\t\t\t\t\t</Sidebar.MenuSubButton>\n\t\t\t\t\t\t\t\t\t\t</Sidebar.MenuSubItem>\n\t\t\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t\t</Sidebar.MenuSub>\n\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t</Sidebar.MenuItem>\n\t\t\t\t\t{/each}\n\t\t\t\t</Sidebar.Menu>\n\t\t\t</Sidebar.GroupContent>\n\t\t</Sidebar.Group>\n\t</Sidebar.Content>\n\t<Sidebar.Rail />\n</Sidebar.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/sidebar-15/+page.svelte",
    "content": "<script lang=\"ts\">\n\timport SidebarLeft from \"./components/sidebar-left.svelte\";\n\timport SidebarRight from \"./components/sidebar-right.svelte\";\n\timport * as Breadcrumb from \"$lib/registry/ui/breadcrumb/index.js\";\n\timport { Separator } from \"$lib/registry/ui/separator/index.js\";\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n</script>\n\n<Sidebar.Provider>\n\t<SidebarLeft />\n\t<Sidebar.Inset>\n\t\t<header class=\"bg-background sticky top-0 flex h-14 shrink-0 items-center gap-2\">\n\t\t\t<div class=\"flex flex-1 items-center gap-2 px-3\">\n\t\t\t\t<Sidebar.Trigger />\n\t\t\t\t<Separator orientation=\"vertical\" class=\"me-2 data-[orientation=vertical]:h-4\" />\n\t\t\t\t<Breadcrumb.Root>\n\t\t\t\t\t<Breadcrumb.List>\n\t\t\t\t\t\t<Breadcrumb.Item>\n\t\t\t\t\t\t\t<Breadcrumb.Page class=\"line-clamp-1\">\n\t\t\t\t\t\t\t\tProject Management & Task Tracking\n\t\t\t\t\t\t\t</Breadcrumb.Page>\n\t\t\t\t\t\t</Breadcrumb.Item>\n\t\t\t\t\t</Breadcrumb.List>\n\t\t\t\t</Breadcrumb.Root>\n\t\t\t</div>\n\t\t</header>\n\t\t<div class=\"flex flex-1 flex-col gap-4 p-4\">\n\t\t\t<div class=\"bg-muted/50 mx-auto h-24 w-full max-w-3xl rounded-xl\"></div>\n\t\t\t<div class=\"bg-muted/50 mx-auto h-[100vh] w-full max-w-3xl rounded-xl\"></div>\n\t\t</div>\n\t</Sidebar.Inset>\n\t<SidebarRight />\n</Sidebar.Provider>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/sidebar-15/components/calendars.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Collapsible from \"$lib/registry/ui/collapsible/index.js\";\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\timport CheckIcon from \"@lucide/svelte/icons/check\";\n\timport ChevronRightIcon from \"@lucide/svelte/icons/chevron-right\";\n\n\tlet { calendars }: { calendars: { name: string; items: string[] }[] } = $props();\n</script>\n\n{#each calendars as calendar, index (calendar.name)}\n\t<Sidebar.Group class=\"py-0\">\n\t\t<Collapsible.Root open={index === 0} class=\"group/collapsible\">\n\t\t\t<Sidebar.GroupLabel\n\t\t\t\tclass=\"group/label text-sidebar-foreground hover:bg-sidebar-accent hover:text-sidebar-accent-foreground w-full text-sm\"\n\t\t\t>\n\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t<Collapsible.Trigger {...props}>\n\t\t\t\t\t\t{calendar.name}\n\t\t\t\t\t\t<ChevronRightIcon\n\t\t\t\t\t\t\tclass=\"ms-auto transition-transform group-data-[state=open]/collapsible:rotate-90\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Collapsible.Trigger>\n\t\t\t\t{/snippet}\n\t\t\t</Sidebar.GroupLabel>\n\t\t\t<Collapsible.Content>\n\t\t\t\t<Sidebar.GroupContent>\n\t\t\t\t\t<Sidebar.Menu>\n\t\t\t\t\t\t{#each calendar.items as item, index (item)}\n\t\t\t\t\t\t\t<Sidebar.MenuItem>\n\t\t\t\t\t\t\t\t<Sidebar.MenuButton>\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tdata-active={index < 2}\n\t\t\t\t\t\t\t\t\t\tclass=\"group/calendar-item border-sidebar-border text-sidebar-primary-foreground data-[active=true]:border-sidebar-primary data-[active=true]:bg-sidebar-primary flex aspect-square size-4 shrink-0 items-center justify-center rounded-xs border\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<CheckIcon\n\t\t\t\t\t\t\t\t\t\t\tclass=\"hidden size-3 group-data-[active=true]/calendar-item:block\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t{item}\n\t\t\t\t\t\t\t\t</Sidebar.MenuButton>\n\t\t\t\t\t\t\t</Sidebar.MenuItem>\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</Sidebar.Menu>\n\t\t\t\t</Sidebar.GroupContent>\n\t\t\t</Collapsible.Content>\n\t\t</Collapsible.Root>\n\t</Sidebar.Group>\n\t<Sidebar.Separator class=\"mx-0\" />\n{/each}\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/sidebar-15/components/date-picker.svelte",
    "content": "<script lang=\"ts\">\n\timport { Calendar } from \"$lib/registry/ui/calendar/index.js\";\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n</script>\n\n<Sidebar.Group class=\"px-0\">\n\t<Sidebar.GroupContent>\n\t\t<Calendar\n\t\t\treadonly\n\t\t\ttype=\"single\"\n\t\t\tclass=\"[&_[role=gridcell]_[role=button][data-today]]:bg-sidebar-primary [&_[role=gridcell]_[role=button][data-today]]:text-sidebar-primary-foreground select-none [&_[data-bits-calendar-head-cell]]:w-[33px] [&_[role=gridcell]]:w-[33px]\"\n\t\t/>\n\t</Sidebar.GroupContent>\n</Sidebar.Group>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/sidebar-15/components/nav-favorites.svelte",
    "content": "<script lang=\"ts\">\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\timport { useSidebar } from \"$lib/registry/ui/sidebar/index.js\";\n\timport ArrowUpRightIcon from \"@lucide/svelte/icons/arrow-up-right\";\n\timport EllipsisIcon from \"@lucide/svelte/icons/ellipsis\";\n\timport LinkIcon from \"@lucide/svelte/icons/link\";\n\timport StarOffIcon from \"@lucide/svelte/icons/star-off\";\n\timport Trash2Icon from \"@lucide/svelte/icons/trash-2\";\n\n\tlet { favorites }: { favorites: { name: string; url: string; emoji: string }[] } = $props();\n\n\tconst sidebar = useSidebar();\n</script>\n\n<Sidebar.Group class=\"group-data-[collapsible=icon]:hidden\">\n\t<Sidebar.GroupLabel>Favorites</Sidebar.GroupLabel>\n\t<Sidebar.Menu>\n\t\t{#each favorites as item (item.name)}\n\t\t\t<Sidebar.MenuItem>\n\t\t\t\t<Sidebar.MenuButton>\n\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t<a href={item.url} title={item.name} {...props}>\n\t\t\t\t\t\t\t<span>{item.emoji}</span>\n\t\t\t\t\t\t\t<span>{item.name}</span>\n\t\t\t\t\t\t</a>\n\t\t\t\t\t{/snippet}\n\t\t\t\t</Sidebar.MenuButton>\n\t\t\t\t<DropdownMenu.Root>\n\t\t\t\t\t<DropdownMenu.Trigger>\n\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t<Sidebar.MenuAction showOnHover {...props}>\n\t\t\t\t\t\t\t\t<EllipsisIcon />\n\t\t\t\t\t\t\t\t<span class=\"sr-only\">More</span>\n\t\t\t\t\t\t\t</Sidebar.MenuAction>\n\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t</DropdownMenu.Trigger>\n\t\t\t\t\t<DropdownMenu.Content\n\t\t\t\t\t\tclass=\"w-56 rounded-lg\"\n\t\t\t\t\t\tside={sidebar.isMobile ? \"bottom\" : \"right\"}\n\t\t\t\t\t\talign={sidebar.isMobile ? \"end\" : \"start\"}\n\t\t\t\t\t>\n\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t<StarOffIcon class=\"text-muted-foreground\" />\n\t\t\t\t\t\t\t<span>Remove from Favorites</span>\n\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t<LinkIcon class=\"text-muted-foreground\" />\n\t\t\t\t\t\t\t<span>Copy Link</span>\n\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t<ArrowUpRightIcon class=\"text-muted-foreground\" />\n\t\t\t\t\t\t\t<span>Open in New Tab</span>\n\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t<Trash2Icon class=\"text-muted-foreground\" />\n\t\t\t\t\t\t\t<span>Delete</span>\n\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t</DropdownMenu.Content>\n\t\t\t\t</DropdownMenu.Root>\n\t\t\t</Sidebar.MenuItem>\n\t\t{/each}\n\t\t<Sidebar.MenuItem>\n\t\t\t<Sidebar.MenuButton class=\"text-sidebar-foreground/70\">\n\t\t\t\t<EllipsisIcon />\n\t\t\t\t<span>More</span>\n\t\t\t</Sidebar.MenuButton>\n\t\t</Sidebar.MenuItem>\n\t</Sidebar.Menu>\n</Sidebar.Group>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/sidebar-15/components/nav-main.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\timport type { Component } from \"svelte\";\n\n\tlet {\n\t\titems,\n\t}: { items: { title: string; url: string; icon: Component; isActive?: boolean }[] } = $props();\n</script>\n\n<Sidebar.Menu>\n\t{#each items as item (item.title)}\n\t\t<Sidebar.MenuItem>\n\t\t\t<Sidebar.MenuButton isActive={item.isActive}>\n\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t<a href={item.url} {...props}>\n\t\t\t\t\t\t<item.icon />\n\t\t\t\t\t\t<span>{item.title}</span>\n\t\t\t\t\t</a>\n\t\t\t\t{/snippet}\n\t\t\t</Sidebar.MenuButton>\n\t\t</Sidebar.MenuItem>\n\t{/each}\n</Sidebar.Menu>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/sidebar-15/components/nav-secondary.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\timport type { Component, ComponentProps } from \"svelte\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\titems,\n\t\t...restProps\n\t}: ComponentProps<typeof Sidebar.Group> & {\n\t\titems: { title: string; url: string; icon: Component; badge?: string }[];\n\t} = $props();\n</script>\n\n<Sidebar.Group bind:ref {...restProps}>\n\t<Sidebar.GroupContent>\n\t\t<Sidebar.Menu>\n\t\t\t{#each items as item (item.title)}\n\t\t\t\t<Sidebar.MenuItem>\n\t\t\t\t\t<Sidebar.MenuButton>\n\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t<a href={item.url} {...props}>\n\t\t\t\t\t\t\t\t<item.icon />\n\t\t\t\t\t\t\t\t<span>{item.title}</span>\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t</Sidebar.MenuButton>\n\t\t\t\t\t{#if item.badge}\n\t\t\t\t\t\t<Sidebar.MenuBadge>{item.badge}</Sidebar.MenuBadge>\n\t\t\t\t\t{/if}\n\t\t\t\t</Sidebar.MenuItem>\n\t\t\t{/each}\n\t\t</Sidebar.Menu>\n\t</Sidebar.GroupContent>\n</Sidebar.Group>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/sidebar-15/components/nav-user.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Avatar from \"$lib/registry/ui/avatar/index.js\";\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\timport { useSidebar } from \"$lib/registry/ui/sidebar/index.js\";\n\timport BadgeCheckIcon from \"@lucide/svelte/icons/badge-check\";\n\timport BellIcon from \"@lucide/svelte/icons/bell\";\n\timport ChevronsUpDownIcon from \"@lucide/svelte/icons/chevrons-up-down\";\n\timport CreditCardIcon from \"@lucide/svelte/icons/credit-card\";\n\timport LogOutIcon from \"@lucide/svelte/icons/log-out\";\n\timport SparklesIcon from \"@lucide/svelte/icons/sparkles\";\n\n\tlet { user }: { user: { name: string; email: string; avatar: string } } = $props();\n\n\tconst sidebar = useSidebar();\n</script>\n\n<Sidebar.Menu>\n\t<Sidebar.MenuItem>\n\t\t<DropdownMenu.Root>\n\t\t\t<DropdownMenu.Trigger>\n\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t<Sidebar.MenuButton\n\t\t\t\t\t\t{...props}\n\t\t\t\t\t\tsize=\"lg\"\n\t\t\t\t\t\tclass=\"data-[state=open]:bg-sidebar-accent data-[state=open]:text-sidebar-accent-foreground\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<Avatar.Root class=\"size-8 rounded-lg\">\n\t\t\t\t\t\t\t<Avatar.Image src={user.avatar} alt={user.name} />\n\t\t\t\t\t\t\t<Avatar.Fallback class=\"rounded-lg\">CN</Avatar.Fallback>\n\t\t\t\t\t\t</Avatar.Root>\n\t\t\t\t\t\t<div class=\"grid flex-1 text-start text-sm leading-tight\">\n\t\t\t\t\t\t\t<span class=\"truncate font-medium\">{user.name}</span>\n\t\t\t\t\t\t\t<span class=\"truncate text-xs\">{user.email}</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<ChevronsUpDownIcon class=\"ms-auto size-4\" />\n\t\t\t\t\t</Sidebar.MenuButton>\n\t\t\t\t{/snippet}\n\t\t\t</DropdownMenu.Trigger>\n\t\t\t<DropdownMenu.Content\n\t\t\t\tclass=\"w-(--bits-dropdown-menu-anchor-width) min-w-56 rounded-lg\"\n\t\t\t\tside={sidebar.isMobile ? \"bottom\" : \"right\"}\n\t\t\t\talign=\"start\"\n\t\t\t\tsideOffset={4}\n\t\t\t>\n\t\t\t\t<DropdownMenu.Label class=\"p-0 font-normal\">\n\t\t\t\t\t<div class=\"flex items-center gap-2 px-1 py-1.5 text-start text-sm\">\n\t\t\t\t\t\t<Avatar.Root class=\"size-8 rounded-lg\">\n\t\t\t\t\t\t\t<Avatar.Image src={user.avatar} alt={user.name} />\n\t\t\t\t\t\t\t<Avatar.Fallback class=\"rounded-lg\">CN</Avatar.Fallback>\n\t\t\t\t\t\t</Avatar.Root>\n\t\t\t\t\t\t<div class=\"grid flex-1 text-start text-sm leading-tight\">\n\t\t\t\t\t\t\t<span class=\"truncate font-medium\">{user.name}</span>\n\t\t\t\t\t\t\t<span class=\"truncate text-xs\">{user.email}</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</DropdownMenu.Label>\n\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t<DropdownMenu.Group>\n\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t<SparklesIcon />\n\t\t\t\t\t\tUpgrade to Pro\n\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t</DropdownMenu.Group>\n\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t<DropdownMenu.Group>\n\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t<BadgeCheckIcon />\n\t\t\t\t\t\tAccount\n\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t<CreditCardIcon />\n\t\t\t\t\t\tBilling\n\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t<BellIcon />\n\t\t\t\t\t\tNotifications\n\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t</DropdownMenu.Group>\n\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t<LogOutIcon />\n\t\t\t\t\tLog out\n\t\t\t\t</DropdownMenu.Item>\n\t\t\t</DropdownMenu.Content>\n\t\t</DropdownMenu.Root>\n\t</Sidebar.MenuItem>\n</Sidebar.Menu>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/sidebar-15/components/nav-workspaces.svelte",
    "content": "<script lang=\"ts\">\n\timport ChevronRightIcon from \"@lucide/svelte/icons/chevron-right\";\n\timport EllipsisIcon from \"@lucide/svelte/icons/ellipsis\";\n\timport PlusIcon from \"@lucide/svelte/icons/plus\";\n\n\timport * as Collapsible from \"$lib/registry/ui/collapsible/index.js\";\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\n\tlet {\n\t\tworkspaces,\n\t}: { workspaces: { name: string; emoji: string; pages: { name: string; emoji: string }[] }[] } =\n\t\t$props();\n</script>\n\n<Sidebar.Group>\n\t<Sidebar.GroupLabel>Workspaces</Sidebar.GroupLabel>\n\t<Sidebar.GroupContent>\n\t\t<Sidebar.Menu>\n\t\t\t{#each workspaces as workspace (workspace.name)}\n\t\t\t\t<Collapsible.Root>\n\t\t\t\t\t<Sidebar.MenuItem>\n\t\t\t\t\t\t<Sidebar.MenuButton>\n\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t<a href=\"##\" {...props}>\n\t\t\t\t\t\t\t\t\t<span>{workspace.emoji}</span>\n\t\t\t\t\t\t\t\t\t<span>{workspace.name}</span>\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t</Sidebar.MenuButton>\n\t\t\t\t\t\t<Collapsible.Trigger>\n\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t<Sidebar.MenuAction\n\t\t\t\t\t\t\t\t\t{...props}\n\t\t\t\t\t\t\t\t\tclass=\"bg-sidebar-accent text-sidebar-accent-foreground start-2 data-[state=open]:rotate-90\"\n\t\t\t\t\t\t\t\t\tshowOnHover\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<ChevronRightIcon />\n\t\t\t\t\t\t\t\t</Sidebar.MenuAction>\n\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t</Collapsible.Trigger>\n\t\t\t\t\t\t<Sidebar.MenuAction showOnHover>\n\t\t\t\t\t\t\t<PlusIcon />\n\t\t\t\t\t\t</Sidebar.MenuAction>\n\t\t\t\t\t\t<Collapsible.Content>\n\t\t\t\t\t\t\t<Sidebar.MenuSub>\n\t\t\t\t\t\t\t\t{#each workspace.pages as page (page.name)}\n\t\t\t\t\t\t\t\t\t<Sidebar.MenuSubItem>\n\t\t\t\t\t\t\t\t\t\t<Sidebar.MenuSubButton href=\"##\">\n\t\t\t\t\t\t\t\t\t\t\t<span>{page.emoji}</span>\n\t\t\t\t\t\t\t\t\t\t\t<span>{page.name}</span>\n\t\t\t\t\t\t\t\t\t\t</Sidebar.MenuSubButton>\n\t\t\t\t\t\t\t\t\t</Sidebar.MenuSubItem>\n\t\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t</Sidebar.MenuSub>\n\t\t\t\t\t\t</Collapsible.Content>\n\t\t\t\t\t</Sidebar.MenuItem>\n\t\t\t\t</Collapsible.Root>\n\t\t\t{/each}\n\t\t\t<Sidebar.MenuItem>\n\t\t\t\t<Sidebar.MenuButton class=\"text-sidebar-foreground/70\">\n\t\t\t\t\t<EllipsisIcon />\n\t\t\t\t\t<span>More</span>\n\t\t\t\t</Sidebar.MenuButton>\n\t\t\t</Sidebar.MenuItem>\n\t\t</Sidebar.Menu>\n\t</Sidebar.GroupContent>\n</Sidebar.Group>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/sidebar-15/components/sidebar-left.svelte",
    "content": "<script lang=\"ts\">\n\timport AudioWaveformIcon from \"@lucide/svelte/icons/audio-waveform\";\n\timport BlocksIcon from \"@lucide/svelte/icons/blocks\";\n\timport CalendarIcon from \"@lucide/svelte/icons/calendar\";\n\timport CommandIcon from \"@lucide/svelte/icons/command\";\n\timport HouseIcon from \"@lucide/svelte/icons/house\";\n\timport InboxIcon from \"@lucide/svelte/icons/inbox\";\n\timport MessageCircleQuestionIcon from \"@lucide/svelte/icons/message-circle-question\";\n\timport SearchIcon from \"@lucide/svelte/icons/search\";\n\timport Settings2Icon from \"@lucide/svelte/icons/settings-2\";\n\timport SparklesIcon from \"@lucide/svelte/icons/sparkles\";\n\timport Trash2Icon from \"@lucide/svelte/icons/trash-2\";\n\n\timport NavFavorites from \"./nav-favorites.svelte\";\n\timport NavMain from \"./nav-main.svelte\";\n\timport NavSecondary from \"./nav-secondary.svelte\";\n\timport NavWorkspaces from \"./nav-workspaces.svelte\";\n\timport TeamSwitcher from \"./team-switcher.svelte\";\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\timport type { ComponentProps } from \"svelte\";\n\n\t// This is sample data.\n\tconst data = {\n\t\tteams: [\n\t\t\t{\n\t\t\t\tname: \"Acme Inc\",\n\t\t\t\tlogo: CommandIcon,\n\t\t\t\tplan: \"Enterprise\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"Acme Corp.\",\n\t\t\t\tlogo: AudioWaveformIcon,\n\t\t\t\tplan: \"Startup\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"Evil Corp.\",\n\t\t\t\tlogo: CommandIcon,\n\t\t\t\tplan: \"Free\",\n\t\t\t},\n\t\t],\n\t\tnavMain: [\n\t\t\t{\n\t\t\t\ttitle: \"Search\",\n\t\t\t\turl: \"#\",\n\t\t\t\ticon: SearchIcon,\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"Ask AI\",\n\t\t\t\turl: \"#\",\n\t\t\t\ticon: SparklesIcon,\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"Home\",\n\t\t\t\turl: \"#\",\n\t\t\t\ticon: HouseIcon,\n\t\t\t\tisActive: true,\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"Inbox\",\n\t\t\t\turl: \"#\",\n\t\t\t\ticon: InboxIcon,\n\t\t\t\tbadge: \"10\",\n\t\t\t},\n\t\t],\n\t\tnavSecondary: [\n\t\t\t{\n\t\t\t\ttitle: \"Calendar\",\n\t\t\t\turl: \"#\",\n\t\t\t\ticon: CalendarIcon,\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"Settings\",\n\t\t\t\turl: \"#\",\n\t\t\t\ticon: Settings2Icon,\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"Templates\",\n\t\t\t\turl: \"#\",\n\t\t\t\ticon: BlocksIcon,\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"Trash\",\n\t\t\t\turl: \"#\",\n\t\t\t\ticon: Trash2Icon,\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"Help\",\n\t\t\t\turl: \"#\",\n\t\t\t\ticon: MessageCircleQuestionIcon,\n\t\t\t},\n\t\t],\n\t\tfavorites: [\n\t\t\t{\n\t\t\t\tname: \"Project Management & Task Tracking\",\n\t\t\t\turl: \"#\",\n\t\t\t\temoji: \"📊\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"Family Recipe Collection & Meal Planning\",\n\t\t\t\turl: \"#\",\n\t\t\t\temoji: \"🍳\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"Fitness Tracker & Workout Routines\",\n\t\t\t\turl: \"#\",\n\t\t\t\temoji: \"💪\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"Book Notes & Reading List\",\n\t\t\t\turl: \"#\",\n\t\t\t\temoji: \"📚\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"Sustainable Gardening Tips & Plant Care\",\n\t\t\t\turl: \"#\",\n\t\t\t\temoji: \"🌱\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"Language Learning Progress & Resources\",\n\t\t\t\turl: \"#\",\n\t\t\t\temoji: \"🗣️\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"Home Renovation Ideas & Budget Tracker\",\n\t\t\t\turl: \"#\",\n\t\t\t\temoji: \"🏠\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"Personal Finance & Investment Portfolio\",\n\t\t\t\turl: \"#\",\n\t\t\t\temoji: \"💰\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"Movie & TV Show Watchlist with Reviews\",\n\t\t\t\turl: \"#\",\n\t\t\t\temoji: \"🎬\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"Daily Habit Tracker & Goal Setting\",\n\t\t\t\turl: \"#\",\n\t\t\t\temoji: \"✅\",\n\t\t\t},\n\t\t],\n\t\tworkspaces: [\n\t\t\t{\n\t\t\t\tname: \"Personal Life Management\",\n\t\t\t\temoji: \"🏠\",\n\t\t\t\tpages: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"Daily Journal & Reflection\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t\temoji: \"📔\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"Health & Wellness Tracker\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t\temoji: \"🍏\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"Personal Growth & Learning Goals\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t\temoji: \"🌟\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"Professional Development\",\n\t\t\t\temoji: \"💼\",\n\t\t\t\tpages: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"Career Objectives & Milestones\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t\temoji: \"🎯\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"Skill Acquisition & Training Log\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t\temoji: \"🧠\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"Networking Contacts & Events\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t\temoji: \"🤝\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"Creative Projects\",\n\t\t\t\temoji: \"🎨\",\n\t\t\t\tpages: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"Writing Ideas & Story Outlines\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t\temoji: \"✍️\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"Art & Design Portfolio\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t\temoji: \"🖼️\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"Music Composition & Practice Log\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t\temoji: \"🎵\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"Home Management\",\n\t\t\t\temoji: \"🏡\",\n\t\t\t\tpages: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"Household Budget & Expense Tracking\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t\temoji: \"💰\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"Home Maintenance Schedule & Tasks\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t\temoji: \"🔧\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"Family Calendar & Event Planning\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t\temoji: \"📅\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"Travel & Adventure\",\n\t\t\t\temoji: \"🧳\",\n\t\t\t\tpages: [\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"Trip Planning & Itineraries\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t\temoji: \"🗺️\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"Travel Bucket List & Inspiration\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t\temoji: \"🌎\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tname: \"Travel Journal & Photo Gallery\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t\temoji: \"📸\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t};\n\n\tlet { ref = $bindable(null), ...restProps }: ComponentProps<typeof Sidebar.Root> = $props();\n</script>\n\n<Sidebar.Root bind:ref class=\"border-e-0\" {...restProps}>\n\t<Sidebar.Header>\n\t\t<TeamSwitcher teams={data.teams} />\n\t\t<NavMain items={data.navMain} />\n\t</Sidebar.Header>\n\t<Sidebar.Content>\n\t\t<NavFavorites favorites={data.favorites} />\n\t\t<NavWorkspaces workspaces={data.workspaces} />\n\t\t<NavSecondary items={data.navSecondary} class=\"mt-auto\" />\n\t</Sidebar.Content>\n\t<Sidebar.Rail />\n</Sidebar.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/sidebar-15/components/sidebar-right.svelte",
    "content": "<script lang=\"ts\">\n\timport Calendars from \"./calendars.svelte\";\n\timport DatePicker from \"./date-picker.svelte\";\n\timport NavUser from \"./nav-user.svelte\";\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\timport PlusIcon from \"@lucide/svelte/icons/plus\";\n\timport type { ComponentProps } from \"svelte\";\n\n\t// This is sample data.\n\tconst data = {\n\t\tuser: {\n\t\t\tname: \"shadcn\",\n\t\t\temail: \"m@example.com\",\n\t\t\tavatar: \"/avatars/shadcn.jpg\",\n\t\t},\n\t\tcalendars: [\n\t\t\t{\n\t\t\t\tname: \"My Calendars\",\n\t\t\t\titems: [\"Personal\", \"Work\", \"Family\"],\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"Favorites\",\n\t\t\t\titems: [\"Holidays\", \"Birthdays\"],\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"Other\",\n\t\t\t\titems: [\"Travel\", \"Reminders\", \"Deadlines\"],\n\t\t\t},\n\t\t],\n\t};\n\n\tlet { ref = $bindable(null), ...restProps }: ComponentProps<typeof Sidebar.Root> = $props();\n</script>\n\n<Sidebar.Root\n\tbind:ref\n\tcollapsible=\"none\"\n\tclass=\"sticky top-0 hidden h-svh border-s lg:flex\"\n\t{...restProps}\n>\n\t<Sidebar.Header class=\"border-sidebar-border h-16 border-b\">\n\t\t<NavUser user={data.user} />\n\t</Sidebar.Header>\n\t<Sidebar.Content>\n\t\t<DatePicker />\n\t\t<Sidebar.Separator class=\"mx-0\" />\n\t\t<Calendars calendars={data.calendars} />\n\t</Sidebar.Content>\n\t<Sidebar.Footer>\n\t\t<Sidebar.Menu>\n\t\t\t<Sidebar.MenuItem>\n\t\t\t\t<Sidebar.MenuButton>\n\t\t\t\t\t<PlusIcon />\n\t\t\t\t\t<span>New Calendar</span>\n\t\t\t\t</Sidebar.MenuButton>\n\t\t\t</Sidebar.MenuItem>\n\t\t</Sidebar.Menu>\n\t</Sidebar.Footer>\n</Sidebar.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/sidebar-15/components/team-switcher.svelte",
    "content": "<script lang=\"ts\">\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\timport ChevronDownIcon from \"@lucide/svelte/icons/chevron-down\";\n\timport PlusIcon from \"@lucide/svelte/icons/plus\";\n\timport type { Component } from \"svelte\";\n\n\tlet {\n\t\tteams,\n\t}: {\n\t\tteams: {\n\t\t\tname: string;\n\t\t\tlogo: Component;\n\t\t\tplan: string;\n\t\t}[];\n\t} = $props();\n\n\t// svelte-ignore state_referenced_locally\n\tlet activeTeam = $state(teams[0]);\n</script>\n\n<Sidebar.Menu>\n\t<Sidebar.MenuItem>\n\t\t<DropdownMenu.Root>\n\t\t\t<DropdownMenu.Trigger>\n\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t<Sidebar.MenuButton {...props} class=\"w-fit px-1.5\">\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclass=\"bg-sidebar-primary text-sidebar-primary-foreground flex aspect-square size-5 items-center justify-center rounded-md\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<activeTeam.logo class=\"size-3\" />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<span class=\"truncate font-medium\">{activeTeam.name}</span>\n\t\t\t\t\t\t<ChevronDownIcon class=\"opacity-50\" />\n\t\t\t\t\t</Sidebar.MenuButton>\n\t\t\t\t{/snippet}\n\t\t\t</DropdownMenu.Trigger>\n\t\t\t<DropdownMenu.Content\n\t\t\t\tclass=\"w-64 rounded-lg\"\n\t\t\t\talign=\"start\"\n\t\t\t\tside=\"bottom\"\n\t\t\t\tsideOffset={4}\n\t\t\t>\n\t\t\t\t<DropdownMenu.Label class=\"text-muted-foreground text-xs\">Teams</DropdownMenu.Label>\n\t\t\t\t{#each teams as team, index (team.name)}\n\t\t\t\t\t<DropdownMenu.Item onSelect={() => (activeTeam = team)} class=\"gap-2 p-2\">\n\t\t\t\t\t\t<div class=\"flex size-6 items-center justify-center rounded-xs border\">\n\t\t\t\t\t\t\t<team.logo class=\"size-4 shrink-0\" />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t{team.name}\n\t\t\t\t\t\t<DropdownMenu.Shortcut>⌘{index + 1}</DropdownMenu.Shortcut>\n\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t{/each}\n\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t<DropdownMenu.Item class=\"gap-2 p-2\">\n\t\t\t\t\t<div\n\t\t\t\t\t\tclass=\"bg-background flex size-6 items-center justify-center rounded-md border\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<PlusIcon class=\"size-4\" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"text-muted-foreground font-medium\">Add team</div>\n\t\t\t\t</DropdownMenu.Item>\n\t\t\t</DropdownMenu.Content>\n\t\t</DropdownMenu.Root>\n\t</Sidebar.MenuItem>\n</Sidebar.Menu>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/sidebar-16/+page.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\timport SiteHeader from \"./components/site-header.svelte\";\n\timport AppSidebar from \"./components/app-sidebar.svelte\";\n</script>\n\n<div class=\"[--header-height:calc(--spacing(14))]\">\n\t<Sidebar.Provider class=\"flex flex-col\">\n\t\t<SiteHeader />\n\t\t<div class=\"flex flex-1\">\n\t\t\t<AppSidebar />\n\t\t\t<Sidebar.Inset>\n\t\t\t\t<div class=\"flex flex-1 flex-col gap-4 p-4\">\n\t\t\t\t\t<div class=\"grid auto-rows-min gap-4 md:grid-cols-3\">\n\t\t\t\t\t\t<div class=\"bg-muted/50 aspect-video rounded-xl\"></div>\n\t\t\t\t\t\t<div class=\"bg-muted/50 aspect-video rounded-xl\"></div>\n\t\t\t\t\t\t<div class=\"bg-muted/50 aspect-video rounded-xl\"></div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"bg-muted/50 min-h-screen flex-1 rounded-xl md:min-h-min\"></div>\n\t\t\t\t</div>\n\t\t\t</Sidebar.Inset>\n\t\t</div>\n\t</Sidebar.Provider>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/sidebar-16/components/app-sidebar.svelte",
    "content": "<script lang=\"ts\" module>\n\timport SquareTerminalIcon from \"@lucide/svelte/icons/square-terminal\";\n\timport BotIcon from \"@lucide/svelte/icons/bot\";\n\timport BookOpenIcon from \"@lucide/svelte/icons/book-open\";\n\timport Settings2Icon from \"@lucide/svelte/icons/settings-2\";\n\timport LifeBuoyIcon from \"@lucide/svelte/icons/life-buoy\";\n\timport SendIcon from \"@lucide/svelte/icons/send\";\n\timport FrameIcon from \"@lucide/svelte/icons/frame\";\n\timport PieChartIcon from \"@lucide/svelte/icons/pie-chart\";\n\timport MapIcon from \"@lucide/svelte/icons/map\";\n\timport CommandIcon from \"@lucide/svelte/icons/command\";\n\n\tconst data = {\n\t\tuser: {\n\t\t\tname: \"shadcn\",\n\t\t\temail: \"m@example.com\",\n\t\t\tavatar: \"/avatars/shadcn.jpg\",\n\t\t},\n\t\tnavMain: [\n\t\t\t{\n\t\t\t\ttitle: \"Playground\",\n\t\t\t\turl: \"#\",\n\t\t\t\ticon: SquareTerminalIcon,\n\t\t\t\tisActive: true,\n\t\t\t\titems: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"History\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Starred\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Settings\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"Models\",\n\t\t\t\turl: \"#\",\n\t\t\t\ticon: BotIcon,\n\t\t\t\titems: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Genesis\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Explorer\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Quantum\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"Documentation\",\n\t\t\t\turl: \"#\",\n\t\t\t\ticon: BookOpenIcon,\n\t\t\t\titems: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Introduction\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Get Started\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Tutorials\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Changelog\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"Settings\",\n\t\t\t\turl: \"#\",\n\t\t\t\ticon: Settings2Icon,\n\t\t\t\titems: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"General\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Team\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Billing\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Limits\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t\tnavSecondary: [\n\t\t\t{\n\t\t\t\ttitle: \"Support\",\n\t\t\t\turl: \"#\",\n\t\t\t\ticon: LifeBuoyIcon,\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"Feedback\",\n\t\t\t\turl: \"#\",\n\t\t\t\ticon: SendIcon,\n\t\t\t},\n\t\t],\n\t\tprojects: [\n\t\t\t{\n\t\t\t\tname: \"Design Engineering\",\n\t\t\t\turl: \"#\",\n\t\t\t\ticon: FrameIcon,\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"Sales & Marketing\",\n\t\t\t\turl: \"#\",\n\t\t\t\ticon: PieChartIcon,\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"Travel\",\n\t\t\t\turl: \"#\",\n\t\t\t\ticon: MapIcon,\n\t\t\t},\n\t\t],\n\t};\n</script>\n\n<script lang=\"ts\">\n\timport type { ComponentProps } from \"svelte\";\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\timport NavMain from \"./nav-main.svelte\";\n\timport NavProjects from \"./nav-projects.svelte\";\n\timport NavSecondary from \"./nav-secondary.svelte\";\n\timport NavUser from \"./nav-user.svelte\";\n\n\tlet { ref = $bindable(null), ...restProps }: ComponentProps<typeof Sidebar.Root> = $props();\n</script>\n\n<Sidebar.Root\n\tbind:ref\n\tclass=\"top-(--header-height) h-[calc(100svh-var(--header-height))]!\"\n\t{...restProps}\n>\n\t<Sidebar.Header>\n\t\t<Sidebar.Menu>\n\t\t\t<Sidebar.MenuItem>\n\t\t\t\t<Sidebar.MenuButton size=\"lg\">\n\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t<a href=\"##\" {...props}>\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclass=\"bg-sidebar-primary text-sidebar-primary-foreground flex aspect-square size-8 items-center justify-center rounded-lg\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<CommandIcon class=\"size-4\" />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"grid flex-1 text-start text-sm leading-tight\">\n\t\t\t\t\t\t\t\t<span class=\"truncate font-medium\">Acme Inc</span>\n\t\t\t\t\t\t\t\t<span class=\"truncate text-xs\">Enterprise</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</a>\n\t\t\t\t\t{/snippet}\n\t\t\t\t</Sidebar.MenuButton>\n\t\t\t</Sidebar.MenuItem>\n\t\t</Sidebar.Menu>\n\t</Sidebar.Header>\n\t<Sidebar.Content>\n\t\t<NavMain items={data.navMain} />\n\t\t<NavProjects projects={data.projects} />\n\t\t<NavSecondary items={data.navSecondary} class=\"mt-auto\" />\n\t</Sidebar.Content>\n\t<Sidebar.Footer>\n\t\t<NavUser user={data.user} />\n\t</Sidebar.Footer>\n</Sidebar.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/sidebar-16/components/nav-main.svelte",
    "content": "<script lang=\"ts\">\n\timport type { Component } from \"svelte\";\n\timport ChevronRightIcon from \"@lucide/svelte/icons/chevron-right\";\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\timport * as Collapsible from \"$lib/registry/ui/collapsible/index.js\";\n\n\tlet {\n\t\titems,\n\t}: {\n\t\titems: {\n\t\t\ttitle: string;\n\t\t\turl: string;\n\t\t\ticon: Component;\n\t\t\tisActive?: boolean;\n\t\t\titems?: {\n\t\t\t\ttitle: string;\n\t\t\t\turl: string;\n\t\t\t}[];\n\t\t}[];\n\t} = $props();\n</script>\n\n<Sidebar.Group>\n\t<Sidebar.GroupLabel>Platform</Sidebar.GroupLabel>\n\t<Sidebar.Menu>\n\t\t{#each items as item (item.title)}\n\t\t\t<Collapsible.Root open={item.isActive}>\n\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t<Sidebar.MenuItem {...props}>\n\t\t\t\t\t\t<Sidebar.MenuButton tooltipContent={item.title}>\n\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t<a href={item.url} {...props}>\n\t\t\t\t\t\t\t\t\t<item.icon />\n\t\t\t\t\t\t\t\t\t<span>{item.title}</span>\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t</Sidebar.MenuButton>\n\t\t\t\t\t\t{#if item.items?.length}\n\t\t\t\t\t\t\t<Collapsible.Trigger>\n\t\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t\t<Sidebar.MenuAction\n\t\t\t\t\t\t\t\t\t\t{...props}\n\t\t\t\t\t\t\t\t\t\tclass=\"data-[state=open]:rotate-90\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<ChevronRightIcon />\n\t\t\t\t\t\t\t\t\t\t<span class=\"sr-only\">Toggle</span>\n\t\t\t\t\t\t\t\t\t</Sidebar.MenuAction>\n\t\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t\t</Collapsible.Trigger>\n\t\t\t\t\t\t\t<Collapsible.Content>\n\t\t\t\t\t\t\t\t<Sidebar.MenuSub>\n\t\t\t\t\t\t\t\t\t{#each item.items as subItem (subItem.title)}\n\t\t\t\t\t\t\t\t\t\t<Sidebar.MenuSubItem>\n\t\t\t\t\t\t\t\t\t\t\t<Sidebar.MenuSubButton>\n\t\t\t\t\t\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t\t\t\t\t\t<a href={subItem.url} {...props}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<span>{subItem.title}</span>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t\t\t\t\t\t</Sidebar.MenuSubButton>\n\t\t\t\t\t\t\t\t\t\t</Sidebar.MenuSubItem>\n\t\t\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t\t</Sidebar.MenuSub>\n\t\t\t\t\t\t\t</Collapsible.Content>\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t</Sidebar.MenuItem>\n\t\t\t\t{/snippet}\n\t\t\t</Collapsible.Root>\n\t\t{/each}\n\t</Sidebar.Menu>\n</Sidebar.Group>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/sidebar-16/components/nav-projects.svelte",
    "content": "<script lang=\"ts\">\n\timport type { Component } from \"svelte\";\n\timport FolderIcon from \"@lucide/svelte/icons/folder\";\n\timport EllipsisIcon from \"@lucide/svelte/icons/ellipsis\";\n\timport ShareIcon from \"@lucide/svelte/icons/share\";\n\timport Trash2Icon from \"@lucide/svelte/icons/trash-2\";\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\n\tlet {\n\t\tprojects,\n\t}: {\n\t\tprojects: {\n\t\t\tname: string;\n\t\t\turl: string;\n\t\t\ticon: Component;\n\t\t}[];\n\t} = $props();\n\n\tconst sidebar = Sidebar.useSidebar();\n</script>\n\n<Sidebar.Group class=\"group-data-[collapsible=icon]:hidden\">\n\t<Sidebar.GroupLabel>Projects</Sidebar.GroupLabel>\n\t<Sidebar.Menu>\n\t\t{#each projects as item (item.name)}\n\t\t\t<Sidebar.MenuItem>\n\t\t\t\t<Sidebar.MenuButton>\n\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t<a href={item.url} {...props}>\n\t\t\t\t\t\t\t<item.icon />\n\t\t\t\t\t\t\t<span>{item.name}</span>\n\t\t\t\t\t\t</a>\n\t\t\t\t\t{/snippet}\n\t\t\t\t</Sidebar.MenuButton>\n\t\t\t\t<DropdownMenu.Root>\n\t\t\t\t\t<DropdownMenu.Trigger>\n\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t<Sidebar.MenuAction showOnHover {...props}>\n\t\t\t\t\t\t\t\t<EllipsisIcon />\n\t\t\t\t\t\t\t\t<span class=\"sr-only\">More</span>\n\t\t\t\t\t\t\t</Sidebar.MenuAction>\n\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t</DropdownMenu.Trigger>\n\t\t\t\t\t<DropdownMenu.Content\n\t\t\t\t\t\tclass=\"w-48\"\n\t\t\t\t\t\tside={sidebar.isMobile ? \"bottom\" : \"right\"}\n\t\t\t\t\t\talign={sidebar.isMobile ? \"end\" : \"start\"}\n\t\t\t\t\t>\n\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t<FolderIcon class=\"text-muted-foreground\" />\n\t\t\t\t\t\t\t<span>View Project</span>\n\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t<ShareIcon class=\"text-muted-foreground\" />\n\t\t\t\t\t\t\t<span>Share Project</span>\n\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t<Trash2Icon class=\"text-muted-foreground\" />\n\t\t\t\t\t\t\t<span>Delete Project</span>\n\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t</DropdownMenu.Content>\n\t\t\t\t</DropdownMenu.Root>\n\t\t\t</Sidebar.MenuItem>\n\t\t{/each}\n\t\t<Sidebar.MenuItem>\n\t\t\t<Sidebar.MenuButton>\n\t\t\t\t<EllipsisIcon />\n\t\t\t\t<span>More</span>\n\t\t\t</Sidebar.MenuButton>\n\t\t</Sidebar.MenuItem>\n\t</Sidebar.Menu>\n</Sidebar.Group>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/sidebar-16/components/nav-secondary.svelte",
    "content": "<script lang=\"ts\">\n\timport type { Component, ComponentProps } from \"svelte\";\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\n\tlet {\n\t\titems,\n\t\t...restProps\n\t}: {\n\t\titems: {\n\t\t\ttitle: string;\n\t\t\turl: string;\n\t\t\ticon: Component;\n\t\t}[];\n\t} & ComponentProps<typeof Sidebar.Group> = $props();\n</script>\n\n<Sidebar.Group {...restProps}>\n\t<Sidebar.GroupContent>\n\t\t<Sidebar.Menu>\n\t\t\t{#each items as item (item.title)}\n\t\t\t\t<Sidebar.MenuItem>\n\t\t\t\t\t<Sidebar.MenuButton size=\"sm\">\n\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t<a href={item.url} {...props}>\n\t\t\t\t\t\t\t\t<item.icon />\n\t\t\t\t\t\t\t\t<span>{item.title}</span>\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t</Sidebar.MenuButton>\n\t\t\t\t</Sidebar.MenuItem>\n\t\t\t{/each}\n\t\t</Sidebar.Menu>\n\t</Sidebar.GroupContent>\n</Sidebar.Group>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/sidebar-16/components/nav-user.svelte",
    "content": "<script lang=\"ts\">\n\timport BadgeCheckIcon from \"@lucide/svelte/icons/badge-check\";\n\timport BellIcon from \"@lucide/svelte/icons/bell\";\n\timport ChevronsUpDownIcon from \"@lucide/svelte/icons/chevrons-up-down\";\n\timport CreditCardIcon from \"@lucide/svelte/icons/credit-card\";\n\timport LogOutIcon from \"@lucide/svelte/icons/log-out\";\n\timport SparklesIcon from \"@lucide/svelte/icons/sparkles\";\n\n\timport * as Avatar from \"$lib/registry/ui/avatar/index.js\";\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\n\tlet {\n\t\tuser,\n\t}: {\n\t\tuser: {\n\t\t\tname: string;\n\t\t\temail: string;\n\t\t\tavatar: string;\n\t\t};\n\t} = $props();\n\n\tconst sidebar = Sidebar.useSidebar();\n</script>\n\n<Sidebar.Menu>\n\t<Sidebar.MenuItem>\n\t\t<DropdownMenu.Root>\n\t\t\t<DropdownMenu.Trigger>\n\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t<Sidebar.MenuButton\n\t\t\t\t\t\tsize=\"lg\"\n\t\t\t\t\t\tclass=\"data-[state=open]:bg-sidebar-accent data-[state=open]:text-sidebar-accent-foreground\"\n\t\t\t\t\t\t{...props}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Avatar.Root class=\"size-8 rounded-lg\">\n\t\t\t\t\t\t\t<Avatar.Image src={user.avatar} alt={user.name} />\n\t\t\t\t\t\t\t<Avatar.Fallback class=\"rounded-lg\">CN</Avatar.Fallback>\n\t\t\t\t\t\t</Avatar.Root>\n\t\t\t\t\t\t<div class=\"grid flex-1 text-start text-sm leading-tight\">\n\t\t\t\t\t\t\t<span class=\"truncate font-medium\">{user.name}</span>\n\t\t\t\t\t\t\t<span class=\"truncate text-xs\">{user.email}</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<ChevronsUpDownIcon class=\"ms-auto size-4\" />\n\t\t\t\t\t</Sidebar.MenuButton>\n\t\t\t\t{/snippet}\n\t\t\t</DropdownMenu.Trigger>\n\t\t\t<DropdownMenu.Content\n\t\t\t\tclass=\"w-(--bits-dropdown-menu-anchor-width) min-w-56 rounded-lg\"\n\t\t\t\tside={sidebar.isMobile ? \"bottom\" : \"right\"}\n\t\t\t\talign=\"end\"\n\t\t\t\tsideOffset={4}\n\t\t\t>\n\t\t\t\t<DropdownMenu.Label class=\"p-0 font-normal\">\n\t\t\t\t\t<div class=\"flex items-center gap-2 px-1 py-1.5 text-start text-sm\">\n\t\t\t\t\t\t<Avatar.Root class=\"size-8 rounded-lg\">\n\t\t\t\t\t\t\t<Avatar.Image src={user.avatar} alt={user.name} />\n\t\t\t\t\t\t\t<Avatar.Fallback class=\"rounded-lg\">CN</Avatar.Fallback>\n\t\t\t\t\t\t</Avatar.Root>\n\t\t\t\t\t\t<div class=\"grid flex-1 text-start text-sm leading-tight\">\n\t\t\t\t\t\t\t<span class=\"truncate font-medium\">{user.name}</span>\n\t\t\t\t\t\t\t<span class=\"truncate text-xs\">{user.email}</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</DropdownMenu.Label>\n\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t<DropdownMenu.Group>\n\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t<SparklesIcon />\n\t\t\t\t\t\tUpgrade to Pro\n\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t</DropdownMenu.Group>\n\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t<DropdownMenu.Group>\n\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t<BadgeCheckIcon />\n\t\t\t\t\t\tAccount\n\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t<CreditCardIcon />\n\t\t\t\t\t\tBilling\n\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t<BellIcon />\n\t\t\t\t\t\tNotifications\n\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t</DropdownMenu.Group>\n\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t<LogOutIcon />\n\t\t\t\t\tLog out\n\t\t\t\t</DropdownMenu.Item>\n\t\t\t</DropdownMenu.Content>\n\t\t</DropdownMenu.Root>\n\t</Sidebar.MenuItem>\n</Sidebar.Menu>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/sidebar-16/components/search-form.svelte",
    "content": "<script lang=\"ts\">\n\timport SearchIcon from \"@lucide/svelte/icons/search\";\n\timport { Label } from \"$lib/registry/ui/label/index.js\";\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\timport type { HTMLFormAttributes } from \"svelte/elements\";\n\timport type { WithElementRef } from \"$lib/utils.js\";\n\n\tlet { ref = $bindable(null), ...restProps }: WithElementRef<HTMLFormAttributes> = $props();\n</script>\n\n<form {...restProps} bind:this={ref}>\n\t<div class=\"relative\">\n\t\t<Label for=\"search\" class=\"sr-only\">Search</Label>\n\t\t<Sidebar.Input id=\"search\" placeholder=\"Type to search...\" class=\"h-8 ps-7\" />\n\t\t<SearchIcon\n\t\t\tclass=\"pointer-events-none absolute start-2 top-1/2 size-4 -translate-y-1/2 opacity-50 select-none\"\n\t\t/>\n\t</div>\n</form>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/sidebar-16/components/site-header.svelte",
    "content": "<script lang=\"ts\">\n\timport SidebarIcon from \"@lucide/svelte/icons/sidebar\";\n\timport SearchForm from \"./search-form.svelte\";\n\timport * as Breadcrumb from \"$lib/registry/ui/breadcrumb/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport { Separator } from \"$lib/registry/ui/separator/index.js\";\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\n\tconst sidebar = Sidebar.useSidebar();\n</script>\n\n<header class=\"bg-background sticky top-0 z-50 flex w-full items-center border-b\">\n\t<div class=\"flex h-(--header-height) w-full items-center gap-2 px-4\">\n\t\t<Button class=\"size-8\" variant=\"ghost\" size=\"icon\" onclick={sidebar.toggle}>\n\t\t\t<SidebarIcon />\n\t\t</Button>\n\t\t<Separator orientation=\"vertical\" class=\"me-2 h-4\" />\n\t\t<Breadcrumb.Root class=\"hidden sm:block\">\n\t\t\t<Breadcrumb.List>\n\t\t\t\t<Breadcrumb.Item>\n\t\t\t\t\t<Breadcrumb.Link href=\"##\">Build Your Application</Breadcrumb.Link>\n\t\t\t\t</Breadcrumb.Item>\n\t\t\t\t<Breadcrumb.Separator />\n\t\t\t\t<Breadcrumb.Item>\n\t\t\t\t\t<Breadcrumb.Page>Data Fetching</Breadcrumb.Page>\n\t\t\t\t</Breadcrumb.Item>\n\t\t\t</Breadcrumb.List>\n\t\t</Breadcrumb.Root>\n\t\t<SearchForm class=\"w-full sm:ms-auto sm:w-auto\" />\n\t</div>\n</header>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/signup-01/+page.svelte",
    "content": "<script>\n\timport SignupForm from \"./components/signup-form.svelte\";\n</script>\n\n<div class=\"flex min-h-svh w-full items-center justify-center p-6 md:p-10\">\n\t<div class=\"w-full max-w-sm\">\n\t\t<SignupForm />\n\t</div>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/signup-01/components/signup-form.svelte",
    "content": "<script lang=\"ts\">\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport { Input } from \"$lib/registry/ui/input/index.js\";\n\timport type { ComponentProps } from \"svelte\";\n\n\tlet { ...restProps }: ComponentProps<typeof Card.Root> = $props();\n</script>\n\n<Card.Root {...restProps}>\n\t<Card.Header>\n\t\t<Card.Title>Create an account</Card.Title>\n\t\t<Card.Description>Enter your information below to create your account</Card.Description>\n\t</Card.Header>\n\t<Card.Content>\n\t\t<form>\n\t\t\t<Field.Group>\n\t\t\t\t<Field.Field>\n\t\t\t\t\t<Field.Label for=\"name\">Full Name</Field.Label>\n\t\t\t\t\t<Input id=\"name\" type=\"text\" placeholder=\"John Doe\" required />\n\t\t\t\t</Field.Field>\n\t\t\t\t<Field.Field>\n\t\t\t\t\t<Field.Label for=\"email\">Email</Field.Label>\n\t\t\t\t\t<Input id=\"email\" type=\"email\" placeholder=\"m@example.com\" required />\n\t\t\t\t\t<Field.Description>\n\t\t\t\t\t\tWe'll use this to contact you. We will not share your email with anyone\n\t\t\t\t\t\telse.\n\t\t\t\t\t</Field.Description>\n\t\t\t\t</Field.Field>\n\t\t\t\t<Field.Field>\n\t\t\t\t\t<Field.Label for=\"password\">Password</Field.Label>\n\t\t\t\t\t<Input id=\"password\" type=\"password\" required />\n\t\t\t\t\t<Field.Description>Must be at least 8 characters long.</Field.Description>\n\t\t\t\t</Field.Field>\n\t\t\t\t<Field.Field>\n\t\t\t\t\t<Field.Label for=\"confirm-password\">Confirm Password</Field.Label>\n\t\t\t\t\t<Input id=\"confirm-password\" type=\"password\" required />\n\t\t\t\t\t<Field.Description>Please confirm your password.</Field.Description>\n\t\t\t\t</Field.Field>\n\t\t\t\t<Field.Group>\n\t\t\t\t\t<Field.Field>\n\t\t\t\t\t\t<Button type=\"submit\">Create Account</Button>\n\t\t\t\t\t\t<Button variant=\"outline\" type=\"button\">Sign up with Google</Button>\n\t\t\t\t\t\t<Field.Description class=\"px-6 text-center\">\n\t\t\t\t\t\t\tAlready have an account? <a href=\"#/\">Sign in</a>\n\t\t\t\t\t\t</Field.Description>\n\t\t\t\t\t</Field.Field>\n\t\t\t\t</Field.Group>\n\t\t\t</Field.Group>\n\t\t</form>\n\t</Card.Content>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/signup-02/+page.svelte",
    "content": "<script>\n\timport GalleryVerticalEndIcon from \"@lucide/svelte/icons/gallery-vertical-end\";\n\timport SignupForm from \"./components/signup-form.svelte\";\n</script>\n\n<div class=\"grid min-h-svh lg:grid-cols-2\">\n\t<div class=\"flex flex-col gap-4 p-6 md:p-10\">\n\t\t<div class=\"flex justify-center gap-2 md:justify-start\">\n\t\t\t<a href=\"#/\" class=\"flex items-center gap-2 font-medium\">\n\t\t\t\t<div\n\t\t\t\t\tclass=\"bg-primary text-primary-foreground flex size-6 items-center justify-center rounded-md\"\n\t\t\t\t>\n\t\t\t\t\t<GalleryVerticalEndIcon class=\"size-4\" />\n\t\t\t\t</div>\n\t\t\t\tAcme Inc.\n\t\t\t</a>\n\t\t</div>\n\t\t<div class=\"flex flex-1 items-center justify-center\">\n\t\t\t<div class=\"w-full max-w-xs\">\n\t\t\t\t<SignupForm />\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\t<div class=\"bg-muted relative hidden lg:block\">\n\t\t<img\n\t\t\tsrc=\"/placeholder.svg\"\n\t\t\talt=\"\"\n\t\t\tclass=\"absolute inset-0 h-full w-full object-cover dark:brightness-[0.2] dark:grayscale\"\n\t\t/>\n\t</div>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/signup-02/components/signup-form.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn } from \"$lib/utils.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport { Input } from \"$lib/registry/ui/input/index.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet { class: className, ...restProps }: HTMLAttributes<HTMLFormElement> = $props();\n</script>\n\n<form class={cn(\"flex flex-col gap-6\", className)} {...restProps}>\n\t<Field.Group>\n\t\t<div class=\"flex flex-col items-center gap-1 text-center\">\n\t\t\t<h1 class=\"text-2xl font-bold\">Create your account</h1>\n\t\t\t<p class=\"text-muted-foreground text-sm text-balance\">\n\t\t\t\tFill in the form below to create your account\n\t\t\t</p>\n\t\t</div>\n\t\t<Field.Field>\n\t\t\t<Field.Label for=\"name\">Full Name</Field.Label>\n\t\t\t<Input id=\"name\" type=\"text\" placeholder=\"John Doe\" required />\n\t\t</Field.Field>\n\t\t<Field.Field>\n\t\t\t<Field.Label for=\"email\">Email</Field.Label>\n\t\t\t<Input id=\"email\" type=\"email\" placeholder=\"m@example.com\" required />\n\t\t\t<Field.Description>\n\t\t\t\tWe'll use this to contact you. We will not share your email with anyone else.\n\t\t\t</Field.Description>\n\t\t</Field.Field>\n\t\t<Field.Field>\n\t\t\t<Field.Label for=\"password\">Password</Field.Label>\n\t\t\t<Input id=\"password\" type=\"password\" required />\n\t\t\t<Field.Description>Must be at least 8 characters long.</Field.Description>\n\t\t</Field.Field>\n\t\t<Field.Field>\n\t\t\t<Field.Label for=\"confirm-password\">Confirm Password</Field.Label>\n\t\t\t<Input id=\"confirm-password\" type=\"password\" required />\n\t\t\t<Field.Description>Please confirm your password.</Field.Description>\n\t\t</Field.Field>\n\t\t<Field.Field>\n\t\t\t<Button type=\"submit\">Create Account</Button>\n\t\t</Field.Field>\n\t\t<Field.Separator>Or continue with</Field.Separator>\n\t\t<Field.Field>\n\t\t\t<Button variant=\"outline\" type=\"button\">\n\t\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n\t\t\t\t\t<path\n\t\t\t\t\t\td=\"M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12\"\n\t\t\t\t\t\tfill=\"currentColor\"\n\t\t\t\t\t/>\n\t\t\t\t</svg>\n\t\t\t\tSign up with GitHub\n\t\t\t</Button>\n\t\t\t<Field.Description class=\"px-6 text-center\">\n\t\t\t\tAlready have an account? <a href=\"#/\">Sign in</a>\n\t\t\t</Field.Description>\n\t\t</Field.Field>\n\t</Field.Group>\n</form>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/signup-03/+page.svelte",
    "content": "<script>\n\timport GalleryVerticalEndIcon from \"@lucide/svelte/icons/gallery-vertical-end\";\n\timport SignupForm from \"./components/signup-form.svelte\";\n</script>\n\n<div class=\"bg-muted flex min-h-svh flex-col items-center justify-center gap-6 p-6 md:p-10\">\n\t<div class=\"flex w-full max-w-sm flex-col gap-6\">\n\t\t<a href=\"#/\" class=\"flex items-center gap-2 self-center font-medium\">\n\t\t\t<div\n\t\t\t\tclass=\"bg-primary text-primary-foreground flex size-6 items-center justify-center rounded-md\"\n\t\t\t>\n\t\t\t\t<GalleryVerticalEndIcon class=\"size-4\" />\n\t\t\t</div>\n\t\t\tAcme Inc.\n\t\t</a>\n\t\t<SignupForm />\n\t</div>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/signup-03/components/signup-form.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn } from \"$lib/utils.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport { Input } from \"$lib/registry/ui/input/index.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet { class: className, ...restProps }: HTMLAttributes<HTMLDivElement> = $props();\n</script>\n\n<div class={cn(\"flex flex-col gap-6\", className)} {...restProps}>\n\t<Card.Root>\n\t\t<Card.Header class=\"text-center\">\n\t\t\t<Card.Title class=\"text-xl\">Create your account</Card.Title>\n\t\t\t<Card.Description>Enter your email below to create your account</Card.Description>\n\t\t</Card.Header>\n\t\t<Card.Content>\n\t\t\t<form>\n\t\t\t\t<Field.Group>\n\t\t\t\t\t<Field.Field>\n\t\t\t\t\t\t<Field.Label for=\"name\">Full Name</Field.Label>\n\t\t\t\t\t\t<Input id=\"name\" type=\"text\" placeholder=\"John Doe\" required />\n\t\t\t\t\t</Field.Field>\n\t\t\t\t\t<Field.Field>\n\t\t\t\t\t\t<Field.Label for=\"email\">Email</Field.Label>\n\t\t\t\t\t\t<Input id=\"email\" type=\"email\" placeholder=\"m@example.com\" required />\n\t\t\t\t\t</Field.Field>\n\t\t\t\t\t<Field.Field>\n\t\t\t\t\t\t<Field.Field class=\"grid grid-cols-2 gap-4\">\n\t\t\t\t\t\t\t<Field.Field>\n\t\t\t\t\t\t\t\t<Field.Label for=\"password\">Password</Field.Label>\n\t\t\t\t\t\t\t\t<Input id=\"password\" type=\"password\" required />\n\t\t\t\t\t\t\t</Field.Field>\n\t\t\t\t\t\t\t<Field.Field>\n\t\t\t\t\t\t\t\t<Field.Label for=\"confirm-password\">Confirm Password</Field.Label>\n\t\t\t\t\t\t\t\t<Input id=\"confirm-password\" type=\"password\" required />\n\t\t\t\t\t\t\t</Field.Field>\n\t\t\t\t\t\t</Field.Field>\n\t\t\t\t\t\t<Field.Description>Must be at least 8 characters long.</Field.Description>\n\t\t\t\t\t</Field.Field>\n\t\t\t\t\t<Field.Field>\n\t\t\t\t\t\t<Button type=\"submit\">Create Account</Button>\n\t\t\t\t\t\t<Field.Description class=\"text-center\">\n\t\t\t\t\t\t\tAlready have an account? <a href=\"#/\">Sign in</a>\n\t\t\t\t\t\t</Field.Description>\n\t\t\t\t\t</Field.Field>\n\t\t\t\t</Field.Group>\n\t\t\t</form>\n\t\t</Card.Content>\n\t</Card.Root>\n\t<Field.Description class=\"px-6 text-center\">\n\t\tBy clicking continue, you agree to our <a href=\"#/\">Terms of Service</a>\n\t\tand <a href=\"#/\">Privacy Policy</a>.\n\t</Field.Description>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/signup-04/+page.svelte",
    "content": "<script>\n\timport SignupForm from \"./components/signup-form.svelte\";\n</script>\n\n<div class=\"bg-muted flex min-h-svh flex-col items-center justify-center p-6 md:p-10\">\n\t<div class=\"w-full max-w-sm md:max-w-4xl\">\n\t\t<SignupForm />\n\t</div>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/signup-04/components/signup-form.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn } from \"$lib/utils.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport { Input } from \"$lib/registry/ui/input/index.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet { class: className, ...restProps }: HTMLAttributes<HTMLDivElement> = $props();\n</script>\n\n<div class={cn(\"flex flex-col gap-6\", className)} {...restProps}>\n\t<Card.Root class=\"overflow-hidden p-0\">\n\t\t<Card.Content class=\"grid p-0 md:grid-cols-2\">\n\t\t\t<form class=\"p-6 md:p-8\">\n\t\t\t\t<Field.Group>\n\t\t\t\t\t<div class=\"flex flex-col items-center gap-2 text-center\">\n\t\t\t\t\t\t<h1 class=\"text-2xl font-bold\">Create your account</h1>\n\t\t\t\t\t\t<p class=\"text-muted-foreground text-sm text-balance\">\n\t\t\t\t\t\t\tEnter your email below to create your account\n\t\t\t\t\t\t</p>\n\t\t\t\t\t</div>\n\t\t\t\t\t<Field.Field>\n\t\t\t\t\t\t<Field.Label for=\"email\">Email</Field.Label>\n\t\t\t\t\t\t<Input id=\"email\" type=\"email\" placeholder=\"m@example.com\" required />\n\t\t\t\t\t\t<Field.Description>\n\t\t\t\t\t\t\tWe'll use this to contact you. We will not share your email with anyone\n\t\t\t\t\t\t\telse.\n\t\t\t\t\t\t</Field.Description>\n\t\t\t\t\t</Field.Field>\n\t\t\t\t\t<Field.Field>\n\t\t\t\t\t\t<Field.Field class=\"grid grid-cols-2 gap-4\">\n\t\t\t\t\t\t\t<Field.Field>\n\t\t\t\t\t\t\t\t<Field.Label for=\"password\">Password</Field.Label>\n\t\t\t\t\t\t\t\t<Input id=\"password\" type=\"password\" required />\n\t\t\t\t\t\t\t</Field.Field>\n\t\t\t\t\t\t\t<Field.Field>\n\t\t\t\t\t\t\t\t<Field.Label for=\"confirm-password\">Confirm Password</Field.Label>\n\t\t\t\t\t\t\t\t<Input id=\"confirm-password\" type=\"password\" required />\n\t\t\t\t\t\t\t</Field.Field>\n\t\t\t\t\t\t</Field.Field>\n\t\t\t\t\t\t<Field.Description>Must be at least 8 characters long.</Field.Description>\n\t\t\t\t\t</Field.Field>\n\t\t\t\t\t<Field.Field>\n\t\t\t\t\t\t<Button type=\"submit\">Create Account</Button>\n\t\t\t\t\t</Field.Field>\n\t\t\t\t\t<Field.Separator class=\"*:data-[slot=field-separator-content]:bg-card\">\n\t\t\t\t\t\tOr continue with\n\t\t\t\t\t</Field.Separator>\n\t\t\t\t\t<Field.Field class=\"grid grid-cols-3 gap-4\">\n\t\t\t\t\t\t<Button variant=\"outline\" type=\"button\">\n\t\t\t\t\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\td=\"M12.152 6.896c-.948 0-2.415-1.078-3.96-1.04-2.04.027-3.91 1.183-4.961 3.014-2.117 3.675-.546 9.103 1.519 12.09 1.013 1.454 2.208 3.09 3.792 3.039 1.52-.065 2.09-.987 3.935-.987 1.831 0 2.35.987 3.96.948 1.637-.026 2.676-1.48 3.676-2.948 1.156-1.688 1.636-3.325 1.662-3.415-.039-.013-3.182-1.221-3.22-4.857-.026-3.04 2.48-4.494 2.597-4.559-1.429-2.09-3.623-2.324-4.39-2.376-2-.156-3.675 1.09-4.61 1.09zM15.53 3.83c.843-1.012 1.4-2.427 1.245-3.83-1.207.052-2.662.805-3.532 1.818-.78.896-1.454 2.338-1.273 3.714 1.338.104 2.715-.688 3.559-1.701\"\n\t\t\t\t\t\t\t\t\tfill=\"currentColor\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t\t<span class=\"sr-only\">Sign up with Apple</span>\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t<Button variant=\"outline\" type=\"button\">\n\t\t\t\t\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\td=\"M12.48 10.92v3.28h7.84c-.24 1.84-.853 3.187-1.787 4.133-1.147 1.147-2.933 2.4-6.053 2.4-4.827 0-8.6-3.893-8.6-8.72s3.773-8.72 8.6-8.72c2.6 0 4.507 1.027 5.907 2.347l2.307-2.307C18.747 1.44 16.133 0 12.48 0 5.867 0 .307 5.387.307 12s5.56 12 12.173 12c3.573 0 6.267-1.173 8.373-3.36 2.16-2.16 2.84-5.213 2.84-7.667 0-.76-.053-1.467-.173-2.053H12.48z\"\n\t\t\t\t\t\t\t\t\tfill=\"currentColor\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t\t<span class=\"sr-only\">Sign up with Google</span>\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t<Button variant=\"outline\" type=\"button\">\n\t\t\t\t\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\td=\"M6.915 4.03c-1.968 0-3.683 1.28-4.871 3.113C.704 9.208 0 11.883 0 14.449c0 .706.07 1.369.21 1.973a6.624 6.624 0 0 0 .265.86 5.297 5.297 0 0 0 .371.761c.696 1.159 1.818 1.927 3.593 1.927 1.497 0 2.633-.671 3.965-2.444.76-1.012 1.144-1.626 2.663-4.32l.756-1.339.186-.325c.061.1.121.196.183.3l2.152 3.595c.724 1.21 1.665 2.556 2.47 3.314 1.046.987 1.992 1.22 3.06 1.22 1.075 0 1.876-.355 2.455-.843a3.743 3.743 0 0 0 .81-.973c.542-.939.861-2.127.861-3.745 0-2.72-.681-5.357-2.084-7.45-1.282-1.912-2.957-2.93-4.716-2.93-1.047 0-2.088.467-3.053 1.308-.652.57-1.257 1.29-1.82 2.05-.69-.875-1.335-1.547-1.958-2.056-1.182-.966-2.315-1.303-3.454-1.303zm10.16 2.053c1.147 0 2.188.758 2.992 1.999 1.132 1.748 1.647 4.195 1.647 6.4 0 1.548-.368 2.9-1.839 2.9-.58 0-1.027-.23-1.664-1.004-.496-.601-1.343-1.878-2.832-4.358l-.617-1.028a44.908 44.908 0 0 0-1.255-1.98c.07-.109.141-.224.211-.327 1.12-1.667 2.118-2.602 3.358-2.602zm-10.201.553c1.265 0 2.058.791 2.675 1.446.307.327.737.871 1.234 1.579l-1.02 1.566c-.757 1.163-1.882 3.017-2.837 4.338-1.191 1.649-1.81 1.817-2.486 1.817-.524 0-1.038-.237-1.383-.794-.263-.426-.464-1.13-.464-2.046 0-2.221.63-4.535 1.66-6.088.454-.687.964-1.226 1.533-1.533a2.264 2.264 0 0 1 1.088-.285z\"\n\t\t\t\t\t\t\t\t\tfill=\"currentColor\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t\t<span class=\"sr-only\">Sign up with Meta</span>\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</Field.Field>\n\t\t\t\t\t<Field.Description class=\"text-center\">\n\t\t\t\t\t\tAlready have an account? <a href=\"#/\">Sign in</a>\n\t\t\t\t\t</Field.Description>\n\t\t\t\t</Field.Group>\n\t\t\t</form>\n\t\t\t<div class=\"bg-muted relative hidden md:block\">\n\t\t\t\t<img\n\t\t\t\t\tsrc=\"/placeholder.svg\"\n\t\t\t\t\talt=\"\"\n\t\t\t\t\tclass=\"absolute inset-0 h-full w-full object-cover dark:brightness-[0.2] dark:grayscale\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t</Card.Content>\n\t</Card.Root>\n\t<Field.Description class=\"px-6 text-center\">\n\t\tBy clicking continue, you agree to our <a href=\"#/\">Terms of Service</a>\n\t\tand <a href=\"#/\">Privacy Policy</a>.\n\t</Field.Description>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/signup-05/+page.svelte",
    "content": "<script>\n\timport SignupForm from \"./components/signup-form.svelte\";\n</script>\n\n<div class=\"bg-background flex min-h-svh flex-col items-center justify-center gap-6 p-6 md:p-10\">\n\t<div class=\"w-full max-w-sm\">\n\t\t<SignupForm />\n\t</div>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/blocks/signup-05/components/signup-form.svelte",
    "content": "<script lang=\"ts\">\n\timport GalleryVerticalEndIcon from \"@lucide/svelte/icons/gallery-vertical-end\";\n\timport { cn } from \"$lib/utils.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport { Input } from \"$lib/registry/ui/input/index.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet { class: className, ...restProps }: HTMLAttributes<HTMLDivElement> = $props();\n</script>\n\n<div class={cn(\"flex flex-col gap-6\", className)} {...restProps}>\n\t<form>\n\t\t<Field.Group>\n\t\t\t<div class=\"flex flex-col items-center gap-2 text-center\">\n\t\t\t\t<a href=\"#/\" class=\"flex flex-col items-center gap-2 font-medium\">\n\t\t\t\t\t<div class=\"flex size-8 items-center justify-center rounded-md\">\n\t\t\t\t\t\t<GalleryVerticalEndIcon class=\"size-6\" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<span class=\"sr-only\">Acme Inc.</span>\n\t\t\t\t</a>\n\t\t\t\t<h1 class=\"text-xl font-bold\">Welcome to Acme Inc.</h1>\n\t\t\t\t<Field.Description>\n\t\t\t\t\tAlready have an account? <a href=\"#/\">Sign in</a>\n\t\t\t\t</Field.Description>\n\t\t\t</div>\n\t\t\t<Field.Field>\n\t\t\t\t<Field.Label for=\"email\">Email</Field.Label>\n\t\t\t\t<Input id=\"email\" type=\"email\" placeholder=\"m@example.com\" required />\n\t\t\t</Field.Field>\n\t\t\t<Field.Field>\n\t\t\t\t<Button type=\"submit\">Create Account</Button>\n\t\t\t</Field.Field>\n\t\t\t<Field.Separator>Or</Field.Separator>\n\t\t\t<Field.Field class=\"grid gap-4 sm:grid-cols-2\">\n\t\t\t\t<Button variant=\"outline\" type=\"button\">\n\t\t\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\td=\"M12.152 6.896c-.948 0-2.415-1.078-3.96-1.04-2.04.027-3.91 1.183-4.961 3.014-2.117 3.675-.546 9.103 1.519 12.09 1.013 1.454 2.208 3.09 3.792 3.039 1.52-.065 2.09-.987 3.935-.987 1.831 0 2.35.987 3.96.948 1.637-.026 2.676-1.48 3.676-2.948 1.156-1.688 1.636-3.325 1.662-3.415-.039-.013-3.182-1.221-3.22-4.857-.026-3.04 2.48-4.494 2.597-4.559-1.429-2.09-3.623-2.324-4.39-2.376-2-.156-3.675 1.09-4.61 1.09zM15.53 3.83c.843-1.012 1.4-2.427 1.245-3.83-1.207.052-2.662.805-3.532 1.818-.78.896-1.454 2.338-1.273 3.714 1.338.104 2.715-.688 3.559-1.701\"\n\t\t\t\t\t\t\tfill=\"currentColor\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</svg>\n\t\t\t\t\tContinue with Apple\n\t\t\t\t</Button>\n\t\t\t\t<Button variant=\"outline\" type=\"button\">\n\t\t\t\t\t<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\">\n\t\t\t\t\t\t<path\n\t\t\t\t\t\t\td=\"M12.48 10.92v3.28h7.84c-.24 1.84-.853 3.187-1.787 4.133-1.147 1.147-2.933 2.4-6.053 2.4-4.827 0-8.6-3.893-8.6-8.72s3.773-8.72 8.6-8.72c2.6 0 4.507 1.027 5.907 2.347l2.307-2.307C18.747 1.44 16.133 0 12.48 0 5.867 0 .307 5.387.307 12s5.56 12 12.173 12c3.573 0 6.267-1.173 8.373-3.36 2.16-2.16 2.84-5.213 2.84-7.667 0-.76-.053-1.467-.173-2.053H12.48z\"\n\t\t\t\t\t\t\tfill=\"currentColor\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</svg>\n\t\t\t\t\tContinue with Google\n\t\t\t\t</Button>\n\t\t\t</Field.Field>\n\t\t</Field.Group>\n\t</form>\n\t<Field.Description class=\"px-6 text-center\">\n\t\tBy clicking continue, you agree to our <a href=\"#/\">Terms of Service</a>\n\t\tand <a href=\"#/\">Privacy Policy</a>.\n\t</Field.Description>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/colors.ts",
    "content": "export type CompleteColorFormat = {\n\thex: string;\n\trgb: string;\n\thsl: string;\n\toklch: string;\n};\n\nexport type ColorScale = {\n\tscale: number;\n\thex: string;\n\trgb: string;\n\thsl: string;\n\toklch: string;\n};\n\nexport type Colors = {\n\tinherit: string;\n\tcurrent: string;\n\ttransparent: string;\n\tblack: CompleteColorFormat;\n\twhite: CompleteColorFormat;\n\tslate: ColorScale[];\n\tgray: ColorScale[];\n\tzinc: ColorScale[];\n\tneutral: ColorScale[];\n\tstone: ColorScale[];\n\tred: ColorScale[];\n\torange: ColorScale[];\n\tamber: ColorScale[];\n\tyellow: ColorScale[];\n\tlime: ColorScale[];\n\tgreen: ColorScale[];\n\temerald: ColorScale[];\n\tteal: ColorScale[];\n\tcyan: ColorScale[];\n\tsky: ColorScale[];\n\tblue: ColorScale[];\n\tindigo: ColorScale[];\n\tviolet: ColorScale[];\n\tpurple: ColorScale[];\n\tfuchsia: ColorScale[];\n\tpink: ColorScale[];\n\trose: ColorScale[];\n};\n\nexport const baseColors = [\n\t\"slate\",\n\t\"gray\",\n\t\"zinc\",\n\t\"neutral\",\n\t\"stone\",\n\t\"red\",\n\t\"orange\",\n\t\"amber\",\n\t\"yellow\",\n\t\"lime\",\n\t\"green\",\n\t\"emerald\",\n\t\"teal\",\n\t\"cyan\",\n\t\"sky\",\n\t\"blue\",\n\t\"indigo\",\n\t\"violet\",\n\t\"purple\",\n\t\"fuchsia\",\n\t\"pink\",\n\t\"rose\",\n] as const;\n\nexport type BaseColor = (typeof baseColors)[number];\n\nexport const colors: Colors = {\n\tinherit: \"inherit\",\n\tcurrent: \"currentColor\",\n\ttransparent: \"transparent\",\n\tblack: {\n\t\thex: \"#000000\",\n\t\trgb: \"rgb(0,0,0)\",\n\t\thsl: \"hsl(0,0%,0%)\",\n\t\toklch: \"oklch(0.00,0.00,0)\",\n\t},\n\twhite: {\n\t\thex: \"#ffffff\",\n\t\trgb: \"rgb(255,255,255)\",\n\t\thsl: \"hsl(0,0%,100%)\",\n\t\toklch: \"oklch(1.00,0.00,0)\",\n\t},\n\tslate: [\n\t\t{\n\t\t\tscale: 50,\n\t\t\thex: \"#f8fafc\",\n\t\t\trgb: \"rgb(248,250,252)\",\n\t\t\thsl: \"hsl(210,40%,98%)\",\n\t\t\toklch: \"oklch(0.98,0.00,248)\",\n\t\t},\n\t\t{\n\t\t\tscale: 100,\n\t\t\thex: \"#f1f5f9\",\n\t\t\trgb: \"rgb(241,245,249)\",\n\t\t\thsl: \"hsl(210,40%,96.1%)\",\n\t\t\toklch: \"oklch(0.97,0.01,248)\",\n\t\t},\n\t\t{\n\t\t\tscale: 200,\n\t\t\thex: \"#e2e8f0\",\n\t\t\trgb: \"rgb(226,232,240)\",\n\t\t\thsl: \"hsl(214.3,31.8%,91.4%)\",\n\t\t\toklch: \"oklch(0.93,0.01,256)\",\n\t\t},\n\t\t{\n\t\t\tscale: 300,\n\t\t\thex: \"#cbd5e1\",\n\t\t\trgb: \"rgb(203,213,225)\",\n\t\t\thsl: \"hsl(212.7,26.8%,83.9%)\",\n\t\t\toklch: \"oklch(0.87,0.02,253)\",\n\t\t},\n\t\t{\n\t\t\tscale: 400,\n\t\t\thex: \"#94a3b8\",\n\t\t\trgb: \"rgb(148,163,184)\",\n\t\t\thsl: \"hsl(215,20.2%,65.1%)\",\n\t\t\toklch: \"oklch(0.71,0.04,257)\",\n\t\t},\n\t\t{\n\t\t\tscale: 500,\n\t\t\thex: \"#64748b\",\n\t\t\trgb: \"rgb(100,116,139)\",\n\t\t\thsl: \"hsl(215.4,16.3%,46.9%)\",\n\t\t\toklch: \"oklch(0.55,0.04,257)\",\n\t\t},\n\t\t{\n\t\t\tscale: 600,\n\t\t\thex: \"#475569\",\n\t\t\trgb: \"rgb(71,85,105)\",\n\t\t\thsl: \"hsl(215.3,19.3%,34.5%)\",\n\t\t\toklch: \"oklch(0.45,0.04,257)\",\n\t\t},\n\t\t{\n\t\t\tscale: 700,\n\t\t\thex: \"#334155\",\n\t\t\trgb: \"rgb(51,65,85)\",\n\t\t\thsl: \"hsl(215.3,25%,26.7%)\",\n\t\t\toklch: \"oklch(0.37,0.04,257)\",\n\t\t},\n\t\t{\n\t\t\tscale: 800,\n\t\t\thex: \"#1e293b\",\n\t\t\trgb: \"rgb(30,41,59)\",\n\t\t\thsl: \"hsl(217.2,32.6%,17.5%)\",\n\t\t\toklch: \"oklch(0.28,0.04,260)\",\n\t\t},\n\t\t{\n\t\t\tscale: 900,\n\t\t\thex: \"#0f172a\",\n\t\t\trgb: \"rgb(15,23,42)\",\n\t\t\thsl: \"hsl(222.2,47.4%,11.2%)\",\n\t\t\toklch: \"oklch(0.21,0.04,266)\",\n\t\t},\n\t\t{\n\t\t\tscale: 950,\n\t\t\thex: \"#020617\",\n\t\t\trgb: \"rgb(2,6,23)\",\n\t\t\thsl: \"hsl(222.2,84%,4.9%)\",\n\t\t\toklch: \"oklch(0.13,0.04,265)\",\n\t\t},\n\t],\n\tgray: [\n\t\t{\n\t\t\tscale: 50,\n\t\t\thex: \"#f9fafb\",\n\t\t\trgb: \"rgb(249,250,251)\",\n\t\t\thsl: \"hsl(210,20%,98%)\",\n\t\t\toklch: \"oklch(0.98,0.00,248)\",\n\t\t},\n\t\t{\n\t\t\tscale: 100,\n\t\t\thex: \"#f3f4f6\",\n\t\t\trgb: \"rgb(243,244,246)\",\n\t\t\thsl: \"hsl(220,14.3%,95.9%)\",\n\t\t\toklch: \"oklch(0.97,0.00,265)\",\n\t\t},\n\t\t{\n\t\t\tscale: 200,\n\t\t\thex: \"#e5e7eb\",\n\t\t\trgb: \"rgb(229,231,235)\",\n\t\t\thsl: \"hsl(220,13%,91%)\",\n\t\t\toklch: \"oklch(0.93,0.01,265)\",\n\t\t},\n\t\t{\n\t\t\tscale: 300,\n\t\t\thex: \"#d1d5db\",\n\t\t\trgb: \"rgb(209,213,219)\",\n\t\t\thsl: \"hsl(216,12.2%,83.9%)\",\n\t\t\toklch: \"oklch(0.87,0.01,258)\",\n\t\t},\n\t\t{\n\t\t\tscale: 400,\n\t\t\thex: \"#9ca3af\",\n\t\t\trgb: \"rgb(156,163,175)\",\n\t\t\thsl: \"hsl(217.9,10.6%,64.9%)\",\n\t\t\toklch: \"oklch(0.71,0.02,261)\",\n\t\t},\n\t\t{\n\t\t\tscale: 500,\n\t\t\thex: \"#6b7280\",\n\t\t\trgb: \"rgb(107,114,128)\",\n\t\t\thsl: \"hsl(220,8.9%,46.1%)\",\n\t\t\toklch: \"oklch(0.55,0.02,264)\",\n\t\t},\n\t\t{\n\t\t\tscale: 600,\n\t\t\thex: \"#4b5563\",\n\t\t\trgb: \"rgb(75,85,99)\",\n\t\t\thsl: \"hsl(215,13.8%,34.1%)\",\n\t\t\toklch: \"oklch(0.45,0.03,257)\",\n\t\t},\n\t\t{\n\t\t\tscale: 700,\n\t\t\thex: \"#374151\",\n\t\t\trgb: \"rgb(55,65,81)\",\n\t\t\thsl: \"hsl(216.9,19.1%,26.7%)\",\n\t\t\toklch: \"oklch(0.37,0.03,260)\",\n\t\t},\n\t\t{\n\t\t\tscale: 800,\n\t\t\thex: \"#1f2937\",\n\t\t\trgb: \"rgb(31,41,55)\",\n\t\t\thsl: \"hsl(215,27.9%,16.9%)\",\n\t\t\toklch: \"oklch(0.28,0.03,257)\",\n\t\t},\n\t\t{\n\t\t\tscale: 900,\n\t\t\thex: \"#111827\",\n\t\t\trgb: \"rgb(17,24,39)\",\n\t\t\thsl: \"hsl(220.9,39.3%,11%)\",\n\t\t\toklch: \"oklch(0.21,0.03,265)\",\n\t\t},\n\t\t{\n\t\t\tscale: 950,\n\t\t\thex: \"#030712\",\n\t\t\trgb: \"rgb(3,7,18)\",\n\t\t\thsl: \"hsl(224,71.4%,4.1%)\",\n\t\t\toklch: \"oklch(0.13,0.03,262)\",\n\t\t},\n\t],\n\tzinc: [\n\t\t{\n\t\t\tscale: 50,\n\t\t\thex: \"#fafafa\",\n\t\t\trgb: \"rgb(250,250,250)\",\n\t\t\thsl: \"hsl(0,0%,98%)\",\n\t\t\toklch: \"oklch(0.99,0.00,0)\",\n\t\t},\n\t\t{\n\t\t\tscale: 100,\n\t\t\thex: \"#f4f4f5\",\n\t\t\trgb: \"rgb(244,244,245)\",\n\t\t\thsl: \"hsl(240,4.8%,95.9%)\",\n\t\t\toklch: \"oklch(0.97,0.00,286)\",\n\t\t},\n\t\t{\n\t\t\tscale: 200,\n\t\t\thex: \"#e4e4e7\",\n\t\t\trgb: \"rgb(228,228,231)\",\n\t\t\thsl: \"hsl(240,5.9%,90%)\",\n\t\t\toklch: \"oklch(0.92,0.00,286)\",\n\t\t},\n\t\t{\n\t\t\tscale: 300,\n\t\t\thex: \"#d4d4d8\",\n\t\t\trgb: \"rgb(212,212,216)\",\n\t\t\thsl: \"hsl(240,4.9%,83.9%)\",\n\t\t\toklch: \"oklch(0.87,0.01,286)\",\n\t\t},\n\t\t{\n\t\t\tscale: 400,\n\t\t\thex: \"#a1a1aa\",\n\t\t\trgb: \"rgb(161,161,170)\",\n\t\t\thsl: \"hsl(240,5%,64.9%)\",\n\t\t\toklch: \"oklch(0.71,0.01,286)\",\n\t\t},\n\t\t{\n\t\t\tscale: 500,\n\t\t\thex: \"#71717a\",\n\t\t\trgb: \"rgb(113,113,122)\",\n\t\t\thsl: \"hsl(240,3.8%,46.1%)\",\n\t\t\toklch: \"oklch(0.55,0.01,286)\",\n\t\t},\n\t\t{\n\t\t\tscale: 600,\n\t\t\thex: \"#52525b\",\n\t\t\trgb: \"rgb(82,82,91)\",\n\t\t\thsl: \"hsl(240,5.2%,33.9%)\",\n\t\t\toklch: \"oklch(0.44,0.01,286)\",\n\t\t},\n\t\t{\n\t\t\tscale: 700,\n\t\t\thex: \"#3f3f46\",\n\t\t\trgb: \"rgb(63,63,70)\",\n\t\t\thsl: \"hsl(240,5.3%,26.1%)\",\n\t\t\toklch: \"oklch(0.37,0.01,286)\",\n\t\t},\n\t\t{\n\t\t\tscale: 800,\n\t\t\thex: \"#27272a\",\n\t\t\trgb: \"rgb(39,39,42)\",\n\t\t\thsl: \"hsl(240,3.7%,15.9%)\",\n\t\t\toklch: \"oklch(0.27,0.01,286)\",\n\t\t},\n\t\t{\n\t\t\tscale: 900,\n\t\t\thex: \"#18181b\",\n\t\t\trgb: \"rgb(24,24,27)\",\n\t\t\thsl: \"hsl(240,5.9%,10%)\",\n\t\t\toklch: \"oklch(0.21,0.01,286)\",\n\t\t},\n\t\t{\n\t\t\tscale: 950,\n\t\t\thex: \"#09090b\",\n\t\t\trgb: \"rgb(9,9,11)\",\n\t\t\thsl: \"hsl(240,10%,3.9%)\",\n\t\t\toklch: \"oklch(0.14,0.00,286)\",\n\t\t},\n\t],\n\tneutral: [\n\t\t{\n\t\t\tscale: 50,\n\t\t\thex: \"#fafafa\",\n\t\t\trgb: \"rgb(250,250,250)\",\n\t\t\thsl: \"hsl(0,0%,98%)\",\n\t\t\toklch: \"oklch(0.99,0.00,0)\",\n\t\t},\n\t\t{\n\t\t\tscale: 100,\n\t\t\thex: \"#f5f5f5\",\n\t\t\trgb: \"rgb(245,245,245)\",\n\t\t\thsl: \"hsl(0,0%,96.1%)\",\n\t\t\toklch: \"oklch(0.97,0.00,0)\",\n\t\t},\n\t\t{\n\t\t\tscale: 200,\n\t\t\thex: \"#e5e5e5\",\n\t\t\trgb: \"rgb(229,229,229)\",\n\t\t\thsl: \"hsl(0,0%,89.8%)\",\n\t\t\toklch: \"oklch(0.92,0.00,0)\",\n\t\t},\n\t\t{\n\t\t\tscale: 300,\n\t\t\thex: \"#d4d4d4\",\n\t\t\trgb: \"rgb(212,212,212)\",\n\t\t\thsl: \"hsl(0,0%,83.1%)\",\n\t\t\toklch: \"oklch(0.87,0.00,0)\",\n\t\t},\n\t\t{\n\t\t\tscale: 400,\n\t\t\thex: \"#a3a3a3\",\n\t\t\trgb: \"rgb(163,163,163)\",\n\t\t\thsl: \"hsl(0,0%,63.9%)\",\n\t\t\toklch: \"oklch(0.72,0.00,0)\",\n\t\t},\n\t\t{\n\t\t\tscale: 500,\n\t\t\thex: \"#737373\",\n\t\t\trgb: \"rgb(115,115,115)\",\n\t\t\thsl: \"hsl(0,0%,45.1%)\",\n\t\t\toklch: \"oklch(0.56,0.00,0)\",\n\t\t},\n\t\t{\n\t\t\tscale: 600,\n\t\t\thex: \"#525252\",\n\t\t\trgb: \"rgb(82,82,82)\",\n\t\t\thsl: \"hsl(0,0%,32.2%)\",\n\t\t\toklch: \"oklch(0.44,0.00,0)\",\n\t\t},\n\t\t{\n\t\t\tscale: 700,\n\t\t\thex: \"#404040\",\n\t\t\trgb: \"rgb(64,64,64)\",\n\t\t\thsl: \"hsl(0,0%,25.1%)\",\n\t\t\toklch: \"oklch(0.37,0.00,0)\",\n\t\t},\n\t\t{\n\t\t\tscale: 800,\n\t\t\thex: \"#262626\",\n\t\t\trgb: \"rgb(38,38,38)\",\n\t\t\thsl: \"hsl(0,0%,14.9%)\",\n\t\t\toklch: \"oklch(0.27,0.00,0)\",\n\t\t},\n\t\t{\n\t\t\tscale: 900,\n\t\t\thex: \"#171717\",\n\t\t\trgb: \"rgb(23,23,23)\",\n\t\t\thsl: \"hsl(0,0%,9%)\",\n\t\t\toklch: \"oklch(0.20,0.00,0)\",\n\t\t},\n\t\t{\n\t\t\tscale: 950,\n\t\t\thex: \"#0a0a0a\",\n\t\t\trgb: \"rgb(10,10,10)\",\n\t\t\thsl: \"hsl(0,0%,3.9%)\",\n\t\t\toklch: \"oklch(0.14,0.00,0)\",\n\t\t},\n\t],\n\tstone: [\n\t\t{\n\t\t\tscale: 50,\n\t\t\thex: \"#fafaf9\",\n\t\t\trgb: \"rgb(250,250,249)\",\n\t\t\thsl: \"hsl(60,9.1%,97.8%)\",\n\t\t\toklch: \"oklch(0.98,0.00,106)\",\n\t\t},\n\t\t{\n\t\t\tscale: 100,\n\t\t\thex: \"#f5f5f4\",\n\t\t\trgb: \"rgb(245,245,244)\",\n\t\t\thsl: \"hsl(60,4.8%,95.9%)\",\n\t\t\toklch: \"oklch(0.97,0.00,106)\",\n\t\t},\n\t\t{\n\t\t\tscale: 200,\n\t\t\thex: \"#e7e5e4\",\n\t\t\trgb: \"rgb(231,229,228)\",\n\t\t\thsl: \"hsl(20,5.9%,90%)\",\n\t\t\toklch: \"oklch(0.92,0.00,49)\",\n\t\t},\n\t\t{\n\t\t\tscale: 300,\n\t\t\thex: \"#d6d3d1\",\n\t\t\trgb: \"rgb(214,211,209)\",\n\t\t\thsl: \"hsl(24,5.7%,82.9%)\",\n\t\t\toklch: \"oklch(0.87,0.00,56)\",\n\t\t},\n\t\t{\n\t\t\tscale: 400,\n\t\t\thex: \"#a8a29e\",\n\t\t\trgb: \"rgb(168,162,158)\",\n\t\t\thsl: \"hsl(24,5.4%,63.9%)\",\n\t\t\toklch: \"oklch(0.72,0.01,56)\",\n\t\t},\n\t\t{\n\t\t\tscale: 500,\n\t\t\thex: \"#78716c\",\n\t\t\trgb: \"rgb(120,113,108)\",\n\t\t\thsl: \"hsl(25,5.3%,44.7%)\",\n\t\t\toklch: \"oklch(0.55,0.01,58)\",\n\t\t},\n\t\t{\n\t\t\tscale: 600,\n\t\t\thex: \"#57534e\",\n\t\t\trgb: \"rgb(87,83,78)\",\n\t\t\thsl: \"hsl(33.3,5.5%,32.4%)\",\n\t\t\toklch: \"oklch(0.44,0.01,74)\",\n\t\t},\n\t\t{\n\t\t\tscale: 700,\n\t\t\thex: \"#44403c\",\n\t\t\trgb: \"rgb(68,64,60)\",\n\t\t\thsl: \"hsl(30,6.3%,25.1%)\",\n\t\t\toklch: \"oklch(0.37,0.01,68)\",\n\t\t},\n\t\t{\n\t\t\tscale: 800,\n\t\t\thex: \"#292524\",\n\t\t\trgb: \"rgb(41,37,36)\",\n\t\t\thsl: \"hsl(12,6.5%,15.1%)\",\n\t\t\toklch: \"oklch(0.27,0.01,34)\",\n\t\t},\n\t\t{\n\t\t\tscale: 900,\n\t\t\thex: \"#1c1917\",\n\t\t\trgb: \"rgb(28,25,23)\",\n\t\t\thsl: \"hsl(24,9.8%,10%)\",\n\t\t\toklch: \"oklch(0.22,0.01,56)\",\n\t\t},\n\t\t{\n\t\t\tscale: 950,\n\t\t\thex: \"#0c0a09\",\n\t\t\trgb: \"rgb(12,10,9)\",\n\t\t\thsl: \"hsl(20,14.3%,4.1%)\",\n\t\t\toklch: \"oklch(0.15,0.00,49)\",\n\t\t},\n\t],\n\tred: [\n\t\t{\n\t\t\tscale: 50,\n\t\t\thex: \"#fef2f2\",\n\t\t\trgb: \"rgb(254,242,242)\",\n\t\t\thsl: \"hsl(0,85.7%,97.3%)\",\n\t\t\toklch: \"oklch(0.97,0.01,17)\",\n\t\t},\n\t\t{\n\t\t\tscale: 100,\n\t\t\thex: \"#fee2e2\",\n\t\t\trgb: \"rgb(254,226,226)\",\n\t\t\thsl: \"hsl(0,93.3%,94.1%)\",\n\t\t\toklch: \"oklch(0.94,0.03,18)\",\n\t\t},\n\t\t{\n\t\t\tscale: 200,\n\t\t\thex: \"#fecaca\",\n\t\t\trgb: \"rgb(254,202,202)\",\n\t\t\thsl: \"hsl(0,96.3%,89.4%)\",\n\t\t\toklch: \"oklch(0.88,0.06,18)\",\n\t\t},\n\t\t{\n\t\t\tscale: 300,\n\t\t\thex: \"#fca5a5\",\n\t\t\trgb: \"rgb(252,165,165)\",\n\t\t\thsl: \"hsl(0,93.5%,81.8%)\",\n\t\t\toklch: \"oklch(0.81,0.10,20)\",\n\t\t},\n\t\t{\n\t\t\tscale: 400,\n\t\t\thex: \"#f87171\",\n\t\t\trgb: \"rgb(248,113,113)\",\n\t\t\thsl: \"hsl(0,90.6%,70.8%)\",\n\t\t\toklch: \"oklch(0.71,0.17,22)\",\n\t\t},\n\t\t{\n\t\t\tscale: 500,\n\t\t\thex: \"#ef4444\",\n\t\t\trgb: \"rgb(239,68,68)\",\n\t\t\thsl: \"hsl(0,84.2%,60.2%)\",\n\t\t\toklch: \"oklch(0.64,0.21,25)\",\n\t\t},\n\t\t{\n\t\t\tscale: 600,\n\t\t\thex: \"#dc2626\",\n\t\t\trgb: \"rgb(220,38,38)\",\n\t\t\thsl: \"hsl(0,72.2%,50.6%)\",\n\t\t\toklch: \"oklch(0.58,0.22,27)\",\n\t\t},\n\t\t{\n\t\t\tscale: 700,\n\t\t\thex: \"#b91c1c\",\n\t\t\trgb: \"rgb(185,28,28)\",\n\t\t\thsl: \"hsl(0,73.7%,41.8%)\",\n\t\t\toklch: \"oklch(0.51,0.19,28)\",\n\t\t},\n\t\t{\n\t\t\tscale: 800,\n\t\t\thex: \"#991b1b\",\n\t\t\trgb: \"rgb(153,27,27)\",\n\t\t\thsl: \"hsl(0,70%,35.3%)\",\n\t\t\toklch: \"oklch(0.44,0.16,27)\",\n\t\t},\n\t\t{\n\t\t\tscale: 900,\n\t\t\thex: \"#7f1d1d\",\n\t\t\trgb: \"rgb(127,29,29)\",\n\t\t\thsl: \"hsl(0,62.8%,30.6%)\",\n\t\t\toklch: \"oklch(0.40,0.13,26)\",\n\t\t},\n\t\t{\n\t\t\tscale: 950,\n\t\t\thex: \"#450a0a\",\n\t\t\trgb: \"rgb(69,10,10)\",\n\t\t\thsl: \"hsl(0,74.7%,15.5%)\",\n\t\t\toklch: \"oklch(0.26,0.09,26)\",\n\t\t},\n\t],\n\torange: [\n\t\t{\n\t\t\tscale: 50,\n\t\t\thex: \"#fff7ed\",\n\t\t\trgb: \"rgb(255,247,237)\",\n\t\t\thsl: \"hsl(33.3,100%,96.5%)\",\n\t\t\toklch: \"oklch(0.98,0.02,74)\",\n\t\t},\n\t\t{\n\t\t\tscale: 100,\n\t\t\thex: \"#ffedd5\",\n\t\t\trgb: \"rgb(255,237,213)\",\n\t\t\thsl: \"hsl(34.3,100%,91.8%)\",\n\t\t\toklch: \"oklch(0.95,0.04,75)\",\n\t\t},\n\t\t{\n\t\t\tscale: 200,\n\t\t\thex: \"#fed7aa\",\n\t\t\trgb: \"rgb(254,215,170)\",\n\t\t\thsl: \"hsl(32.1,97.7%,83.1%)\",\n\t\t\toklch: \"oklch(0.90,0.07,71)\",\n\t\t},\n\t\t{\n\t\t\tscale: 300,\n\t\t\thex: \"#fdba74\",\n\t\t\trgb: \"rgb(253,186,116)\",\n\t\t\thsl: \"hsl(30.7,97.2%,72.4%)\",\n\t\t\toklch: \"oklch(0.84,0.12,66)\",\n\t\t},\n\t\t{\n\t\t\tscale: 400,\n\t\t\thex: \"#fb923c\",\n\t\t\trgb: \"rgb(251,146,60)\",\n\t\t\thsl: \"hsl(27,96%,61%)\",\n\t\t\toklch: \"oklch(0.76,0.16,56)\",\n\t\t},\n\t\t{\n\t\t\tscale: 500,\n\t\t\thex: \"#f97316\",\n\t\t\trgb: \"rgb(249,115,22)\",\n\t\t\thsl: \"hsl(24.6,95%,53.1%)\",\n\t\t\toklch: \"oklch(0.70,0.19,48)\",\n\t\t},\n\t\t{\n\t\t\tscale: 600,\n\t\t\thex: \"#ea580c\",\n\t\t\trgb: \"rgb(234,88,12)\",\n\t\t\thsl: \"hsl(20.5,90.2%,48.2%)\",\n\t\t\toklch: \"oklch(0.65,0.19,41)\",\n\t\t},\n\t\t{\n\t\t\tscale: 700,\n\t\t\thex: \"#c2410c\",\n\t\t\trgb: \"rgb(194,65,12)\",\n\t\t\thsl: \"hsl(17.5,88.3%,40.4%)\",\n\t\t\toklch: \"oklch(0.55,0.17,38)\",\n\t\t},\n\t\t{\n\t\t\tscale: 800,\n\t\t\thex: \"#9a3412\",\n\t\t\trgb: \"rgb(154,52,18)\",\n\t\t\thsl: \"hsl(15,79.1%,33.7%)\",\n\t\t\toklch: \"oklch(0.47,0.14,37)\",\n\t\t},\n\t\t{\n\t\t\tscale: 900,\n\t\t\thex: \"#7c2d12\",\n\t\t\trgb: \"rgb(124,45,18)\",\n\t\t\thsl: \"hsl(15.3,74.6%,27.8%)\",\n\t\t\toklch: \"oklch(0.41,0.12,38)\",\n\t\t},\n\t\t{\n\t\t\tscale: 950,\n\t\t\thex: \"#431407\",\n\t\t\trgb: \"rgb(67,20,7)\",\n\t\t\thsl: \"hsl(13,81.1%,14.5%)\",\n\t\t\toklch: \"oklch(0.27,0.08,36)\",\n\t\t},\n\t],\n\tamber: [\n\t\t{\n\t\t\tscale: 50,\n\t\t\thex: \"#fffbeb\",\n\t\t\trgb: \"rgb(255,251,235)\",\n\t\t\thsl: \"hsl(48,100%,96.1%)\",\n\t\t\toklch: \"oklch(0.99,0.02,95)\",\n\t\t},\n\t\t{\n\t\t\tscale: 100,\n\t\t\thex: \"#fef3c7\",\n\t\t\trgb: \"rgb(254,243,199)\",\n\t\t\thsl: \"hsl(48,96.5%,88.8%)\",\n\t\t\toklch: \"oklch(0.96,0.06,96)\",\n\t\t},\n\t\t{\n\t\t\tscale: 200,\n\t\t\thex: \"#fde68a\",\n\t\t\trgb: \"rgb(253,230,138)\",\n\t\t\thsl: \"hsl(48,96.6%,76.7%)\",\n\t\t\toklch: \"oklch(0.92,0.12,96)\",\n\t\t},\n\t\t{\n\t\t\tscale: 300,\n\t\t\thex: \"#fcd34d\",\n\t\t\trgb: \"rgb(252,211,77)\",\n\t\t\thsl: \"hsl(45.9,96.7%,64.5%)\",\n\t\t\toklch: \"oklch(0.88,0.15,92)\",\n\t\t},\n\t\t{\n\t\t\tscale: 400,\n\t\t\thex: \"#fbbf24\",\n\t\t\trgb: \"rgb(251,191,36)\",\n\t\t\thsl: \"hsl(43.3,96.4%,56.3%)\",\n\t\t\toklch: \"oklch(0.84,0.16,84)\",\n\t\t},\n\t\t{\n\t\t\tscale: 500,\n\t\t\thex: \"#f59e0b\",\n\t\t\trgb: \"rgb(245,158,11)\",\n\t\t\thsl: \"hsl(37.7,92.1%,50.2%)\",\n\t\t\toklch: \"oklch(0.77,0.16,70)\",\n\t\t},\n\t\t{\n\t\t\tscale: 600,\n\t\t\thex: \"#d97706\",\n\t\t\trgb: \"rgb(217,119,6)\",\n\t\t\thsl: \"hsl(32.1,94.6%,43.7%)\",\n\t\t\toklch: \"oklch(0.67,0.16,58)\",\n\t\t},\n\t\t{\n\t\t\tscale: 700,\n\t\t\thex: \"#b45309\",\n\t\t\trgb: \"rgb(180,83,9)\",\n\t\t\thsl: \"hsl(26,90.5%,37.1%)\",\n\t\t\toklch: \"oklch(0.56,0.15,49)\",\n\t\t},\n\t\t{\n\t\t\tscale: 800,\n\t\t\thex: \"#92400e\",\n\t\t\trgb: \"rgb(146,64,14)\",\n\t\t\thsl: \"hsl(22.7,82.5%,31.4%)\",\n\t\t\toklch: \"oklch(0.47,0.12,46)\",\n\t\t},\n\t\t{\n\t\t\tscale: 900,\n\t\t\thex: \"#78350f\",\n\t\t\trgb: \"rgb(120,53,15)\",\n\t\t\thsl: \"hsl(21.7,77.8%,26.5%)\",\n\t\t\toklch: \"oklch(0.41,0.11,46)\",\n\t\t},\n\t\t{\n\t\t\tscale: 950,\n\t\t\thex: \"#451a03\",\n\t\t\trgb: \"rgb(69,26,3)\",\n\t\t\thsl: \"hsl(20.9,91.7%,14.1%)\",\n\t\t\toklch: \"oklch(0.28,0.07,46)\",\n\t\t},\n\t],\n\tyellow: [\n\t\t{\n\t\t\tscale: 50,\n\t\t\thex: \"#fefce8\",\n\t\t\trgb: \"rgb(254,252,232)\",\n\t\t\thsl: \"hsl(54.5,91.7%,95.3%)\",\n\t\t\toklch: \"oklch(0.99,0.03,102)\",\n\t\t},\n\t\t{\n\t\t\tscale: 100,\n\t\t\thex: \"#fef9c3\",\n\t\t\trgb: \"rgb(254,249,195)\",\n\t\t\thsl: \"hsl(54.9,96.7%,88%)\",\n\t\t\toklch: \"oklch(0.97,0.07,103)\",\n\t\t},\n\t\t{\n\t\t\tscale: 200,\n\t\t\thex: \"#fef08a\",\n\t\t\trgb: \"rgb(254,240,138)\",\n\t\t\thsl: \"hsl(52.8,98.3%,76.9%)\",\n\t\t\toklch: \"oklch(0.95,0.12,102)\",\n\t\t},\n\t\t{\n\t\t\tscale: 300,\n\t\t\thex: \"#fde047\",\n\t\t\trgb: \"rgb(253,224,71)\",\n\t\t\thsl: \"hsl(50.4,97.8%,63.5%)\",\n\t\t\toklch: \"oklch(0.91,0.17,98)\",\n\t\t},\n\t\t{\n\t\t\tscale: 400,\n\t\t\thex: \"#facc15\",\n\t\t\trgb: \"rgb(250,204,21)\",\n\t\t\thsl: \"hsl(47.9,95.8%,53.1%)\",\n\t\t\toklch: \"oklch(0.86,0.17,92)\",\n\t\t},\n\t\t{\n\t\t\tscale: 500,\n\t\t\thex: \"#eab308\",\n\t\t\trgb: \"rgb(234,179,8)\",\n\t\t\thsl: \"hsl(45.4,93.4%,47.5%)\",\n\t\t\toklch: \"oklch(0.80,0.16,86)\",\n\t\t},\n\t\t{\n\t\t\tscale: 600,\n\t\t\thex: \"#ca8a04\",\n\t\t\trgb: \"rgb(202,138,4)\",\n\t\t\thsl: \"hsl(40.6,96.1%,40.4%)\",\n\t\t\toklch: \"oklch(0.68,0.14,76)\",\n\t\t},\n\t\t{\n\t\t\tscale: 700,\n\t\t\thex: \"#a16207\",\n\t\t\trgb: \"rgb(161,98,7)\",\n\t\t\thsl: \"hsl(35.5,91.7%,32.9%)\",\n\t\t\toklch: \"oklch(0.55,0.12,66)\",\n\t\t},\n\t\t{\n\t\t\tscale: 800,\n\t\t\thex: \"#854d0e\",\n\t\t\trgb: \"rgb(133,77,14)\",\n\t\t\thsl: \"hsl(31.8,81%,28.8%)\",\n\t\t\toklch: \"oklch(0.48,0.10,62)\",\n\t\t},\n\t\t{\n\t\t\tscale: 900,\n\t\t\thex: \"#713f12\",\n\t\t\trgb: \"rgb(113,63,18)\",\n\t\t\thsl: \"hsl(28.4,72.5%,25.7%)\",\n\t\t\toklch: \"oklch(0.42,0.09,58)\",\n\t\t},\n\t\t{\n\t\t\tscale: 950,\n\t\t\thex: \"#422006\",\n\t\t\trgb: \"rgb(66,32,6)\",\n\t\t\thsl: \"hsl(26,83.3%,14.1%)\",\n\t\t\toklch: \"oklch(0.29,0.06,54)\",\n\t\t},\n\t],\n\tlime: [\n\t\t{\n\t\t\tscale: 50,\n\t\t\thex: \"#f7fee7\",\n\t\t\trgb: \"rgb(247,254,231)\",\n\t\t\thsl: \"hsl(78.3,92%,95.1%)\",\n\t\t\toklch: \"oklch(0.99,0.03,121)\",\n\t\t},\n\t\t{\n\t\t\tscale: 100,\n\t\t\thex: \"#ecfccb\",\n\t\t\trgb: \"rgb(236,252,203)\",\n\t\t\thsl: \"hsl(79.6,89.1%,89.2%)\",\n\t\t\toklch: \"oklch(0.97,0.07,122)\",\n\t\t},\n\t\t{\n\t\t\tscale: 200,\n\t\t\thex: \"#d9f99d\",\n\t\t\trgb: \"rgb(217,249,157)\",\n\t\t\thsl: \"hsl(80.9,88.5%,79.6%)\",\n\t\t\toklch: \"oklch(0.94,0.12,124)\",\n\t\t},\n\t\t{\n\t\t\tscale: 300,\n\t\t\thex: \"#bef264\",\n\t\t\trgb: \"rgb(190,242,100)\",\n\t\t\thsl: \"hsl(82,84.5%,67.1%)\",\n\t\t\toklch: \"oklch(0.90,0.18,127)\",\n\t\t},\n\t\t{\n\t\t\tscale: 400,\n\t\t\thex: \"#a3e635\",\n\t\t\trgb: \"rgb(163,230,53)\",\n\t\t\thsl: \"hsl(82.7,78%,55.5%)\",\n\t\t\toklch: \"oklch(0.85,0.21,129)\",\n\t\t},\n\t\t{\n\t\t\tscale: 500,\n\t\t\thex: \"#84cc16\",\n\t\t\trgb: \"rgb(132,204,22)\",\n\t\t\thsl: \"hsl(83.7,80.5%,44.3%)\",\n\t\t\toklch: \"oklch(0.77,0.20,131)\",\n\t\t},\n\t\t{\n\t\t\tscale: 600,\n\t\t\thex: \"#65a30d\",\n\t\t\trgb: \"rgb(101,163,13)\",\n\t\t\thsl: \"hsl(84.8,85.2%,34.5%)\",\n\t\t\toklch: \"oklch(0.65,0.18,132)\",\n\t\t},\n\t\t{\n\t\t\tscale: 700,\n\t\t\thex: \"#4d7c0f\",\n\t\t\trgb: \"rgb(77,124,15)\",\n\t\t\thsl: \"hsl(85.9,78.4%,27.3%)\",\n\t\t\toklch: \"oklch(0.53,0.14,132)\",\n\t\t},\n\t\t{\n\t\t\tscale: 800,\n\t\t\thex: \"#3f6212\",\n\t\t\trgb: \"rgb(63,98,18)\",\n\t\t\thsl: \"hsl(86.3,69%,22.7%)\",\n\t\t\toklch: \"oklch(0.45,0.11,131)\",\n\t\t},\n\t\t{\n\t\t\tscale: 900,\n\t\t\thex: \"#365314\",\n\t\t\trgb: \"rgb(54,83,20)\",\n\t\t\thsl: \"hsl(87.6,61.2%,20.2%)\",\n\t\t\toklch: \"oklch(0.41,0.10,131)\",\n\t\t},\n\t\t{\n\t\t\tscale: 950,\n\t\t\thex: \"#1a2e05\",\n\t\t\trgb: \"rgb(26,46,5)\",\n\t\t\thsl: \"hsl(89.3,80.4%,10%)\",\n\t\t\toklch: \"oklch(0.27,0.07,132)\",\n\t\t},\n\t],\n\tgreen: [\n\t\t{\n\t\t\tscale: 50,\n\t\t\thex: \"#f0fdf4\",\n\t\t\trgb: \"rgb(240,253,244)\",\n\t\t\thsl: \"hsl(138.5,76.5%,96.7%)\",\n\t\t\toklch: \"oklch(0.98,0.02,156)\",\n\t\t},\n\t\t{\n\t\t\tscale: 100,\n\t\t\thex: \"#dcfce7\",\n\t\t\trgb: \"rgb(220,252,231)\",\n\t\t\thsl: \"hsl(140.6,84.2%,92.5%)\",\n\t\t\toklch: \"oklch(0.96,0.04,157)\",\n\t\t},\n\t\t{\n\t\t\tscale: 200,\n\t\t\thex: \"#bbf7d0\",\n\t\t\trgb: \"rgb(187,247,208)\",\n\t\t\thsl: \"hsl(141,78.9%,85.1%)\",\n\t\t\toklch: \"oklch(0.93,0.08,156)\",\n\t\t},\n\t\t{\n\t\t\tscale: 300,\n\t\t\thex: \"#86efac\",\n\t\t\trgb: \"rgb(134,239,172)\",\n\t\t\thsl: \"hsl(141.7,76.6%,73.1%)\",\n\t\t\toklch: \"oklch(0.87,0.14,154)\",\n\t\t},\n\t\t{\n\t\t\tscale: 400,\n\t\t\thex: \"#4ade80\",\n\t\t\trgb: \"rgb(74,222,128)\",\n\t\t\thsl: \"hsl(141.9,69.2%,58%)\",\n\t\t\toklch: \"oklch(0.80,0.18,152)\",\n\t\t},\n\t\t{\n\t\t\tscale: 500,\n\t\t\thex: \"#22c55e\",\n\t\t\trgb: \"rgb(34,197,94)\",\n\t\t\thsl: \"hsl(142.1,70.6%,45.3%)\",\n\t\t\toklch: \"oklch(0.72,0.19,150)\",\n\t\t},\n\t\t{\n\t\t\tscale: 600,\n\t\t\thex: \"#16a34a\",\n\t\t\trgb: \"rgb(22,163,74)\",\n\t\t\thsl: \"hsl(142.1,76.2%,36.3%)\",\n\t\t\toklch: \"oklch(0.63,0.17,149)\",\n\t\t},\n\t\t{\n\t\t\tscale: 700,\n\t\t\thex: \"#15803d\",\n\t\t\trgb: \"rgb(21,128,61)\",\n\t\t\thsl: \"hsl(142.4,71.8%,29.2%)\",\n\t\t\toklch: \"oklch(0.53,0.14,150)\",\n\t\t},\n\t\t{\n\t\t\tscale: 800,\n\t\t\thex: \"#166534\",\n\t\t\trgb: \"rgb(22,101,52)\",\n\t\t\thsl: \"hsl(142.8,64.2%,24.1%)\",\n\t\t\toklch: \"oklch(0.45,0.11,151)\",\n\t\t},\n\t\t{\n\t\t\tscale: 900,\n\t\t\thex: \"#14532d\",\n\t\t\trgb: \"rgb(20,83,45)\",\n\t\t\thsl: \"hsl(143.8,61.2%,20.2%)\",\n\t\t\toklch: \"oklch(0.39,0.09,153)\",\n\t\t},\n\t\t{\n\t\t\tscale: 950,\n\t\t\thex: \"#052e16\",\n\t\t\trgb: \"rgb(5,46,22)\",\n\t\t\thsl: \"hsl(144.9,80.4%,10%)\",\n\t\t\toklch: \"oklch(0.27,0.06,153)\",\n\t\t},\n\t],\n\temerald: [\n\t\t{\n\t\t\tscale: 50,\n\t\t\thex: \"#ecfdf5\",\n\t\t\trgb: \"rgb(236,253,245)\",\n\t\t\thsl: \"hsl(151.8,81%,95.9%)\",\n\t\t\toklch: \"oklch(0.98,0.02,166)\",\n\t\t},\n\t\t{\n\t\t\tscale: 100,\n\t\t\thex: \"#d1fae5\",\n\t\t\trgb: \"rgb(209,250,229)\",\n\t\t\thsl: \"hsl(149.3,80.4%,90%)\",\n\t\t\toklch: \"oklch(0.95,0.05,163)\",\n\t\t},\n\t\t{\n\t\t\tscale: 200,\n\t\t\thex: \"#a7f3d0\",\n\t\t\trgb: \"rgb(167,243,208)\",\n\t\t\thsl: \"hsl(152.4,76%,80.4%)\",\n\t\t\toklch: \"oklch(0.90,0.09,164)\",\n\t\t},\n\t\t{\n\t\t\tscale: 300,\n\t\t\thex: \"#6ee7b7\",\n\t\t\trgb: \"rgb(110,231,183)\",\n\t\t\thsl: \"hsl(156.2,71.6%,66.9%)\",\n\t\t\toklch: \"oklch(0.85,0.13,165)\",\n\t\t},\n\t\t{\n\t\t\tscale: 400,\n\t\t\thex: \"#34d399\",\n\t\t\trgb: \"rgb(52,211,153)\",\n\t\t\thsl: \"hsl(158.1,64.4%,51.6%)\",\n\t\t\toklch: \"oklch(0.77,0.15,163)\",\n\t\t},\n\t\t{\n\t\t\tscale: 500,\n\t\t\thex: \"#10b981\",\n\t\t\trgb: \"rgb(16,185,129)\",\n\t\t\thsl: \"hsl(160.1,84.1%,39.4%)\",\n\t\t\toklch: \"oklch(0.70,0.15,162)\",\n\t\t},\n\t\t{\n\t\t\tscale: 600,\n\t\t\thex: \"#059669\",\n\t\t\trgb: \"rgb(5,150,105)\",\n\t\t\thsl: \"hsl(161.4,93.5%,30.4%)\",\n\t\t\toklch: \"oklch(0.60,0.13,163)\",\n\t\t},\n\t\t{\n\t\t\tscale: 700,\n\t\t\thex: \"#047857\",\n\t\t\trgb: \"rgb(4,120,87)\",\n\t\t\thsl: \"hsl(162.9,93.5%,24.3%)\",\n\t\t\toklch: \"oklch(0.51,0.10,166)\",\n\t\t},\n\t\t{\n\t\t\tscale: 800,\n\t\t\thex: \"#065f46\",\n\t\t\trgb: \"rgb(6,95,70)\",\n\t\t\thsl: \"hsl(163.1,88.1%,19.8%)\",\n\t\t\toklch: \"oklch(0.43,0.09,167)\",\n\t\t},\n\t\t{\n\t\t\tscale: 900,\n\t\t\thex: \"#064e3b\",\n\t\t\trgb: \"rgb(6,78,59)\",\n\t\t\thsl: \"hsl(164.2,85.7%,16.5%)\",\n\t\t\toklch: \"oklch(0.38,0.07,169)\",\n\t\t},\n\t\t{\n\t\t\tscale: 950,\n\t\t\thex: \"#022c22\",\n\t\t\trgb: \"rgb(2,44,34)\",\n\t\t\thsl: \"hsl(165.7,91.3%,9%)\",\n\t\t\toklch: \"oklch(0.26,0.05,173)\",\n\t\t},\n\t],\n\tteal: [\n\t\t{\n\t\t\tscale: 50,\n\t\t\thex: \"#f0fdfa\",\n\t\t\trgb: \"rgb(240,253,250)\",\n\t\t\thsl: \"hsl(166.2,76.5%,96.7%)\",\n\t\t\toklch: \"oklch(0.98,0.01,181)\",\n\t\t},\n\t\t{\n\t\t\tscale: 100,\n\t\t\thex: \"#ccfbf1\",\n\t\t\trgb: \"rgb(204,251,241)\",\n\t\t\thsl: \"hsl(167.2,85.5%,89.2%)\",\n\t\t\toklch: \"oklch(0.95,0.05,181)\",\n\t\t},\n\t\t{\n\t\t\tscale: 200,\n\t\t\thex: \"#99f6e4\",\n\t\t\trgb: \"rgb(153,246,228)\",\n\t\t\thsl: \"hsl(168.4,83.8%,78.2%)\",\n\t\t\toklch: \"oklch(0.91,0.09,180)\",\n\t\t},\n\t\t{\n\t\t\tscale: 300,\n\t\t\thex: \"#5eead4\",\n\t\t\trgb: \"rgb(94,234,212)\",\n\t\t\thsl: \"hsl(170.6,76.9%,64.3%)\",\n\t\t\toklch: \"oklch(0.85,0.13,181)\",\n\t\t},\n\t\t{\n\t\t\tscale: 400,\n\t\t\thex: \"#2dd4bf\",\n\t\t\trgb: \"rgb(45,212,191)\",\n\t\t\thsl: \"hsl(172.5,66%,50.4%)\",\n\t\t\toklch: \"oklch(0.78,0.13,182)\",\n\t\t},\n\t\t{\n\t\t\tscale: 500,\n\t\t\thex: \"#14b8a6\",\n\t\t\trgb: \"rgb(20,184,166)\",\n\t\t\thsl: \"hsl(173.4,80.4%,40%)\",\n\t\t\toklch: \"oklch(0.70,0.12,183)\",\n\t\t},\n\t\t{\n\t\t\tscale: 600,\n\t\t\thex: \"#0d9488\",\n\t\t\trgb: \"rgb(13,148,136)\",\n\t\t\thsl: \"hsl(174.7,83.9%,31.6%)\",\n\t\t\toklch: \"oklch(0.60,0.10,185)\",\n\t\t},\n\t\t{\n\t\t\tscale: 700,\n\t\t\thex: \"#0f766e\",\n\t\t\trgb: \"rgb(15,118,110)\",\n\t\t\thsl: \"hsl(175.3,77.4%,26.1%)\",\n\t\t\toklch: \"oklch(0.51,0.09,186)\",\n\t\t},\n\t\t{\n\t\t\tscale: 800,\n\t\t\thex: \"#115e59\",\n\t\t\trgb: \"rgb(17,94,89)\",\n\t\t\thsl: \"hsl(176.1,69.4%,21.8%)\",\n\t\t\toklch: \"oklch(0.44,0.07,188)\",\n\t\t},\n\t\t{\n\t\t\tscale: 900,\n\t\t\thex: \"#134e4a\",\n\t\t\trgb: \"rgb(19,78,74)\",\n\t\t\thsl: \"hsl(175.9,60.8%,19%)\",\n\t\t\toklch: \"oklch(0.39,0.06,188)\",\n\t\t},\n\t\t{\n\t\t\tscale: 950,\n\t\t\thex: \"#042f2e\",\n\t\t\trgb: \"rgb(4,47,46)\",\n\t\t\thsl: \"hsl(178.6,84.3%,10%)\",\n\t\t\toklch: \"oklch(0.28,0.04,193)\",\n\t\t},\n\t],\n\tcyan: [\n\t\t{\n\t\t\tscale: 50,\n\t\t\thex: \"#ecfeff\",\n\t\t\trgb: \"rgb(236,254,255)\",\n\t\t\thsl: \"hsl(183.2,100%,96.3%)\",\n\t\t\toklch: \"oklch(0.98,0.02,201)\",\n\t\t},\n\t\t{\n\t\t\tscale: 100,\n\t\t\thex: \"#cffafe\",\n\t\t\trgb: \"rgb(207,250,254)\",\n\t\t\thsl: \"hsl(185.1,95.9%,90.4%)\",\n\t\t\toklch: \"oklch(0.96,0.04,203)\",\n\t\t},\n\t\t{\n\t\t\tscale: 200,\n\t\t\thex: \"#a5f3fc\",\n\t\t\trgb: \"rgb(165,243,252)\",\n\t\t\thsl: \"hsl(186.2,93.5%,81.8%)\",\n\t\t\toklch: \"oklch(0.92,0.08,205)\",\n\t\t},\n\t\t{\n\t\t\tscale: 300,\n\t\t\thex: \"#67e8f9\",\n\t\t\trgb: \"rgb(103,232,249)\",\n\t\t\thsl: \"hsl(187,92.4%,69%)\",\n\t\t\toklch: \"oklch(0.87,0.12,207)\",\n\t\t},\n\t\t{\n\t\t\tscale: 400,\n\t\t\thex: \"#22d3ee\",\n\t\t\trgb: \"rgb(34,211,238)\",\n\t\t\thsl: \"hsl(187.9,85.7%,53.3%)\",\n\t\t\toklch: \"oklch(0.80,0.13,212)\",\n\t\t},\n\t\t{\n\t\t\tscale: 500,\n\t\t\thex: \"#06b6d4\",\n\t\t\trgb: \"rgb(6,182,212)\",\n\t\t\thsl: \"hsl(188.7,94.5%,42.7%)\",\n\t\t\toklch: \"oklch(0.71,0.13,215)\",\n\t\t},\n\t\t{\n\t\t\tscale: 600,\n\t\t\thex: \"#0891b2\",\n\t\t\trgb: \"rgb(8,145,178)\",\n\t\t\thsl: \"hsl(191.6,91.4%,36.5%)\",\n\t\t\toklch: \"oklch(0.61,0.11,222)\",\n\t\t},\n\t\t{\n\t\t\tscale: 700,\n\t\t\thex: \"#0e7490\",\n\t\t\trgb: \"rgb(14,116,144)\",\n\t\t\thsl: \"hsl(192.9,82.3%,31%)\",\n\t\t\toklch: \"oklch(0.52,0.09,223)\",\n\t\t},\n\t\t{\n\t\t\tscale: 800,\n\t\t\thex: \"#155e75\",\n\t\t\trgb: \"rgb(21,94,117)\",\n\t\t\thsl: \"hsl(194.4,69.6%,27.1%)\",\n\t\t\toklch: \"oklch(0.45,0.08,224)\",\n\t\t},\n\t\t{\n\t\t\tscale: 900,\n\t\t\thex: \"#164e63\",\n\t\t\trgb: \"rgb(22,78,99)\",\n\t\t\thsl: \"hsl(196.4,63.6%,23.7%)\",\n\t\t\toklch: \"oklch(0.40,0.07,227)\",\n\t\t},\n\t\t{\n\t\t\tscale: 950,\n\t\t\thex: \"#083344\",\n\t\t\trgb: \"rgb(8,51,68)\",\n\t\t\thsl: \"hsl(197,78.9%,14.9%)\",\n\t\t\toklch: \"oklch(0.30,0.05,230)\",\n\t\t},\n\t],\n\tsky: [\n\t\t{\n\t\t\tscale: 50,\n\t\t\thex: \"#f0f9ff\",\n\t\t\trgb: \"rgb(240,249,255)\",\n\t\t\thsl: \"hsl(204,100%,97.1%)\",\n\t\t\toklch: \"oklch(0.98,0.01,237)\",\n\t\t},\n\t\t{\n\t\t\tscale: 100,\n\t\t\thex: \"#e0f2fe\",\n\t\t\trgb: \"rgb(224,242,254)\",\n\t\t\thsl: \"hsl(204,93.8%,93.7%)\",\n\t\t\toklch: \"oklch(0.95,0.03,237)\",\n\t\t},\n\t\t{\n\t\t\tscale: 200,\n\t\t\thex: \"#bae6fd\",\n\t\t\trgb: \"rgb(186,230,253)\",\n\t\t\thsl: \"hsl(200.6,94.4%,86.1%)\",\n\t\t\toklch: \"oklch(0.90,0.06,231)\",\n\t\t},\n\t\t{\n\t\t\tscale: 300,\n\t\t\thex: \"#7dd3fc\",\n\t\t\trgb: \"rgb(125,211,252)\",\n\t\t\thsl: \"hsl(199.4,95.5%,73.9%)\",\n\t\t\toklch: \"oklch(0.83,0.10,230)\",\n\t\t},\n\t\t{\n\t\t\tscale: 400,\n\t\t\thex: \"#38bdf8\",\n\t\t\trgb: \"rgb(56,189,248)\",\n\t\t\thsl: \"hsl(198.4,93.2%,59.6%)\",\n\t\t\toklch: \"oklch(0.75,0.14,233)\",\n\t\t},\n\t\t{\n\t\t\tscale: 500,\n\t\t\thex: \"#0ea5e9\",\n\t\t\trgb: \"rgb(14,165,233)\",\n\t\t\thsl: \"hsl(198.6,88.7%,48.4%)\",\n\t\t\toklch: \"oklch(0.68,0.15,237)\",\n\t\t},\n\t\t{\n\t\t\tscale: 600,\n\t\t\thex: \"#0284c7\",\n\t\t\trgb: \"rgb(2,132,199)\",\n\t\t\thsl: \"hsl(200.4,98%,39.4%)\",\n\t\t\toklch: \"oklch(0.59,0.14,242)\",\n\t\t},\n\t\t{\n\t\t\tscale: 700,\n\t\t\thex: \"#0369a1\",\n\t\t\trgb: \"rgb(3,105,161)\",\n\t\t\thsl: \"hsl(201.3,96.3%,32.2%)\",\n\t\t\toklch: \"oklch(0.50,0.12,243)\",\n\t\t},\n\t\t{\n\t\t\tscale: 800,\n\t\t\thex: \"#075985\",\n\t\t\trgb: \"rgb(7,89,133)\",\n\t\t\thsl: \"hsl(201,90%,27.5%)\",\n\t\t\toklch: \"oklch(0.44,0.10,241)\",\n\t\t},\n\t\t{\n\t\t\tscale: 900,\n\t\t\thex: \"#0c4a6e\",\n\t\t\trgb: \"rgb(12,74,110)\",\n\t\t\thsl: \"hsl(202,80.3%,23.9%)\",\n\t\t\toklch: \"oklch(0.39,0.08,241)\",\n\t\t},\n\t\t{\n\t\t\tscale: 950,\n\t\t\thex: \"#082f49\",\n\t\t\trgb: \"rgb(8,47,73)\",\n\t\t\thsl: \"hsl(204,80.2%,15.9%)\",\n\t\t\toklch: \"oklch(0.29,0.06,243)\",\n\t\t},\n\t],\n\tblue: [\n\t\t{\n\t\t\tscale: 50,\n\t\t\thex: \"#eff6ff\",\n\t\t\trgb: \"rgb(239,246,255)\",\n\t\t\thsl: \"hsl(213.8,100%,96.9%)\",\n\t\t\toklch: \"oklch(0.97,0.01,255)\",\n\t\t},\n\t\t{\n\t\t\tscale: 100,\n\t\t\thex: \"#dbeafe\",\n\t\t\trgb: \"rgb(219,234,254)\",\n\t\t\thsl: \"hsl(214.3,94.6%,92.7%)\",\n\t\t\toklch: \"oklch(0.93,0.03,256)\",\n\t\t},\n\t\t{\n\t\t\tscale: 200,\n\t\t\thex: \"#bfdbfe\",\n\t\t\trgb: \"rgb(191,219,254)\",\n\t\t\thsl: \"hsl(213.3,96.9%,87.3%)\",\n\t\t\toklch: \"oklch(0.88,0.06,254)\",\n\t\t},\n\t\t{\n\t\t\tscale: 300,\n\t\t\thex: \"#93c5fd\",\n\t\t\trgb: \"rgb(147,197,253)\",\n\t\t\thsl: \"hsl(211.7,96.4%,78.4%)\",\n\t\t\toklch: \"oklch(0.81,0.10,252)\",\n\t\t},\n\t\t{\n\t\t\tscale: 400,\n\t\t\thex: \"#60a5fa\",\n\t\t\trgb: \"rgb(96,165,250)\",\n\t\t\thsl: \"hsl(213.1,93.9%,67.8%)\",\n\t\t\toklch: \"oklch(0.71,0.14,255)\",\n\t\t},\n\t\t{\n\t\t\tscale: 500,\n\t\t\thex: \"#3b82f6\",\n\t\t\trgb: \"rgb(59,130,246)\",\n\t\t\thsl: \"hsl(217.2,91.2%,59.8%)\",\n\t\t\toklch: \"oklch(0.62,0.19,260)\",\n\t\t},\n\t\t{\n\t\t\tscale: 600,\n\t\t\thex: \"#2563eb\",\n\t\t\trgb: \"rgb(37,99,235)\",\n\t\t\thsl: \"hsl(221.2,83.2%,53.3%)\",\n\t\t\toklch: \"oklch(0.55,0.22,263)\",\n\t\t},\n\t\t{\n\t\t\tscale: 700,\n\t\t\thex: \"#1d4ed8\",\n\t\t\trgb: \"rgb(29,78,216)\",\n\t\t\thsl: \"hsl(224.3,76.3%,48%)\",\n\t\t\toklch: \"oklch(0.49,0.22,264)\",\n\t\t},\n\t\t{\n\t\t\tscale: 800,\n\t\t\thex: \"#1e40af\",\n\t\t\trgb: \"rgb(30,64,175)\",\n\t\t\thsl: \"hsl(225.9,70.7%,40.2%)\",\n\t\t\toklch: \"oklch(0.42,0.18,266)\",\n\t\t},\n\t\t{\n\t\t\tscale: 900,\n\t\t\thex: \"#1e3a8a\",\n\t\t\trgb: \"rgb(30,58,138)\",\n\t\t\thsl: \"hsl(224.4,64.3%,32.9%)\",\n\t\t\toklch: \"oklch(0.38,0.14,266)\",\n\t\t},\n\t\t{\n\t\t\tscale: 950,\n\t\t\thex: \"#172554\",\n\t\t\trgb: \"rgb(23,37,84)\",\n\t\t\thsl: \"hsl(226.2,57%,21%)\",\n\t\t\toklch: \"oklch(0.28,0.09,268)\",\n\t\t},\n\t],\n\tindigo: [\n\t\t{\n\t\t\tscale: 50,\n\t\t\thex: \"#eef2ff\",\n\t\t\trgb: \"rgb(238,242,255)\",\n\t\t\thsl: \"hsl(225.9,100%,96.7%)\",\n\t\t\toklch: \"oklch(0.96,0.02,272)\",\n\t\t},\n\t\t{\n\t\t\tscale: 100,\n\t\t\thex: \"#e0e7ff\",\n\t\t\trgb: \"rgb(224,231,255)\",\n\t\t\thsl: \"hsl(226.5,100%,93.9%)\",\n\t\t\toklch: \"oklch(0.93,0.03,273)\",\n\t\t},\n\t\t{\n\t\t\tscale: 200,\n\t\t\thex: \"#c7d2fe\",\n\t\t\trgb: \"rgb(199,210,254)\",\n\t\t\thsl: \"hsl(228,96.5%,88.8%)\",\n\t\t\toklch: \"oklch(0.87,0.06,274)\",\n\t\t},\n\t\t{\n\t\t\tscale: 300,\n\t\t\thex: \"#a5b4fc\",\n\t\t\trgb: \"rgb(165,180,252)\",\n\t\t\thsl: \"hsl(229.7,93.5%,81.8%)\",\n\t\t\toklch: \"oklch(0.79,0.10,275)\",\n\t\t},\n\t\t{\n\t\t\tscale: 400,\n\t\t\thex: \"#818cf8\",\n\t\t\trgb: \"rgb(129,140,248)\",\n\t\t\thsl: \"hsl(234.5,89.5%,73.9%)\",\n\t\t\toklch: \"oklch(0.68,0.16,277)\",\n\t\t},\n\t\t{\n\t\t\tscale: 500,\n\t\t\thex: \"#6366f1\",\n\t\t\trgb: \"rgb(99,102,241)\",\n\t\t\thsl: \"hsl(238.7,83.5%,66.7%)\",\n\t\t\toklch: \"oklch(0.59,0.20,277)\",\n\t\t},\n\t\t{\n\t\t\tscale: 600,\n\t\t\thex: \"#4f46e5\",\n\t\t\trgb: \"rgb(79,70,229)\",\n\t\t\thsl: \"hsl(243.4,75.4%,58.6%)\",\n\t\t\toklch: \"oklch(0.51,0.23,277)\",\n\t\t},\n\t\t{\n\t\t\tscale: 700,\n\t\t\thex: \"#4338ca\",\n\t\t\trgb: \"rgb(67,56,202)\",\n\t\t\thsl: \"hsl(244.5,57.9%,50.6%)\",\n\t\t\toklch: \"oklch(0.46,0.21,277)\",\n\t\t},\n\t\t{\n\t\t\tscale: 800,\n\t\t\thex: \"#3730a3\",\n\t\t\trgb: \"rgb(55,48,163)\",\n\t\t\thsl: \"hsl(243.7,54.5%,41.4%)\",\n\t\t\toklch: \"oklch(0.40,0.18,277)\",\n\t\t},\n\t\t{\n\t\t\tscale: 900,\n\t\t\thex: \"#312e81\",\n\t\t\trgb: \"rgb(49,46,129)\",\n\t\t\thsl: \"hsl(242.2,47.4%,34.3%)\",\n\t\t\toklch: \"oklch(0.36,0.14,279)\",\n\t\t},\n\t\t{\n\t\t\tscale: 950,\n\t\t\thex: \"#1e1b4b\",\n\t\t\trgb: \"rgb(30,27,75)\",\n\t\t\thsl: \"hsl(243.8,47.1%,20%)\",\n\t\t\toklch: \"oklch(0.26,0.09,281)\",\n\t\t},\n\t],\n\tviolet: [\n\t\t{\n\t\t\tscale: 50,\n\t\t\thex: \"#f5f3ff\",\n\t\t\trgb: \"rgb(245,243,255)\",\n\t\t\thsl: \"hsl(250,100%,97.6%)\",\n\t\t\toklch: \"oklch(0.97,0.02,294)\",\n\t\t},\n\t\t{\n\t\t\tscale: 100,\n\t\t\thex: \"#ede9fe\",\n\t\t\trgb: \"rgb(237,233,254)\",\n\t\t\thsl: \"hsl(251.4,91.3%,95.5%)\",\n\t\t\toklch: \"oklch(0.94,0.03,295)\",\n\t\t},\n\t\t{\n\t\t\tscale: 200,\n\t\t\thex: \"#ddd6fe\",\n\t\t\trgb: \"rgb(221,214,254)\",\n\t\t\thsl: \"hsl(250.5,95.2%,91.8%)\",\n\t\t\toklch: \"oklch(0.89,0.05,293)\",\n\t\t},\n\t\t{\n\t\t\tscale: 300,\n\t\t\thex: \"#c4b5fd\",\n\t\t\trgb: \"rgb(196,181,253)\",\n\t\t\thsl: \"hsl(252.5,94.7%,85.1%)\",\n\t\t\toklch: \"oklch(0.81,0.10,294)\",\n\t\t},\n\t\t{\n\t\t\tscale: 400,\n\t\t\thex: \"#a78bfa\",\n\t\t\trgb: \"rgb(167,139,250)\",\n\t\t\thsl: \"hsl(255.1,91.7%,76.3%)\",\n\t\t\toklch: \"oklch(0.71,0.16,294)\",\n\t\t},\n\t\t{\n\t\t\tscale: 500,\n\t\t\thex: \"#8b5cf6\",\n\t\t\trgb: \"rgb(139,92,246)\",\n\t\t\thsl: \"hsl(258.3,89.5%,66.3%)\",\n\t\t\toklch: \"oklch(0.61,0.22,293)\",\n\t\t},\n\t\t{\n\t\t\tscale: 600,\n\t\t\thex: \"#7c3aed\",\n\t\t\trgb: \"rgb(124,58,237)\",\n\t\t\thsl: \"hsl(262.1,83.3%,57.8%)\",\n\t\t\toklch: \"oklch(0.54,0.25,293)\",\n\t\t},\n\t\t{\n\t\t\tscale: 700,\n\t\t\thex: \"#6d28d9\",\n\t\t\trgb: \"rgb(109,40,217)\",\n\t\t\thsl: \"hsl(263.4,70%,50.4%)\",\n\t\t\toklch: \"oklch(0.49,0.24,293)\",\n\t\t},\n\t\t{\n\t\t\tscale: 800,\n\t\t\thex: \"#5b21b6\",\n\t\t\trgb: \"rgb(91,33,182)\",\n\t\t\thsl: \"hsl(263.4,69.3%,42.2%)\",\n\t\t\toklch: \"oklch(0.43,0.21,293)\",\n\t\t},\n\t\t{\n\t\t\tscale: 900,\n\t\t\thex: \"#4c1d95\",\n\t\t\trgb: \"rgb(76,29,149)\",\n\t\t\thsl: \"hsl(263.5,67.4%,34.9%)\",\n\t\t\toklch: \"oklch(0.38,0.18,294)\",\n\t\t},\n\t\t{\n\t\t\tscale: 950,\n\t\t\thex: \"#1e1b4b\",\n\t\t\trgb: \"rgb(46,16,101)\",\n\t\t\thsl: \"hsl(261.2,72.6%,22.9%)\",\n\t\t\toklch: \"oklch(0.28,0.14,291)\",\n\t\t},\n\t],\n\tpurple: [\n\t\t{\n\t\t\tscale: 50,\n\t\t\thex: \"#faf5ff\",\n\t\t\trgb: \"rgb(250,245,255)\",\n\t\t\thsl: \"hsl(270,100%,98%)\",\n\t\t\toklch: \"oklch(0.98,0.01,308)\",\n\t\t},\n\t\t{\n\t\t\tscale: 100,\n\t\t\thex: \"#f3e8ff\",\n\t\t\trgb: \"rgb(243,232,255)\",\n\t\t\thsl: \"hsl(268.7,100%,95.5%)\",\n\t\t\toklch: \"oklch(0.95,0.03,307)\",\n\t\t},\n\t\t{\n\t\t\tscale: 200,\n\t\t\thex: \"#e9d5ff\",\n\t\t\trgb: \"rgb(233,213,255)\",\n\t\t\thsl: \"hsl(268.6,100%,91.8%)\",\n\t\t\toklch: \"oklch(0.90,0.06,307)\",\n\t\t},\n\t\t{\n\t\t\tscale: 300,\n\t\t\thex: \"#d8b4fe\",\n\t\t\trgb: \"rgb(216,180,254)\",\n\t\t\thsl: \"hsl(269.2,97.4%,85.1%)\",\n\t\t\toklch: \"oklch(0.83,0.11,306)\",\n\t\t},\n\t\t{\n\t\t\tscale: 400,\n\t\t\thex: \"#c084fc\",\n\t\t\trgb: \"rgb(192,132,252)\",\n\t\t\thsl: \"hsl(270,95.2%,75.3%)\",\n\t\t\toklch: \"oklch(0.72,0.18,306)\",\n\t\t},\n\t\t{\n\t\t\tscale: 500,\n\t\t\thex: \"#a855f7\",\n\t\t\trgb: \"rgb(168,85,247)\",\n\t\t\thsl: \"hsl(270.7,91%,65.1%)\",\n\t\t\toklch: \"oklch(0.63,0.23,304)\",\n\t\t},\n\t\t{\n\t\t\tscale: 600,\n\t\t\thex: \"#9333ea\",\n\t\t\trgb: \"rgb(147,51,234)\",\n\t\t\thsl: \"hsl(271.5,81.3%,55.9%)\",\n\t\t\toklch: \"oklch(0.56,0.25,302)\",\n\t\t},\n\t\t{\n\t\t\tscale: 700,\n\t\t\thex: \"#7e22ce\",\n\t\t\trgb: \"rgb(126,34,206)\",\n\t\t\thsl: \"hsl(272.1,71.7%,47.1%)\",\n\t\t\toklch: \"oklch(0.50,0.24,302)\",\n\t\t},\n\t\t{\n\t\t\tscale: 800,\n\t\t\thex: \"#6b21a8\",\n\t\t\trgb: \"rgb(107,33,168)\",\n\t\t\thsl: \"hsl(272.9,67.2%,39.4%)\",\n\t\t\toklch: \"oklch(0.44,0.20,304)\",\n\t\t},\n\t\t{\n\t\t\tscale: 900,\n\t\t\thex: \"#581c87\",\n\t\t\trgb: \"rgb(88,28,135)\",\n\t\t\thsl: \"hsl(273.6,65.6%,32%)\",\n\t\t\toklch: \"oklch(0.38,0.17,305)\",\n\t\t},\n\t\t{\n\t\t\tscale: 950,\n\t\t\thex: \"#3b0764\",\n\t\t\trgb: \"rgb(59,7,100)\",\n\t\t\thsl: \"hsl(273.5,86.9%,21%)\",\n\t\t\toklch: \"oklch(0.29,0.14,303)\",\n\t\t},\n\t],\n\tfuchsia: [\n\t\t{\n\t\t\tscale: 50,\n\t\t\thex: \"#fdf4ff\",\n\t\t\trgb: \"rgb(253,244,255)\",\n\t\t\thsl: \"hsl(289.1,100%,97.8%)\",\n\t\t\toklch: \"oklch(0.98,0.02,320)\",\n\t\t},\n\t\t{\n\t\t\tscale: 100,\n\t\t\thex: \"#fae8ff\",\n\t\t\trgb: \"rgb(250,232,255)\",\n\t\t\thsl: \"hsl(287,100%,95.5%)\",\n\t\t\toklch: \"oklch(0.95,0.04,319)\",\n\t\t},\n\t\t{\n\t\t\tscale: 200,\n\t\t\thex: \"#f5d0fe\",\n\t\t\trgb: \"rgb(245,208,254)\",\n\t\t\thsl: \"hsl(288.3,95.8%,90.6%)\",\n\t\t\toklch: \"oklch(0.90,0.07,320)\",\n\t\t},\n\t\t{\n\t\t\tscale: 300,\n\t\t\thex: \"#f0abfc\",\n\t\t\trgb: \"rgb(240,171,252)\",\n\t\t\thsl: \"hsl(291.1,93.1%,82.9%)\",\n\t\t\toklch: \"oklch(0.83,0.13,321)\",\n\t\t},\n\t\t{\n\t\t\tscale: 400,\n\t\t\thex: \"#e879f9\",\n\t\t\trgb: \"rgb(232,121,249)\",\n\t\t\thsl: \"hsl(292,91.4%,72.5%)\",\n\t\t\toklch: \"oklch(0.75,0.21,322)\",\n\t\t},\n\t\t{\n\t\t\tscale: 500,\n\t\t\thex: \"#d946ef\",\n\t\t\trgb: \"rgb(217,70,239)\",\n\t\t\thsl: \"hsl(292.2,84.1%,60.6%)\",\n\t\t\toklch: \"oklch(0.67,0.26,322)\",\n\t\t},\n\t\t{\n\t\t\tscale: 600,\n\t\t\thex: \"#c026d3\",\n\t\t\trgb: \"rgb(192,38,211)\",\n\t\t\thsl: \"hsl(293.4,69.5%,48.8%)\",\n\t\t\toklch: \"oklch(0.59,0.26,323)\",\n\t\t},\n\t\t{\n\t\t\tscale: 700,\n\t\t\thex: \"#a21caf\",\n\t\t\trgb: \"rgb(162,28,175)\",\n\t\t\thsl: \"hsl(294.7,72.4%,39.8%)\",\n\t\t\toklch: \"oklch(0.52,0.23,324)\",\n\t\t},\n\t\t{\n\t\t\tscale: 800,\n\t\t\thex: \"#86198f\",\n\t\t\trgb: \"rgb(134,25,143)\",\n\t\t\thsl: \"hsl(295.4,70.2%,32.9%)\",\n\t\t\toklch: \"oklch(0.45,0.19,325)\",\n\t\t},\n\t\t{\n\t\t\tscale: 900,\n\t\t\thex: \"#701a75\",\n\t\t\trgb: \"rgb(112,26,117)\",\n\t\t\thsl: \"hsl(296.7,63.6%,28%)\",\n\t\t\toklch: \"oklch(0.40,0.16,326)\",\n\t\t},\n\t\t{\n\t\t\tscale: 950,\n\t\t\thex: \"#4a044e\",\n\t\t\trgb: \"rgb(74,4,78)\",\n\t\t\thsl: \"hsl(296.8,90.2%,16.1%)\",\n\t\t\toklch: \"oklch(0.29,0.13,326)\",\n\t\t},\n\t],\n\tpink: [\n\t\t{\n\t\t\tscale: 50,\n\t\t\thex: \"#fdf2f8\",\n\t\t\trgb: \"rgb(253,242,248)\",\n\t\t\thsl: \"hsl(327.3,73.3%,97.1%)\",\n\t\t\toklch: \"oklch(0.97,0.01,343)\",\n\t\t},\n\t\t{\n\t\t\tscale: 100,\n\t\t\thex: \"#fce7f3\",\n\t\t\trgb: \"rgb(252,231,243)\",\n\t\t\thsl: \"hsl(325.7,77.8%,94.7%)\",\n\t\t\toklch: \"oklch(0.95,0.03,342)\",\n\t\t},\n\t\t{\n\t\t\tscale: 200,\n\t\t\thex: \"#fbcfe8\",\n\t\t\trgb: \"rgb(251,207,232)\",\n\t\t\thsl: \"hsl(325.9,84.6%,89.8%)\",\n\t\t\toklch: \"oklch(0.90,0.06,343)\",\n\t\t},\n\t\t{\n\t\t\tscale: 300,\n\t\t\thex: \"#f9a8d4\",\n\t\t\trgb: \"rgb(249,168,212)\",\n\t\t\thsl: \"hsl(327.4,87.1%,81.8%)\",\n\t\t\toklch: \"oklch(0.82,0.11,346)\",\n\t\t},\n\t\t{\n\t\t\tscale: 400,\n\t\t\thex: \"#f472b6\",\n\t\t\trgb: \"rgb(244,114,182)\",\n\t\t\thsl: \"hsl(328.6,85.5%,70.2%)\",\n\t\t\toklch: \"oklch(0.73,0.18,350)\",\n\t\t},\n\t\t{\n\t\t\tscale: 500,\n\t\t\thex: \"#ec4899\",\n\t\t\trgb: \"rgb(236,72,153)\",\n\t\t\thsl: \"hsl(330.4,81.2%,60.4%)\",\n\t\t\toklch: \"oklch(0.66,0.21,354)\",\n\t\t},\n\t\t{\n\t\t\tscale: 600,\n\t\t\thex: \"#db2777\",\n\t\t\trgb: \"rgb(219,39,119)\",\n\t\t\thsl: \"hsl(333.3,71.4%,50.6%)\",\n\t\t\toklch: \"oklch(0.59,0.22,1)\",\n\t\t},\n\t\t{\n\t\t\tscale: 700,\n\t\t\thex: \"#be185d\",\n\t\t\trgb: \"rgb(190,24,93)\",\n\t\t\thsl: \"hsl(335.1,77.6%,42%)\",\n\t\t\toklch: \"oklch(0.52,0.20,4)\",\n\t\t},\n\t\t{\n\t\t\tscale: 800,\n\t\t\thex: \"#9d174d\",\n\t\t\trgb: \"rgb(157,23,77)\",\n\t\t\thsl: \"hsl(335.8,74.4%,35.3%)\",\n\t\t\toklch: \"oklch(0.46,0.17,4)\",\n\t\t},\n\t\t{\n\t\t\tscale: 900,\n\t\t\thex: \"#831843\",\n\t\t\trgb: \"rgb(131,24,67)\",\n\t\t\thsl: \"hsl(335.9,69%,30.4%)\",\n\t\t\toklch: \"oklch(0.41,0.14,2)\",\n\t\t},\n\t\t{\n\t\t\tscale: 950,\n\t\t\thex: \"#500724\",\n\t\t\trgb: \"rgb(80,7,36)\",\n\t\t\thsl: \"hsl(336.2,83.9%,17.1%)\",\n\t\t\toklch: \"oklch(0.28,0.10,4)\",\n\t\t},\n\t],\n\trose: [\n\t\t{\n\t\t\tscale: 50,\n\t\t\thex: \"#fff1f2\",\n\t\t\trgb: \"rgb(255,241,242)\",\n\t\t\thsl: \"hsl(355.7,100%,97.3%)\",\n\t\t\toklch: \"oklch(0.97,0.02,12)\",\n\t\t},\n\t\t{\n\t\t\tscale: 100,\n\t\t\thex: \"#ffe4e6\",\n\t\t\trgb: \"rgb(255,228,230)\",\n\t\t\thsl: \"hsl(355.6,100%,94.7%)\",\n\t\t\toklch: \"oklch(0.94,0.03,13)\",\n\t\t},\n\t\t{\n\t\t\tscale: 200,\n\t\t\thex: \"#fecdd3\",\n\t\t\trgb: \"rgb(254,205,211)\",\n\t\t\thsl: \"hsl(352.7,96.1%,90%)\",\n\t\t\toklch: \"oklch(0.89,0.06,10)\",\n\t\t},\n\t\t{\n\t\t\tscale: 300,\n\t\t\thex: \"#fda4af\",\n\t\t\trgb: \"rgb(253,164,175)\",\n\t\t\thsl: \"hsl(352.6,95.7%,81.8%)\",\n\t\t\toklch: \"oklch(0.81,0.11,12)\",\n\t\t},\n\t\t{\n\t\t\tscale: 400,\n\t\t\thex: \"#fb7185\",\n\t\t\trgb: \"rgb(251,113,133)\",\n\t\t\thsl: \"hsl(351.3,94.5%,71.4%)\",\n\t\t\toklch: \"oklch(0.72,0.17,13)\",\n\t\t},\n\t\t{\n\t\t\tscale: 500,\n\t\t\thex: \"#f43f5e\",\n\t\t\trgb: \"rgb(244,63,94)\",\n\t\t\thsl: \"hsl(349.7,89.2%,60.2%)\",\n\t\t\toklch: \"oklch(0.65,0.22,16)\",\n\t\t},\n\t\t{\n\t\t\tscale: 600,\n\t\t\thex: \"#e11d48\",\n\t\t\trgb: \"rgb(225,29,72)\",\n\t\t\thsl: \"hsl(346.8,77.2%,49.8%)\",\n\t\t\toklch: \"oklch(0.59,0.22,18)\",\n\t\t},\n\t\t{\n\t\t\tscale: 700,\n\t\t\thex: \"#be123c\",\n\t\t\trgb: \"rgb(190,18,60)\",\n\t\t\thsl: \"hsl(345.3,82.7%,40.8%)\",\n\t\t\toklch: \"oklch(0.51,0.20,17)\",\n\t\t},\n\t\t{\n\t\t\tscale: 800,\n\t\t\thex: \"#9f1239\",\n\t\t\trgb: \"rgb(159,18,57)\",\n\t\t\thsl: \"hsl(343.4,79.7%,34.7%)\",\n\t\t\toklch: \"oklch(0.45,0.17,14)\",\n\t\t},\n\t\t{\n\t\t\tscale: 900,\n\t\t\thex: \"#881337\",\n\t\t\trgb: \"rgb(136,19,55)\",\n\t\t\thsl: \"hsl(341.5,75.5%,30.4%)\",\n\t\t\toklch: \"oklch(0.41,0.15,10)\",\n\t\t},\n\t\t{\n\t\t\tscale: 950,\n\t\t\thex: \"#4c0519\",\n\t\t\trgb: \"rgb(76,5,25)\",\n\t\t\thsl: \"hsl(343.1,87.7%,15.9%)\",\n\t\t\toklch: \"oklch(0.27,0.10,12)\",\n\t\t},\n\t],\n};\n\nexport const colorMapping = {\n\tlight: {\n\t\tbackground: \"white\",\n\t\tforeground: \"{{base}}-950\",\n\t\tcard: \"white\",\n\t\t\"card-foreground\": \"{{base}}-950\",\n\t\tpopover: \"white\",\n\t\t\"popover-foreground\": \"{{base}}-950\",\n\t\tprimary: \"{{base}}-900\",\n\t\t\"primary-foreground\": \"{{base}}-50\",\n\t\tsecondary: \"{{base}}-100\",\n\t\t\"secondary-foreground\": \"{{base}}-900\",\n\t\tmuted: \"{{base}}-100\",\n\t\t\"muted-foreground\": \"{{base}}-500\",\n\t\taccent: \"{{base}}-100\",\n\t\t\"accent-foreground\": \"{{base}}-900\",\n\t\tdestructive: \"red-500\",\n\t\t\"destructive-foreground\": \"{{base}}-50\",\n\t\tborder: \"{{base}}-200\",\n\t\tinput: \"{{base}}-200\",\n\t\tring: \"{{base}}-950\",\n\t\t\"chart-1\": \"12 76% 61%\",\n\t\t\"chart-2\": \"173 58% 39%\",\n\t\t\"chart-3\": \"197 37% 24%\",\n\t\t\"chart-4\": \"43 74% 66%\",\n\t\t\"chart-5\": \"27 87% 67%\",\n\t},\n\tdark: {\n\t\tbackground: \"{{base}}-950\",\n\t\tforeground: \"{{base}}-50\",\n\t\tcard: \"{{base}}-950\",\n\t\t\"card-foreground\": \"{{base}}-50\",\n\t\tpopover: \"{{base}}-950\",\n\t\t\"popover-foreground\": \"{{base}}-50\",\n\t\tprimary: \"{{base}}-50\",\n\t\t\"primary-foreground\": \"{{base}}-900\",\n\t\tsecondary: \"{{base}}-800\",\n\t\t\"secondary-foreground\": \"{{base}}-50\",\n\t\tmuted: \"{{base}}-800\",\n\t\t\"muted-foreground\": \"{{base}}-400\",\n\t\taccent: \"{{base}}-800\",\n\t\t\"accent-foreground\": \"{{base}}-50\",\n\t\tdestructive: \"red-900\",\n\t\t\"destructive-foreground\": \"{{base}}-50\",\n\t\tborder: \"{{base}}-800\",\n\t\tinput: \"{{base}}-800\",\n\t\tring: \"{{base}}-300\",\n\t\t\"chart-1\": \"220 70% 50%\",\n\t\t\"chart-2\": \"160 60% 45%\",\n\t\t\"chart-3\": \"30 80% 55%\",\n\t\t\"chart-4\": \"280 65% 60%\",\n\t\t\"chart-5\": \"340 75% 55%\",\n\t},\n} as const;\n"
  },
  {
    "path": "docs/src/lib/registry/config.ts",
    "content": "// Adapted from https://github.com/shadcn-ui/ui/tree/main/apps/v4/registry/config.ts\n\nimport { iconLibraries, type IconLibrary, type IconLibraryName } from \"shadcn-svelte/icons\";\nimport { z } from \"zod\";\n\nimport { fonts } from \"./fonts.js\";\nimport { STYLES, type Style } from \"./styles/index.js\";\nimport { BASE_THEMES, THEMES, type BaseTheme, type Theme } from \"./themes.js\";\nimport { PRESET_BASE_COLOR_KEYS, PRESET_FONTS, type PresetConfig } from \"shadcn-svelte/preset\";\n\nexport { STYLES, type Style };\nexport { THEMES, type Theme };\nexport { BASE_THEMES, type BaseTheme };\nexport { fonts };\nexport { iconLibraries, type IconLibrary, type IconLibraryName };\n\nexport type StyleName = Style[\"name\"];\nexport type ThemeName = Theme[\"name\"];\nexport type BaseColorName = BaseTheme[\"name\"];\n\nexport type FontValue = (typeof PRESET_FONTS)[number];\n\nexport const MENU_ACCENTS = [\n\t{ value: \"subtle\", label: \"Subtle\" },\n\t{ value: \"bold\", label: \"Bold\" },\n] as const;\n\nexport type MenuAccent = (typeof MENU_ACCENTS)[number];\nexport type MenuAccentValue = MenuAccent[\"value\"];\n\nexport const MENU_COLORS = [\n\t{ value: \"default\", label: \"Default\" },\n\t{ value: \"inverted\", label: \"Inverted\" },\n\t{ value: \"default-translucent\", label: \"Default Translucent\" },\n\t{ value: \"inverted-translucent\", label: \"Inverted Translucent\" },\n] as const;\n\nexport type MenuColor = (typeof MENU_COLORS)[number];\n\nexport type MenuColorValue = MenuColor[\"value\"];\n\nexport const RADII = [\n\t{ name: \"default\", label: \"Default\", value: \"0.5rem\" },\n\t{ name: \"none\", label: \"None\", value: \"0rem\" },\n\t{ name: \"small\", label: \"Small\", value: \"0.45rem\" },\n\t{ name: \"medium\", label: \"Medium\", value: \"0.625rem\" },\n\t{ name: \"large\", label: \"Large\", value: \"0.875rem\" },\n] as const;\n\nexport type Radius = (typeof RADII)[number];\n\nexport type RadiusValue = Radius[\"name\"];\n\nexport const designSystemConfigSchema = z\n\t.object({\n\t\tstyle: z.enum(STYLES.map((s) => s.name)).default(\"vega\"),\n\t\ticonLibrary: z\n\t\t\t.enum(Object.keys(iconLibraries) as [IconLibraryName, ...IconLibraryName[]])\n\t\t\t.default(\"lucide\"),\n\t\tbaseColor: z.enum(PRESET_BASE_COLOR_KEYS).default(\"neutral\"),\n\t\ttheme: z.enum(THEMES.map((t) => t.name)),\n\t\tfont: z.enum(PRESET_FONTS).default(\"inter\"),\n\t\tmenuAccent: z\n\t\t\t.enum(MENU_ACCENTS.map((a) => a.value) as [MenuAccentValue, ...MenuAccentValue[]])\n\t\t\t.default(\"subtle\"),\n\t\tmenuColor: z\n\t\t\t.enum(MENU_COLORS.map((m) => m.value) as [MenuColorValue, ...MenuColorValue[]])\n\t\t\t.default(\"default\"),\n\t\tradius: z\n\t\t\t.enum(RADII.map((r) => r.name) as [RadiusValue, ...RadiusValue[]])\n\t\t\t.default(\"default\"),\n\t})\n\t.refine((data) => {\n\t\tconst availableThemes = getThemesForBaseColor(data.baseColor);\n\t\treturn availableThemes.some((t) => t.name === data.theme);\n\t})\n\t.refine((data) => ({\n\t\tmessage: `Theme \"${data.theme}\" is not available for base color \"${data.baseColor}\"`,\n\t\tpath: [\"theme\"],\n\t}));\n\nexport type DesignSystemConfig = z.infer<typeof designSystemConfigSchema>;\n\nexport const DEFAULT_CONFIG: DesignSystemConfig = {\n\tstyle: \"vega\",\n\tbaseColor: \"neutral\",\n\ttheme: \"neutral\",\n\ticonLibrary: \"lucide\",\n\tfont: \"inter\",\n\tmenuAccent: \"subtle\",\n\tmenuColor: \"default\",\n\tradius: \"default\",\n};\n\nexport type Preset = {\n\tname: string;\n\ttitle: string;\n\tdescription: string;\n} & DesignSystemConfig;\n\nexport const PRESETS: Preset[] = [\n\t{\n\t\tname: \"vega\",\n\t\ttitle: \"Vega\",\n\t\tdescription: \"Vega / Lucide / Geist Sans\",\n\t\tstyle: \"vega\",\n\t\tbaseColor: \"neutral\",\n\t\ttheme: \"neutral\",\n\t\ticonLibrary: \"lucide\",\n\t\tfont: \"geist\",\n\t\tmenuAccent: \"subtle\",\n\t\tmenuColor: \"default\",\n\t\tradius: \"default\",\n\t},\n\t{\n\t\tname: \"nova\",\n\t\ttitle: \"Nova\",\n\t\tdescription: \"Nova / Hugeicons / Inter\",\n\t\tstyle: \"nova\",\n\t\tbaseColor: \"neutral\",\n\t\ttheme: \"neutral\",\n\t\ticonLibrary: \"hugeicons\",\n\t\tfont: \"inter\",\n\t\tmenuAccent: \"subtle\",\n\t\tmenuColor: \"default\",\n\t\tradius: \"default\",\n\t},\n\t{\n\t\tname: \"maia\",\n\t\ttitle: \"Maia\",\n\t\tdescription: \"Maia / Hugeicons / Figtree\",\n\t\tstyle: \"maia\",\n\t\tbaseColor: \"neutral\",\n\t\ttheme: \"neutral\",\n\t\ticonLibrary: \"hugeicons\",\n\t\tfont: \"figtree\",\n\t\tmenuAccent: \"subtle\",\n\t\tmenuColor: \"default\",\n\t\tradius: \"default\",\n\t},\n\t{\n\t\tname: \"lyra\",\n\t\ttitle: \"Lyra\",\n\t\tdescription: \"Lyra / Tabler / JetBrains Mono\",\n\t\tstyle: \"lyra\",\n\t\tbaseColor: \"neutral\",\n\t\ttheme: \"neutral\",\n\t\ticonLibrary: \"hugeicons\",\n\t\tfont: \"jetbrains-mono\",\n\t\tmenuAccent: \"subtle\",\n\t\tmenuColor: \"default\",\n\t\tradius: \"default\",\n\t},\n];\n\nexport function getThemesForBaseColor(baseColorName: string) {\n\tconst baseColorNames = BASE_THEMES.map((bc) => bc.name);\n\n\treturn THEMES.filter((theme) => {\n\t\tif (theme.name === baseColorName) {\n\t\t\treturn true;\n\t\t}\n\t\treturn !baseColorNames.includes(theme.name as (typeof baseColorNames)[number]);\n\t});\n}\n\nexport function getFont(name: FontValue) {\n\treturn fonts.find((font) => font.name.replace(\"font-\", \"\") === name);\n}\n\nexport function getStyle(name: StyleName) {\n\treturn STYLES.find((style) => style.name === name);\n}\n\nexport function getTheme(name: ThemeName) {\n\treturn THEMES.find((theme) => theme.name === name);\n}\n\nexport function getBaseColor(name: BaseColorName) {\n\treturn BASE_THEMES.find((color) => color.name === name);\n}\n\nexport function getIconLibrary(name: IconLibraryName) {\n\treturn iconLibraries[name];\n}\n\n// Builds a registry:theme item from a design system config.\nexport function buildRegistryTheme(config: DesignSystemConfig) {\n\tconst baseColor = getBaseColor(config.baseColor);\n\tconst theme = getTheme(config.theme);\n\n\tif (!baseColor || !theme) {\n\t\tthrow new Error(`Base color \"${config.baseColor}\" or theme \"${config.theme}\" not found`);\n\t}\n\n\t// Merge base color and theme CSS vars.\n\tconst lightVars: Record<string, string> = {\n\t\t...(baseColor.cssVars?.light as Record<string, string>),\n\t\t...(theme.cssVars?.light as Record<string, string>),\n\t};\n\tconst darkVars: Record<string, string> = {\n\t\t...(baseColor.cssVars?.dark as Record<string, string>),\n\t\t...(theme.cssVars?.dark as Record<string, string>),\n\t};\n\tconst themeVars: Record<string, string> = {};\n\n\t// Apply menu accent transformation.\n\tif (config.menuAccent === \"bold\") {\n\t\tlightVars.accent = lightVars.primary;\n\t\tlightVars[\"accent-foreground\"] = lightVars[\"primary-foreground\"];\n\t\tdarkVars.accent = darkVars.primary;\n\t\tdarkVars[\"accent-foreground\"] = darkVars[\"primary-foreground\"];\n\t\t// lightVars[\"sidebar-accent\"] = lightVars.primary\n\t\t// lightVars[\"sidebar-accent-foreground\"] = lightVars[\"primary-foreground\"]\n\t\t// darkVars[\"sidebar-accent\"] = darkVars.primary\n\t\t// darkVars[\"sidebar-accent-foreground\"] = darkVars[\"primary-foreground\"]\n\t}\n\n\t// Apply radius transformation.\n\tif (config.radius && config.radius !== \"default\") {\n\t\tconst radius = RADII.find((r) => r.name === config.radius);\n\t\tif (radius && radius.value) {\n\t\t\tlightVars.radius = radius.value;\n\t\t}\n\t}\n\n\treturn {\n\t\tname: `${config.baseColor}-${config.theme}`,\n\t\ttype: \"registry:theme\" as const,\n\t\tcssVars: {\n\t\t\ttheme: Object.keys(themeVars).length > 0 ? themeVars : undefined,\n\t\t\tlight: lightVars,\n\t\t\tdark: darkVars,\n\t\t},\n\t};\n}\n\n// Builds a registry:base item from a design system config.\nexport function buildRegistryBase(config: PresetConfig) {\n\tconst iconLibraryItem = getIconLibrary(config.iconLibrary);\n\n\tif (!iconLibraryItem) {\n\t\tthrow new Error(`Icon library \"${config.iconLibrary}\" not found`);\n\t}\n\n\tconst registryTheme = buildRegistryTheme(config);\n\n\t// Dependencies added on init\n\tconst devDependencies = [\n\t\t\"tailwind-variants\",\n\t\t\"clsx\",\n\t\t\"tailwind-merge\",\n\t\t\"tw-animate-css\",\n\t\t...iconLibraryItem.packages,\n\t];\n\n\tconst registryDependencies = [\"utils\"];\n\n\tif (config.font) {\n\t\tregistryDependencies.push(`font-${config.font}`);\n\t}\n\n\treturn {\n\t\tname: config.style,\n\t\textends: \"none\",\n\t\ttype: \"registry:base\" as const,\n\t\tconfig: {\n\t\t\tstyle: config.style,\n\t\t\ticonLibrary: iconLibraryItem.name,\n\t\t\tmenuColor: config.menuColor,\n\t\t\tmenuAccent: config.menuAccent,\n\t\t\ttailwind: {\n\t\t\t\tbaseColor: config.baseColor,\n\t\t\t},\n\t\t},\n\t\tdevDependencies,\n\t\tregistryDependencies,\n\t\tcssVars: registryTheme.cssVars,\n\t\tcss: {\n\t\t\t'@import \"tw-animate-css\"': {},\n\t\t\t\"@layer base\": {\n\t\t\t\t\"*\": { \"@apply border-border outline-ring/50\": {} },\n\t\t\t\tbody: { \"@apply bg-background text-foreground\": {} },\n\t\t\t},\n\n\t\t\t// these are the styles that `@import \"shadcn/tailwind.css\"` adds\n\t\t\t// but that seems like the wrong solution so for the time being we'll add them on init\n\t\t\t\"@custom-variant data-open\": {\n\t\t\t\t'&:where([data-state=\"open\"]), &:where([data-open]:not([data-open=\"false\"]))': {\n\t\t\t\t\t\"@slot\": {},\n\t\t\t\t},\n\t\t\t},\n\t\t\t\"@custom-variant data-closed\": {\n\t\t\t\t'&:where([data-state=\"closed\"]), &:where([data-closed]:not([data-closed=\"false\"]))':\n\t\t\t\t\t{\n\t\t\t\t\t\t\"@slot\": {},\n\t\t\t\t\t},\n\t\t\t},\n\t\t\t\"@custom-variant data-checked\": {\n\t\t\t\t'&:where([data-state=\"checked\"]), &:where([data-checked]:not([data-checked=\"false\"]))':\n\t\t\t\t\t{\n\t\t\t\t\t\t\"@slot\": {},\n\t\t\t\t\t},\n\t\t\t},\n\t\t\t\"@custom-variant data-unchecked\": {\n\t\t\t\t'&:where([data-state=\"unchecked\"]), &:where([data-unchecked]:not([data-unchecked=\"false\"]))':\n\t\t\t\t\t{\n\t\t\t\t\t\t\"@slot\": {},\n\t\t\t\t\t},\n\t\t\t},\n\t\t\t\"@custom-variant data-selected\": {\n\t\t\t\t\"&:where([data-selected])\": {\n\t\t\t\t\t\"@slot\": {},\n\t\t\t\t},\n\t\t\t},\n\t\t\t\"@custom-variant data-disabled\": {\n\t\t\t\t'&:where([data-disabled=\"true\"]), &:where([data-disabled]:not([data-disabled=\"false\"]))':\n\t\t\t\t\t{\n\t\t\t\t\t\t\"@slot\": {},\n\t\t\t\t\t},\n\t\t\t},\n\t\t\t\"@custom-variant data-active\": {\n\t\t\t\t'&:where([data-state=\"active\"]), &:where([data-active]:not([data-active=\"false\"]))':\n\t\t\t\t\t{\n\t\t\t\t\t\t\"@slot\": {},\n\t\t\t\t\t},\n\t\t\t},\n\t\t\t\"@custom-variant data-horizontal\": {\n\t\t\t\t'&:where([data-orientation=\"horizontal\"])': {\n\t\t\t\t\t\"@slot\": {},\n\t\t\t\t},\n\t\t\t},\n\t\t\t\"@custom-variant data-vertical\": {\n\t\t\t\t'&:where([data-orientation=\"vertical\"])': {\n\t\t\t\t\t\"@slot\": {},\n\t\t\t\t},\n\t\t\t},\n\t\t\t\"@utility no-scrollbar\": {\n\t\t\t\t\"-ms-overflow-style\": \"none\",\n\t\t\t\t\"scrollbar-width\": \"none\",\n\t\t\t\t\"&::-webkit-scrollbar\": {\n\t\t\t\t\tdisplay: \"none\",\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t};\n}\n"
  },
  {
    "path": "docs/src/lib/registry/examples/accordion-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Accordion from \"$lib/registry/ui/accordion/index.js\";\n</script>\n\n<Accordion.Root type=\"single\" class=\"w-full sm:max-w-[70%]\" value=\"item-1\">\n\t<Accordion.Item value=\"item-1\">\n\t\t<Accordion.Trigger>Product Information</Accordion.Trigger>\n\t\t<Accordion.Content class=\"flex flex-col gap-4 text-balance\">\n\t\t\t<p>\n\t\t\t\tOur flagship product combines cutting-edge technology with sleek design. Built with\n\t\t\t\tpremium materials, it offers unparalleled performance and reliability.\n\t\t\t</p>\n\t\t\t<p>\n\t\t\t\tKey features include advanced processing capabilities, and an intuitive user\n\t\t\t\tinterface designed for both beginners and experts.\n\t\t\t</p>\n\t\t</Accordion.Content>\n\t</Accordion.Item>\n\t<Accordion.Item value=\"item-2\">\n\t\t<Accordion.Trigger>Shipping Details</Accordion.Trigger>\n\t\t<Accordion.Content class=\"flex flex-col gap-4 text-balance\">\n\t\t\t<p>\n\t\t\t\tWe offer worldwide shipping through trusted courier partners. Standard delivery\n\t\t\t\ttakes 3-5 business days, while express shipping ensures delivery within 1-2 business\n\t\t\t\tdays.\n\t\t\t</p>\n\t\t\t<p>\n\t\t\t\tAll orders are carefully packaged and fully insured. Track your shipment in\n\t\t\t\treal-time through our dedicated tracking portal.\n\t\t\t</p>\n\t\t</Accordion.Content>\n\t</Accordion.Item>\n\t<Accordion.Item value=\"item-3\">\n\t\t<Accordion.Trigger>Return Policy</Accordion.Trigger>\n\t\t<Accordion.Content class=\"flex flex-col gap-4 text-balance\">\n\t\t\t<p>\n\t\t\t\tWe stand behind our products with a comprehensive 30-day return policy. If\n\t\t\t\tyou&apos;re not completely satisfied, simply return the item in its original\n\t\t\t\tcondition.\n\t\t\t</p>\n\t\t\t<p>\n\t\t\t\tOur hassle-free return process includes free return shipping and full refunds\n\t\t\t\tprocessed within 48 hours of receiving the returned item.\n\t\t\t</p>\n\t\t</Accordion.Content>\n\t</Accordion.Item>\n</Accordion.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/alert-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Alert from \"$lib/registry/ui/alert/index.js\";\n\timport CheckCircle2Icon from \"@lucide/svelte/icons/check-circle-2\";\n\timport AlertCircleIcon from \"@lucide/svelte/icons/alert-circle\";\n\timport PopcornIcon from \"@lucide/svelte/icons/popcorn\";\n</script>\n\n<div class=\"grid w-full max-w-xl items-start gap-4\">\n\t<Alert.Root>\n\t\t<CheckCircle2Icon />\n\t\t<Alert.Title>Success! Your changes have been saved</Alert.Title>\n\t\t<Alert.Description>This is an alert with icon, title and description.</Alert.Description>\n\t</Alert.Root>\n\t<Alert.Root>\n\t\t<PopcornIcon />\n\t\t<Alert.Title>This Alert has a title and an icon. No description.</Alert.Title>\n\t</Alert.Root>\n\t<Alert.Root variant=\"destructive\">\n\t\t<AlertCircleIcon />\n\t\t<Alert.Title>Unable to process your payment.</Alert.Title>\n\t\t<Alert.Description>\n\t\t\t<p>Please verify your billing information and try again.</p>\n\t\t\t<ul class=\"list-inside list-disc text-sm\">\n\t\t\t\t<li>Check your card details</li>\n\t\t\t\t<li>Ensure sufficient funds</li>\n\t\t\t\t<li>Verify billing address</li>\n\t\t\t</ul>\n\t\t</Alert.Description>\n\t</Alert.Root>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/alert-destructive.svelte",
    "content": "<script lang=\"ts\">\n\timport CircleAlertIcon from \"@lucide/svelte/icons/circle-alert\";\n\timport * as Alert from \"$lib/registry/ui/alert/index.js\";\n</script>\n\n<Alert.Root variant=\"destructive\">\n\t<CircleAlertIcon class=\"size-4\" />\n\t<Alert.Title>Error</Alert.Title>\n\t<Alert.Description>Your session has expired. Please login again.</Alert.Description>\n</Alert.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/alert-dialog-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport * as AlertDialog from \"$lib/registry/ui/alert-dialog/index.js\";\n\timport { buttonVariants } from \"$lib/registry/ui/button/index.js\";\n</script>\n\n<AlertDialog.Root>\n\t<AlertDialog.Trigger class={buttonVariants({ variant: \"outline\" })}>\n\t\tShow Dialog\n\t</AlertDialog.Trigger>\n\t<AlertDialog.Content>\n\t\t<AlertDialog.Header>\n\t\t\t<AlertDialog.Title>Are you absolutely sure?</AlertDialog.Title>\n\t\t\t<AlertDialog.Description>\n\t\t\t\tThis action cannot be undone. This will permanently delete your account and remove\n\t\t\t\tyour data from our servers.\n\t\t\t</AlertDialog.Description>\n\t\t</AlertDialog.Header>\n\t\t<AlertDialog.Footer>\n\t\t\t<AlertDialog.Cancel>Cancel</AlertDialog.Cancel>\n\t\t\t<AlertDialog.Action>Continue</AlertDialog.Action>\n\t\t</AlertDialog.Footer>\n\t</AlertDialog.Content>\n</AlertDialog.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/aspect-ratio-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport { AspectRatio } from \"$lib/registry/ui/aspect-ratio/index.js\";\n</script>\n\n<AspectRatio ratio={16 / 9} class=\"bg-muted rounded-lg\">\n\t<img\n\t\tsrc=\"https://images.unsplash.com/photo-1588345921523-c2dcdb7f1dcd?w=800&dpr=2&q=80\"\n\t\talt=\"Gray by Drew Beamer\"\n\t\tclass=\"h-full w-full rounded-lg object-cover dark:brightness-[0.2] dark:grayscale\"\n\t/>\n</AspectRatio>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/avatar-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Avatar from \"$lib/registry/ui/avatar/index.js\";\n</script>\n\n<div class=\"flex flex-row flex-wrap items-center gap-12\">\n\t<Avatar.Root>\n\t\t<Avatar.Image src=\"https://github.com/shadcn.png\" alt=\"@shadcn\" />\n\t\t<Avatar.Fallback>CN</Avatar.Fallback>\n\t</Avatar.Root>\n\t<Avatar.Root class=\"rounded-lg\">\n\t\t<Avatar.Image src=\"https://github.com/evilrabbit.png\" alt=\"@evilrabbit\" />\n\t\t<Avatar.Fallback>ER</Avatar.Fallback>\n\t</Avatar.Root>\n\t<div\n\t\tclass=\"*:data-[slot=avatar]:ring-background flex -space-x-2 *:data-[slot=avatar]:ring-2 *:data-[slot=avatar]:grayscale\"\n\t>\n\t\t<Avatar.Root>\n\t\t\t<Avatar.Image src=\"https://github.com/shadcn.png\" alt=\"@shadcn\" />\n\t\t\t<Avatar.Fallback>CN</Avatar.Fallback>\n\t\t</Avatar.Root>\n\t\t<Avatar.Root>\n\t\t\t<Avatar.Image src=\"https://github.com/leerob.png\" alt=\"@leerob\" />\n\t\t\t<Avatar.Fallback>LR</Avatar.Fallback>\n\t\t</Avatar.Root>\n\t\t<Avatar.Root>\n\t\t\t<Avatar.Image src=\"https://github.com/evilrabbit.png\" alt=\"@evilrabbit\" />\n\t\t\t<Avatar.Fallback>ER</Avatar.Fallback>\n\t\t</Avatar.Root>\n\t</div>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/badge-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport { Badge } from \"$lib/registry/ui/badge/index.js\";\n\timport BadgeCheckIcon from \"@lucide/svelte/icons/badge-check\";\n</script>\n\n<div class=\"flex flex-col items-center gap-2\">\n\t<div class=\"flex w-full flex-wrap gap-2\">\n\t\t<Badge>Badge</Badge>\n\t\t<Badge variant=\"secondary\">Secondary</Badge>\n\t\t<Badge variant=\"destructive\">Destructive</Badge>\n\t\t<Badge variant=\"outline\">Outline</Badge>\n\t</div>\n\t<div class=\"flex w-full flex-wrap gap-2\">\n\t\t<Badge variant=\"secondary\" class=\"bg-blue-500 text-white dark:bg-blue-600\">\n\t\t\t<BadgeCheckIcon />\n\t\t\tVerified\n\t\t</Badge>\n\t\t<Badge class=\"h-5 min-w-5 rounded-full px-1 font-mono tabular-nums\">8</Badge>\n\t\t<Badge class=\"h-5 min-w-5 rounded-full px-1 font-mono tabular-nums\" variant=\"destructive\">\n\t\t\t99\n\t\t</Badge>\n\t\t<Badge class=\"h-5 min-w-5 rounded-full px-1 font-mono tabular-nums\" variant=\"outline\">\n\t\t\t20+\n\t\t</Badge>\n\t</div>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/badge-destructive.svelte",
    "content": "<script lang=\"ts\">\n\timport { Badge } from \"$lib/registry/ui/badge/index.js\";\n</script>\n\n<Badge variant=\"destructive\">Destructive</Badge>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/badge-outline.svelte",
    "content": "<script lang=\"ts\">\n\timport { Badge } from \"$lib/registry/ui/badge/index.js\";\n</script>\n\n<Badge variant=\"outline\">Outline</Badge>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/badge-secondary.svelte",
    "content": "<script lang=\"ts\">\n\timport { Badge } from \"$lib/registry/ui/badge/index.js\";\n</script>\n\n<Badge variant=\"secondary\">Secondary</Badge>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/breadcrumb-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Breadcrumb from \"$lib/registry/ui/breadcrumb/index.js\";\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n</script>\n\n<Breadcrumb.Root>\n\t<Breadcrumb.List>\n\t\t<Breadcrumb.Item>\n\t\t\t<Breadcrumb.Link href=\"/\">Home</Breadcrumb.Link>\n\t\t</Breadcrumb.Item>\n\t\t<Breadcrumb.Separator />\n\t\t<Breadcrumb.Item>\n\t\t\t<DropdownMenu.Root>\n\t\t\t\t<DropdownMenu.Trigger class=\"flex items-center gap-1\">\n\t\t\t\t\t<Breadcrumb.Ellipsis class=\"size-4\" />\n\t\t\t\t\t<span class=\"sr-only\">Toggle menu</span>\n\t\t\t\t</DropdownMenu.Trigger>\n\t\t\t\t<DropdownMenu.Content align=\"start\">\n\t\t\t\t\t<DropdownMenu.Item>Documentation</DropdownMenu.Item>\n\t\t\t\t\t<DropdownMenu.Item>Themes</DropdownMenu.Item>\n\t\t\t\t\t<DropdownMenu.Item>GitHub</DropdownMenu.Item>\n\t\t\t\t</DropdownMenu.Content>\n\t\t\t</DropdownMenu.Root>\n\t\t</Breadcrumb.Item>\n\t\t<Breadcrumb.Separator />\n\t\t<Breadcrumb.Item>\n\t\t\t<Breadcrumb.Link href=\"/docs/components\">Components</Breadcrumb.Link>\n\t\t</Breadcrumb.Item>\n\t\t<Breadcrumb.Separator />\n\t\t<Breadcrumb.Item>\n\t\t\t<Breadcrumb.Page>Breadcrumb</Breadcrumb.Page>\n\t\t</Breadcrumb.Item>\n\t</Breadcrumb.List>\n</Breadcrumb.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/breadcrumb-dropdown.svelte",
    "content": "<script lang=\"ts\">\n\timport ChevronDownIcon from \"@lucide/svelte/icons/chevron-down\";\n\timport SlashIcon from \"@lucide/svelte/icons/slash\";\n\timport * as Breadcrumb from \"$lib/registry/ui/breadcrumb/index.js\";\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n</script>\n\n<Breadcrumb.Root>\n\t<Breadcrumb.List>\n\t\t<Breadcrumb.Item>\n\t\t\t<Breadcrumb.Link href=\"/\">Home</Breadcrumb.Link>\n\t\t</Breadcrumb.Item>\n\t\t<Breadcrumb.Separator>\n\t\t\t<SlashIcon />\n\t\t</Breadcrumb.Separator>\n\t\t<Breadcrumb.Item>\n\t\t\t<DropdownMenu.Root>\n\t\t\t\t<DropdownMenu.Trigger class=\"flex items-center gap-1\">\n\t\t\t\t\tComponents\n\t\t\t\t\t<ChevronDownIcon class=\"size-4\" />\n\t\t\t\t</DropdownMenu.Trigger>\n\t\t\t\t<DropdownMenu.Content align=\"start\">\n\t\t\t\t\t<DropdownMenu.Item>Documentation</DropdownMenu.Item>\n\t\t\t\t\t<DropdownMenu.Item>Themes</DropdownMenu.Item>\n\t\t\t\t\t<DropdownMenu.Item>GitHub</DropdownMenu.Item>\n\t\t\t\t</DropdownMenu.Content>\n\t\t\t</DropdownMenu.Root>\n\t\t</Breadcrumb.Item>\n\t\t<Breadcrumb.Separator>\n\t\t\t<SlashIcon />\n\t\t</Breadcrumb.Separator>\n\t\t<Breadcrumb.Item>\n\t\t\t<Breadcrumb.Page>Breadcrumb</Breadcrumb.Page>\n\t\t</Breadcrumb.Item>\n\t</Breadcrumb.List>\n</Breadcrumb.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/breadcrumb-ellipsis.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Breadcrumb from \"$lib/registry/ui/breadcrumb/index.js\";\n</script>\n\n<Breadcrumb.Root>\n\t<Breadcrumb.List>\n\t\t<Breadcrumb.Item>\n\t\t\t<Breadcrumb.Link href=\"/\">Home</Breadcrumb.Link>\n\t\t</Breadcrumb.Item>\n\t\t<Breadcrumb.Separator />\n\t\t<Breadcrumb.Item>\n\t\t\t<Breadcrumb.Ellipsis />\n\t\t</Breadcrumb.Item>\n\t\t<Breadcrumb.Separator />\n\t\t<Breadcrumb.Item>\n\t\t\t<Breadcrumb.Link href=\"/docs/components\">Components</Breadcrumb.Link>\n\t\t</Breadcrumb.Item>\n\t\t<Breadcrumb.Separator />\n\t\t<Breadcrumb.Item>\n\t\t\t<Breadcrumb.Page>Breadcrumb</Breadcrumb.Page>\n\t\t</Breadcrumb.Item>\n\t</Breadcrumb.List>\n</Breadcrumb.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/breadcrumb-link.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Breadcrumb from \"$lib/registry/ui/breadcrumb/index.js\";\n</script>\n\n<Breadcrumb.Root>\n\t<Breadcrumb.List>\n\t\t<Breadcrumb.Item>\n\t\t\t<Breadcrumb.Link href=\"/\">Home</Breadcrumb.Link>\n\t\t</Breadcrumb.Item>\n\t\t<Breadcrumb.Separator />\n\t\t<Breadcrumb.Item>\n\t\t\t<Breadcrumb.Link href=\"/components\">Components</Breadcrumb.Link>\n\t\t</Breadcrumb.Item>\n\t\t<Breadcrumb.Separator />\n\t\t<Breadcrumb.Item>\n\t\t\t<Breadcrumb.Page>Breadcrumb</Breadcrumb.Page>\n\t\t</Breadcrumb.Item>\n\t</Breadcrumb.List>\n</Breadcrumb.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/breadcrumb-responsive.svelte",
    "content": "<script lang=\"ts\">\n\timport { MediaQuery } from \"svelte/reactivity\";\n\timport * as Breadcrumb from \"$lib/registry/ui/breadcrumb/index.js\";\n\timport * as Drawer from \"$lib/registry/ui/drawer/index.js\";\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\timport { buttonVariants } from \"$lib/registry/ui/button/index.js\";\n\n\tconst items = [\n\t\t{ href: \"#\", label: \"Home\" },\n\t\t{ href: \"#\", label: \"Documentation\" },\n\t\t{ href: \"#\", label: \"Build Your Application\" },\n\t\t{ href: \"#\", label: \"Data Fetching\" },\n\t\t{ label: \"Caching and Revalidating\" },\n\t];\n\n\tconst ITEMS_TO_DISPLAY = 3;\n\n\tlet open = $state(false);\n\n\tconst isDesktop = new MediaQuery(\"(min-width: 768px)\");\n</script>\n\n<Breadcrumb.Root>\n\t<Breadcrumb.List>\n\t\t<Breadcrumb.Item>\n\t\t\t<Breadcrumb.Link href={items[0].href}>\n\t\t\t\t{items[0].label}\n\t\t\t</Breadcrumb.Link>\n\t\t</Breadcrumb.Item>\n\t\t<Breadcrumb.Separator />\n\t\t{#if items.length > ITEMS_TO_DISPLAY}\n\t\t\t<Breadcrumb.Item>\n\t\t\t\t{#if isDesktop.current}\n\t\t\t\t\t<DropdownMenu.Root bind:open>\n\t\t\t\t\t\t<DropdownMenu.Trigger\n\t\t\t\t\t\t\tclass=\"flex items-center gap-1\"\n\t\t\t\t\t\t\taria-label=\"Toggle menu\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Breadcrumb.Ellipsis class=\"size-4\" />\n\t\t\t\t\t\t</DropdownMenu.Trigger>\n\t\t\t\t\t\t<DropdownMenu.Content align=\"start\">\n\t\t\t\t\t\t\t{#each items.slice(1, -2) as item, i (i)}\n\t\t\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t\t\t<a href={item.href ? item.href : \"#\"}>\n\t\t\t\t\t\t\t\t\t\t{item.label}\n\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t</DropdownMenu.Content>\n\t\t\t\t\t</DropdownMenu.Root>\n\t\t\t\t{:else}\n\t\t\t\t\t<Drawer.Root bind:open>\n\t\t\t\t\t\t<Drawer.Trigger aria-label=\"Toggle Menu\">\n\t\t\t\t\t\t\t<Breadcrumb.Ellipsis class=\"size-4\" />\n\t\t\t\t\t\t</Drawer.Trigger>\n\t\t\t\t\t\t<Drawer.Content>\n\t\t\t\t\t\t\t<Drawer.Header class=\"text-start\">\n\t\t\t\t\t\t\t\t<Drawer.Title>Navigate to</Drawer.Title>\n\t\t\t\t\t\t\t\t<Drawer.Description>\n\t\t\t\t\t\t\t\t\tSelect a page to navigate to.\n\t\t\t\t\t\t\t\t</Drawer.Description>\n\t\t\t\t\t\t\t</Drawer.Header>\n\t\t\t\t\t\t\t<div class=\"grid gap-1 px-4\">\n\t\t\t\t\t\t\t\t{#each items.slice(1, -2) as item, i (i)}\n\t\t\t\t\t\t\t\t\t<a href={item.href ? item.href : \"#\"} class=\"py-1 text-sm\">\n\t\t\t\t\t\t\t\t\t\t{item.label}\n\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<Drawer.Footer class=\"pt-4\">\n\t\t\t\t\t\t\t\t<Drawer.Close class={buttonVariants({ variant: \"outline\" })}>\n\t\t\t\t\t\t\t\t\tClose\n\t\t\t\t\t\t\t\t</Drawer.Close>\n\t\t\t\t\t\t\t</Drawer.Footer>\n\t\t\t\t\t\t</Drawer.Content>\n\t\t\t\t\t</Drawer.Root>\n\t\t\t\t{/if}\n\t\t\t</Breadcrumb.Item>\n\t\t\t<Breadcrumb.Separator />\n\t\t{/if}\n\n\t\t{#each items.slice(-ITEMS_TO_DISPLAY + 1) as item (item.label)}\n\t\t\t<Breadcrumb.Item>\n\t\t\t\t{#if item.href}\n\t\t\t\t\t<Breadcrumb.Link href={item.href} class=\"max-w-20 truncate md:max-w-none\">\n\t\t\t\t\t\t{item.label}\n\t\t\t\t\t</Breadcrumb.Link>\n\t\t\t\t\t<Breadcrumb.Separator />\n\t\t\t\t{:else}\n\t\t\t\t\t<Breadcrumb.Page class=\"max-w-20 truncate md:max-w-none\">\n\t\t\t\t\t\t{item.label}\n\t\t\t\t\t</Breadcrumb.Page>\n\t\t\t\t{/if}\n\t\t\t</Breadcrumb.Item>\n\t\t{/each}\n\t</Breadcrumb.List>\n</Breadcrumb.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/breadcrumb-separator.svelte",
    "content": "<script lang=\"ts\">\n\timport SlashIcon from \"@lucide/svelte/icons/slash\";\n\timport * as Breadcrumb from \"$lib/registry/ui/breadcrumb/index.js\";\n</script>\n\n<Breadcrumb.Root>\n\t<Breadcrumb.List>\n\t\t<Breadcrumb.Item>\n\t\t\t<Breadcrumb.Link href=\"/\">Home</Breadcrumb.Link>\n\t\t</Breadcrumb.Item>\n\t\t<Breadcrumb.Separator>\n\t\t\t<SlashIcon />\n\t\t</Breadcrumb.Separator>\n\t\t<Breadcrumb.Item>\n\t\t\t<Breadcrumb.Link href=\"/components\">Components</Breadcrumb.Link>\n\t\t</Breadcrumb.Item>\n\t\t<Breadcrumb.Separator>\n\t\t\t<SlashIcon />\n\t\t</Breadcrumb.Separator>\n\t\t<Breadcrumb.Item>\n\t\t\t<Breadcrumb.Page>Breadcrumb</Breadcrumb.Page>\n\t\t</Breadcrumb.Item>\n\t</Breadcrumb.List>\n</Breadcrumb.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/button-default.svelte",
    "content": "<script lang=\"ts\">\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n</script>\n\n<Button>Button</Button>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/button-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport ArrowUpIcon from \"@lucide/svelte/icons/arrow-up\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n</script>\n\n<div class=\"flex flex-wrap items-center gap-2 md:flex-row\">\n\t<Button variant=\"outline\">Button</Button>\n\t<Button variant=\"outline\" size=\"icon\" aria-label=\"Submit\">\n\t\t<ArrowUpIcon />\n\t</Button>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/button-destructive.svelte",
    "content": "<script lang=\"ts\">\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n</script>\n\n<Button variant=\"destructive\">Destructive</Button>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/button-ghost.svelte",
    "content": "<script lang=\"ts\">\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n</script>\n\n<Button variant=\"ghost\">Ghost</Button>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/button-group-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport Archive from \"@lucide/svelte/icons/archive\";\n\timport ArrowLeft from \"@lucide/svelte/icons/arrow-left\";\n\timport CalendarPlus from \"@lucide/svelte/icons/calendar-plus\";\n\timport Clock from \"@lucide/svelte/icons/clock\";\n\timport ListFilter from \"@lucide/svelte/icons/list-filter\";\n\timport MailCheck from \"@lucide/svelte/icons/mail-check\";\n\timport MoreHorizontal from \"@lucide/svelte/icons/more-horizontal\";\n\timport Tag from \"@lucide/svelte/icons/tag\";\n\timport Trash2 from \"@lucide/svelte/icons/trash-2\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as ButtonGroup from \"$lib/registry/ui/button-group/index.js\";\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\n\tlet label = $state(\"personal\");\n</script>\n\n<ButtonGroup.Root>\n\t<ButtonGroup.Root class=\"hidden sm:flex\">\n\t\t<Button variant=\"outline\" size=\"icon-sm\" aria-label=\"Go Back\">\n\t\t\t<ArrowLeft />\n\t\t</Button>\n\t</ButtonGroup.Root>\n\t<ButtonGroup.Root>\n\t\t<Button size=\"sm\" variant=\"outline\">Archive</Button>\n\t\t<Button size=\"sm\" variant=\"outline\">Report</Button>\n\t</ButtonGroup.Root>\n\t<ButtonGroup.Root>\n\t\t<Button size=\"sm\" variant=\"outline\">Snooze</Button>\n\t\t<DropdownMenu.Root>\n\t\t\t<DropdownMenu.Trigger>\n\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t<Button {...props} variant=\"outline\" size=\"icon-sm\" aria-label=\"More Options\">\n\t\t\t\t\t\t<MoreHorizontal />\n\t\t\t\t\t</Button>\n\t\t\t\t{/snippet}\n\t\t\t</DropdownMenu.Trigger>\n\t\t\t<DropdownMenu.Content align=\"end\" class=\"w-52\">\n\t\t\t\t<DropdownMenu.Group>\n\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t<MailCheck />\n\t\t\t\t\t\tMark as Read\n\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t<Archive />\n\t\t\t\t\t\tArchive\n\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t</DropdownMenu.Group>\n\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t<DropdownMenu.Group>\n\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t<Clock />\n\t\t\t\t\t\tSnooze\n\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t<CalendarPlus />\n\t\t\t\t\t\tAdd to Calendar\n\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t<ListFilter />\n\t\t\t\t\t\tAdd to List\n\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t<DropdownMenu.Sub>\n\t\t\t\t\t\t<DropdownMenu.SubTrigger>\n\t\t\t\t\t\t\t<Tag />\n\t\t\t\t\t\t\tLabel As...\n\t\t\t\t\t\t</DropdownMenu.SubTrigger>\n\t\t\t\t\t\t<DropdownMenu.SubContent>\n\t\t\t\t\t\t\t<DropdownMenu.RadioGroup bind:value={label}>\n\t\t\t\t\t\t\t\t<DropdownMenu.RadioItem value=\"personal\">\n\t\t\t\t\t\t\t\t\tPersonal\n\t\t\t\t\t\t\t\t</DropdownMenu.RadioItem>\n\t\t\t\t\t\t\t\t<DropdownMenu.RadioItem value=\"work\">Work</DropdownMenu.RadioItem>\n\t\t\t\t\t\t\t\t<DropdownMenu.RadioItem value=\"other\">Other</DropdownMenu.RadioItem>\n\t\t\t\t\t\t\t</DropdownMenu.RadioGroup>\n\t\t\t\t\t\t</DropdownMenu.SubContent>\n\t\t\t\t\t</DropdownMenu.Sub>\n\t\t\t\t</DropdownMenu.Group>\n\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t<DropdownMenu.Group>\n\t\t\t\t\t<DropdownMenu.Item class=\"text-destructive focus:text-destructive\">\n\t\t\t\t\t\t<Trash2 />\n\t\t\t\t\t\tTrash\n\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t</DropdownMenu.Group>\n\t\t\t</DropdownMenu.Content>\n\t\t</DropdownMenu.Root>\n\t</ButtonGroup.Root>\n</ButtonGroup.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/button-group-dropdown-menu-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport AlertTriangle from \"@lucide/svelte/icons/alert-triangle\";\n\timport ChevronDown from \"@lucide/svelte/icons/chevron-down\";\n\timport CopyIcon from \"@tabler/icons-svelte/icons/copy\";\n\timport CheckIcon from \"@tabler/icons-svelte/icons/check\";\n\timport Share from \"@lucide/svelte/icons/share\";\n\timport Trash from \"@lucide/svelte/icons/trash\";\n\timport UserRoundX from \"@lucide/svelte/icons/user-round-x\";\n\timport VolumeOff from \"@lucide/svelte/icons/volume-off\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as ButtonGroup from \"$lib/registry/ui/button-group/index.js\";\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n</script>\n\n<ButtonGroup.Root>\n\t<Button variant=\"outline\">Follow</Button>\n\t<DropdownMenu.Root>\n\t\t<DropdownMenu.Trigger>\n\t\t\t{#snippet child({ props })}\n\t\t\t\t<Button {...props} variant=\"outline\" class=\"!ps-2\">\n\t\t\t\t\t<ChevronDown />\n\t\t\t\t</Button>\n\t\t\t{/snippet}\n\t\t</DropdownMenu.Trigger>\n\t\t<DropdownMenu.Content align=\"end\" class=\"[--radius:1rem]\">\n\t\t\t<DropdownMenu.Group>\n\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t<VolumeOff />\n\t\t\t\t\tMute Conversation\n\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t<CheckIcon />\n\t\t\t\t\tMark as Read\n\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t<AlertTriangle />\n\t\t\t\t\tReport Conversation\n\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t<UserRoundX />\n\t\t\t\t\tBlock User\n\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t<Share />\n\t\t\t\t\tShare Conversation\n\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t<CopyIcon />\n\t\t\t\t\tCopy Conversation\n\t\t\t\t</DropdownMenu.Item>\n\t\t\t</DropdownMenu.Group>\n\t\t\t<DropdownMenu.Separator />\n\t\t\t<DropdownMenu.Group>\n\t\t\t\t<DropdownMenu.Item variant=\"destructive\">\n\t\t\t\t\t<Trash />\n\t\t\t\t\tDelete Conversation\n\t\t\t\t</DropdownMenu.Item>\n\t\t\t</DropdownMenu.Group>\n\t\t</DropdownMenu.Content>\n\t</DropdownMenu.Root>\n</ButtonGroup.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/button-group-input-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport Search from \"@lucide/svelte/icons/search\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as ButtonGroup from \"$lib/registry/ui/button-group/index.js\";\n\timport { Input } from \"$lib/registry/ui/input/index.js\";\n</script>\n\n<ButtonGroup.Root>\n\t<Input placeholder=\"Search...\" />\n\t<Button variant=\"outline\" size=\"icon\" aria-label=\"Search\">\n\t\t<Search />\n\t</Button>\n</ButtonGroup.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/button-group-input-group-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport AudioLines from \"@lucide/svelte/icons/audio-lines\";\n\timport Plus from \"@lucide/svelte/icons/plus\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as ButtonGroup from \"$lib/registry/ui/button-group/index.js\";\n\timport * as InputGroup from \"$lib/registry/ui/input-group/index.js\";\n\timport * as Tooltip from \"$lib/registry/ui/tooltip/index.js\";\n\n\tlet voiceEnabled = $state(false);\n</script>\n\n<ButtonGroup.Root class=\"[--radius:9999rem]\">\n\t<ButtonGroup.Root>\n\t\t<Button variant=\"outline\" size=\"icon\">\n\t\t\t<Plus />\n\t\t</Button>\n\t</ButtonGroup.Root>\n\t<ButtonGroup.Root class=\"flex-1\">\n\t\t<InputGroup.Root>\n\t\t\t<InputGroup.Input\n\t\t\t\tplaceholder={voiceEnabled ? \"Record and send audio...\" : \"Send a message...\"}\n\t\t\t\tdisabled={voiceEnabled}\n\t\t\t/>\n\t\t\t<InputGroup.Addon align=\"inline-end\">\n\t\t\t\t<Tooltip.Root>\n\t\t\t\t\t<Tooltip.Trigger>\n\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t<InputGroup.Button\n\t\t\t\t\t\t\t\t{...props}\n\t\t\t\t\t\t\t\tonclick={() => (voiceEnabled = !voiceEnabled)}\n\t\t\t\t\t\t\t\tsize=\"icon-xs\"\n\t\t\t\t\t\t\t\tdata-active={voiceEnabled}\n\t\t\t\t\t\t\t\tclass=\"data-[active=true]:bg-orange-100 data-[active=true]:text-orange-700 dark:data-[active=true]:bg-orange-800 dark:data-[active=true]:text-orange-100\"\n\t\t\t\t\t\t\t\taria-pressed={voiceEnabled}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<AudioLines />\n\t\t\t\t\t\t\t</InputGroup.Button>\n\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t</Tooltip.Trigger>\n\t\t\t\t\t<Tooltip.Content>Voice Mode</Tooltip.Content>\n\t\t\t\t</Tooltip.Root>\n\t\t\t</InputGroup.Addon>\n\t\t</InputGroup.Root>\n\t</ButtonGroup.Root>\n</ButtonGroup.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/button-group-nested-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport ArrowLeft from \"@lucide/svelte/icons/arrow-left\";\n\timport ArrowRight from \"@lucide/svelte/icons/arrow-right\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as ButtonGroup from \"$lib/registry/ui/button-group/index.js\";\n</script>\n\n<ButtonGroup.Root>\n\t<ButtonGroup.Root>\n\t\t<Button variant=\"outline\" size=\"sm\">1</Button>\n\t\t<Button variant=\"outline\" size=\"sm\">2</Button>\n\t\t<Button variant=\"outline\" size=\"sm\">3</Button>\n\t\t<Button variant=\"outline\" size=\"sm\">4</Button>\n\t\t<Button variant=\"outline\" size=\"sm\">5</Button>\n\t</ButtonGroup.Root>\n\t<ButtonGroup.Root>\n\t\t<Button variant=\"outline\" size=\"icon-sm\" aria-label=\"Previous\">\n\t\t\t<ArrowLeft />\n\t\t</Button>\n\t\t<Button variant=\"outline\" size=\"icon-sm\" aria-label=\"Next\">\n\t\t\t<ArrowRight />\n\t\t</Button>\n\t</ButtonGroup.Root>\n</ButtonGroup.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/button-group-orientation-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport Minus from \"@lucide/svelte/icons/minus\";\n\timport Plus from \"@lucide/svelte/icons/plus\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as ButtonGroup from \"$lib/registry/ui/button-group/index.js\";\n</script>\n\n<ButtonGroup.Root orientation=\"vertical\" aria-label=\"Media controls\" class=\"h-fit\">\n\t<Button variant=\"outline\" size=\"icon\">\n\t\t<Plus />\n\t</Button>\n\t<Button variant=\"outline\" size=\"icon\">\n\t\t<Minus />\n\t</Button>\n</ButtonGroup.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/button-group-popover-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport Bot from \"@lucide/svelte/icons/bot\";\n\timport ChevronDown from \"@lucide/svelte/icons/chevron-down\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as ButtonGroup from \"$lib/registry/ui/button-group/index.js\";\n\timport * as Popover from \"$lib/registry/ui/popover/index.js\";\n\timport { Separator } from \"$lib/registry/ui/separator/index.js\";\n\timport { Textarea } from \"$lib/registry/ui/textarea/index.js\";\n</script>\n\n<ButtonGroup.Root>\n\t<Button variant=\"outline\" size=\"sm\">\n\t\t<Bot />\n\t\tCopilot\n\t</Button>\n\t<Popover.Root>\n\t\t<Popover.Trigger>\n\t\t\t{#snippet child({ props })}\n\t\t\t\t<Button {...props} variant=\"outline\" size=\"icon-sm\" aria-label=\"Open Popover\">\n\t\t\t\t\t<ChevronDown />\n\t\t\t\t</Button>\n\t\t\t{/snippet}\n\t\t</Popover.Trigger>\n\t\t<Popover.Content align=\"end\" class=\"rounded-xl p-0 text-sm\">\n\t\t\t<div class=\"px-4 py-3\">\n\t\t\t\t<div class=\"text-sm font-medium\">Agent Tasks</div>\n\t\t\t</div>\n\t\t\t<Separator />\n\t\t\t<div class=\"p-4 text-sm *:[p:not(:last-child)]:mb-2\">\n\t\t\t\t<Textarea\n\t\t\t\t\tplaceholder=\"Describe your task in natural language.\"\n\t\t\t\t\tclass=\"mb-4 resize-none\"\n\t\t\t\t/>\n\t\t\t\t<p class=\"font-medium\">Start a new task with Copilot</p>\n\t\t\t\t<p class=\"text-muted-foreground\">\n\t\t\t\t\tDescribe your task in natural language. Copilot will work in the background and\n\t\t\t\t\topen a pull request for your review.\n\t\t\t\t</p>\n\t\t\t</div>\n\t\t</Popover.Content>\n\t</Popover.Root>\n</ButtonGroup.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/button-group-select-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport ArrowRight from \"@lucide/svelte/icons/arrow-right\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as ButtonGroup from \"$lib/registry/ui/button-group/index.js\";\n\timport { Input } from \"$lib/registry/ui/input/index.js\";\n\timport * as Select from \"$lib/registry/ui/select/index.js\";\n\n\tconst CURRENCIES = [\n\t\t{\n\t\t\tvalue: \"$\",\n\t\t\tlabel: \"US Dollar\",\n\t\t},\n\t\t{\n\t\t\tvalue: \"€\",\n\t\t\tlabel: \"Euro\",\n\t\t},\n\t\t{\n\t\t\tvalue: \"£\",\n\t\t\tlabel: \"British Pound\",\n\t\t},\n\t];\n\n\tlet currency = $state(\"$\");\n</script>\n\n<ButtonGroup.Root>\n\t<ButtonGroup.Root>\n\t\t<Select.Root type=\"single\" bind:value={currency}>\n\t\t\t<Select.Trigger class=\"font-mono\">\n\t\t\t\t{currency}\n\t\t\t</Select.Trigger>\n\t\t\t<Select.Content class=\"min-w-24\">\n\t\t\t\t{#each CURRENCIES as currencyOption (currencyOption.value)}\n\t\t\t\t\t<Select.Item value={currencyOption.value}>\n\t\t\t\t\t\t{currencyOption.value}\n\t\t\t\t\t\t<span class=\"text-muted-foreground\">{currencyOption.label}</span>\n\t\t\t\t\t</Select.Item>\n\t\t\t\t{/each}\n\t\t\t</Select.Content>\n\t\t</Select.Root>\n\t\t<Input placeholder=\"10.00\" pattern=\"[0-9]*\" />\n\t</ButtonGroup.Root>\n\t<ButtonGroup.Root>\n\t\t<Button aria-label=\"Send\" size=\"icon\" variant=\"outline\">\n\t\t\t<ArrowRight />\n\t\t</Button>\n\t</ButtonGroup.Root>\n</ButtonGroup.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/button-group-separator-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as ButtonGroup from \"$lib/registry/ui/button-group/index.js\";\n</script>\n\n<ButtonGroup.Root>\n\t<Button variant=\"secondary\" size=\"sm\">Copy</Button>\n\t<ButtonGroup.Separator />\n\t<Button variant=\"secondary\" size=\"sm\">Paste</Button>\n</ButtonGroup.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/button-group-size-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport Plus from \"@lucide/svelte/icons/plus\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as ButtonGroup from \"$lib/registry/ui/button-group/index.js\";\n</script>\n\n<div class=\"flex flex-col items-start gap-8\">\n\t<ButtonGroup.Root>\n\t\t<Button variant=\"outline\" size=\"sm\">Small</Button>\n\t\t<Button variant=\"outline\" size=\"sm\">Button</Button>\n\t\t<Button variant=\"outline\" size=\"sm\">Group</Button>\n\t\t<Button variant=\"outline\" size=\"icon-sm\">\n\t\t\t<Plus />\n\t\t</Button>\n\t</ButtonGroup.Root>\n\t<ButtonGroup.Root>\n\t\t<Button variant=\"outline\">Default</Button>\n\t\t<Button variant=\"outline\">Button</Button>\n\t\t<Button variant=\"outline\">Group</Button>\n\t\t<Button variant=\"outline\" size=\"icon\">\n\t\t\t<Plus />\n\t\t</Button>\n\t</ButtonGroup.Root>\n\t<ButtonGroup.Root>\n\t\t<Button variant=\"outline\" size=\"lg\">Large</Button>\n\t\t<Button variant=\"outline\" size=\"lg\">Button</Button>\n\t\t<Button variant=\"outline\" size=\"lg\">Group</Button>\n\t\t<Button variant=\"outline\" size=\"icon-lg\">\n\t\t\t<Plus />\n\t\t</Button>\n\t</ButtonGroup.Root>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/button-group-split-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport Plus from \"@lucide/svelte/icons/plus\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as ButtonGroup from \"$lib/registry/ui/button-group/index.js\";\n</script>\n\n<ButtonGroup.Root>\n\t<Button variant=\"secondary\">Button</Button>\n\t<ButtonGroup.Separator />\n\t<Button variant=\"secondary\" size=\"icon\">\n\t\t<Plus />\n\t</Button>\n</ButtonGroup.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/button-icon.svelte",
    "content": "<script lang=\"ts\">\n\timport CircleFadingArrowUpIcon from \"@lucide/svelte/icons/circle-fading-arrow-up\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n</script>\n\n<Button variant=\"outline\" size=\"icon\" aria-label=\"Submit\">\n\t<CircleFadingArrowUpIcon />\n</Button>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/button-link.svelte",
    "content": "<script lang=\"ts\">\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n</script>\n\n<Button variant=\"link\">Link</Button>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/button-loading.svelte",
    "content": "<script lang=\"ts\">\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport { Spinner } from \"$lib/registry/ui/spinner/index.js\";\n</script>\n\n<Button size=\"sm\" variant=\"outline\" disabled>\n\t<Spinner />\n\tSubmit\n</Button>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/button-outline.svelte",
    "content": "<script lang=\"ts\">\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n</script>\n\n<Button variant=\"outline\">Outline</Button>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/button-rounded.svelte",
    "content": "<script lang=\"ts\">\n\timport ArrowUpIcon from \"@lucide/svelte/icons/arrow-up\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n</script>\n\n<div class=\"flex flex-col gap-8\">\n\t<Button variant=\"outline\" size=\"icon\" class=\"rounded-full\">\n\t\t<ArrowUpIcon />\n\t</Button>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/button-secondary.svelte",
    "content": "<script lang=\"ts\">\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n</script>\n\n<Button variant=\"secondary\">Secondary</Button>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/button-size.svelte",
    "content": "<script lang=\"ts\">\n\timport ArrowUpRightIcon from \"@lucide/svelte/icons/arrow-up-right\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n</script>\n\n<div class=\"flex flex-col items-start gap-8 sm:flex-row\">\n\t<div class=\"flex items-start gap-2\">\n\t\t<Button size=\"sm\" variant=\"outline\">Small</Button>\n\t\t<Button size=\"icon-sm\" aria-label=\"Submit\" variant=\"outline\">\n\t\t\t<ArrowUpRightIcon />\n\t\t</Button>\n\t</div>\n\t<div class=\"flex items-start gap-2\">\n\t\t<Button variant=\"outline\">Default</Button>\n\t\t<Button size=\"icon\" aria-label=\"Submit\" variant=\"outline\">\n\t\t\t<ArrowUpRightIcon />\n\t\t</Button>\n\t</div>\n\t<div class=\"flex items-start gap-2\">\n\t\t<Button variant=\"outline\" size=\"lg\">Large</Button>\n\t\t<Button size=\"icon-lg\" aria-label=\"Submit\" variant=\"outline\">\n\t\t\t<ArrowUpRightIcon />\n\t\t</Button>\n\t</div>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/button-with-icon.svelte",
    "content": "<script lang=\"ts\">\n\timport IconGitBranch from \"@lucide/svelte/icons/git-branch\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n</script>\n\n<Button variant=\"outline\" size=\"sm\">\n\t<IconGitBranch /> New Branch\n</Button>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/calendar-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport { getLocalTimeZone, today } from \"@internationalized/date\";\n\timport { Calendar } from \"$lib/registry/ui/calendar/index.js\";\n\n\tlet value = today(getLocalTimeZone());\n</script>\n\n<Calendar type=\"single\" bind:value class=\"rounded-md border shadow-sm\" captionLayout=\"dropdown\" />\n"
  },
  {
    "path": "docs/src/lib/registry/examples/calendar-with-selects.svelte",
    "content": "<script lang=\"ts\">\n\timport { Calendar as CalendarPrimitive } from \"bits-ui\";\n\timport {\n\t\tDateFormatter,\n\t\tgetLocalTimeZone,\n\t\ttoday,\n\t\ttype DateValue,\n\t} from \"@internationalized/date\";\n\timport * as Calendar from \"$lib/registry/ui/calendar/index.js\";\n\timport * as Select from \"$lib/registry/ui/select/index.js\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet value = $state<DateValue>();\n\tlet placeholder = $state<DateValue>();\n\n\tconst currentDate = today(getLocalTimeZone());\n\n\tconst monthFmt = new DateFormatter(\"en-US\", {\n\t\tmonth: \"long\",\n\t});\n\n\tconst monthOptions = Array.from({ length: 12 }, (_, i) => {\n\t\tconst month = currentDate.set({ month: i + 1 });\n\t\treturn {\n\t\t\tvalue: month.month,\n\t\t\tlabel: monthFmt.format(month.toDate(getLocalTimeZone())),\n\t\t};\n\t});\n\n\tconst yearOptions = Array.from({ length: 100 }, (_, i) => ({\n\t\tlabel: String(new Date().getFullYear() - i),\n\t\tvalue: new Date().getFullYear() - i,\n\t}));\n\n\tconst defaultYear = $derived(\n\t\tplaceholder ? { value: placeholder.year, label: String(placeholder.year) } : undefined\n\t);\n\n\tconst defaultMonth = $derived(\n\t\tplaceholder\n\t\t\t? {\n\t\t\t\t\tvalue: placeholder.month,\n\t\t\t\t\tlabel: monthFmt.format(placeholder.toDate(getLocalTimeZone())),\n\t\t\t\t}\n\t\t\t: undefined\n\t);\n\n\tconst monthLabel = $derived(\n\t\tmonthOptions.find((m) => m.value === defaultMonth?.value)?.label ?? \"Select a month\"\n\t);\n</script>\n\n<CalendarPrimitive.Root\n\ttype=\"single\"\n\tweekdayFormat=\"short\"\n\tclass={cn(\"rounded-md border p-3\")}\n\tbind:value\n\tbind:placeholder\n>\n\t{#snippet children({ months, weekdays })}\n\t\t<Calendar.Header class=\"flex w-full items-center justify-between gap-2\">\n\t\t\t<Select.Root\n\t\t\t\ttype=\"single\"\n\t\t\t\tvalue={`${defaultMonth?.value}`}\n\t\t\t\tonValueChange={(v) => {\n\t\t\t\t\tif (!placeholder) return;\n\t\t\t\t\tif (v === `${placeholder.month}`) return;\n\t\t\t\t\tplaceholder = placeholder.set({ month: Number.parseInt(v) });\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<Select.Trigger aria-label=\"Select month\" class=\"w-[60%]\">\n\t\t\t\t\t{monthLabel}\n\t\t\t\t</Select.Trigger>\n\t\t\t\t<Select.Content class=\"max-h-[200px] overflow-y-auto\">\n\t\t\t\t\t{#each monthOptions as { value, label } (value)}\n\t\t\t\t\t\t<Select.Item value={`${value}`} {label} />\n\t\t\t\t\t{/each}\n\t\t\t\t</Select.Content>\n\t\t\t</Select.Root>\n\t\t\t<Select.Root\n\t\t\t\ttype=\"single\"\n\t\t\t\tvalue={`${defaultYear?.value}`}\n\t\t\t\tonValueChange={(v) => {\n\t\t\t\t\tif (!v || !placeholder) return;\n\t\t\t\t\tif (v === `${placeholder?.year}`) return;\n\t\t\t\t\tplaceholder = placeholder.set({ year: Number.parseInt(v) });\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<Select.Trigger aria-label=\"Select year\" class=\"w-[40%]\">\n\t\t\t\t\t{defaultYear?.label ?? \"Select year\"}\n\t\t\t\t</Select.Trigger>\n\t\t\t\t<Select.Content class=\"max-h-[200px] overflow-y-auto\">\n\t\t\t\t\t{#each yearOptions as { value, label } (value)}\n\t\t\t\t\t\t<Select.Item value={`${value}`} {label} />\n\t\t\t\t\t{/each}\n\t\t\t\t</Select.Content>\n\t\t\t</Select.Root>\n\t\t</Calendar.Header>\n\t\t<Calendar.Months>\n\t\t\t{#each months as month (month)}\n\t\t\t\t<Calendar.Grid>\n\t\t\t\t\t<Calendar.GridHead>\n\t\t\t\t\t\t<Calendar.GridRow class=\"flex\">\n\t\t\t\t\t\t\t{#each weekdays as weekday (weekday)}\n\t\t\t\t\t\t\t\t<Calendar.HeadCell>\n\t\t\t\t\t\t\t\t\t{weekday.slice(0, 2)}\n\t\t\t\t\t\t\t\t</Calendar.HeadCell>\n\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t</Calendar.GridRow>\n\t\t\t\t\t</Calendar.GridHead>\n\t\t\t\t\t<Calendar.GridBody>\n\t\t\t\t\t\t{#each month.weeks as weekDates (weekDates)}\n\t\t\t\t\t\t\t<Calendar.GridRow class=\"mt-2 w-full\">\n\t\t\t\t\t\t\t\t{#each weekDates as date (date)}\n\t\t\t\t\t\t\t\t\t<Calendar.Cell class=\"select-none\" {date} month={month.value}>\n\t\t\t\t\t\t\t\t\t\t<Calendar.Day />\n\t\t\t\t\t\t\t\t\t</Calendar.Cell>\n\t\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t</Calendar.GridRow>\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</Calendar.GridBody>\n\t\t\t\t</Calendar.Grid>\n\t\t\t{/each}\n\t\t</Calendar.Months>\n\t{/snippet}\n</CalendarPrimitive.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/card-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport { Label } from \"$lib/registry/ui/label/index.js\";\n\timport { Input } from \"$lib/registry/ui/input/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n</script>\n\n<Card.Root class=\"-my-4 w-full max-w-sm\">\n\t<Card.Header>\n\t\t<Card.Title>Login to your account</Card.Title>\n\t\t<Card.Description>Enter your email below to login to your account</Card.Description>\n\t\t<Card.Action>\n\t\t\t<Button variant=\"link\">Sign Up</Button>\n\t\t</Card.Action>\n\t</Card.Header>\n\t<Card.Content>\n\t\t<form>\n\t\t\t<div class=\"flex flex-col gap-6\">\n\t\t\t\t<div class=\"grid gap-2\">\n\t\t\t\t\t<Label for=\"email\">Email</Label>\n\t\t\t\t\t<Input id=\"email\" type=\"email\" placeholder=\"m@example.com\" required />\n\t\t\t\t</div>\n\t\t\t\t<div class=\"grid gap-2\">\n\t\t\t\t\t<div class=\"flex items-center\">\n\t\t\t\t\t\t<Label for=\"password\">Password</Label>\n\t\t\t\t\t\t<a\n\t\t\t\t\t\t\thref=\"##\"\n\t\t\t\t\t\t\tclass=\"ms-auto inline-block text-sm underline-offset-4 hover:underline\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tForgot your password?\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</div>\n\t\t\t\t\t<Input id=\"password\" type=\"password\" required />\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</form>\n\t</Card.Content>\n\t<Card.Footer class=\"flex-col gap-2\">\n\t\t<Button type=\"submit\" class=\"w-full\">Login</Button>\n\t\t<Button variant=\"outline\" class=\"w-full\">Login with Google</Button>\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/card-with-form.svelte",
    "content": "<script lang=\"ts\">\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Select from \"$lib/registry/ui/select/index.js\";\n\timport { Input } from \"$lib/registry/ui/input/index.js\";\n\timport { Label } from \"$lib/registry/ui/label/index.js\";\n\n\tconst frameworks = [\n\t\t{\n\t\t\tvalue: \"sveltekit\",\n\t\t\tlabel: \"SvelteKit\",\n\t\t},\n\t\t{\n\t\t\tvalue: \"next\",\n\t\t\tlabel: \"Next.js\",\n\t\t},\n\t\t{\n\t\t\tvalue: \"astro\",\n\t\t\tlabel: \"Astro\",\n\t\t},\n\t\t{\n\t\t\tvalue: \"nuxt\",\n\t\t\tlabel: \"Nuxt.js\",\n\t\t},\n\t];\n\n\tlet framework = $state(\"\");\n\n\tconst selectedFramework = $derived(\n\t\tframeworks.find((f) => f.value === framework)?.label ?? \"Select a framework\"\n\t);\n</script>\n\n<Card.Root class=\"w-[350px]\">\n\t<Card.Header>\n\t\t<Card.Title>Create project</Card.Title>\n\t\t<Card.Description>Deploy your new project in one-click.</Card.Description>\n\t</Card.Header>\n\t<Card.Content>\n\t\t<form>\n\t\t\t<div class=\"grid w-full items-center gap-4\">\n\t\t\t\t<div class=\"flex flex-col space-y-1.5\">\n\t\t\t\t\t<Label for=\"name\">Name</Label>\n\t\t\t\t\t<Input id=\"name\" placeholder=\"Name of your project\" />\n\t\t\t\t</div>\n\t\t\t\t<div class=\"flex flex-col space-y-1.5\">\n\t\t\t\t\t<Label for=\"framework\">Framework</Label>\n\t\t\t\t\t<Select.Root type=\"single\" bind:value={framework}>\n\t\t\t\t\t\t<Select.Trigger id=\"framework\">\n\t\t\t\t\t\t\t{selectedFramework}\n\t\t\t\t\t\t</Select.Trigger>\n\t\t\t\t\t\t<Select.Content>\n\t\t\t\t\t\t\t{#each frameworks as { value, label } (value)}\n\t\t\t\t\t\t\t\t<Select.Item {value} {label} />\n\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t</Select.Content>\n\t\t\t\t\t</Select.Root>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</form>\n\t</Card.Content>\n\t<Card.Footer class=\"flex justify-between\">\n\t\t<Button variant=\"outline\">Cancel</Button>\n\t\t<Button>Deploy</Button>\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/carousel-api.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Carousel from \"$lib/registry/ui/carousel/index.js\";\n\timport type { CarouselAPI } from \"$lib/registry/ui/carousel/context.js\";\n\n\tlet api = $state<CarouselAPI>();\n\n\tconst count = $derived(api ? api.scrollSnapList().length : 0);\n\tlet current = $state(0);\n\n\t$effect(() => {\n\t\tif (api) {\n\t\t\tcurrent = api.selectedScrollSnap() + 1;\n\t\t\tapi.on(\"select\", () => {\n\t\t\t\tcurrent = api!.selectedScrollSnap() + 1;\n\t\t\t});\n\t\t}\n\t});\n</script>\n\n<div>\n\t<Carousel.Root setApi={(emblaApi) => (api = emblaApi)} class=\"w-full max-w-xs\">\n\t\t<Carousel.Content>\n\t\t\t{#each Array(5) as _, i (i)}\n\t\t\t\t<Carousel.Item>\n\t\t\t\t\t<Card.Root>\n\t\t\t\t\t\t<Card.Content class=\"flex aspect-square items-center justify-center p-6\">\n\t\t\t\t\t\t\t<span class=\"text-4xl font-semibold\">{i + 1}</span>\n\t\t\t\t\t\t</Card.Content>\n\t\t\t\t\t</Card.Root>\n\t\t\t\t</Carousel.Item>\n\t\t\t{/each}\n\t\t</Carousel.Content>\n\t\t<Carousel.Previous />\n\t\t<Carousel.Next />\n\t</Carousel.Root>\n\t<div class=\"text-muted-foreground py-2 text-center text-sm\">\n\t\tSlide {current} of {count}\n\t</div>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/carousel-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Carousel from \"$lib/registry/ui/carousel/index.js\";\n</script>\n\n<Carousel.Root class=\"w-full max-w-xs\">\n\t<Carousel.Content>\n\t\t{#each Array(5), i}\n\t\t\t<Carousel.Item>\n\t\t\t\t<div class=\"p-1\">\n\t\t\t\t\t<Card.Root>\n\t\t\t\t\t\t<Card.Content class=\"flex aspect-square items-center justify-center p-6\">\n\t\t\t\t\t\t\t<span class=\"text-4xl font-semibold\">{i + 1}</span>\n\t\t\t\t\t\t</Card.Content>\n\t\t\t\t\t</Card.Root>\n\t\t\t\t</div>\n\t\t\t</Carousel.Item>\n\t\t{/each}\n\t</Carousel.Content>\n\t<Carousel.Previous />\n\t<Carousel.Next />\n</Carousel.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/carousel-orientation.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Carousel from \"$lib/registry/ui/carousel/index.js\";\n</script>\n\n<Carousel.Root\n\topts={{\n\t\talign: \"start\",\n\t}}\n\torientation=\"vertical\"\n\tclass=\"w-full max-w-xs\"\n>\n\t<Carousel.Content class=\"-mt-1 h-[200px]\">\n\t\t{#each Array(5) as _, i (i)}\n\t\t\t<Carousel.Item class=\"pt-1 md:basis-1/2\">\n\t\t\t\t<div class=\"p-1\">\n\t\t\t\t\t<Card.Root>\n\t\t\t\t\t\t<Card.Content class=\"flex items-center justify-center p-6\">\n\t\t\t\t\t\t\t<span class=\"text-3xl font-semibold\">{i + 1}</span>\n\t\t\t\t\t\t</Card.Content>\n\t\t\t\t\t</Card.Root>\n\t\t\t\t</div>\n\t\t\t</Carousel.Item>\n\t\t{/each}\n\t</Carousel.Content>\n\t<Carousel.Previous />\n\t<Carousel.Next />\n</Carousel.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/carousel-plugin.svelte",
    "content": "<script lang=\"ts\">\n\timport Autoplay from \"embla-carousel-autoplay\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Carousel from \"$lib/registry/ui/carousel/index.js\";\n\n\tconst plugin = Autoplay({ delay: 2000, stopOnInteraction: true });\n</script>\n\n<Carousel.Root\n\tplugins={[plugin]}\n\tclass=\"w-full max-w-xs\"\n\tonmouseenter={plugin.stop}\n\tonmouseleave={plugin.reset}\n>\n\t<Carousel.Content>\n\t\t{#each Array(5) as _, i (i)}\n\t\t\t<Carousel.Item>\n\t\t\t\t<div class=\"p-1\">\n\t\t\t\t\t<Card.Root>\n\t\t\t\t\t\t<Card.Content class=\"flex aspect-square items-center justify-center p-6\">\n\t\t\t\t\t\t\t<span class=\"text-4xl font-semibold\">{i + 1}</span>\n\t\t\t\t\t\t</Card.Content>\n\t\t\t\t\t</Card.Root>\n\t\t\t\t</div>\n\t\t\t</Carousel.Item>\n\t\t{/each}\n\t</Carousel.Content>\n\t<Carousel.Previous />\n\t<Carousel.Next />\n</Carousel.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/carousel-size.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Carousel from \"$lib/registry/ui/carousel/index.js\";\n</script>\n\n<Carousel.Root\n\topts={{\n\t\talign: \"start\",\n\t}}\n\tclass=\"w-full max-w-sm\"\n>\n\t<Carousel.Content>\n\t\t{#each Array(5) as _, i (i)}\n\t\t\t<Carousel.Item class=\"md:basis-1/2 lg:basis-1/3\">\n\t\t\t\t<div class=\"p-1\">\n\t\t\t\t\t<Card.Root>\n\t\t\t\t\t\t<Card.Content class=\"flex aspect-square items-center justify-center p-6\">\n\t\t\t\t\t\t\t<span class=\"text-3xl font-semibold\">{i + 1}</span>\n\t\t\t\t\t\t</Card.Content>\n\t\t\t\t\t</Card.Root>\n\t\t\t\t</div>\n\t\t\t</Carousel.Item>\n\t\t{/each}\n\t</Carousel.Content>\n\t<Carousel.Previous />\n\t<Carousel.Next />\n</Carousel.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/carousel-spacing.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Carousel from \"$lib/registry/ui/carousel/index.js\";\n</script>\n\n<Carousel.Root class=\"w-full max-w-sm\">\n\t<Carousel.Content class=\"-ms-1\">\n\t\t{#each Array(5) as _, i (i)}\n\t\t\t<Carousel.Item class=\"ps-1 md:basis-1/2 lg:basis-1/3\">\n\t\t\t\t<div class=\"p-1\">\n\t\t\t\t\t<Card.Root>\n\t\t\t\t\t\t<Card.Content class=\"flex aspect-square items-center justify-center p-6\">\n\t\t\t\t\t\t\t<span class=\"text-2xl font-semibold\">{i + 1}</span>\n\t\t\t\t\t\t</Card.Content>\n\t\t\t\t\t</Card.Root>\n\t\t\t\t</div>\n\t\t\t</Carousel.Item>\n\t\t{/each}\n\t</Carousel.Content>\n\t<Carousel.Previous />\n\t<Carousel.Next />\n</Carousel.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/chart-bar-axis-tick-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport { scaleBand } from \"d3-scale\";\n\timport { BarChart } from \"layerchart\";\n\n\tconst chartData = [\n\t\t{ month: \"January\", desktop: 186, mobile: 80 },\n\t\t{ month: \"February\", desktop: 305, mobile: 200 },\n\t\t{ month: \"March\", desktop: 237, mobile: 120 },\n\t\t{ month: \"April\", desktop: 73, mobile: 190 },\n\t\t{ month: \"May\", desktop: 209, mobile: 130 },\n\t\t{ month: \"June\", desktop: 214, mobile: 140 },\n\t];\n\n\tconst chartConfig = {\n\t\tdesktop: {\n\t\t\tlabel: \"Desktop\",\n\t\t\tcolor: \"#2563eb\",\n\t\t},\n\t\tmobile: {\n\t\t\tlabel: \"Mobile\",\n\t\t\tcolor: \"#60a5fa\",\n\t\t},\n\t} satisfies Chart.ChartConfig;\n</script>\n\n<Chart.Container config={chartConfig} class=\"min-h-[200px] w-full\">\n\t<BarChart\n\t\tdata={chartData}\n\t\txScale={scaleBand().padding(0.25)}\n\t\tx=\"month\"\n\t\taxis=\"x\"\n\t\ttooltip={false}\n\t\tseriesLayout=\"group\"\n\t\tseries={[\n\t\t\t{\n\t\t\t\tkey: \"desktop\",\n\t\t\t\tlabel: chartConfig.desktop.label,\n\t\t\t\tcolor: chartConfig.desktop.color,\n\t\t\t},\n\t\t\t{\n\t\t\t\tkey: \"mobile\",\n\t\t\t\tlabel: chartConfig.mobile.label,\n\t\t\t\tcolor: chartConfig.mobile.color,\n\t\t\t},\n\t\t]}\n\t\tprops={{\n\t\t\txAxis: {\n\t\t\t\tformat: (d) => d.slice(0, 3),\n\t\t\t},\n\t\t}}\n\t/>\n</Chart.Container>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/chart-bar-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport { scaleBand } from \"d3-scale\";\n\timport { BarChart } from \"layerchart\";\n\n\tconst chartData = [\n\t\t{ month: \"January\", desktop: 186, mobile: 80 },\n\t\t{ month: \"February\", desktop: 305, mobile: 200 },\n\t\t{ month: \"March\", desktop: 237, mobile: 120 },\n\t\t{ month: \"April\", desktop: 73, mobile: 190 },\n\t\t{ month: \"May\", desktop: 209, mobile: 130 },\n\t\t{ month: \"June\", desktop: 214, mobile: 140 },\n\t];\n\n\tconst chartConfig = {\n\t\tdesktop: {\n\t\t\tlabel: \"Desktop\",\n\t\t\tcolor: \"#2563eb\",\n\t\t},\n\t\tmobile: {\n\t\t\tlabel: \"Mobile\",\n\t\t\tcolor: \"#60a5fa\",\n\t\t},\n\t} satisfies Chart.ChartConfig;\n</script>\n\n<Chart.Container config={chartConfig} class=\"min-h-[200px] w-full\">\n\t<BarChart\n\t\tdata={chartData}\n\t\txScale={scaleBand().padding(0.25)}\n\t\tx=\"month\"\n\t\taxis=\"x\"\n\t\tseriesLayout=\"group\"\n\t\ttooltip={false}\n\t\tseries={[\n\t\t\t{\n\t\t\t\tkey: \"desktop\",\n\t\t\t\tlabel: chartConfig.desktop.label,\n\t\t\t\tcolor: chartConfig.desktop.color,\n\t\t\t},\n\t\t\t{\n\t\t\t\tkey: \"mobile\",\n\t\t\t\tlabel: chartConfig.mobile.label,\n\t\t\t\tcolor: chartConfig.mobile.color,\n\t\t\t},\n\t\t]}\n\t/>\n</Chart.Container>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/chart-bar-legend-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport { scaleBand } from \"d3-scale\";\n\timport { BarChart } from \"layerchart\";\n\n\tconst chartData = [\n\t\t{ month: \"January\", desktop: 186, mobile: 80 },\n\t\t{ month: \"February\", desktop: 305, mobile: 200 },\n\t\t{ month: \"March\", desktop: 237, mobile: 120 },\n\t\t{ month: \"April\", desktop: 73, mobile: 190 },\n\t\t{ month: \"May\", desktop: 209, mobile: 130 },\n\t\t{ month: \"June\", desktop: 214, mobile: 140 },\n\t];\n\n\tconst chartConfig = {\n\t\tdesktop: {\n\t\t\tlabel: \"Desktop\",\n\t\t\tcolor: \"#2563eb\",\n\t\t},\n\t\tmobile: {\n\t\t\tlabel: \"Mobile\",\n\t\t\tcolor: \"#60a5fa\",\n\t\t},\n\t} satisfies Chart.ChartConfig;\n</script>\n\n<Chart.Container config={chartConfig} class=\"min-h-[200px] w-full\">\n\t<BarChart\n\t\tdata={chartData}\n\t\txScale={scaleBand().padding(0.25)}\n\t\tx=\"month\"\n\t\taxis=\"x\"\n\t\tseriesLayout=\"group\"\n\t\tlegend\n\t\tseries={[\n\t\t\t{\n\t\t\t\tkey: \"desktop\",\n\t\t\t\tlabel: chartConfig.desktop.label,\n\t\t\t\tcolor: chartConfig.desktop.color,\n\t\t\t},\n\t\t\t{\n\t\t\t\tkey: \"mobile\",\n\t\t\t\tlabel: chartConfig.mobile.label,\n\t\t\t\tcolor: chartConfig.mobile.color,\n\t\t\t},\n\t\t]}\n\t>\n\t\t{#snippet tooltip()}\n\t\t\t<Chart.Tooltip />\n\t\t{/snippet}\n\t</BarChart>\n</Chart.Container>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/chart-bar-tooltip-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport { scaleBand } from \"d3-scale\";\n\timport { BarChart } from \"layerchart\";\n\n\tconst chartData = [\n\t\t{ month: \"January\", desktop: 186, mobile: 80 },\n\t\t{ month: \"February\", desktop: 305, mobile: 200 },\n\t\t{ month: \"March\", desktop: 237, mobile: 120 },\n\t\t{ month: \"April\", desktop: 73, mobile: 190 },\n\t\t{ month: \"May\", desktop: 209, mobile: 130 },\n\t\t{ month: \"June\", desktop: 214, mobile: 140 },\n\t];\n\n\tconst chartConfig = {\n\t\tdesktop: {\n\t\t\tlabel: \"Desktop\",\n\t\t\tcolor: \"#2563eb\",\n\t\t},\n\t\tmobile: {\n\t\t\tlabel: \"Mobile\",\n\t\t\tcolor: \"#60a5fa\",\n\t\t},\n\t} satisfies Chart.ChartConfig;\n</script>\n\n<Chart.Container config={chartConfig} class=\"min-h-[200px] w-full\">\n\t<BarChart\n\t\tdata={chartData}\n\t\txScale={scaleBand().padding(0.25)}\n\t\tx=\"month\"\n\t\taxis=\"x\"\n\t\tseriesLayout=\"group\"\n\t\tseries={[\n\t\t\t{\n\t\t\t\tkey: \"desktop\",\n\t\t\t\tlabel: chartConfig.desktop.label,\n\t\t\t\tcolor: chartConfig.desktop.color,\n\t\t\t},\n\t\t\t{\n\t\t\t\tkey: \"mobile\",\n\t\t\t\tlabel: chartConfig.mobile.label,\n\t\t\t\tcolor: chartConfig.mobile.color,\n\t\t\t},\n\t\t]}\n\t>\n\t\t{#snippet tooltip()}\n\t\t\t<Chart.Tooltip />\n\t\t{/snippet}\n\t</BarChart>\n</Chart.Container>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/chart-tooltip-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport TooltipDemo from \"$lib/components/chart-tooltip-demo-item.svelte\";\n</script>\n\n<div\n\tclass=\"text-foreground grid aspect-video w-full max-w-md justify-center md:grid-cols-2 [&>div]:relative [&>div]:flex [&>div]:h-[137px] [&>div]:w-[224px] [&>div]:items-center [&>div]:justify-center [&>div]:p-4\"\n>\n\t<div>\n\t\t<div class=\"absolute start-[-35px] top-[45px] z-10 text-sm font-medium\">Label</div>\n\t\t<svg\n\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\tviewBox=\"0 0 193 40\"\n\t\t\twidth=\"50\"\n\t\t\theight=\"12\"\n\t\t\tfill=\"none\"\n\t\t\tclass=\"absolute start-[5px] top-[50px] z-10\"\n\t\t>\n\t\t\t<g clip-path=\"url(#a)\">\n\t\t\t\t<path\n\t\t\t\t\tfill=\"currentColor\"\n\t\t\t\t\td=\"M173.928 21.13C115.811 44.938 58.751 45.773 0 26.141c4.227-4.386 7.82-2.715 10.567-1.88 21.133 5.64 42.9 6.266 64.457 7.101 31.066 1.253 60.441-5.848 89.183-17.335 1.268-.418 2.325-1.253 4.861-2.924-14.582-2.924-29.165 2.089-41.845-3.76.212-.835.212-1.879.423-2.714 9.51-.627 19.231-1.253 28.742-2.089 9.51-.835 18.808-1.88 28.318-2.506 6.974-.418 9.933 2.924 7.397 9.19-3.17 8.145-7.608 15.664-11.623 23.391-.423.836-1.057 1.88-1.902 2.298-2.325.835-4.65 1.044-7.186 1.67-.422-2.088-1.479-4.386-1.268-6.265.423-2.506 1.902-4.595 3.804-9.19Z\"\n\t\t\t\t/>\n\t\t\t</g>\n\t\t\t<defs>\n\t\t\t\t<clipPath id=\"a\">\n\t\t\t\t\t<path fill=\"currentColor\" d=\"M0 0h193v40H0z\" />\n\t\t\t\t</clipPath>\n\t\t\t</defs>\n\t\t</svg>\n\t\t<TooltipDemo\n\t\t\tlabel=\"Page Views\"\n\t\t\tpayload={[\n\t\t\t\t{ name: \"Desktop\", value: 186, color: \"var(--chart-1)\" },\n\t\t\t\t{ name: \"Mobile\", value: 80, color: \"var(--chart-2)\" },\n\t\t\t]}\n\t\t\tclass=\"w-[8rem]\"\n\t\t/>\n\t</div>\n\t<div class=\"items-end\">\n\t\t<div class=\"absolute start-[122px] top-[0px] z-10 text-sm font-medium\">Name</div>\n\t\t<svg\n\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\twidth=\"35\"\n\t\t\theight=\"42\"\n\t\t\tfill=\"none\"\n\t\t\tviewBox=\"0 0 122 148\"\n\t\t\tclass=\"absolute start-[85px] top-[10px] z-10 -scale-x-100\"\n\t\t>\n\t\t\t<g clip-path=\"url(#ab)\">\n\t\t\t\t<path\n\t\t\t\t\tfill=\"currentColor\"\n\t\t\t\t\td=\"M0 2.65c6.15-4.024 12.299-2.753 17.812-.847a115.56 115.56 0 0 1 21.84 10.59C70.4 32.727 88.849 61.744 96.483 97.54c1.908 9.108 2.544 18.639 3.817 29.017 8.481-4.871 12.934-14.402 21.416-19.909 1.061 4.236-1.06 6.989-2.756 9.319-6.998 9.531-14.207 19.062-21.63 28.382-3.604 4.448-6.36 4.871-10.177 1.059-8.058-7.837-12.935-17.368-14.42-28.382 0-.424.636-1.059 1.485-2.118 9.118 2.33 6.997 13.979 14.843 18.215 3.393-14.614.848-28.593-2.969-42.149-4.029-14.19-9.33-27.746-17.812-39.82-8.27-11.86-18.66-21.392-30.11-30.287C26.93 11.758 14.207 6.039 0 2.65Z\"\n\t\t\t\t/>\n\t\t\t</g>\n\t\t\t<defs>\n\t\t\t\t<clipPath id=\"ab\">\n\t\t\t\t\t<path fill=\"currentColor\" d=\"M0 0h122v148H0z\" />\n\t\t\t\t</clipPath>\n\t\t\t</defs>\n\t\t</svg>\n\t\t<TooltipDemo\n\t\t\tlabel=\"Browser\"\n\t\t\thideLabel\n\t\t\tpayload={[\n\t\t\t\t{ name: \"Chrome\", value: 1286, color: \"var(--chart-3)\" },\n\t\t\t\t{ name: \"Firefox\", value: 1000, color: \"var(--chart-4)\" },\n\t\t\t]}\n\t\t\tindicator=\"dashed\"\n\t\t\tclass=\"w-[8rem]\"\n\t\t/>\n\t</div>\n\t<div class=\"!hidden md:!flex\">\n\t\t<TooltipDemo\n\t\t\tlabel=\"Page Views\"\n\t\t\tpayload={[{ name: \"Desktop\", value: 12486, color: \"var(--chart-3)\" }]}\n\t\t\tclass=\"w-[9rem]\"\n\t\t\tindicator=\"line\"\n\t\t/>\n\t</div>\n\t<div class=\"!items-start !justify-start\">\n\t\t<div class=\"absolute start-[50px] top-[60px] z-10 text-sm font-medium\">Indicator</div>\n\t\t<TooltipDemo\n\t\t\tlabel=\"Browser\"\n\t\t\thideLabel\n\t\t\tpayload={[{ name: \"Chrome\", value: 1286, color: \"var(--chart-1)\" }]}\n\t\t\tindicator=\"dot\"\n\t\t\tclass=\"w-[8rem]\"\n\t\t/>\n\t\t<svg\n\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\twidth=\"15\"\n\t\t\theight=\"34\"\n\t\t\tfill=\"none\"\n\t\t\tviewBox=\"0 0 75 175\"\n\t\t\tclass=\"absolute start-[30px] top-[38px] z-10 rotate-[-40deg]\"\n\t\t>\n\t\t\t<g clip-path=\"url(#abc)\">\n\t\t\t\t<path\n\t\t\t\t\tfill=\"currentColor\"\n\t\t\t\t\td=\"M20.187 175c-4.439-2.109-7.186-2.531-8.032-4.008-3.17-5.484-6.763-10.968-8.454-17.084-5.073-16.242-4.439-32.694-1.057-49.146 5.707-28.053 18.388-52.942 34.24-76.565 1.692-2.531 3.171-5.063 4.862-7.805 0-.21-.211-.632-.634-1.265-4.65 1.265-9.511 2.53-14.161 3.585-2.537.422-5.496.422-8.032-.421-1.48-.422-3.593-2.742-3.593-4.219 0-1.898 1.48-4.218 2.747-5.906 1.057-1.054 2.96-1.265 4.65-1.687C35.406 7.315 48.088 3.729 60.98.776c10.99-2.53 14.584 1.055 13.95 11.812-.634 11.18-.846 22.358-1.268 33.326-.212 3.375-.846 6.96-1.268 10.757-8.878-4.007-8.878-4.007-12.048-38.177C47.03 33.259 38.153 49.289 29.91 65.741 21.667 82.193 16.17 99.49 13.212 117.84c-2.959 18.984.634 36.912 6.975 57.161Z\"\n\t\t\t\t/>\n\t\t\t</g>\n\t\t\t<defs>\n\t\t\t\t<clipPath id=\"abc\">\n\t\t\t\t\t<path fill=\"currentColor\" d=\"M0 0h75v175H0z\" />\n\t\t\t\t</clipPath>\n\t\t\t</defs>\n\t\t</svg>\n\t</div>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/checkbox-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport { Checkbox } from \"$lib/registry/ui/checkbox/index.js\";\n\timport { Label } from \"$lib/registry/ui/label/index.js\";\n</script>\n\n<div class=\"flex flex-col gap-6\">\n\t<div class=\"flex items-center gap-3\">\n\t\t<Checkbox id=\"terms\" />\n\t\t<Label for=\"terms\">Accept terms and conditions</Label>\n\t</div>\n\t<div class=\"flex items-start gap-3\">\n\t\t<Checkbox id=\"terms-2\" checked />\n\t\t<div class=\"grid gap-2\">\n\t\t\t<Label for=\"terms-2\">Accept terms and conditions</Label>\n\t\t\t<p class=\"text-muted-foreground text-sm\">\n\t\t\t\tBy clicking this checkbox, you agree to the terms and conditions.\n\t\t\t</p>\n\t\t</div>\n\t</div>\n\t<div class=\"flex items-start gap-3\">\n\t\t<Checkbox id=\"toggle\" disabled />\n\t\t<Label for=\"toggle\">Enable notifications</Label>\n\t</div>\n\t<Label\n\t\tclass=\"hover:bg-accent/50 flex items-start gap-3 rounded-lg border p-3 has-[[aria-checked=true]]:border-blue-600 has-[[aria-checked=true]]:bg-blue-50 dark:has-[[aria-checked=true]]:border-blue-900 dark:has-[[aria-checked=true]]:bg-blue-950\"\n\t>\n\t\t<Checkbox\n\t\t\tid=\"toggle-2\"\n\t\t\tchecked\n\t\t\tclass=\"data-[state=checked]:border-blue-600 data-[state=checked]:bg-blue-600 data-[state=checked]:text-white dark:data-[state=checked]:border-blue-700 dark:data-[state=checked]:bg-blue-700\"\n\t\t/>\n\t\t<div class=\"grid gap-1.5 font-normal\">\n\t\t\t<p class=\"text-sm leading-none font-medium\">Enable notifications</p>\n\t\t\t<p class=\"text-muted-foreground text-sm\">\n\t\t\t\tYou can enable or disable notifications at any time.\n\t\t\t</p>\n\t\t</div>\n\t</Label>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/checkbox-disabled.svelte",
    "content": "<script lang=\"ts\">\n\timport { Checkbox } from \"$lib/registry/ui/checkbox/index.js\";\n\timport { Label } from \"$lib/registry/ui/label/index.js\";\n</script>\n\n<div class=\"flex items-center space-x-2\">\n\t<Checkbox id=\"terms\" disabled />\n\t<Label\n\t\tfor=\"terms2\"\n\t\tclass=\"text-sm leading-none font-medium peer-disabled:cursor-not-allowed peer-disabled:opacity-70 peer-data-[disabled=true]:cursor-not-allowed peer-data-[disabled=true]:opacity-70\"\n\t>\n\t\tAccept terms and conditions\n\t</Label>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/checkbox-form-multiple.svelte",
    "content": "<script lang=\"ts\" module>\n\timport { z } from \"zod\";\n\n\tconst items = [\n\t\t{\n\t\t\tid: \"recents\",\n\t\t\tlabel: \"Recents\",\n\t\t},\n\t\t{\n\t\t\tid: \"home\",\n\t\t\tlabel: \"Home\",\n\t\t},\n\t\t{\n\t\t\tid: \"applications\",\n\t\t\tlabel: \"Applications\",\n\t\t},\n\t\t{\n\t\t\tid: \"desktop\",\n\t\t\tlabel: \"Desktop\",\n\t\t},\n\t\t{\n\t\t\tid: \"downloads\",\n\t\t\tlabel: \"Downloads\",\n\t\t},\n\t\t{\n\t\t\tid: \"documents\",\n\t\t\tlabel: \"Documents\",\n\t\t},\n\t] as const;\n\n\tconst formSchema = z.object({\n\t\titems: z.array(z.string()).refine((value) => value.some((item) => item), {\n\t\t\tmessage: \"You have to select at least one item.\",\n\t\t}),\n\t});\n</script>\n\n<script lang=\"ts\">\n\timport { defaults, superForm } from \"sveltekit-superforms\";\n\timport { zod4 } from \"sveltekit-superforms/adapters\";\n\timport { toast } from \"svelte-sonner\";\n\timport * as Form from \"$lib/registry/ui/form/index.js\";\n\timport { Checkbox } from \"$lib/registry/ui/checkbox/index.js\";\n\n\tconst form = superForm(defaults(zod4(formSchema)), {\n\t\tSPA: true,\n\t\tvalidators: zod4(formSchema),\n\t\tonUpdate: ({ form: f }) => {\n\t\t\tif (f.valid) {\n\t\t\t\ttoast.success(`You submitted ${JSON.stringify(f.data, null, 2)}`);\n\t\t\t} else {\n\t\t\t\ttoast.error(\"Please fix the errors in the form.\");\n\t\t\t}\n\t\t},\n\t});\n\n\tconst { form: formData, enhance } = form;\n\n\tfunction addItem(id: string) {\n\t\t$formData.items = [...$formData.items, id];\n\t}\n\n\tfunction removeItem(id: string) {\n\t\t$formData.items = $formData.items.filter((i) => i !== id);\n\t}\n</script>\n\n<form method=\"POST\" class=\"space-y-8\" use:enhance>\n\t<Form.Fieldset {form} name=\"items\" class=\"space-y-0\">\n\t\t<div class=\"mb-4\">\n\t\t\t<Form.Legend class=\"text-base\">Sidebar</Form.Legend>\n\t\t\t<Form.Description>\n\t\t\t\tSelect the items you want to display in the sidebar.\n\t\t\t</Form.Description>\n\t\t</div>\n\t\t<div class=\"space-y-2\">\n\t\t\t{#each items as item (item.id)}\n\t\t\t\t{@const checked = $formData.items.includes(item.id)}\n\t\t\t\t<div class=\"flex flex-row items-start space-x-3\">\n\t\t\t\t\t<Form.Control>\n\t\t\t\t\t\t{#snippet children({ props })}\n\t\t\t\t\t\t\t<Checkbox\n\t\t\t\t\t\t\t\t{...props}\n\t\t\t\t\t\t\t\t{checked}\n\t\t\t\t\t\t\t\tvalue={item.id}\n\t\t\t\t\t\t\t\tonCheckedChange={(v) => {\n\t\t\t\t\t\t\t\t\tif (v) {\n\t\t\t\t\t\t\t\t\t\taddItem(item.id);\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tremoveItem(item.id);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<Form.Label class=\"font-normal\">\n\t\t\t\t\t\t\t\t{item.label}\n\t\t\t\t\t\t\t</Form.Label>\n\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t</Form.Control>\n\t\t\t\t</div>\n\t\t\t{/each}\n\t\t\t<Form.FieldErrors />\n\t\t</div>\n\t</Form.Fieldset>\n\t<Form.Button>Update display</Form.Button>\n</form>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/checkbox-form-single.svelte",
    "content": "<script lang=\"ts\" module>\n\timport { z } from \"zod\";\n\tconst formSchema = z.object({\n\t\tmobile: z.boolean().default(false),\n\t});\n</script>\n\n<script lang=\"ts\">\n\timport { defaults, superForm } from \"sveltekit-superforms\";\n\timport { zod4 } from \"sveltekit-superforms/adapters\";\n\timport { toast } from \"svelte-sonner\";\n\timport * as Form from \"$lib/registry/ui/form/index.js\";\n\timport { Checkbox } from \"$lib/registry/ui/checkbox/index.js\";\n\n\tconst form = superForm(defaults(zod4(formSchema)), {\n\t\tvalidators: zod4(formSchema),\n\t\tSPA: true,\n\t\tonUpdate: ({ form: f }) => {\n\t\t\tif (f.valid) {\n\t\t\t\ttoast.success(`You submitted ${JSON.stringify(f.data, null, 2)}`);\n\t\t\t} else {\n\t\t\t\ttoast.error(\"Please fix the errors in the form.\");\n\t\t\t}\n\t\t},\n\t});\n\n\tconst { form: formData, enhance } = form;\n</script>\n\n<form method=\"POST\" class=\"space-y-6\" use:enhance>\n\t<Form.Field\n\t\t{form}\n\t\tname=\"mobile\"\n\t\tclass=\"flex flex-row items-start space-y-0 space-x-3 rounded-md border p-4\"\n\t>\n\t\t<Form.Control>\n\t\t\t{#snippet children({ props })}\n\t\t\t\t<Checkbox {...props} bind:checked={$formData.mobile} />\n\t\t\t\t<div class=\"space-y-1 leading-none\">\n\t\t\t\t\t<Form.Label>Use different settings for my mobile devices</Form.Label>\n\t\t\t\t\t<Form.Description>\n\t\t\t\t\t\tYou can manage your mobile notifications in the <a href=\"/examples/forms\"\n\t\t\t\t\t\t\t>mobile settings</a\n\t\t\t\t\t\t> page.\n\t\t\t\t\t</Form.Description>\n\t\t\t\t</div>\n\t\t\t{/snippet}\n\t\t</Form.Control>\n\t</Form.Field>\n\t<Form.Button>Submit</Form.Button>\n</form>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/checkbox-with-text.svelte",
    "content": "<script lang=\"ts\">\n\timport { Checkbox } from \"$lib/registry/ui/checkbox/index.js\";\n\timport { Label } from \"$lib/registry/ui/label/index.js\";\n</script>\n\n<div class=\"items-top flex space-x-2\">\n\t<Checkbox id=\"terms1\" />\n\t<div class=\"grid gap-1.5 leading-none\">\n\t\t<Label\n\t\t\tfor=\"terms1\"\n\t\t\tclass=\"text-sm leading-none font-medium peer-disabled:cursor-not-allowed peer-disabled:opacity-70\"\n\t\t>\n\t\t\tAccept terms and conditions\n\t\t</Label>\n\t\t<p class=\"text-muted-foreground text-sm\">\n\t\t\tYou agree to our Terms of Service and Privacy Policy.\n\t\t</p>\n\t</div>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/collapsible-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport ChevronsUpDownIcon from \"@lucide/svelte/icons/chevrons-up-down\";\n\timport * as Collapsible from \"$lib/registry/ui/collapsible/index.js\";\n\timport { buttonVariants } from \"$lib/registry/ui/button/index.js\";\n</script>\n\n<Collapsible.Root class=\"w-[350px] space-y-2\">\n\t<div class=\"flex items-center justify-between space-x-4 px-4\">\n\t\t<h4 class=\"text-sm font-semibold\">@huntabyte starred 3 repositories</h4>\n\t\t<Collapsible.Trigger\n\t\t\tclass={buttonVariants({ variant: \"ghost\", size: \"sm\", class: \"w-9 p-0\" })}\n\t\t>\n\t\t\t<ChevronsUpDownIcon />\n\t\t\t<span class=\"sr-only\">Toggle</span>\n\t\t</Collapsible.Trigger>\n\t</div>\n\t<div class=\"rounded-md border px-4 py-3 font-mono text-sm\">@huntabyte/bits-ui</div>\n\t<Collapsible.Content class=\"space-y-2\">\n\t\t<div class=\"rounded-md border px-4 py-3 font-mono text-sm\">@melt-ui/melt-ui</div>\n\t\t<div class=\"rounded-md border px-4 py-3 font-mono text-sm\">@sveltejs/svelte</div>\n\t</Collapsible.Content>\n</Collapsible.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/combobox-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport CheckIcon from \"@lucide/svelte/icons/check\";\n\timport ChevronsUpDownIcon from \"@lucide/svelte/icons/chevrons-up-down\";\n\timport { tick } from \"svelte\";\n\timport * as Command from \"$lib/registry/ui/command/index.js\";\n\timport * as Popover from \"$lib/registry/ui/popover/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tconst frameworks = [\n\t\t{\n\t\t\tvalue: \"sveltekit\",\n\t\t\tlabel: \"SvelteKit\",\n\t\t},\n\t\t{\n\t\t\tvalue: \"next.js\",\n\t\t\tlabel: \"Next.js\",\n\t\t},\n\t\t{\n\t\t\tvalue: \"nuxt.js\",\n\t\t\tlabel: \"Nuxt.js\",\n\t\t},\n\t\t{\n\t\t\tvalue: \"remix\",\n\t\t\tlabel: \"Remix\",\n\t\t},\n\t\t{\n\t\t\tvalue: \"astro\",\n\t\t\tlabel: \"Astro\",\n\t\t},\n\t];\n\n\tlet open = $state(false);\n\tlet value = $state(\"\");\n\tlet triggerRef = $state<HTMLButtonElement>(null!);\n\n\tconst selectedValue = $derived(frameworks.find((f) => f.value === value)?.label);\n\n\t// We want to refocus the trigger button when the user selects\n\t// an item from the list so users can continue navigating the\n\t// rest of the form with the keyboard.\n\tfunction closeAndFocusTrigger() {\n\t\topen = false;\n\t\ttick().then(() => {\n\t\t\ttriggerRef.focus();\n\t\t});\n\t}\n</script>\n\n<Popover.Root bind:open>\n\t<Popover.Trigger bind:ref={triggerRef}>\n\t\t{#snippet child({ props })}\n\t\t\t<Button\n\t\t\t\t{...props}\n\t\t\t\tvariant=\"outline\"\n\t\t\t\tclass=\"w-[200px] justify-between\"\n\t\t\t\trole=\"combobox\"\n\t\t\t\taria-expanded={open}\n\t\t\t>\n\t\t\t\t{selectedValue || \"Select a framework...\"}\n\t\t\t\t<ChevronsUpDownIcon class=\"opacity-50\" />\n\t\t\t</Button>\n\t\t{/snippet}\n\t</Popover.Trigger>\n\t<Popover.Content class=\"w-[200px] p-0\">\n\t\t<Command.Root>\n\t\t\t<Command.Input placeholder=\"Search framework...\" />\n\t\t\t<Command.List>\n\t\t\t\t<Command.Empty>No framework found.</Command.Empty>\n\t\t\t\t<Command.Group value=\"frameworks\">\n\t\t\t\t\t{#each frameworks as framework (framework.value)}\n\t\t\t\t\t\t<Command.Item\n\t\t\t\t\t\t\tvalue={framework.value}\n\t\t\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t\t\tvalue = framework.value;\n\t\t\t\t\t\t\t\tcloseAndFocusTrigger();\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<CheckIcon\n\t\t\t\t\t\t\t\tclass={cn(value !== framework.value && \"text-transparent\")}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t{framework.label}\n\t\t\t\t\t\t</Command.Item>\n\t\t\t\t\t{/each}\n\t\t\t\t</Command.Group>\n\t\t\t</Command.List>\n\t\t</Command.Root>\n\t</Popover.Content>\n</Popover.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/combobox-dropdown-menu.svelte",
    "content": "<script lang=\"ts\">\n\timport CalendarIcon from \"@lucide/svelte/icons/calendar\";\n\timport EllipsisIcon from \"@lucide/svelte/icons/ellipsis\";\n\timport TagsIcon from \"@lucide/svelte/icons/tags\";\n\timport TrashIcon from \"@lucide/svelte/icons/trash\";\n\timport UserIcon from \"@lucide/svelte/icons/user\";\n\timport { tick } from \"svelte\";\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\timport * as Command from \"$lib/registry/ui/command/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\n\tconst labels = [\n\t\t\"feature\",\n\t\t\"bug\",\n\t\t\"enhancement\",\n\t\t\"documentation\",\n\t\t\"design\",\n\t\t\"question\",\n\t\t\"maintenance\",\n\t];\n\n\tlet open = $state(false);\n\tlet selectedLabel = $state(\"feature\");\n\tlet triggerRef = $state<HTMLButtonElement>(null!);\n\n\t// We want to refocus the trigger button when the user selects\n\t// an item from the list so users can continue navigating the\n\t// rest of the form with the keyboard.\n\tfunction closeAndFocusTrigger() {\n\t\topen = false;\n\t\ttick().then(() => {\n\t\t\ttriggerRef.focus();\n\t\t});\n\t}\n</script>\n\n<div\n\tclass=\"flex w-full flex-col items-start justify-between rounded-md border px-4 py-3 sm:flex-row sm:items-center\"\n>\n\t<p class=\"text-sm leading-none font-medium\">\n\t\t<span class=\"bg-primary text-primary-foreground me-2 rounded-lg px-2 py-1 text-xs\">\n\t\t\t{selectedLabel}\n\t\t</span>\n\t\t<span class=\"text-muted-foreground\">Create a new project</span>\n\t</p>\n\t<DropdownMenu.Root bind:open>\n\t\t<DropdownMenu.Trigger bind:ref={triggerRef}>\n\t\t\t{#snippet child({ props })}\n\t\t\t\t<Button variant=\"ghost\" size=\"sm\" {...props} aria-label=\"Open menu\">\n\t\t\t\t\t<EllipsisIcon />\n\t\t\t\t</Button>\n\t\t\t{/snippet}\n\t\t</DropdownMenu.Trigger>\n\t\t<DropdownMenu.Content class=\"w-[200px]\" align=\"end\">\n\t\t\t<DropdownMenu.Group>\n\t\t\t\t<DropdownMenu.Label>Actions</DropdownMenu.Label>\n\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t<UserIcon class=\"me-2 size-4\" />\n\t\t\t\t\tAssign to...\n\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t<CalendarIcon class=\"me-2 size-4\" />\n\t\t\t\t\tSet due date...\n\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t<DropdownMenu.Sub>\n\t\t\t\t\t<DropdownMenu.SubTrigger>\n\t\t\t\t\t\t<TagsIcon class=\"me-2 size-4\" />\n\t\t\t\t\t\tApply label\n\t\t\t\t\t</DropdownMenu.SubTrigger>\n\t\t\t\t\t<DropdownMenu.SubContent class=\"p-0\">\n\t\t\t\t\t\t<Command.Root value={selectedLabel}>\n\t\t\t\t\t\t\t<Command.Input autofocus placeholder=\"Filter label...\" />\n\t\t\t\t\t\t\t<Command.List>\n\t\t\t\t\t\t\t\t<Command.Empty>No label found.</Command.Empty>\n\t\t\t\t\t\t\t\t<Command.Group>\n\t\t\t\t\t\t\t\t\t{#each labels as label (label)}\n\t\t\t\t\t\t\t\t\t\t<Command.Item\n\t\t\t\t\t\t\t\t\t\t\tvalue={label}\n\t\t\t\t\t\t\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t\t\t\t\t\t\tselectedLabel = label;\n\t\t\t\t\t\t\t\t\t\t\t\tcloseAndFocusTrigger();\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{label}\n\t\t\t\t\t\t\t\t\t\t</Command.Item>\n\t\t\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t\t</Command.Group>\n\t\t\t\t\t\t\t</Command.List>\n\t\t\t\t\t\t</Command.Root>\n\t\t\t\t\t</DropdownMenu.SubContent>\n\t\t\t\t</DropdownMenu.Sub>\n\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t<DropdownMenu.Item class=\"text-red-600\">\n\t\t\t\t\t<TrashIcon class=\"me-2 size-4\" />\n\t\t\t\t\tDelete\n\t\t\t\t\t<DropdownMenu.Shortcut>⌘⌫</DropdownMenu.Shortcut>\n\t\t\t\t</DropdownMenu.Item>\n\t\t\t</DropdownMenu.Group>\n\t\t</DropdownMenu.Content>\n\t</DropdownMenu.Root>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/combobox-form.svelte",
    "content": "<script lang=\"ts\" module>\n\timport { z } from \"zod\";\n\n\tconst languages = [\n\t\t{ label: \"English\", value: \"en\" },\n\t\t{ label: \"French\", value: \"fr\" },\n\t\t{ label: \"German\", value: \"de\" },\n\t\t{ label: \"Spanish\", value: \"es\" },\n\t\t{ label: \"Portuguese\", value: \"pt\" },\n\t\t{ label: \"Russian\", value: \"ru\" },\n\t\t{ label: \"Japanese\", value: \"ja\" },\n\t\t{ label: \"Korean\", value: \"ko\" },\n\t\t{ label: \"Chinese\", value: \"zh\" },\n\t] as const;\n\n\tconst formSchema = z.object({\n\t\tlanguage: z.enum([\"en\", \"fr\", \"de\", \"es\", \"pt\", \"ru\", \"ja\", \"ko\", \"zh\"]),\n\t});\n</script>\n\n<script lang=\"ts\">\n\timport { defaults, superForm } from \"sveltekit-superforms\";\n\timport { tick } from \"svelte\";\n\timport CheckIcon from \"@lucide/svelte/icons/check\";\n\timport ChevronsUpDownIcon from \"@lucide/svelte/icons/chevrons-up-down\";\n\timport { zod4 } from \"sveltekit-superforms/adapters\";\n\timport { toast } from \"svelte-sonner\";\n\timport { useId } from \"bits-ui\";\n\timport * as Form from \"$lib/registry/ui/form/index.js\";\n\timport * as Popover from \"$lib/registry/ui/popover/index.js\";\n\timport * as Command from \"$lib/registry/ui/command/index.js\";\n\timport { cn } from \"$lib/utils.js\";\n\timport { buttonVariants } from \"$lib/registry/ui/button/index.js\";\n\n\tconst form = superForm(defaults(zod4(formSchema)), {\n\t\tvalidators: zod4(formSchema),\n\t\tSPA: true,\n\t\tonUpdate: ({ form: f }) => {\n\t\t\tif (f.valid) {\n\t\t\t\ttoast.success(`You submitted ${JSON.stringify(f.data, null, 2)}`);\n\t\t\t} else {\n\t\t\t\ttoast.error(\"Please fix the errors in the form.\");\n\t\t\t}\n\t\t},\n\t});\n\n\tconst { form: formData, enhance } = form;\n\n\tlet open = false;\n\n\t// We want to refocus the trigger button when the user selects\n\t// an item from the list so users can continue navigating the\n\t// rest of the form with the keyboard.\n\tfunction closeAndFocusTrigger(triggerId: string) {\n\t\topen = false;\n\t\ttick().then(() => {\n\t\t\tdocument.getElementById(triggerId)?.focus();\n\t\t});\n\t}\n\tconst triggerId = useId();\n</script>\n\n<form method=\"POST\" class=\"space-y-6\" use:enhance>\n\t<Form.Field {form} name=\"language\" class=\"flex flex-col\">\n\t\t<Popover.Root bind:open>\n\t\t\t<Form.Control id={triggerId}>\n\t\t\t\t{#snippet children({ props })}\n\t\t\t\t\t<Form.Label>Language</Form.Label>\n\t\t\t\t\t<Popover.Trigger\n\t\t\t\t\t\tclass={cn(\n\t\t\t\t\t\t\tbuttonVariants({ variant: \"outline\" }),\n\t\t\t\t\t\t\t\"w-[200px] justify-between\",\n\t\t\t\t\t\t\t!$formData.language && \"text-muted-foreground\"\n\t\t\t\t\t\t)}\n\t\t\t\t\t\trole=\"combobox\"\n\t\t\t\t\t\t{...props}\n\t\t\t\t\t>\n\t\t\t\t\t\t{languages.find((f) => f.value === $formData.language)?.label ??\n\t\t\t\t\t\t\t\"Select language\"}\n\t\t\t\t\t\t<ChevronsUpDownIcon class=\"opacity-50\" />\n\t\t\t\t\t</Popover.Trigger>\n\t\t\t\t\t<input hidden value={$formData.language} name={props.name} />\n\t\t\t\t{/snippet}\n\t\t\t</Form.Control>\n\t\t\t<Popover.Content class=\"w-[200px] p-0\">\n\t\t\t\t<Command.Root>\n\t\t\t\t\t<Command.Input autofocus placeholder=\"Search language...\" class=\"h-9\" />\n\t\t\t\t\t<Command.Empty>No language found.</Command.Empty>\n\t\t\t\t\t<Command.Group value=\"languages\">\n\t\t\t\t\t\t{#each languages as language (language.value)}\n\t\t\t\t\t\t\t<Command.Item\n\t\t\t\t\t\t\t\tvalue={language.label}\n\t\t\t\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t\t\t\t$formData.language = language.value;\n\t\t\t\t\t\t\t\t\tcloseAndFocusTrigger(triggerId);\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{language.label}\n\t\t\t\t\t\t\t\t<CheckIcon\n\t\t\t\t\t\t\t\t\tclass={cn(\n\t\t\t\t\t\t\t\t\t\t\"ms-auto\",\n\t\t\t\t\t\t\t\t\t\tlanguage.value !== $formData.language && \"text-transparent\"\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</Command.Item>\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</Command.Group>\n\t\t\t\t</Command.Root>\n\t\t\t</Popover.Content>\n\t\t</Popover.Root>\n\t\t<Form.Description>\n\t\t\tThis is the language that will be used in the dashboard.\n\t\t</Form.Description>\n\t\t<Form.FieldErrors />\n\t</Form.Field>\n\t<Form.Button>Submit</Form.Button>\n</form>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/combobox-popover.svelte",
    "content": "<script lang=\"ts\">\n\timport CircleIcon from \"@lucide/svelte/icons/circle\";\n\timport CircleArrowUpIcon from \"@lucide/svelte/icons/circle-arrow-up\";\n\timport CircleCheckIcon from \"@lucide/svelte/icons/circle-check\";\n\timport CircleHelpIcon from \"@lucide/svelte/icons/circle-help\";\n\timport CircleXIcon from \"@lucide/svelte/icons/circle-x\";\n\timport { type Component, tick } from \"svelte\";\n\timport { useId } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\timport * as Popover from \"$lib/registry/ui/popover/index.js\";\n\timport * as Command from \"$lib/registry/ui/command/index.js\";\n\timport { buttonVariants } from \"$lib/registry/ui/button/index.js\";\n\n\ttype Status = {\n\t\tvalue: string;\n\t\tlabel: string;\n\t\ticon: Component;\n\t};\n\n\tconst statuses: Status[] = [\n\t\t{\n\t\t\tvalue: \"backlog\",\n\t\t\tlabel: \"Backlog\",\n\t\t\ticon: CircleHelpIcon,\n\t\t},\n\t\t{\n\t\t\tvalue: \"todo\",\n\t\t\tlabel: \"Todo\",\n\t\t\ticon: CircleIcon,\n\t\t},\n\t\t{\n\t\t\tvalue: \"in progress\",\n\t\t\tlabel: \"In Progress\",\n\t\t\ticon: CircleArrowUpIcon,\n\t\t},\n\t\t{\n\t\t\tvalue: \"done\",\n\t\t\tlabel: \"Done\",\n\t\t\ticon: CircleCheckIcon,\n\t\t},\n\t\t{\n\t\t\tvalue: \"canceled\",\n\t\t\tlabel: \"Canceled\",\n\t\t\ticon: CircleXIcon,\n\t\t},\n\t];\n\n\tlet open = $state(false);\n\tlet value = $state(\"\");\n\n\tconst selectedStatus = $derived(statuses.find((s) => s.value === value));\n\n\t// We want to refocus the trigger button when the user selects\n\t// an item from the list so users can continue navigating the\n\t// rest of the form with the keyboard.\n\tfunction closeAndFocusTrigger(triggerId: string) {\n\t\topen = false;\n\t\ttick().then(() => {\n\t\t\tdocument.getElementById(triggerId)?.focus();\n\t\t});\n\t}\n\tconst triggerId = useId();\n</script>\n\n<div class=\"flex items-center space-x-4\">\n\t<p class=\"text-muted-foreground text-sm\">Status</p>\n\t<Popover.Root bind:open>\n\t\t<Popover.Trigger\n\t\t\tid={triggerId}\n\t\t\tclass={buttonVariants({\n\t\t\t\tvariant: \"outline\",\n\t\t\t\tsize: \"sm\",\n\t\t\t\tclass: \"w-[150px] justify-start\",\n\t\t\t})}\n\t\t>\n\t\t\t{#if selectedStatus}\n\t\t\t\t{@const Icon = selectedStatus.icon}\n\t\t\t\t<Icon class=\"me-2 size-4 shrink-0\" />\n\t\t\t\t{selectedStatus.label}\n\t\t\t{:else}\n\t\t\t\t+ Set status\n\t\t\t{/if}\n\t\t</Popover.Trigger>\n\t\t<Popover.Content class=\"w-[200px] p-0\" side=\"right\" align=\"start\">\n\t\t\t<Command.Root>\n\t\t\t\t<Command.Input placeholder=\"Change status...\" />\n\t\t\t\t<Command.List>\n\t\t\t\t\t<Command.Empty>No results found.</Command.Empty>\n\t\t\t\t\t<Command.Group>\n\t\t\t\t\t\t{#each statuses as status (status.value)}\n\t\t\t\t\t\t\t<Command.Item\n\t\t\t\t\t\t\t\tvalue={status.value}\n\t\t\t\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t\t\t\tvalue = status.value;\n\t\t\t\t\t\t\t\t\tcloseAndFocusTrigger(triggerId);\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{@const Icon = status.icon}\n\t\t\t\t\t\t\t\t<Icon\n\t\t\t\t\t\t\t\t\tclass={cn(\n\t\t\t\t\t\t\t\t\t\t\"me-2 size-4\",\n\t\t\t\t\t\t\t\t\t\tstatus.value !== selectedStatus?.value &&\n\t\t\t\t\t\t\t\t\t\t\t\"text-foreground/40\"\n\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t/>\n\n\t\t\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t\t\t{status.label}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</Command.Item>\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</Command.Group>\n\t\t\t\t</Command.List>\n\t\t\t</Command.Root>\n\t\t</Popover.Content>\n\t</Popover.Root>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/combobox-responsive.svelte",
    "content": "<script lang=\"ts\">\n\timport { browser } from \"$app/environment\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Command from \"$lib/registry/ui/command/index.js\";\n\timport * as Drawer from \"$lib/registry/ui/drawer/index.js\";\n\timport * as Popover from \"$lib/registry/ui/popover/index.js\";\n\timport { onMount } from \"svelte\";\n\n\ttype Status = {\n\t\tvalue: string;\n\t\tlabel: string;\n\t};\n\n\tconst statuses: Status[] = [\n\t\t{\n\t\t\tvalue: \"backlog\",\n\t\t\tlabel: \"Backlog\",\n\t\t},\n\t\t{\n\t\t\tvalue: \"todo\",\n\t\t\tlabel: \"Todo\",\n\t\t},\n\t\t{\n\t\t\tvalue: \"in progress\",\n\t\t\tlabel: \"In Progress\",\n\t\t},\n\t\t{\n\t\t\tvalue: \"done\",\n\t\t\tlabel: \"Done\",\n\t\t},\n\t\t{\n\t\t\tvalue: \"canceled\",\n\t\t\tlabel: \"Canceled\",\n\t\t},\n\t];\n\n\tlet open = $state(false);\n\tlet selectedStatus: Status | null = $state(null);\n\tlet isDesktop = $state(false);\n\n\tfunction checkScreenSize() {\n\t\tisDesktop = window.innerWidth >= 768;\n\t}\n\n\tonMount(() => {\n\t\tif (browser) {\n\t\t\tcheckScreenSize();\n\t\t\twindow.addEventListener(\"resize\", checkScreenSize);\n\t\t\treturn () => window.removeEventListener(\"resize\", checkScreenSize);\n\t\t}\n\t});\n\n\tfunction handleStatusSelect(value: string) {\n\t\tselectedStatus = statuses.find((status) => status.value === value) || null;\n\t\topen = false;\n\t}\n</script>\n\n{#if isDesktop}\n\t<Popover.Root bind:open>\n\t\t<Popover.Trigger>\n\t\t\t<Button variant=\"outline\" class=\"w-[150px] justify-start\">\n\t\t\t\t{selectedStatus ? selectedStatus.label : \"+ Set status\"}\n\t\t\t</Button>\n\t\t</Popover.Trigger>\n\t\t<Popover.Content class=\"w-[200px] p-0\" align=\"start\">\n\t\t\t<Command.Root>\n\t\t\t\t<Command.Input placeholder=\"Filter status...\" />\n\t\t\t\t<Command.List>\n\t\t\t\t\t<Command.Empty>No results found.</Command.Empty>\n\t\t\t\t\t<Command.Group>\n\t\t\t\t\t\t{#each statuses as status (status.value)}\n\t\t\t\t\t\t\t<Command.Item\n\t\t\t\t\t\t\t\tvalue={status.value}\n\t\t\t\t\t\t\t\tonSelect={() => handleStatusSelect(status.value)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{status.label}\n\t\t\t\t\t\t\t</Command.Item>\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</Command.Group>\n\t\t\t\t</Command.List>\n\t\t\t</Command.Root>\n\t\t</Popover.Content>\n\t</Popover.Root>\n{:else}\n\t<Drawer.Root bind:open>\n\t\t<Drawer.Trigger>\n\t\t\t<Button variant=\"outline\" class=\"w-[150px] justify-start\">\n\t\t\t\t{selectedStatus ? selectedStatus.label : \"+ Set status\"}\n\t\t\t</Button>\n\t\t</Drawer.Trigger>\n\t\t<Drawer.Content>\n\t\t\t<div class=\"mt-4 border-t\">\n\t\t\t\t<Command.Root>\n\t\t\t\t\t<Command.Input placeholder=\"Filter status...\" />\n\t\t\t\t\t<Command.List>\n\t\t\t\t\t\t<Command.Empty>No results found.</Command.Empty>\n\t\t\t\t\t\t<Command.Group>\n\t\t\t\t\t\t\t{#each statuses as status (status.value)}\n\t\t\t\t\t\t\t\t<Command.Item\n\t\t\t\t\t\t\t\t\tvalue={status.value}\n\t\t\t\t\t\t\t\t\tonSelect={() => handleStatusSelect(status.value)}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{status.label}\n\t\t\t\t\t\t\t\t</Command.Item>\n\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t</Command.Group>\n\t\t\t\t\t</Command.List>\n\t\t\t\t</Command.Root>\n\t\t\t</div>\n\t\t</Drawer.Content>\n\t</Drawer.Root>\n{/if}\n"
  },
  {
    "path": "docs/src/lib/registry/examples/command-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport CalculatorIcon from \"@lucide/svelte/icons/calculator\";\n\timport CalendarIcon from \"@lucide/svelte/icons/calendar\";\n\timport CreditCardIcon from \"@lucide/svelte/icons/credit-card\";\n\timport SettingsIcon from \"@lucide/svelte/icons/settings\";\n\timport SmileIcon from \"@lucide/svelte/icons/smile\";\n\timport UserIcon from \"@lucide/svelte/icons/user\";\n\timport * as Command from \"$lib/registry/ui/command/index.js\";\n</script>\n\n<Command.Root class=\"rounded-lg border shadow-md md:min-w-[450px]\">\n\t<Command.Input placeholder=\"Type a command or search...\" />\n\t<Command.List>\n\t\t<Command.Empty>No results found.</Command.Empty>\n\t\t<Command.Group heading=\"Suggestions\">\n\t\t\t<Command.Item>\n\t\t\t\t<CalendarIcon />\n\t\t\t\t<span>Calendar</span>\n\t\t\t</Command.Item>\n\t\t\t<Command.Item>\n\t\t\t\t<SmileIcon />\n\t\t\t\t<span>Search Emoji</span>\n\t\t\t</Command.Item>\n\t\t\t<Command.Item disabled>\n\t\t\t\t<CalculatorIcon />\n\t\t\t\t<span>Calculator</span>\n\t\t\t</Command.Item>\n\t\t</Command.Group>\n\t\t<Command.Separator />\n\t\t<Command.Group heading=\"Settings\">\n\t\t\t<Command.Item>\n\t\t\t\t<UserIcon />\n\t\t\t\t<span>Profile</span>\n\t\t\t\t<Command.Shortcut>⌘P</Command.Shortcut>\n\t\t\t</Command.Item>\n\t\t\t<Command.Item>\n\t\t\t\t<CreditCardIcon />\n\t\t\t\t<span>Billing</span>\n\t\t\t\t<Command.Shortcut>⌘B</Command.Shortcut>\n\t\t\t</Command.Item>\n\t\t\t<Command.Item>\n\t\t\t\t<SettingsIcon />\n\t\t\t\t<span>Settings</span>\n\t\t\t\t<Command.Shortcut>⌘S</Command.Shortcut>\n\t\t\t</Command.Item>\n\t\t</Command.Group>\n\t</Command.List>\n</Command.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/command-dialog.svelte",
    "content": "<script lang=\"ts\">\n\timport CalculatorIcon from \"@lucide/svelte/icons/calculator\";\n\timport CalendarIcon from \"@lucide/svelte/icons/calendar\";\n\timport CreditCardIcon from \"@lucide/svelte/icons/credit-card\";\n\timport SettingsIcon from \"@lucide/svelte/icons/settings\";\n\timport SmileIcon from \"@lucide/svelte/icons/smile\";\n\timport UserIcon from \"@lucide/svelte/icons/user\";\n\timport * as Command from \"$lib/registry/ui/command/index.js\";\n\n\tlet open = $state(false);\n\n\tfunction handleKeydown(e: KeyboardEvent) {\n\t\tif (e.key === \"j\" && (e.metaKey || e.ctrlKey)) {\n\t\t\te.preventDefault();\n\t\t\topen = !open;\n\t\t}\n\t}\n</script>\n\n<svelte:document onkeydown={handleKeydown} />\n\n<p class=\"text-muted-foreground text-sm\">\n\tPress\n\t<kbd\n\t\tclass=\"bg-muted text-muted-foreground pointer-events-none inline-flex h-5 items-center gap-1 rounded border px-1.5 font-mono text-[10px] font-medium opacity-100 select-none\"\n\t>\n\t\t<span class=\"text-xs\">⌘</span>J\n\t</kbd>\n</p>\n<Command.Dialog bind:open>\n\t<Command.Input placeholder=\"Type a command or search...\" />\n\t<Command.List>\n\t\t<Command.Empty>No results found.</Command.Empty>\n\t\t<Command.Group heading=\"Suggestions\">\n\t\t\t<Command.Item>\n\t\t\t\t<CalendarIcon class=\"me-2 size-4\" />\n\t\t\t\t<span>Calendar</span>\n\t\t\t</Command.Item>\n\t\t\t<Command.Item>\n\t\t\t\t<SmileIcon class=\"me-2 size-4\" />\n\t\t\t\t<span>Search Emoji</span>\n\t\t\t</Command.Item>\n\t\t\t<Command.Item>\n\t\t\t\t<CalculatorIcon class=\"me-2 size-4\" />\n\t\t\t\t<span>Calculator</span>\n\t\t\t</Command.Item>\n\t\t</Command.Group>\n\t\t<Command.Separator />\n\t\t<Command.Group heading=\"Settings\">\n\t\t\t<Command.Item>\n\t\t\t\t<UserIcon class=\"me-2 size-4\" />\n\t\t\t\t<span>Profile</span>\n\t\t\t\t<Command.Shortcut>⌘P</Command.Shortcut>\n\t\t\t</Command.Item>\n\t\t\t<Command.Item>\n\t\t\t\t<CreditCardIcon class=\"me-2 size-4\" />\n\t\t\t\t<span>Billing</span>\n\t\t\t\t<Command.Shortcut>⌘B</Command.Shortcut>\n\t\t\t</Command.Item>\n\t\t\t<Command.Item>\n\t\t\t\t<SettingsIcon class=\"me-2 size-4\" />\n\t\t\t\t<span>Settings</span>\n\t\t\t\t<Command.Shortcut>⌘S</Command.Shortcut>\n\t\t\t</Command.Item>\n\t\t</Command.Group>\n\t</Command.List>\n</Command.Dialog>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/context-menu-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport * as ContextMenu from \"$lib/registry/ui/context-menu/index.js\";\n\n\tlet showBookmarks = $state(false);\n\tlet showFullURLs = $state(true);\n\n\tlet value = $state(\"pedro\");\n</script>\n\n<ContextMenu.Root>\n\t<ContextMenu.Trigger\n\t\tclass=\"flex h-[150px] w-[300px] items-center justify-center rounded-md border border-dashed text-sm\"\n\t>\n\t\tRight click here\n\t</ContextMenu.Trigger>\n\t<ContextMenu.Content class=\"w-52\">\n\t\t<ContextMenu.Item inset>\n\t\t\tBack\n\t\t\t<ContextMenu.Shortcut>⌘[</ContextMenu.Shortcut>\n\t\t</ContextMenu.Item>\n\t\t<ContextMenu.Item inset disabled>\n\t\t\tForward\n\t\t\t<ContextMenu.Shortcut>⌘]</ContextMenu.Shortcut>\n\t\t</ContextMenu.Item>\n\t\t<ContextMenu.Item inset>\n\t\t\tReload\n\t\t\t<ContextMenu.Shortcut>⌘R</ContextMenu.Shortcut>\n\t\t</ContextMenu.Item>\n\t\t<ContextMenu.Sub>\n\t\t\t<ContextMenu.SubTrigger inset>More Tools</ContextMenu.SubTrigger>\n\t\t\t<ContextMenu.SubContent class=\"w-48\">\n\t\t\t\t<ContextMenu.Item>\n\t\t\t\t\tSave Page As...\n\t\t\t\t\t<ContextMenu.Shortcut>⇧⌘S</ContextMenu.Shortcut>\n\t\t\t\t</ContextMenu.Item>\n\t\t\t\t<ContextMenu.Item>Create Shortcut...</ContextMenu.Item>\n\t\t\t\t<ContextMenu.Item>Name Window...</ContextMenu.Item>\n\t\t\t\t<ContextMenu.Separator />\n\t\t\t\t<ContextMenu.Item>Developer Tools</ContextMenu.Item>\n\t\t\t</ContextMenu.SubContent>\n\t\t</ContextMenu.Sub>\n\t\t<ContextMenu.Separator />\n\t\t<ContextMenu.CheckboxItem bind:checked={showBookmarks}>\n\t\t\tShow Bookmarks\n\t\t</ContextMenu.CheckboxItem>\n\t\t<ContextMenu.CheckboxItem bind:checked={showFullURLs}>\n\t\t\tShow Full URLs\n\t\t</ContextMenu.CheckboxItem>\n\t\t<ContextMenu.Separator />\n\t\t<ContextMenu.RadioGroup bind:value>\n\t\t\t<ContextMenu.Group>\n\t\t\t\t<ContextMenu.GroupHeading inset>People</ContextMenu.GroupHeading>\n\t\t\t\t<ContextMenu.RadioItem value=\"pedro\">Pedro Duarte</ContextMenu.RadioItem>\n\t\t\t\t<ContextMenu.RadioItem value=\"colm\">Colm Tuite</ContextMenu.RadioItem>\n\t\t\t</ContextMenu.Group>\n\t\t</ContextMenu.RadioGroup>\n\t</ContextMenu.Content>\n</ContextMenu.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/accordion/accordion-basic.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Accordion from \"$lib/registry/ui/accordion/index.js\";\n\n\tconst items = [\n\t\t{\n\t\t\tvalue: \"item-1\",\n\t\t\ttrigger: \"Is it accessible?\",\n\t\t\tcontent: \"Yes. It adheres to the WAI-ARIA design pattern.\",\n\t\t},\n\t\t{\n\t\t\tvalue: \"item-2\",\n\t\t\ttrigger: \"Is it styled?\",\n\t\t\tcontent:\n\t\t\t\t\"Yes. It comes with default styles that matches the other components' aesthetic.\",\n\t\t},\n\t\t{\n\t\t\tvalue: \"item-3\",\n\t\t\ttrigger: \"Is it animated?\",\n\t\t\tcontent: \"Yes. It's animated by default, but you can disable it if you prefer.\",\n\t\t},\n\t];\n</script>\n\n<Example title=\"Basic\">\n\t<Accordion.Root type=\"single\" class=\"mx-auto max-w-lg\">\n\t\t{#each items as item (item.value)}\n\t\t\t<Accordion.Item value={item.value}>\n\t\t\t\t<Accordion.Trigger>{item.trigger}</Accordion.Trigger>\n\t\t\t\t<Accordion.Content>{item.content}</Accordion.Content>\n\t\t\t</Accordion.Item>\n\t\t{/each}\n\t</Accordion.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/accordion/accordion-in-card.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Accordion from \"$lib/registry/ui/accordion/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport ArrowUpRightIcon from \"@lucide/svelte/icons/arrow-up-right\";\n\n\tconst items = [\n\t\t{\n\t\t\tvalue: \"plans\",\n\t\t\ttrigger: \"What subscription plans do you offer?\",\n\t\t\tcontent: [\n\t\t\t\t\"We offer three subscription tiers: Starter ($9/month), Professional ($29/month), and Enterprise ($99/month). Each plan includes increasing storage limits, API access, priority support, and team collaboration features.\",\n\t\t\t],\n\t\t\thasButton: true,\n\t\t},\n\t\t{\n\t\t\tvalue: \"billing\",\n\t\t\ttrigger: \"How does billing work?\",\n\t\t\tcontent: [\n\t\t\t\t\"Billing occurs automatically at the start of each billing cycle. We accept all major credit cards, PayPal, and ACH transfers for enterprise customers.\",\n\t\t\t\t\"You'll receive an invoice via email after each payment. You can update your payment method or billing information anytime in your account settings. Failed payments will trigger automated retry attempts and email notifications.\",\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tvalue: \"upgrade\",\n\t\t\ttrigger: \"Can I upgrade or downgrade my plan?\",\n\t\t\tcontent: [\n\t\t\t\t\"Yes, you can change your plan at any time. When upgrading, you'll be charged a prorated amount for the remainder of your billing cycle and immediately gain access to new features.\",\n\t\t\t\t\"When downgrading, the change takes effect at the end of your current billing period, and you'll retain access to premium features until then. No refunds are provided for downgrades.\",\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tvalue: \"cancel\",\n\t\t\ttrigger: \"How do I cancel my subscription?\",\n\t\t\tcontent: [\n\t\t\t\t\"You can cancel your subscription anytime from your account settings. There are no cancellation fees or penalties. Your access will continue until the end of your current billing period.\",\n\t\t\t\t\"After cancellation, your data is retained for 30 days in case you want to reactivate. You can export all your data before or after canceling. We'd love to hear your feedback about why you're leaving.\",\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tvalue: \"refund\",\n\t\t\ttrigger: \"What is your refund policy?\",\n\t\t\tcontent: [\n\t\t\t\t\"We offer a 30-day money-back guarantee for new subscriptions. If you're not satisfied within the first 30 days, contact our support team for a full refund.\",\n\t\t\t\t\"After 30 days, we don't provide refunds for partial billing periods, but you can cancel anytime to avoid future charges. Enterprise customers have custom refund terms outlined in their contracts.\",\n\t\t\t],\n\t\t},\n\t];\n</script>\n\n<Example title=\"In Card\">\n\t<Card.Root class=\"mx-auto w-full max-w-lg gap-4\">\n\t\t<Card.Header>\n\t\t\t<Card.Title>Subscription & Billing</Card.Title>\n\t\t\t<Card.Description>\n\t\t\t\tCommon questions about your account, plans, and payments\n\t\t\t</Card.Description>\n\t\t</Card.Header>\n\t\t<Card.Content>\n\t\t\t<Accordion.Root\n\t\t\t\ttype=\"multiple\"\n\t\t\t\tvalue={[\"plans\"]}\n\t\t\t\tclass=\"style-maia:rounded-md style-mira:rounded-md\"\n\t\t\t>\n\t\t\t\t{#each items as item (item.value)}\n\t\t\t\t\t<Accordion.Item value={item.value}>\n\t\t\t\t\t\t<Accordion.Trigger>{item.trigger}</Accordion.Trigger>\n\t\t\t\t\t\t<Accordion.Content>\n\t\t\t\t\t\t\t{#each item.content as paragraph, i (i)}\n\t\t\t\t\t\t\t\t<p>{paragraph}</p>\n\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t{#if item.hasButton}\n\t\t\t\t\t\t\t\t<p>\n\t\t\t\t\t\t\t\t\t<a href=\"#/\">Annual billing is available</a> with a 20% discount.\n\t\t\t\t\t\t\t\t\tAll plans include a 14-day free trial with no credit card required.\n\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t\t<Button size=\"sm\">\n\t\t\t\t\t\t\t\t\tView plans\n\t\t\t\t\t\t\t\t\t<ArrowUpRightIcon />\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t</Accordion.Content>\n\t\t\t\t\t</Accordion.Item>\n\t\t\t\t{/each}\n\t\t\t</Accordion.Root>\n\t\t</Card.Content>\n\t</Card.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/accordion/accordion-multiple.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Accordion from \"$lib/registry/ui/accordion/index.js\";\n\n\tconst items = [\n\t\t{\n\t\t\tvalue: \"item-1\",\n\t\t\ttrigger:\n\t\t\t\t\"What are the key considerations when implementing a comprehensive enterprise-level authentication system?\",\n\t\t\tcontent:\n\t\t\t\t\"Implementing a robust enterprise authentication system requires careful consideration of multiple factors. This includes secure password hashing and storage, multi-factor authentication (MFA) implementation, session management, OAuth2 and SSO integration, regular security audits, rate limiting to prevent brute force attacks, and maintaining detailed audit logs. Additionally, you'll need to consider scalability, performance impact, and compliance with relevant data protection regulations such as GDPR or HIPAA.\",\n\t\t},\n\t\t{\n\t\t\tvalue: \"item-2\",\n\t\t\ttrigger:\n\t\t\t\t\"How does modern distributed system architecture handle eventual consistency and data synchronization across multiple regions?\",\n\t\t\tcontent:\n\t\t\t\t\"Modern distributed systems employ various strategies to maintain data consistency across regions. This often involves using techniques like CRDT (Conflict-Free Replicated Data Types), vector clocks, and gossip protocols. Systems might implement event sourcing patterns, utilize message queues for asynchronous updates, and employ sophisticated conflict resolution strategies. Popular solutions like Amazon's DynamoDB and Google's Spanner demonstrate different approaches to solving these challenges, balancing between consistency, availability, and partition tolerance as described in the CAP theorem.\",\n\t\t},\n\t];\n</script>\n\n<Example title=\"Multiple\">\n\t<Accordion.Root type=\"multiple\" class=\"mx-auto max-w-lg\">\n\t\t{#each items as item (item.value)}\n\t\t\t<Accordion.Item value={item.value}>\n\t\t\t\t<Accordion.Trigger>{item.trigger}</Accordion.Trigger>\n\t\t\t\t<Accordion.Content>{item.content}</Accordion.Content>\n\t\t\t</Accordion.Item>\n\t\t{/each}\n\t</Accordion.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/accordion/accordion-with-borders.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Accordion from \"$lib/registry/ui/accordion/index.js\";\n\n\tconst items = [\n\t\t{\n\t\t\tvalue: \"billing\",\n\t\t\ttrigger: \"How does billing work?\",\n\t\t\tcontent:\n\t\t\t\t\"We offer monthly and annual subscription plans. Billing is charged at the beginning of each cycle, and you can cancel anytime. All plans include automatic backups, 24/7 support, and unlimited team members. There are no hidden fees or setup costs.\",\n\t\t},\n\t\t{\n\t\t\tvalue: \"security\",\n\t\t\ttrigger: \"Is my data secure?\",\n\t\t\tcontent:\n\t\t\t\t\"Yes. We use end-to-end encryption, SOC 2 Type II compliance, and regular third-party security audits. All data is encrypted at rest and in transit using industry-standard protocols. We also offer optional two-factor authentication and single sign-on for enterprise customers.\",\n\t\t},\n\t\t{\n\t\t\tvalue: \"integration\",\n\t\t\ttrigger: \"What integrations do you support?\",\n\t\t\tcontent: [\n\t\t\t\t\"We integrate with 500+ popular tools including Slack, Zapier, Salesforce, HubSpot, and more. You can also build custom integrations using our REST API and webhooks. \",\n\t\t\t\t\"Our API documentation includes code examples in 10+ programming languages.\",\n\t\t\t],\n\t\t},\n\t];\n</script>\n\n<Example title=\"With Borders\">\n\t<Accordion.Root\n\t\ttype=\"single\"\n\t\tclass=\"style-lyra:gap-2 style-vega:gap-2 style-nova:gap-2 mx-auto flex max-w-lg flex-col\"\n\t>\n\t\t{#each items as item (item.value)}\n\t\t\t<Accordion.Item\n\t\t\t\tvalue={item.value}\n\t\t\t\tclass=\"style-vega:border style-nova:border style-lyra:border style-vega:rounded-lg style-nova:rounded-lg\"\n\t\t\t>\n\t\t\t\t<Accordion.Trigger\n\t\t\t\t\tclass=\"style-nova:px-2.5 style-nova:text-sm style-vega:text-sm style-maia:text-sm style-mira:text-xs style-lyra:px-2 style-lyra:text-xs style-vega:px-4 font-medium\"\n\t\t\t\t>\n\t\t\t\t\t{item.trigger}\n\t\t\t\t</Accordion.Trigger>\n\t\t\t\t<Accordion.Content\n\t\t\t\t\tclass=\"text-muted-foreground style-nova:px-2.5 style-nova:text-sm style-lyra:px-2 style-lyra:text-xs style-vega:px-4 style-maia:px-0 style-mira:px-0\"\n\t\t\t\t>\n\t\t\t\t\t{#if Array.isArray(item.content)}\n\t\t\t\t\t\t{#each item.content as paragraph, i (i)}\n\t\t\t\t\t\t\t<p>{paragraph}</p>\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t{:else}\n\t\t\t\t\t\t{item.content}\n\t\t\t\t\t{/if}\n\t\t\t\t</Accordion.Content>\n\t\t\t</Accordion.Item>\n\t\t{/each}\n\t</Accordion.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/accordion/accordion-with-disabled.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Accordion from \"$lib/registry/ui/accordion/index.js\";\n\n\tconst items = [\n\t\t{\n\t\t\tvalue: \"item-1\",\n\t\t\ttrigger: \"Can I access my account history?\",\n\t\t\tcontent:\n\t\t\t\t\"Yes, you can view your complete account history including all transactions, plan changes, and support tickets in the Account History section of your dashboard.\",\n\t\t\tdisabled: false,\n\t\t},\n\t\t{\n\t\t\tvalue: \"item-2\",\n\t\t\ttrigger: \"Premium feature information\",\n\t\t\tcontent:\n\t\t\t\t\"This section contains information about premium features. Upgrade your plan to access this content.\",\n\t\t\tdisabled: true,\n\t\t},\n\t\t{\n\t\t\tvalue: \"item-3\",\n\t\t\ttrigger: \"How do I update my email address?\",\n\t\t\tcontent:\n\t\t\t\t\"You can update your email address in your account settings. You'll receive a verification email at your new address to confirm the change.\",\n\t\t\tdisabled: false,\n\t\t},\n\t];\n</script>\n\n<Example title=\"With Disabled\">\n\t<Accordion.Root\n\t\ttype=\"single\"\n\t\tclass=\"style-lyra:rounded-none style-vega:rounded-lg style-nova:rounded-lg style-maia:rounded-lg style-mira:rounded-lg mx-auto max-w-lg overflow-hidden border\"\n\t>\n\t\t{#each items as item (item.value)}\n\t\t\t<Accordion.Item\n\t\t\t\tvalue={item.value}\n\t\t\t\tdisabled={item.disabled}\n\t\t\t\tclass=\"data-[state=open]:bg-muted/50 p-1\"\n\t\t\t>\n\t\t\t\t<Accordion.Trigger class=\"style-nova:px-2.5 style-lyra:px-2 style-vega:px-4\">\n\t\t\t\t\t{item.trigger}\n\t\t\t\t</Accordion.Trigger>\n\t\t\t\t<Accordion.Content class=\"style-nova:px-2.5 style-lyra:px-2 style-vega:px-4\">\n\t\t\t\t\t{item.content}\n\t\t\t\t</Accordion.Content>\n\t\t\t</Accordion.Item>\n\t\t{/each}\n\t</Accordion.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/accordion/accordion.svelte",
    "content": "<script lang=\"ts\">\n\timport ExampleWrapper from \"../../../../../routes/(app)/(layout)/(create)/components/example-wrapper.svelte\";\n\timport AccordionBasic from \"./accordion-basic.svelte\";\n\timport AccordionMultiple from \"./accordion-multiple.svelte\";\n\timport AccordionWithBorders from \"./accordion-with-borders.svelte\";\n\timport AccordionInCard from \"./accordion-in-card.svelte\";\n\timport AccordionWithDisabled from \"./accordion-with-disabled.svelte\";\n</script>\n\n<ExampleWrapper class=\"w-full max-w-4xl lg:grid-cols-1 2xl:max-w-4xl 2xl:grid-cols-1\">\n\t<AccordionBasic />\n\t<AccordionMultiple />\n\t<AccordionWithBorders />\n\t<AccordionInCard />\n\t<AccordionWithDisabled />\n</ExampleWrapper>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/alert/alert-basic.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Alert from \"$lib/registry/ui/alert/index.js\";\n</script>\n\n<Example title=\"Basic\">\n\t<div class=\"mx-auto flex w-full max-w-lg flex-col gap-4\">\n\t\t<Alert.Root>\n\t\t\t<Alert.Title>Success! Your changes have been saved.</Alert.Title>\n\t\t</Alert.Root>\n\t\t<Alert.Root>\n\t\t\t<Alert.Title>Success! Your changes have been saved.</Alert.Title>\n\t\t\t<Alert.Description>This is an alert with title and description.</Alert.Description>\n\t\t</Alert.Root>\n\t\t<Alert.Root>\n\t\t\t<Alert.Description>\n\t\t\t\tThis one has a description only. No title. No icon.\n\t\t\t</Alert.Description>\n\t\t</Alert.Root>\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/alert/alert-destructive.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Alert from \"$lib/registry/ui/alert/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Example title=\"Destructive\">\n\t<div class=\"mx-auto flex w-full max-w-lg flex-col gap-4\">\n\t\t<Alert.Root variant=\"destructive\">\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"CircleAlertIcon\"\n\t\t\t\ttabler=\"IconExclamationCircle\"\n\t\t\t\thugeicons=\"AlertCircleIcon\"\n\t\t\t\tphosphor=\"WarningCircleIcon\"\n\t\t\t\tremixicon=\"RiErrorWarningLine\"\n\t\t\t/>\n\t\t\t<Alert.Title>Something went wrong!</Alert.Title>\n\t\t\t<Alert.Description>Your session has expired. Please log in again.</Alert.Description>\n\t\t</Alert.Root>\n\t\t<Alert.Root variant=\"destructive\">\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"CircleAlertIcon\"\n\t\t\t\ttabler=\"IconExclamationCircle\"\n\t\t\t\thugeicons=\"AlertCircleIcon\"\n\t\t\t\tphosphor=\"WarningCircleIcon\"\n\t\t\t\tremixicon=\"RiErrorWarningLine\"\n\t\t\t/>\n\t\t\t<Alert.Title>Unable to process your payment.</Alert.Title>\n\t\t\t<Alert.Description>\n\t\t\t\t<p>\n\t\t\t\t\tPlease verify your <a href=\"#/\">billing information</a> and try again.\n\t\t\t\t</p>\n\t\t\t\t<ul class=\"list-inside list-disc\">\n\t\t\t\t\t<li>Check your card details</li>\n\t\t\t\t\t<li>Ensure sufficient funds</li>\n\t\t\t\t\t<li>Verify billing address</li>\n\t\t\t\t</ul>\n\t\t\t</Alert.Description>\n\t\t</Alert.Root>\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/alert/alert-with-actions.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Alert from \"$lib/registry/ui/alert/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport { Badge } from \"$lib/registry/ui/badge/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Example title=\"With Actions\">\n\t<div class=\"mx-auto flex w-full max-w-lg flex-col gap-4\">\n\t\t<Alert.Root>\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"CircleAlertIcon\"\n\t\t\t\ttabler=\"IconExclamationCircle\"\n\t\t\t\thugeicons=\"AlertCircleIcon\"\n\t\t\t\tphosphor=\"WarningCircleIcon\"\n\t\t\t\tremixicon=\"RiErrorWarningLine\"\n\t\t\t/>\n\t\t\t<Alert.Title>The selected emails have been marked as spam.</Alert.Title>\n\t\t\t<Alert.Action>\n\t\t\t\t<Button size=\"xs\">Undo</Button>\n\t\t\t</Alert.Action>\n\t\t</Alert.Root>\n\t\t<Alert.Root>\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"CircleAlertIcon\"\n\t\t\t\ttabler=\"IconExclamationCircle\"\n\t\t\t\thugeicons=\"AlertCircleIcon\"\n\t\t\t\tphosphor=\"WarningCircleIcon\"\n\t\t\t\tremixicon=\"RiErrorWarningLine\"\n\t\t\t/>\n\t\t\t<Alert.Title>The selected emails have been marked as spam.</Alert.Title>\n\t\t\t<Alert.Description>\n\t\t\t\tThis is a very long alert title that demonstrates how the component handles extended\n\t\t\t\ttext content.\n\t\t\t</Alert.Description>\n\t\t\t<Alert.Action>\n\t\t\t\t<Badge variant=\"secondary\">Badge</Badge>\n\t\t\t</Alert.Action>\n\t\t</Alert.Root>\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/alert/alert-with-icons.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Alert from \"$lib/registry/ui/alert/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Example title=\"With Icons\">\n\t<div class=\"mx-auto flex w-full max-w-lg flex-col gap-4\">\n\t\t<Alert.Root>\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"CircleAlertIcon\"\n\t\t\t\ttabler=\"IconExclamationCircle\"\n\t\t\t\thugeicons=\"AlertCircleIcon\"\n\t\t\t\tphosphor=\"WarningCircleIcon\"\n\t\t\t\tremixicon=\"RiErrorWarningLine\"\n\t\t\t/>\n\t\t\t<Alert.Title>\n\t\t\t\tLet&apos;s try one with icon, title and a <a href=\"#/\">link</a>.\n\t\t\t</Alert.Title>\n\t\t</Alert.Root>\n\t\t<Alert.Root>\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"CircleAlertIcon\"\n\t\t\t\ttabler=\"IconExclamationCircle\"\n\t\t\t\thugeicons=\"AlertCircleIcon\"\n\t\t\t\tphosphor=\"WarningCircleIcon\"\n\t\t\t\tremixicon=\"RiErrorWarningLine\"\n\t\t\t/>\n\t\t\t<Alert.Description>\n\t\t\t\tThis one has an icon and a description only. No title.\n\t\t\t\t<a href=\"#/\">But it has a link</a> and a <a href=\"#/\">second link</a>.\n\t\t\t</Alert.Description>\n\t\t</Alert.Root>\n\n\t\t<Alert.Root>\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"CircleAlertIcon\"\n\t\t\t\ttabler=\"IconExclamationCircle\"\n\t\t\t\thugeicons=\"AlertCircleIcon\"\n\t\t\t\tphosphor=\"WarningCircleIcon\"\n\t\t\t\tremixicon=\"RiErrorWarningLine\"\n\t\t\t/>\n\t\t\t<Alert.Title>Success! Your changes have been saved</Alert.Title>\n\t\t\t<Alert.Description>\n\t\t\t\tThis is an alert with icon, title and description.\n\t\t\t</Alert.Description>\n\t\t</Alert.Root>\n\t\t<Alert.Root>\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"CircleAlertIcon\"\n\t\t\t\ttabler=\"IconExclamationCircle\"\n\t\t\t\thugeicons=\"AlertCircleIcon\"\n\t\t\t\tphosphor=\"WarningCircleIcon\"\n\t\t\t\tremixicon=\"RiErrorWarningLine\"\n\t\t\t/>\n\t\t\t<Alert.Title>\n\t\t\t\tThis is a very long alert title that demonstrates how the component handles extended\n\t\t\t\ttext content and potentially wraps across multiple lines\n\t\t\t</Alert.Title>\n\t\t</Alert.Root>\n\t\t<Alert.Root>\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"CircleAlertIcon\"\n\t\t\t\ttabler=\"IconExclamationCircle\"\n\t\t\t\thugeicons=\"AlertCircleIcon\"\n\t\t\t\tphosphor=\"WarningCircleIcon\"\n\t\t\t\tremixicon=\"RiErrorWarningLine\"\n\t\t\t/>\n\t\t\t<Alert.Description>\n\t\t\t\tThis is a very long alert description that demonstrates how the component handles\n\t\t\t\textended text content and potentially wraps across multiple lines\n\t\t\t</Alert.Description>\n\t\t</Alert.Root>\n\t\t<Alert.Root>\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"CircleAlertIcon\"\n\t\t\t\ttabler=\"IconExclamationCircle\"\n\t\t\t\thugeicons=\"AlertCircleIcon\"\n\t\t\t\tphosphor=\"WarningCircleIcon\"\n\t\t\t\tremixicon=\"RiErrorWarningLine\"\n\t\t\t/>\n\t\t\t<Alert.Title>\n\t\t\t\tThis is an extremely long alert title that spans multiple lines to demonstrate how\n\t\t\t\tthe component handles very lengthy headings while maintaining readability and proper\n\t\t\t\ttext wrapping behavior\n\t\t\t</Alert.Title>\n\t\t\t<Alert.Description>\n\t\t\t\tThis is an equally long description that contains detailed information about the\n\t\t\t\talert. It shows how the component can accommodate extensive content while preserving\n\t\t\t\tproper spacing, alignment, and readability across different screen sizes and\n\t\t\t\tviewport widths. This helps ensure the user experience remains consistent regardless\n\t\t\t\tof the content length.\n\t\t\t</Alert.Description>\n\t\t</Alert.Root>\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/alert/alert.svelte",
    "content": "<script lang=\"ts\">\n\timport ExampleWrapper from \"../../../../../routes/(app)/(layout)/(create)/components/example-wrapper.svelte\";\n\timport AlertBasic from \"./alert-basic.svelte\";\n\timport AlertWithIcons from \"./alert-with-icons.svelte\";\n\timport AlertDestructive from \"./alert-destructive.svelte\";\n\timport AlertWithActions from \"./alert-with-actions.svelte\";\n</script>\n\n<ExampleWrapper class=\"lg:grid-cols-1\">\n\t<AlertBasic />\n\t<AlertWithIcons />\n\t<AlertDestructive />\n\t<AlertWithActions />\n</ExampleWrapper>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/alert-dialog/alert-dialog-basic.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as AlertDialog from \"$lib/registry/ui/alert-dialog/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\n\tlet open = $state(false);\n</script>\n\n<Example title=\"Basic\" class=\"items-center\">\n\t<AlertDialog.Root bind:open>\n\t\t<AlertDialog.Trigger>\n\t\t\t<Button variant=\"outline\">Default</Button>\n\t\t</AlertDialog.Trigger>\n\t\t<AlertDialog.Content>\n\t\t\t<AlertDialog.Header>\n\t\t\t\t<AlertDialog.Title>Are you absolutely sure?</AlertDialog.Title>\n\t\t\t\t<AlertDialog.Description>\n\t\t\t\t\tThis action cannot be undone. This will permanently delete your account and\n\t\t\t\t\tremove your data from our servers.\n\t\t\t\t</AlertDialog.Description>\n\t\t\t</AlertDialog.Header>\n\t\t\t<AlertDialog.Footer>\n\t\t\t\t<AlertDialog.Cancel>Cancel</AlertDialog.Cancel>\n\t\t\t\t<AlertDialog.Action onclick={() => (open = false)}>Continue</AlertDialog.Action>\n\t\t\t</AlertDialog.Footer>\n\t\t</AlertDialog.Content>\n\t</AlertDialog.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/alert-dialog/alert-dialog-destructive.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as AlertDialog from \"$lib/registry/ui/alert-dialog/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\n\tlet open = $state(false);\n</script>\n\n<Example title=\"Destructive\" class=\"items-center\">\n\t<AlertDialog.Root bind:open>\n\t\t<AlertDialog.Trigger>\n\t\t\t<Button variant=\"destructive\">Delete Chat</Button>\n\t\t</AlertDialog.Trigger>\n\t\t<AlertDialog.Content size=\"sm\">\n\t\t\t<AlertDialog.Header>\n\t\t\t\t<AlertDialog.Media\n\t\t\t\t\tclass=\"bg-destructive/10 text-destructive dark:bg-destructive/20 dark:text-destructive\"\n\t\t\t\t>\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"Trash2Icon\"\n\t\t\t\t\t\ttabler=\"IconTrash\"\n\t\t\t\t\t\thugeicons=\"Delete02Icon\"\n\t\t\t\t\t\tphosphor=\"TrashIcon\"\n\t\t\t\t\t\tremixicon=\"RiDeleteBinLine\"\n\t\t\t\t\t/>\n\t\t\t\t</AlertDialog.Media>\n\t\t\t\t<AlertDialog.Title>Delete chat?</AlertDialog.Title>\n\t\t\t\t<AlertDialog.Description>\n\t\t\t\t\tThis will permanently delete this chat conversation. View\n\t\t\t\t\t<a href=\"#/\">Settings</a> delete any memories saved during this chat.\n\t\t\t\t</AlertDialog.Description>\n\t\t\t</AlertDialog.Header>\n\t\t\t<AlertDialog.Footer>\n\t\t\t\t<AlertDialog.Cancel variant=\"ghost\">Cancel</AlertDialog.Cancel>\n\t\t\t\t<AlertDialog.Action variant=\"destructive\" onclick={() => (open = false)}\n\t\t\t\t\t>Delete</AlertDialog.Action\n\t\t\t\t>\n\t\t\t</AlertDialog.Footer>\n\t\t</AlertDialog.Content>\n\t</AlertDialog.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/alert-dialog/alert-dialog-in-dialog.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as AlertDialog from \"$lib/registry/ui/alert-dialog/index.js\";\n\timport * as Dialog from \"$lib/registry/ui/dialog/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\n\tlet alertOpen = $state(false);\n</script>\n\n<Example title=\"In Dialog\" class=\"items-center\">\n\t<Dialog.Root>\n\t\t<Dialog.Trigger>\n\t\t\t<Button variant=\"outline\">Open Dialog</Button>\n\t\t</Dialog.Trigger>\n\t\t<Dialog.Content>\n\t\t\t<Dialog.Header>\n\t\t\t\t<Dialog.Title>Alert Dialog Example</Dialog.Title>\n\t\t\t\t<Dialog.Description>\n\t\t\t\t\tClick the button below to open an alert dialog.\n\t\t\t\t</Dialog.Description>\n\t\t\t</Dialog.Header>\n\t\t\t<Dialog.Footer>\n\t\t\t\t<AlertDialog.Root bind:open={alertOpen}>\n\t\t\t\t\t<AlertDialog.Trigger>\n\t\t\t\t\t\t<Button>Open Alert Dialog</Button>\n\t\t\t\t\t</AlertDialog.Trigger>\n\t\t\t\t\t<AlertDialog.Content size=\"sm\">\n\t\t\t\t\t\t<AlertDialog.Header>\n\t\t\t\t\t\t\t<AlertDialog.Title>Are you absolutely sure?</AlertDialog.Title>\n\t\t\t\t\t\t\t<AlertDialog.Description>\n\t\t\t\t\t\t\t\tThis action cannot be undone. This will permanently delete your\n\t\t\t\t\t\t\t\taccount and remove your data from our servers.\n\t\t\t\t\t\t\t</AlertDialog.Description>\n\t\t\t\t\t\t</AlertDialog.Header>\n\t\t\t\t\t\t<AlertDialog.Footer>\n\t\t\t\t\t\t\t<AlertDialog.Cancel>Cancel</AlertDialog.Cancel>\n\t\t\t\t\t\t\t<AlertDialog.Action onclick={() => (alertOpen = false)}\n\t\t\t\t\t\t\t\t>Continue</AlertDialog.Action\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t</AlertDialog.Footer>\n\t\t\t\t\t</AlertDialog.Content>\n\t\t\t\t</AlertDialog.Root>\n\t\t\t</Dialog.Footer>\n\t\t</Dialog.Content>\n\t</Dialog.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/alert-dialog/alert-dialog-small-with-media.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as AlertDialog from \"$lib/registry/ui/alert-dialog/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\n\tlet open = $state(false);\n</script>\n\n<Example title=\"Small With Media\" class=\"items-center\">\n\t<AlertDialog.Root bind:open>\n\t\t<AlertDialog.Trigger>\n\t\t\t<Button variant=\"outline\">Small (Media)</Button>\n\t\t</AlertDialog.Trigger>\n\t\t<AlertDialog.Content size=\"sm\">\n\t\t\t<AlertDialog.Header>\n\t\t\t\t<AlertDialog.Media>\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"BluetoothIcon\"\n\t\t\t\t\t\ttabler=\"IconBluetooth\"\n\t\t\t\t\t\thugeicons=\"BluetoothIcon\"\n\t\t\t\t\t\tphosphor=\"BluetoothIcon\"\n\t\t\t\t\t\tremixicon=\"RiBluetoothLine\"\n\t\t\t\t\t/>\n\t\t\t\t</AlertDialog.Media>\n\t\t\t\t<AlertDialog.Title>Allow accessory to connect?</AlertDialog.Title>\n\t\t\t\t<AlertDialog.Description>\n\t\t\t\t\tDo you want to allow the USB accessory to connect to this device?\n\t\t\t\t</AlertDialog.Description>\n\t\t\t</AlertDialog.Header>\n\t\t\t<AlertDialog.Footer>\n\t\t\t\t<AlertDialog.Cancel>Don't allow</AlertDialog.Cancel>\n\t\t\t\t<AlertDialog.Action onclick={() => (open = false)}>Allow</AlertDialog.Action>\n\t\t\t</AlertDialog.Footer>\n\t\t</AlertDialog.Content>\n\t</AlertDialog.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/alert-dialog/alert-dialog-small.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as AlertDialog from \"$lib/registry/ui/alert-dialog/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\n\tlet open = $state(false);\n</script>\n\n<Example title=\"Small\" class=\"items-center\">\n\t<AlertDialog.Root bind:open>\n\t\t<AlertDialog.Trigger>\n\t\t\t<Button variant=\"outline\">Small</Button>\n\t\t</AlertDialog.Trigger>\n\t\t<AlertDialog.Content size=\"sm\">\n\t\t\t<AlertDialog.Header>\n\t\t\t\t<AlertDialog.Title>Allow accessory to connect?</AlertDialog.Title>\n\t\t\t\t<AlertDialog.Description>\n\t\t\t\t\tDo you want to allow the USB accessory to connect to this device?\n\t\t\t\t</AlertDialog.Description>\n\t\t\t</AlertDialog.Header>\n\t\t\t<AlertDialog.Footer>\n\t\t\t\t<AlertDialog.Cancel>Don't allow</AlertDialog.Cancel>\n\t\t\t\t<AlertDialog.Action onclick={() => (open = false)}>Allow</AlertDialog.Action>\n\t\t\t</AlertDialog.Footer>\n\t\t</AlertDialog.Content>\n\t</AlertDialog.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/alert-dialog/alert-dialog-with-media.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as AlertDialog from \"$lib/registry/ui/alert-dialog/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\n\tlet open = $state(false);\n</script>\n\n<Example title=\"With Media\" class=\"items-center\">\n\t<AlertDialog.Root bind:open>\n\t\t<AlertDialog.Trigger>\n\t\t\t<Button variant=\"outline\">Default (Media)</Button>\n\t\t</AlertDialog.Trigger>\n\t\t<AlertDialog.Content>\n\t\t\t<AlertDialog.Header>\n\t\t\t\t<AlertDialog.Media>\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"BluetoothIcon\"\n\t\t\t\t\t\ttabler=\"IconBluetooth\"\n\t\t\t\t\t\thugeicons=\"BluetoothIcon\"\n\t\t\t\t\t\tphosphor=\"BluetoothIcon\"\n\t\t\t\t\t\tremixicon=\"RiBluetoothLine\"\n\t\t\t\t\t/>\n\t\t\t\t</AlertDialog.Media>\n\t\t\t\t<AlertDialog.Title>Are you absolutely sure?</AlertDialog.Title>\n\t\t\t\t<AlertDialog.Description>\n\t\t\t\t\tThis will permanently delete your account and remove your data from our servers.\n\t\t\t\t</AlertDialog.Description>\n\t\t\t</AlertDialog.Header>\n\t\t\t<AlertDialog.Footer>\n\t\t\t\t<AlertDialog.Cancel>Cancel</AlertDialog.Cancel>\n\t\t\t\t<AlertDialog.Action onclick={() => (open = false)}>Continue</AlertDialog.Action>\n\t\t\t</AlertDialog.Footer>\n\t\t</AlertDialog.Content>\n\t</AlertDialog.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/alert-dialog/alert-dialog.svelte",
    "content": "<script lang=\"ts\">\n\timport ExampleWrapper from \"../../../../../routes/(app)/(layout)/(create)/components/example-wrapper.svelte\";\n\timport AlertDialogBasic from \"./alert-dialog-basic.svelte\";\n\timport AlertDialogSmall from \"./alert-dialog-small.svelte\";\n\timport AlertDialogWithMedia from \"./alert-dialog-with-media.svelte\";\n\timport AlertDialogSmallWithMedia from \"./alert-dialog-small-with-media.svelte\";\n\timport AlertDialogDestructive from \"./alert-dialog-destructive.svelte\";\n\timport AlertDialogInDialog from \"./alert-dialog-in-dialog.svelte\";\n</script>\n\n<ExampleWrapper>\n\t<AlertDialogBasic />\n\t<AlertDialogSmall />\n\t<AlertDialogWithMedia />\n\t<AlertDialogSmallWithMedia />\n\t<AlertDialogDestructive />\n\t<AlertDialogInDialog />\n</ExampleWrapper>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/aspect-ratio/aspect-ratio-16x9.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { AspectRatio } from \"$lib/registry/ui/aspect-ratio/index.js\";\n</script>\n\n<Example title=\"16:9\" class=\"items-center justify-center\">\n\t<AspectRatio ratio={16 / 9} class=\"bg-muted rounded-lg\">\n\t\t<img\n\t\t\tsrc=\"https://avatar.vercel.sh/shadcn1\"\n\t\t\talt=\"shadcn1\"\n\t\t\tclass=\"h-full w-full rounded-lg object-cover grayscale dark:brightness-20\"\n\t\t/>\n\t</AspectRatio>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/aspect-ratio/aspect-ratio-1x1.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { AspectRatio } from \"$lib/registry/ui/aspect-ratio/index.js\";\n</script>\n\n<Example title=\"1:1\" class=\"items-start\">\n\t<AspectRatio ratio={1 / 1} class=\"bg-muted rounded-lg\">\n\t\t<img\n\t\t\tsrc=\"https://avatar.vercel.sh/shadcn1\"\n\t\t\talt=\"shadcn1\"\n\t\t\tclass=\"h-full w-full rounded-lg object-cover grayscale dark:brightness-20\"\n\t\t/>\n\t</AspectRatio>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/aspect-ratio/aspect-ratio-21x9.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { AspectRatio } from \"$lib/registry/ui/aspect-ratio/index.js\";\n</script>\n\n<Example title=\"21:9\" class=\"items-center justify-center\">\n\t<AspectRatio ratio={21 / 9} class=\"bg-muted rounded-lg\">\n\t\t<img\n\t\t\tsrc=\"https://avatar.vercel.sh/shadcn1\"\n\t\t\talt=\"shadcn1\"\n\t\t\tclass=\"h-full w-full rounded-lg object-cover grayscale dark:brightness-20\"\n\t\t/>\n\t</AspectRatio>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/aspect-ratio/aspect-ratio-9x16.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { AspectRatio } from \"$lib/registry/ui/aspect-ratio/index.js\";\n</script>\n\n<Example title=\"9:16\" class=\"items-center justify-center\">\n\t<AspectRatio ratio={9 / 16} class=\"bg-muted rounded-lg\">\n\t\t<img\n\t\t\tsrc=\"https://avatar.vercel.sh/shadcn1\"\n\t\t\talt=\"shadcn1\"\n\t\t\tclass=\"h-full w-full rounded-lg object-cover grayscale dark:brightness-20\"\n\t\t/>\n\t</AspectRatio>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/aspect-ratio/aspect-ratio.svelte",
    "content": "<script lang=\"ts\">\n\timport ExampleWrapper from \"../../../../../routes/(app)/(layout)/(create)/components/example-wrapper.svelte\";\n\timport AspectRatio16x9 from \"./aspect-ratio-16x9.svelte\";\n\timport AspectRatio21x9 from \"./aspect-ratio-21x9.svelte\";\n\timport AspectRatio1x1 from \"./aspect-ratio-1x1.svelte\";\n\timport AspectRatio9x16 from \"./aspect-ratio-9x16.svelte\";\n</script>\n\n<ExampleWrapper class=\"max-w-4xl 2xl:max-w-4xl\">\n\t<AspectRatio16x9 />\n\t<AspectRatio21x9 />\n\t<AspectRatio1x1 />\n\t<AspectRatio9x16 />\n</ExampleWrapper>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/avatar/avatar-group-example.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Avatar from \"$lib/registry/ui/avatar/index.js\";\n</script>\n\n<Example title=\"Group\">\n\t<Avatar.Group>\n\t\t<Avatar.Root size=\"sm\">\n\t\t\t<Avatar.Image src=\"https://github.com/shadcn.png\" alt=\"@shadcn\" />\n\t\t\t<Avatar.Fallback>CN</Avatar.Fallback>\n\t\t</Avatar.Root>\n\t\t<Avatar.Root size=\"sm\">\n\t\t\t<Avatar.Image src=\"https://github.com/maxleiter.png\" alt=\"@maxleiter\" />\n\t\t\t<Avatar.Fallback>LR</Avatar.Fallback>\n\t\t</Avatar.Root>\n\t\t<Avatar.Root size=\"sm\">\n\t\t\t<Avatar.Image src=\"https://github.com/evilrabbit.png\" alt=\"@evilrabbit\" />\n\t\t\t<Avatar.Fallback>ER</Avatar.Fallback>\n\t\t</Avatar.Root>\n\t</Avatar.Group>\n\t<Avatar.Group>\n\t\t<Avatar.Root>\n\t\t\t<Avatar.Image src=\"https://github.com/shadcn.png\" alt=\"@shadcn\" />\n\t\t\t<Avatar.Fallback>CN</Avatar.Fallback>\n\t\t</Avatar.Root>\n\t\t<Avatar.Root>\n\t\t\t<Avatar.Image src=\"https://github.com/maxleiter.png\" alt=\"@maxleiter\" />\n\t\t\t<Avatar.Fallback>LR</Avatar.Fallback>\n\t\t</Avatar.Root>\n\t\t<Avatar.Root>\n\t\t\t<Avatar.Image src=\"https://github.com/evilrabbit.png\" alt=\"@evilrabbit\" />\n\t\t\t<Avatar.Fallback>ER</Avatar.Fallback>\n\t\t</Avatar.Root>\n\t</Avatar.Group>\n\t<Avatar.Group>\n\t\t<Avatar.Root size=\"lg\">\n\t\t\t<Avatar.Image src=\"https://github.com/shadcn.png\" alt=\"@shadcn\" />\n\t\t\t<Avatar.Fallback>CN</Avatar.Fallback>\n\t\t</Avatar.Root>\n\t\t<Avatar.Root size=\"lg\">\n\t\t\t<Avatar.Image src=\"https://github.com/maxleiter.png\" alt=\"@maxleiter\" />\n\t\t\t<Avatar.Fallback>LR</Avatar.Fallback>\n\t\t</Avatar.Root>\n\t\t<Avatar.Root size=\"lg\">\n\t\t\t<Avatar.Image src=\"https://github.com/evilrabbit.png\" alt=\"@evilrabbit\" />\n\t\t\t<Avatar.Fallback>ER</Avatar.Fallback>\n\t\t</Avatar.Root>\n\t</Avatar.Group>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/avatar/avatar-group-with-count.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Avatar from \"$lib/registry/ui/avatar/index.js\";\n</script>\n\n<Example title=\"Group with Count\">\n\t<Avatar.Group>\n\t\t<Avatar.Root size=\"sm\">\n\t\t\t<Avatar.Image src=\"https://github.com/shadcn.png\" alt=\"@shadcn\" />\n\t\t\t<Avatar.Fallback>CN</Avatar.Fallback>\n\t\t</Avatar.Root>\n\t\t<Avatar.Root size=\"sm\">\n\t\t\t<Avatar.Image src=\"https://github.com/maxleiter.png\" alt=\"@maxleiter\" />\n\t\t\t<Avatar.Fallback>LR</Avatar.Fallback>\n\t\t</Avatar.Root>\n\t\t<Avatar.Root size=\"sm\">\n\t\t\t<Avatar.Image src=\"https://github.com/evilrabbit.png\" alt=\"@evilrabbit\" />\n\t\t\t<Avatar.Fallback>ER</Avatar.Fallback>\n\t\t</Avatar.Root>\n\t\t<Avatar.GroupCount>+3</Avatar.GroupCount>\n\t</Avatar.Group>\n\t<Avatar.Group>\n\t\t<Avatar.Root>\n\t\t\t<Avatar.Image src=\"https://github.com/shadcn.png\" alt=\"@shadcn\" />\n\t\t\t<Avatar.Fallback>CN</Avatar.Fallback>\n\t\t</Avatar.Root>\n\t\t<Avatar.Root>\n\t\t\t<Avatar.Image src=\"https://github.com/maxleiter.png\" alt=\"@maxleiter\" />\n\t\t\t<Avatar.Fallback>LR</Avatar.Fallback>\n\t\t</Avatar.Root>\n\t\t<Avatar.Root>\n\t\t\t<Avatar.Image src=\"https://github.com/evilrabbit.png\" alt=\"@evilrabbit\" />\n\t\t\t<Avatar.Fallback>ER</Avatar.Fallback>\n\t\t</Avatar.Root>\n\t\t<Avatar.GroupCount>+3</Avatar.GroupCount>\n\t</Avatar.Group>\n\t<Avatar.Group>\n\t\t<Avatar.Root size=\"lg\">\n\t\t\t<Avatar.Image src=\"https://github.com/shadcn.png\" alt=\"@shadcn\" />\n\t\t\t<Avatar.Fallback>CN</Avatar.Fallback>\n\t\t</Avatar.Root>\n\t\t<Avatar.Root size=\"lg\">\n\t\t\t<Avatar.Image src=\"https://github.com/maxleiter.png\" alt=\"@maxleiter\" />\n\t\t\t<Avatar.Fallback>LR</Avatar.Fallback>\n\t\t</Avatar.Root>\n\t\t<Avatar.Root size=\"lg\">\n\t\t\t<Avatar.Image src=\"https://github.com/evilrabbit.png\" alt=\"@evilrabbit\" />\n\t\t\t<Avatar.Fallback>ER</Avatar.Fallback>\n\t\t</Avatar.Root>\n\t\t<Avatar.GroupCount>+3</Avatar.GroupCount>\n\t</Avatar.Group>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/avatar/avatar-group-with-icon-count.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Avatar from \"$lib/registry/ui/avatar/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Example title=\"Group with Icon Count\">\n\t<Avatar.Group>\n\t\t<Avatar.Root size=\"sm\">\n\t\t\t<Avatar.Image src=\"https://github.com/shadcn.png\" alt=\"@shadcn\" />\n\t\t\t<Avatar.Fallback>CN</Avatar.Fallback>\n\t\t</Avatar.Root>\n\t\t<Avatar.Root size=\"sm\">\n\t\t\t<Avatar.Image src=\"https://github.com/maxleiter.png\" alt=\"@maxleiter\" />\n\t\t\t<Avatar.Fallback>LR</Avatar.Fallback>\n\t\t</Avatar.Root>\n\t\t<Avatar.Root size=\"sm\">\n\t\t\t<Avatar.Image src=\"https://github.com/evilrabbit.png\" alt=\"@evilrabbit\" />\n\t\t\t<Avatar.Fallback>ER</Avatar.Fallback>\n\t\t</Avatar.Root>\n\t\t<Avatar.GroupCount>\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"PlusIcon\"\n\t\t\t\ttabler=\"IconPlus\"\n\t\t\t\thugeicons=\"PlusSignIcon\"\n\t\t\t\tphosphor=\"PlusIcon\"\n\t\t\t\tremixicon=\"RiAddLine\"\n\t\t\t/>\n\t\t</Avatar.GroupCount>\n\t</Avatar.Group>\n\t<Avatar.Group>\n\t\t<Avatar.Root>\n\t\t\t<Avatar.Image src=\"https://github.com/shadcn.png\" alt=\"@shadcn\" />\n\t\t\t<Avatar.Fallback>CN</Avatar.Fallback>\n\t\t</Avatar.Root>\n\t\t<Avatar.Root>\n\t\t\t<Avatar.Image src=\"https://github.com/maxleiter.png\" alt=\"@maxleiter\" />\n\t\t\t<Avatar.Fallback>LR</Avatar.Fallback>\n\t\t</Avatar.Root>\n\t\t<Avatar.Root>\n\t\t\t<Avatar.Image src=\"https://github.com/evilrabbit.png\" alt=\"@evilrabbit\" />\n\t\t\t<Avatar.Fallback>ER</Avatar.Fallback>\n\t\t</Avatar.Root>\n\t\t<Avatar.GroupCount>\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"PlusIcon\"\n\t\t\t\ttabler=\"IconPlus\"\n\t\t\t\thugeicons=\"PlusSignIcon\"\n\t\t\t\tphosphor=\"PlusIcon\"\n\t\t\t\tremixicon=\"RiAddLine\"\n\t\t\t/>\n\t\t</Avatar.GroupCount>\n\t</Avatar.Group>\n\t<Avatar.Group>\n\t\t<Avatar.Root size=\"lg\">\n\t\t\t<Avatar.Image src=\"https://github.com/shadcn.png\" alt=\"@shadcn\" class=\"grayscale\" />\n\t\t\t<Avatar.Fallback>CN</Avatar.Fallback>\n\t\t</Avatar.Root>\n\t\t<Avatar.Root size=\"lg\">\n\t\t\t<Avatar.Image\n\t\t\t\tsrc=\"https://github.com/maxleiter.png\"\n\t\t\t\talt=\"@maxleiter\"\n\t\t\t\tclass=\"grayscale\"\n\t\t\t/>\n\t\t\t<Avatar.Fallback>LR</Avatar.Fallback>\n\t\t</Avatar.Root>\n\t\t<Avatar.Root size=\"lg\">\n\t\t\t<Avatar.Image\n\t\t\t\tsrc=\"https://github.com/evilrabbit.png\"\n\t\t\t\talt=\"@evilrabbit\"\n\t\t\t\tclass=\"grayscale\"\n\t\t\t/>\n\t\t\t<Avatar.Fallback>ER</Avatar.Fallback>\n\t\t</Avatar.Root>\n\t\t<Avatar.GroupCount>\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"PlusIcon\"\n\t\t\t\ttabler=\"IconPlus\"\n\t\t\t\thugeicons=\"PlusSignIcon\"\n\t\t\t\tphosphor=\"PlusIcon\"\n\t\t\t\tremixicon=\"RiAddLine\"\n\t\t\t/>\n\t\t</Avatar.GroupCount>\n\t</Avatar.Group>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/avatar/avatar-in-empty.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Avatar from \"$lib/registry/ui/avatar/index.js\";\n\timport * as Empty from \"$lib/registry/ui/empty/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Example title=\"In Empty\">\n\t<Empty.Root class=\"w-full flex-none border\">\n\t\t<Empty.Header>\n\t\t\t<Empty.Media>\n\t\t\t\t<Avatar.Group>\n\t\t\t\t\t<Avatar.Root size=\"lg\">\n\t\t\t\t\t\t<Avatar.Image\n\t\t\t\t\t\t\tsrc=\"https://github.com/shadcn.png\"\n\t\t\t\t\t\t\talt=\"@shadcn\"\n\t\t\t\t\t\t\tclass=\"grayscale\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<Avatar.Fallback>CN</Avatar.Fallback>\n\t\t\t\t\t</Avatar.Root>\n\t\t\t\t\t<Avatar.Root size=\"lg\">\n\t\t\t\t\t\t<Avatar.Image\n\t\t\t\t\t\t\tsrc=\"https://github.com/maxleiter.png\"\n\t\t\t\t\t\t\talt=\"@maxleiter\"\n\t\t\t\t\t\t\tclass=\"grayscale\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<Avatar.Fallback>LR</Avatar.Fallback>\n\t\t\t\t\t</Avatar.Root>\n\t\t\t\t\t<Avatar.Root size=\"lg\">\n\t\t\t\t\t\t<Avatar.Image\n\t\t\t\t\t\t\tsrc=\"https://github.com/evilrabbit.png\"\n\t\t\t\t\t\t\talt=\"@evilrabbit\"\n\t\t\t\t\t\t\tclass=\"grayscale\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<Avatar.Fallback>ER</Avatar.Fallback>\n\t\t\t\t\t</Avatar.Root>\n\t\t\t\t\t<Avatar.GroupCount>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"PlusIcon\"\n\t\t\t\t\t\t\ttabler=\"IconPlus\"\n\t\t\t\t\t\t\thugeicons=\"PlusSignIcon\"\n\t\t\t\t\t\t\tphosphor=\"PlusIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiAddLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Avatar.GroupCount>\n\t\t\t\t</Avatar.Group>\n\t\t\t</Empty.Media>\n\t\t\t<Empty.Title>No Team Members</Empty.Title>\n\t\t\t<Empty.Description>Invite your team to collaborate on this project.</Empty.Description>\n\t\t</Empty.Header>\n\t\t<Empty.Content>\n\t\t\t<Button>\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"PlusIcon\"\n\t\t\t\t\ttabler=\"IconPlus\"\n\t\t\t\t\thugeicons=\"PlusSignIcon\"\n\t\t\t\t\tphosphor=\"PlusIcon\"\n\t\t\t\t\tremixicon=\"RiAddLine\"\n\t\t\t\t/>\n\t\t\t\tInvite Members\n\t\t\t</Button>\n\t\t</Empty.Content>\n\t</Empty.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/avatar/avatar-sizes.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Avatar from \"$lib/registry/ui/avatar/index.js\";\n</script>\n\n<Example title=\"Sizes\">\n\t<div class=\"flex flex-wrap items-center gap-2\">\n\t\t<Avatar.Root size=\"sm\">\n\t\t\t<Avatar.Image src=\"https://github.com/shadcn.png\" alt=\"@shadcn\" />\n\t\t\t<Avatar.Fallback>CN</Avatar.Fallback>\n\t\t</Avatar.Root>\n\t\t<Avatar.Root>\n\t\t\t<Avatar.Image src=\"https://github.com/shadcn.png\" alt=\"@shadcn\" />\n\t\t\t<Avatar.Fallback>CN</Avatar.Fallback>\n\t\t</Avatar.Root>\n\t\t<Avatar.Root size=\"lg\">\n\t\t\t<Avatar.Image src=\"https://github.com/shadcn.png\" alt=\"@shadcn\" />\n\t\t\t<Avatar.Fallback>CN</Avatar.Fallback>\n\t\t</Avatar.Root>\n\t</div>\n\t<div class=\"flex flex-wrap items-center gap-2\">\n\t\t<Avatar.Root size=\"sm\">\n\t\t\t<Avatar.Fallback>CN</Avatar.Fallback>\n\t\t</Avatar.Root>\n\t\t<Avatar.Root>\n\t\t\t<Avatar.Fallback>CN</Avatar.Fallback>\n\t\t</Avatar.Root>\n\t\t<Avatar.Root size=\"lg\">\n\t\t\t<Avatar.Fallback>CN</Avatar.Fallback>\n\t\t</Avatar.Root>\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/avatar/avatar-with-badge-icon.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Avatar from \"$lib/registry/ui/avatar/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Example title=\"Badge with Icon\">\n\t<div class=\"flex flex-wrap items-center gap-2\">\n\t\t<Avatar.Root size=\"sm\">\n\t\t\t<Avatar.Image src=\"https://github.com/pranathip.png\" alt=\"@pranathip\" />\n\t\t\t<Avatar.Fallback>PP</Avatar.Fallback>\n\t\t\t<Avatar.Badge>\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"PlusIcon\"\n\t\t\t\t\ttabler=\"IconPlus\"\n\t\t\t\t\thugeicons=\"PlusSignIcon\"\n\t\t\t\t\tphosphor=\"PlusIcon\"\n\t\t\t\t\tremixicon=\"RiAddLine\"\n\t\t\t\t/>\n\t\t\t</Avatar.Badge>\n\t\t</Avatar.Root>\n\t\t<Avatar.Root>\n\t\t\t<Avatar.Image src=\"https://github.com/pranathip.png\" alt=\"@pranathip\" />\n\t\t\t<Avatar.Fallback>PP</Avatar.Fallback>\n\t\t\t<Avatar.Badge>\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"PlusIcon\"\n\t\t\t\t\ttabler=\"IconPlus\"\n\t\t\t\t\thugeicons=\"PlusSignIcon\"\n\t\t\t\t\tphosphor=\"PlusIcon\"\n\t\t\t\t\tremixicon=\"RiAddLine\"\n\t\t\t\t/>\n\t\t\t</Avatar.Badge>\n\t\t</Avatar.Root>\n\t\t<Avatar.Root size=\"lg\">\n\t\t\t<Avatar.Image src=\"https://github.com/pranathip.png\" alt=\"@pranathip\" />\n\t\t\t<Avatar.Fallback>PP</Avatar.Fallback>\n\t\t\t<Avatar.Badge>\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"PlusIcon\"\n\t\t\t\t\ttabler=\"IconPlus\"\n\t\t\t\t\thugeicons=\"PlusSignIcon\"\n\t\t\t\t\tphosphor=\"PlusIcon\"\n\t\t\t\t\tremixicon=\"RiAddLine\"\n\t\t\t\t/>\n\t\t\t</Avatar.Badge>\n\t\t</Avatar.Root>\n\t</div>\n\t<div class=\"flex flex-wrap items-center gap-2\">\n\t\t<Avatar.Root size=\"sm\">\n\t\t\t<Avatar.Fallback>PP</Avatar.Fallback>\n\t\t\t<Avatar.Badge>\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"CheckIcon\"\n\t\t\t\t\ttabler=\"IconCheck\"\n\t\t\t\t\thugeicons=\"Tick02Icon\"\n\t\t\t\t\tphosphor=\"CheckIcon\"\n\t\t\t\t\tremixicon=\"RiCheckLine\"\n\t\t\t\t/>\n\t\t\t</Avatar.Badge>\n\t\t</Avatar.Root>\n\t\t<Avatar.Root>\n\t\t\t<Avatar.Fallback>PP</Avatar.Fallback>\n\t\t\t<Avatar.Badge>\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"CheckIcon\"\n\t\t\t\t\ttabler=\"IconCheck\"\n\t\t\t\t\thugeicons=\"Tick02Icon\"\n\t\t\t\t\tphosphor=\"CheckIcon\"\n\t\t\t\t\tremixicon=\"RiCheckLine\"\n\t\t\t\t/>\n\t\t\t</Avatar.Badge>\n\t\t</Avatar.Root>\n\t\t<Avatar.Root size=\"lg\">\n\t\t\t<Avatar.Fallback>PP</Avatar.Fallback>\n\t\t\t<Avatar.Badge>\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"CheckIcon\"\n\t\t\t\t\ttabler=\"IconCheck\"\n\t\t\t\t\thugeicons=\"Tick02Icon\"\n\t\t\t\t\tphosphor=\"CheckIcon\"\n\t\t\t\t\tremixicon=\"RiCheckLine\"\n\t\t\t\t/>\n\t\t\t</Avatar.Badge>\n\t\t</Avatar.Root>\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/avatar/avatar-with-badge.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Avatar from \"$lib/registry/ui/avatar/index.js\";\n</script>\n\n<Example title=\"Badge\">\n\t<div class=\"flex flex-wrap items-center gap-2\">\n\t\t<Avatar.Root size=\"sm\">\n\t\t\t<Avatar.Image src=\"https://github.com/jorgezreik.png\" alt=\"@jorgezreik\" />\n\t\t\t<Avatar.Fallback>JZ</Avatar.Fallback>\n\t\t\t<Avatar.Badge />\n\t\t</Avatar.Root>\n\t\t<Avatar.Root>\n\t\t\t<Avatar.Image src=\"https://github.com/jorgezreik.png\" alt=\"@jorgezreik\" />\n\t\t\t<Avatar.Fallback>JZ</Avatar.Fallback>\n\t\t\t<Avatar.Badge />\n\t\t</Avatar.Root>\n\t\t<Avatar.Root size=\"lg\">\n\t\t\t<Avatar.Image src=\"https://github.com/jorgezreik.png\" alt=\"@jorgezreik\" />\n\t\t\t<Avatar.Fallback>JZ</Avatar.Fallback>\n\t\t\t<Avatar.Badge />\n\t\t</Avatar.Root>\n\t</div>\n\t<div class=\"flex flex-wrap items-center gap-2\">\n\t\t<Avatar.Root size=\"sm\">\n\t\t\t<Avatar.Fallback>JZ</Avatar.Fallback>\n\t\t\t<Avatar.Badge />\n\t\t</Avatar.Root>\n\t\t<Avatar.Root>\n\t\t\t<Avatar.Fallback>JZ</Avatar.Fallback>\n\t\t\t<Avatar.Badge />\n\t\t</Avatar.Root>\n\t\t<Avatar.Root size=\"lg\">\n\t\t\t<Avatar.Fallback>JZ</Avatar.Fallback>\n\t\t\t<Avatar.Badge />\n\t\t</Avatar.Root>\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/avatar/avatar.svelte",
    "content": "<script lang=\"ts\">\n\timport ExampleWrapper from \"../../../../../routes/(app)/(layout)/(create)/components/example-wrapper.svelte\";\n\timport AvatarSizes from \"./avatar-sizes.svelte\";\n\timport AvatarWithBadge from \"./avatar-with-badge.svelte\";\n\timport AvatarWithBadgeIcon from \"./avatar-with-badge-icon.svelte\";\n\timport AvatarGroupExample from \"./avatar-group-example.svelte\";\n\timport AvatarGroupWithCount from \"./avatar-group-with-count.svelte\";\n\timport AvatarGroupWithIconCount from \"./avatar-group-with-icon-count.svelte\";\n\timport AvatarInEmpty from \"./avatar-in-empty.svelte\";\n</script>\n\n<ExampleWrapper>\n\t<AvatarSizes />\n\t<AvatarWithBadge />\n\t<AvatarWithBadgeIcon />\n\t<AvatarGroupExample />\n\t<AvatarGroupWithCount />\n\t<AvatarGroupWithIconCount />\n\t<AvatarInEmpty />\n</ExampleWrapper>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/badge/badge-as-link.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Badge } from \"$lib/registry/ui/badge/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Example title=\"As Link\">\n\t<div class=\"flex flex-wrap gap-2\">\n\t\t<Badge href=\"#/\">\n\t\t\tLink\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowUpRightIcon\"\n\t\t\t\ttabler=\"IconArrowUpRight\"\n\t\t\t\thugeicons=\"ArrowUpRightIcon\"\n\t\t\t\tphosphor=\"ArrowUpRightIcon\"\n\t\t\t\tremixicon=\"RiArrowRightUpLine\"\n\t\t\t\tdata-icon=\"inline-end\"\n\t\t\t/>\n\t\t</Badge>\n\t\t<Badge variant=\"secondary\" href=\"#/\">\n\t\t\tLink\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowUpRightIcon\"\n\t\t\t\ttabler=\"IconArrowUpRight\"\n\t\t\t\thugeicons=\"ArrowUpRightIcon\"\n\t\t\t\tphosphor=\"ArrowUpRightIcon\"\n\t\t\t\tremixicon=\"RiArrowRightUpLine\"\n\t\t\t\tdata-icon=\"inline-end\"\n\t\t\t/>\n\t\t</Badge>\n\t\t<Badge variant=\"destructive\" href=\"#/\">\n\t\t\tLink\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowUpRightIcon\"\n\t\t\t\ttabler=\"IconArrowUpRight\"\n\t\t\t\thugeicons=\"ArrowUpRightIcon\"\n\t\t\t\tphosphor=\"ArrowUpRightIcon\"\n\t\t\t\tremixicon=\"RiArrowRightUpLine\"\n\t\t\t\tdata-icon=\"inline-end\"\n\t\t\t/>\n\t\t</Badge>\n\t\t<Badge variant=\"outline\" href=\"#/\">\n\t\t\tLink\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowUpRightIcon\"\n\t\t\t\ttabler=\"IconArrowUpRight\"\n\t\t\t\thugeicons=\"ArrowUpRightIcon\"\n\t\t\t\tphosphor=\"ArrowUpRightIcon\"\n\t\t\t\tremixicon=\"RiArrowRightUpLine\"\n\t\t\t\tdata-icon=\"inline-end\"\n\t\t\t/>\n\t\t</Badge>\n\t\t<Badge variant=\"ghost\" href=\"#/\">\n\t\t\tLink\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowUpRightIcon\"\n\t\t\t\ttabler=\"IconArrowUpRight\"\n\t\t\t\thugeicons=\"ArrowRight02Icon\"\n\t\t\t\tphosphor=\"ArrowUpRightIcon\"\n\t\t\t\tremixicon=\"RiArrowRightUpLine\"\n\t\t\t\tdata-icon=\"inline-end\"\n\t\t\t/>\n\t\t</Badge>\n\t\t<Badge variant=\"link\" href=\"#/\">\n\t\t\tLink\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowUpRightIcon\"\n\t\t\t\ttabler=\"IconArrowUpRight\"\n\t\t\t\thugeicons=\"ArrowRight02Icon\"\n\t\t\t\tphosphor=\"ArrowUpRightIcon\"\n\t\t\t\tremixicon=\"RiArrowRightUpLine\"\n\t\t\t\tdata-icon=\"inline-end\"\n\t\t\t/>\n\t\t</Badge>\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/badge/badge-custom-colors.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Badge } from \"$lib/registry/ui/badge/index.js\";\n</script>\n\n<Example title=\"Custom Colors\" class=\"max-w-fit\">\n\t<div class=\"flex flex-wrap gap-2\">\n\t\t<Badge class=\"bg-blue-600 text-blue-50 dark:bg-blue-600 dark:text-blue-50\">Blue</Badge>\n\t\t<Badge class=\"bg-green-600 text-green-50 dark:bg-green-600 dark:text-green-50\">Green</Badge>\n\t\t<Badge class=\"bg-sky-600 text-sky-50 dark:bg-sky-600 dark:text-sky-50\">Sky</Badge>\n\t\t<Badge class=\"bg-purple-600 text-purple-50 dark:bg-purple-600 dark:text-purple-50\">\n\t\t\tPurple\n\t\t</Badge>\n\t\t<Badge class=\"bg-blue-50 text-blue-700 dark:bg-blue-950 dark:text-blue-300\">Blue</Badge>\n\t\t<Badge class=\"bg-green-50 text-green-700 dark:bg-green-950 dark:text-green-300\">\n\t\t\tGreen\n\t\t</Badge>\n\t\t<Badge class=\"bg-sky-50 text-sky-700 dark:bg-sky-950 dark:text-sky-300\">Sky</Badge>\n\t\t<Badge class=\"bg-purple-50 text-purple-700 dark:bg-purple-950 dark:text-purple-300\">\n\t\t\tPurple\n\t\t</Badge>\n\t\t<Badge class=\"bg-red-50 text-red-700 dark:bg-red-950 dark:text-red-300\">Red</Badge>\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/badge/badge-long-text.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Badge } from \"$lib/registry/ui/badge/index.js\";\n</script>\n\n<Example title=\"Long Text\">\n\t<div class=\"flex flex-wrap gap-2\">\n\t\t<Badge variant=\"secondary\">A badge with a lot of text to see how it wraps</Badge>\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/badge/badge-variants.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Badge } from \"$lib/registry/ui/badge/index.js\";\n</script>\n\n<Example title=\"Variants\">\n\t<div class=\"flex flex-wrap gap-2\">\n\t\t<Badge>Default</Badge>\n\t\t<Badge variant=\"secondary\">Secondary</Badge>\n\t\t<Badge variant=\"destructive\">Destructive</Badge>\n\t\t<Badge variant=\"outline\">Outline</Badge>\n\t\t<Badge variant=\"ghost\">Ghost</Badge>\n\t\t<Badge variant=\"link\">Link</Badge>\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/badge/badge-with-icon-left.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Badge } from \"$lib/registry/ui/badge/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Example title=\"Icon Left\" class=\"max-w-fit\">\n\t<div class=\"flex flex-wrap gap-2\">\n\t\t<Badge>\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"BadgeCheck\"\n\t\t\t\ttabler=\"IconRosetteDiscountCheck\"\n\t\t\t\thugeicons=\"CheckmarkBadge02Icon\"\n\t\t\t\tphosphor=\"CheckCircleIcon\"\n\t\t\t\tremixicon=\"RiCheckboxCircleLine\"\n\t\t\t\tdata-icon=\"inline-start\"\n\t\t\t/>\n\t\t\tDefault\n\t\t</Badge>\n\t\t<Badge variant=\"secondary\">\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"BadgeCheck\"\n\t\t\t\ttabler=\"IconRosetteDiscountCheck\"\n\t\t\t\thugeicons=\"CheckmarkBadge02Icon\"\n\t\t\t\tphosphor=\"CheckCircleIcon\"\n\t\t\t\tremixicon=\"RiCheckboxCircleLine\"\n\t\t\t\tdata-icon=\"inline-start\"\n\t\t\t/>\n\t\t\tSecondary\n\t\t</Badge>\n\t\t<Badge variant=\"destructive\">\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"BadgeCheck\"\n\t\t\t\ttabler=\"IconRosetteDiscountCheck\"\n\t\t\t\thugeicons=\"CheckmarkBadge02Icon\"\n\t\t\t\tphosphor=\"CheckCircleIcon\"\n\t\t\t\tremixicon=\"RiCheckboxCircleLine\"\n\t\t\t\tdata-icon=\"inline-start\"\n\t\t\t/>\n\t\t\tDestructive\n\t\t</Badge>\n\t\t<Badge variant=\"outline\">\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"BadgeCheck\"\n\t\t\t\ttabler=\"IconRosetteDiscountCheck\"\n\t\t\t\thugeicons=\"CheckmarkBadge02Icon\"\n\t\t\t\tphosphor=\"CheckCircleIcon\"\n\t\t\t\tremixicon=\"RiCheckboxCircleLine\"\n\t\t\t\tdata-icon=\"inline-start\"\n\t\t\t/>\n\t\t\tOutline\n\t\t</Badge>\n\t\t<Badge variant=\"ghost\">\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"BadgeCheck\"\n\t\t\t\ttabler=\"IconRosetteDiscountCheck\"\n\t\t\t\thugeicons=\"CheckmarkBadge02Icon\"\n\t\t\t\tphosphor=\"CheckCircleIcon\"\n\t\t\t\tremixicon=\"RiCheckboxCircleLine\"\n\t\t\t\tdata-icon=\"inline-start\"\n\t\t\t/>\n\t\t\tGhost\n\t\t</Badge>\n\t\t<Badge variant=\"link\">\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"BadgeCheck\"\n\t\t\t\ttabler=\"IconRosetteDiscountCheck\"\n\t\t\t\thugeicons=\"CheckmarkBadge02Icon\"\n\t\t\t\tphosphor=\"CheckCircleIcon\"\n\t\t\t\tremixicon=\"RiCheckboxCircleLine\"\n\t\t\t\tdata-icon=\"inline-start\"\n\t\t\t/>\n\t\t\tLink\n\t\t</Badge>\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/badge/badge-with-icon-right.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Badge } from \"$lib/registry/ui/badge/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Example title=\"Icon Right\" class=\"max-w-fit\">\n\t<div class=\"flex flex-wrap gap-2\">\n\t\t<Badge>\n\t\t\tDefault\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowRightIcon\"\n\t\t\t\ttabler=\"IconArrowRight\"\n\t\t\t\thugeicons=\"ArrowRight02Icon\"\n\t\t\t\tphosphor=\"ArrowRightIcon\"\n\t\t\t\tremixicon=\"RiArrowRightLine\"\n\t\t\t\tdata-icon=\"inline-end\"\n\t\t\t/>\n\t\t</Badge>\n\t\t<Badge variant=\"secondary\">\n\t\t\tSecondary\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowRightIcon\"\n\t\t\t\ttabler=\"IconArrowRight\"\n\t\t\t\thugeicons=\"ArrowRight02Icon\"\n\t\t\t\tphosphor=\"ArrowRightIcon\"\n\t\t\t\tremixicon=\"RiArrowRightLine\"\n\t\t\t\tdata-icon=\"inline-end\"\n\t\t\t/>\n\t\t</Badge>\n\t\t<Badge variant=\"destructive\">\n\t\t\tDestructive\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowRightIcon\"\n\t\t\t\ttabler=\"IconArrowRight\"\n\t\t\t\thugeicons=\"ArrowRight02Icon\"\n\t\t\t\tphosphor=\"ArrowRightIcon\"\n\t\t\t\tremixicon=\"RiArrowRightLine\"\n\t\t\t\tdata-icon=\"inline-end\"\n\t\t\t/>\n\t\t</Badge>\n\t\t<Badge variant=\"outline\">\n\t\t\tOutline\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowRightIcon\"\n\t\t\t\ttabler=\"IconArrowRight\"\n\t\t\t\thugeicons=\"ArrowRight02Icon\"\n\t\t\t\tphosphor=\"ArrowRightIcon\"\n\t\t\t\tremixicon=\"RiArrowRightLine\"\n\t\t\t\tdata-icon=\"inline-end\"\n\t\t\t/>\n\t\t</Badge>\n\t\t<Badge variant=\"ghost\">\n\t\t\tGhost\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowRightIcon\"\n\t\t\t\ttabler=\"IconArrowRight\"\n\t\t\t\thugeicons=\"ArrowRight02Icon\"\n\t\t\t\tphosphor=\"ArrowRightIcon\"\n\t\t\t\tremixicon=\"RiArrowRightLine\"\n\t\t\t\tdata-icon=\"inline-end\"\n\t\t\t/>\n\t\t</Badge>\n\t\t<Badge variant=\"link\">\n\t\t\tLink\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowRightIcon\"\n\t\t\t\ttabler=\"IconArrowRight\"\n\t\t\t\thugeicons=\"ArrowRight02Icon\"\n\t\t\t\tphosphor=\"ArrowRightIcon\"\n\t\t\t\tremixicon=\"RiArrowRightLine\"\n\t\t\t\tdata-icon=\"inline-end\"\n\t\t\t/>\n\t\t</Badge>\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/badge/badge-with-spinner.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Badge } from \"$lib/registry/ui/badge/index.js\";\n\timport { Spinner } from \"$lib/registry/ui/spinner/index.js\";\n</script>\n\n<Example title=\"With Spinner\" class=\"max-w-fit\">\n\t<div class=\"flex flex-wrap gap-2\">\n\t\t<Badge>\n\t\t\t<Spinner data-icon=\"inline-start\" />\n\t\t\tDefault\n\t\t</Badge>\n\t\t<Badge variant=\"secondary\">\n\t\t\t<Spinner data-icon=\"inline-start\" />\n\t\t\tSecondary\n\t\t</Badge>\n\t\t<Badge variant=\"destructive\">\n\t\t\t<Spinner data-icon=\"inline-start\" />\n\t\t\tDestructive\n\t\t</Badge>\n\t\t<Badge variant=\"outline\">\n\t\t\t<Spinner data-icon=\"inline-start\" />\n\t\t\tOutline\n\t\t</Badge>\n\t\t<Badge variant=\"ghost\">\n\t\t\t<Spinner data-icon=\"inline-start\" />\n\t\t\tGhost\n\t\t</Badge>\n\t\t<Badge variant=\"link\">\n\t\t\t<Spinner data-icon=\"inline-start\" />\n\t\t\tLink\n\t\t</Badge>\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/badge/badge.svelte",
    "content": "<script lang=\"ts\">\n\timport ExampleWrapper from \"../../../../../routes/(app)/(layout)/(create)/components/example-wrapper.svelte\";\n\timport BadgeVariants from \"./badge-variants.svelte\";\n\timport BadgeWithIconLeft from \"./badge-with-icon-left.svelte\";\n\timport BadgeWithIconRight from \"./badge-with-icon-right.svelte\";\n\timport BadgeWithSpinner from \"./badge-with-spinner.svelte\";\n\timport BadgeAsLink from \"./badge-as-link.svelte\";\n\timport BadgeLongText from \"./badge-long-text.svelte\";\n\timport BadgeCustomColors from \"./badge-custom-colors.svelte\";\n</script>\n\n<ExampleWrapper class=\"lg:grid-cols-1\">\n\t<BadgeVariants />\n\t<BadgeWithIconLeft />\n\t<BadgeWithIconRight />\n\t<BadgeWithSpinner />\n\t<BadgeAsLink />\n\t<BadgeLongText />\n\t<BadgeCustomColors />\n</ExampleWrapper>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/breadcrumb/breadcrumb-basic.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Breadcrumb from \"$lib/registry/ui/breadcrumb/index.js\";\n</script>\n\n<Example title=\"Basic\" class=\"items-center justify-center\">\n\t<Breadcrumb.Root>\n\t\t<Breadcrumb.List>\n\t\t\t<Breadcrumb.Item>\n\t\t\t\t<Breadcrumb.Link href=\"#/\">Home</Breadcrumb.Link>\n\t\t\t</Breadcrumb.Item>\n\t\t\t<Breadcrumb.Separator />\n\t\t\t<Breadcrumb.Item>\n\t\t\t\t<Breadcrumb.Link href=\"#/\">Components</Breadcrumb.Link>\n\t\t\t</Breadcrumb.Item>\n\t\t\t<Breadcrumb.Separator />\n\t\t\t<Breadcrumb.Item>\n\t\t\t\t<Breadcrumb.Page>Breadcrumb</Breadcrumb.Page>\n\t\t\t</Breadcrumb.Item>\n\t\t</Breadcrumb.List>\n\t</Breadcrumb.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/breadcrumb/breadcrumb-with-dropdown.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Breadcrumb from \"$lib/registry/ui/breadcrumb/index.js\";\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n</script>\n\n<Example title=\"With Dropdown\" class=\"items-center justify-center\">\n\t<Breadcrumb.Root>\n\t\t<Breadcrumb.List>\n\t\t\t<Breadcrumb.Item>\n\t\t\t\t<Breadcrumb.Link href=\"#/\">Home</Breadcrumb.Link>\n\t\t\t</Breadcrumb.Item>\n\t\t\t<Breadcrumb.Separator />\n\t\t\t<Breadcrumb.Item>\n\t\t\t\t<DropdownMenu.Root>\n\t\t\t\t\t<DropdownMenu.Trigger>\n\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t<Button size=\"icon-sm\" variant=\"ghost\" {...props}>\n\t\t\t\t\t\t\t\t<Breadcrumb.Ellipsis />\n\t\t\t\t\t\t\t\t<span class=\"sr-only\">Toggle menu</span>\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t</DropdownMenu.Trigger>\n\t\t\t\t\t<DropdownMenu.Content align=\"start\">\n\t\t\t\t\t\t<DropdownMenu.Item>Documentation</DropdownMenu.Item>\n\t\t\t\t\t\t<DropdownMenu.Item>Themes</DropdownMenu.Item>\n\t\t\t\t\t\t<DropdownMenu.Item>GitHub</DropdownMenu.Item>\n\t\t\t\t\t</DropdownMenu.Content>\n\t\t\t\t</DropdownMenu.Root>\n\t\t\t</Breadcrumb.Item>\n\t\t\t<Breadcrumb.Separator />\n\t\t\t<Breadcrumb.Item>\n\t\t\t\t<Breadcrumb.Link href=\"#/\">Components</Breadcrumb.Link>\n\t\t\t</Breadcrumb.Item>\n\t\t\t<Breadcrumb.Separator />\n\t\t\t<Breadcrumb.Item>\n\t\t\t\t<Breadcrumb.Page>Breadcrumb</Breadcrumb.Page>\n\t\t\t</Breadcrumb.Item>\n\t\t</Breadcrumb.List>\n\t</Breadcrumb.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/breadcrumb/breadcrumb-with-link.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Breadcrumb from \"$lib/registry/ui/breadcrumb/index.js\";\n</script>\n\n<Example title=\"With Link\" class=\"items-center justify-center\">\n\t<Breadcrumb.Root>\n\t\t<Breadcrumb.List>\n\t\t\t<Breadcrumb.Item>\n\t\t\t\t<Breadcrumb.Link>\n\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t<a href=\"#/\" {...props}>Home</a>\n\t\t\t\t\t{/snippet}\n\t\t\t\t</Breadcrumb.Link>\n\t\t\t</Breadcrumb.Item>\n\t\t\t<Breadcrumb.Separator />\n\t\t\t<Breadcrumb.Item>\n\t\t\t\t<Breadcrumb.Ellipsis />\n\t\t\t</Breadcrumb.Item>\n\t\t\t<Breadcrumb.Separator />\n\t\t\t<Breadcrumb.Item>\n\t\t\t\t<Breadcrumb.Link>\n\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t<a href=\"#/\" {...props}>Components</a>\n\t\t\t\t\t{/snippet}\n\t\t\t\t</Breadcrumb.Link>\n\t\t\t</Breadcrumb.Item>\n\t\t\t<Breadcrumb.Separator />\n\t\t\t<Breadcrumb.Item>\n\t\t\t\t<Breadcrumb.Page>Breadcrumb</Breadcrumb.Page>\n\t\t\t</Breadcrumb.Item>\n\t\t</Breadcrumb.List>\n\t</Breadcrumb.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/breadcrumb/breadcrumb.svelte",
    "content": "<script lang=\"ts\">\n\timport ExampleWrapper from \"../../../../../routes/(app)/(layout)/(create)/components/example-wrapper.svelte\";\n\timport BreadcrumbBasic from \"./breadcrumb-basic.svelte\";\n\timport BreadcrumbWithDropdown from \"./breadcrumb-with-dropdown.svelte\";\n\timport BreadcrumbWithLink from \"./breadcrumb-with-link.svelte\";\n</script>\n\n<ExampleWrapper>\n\t<BreadcrumbBasic />\n\t<BreadcrumbWithDropdown />\n\t<BreadcrumbWithLink />\n</ExampleWrapper>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/button/button-examples.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Example title=\"Examples\">\n\t<div class=\"flex flex-wrap items-center gap-4\">\n\t\t<div class=\"flex items-center gap-2\">\n\t\t\t<Button variant=\"outline\">Cancel</Button>\n\t\t\t<Button>\n\t\t\t\tSubmit\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"ArrowRightIcon\"\n\t\t\t\t\ttabler=\"IconArrowRight\"\n\t\t\t\t\thugeicons=\"ArrowRight02Icon\"\n\t\t\t\t\tphosphor=\"ArrowRightIcon\"\n\t\t\t\t\tremixicon=\"RiArrowRightLine\"\n\t\t\t\t\tdata-icon=\"inline-end\"\n\t\t\t\t/>\n\t\t\t</Button>\n\t\t</div>\n\t\t<div class=\"flex items-center gap-2\">\n\t\t\t<Button variant=\"destructive\">Delete</Button>\n\t\t\t<Button size=\"icon\">\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"ArrowRightIcon\"\n\t\t\t\t\ttabler=\"IconArrowRight\"\n\t\t\t\t\thugeicons=\"ArrowRight02Icon\"\n\t\t\t\t\tphosphor=\"ArrowRightIcon\"\n\t\t\t\t\tremixicon=\"RiArrowRightLine\"\n\t\t\t\t\tdata-icon=\"inline-end\"\n\t\t\t\t/>\n\t\t\t</Button>\n\t\t</div>\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/button/button-icon-left.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Example title=\"Icon Left\">\n\t<div class=\"flex flex-wrap items-center gap-2\">\n\t\t<Button size=\"xs\">\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowLeftCircleIcon\"\n\t\t\t\thugeicons=\"CircleArrowLeft02Icon\"\n\t\t\t\ttabler=\"IconCircleArrowLeft\"\n\t\t\t\tphosphor=\"ArrowCircleLeftIcon\"\n\t\t\t\tremixicon=\"RiArrowLeftCircleLine\"\n\t\t\t\tdata-icon=\"inline-start\"\n\t\t\t/>\n\t\t\tDefault\n\t\t</Button>\n\t\t<Button size=\"xs\" variant=\"secondary\">\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowLeftCircleIcon\"\n\t\t\t\thugeicons=\"CircleArrowLeft02Icon\"\n\t\t\t\ttabler=\"IconCircleArrowLeft\"\n\t\t\t\tphosphor=\"ArrowCircleLeftIcon\"\n\t\t\t\tremixicon=\"RiArrowLeftCircleLine\"\n\t\t\t\tdata-icon=\"inline-start\"\n\t\t\t/>\n\t\t\tSecondary\n\t\t</Button>\n\t\t<Button size=\"xs\" variant=\"outline\">\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowLeftCircleIcon\"\n\t\t\t\thugeicons=\"CircleArrowLeft02Icon\"\n\t\t\t\ttabler=\"IconCircleArrowLeft\"\n\t\t\t\tphosphor=\"ArrowCircleLeftIcon\"\n\t\t\t\tremixicon=\"RiArrowLeftCircleLine\"\n\t\t\t\tdata-icon=\"inline-start\"\n\t\t\t/>\n\t\t\tOutline\n\t\t</Button>\n\t\t<Button size=\"xs\" variant=\"ghost\">\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowLeftCircleIcon\"\n\t\t\t\thugeicons=\"CircleArrowLeft02Icon\"\n\t\t\t\ttabler=\"IconCircleArrowLeft\"\n\t\t\t\tphosphor=\"ArrowCircleLeftIcon\"\n\t\t\t\tremixicon=\"RiArrowLeftCircleLine\"\n\t\t\t\tdata-icon=\"inline-start\"\n\t\t\t/>\n\t\t\tGhost\n\t\t</Button>\n\t\t<Button size=\"xs\" variant=\"destructive\">\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowLeftCircleIcon\"\n\t\t\t\thugeicons=\"CircleArrowLeft02Icon\"\n\t\t\t\ttabler=\"IconCircleArrowLeft\"\n\t\t\t\tphosphor=\"ArrowCircleLeftIcon\"\n\t\t\t\tremixicon=\"RiArrowLeftCircleLine\"\n\t\t\t\tdata-icon=\"inline-start\"\n\t\t\t/>\n\t\t\tDestructive\n\t\t</Button>\n\t\t<Button size=\"xs\" variant=\"link\">\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowLeftCircleIcon\"\n\t\t\t\thugeicons=\"CircleArrowLeft02Icon\"\n\t\t\t\ttabler=\"IconCircleArrowLeft\"\n\t\t\t\tphosphor=\"ArrowCircleLeftIcon\"\n\t\t\t\tremixicon=\"RiArrowLeftCircleLine\"\n\t\t\t\tdata-icon=\"inline-start\"\n\t\t\t/>\n\t\t\tLink\n\t\t</Button>\n\t</div>\n\t<div class=\"flex flex-wrap items-center gap-2\">\n\t\t<Button size=\"sm\">\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowLeftCircleIcon\"\n\t\t\t\thugeicons=\"CircleArrowLeft02Icon\"\n\t\t\t\ttabler=\"IconCircleArrowLeft\"\n\t\t\t\tphosphor=\"ArrowCircleLeftIcon\"\n\t\t\t\tremixicon=\"RiArrowLeftCircleLine\"\n\t\t\t\tdata-icon=\"inline-start\"\n\t\t\t/>\n\t\t\tDefault\n\t\t</Button>\n\t\t<Button size=\"sm\" variant=\"secondary\">\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowLeftCircleIcon\"\n\t\t\t\thugeicons=\"CircleArrowLeft02Icon\"\n\t\t\t\ttabler=\"IconCircleArrowLeft\"\n\t\t\t\tphosphor=\"ArrowCircleLeftIcon\"\n\t\t\t\tremixicon=\"RiArrowLeftCircleLine\"\n\t\t\t\tdata-icon=\"inline-start\"\n\t\t\t/>\n\t\t\tSecondary\n\t\t</Button>\n\t\t<Button size=\"sm\" variant=\"outline\">\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowLeftCircleIcon\"\n\t\t\t\thugeicons=\"CircleArrowLeft02Icon\"\n\t\t\t\ttabler=\"IconCircleArrowLeft\"\n\t\t\t\tphosphor=\"ArrowCircleLeftIcon\"\n\t\t\t\tremixicon=\"RiArrowLeftCircleLine\"\n\t\t\t\tdata-icon=\"inline-start\"\n\t\t\t/>\n\t\t\tOutline\n\t\t</Button>\n\t\t<Button size=\"sm\" variant=\"ghost\">\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowLeftCircleIcon\"\n\t\t\t\thugeicons=\"CircleArrowLeft02Icon\"\n\t\t\t\ttabler=\"IconCircleArrowLeft\"\n\t\t\t\tphosphor=\"ArrowCircleLeftIcon\"\n\t\t\t\tremixicon=\"RiArrowLeftCircleLine\"\n\t\t\t\tdata-icon=\"inline-start\"\n\t\t\t/>\n\t\t\tGhost\n\t\t</Button>\n\t\t<Button size=\"sm\" variant=\"destructive\">\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowLeftCircleIcon\"\n\t\t\t\thugeicons=\"CircleArrowLeft02Icon\"\n\t\t\t\ttabler=\"IconCircleArrowLeft\"\n\t\t\t\tphosphor=\"ArrowCircleLeftIcon\"\n\t\t\t\tremixicon=\"RiArrowLeftCircleLine\"\n\t\t\t\tdata-icon=\"inline-start\"\n\t\t\t/>\n\t\t\tDestructive\n\t\t</Button>\n\t\t<Button size=\"sm\" variant=\"link\">\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowLeftCircleIcon\"\n\t\t\t\thugeicons=\"CircleArrowLeft02Icon\"\n\t\t\t\ttabler=\"IconCircleArrowLeft\"\n\t\t\t\tphosphor=\"ArrowCircleLeftIcon\"\n\t\t\t\tremixicon=\"RiArrowLeftCircleLine\"\n\t\t\t\tdata-icon=\"inline-start\"\n\t\t\t/>\n\t\t\tLink\n\t\t</Button>\n\t</div>\n\t<div class=\"flex flex-wrap items-center gap-2\">\n\t\t<Button>\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowLeftCircleIcon\"\n\t\t\t\thugeicons=\"CircleArrowLeft02Icon\"\n\t\t\t\ttabler=\"IconCircleArrowLeft\"\n\t\t\t\tphosphor=\"ArrowCircleLeftIcon\"\n\t\t\t\tremixicon=\"RiArrowLeftCircleLine\"\n\t\t\t\tdata-icon=\"inline-start\"\n\t\t\t/>\n\t\t\tDefault\n\t\t</Button>\n\t\t<Button variant=\"secondary\">\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowLeftCircleIcon\"\n\t\t\t\thugeicons=\"CircleArrowLeft02Icon\"\n\t\t\t\ttabler=\"IconCircleArrowLeft\"\n\t\t\t\tphosphor=\"ArrowCircleLeftIcon\"\n\t\t\t\tremixicon=\"RiArrowLeftCircleLine\"\n\t\t\t\tdata-icon=\"inline-start\"\n\t\t\t/>\n\t\t\tSecondary\n\t\t</Button>\n\t\t<Button variant=\"outline\">\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowLeftCircleIcon\"\n\t\t\t\thugeicons=\"CircleArrowLeft02Icon\"\n\t\t\t\ttabler=\"IconCircleArrowLeft\"\n\t\t\t\tphosphor=\"ArrowCircleLeftIcon\"\n\t\t\t\tremixicon=\"RiArrowLeftCircleLine\"\n\t\t\t\tdata-icon=\"inline-start\"\n\t\t\t/>\n\t\t\tOutline\n\t\t</Button>\n\t\t<Button variant=\"ghost\">\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowLeftCircleIcon\"\n\t\t\t\thugeicons=\"CircleArrowLeft02Icon\"\n\t\t\t\ttabler=\"IconCircleArrowLeft\"\n\t\t\t\tphosphor=\"ArrowCircleLeftIcon\"\n\t\t\t\tremixicon=\"RiArrowLeftCircleLine\"\n\t\t\t\tdata-icon=\"inline-start\"\n\t\t\t/>\n\t\t\tGhost\n\t\t</Button>\n\t\t<Button variant=\"destructive\">\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowLeftCircleIcon\"\n\t\t\t\thugeicons=\"CircleArrowLeft02Icon\"\n\t\t\t\ttabler=\"IconCircleArrowLeft\"\n\t\t\t\tphosphor=\"ArrowCircleLeftIcon\"\n\t\t\t\tremixicon=\"RiArrowLeftCircleLine\"\n\t\t\t\tdata-icon=\"inline-start\"\n\t\t\t/>\n\t\t\tDestructive\n\t\t</Button>\n\t\t<Button variant=\"link\">\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowLeftCircleIcon\"\n\t\t\t\thugeicons=\"CircleArrowLeft02Icon\"\n\t\t\t\ttabler=\"IconCircleArrowLeft\"\n\t\t\t\tphosphor=\"ArrowCircleLeftIcon\"\n\t\t\t\tremixicon=\"RiArrowLeftCircleLine\"\n\t\t\t\tdata-icon=\"inline-start\"\n\t\t\t/>\n\t\t\tLink\n\t\t</Button>\n\t</div>\n\t<div class=\"flex flex-wrap items-center gap-2\">\n\t\t<Button size=\"lg\">\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowLeftCircleIcon\"\n\t\t\t\thugeicons=\"CircleArrowLeft02Icon\"\n\t\t\t\ttabler=\"IconCircleArrowLeft\"\n\t\t\t\tphosphor=\"ArrowCircleLeftIcon\"\n\t\t\t\tremixicon=\"RiArrowLeftCircleLine\"\n\t\t\t\tdata-icon=\"inline-start\"\n\t\t\t/>\n\t\t\tDefault\n\t\t</Button>\n\t\t<Button size=\"lg\" variant=\"secondary\">\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowLeftCircleIcon\"\n\t\t\t\thugeicons=\"CircleArrowLeft02Icon\"\n\t\t\t\ttabler=\"IconCircleArrowLeft\"\n\t\t\t\tphosphor=\"ArrowCircleLeftIcon\"\n\t\t\t\tremixicon=\"RiArrowLeftCircleLine\"\n\t\t\t\tdata-icon=\"inline-start\"\n\t\t\t/>\n\t\t\tSecondary\n\t\t</Button>\n\t\t<Button size=\"lg\" variant=\"outline\">\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowLeftCircleIcon\"\n\t\t\t\thugeicons=\"CircleArrowLeft02Icon\"\n\t\t\t\ttabler=\"IconCircleArrowLeft\"\n\t\t\t\tphosphor=\"ArrowCircleLeftIcon\"\n\t\t\t\tremixicon=\"RiArrowLeftCircleLine\"\n\t\t\t\tdata-icon=\"inline-start\"\n\t\t\t/>\n\t\t\tOutline\n\t\t</Button>\n\t\t<Button size=\"lg\" variant=\"ghost\">\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowLeftCircleIcon\"\n\t\t\t\thugeicons=\"CircleArrowLeft02Icon\"\n\t\t\t\ttabler=\"IconCircleArrowLeft\"\n\t\t\t\tphosphor=\"ArrowCircleLeftIcon\"\n\t\t\t\tremixicon=\"RiArrowLeftCircleLine\"\n\t\t\t\tdata-icon=\"inline-start\"\n\t\t\t/>\n\t\t\tGhost\n\t\t</Button>\n\t\t<Button size=\"lg\" variant=\"destructive\">\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowLeftCircleIcon\"\n\t\t\t\thugeicons=\"CircleArrowLeft02Icon\"\n\t\t\t\ttabler=\"IconCircleArrowLeft\"\n\t\t\t\tphosphor=\"ArrowCircleLeftIcon\"\n\t\t\t\tremixicon=\"RiArrowLeftCircleLine\"\n\t\t\t\tdata-icon=\"inline-start\"\n\t\t\t/>\n\t\t\tDestructive\n\t\t</Button>\n\t\t<Button size=\"lg\" variant=\"link\">\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowLeftCircleIcon\"\n\t\t\t\thugeicons=\"CircleArrowLeft02Icon\"\n\t\t\t\ttabler=\"IconCircleArrowLeft\"\n\t\t\t\tphosphor=\"ArrowCircleLeftIcon\"\n\t\t\t\tremixicon=\"RiArrowLeftCircleLine\"\n\t\t\t\tdata-icon=\"inline-start\"\n\t\t\t/>\n\t\t\tLink\n\t\t</Button>\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/button/button-icon-only.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Example title=\"Icon Only\">\n\t<div class=\"flex flex-wrap items-center gap-2\">\n\t\t<Button size=\"icon-xs\">\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowRightIcon\"\n\t\t\t\ttabler=\"IconArrowRight\"\n\t\t\t\thugeicons=\"ArrowRight02Icon\"\n\t\t\t\tphosphor=\"ArrowRightIcon\"\n\t\t\t\tremixicon=\"RiArrowRightLine\"\n\t\t\t/>\n\t\t</Button>\n\t\t<Button size=\"icon-xs\" variant=\"secondary\">\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowRightIcon\"\n\t\t\t\ttabler=\"IconArrowRight\"\n\t\t\t\thugeicons=\"ArrowRight02Icon\"\n\t\t\t\tphosphor=\"ArrowRightIcon\"\n\t\t\t\tremixicon=\"RiArrowRightLine\"\n\t\t\t/>\n\t\t</Button>\n\t\t<Button size=\"icon-xs\" variant=\"outline\">\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowRightIcon\"\n\t\t\t\ttabler=\"IconArrowRight\"\n\t\t\t\thugeicons=\"ArrowRight02Icon\"\n\t\t\t\tphosphor=\"ArrowRightIcon\"\n\t\t\t\tremixicon=\"RiArrowRightLine\"\n\t\t\t/>\n\t\t</Button>\n\t\t<Button size=\"icon-xs\" variant=\"ghost\">\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowRightIcon\"\n\t\t\t\ttabler=\"IconArrowRight\"\n\t\t\t\thugeicons=\"ArrowRight02Icon\"\n\t\t\t\tphosphor=\"ArrowRightIcon\"\n\t\t\t\tremixicon=\"RiArrowRightLine\"\n\t\t\t/>\n\t\t</Button>\n\t\t<Button size=\"icon-xs\" variant=\"destructive\">\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowRightIcon\"\n\t\t\t\ttabler=\"IconArrowRight\"\n\t\t\t\thugeicons=\"ArrowRight02Icon\"\n\t\t\t\tphosphor=\"ArrowRightIcon\"\n\t\t\t\tremixicon=\"RiArrowRightLine\"\n\t\t\t/>\n\t\t</Button>\n\t\t<Button size=\"icon-xs\" variant=\"link\">\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowRightIcon\"\n\t\t\t\ttabler=\"IconArrowRight\"\n\t\t\t\thugeicons=\"ArrowRight02Icon\"\n\t\t\t\tphosphor=\"ArrowRightIcon\"\n\t\t\t\tremixicon=\"RiArrowRightLine\"\n\t\t\t/>\n\t\t</Button>\n\t</div>\n\t<div class=\"flex flex-wrap items-center gap-2\">\n\t\t<Button size=\"icon-sm\">\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowRightIcon\"\n\t\t\t\ttabler=\"IconArrowRight\"\n\t\t\t\thugeicons=\"ArrowRight02Icon\"\n\t\t\t\tphosphor=\"ArrowRightIcon\"\n\t\t\t\tremixicon=\"RiArrowRightLine\"\n\t\t\t/>\n\t\t</Button>\n\t\t<Button size=\"icon-sm\" variant=\"secondary\">\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowRightIcon\"\n\t\t\t\ttabler=\"IconArrowRight\"\n\t\t\t\thugeicons=\"ArrowRight02Icon\"\n\t\t\t\tphosphor=\"ArrowRightIcon\"\n\t\t\t\tremixicon=\"RiArrowRightLine\"\n\t\t\t/>\n\t\t</Button>\n\t\t<Button size=\"icon-sm\" variant=\"outline\">\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowRightIcon\"\n\t\t\t\ttabler=\"IconArrowRight\"\n\t\t\t\thugeicons=\"ArrowRight02Icon\"\n\t\t\t\tphosphor=\"ArrowRightIcon\"\n\t\t\t\tremixicon=\"RiArrowRightLine\"\n\t\t\t/>\n\t\t</Button>\n\t\t<Button size=\"icon-sm\" variant=\"ghost\">\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowRightIcon\"\n\t\t\t\ttabler=\"IconArrowRight\"\n\t\t\t\thugeicons=\"ArrowRight02Icon\"\n\t\t\t\tphosphor=\"ArrowRightIcon\"\n\t\t\t\tremixicon=\"RiArrowRightLine\"\n\t\t\t/>\n\t\t</Button>\n\t\t<Button size=\"icon-sm\" variant=\"destructive\">\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowRightIcon\"\n\t\t\t\ttabler=\"IconArrowRight\"\n\t\t\t\thugeicons=\"ArrowRight02Icon\"\n\t\t\t\tphosphor=\"ArrowRightIcon\"\n\t\t\t\tremixicon=\"RiArrowRightLine\"\n\t\t\t/>\n\t\t</Button>\n\t\t<Button size=\"icon-sm\" variant=\"link\">\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowRightIcon\"\n\t\t\t\ttabler=\"IconArrowRight\"\n\t\t\t\thugeicons=\"ArrowRight02Icon\"\n\t\t\t\tphosphor=\"ArrowRightIcon\"\n\t\t\t\tremixicon=\"RiArrowRightLine\"\n\t\t\t/>\n\t\t</Button>\n\t</div>\n\t<div class=\"flex flex-wrap items-center gap-2\">\n\t\t<Button size=\"icon\">\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowRightIcon\"\n\t\t\t\ttabler=\"IconArrowRight\"\n\t\t\t\thugeicons=\"ArrowRight02Icon\"\n\t\t\t\tphosphor=\"ArrowRightIcon\"\n\t\t\t\tremixicon=\"RiArrowRightLine\"\n\t\t\t/>\n\t\t</Button>\n\t\t<Button size=\"icon\" variant=\"secondary\">\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowRightIcon\"\n\t\t\t\ttabler=\"IconArrowRight\"\n\t\t\t\thugeicons=\"ArrowRight02Icon\"\n\t\t\t\tphosphor=\"ArrowRightIcon\"\n\t\t\t\tremixicon=\"RiArrowRightLine\"\n\t\t\t/>\n\t\t</Button>\n\t\t<Button size=\"icon\" variant=\"outline\">\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowRightIcon\"\n\t\t\t\ttabler=\"IconArrowRight\"\n\t\t\t\thugeicons=\"ArrowRight02Icon\"\n\t\t\t\tphosphor=\"ArrowRightIcon\"\n\t\t\t\tremixicon=\"RiArrowRightLine\"\n\t\t\t/>\n\t\t</Button>\n\t\t<Button size=\"icon\" variant=\"ghost\">\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowRightIcon\"\n\t\t\t\ttabler=\"IconArrowRight\"\n\t\t\t\thugeicons=\"ArrowRight02Icon\"\n\t\t\t\tphosphor=\"ArrowRightIcon\"\n\t\t\t\tremixicon=\"RiArrowRightLine\"\n\t\t\t/>\n\t\t</Button>\n\t\t<Button size=\"icon\" variant=\"destructive\">\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowRightIcon\"\n\t\t\t\ttabler=\"IconArrowRight\"\n\t\t\t\thugeicons=\"ArrowRight02Icon\"\n\t\t\t\tphosphor=\"ArrowRightIcon\"\n\t\t\t\tremixicon=\"RiArrowRightLine\"\n\t\t\t/>\n\t\t</Button>\n\t\t<Button size=\"icon\" variant=\"link\">\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowRightIcon\"\n\t\t\t\ttabler=\"IconArrowRight\"\n\t\t\t\thugeicons=\"ArrowRight02Icon\"\n\t\t\t\tphosphor=\"ArrowRightIcon\"\n\t\t\t\tremixicon=\"RiArrowRightLine\"\n\t\t\t/>\n\t\t</Button>\n\t</div>\n\t<div class=\"flex flex-wrap items-center gap-2\">\n\t\t<Button size=\"icon-lg\">\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowRightIcon\"\n\t\t\t\ttabler=\"IconArrowRight\"\n\t\t\t\thugeicons=\"ArrowRight02Icon\"\n\t\t\t\tphosphor=\"ArrowRightIcon\"\n\t\t\t\tremixicon=\"RiArrowRightLine\"\n\t\t\t/>\n\t\t</Button>\n\t\t<Button size=\"icon-lg\" variant=\"secondary\">\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowRightIcon\"\n\t\t\t\ttabler=\"IconArrowRight\"\n\t\t\t\thugeicons=\"ArrowRight02Icon\"\n\t\t\t\tphosphor=\"ArrowRightIcon\"\n\t\t\t\tremixicon=\"RiArrowRightLine\"\n\t\t\t/>\n\t\t</Button>\n\t\t<Button size=\"icon-lg\" variant=\"outline\">\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowRightIcon\"\n\t\t\t\ttabler=\"IconArrowRight\"\n\t\t\t\thugeicons=\"ArrowRight02Icon\"\n\t\t\t\tphosphor=\"ArrowRightIcon\"\n\t\t\t\tremixicon=\"RiArrowRightLine\"\n\t\t\t/>\n\t\t</Button>\n\t\t<Button size=\"icon-lg\" variant=\"ghost\">\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowRightIcon\"\n\t\t\t\ttabler=\"IconArrowRight\"\n\t\t\t\thugeicons=\"ArrowRight02Icon\"\n\t\t\t\tphosphor=\"ArrowRightIcon\"\n\t\t\t\tremixicon=\"RiArrowRightLine\"\n\t\t\t/>\n\t\t</Button>\n\t\t<Button size=\"icon-lg\" variant=\"destructive\">\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowRightIcon\"\n\t\t\t\ttabler=\"IconArrowRight\"\n\t\t\t\thugeicons=\"ArrowRight02Icon\"\n\t\t\t\tphosphor=\"ArrowRightIcon\"\n\t\t\t\tremixicon=\"RiArrowRightLine\"\n\t\t\t/>\n\t\t</Button>\n\t\t<Button size=\"icon-lg\" variant=\"link\">\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowRightIcon\"\n\t\t\t\ttabler=\"IconArrowRight\"\n\t\t\t\thugeicons=\"ArrowRight02Icon\"\n\t\t\t\tphosphor=\"ArrowRightIcon\"\n\t\t\t\tremixicon=\"RiArrowRightLine\"\n\t\t\t/>\n\t\t</Button>\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/button/button-icon-right.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Example title=\"Icon Right\">\n\t<div class=\"flex flex-wrap items-center gap-2\">\n\t\t<Button size=\"xs\">\n\t\t\tDefault\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowRightIcon\"\n\t\t\t\ttabler=\"IconArrowRight\"\n\t\t\t\thugeicons=\"ArrowRight02Icon\"\n\t\t\t\tphosphor=\"ArrowRightIcon\"\n\t\t\t\tremixicon=\"RiArrowRightLine\"\n\t\t\t\tdata-icon=\"inline-end\"\n\t\t\t/>\n\t\t</Button>\n\t\t<Button size=\"xs\" variant=\"secondary\">\n\t\t\tSecondary\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowRightIcon\"\n\t\t\t\ttabler=\"IconArrowRight\"\n\t\t\t\thugeicons=\"ArrowRight02Icon\"\n\t\t\t\tphosphor=\"ArrowRightIcon\"\n\t\t\t\tremixicon=\"RiArrowRightLine\"\n\t\t\t\tdata-icon=\"inline-end\"\n\t\t\t/>\n\t\t</Button>\n\t\t<Button size=\"xs\" variant=\"outline\">\n\t\t\tOutline\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowRightIcon\"\n\t\t\t\ttabler=\"IconArrowRight\"\n\t\t\t\thugeicons=\"ArrowRight02Icon\"\n\t\t\t\tphosphor=\"ArrowRightIcon\"\n\t\t\t\tremixicon=\"RiArrowRightLine\"\n\t\t\t\tdata-icon=\"inline-end\"\n\t\t\t/>\n\t\t</Button>\n\t\t<Button size=\"xs\" variant=\"ghost\">\n\t\t\tGhost\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowRightIcon\"\n\t\t\t\ttabler=\"IconArrowRight\"\n\t\t\t\thugeicons=\"ArrowRight02Icon\"\n\t\t\t\tphosphor=\"ArrowRightIcon\"\n\t\t\t\tremixicon=\"RiArrowRightLine\"\n\t\t\t\tdata-icon=\"inline-end\"\n\t\t\t/>\n\t\t</Button>\n\t\t<Button size=\"xs\" variant=\"destructive\">\n\t\t\tDestructive\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowRightIcon\"\n\t\t\t\ttabler=\"IconArrowRight\"\n\t\t\t\thugeicons=\"ArrowRight02Icon\"\n\t\t\t\tphosphor=\"ArrowRightIcon\"\n\t\t\t\tremixicon=\"RiArrowRightLine\"\n\t\t\t\tdata-icon=\"inline-end\"\n\t\t\t/>\n\t\t</Button>\n\t\t<Button size=\"xs\" variant=\"link\">\n\t\t\tLink\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowRightIcon\"\n\t\t\t\ttabler=\"IconArrowRight\"\n\t\t\t\thugeicons=\"ArrowRight02Icon\"\n\t\t\t\tphosphor=\"ArrowRightIcon\"\n\t\t\t\tremixicon=\"RiArrowRightLine\"\n\t\t\t\tdata-icon=\"inline-end\"\n\t\t\t/>\n\t\t</Button>\n\t</div>\n\t<div class=\"flex flex-wrap items-center gap-2\">\n\t\t<Button size=\"sm\">\n\t\t\tDefault\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowRightIcon\"\n\t\t\t\ttabler=\"IconArrowRight\"\n\t\t\t\thugeicons=\"ArrowRight02Icon\"\n\t\t\t\tphosphor=\"ArrowRightIcon\"\n\t\t\t\tremixicon=\"RiArrowRightLine\"\n\t\t\t\tdata-icon=\"inline-end\"\n\t\t\t/>\n\t\t</Button>\n\t\t<Button size=\"sm\" variant=\"secondary\">\n\t\t\tSecondary\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowRightIcon\"\n\t\t\t\ttabler=\"IconArrowRight\"\n\t\t\t\thugeicons=\"ArrowRight02Icon\"\n\t\t\t\tphosphor=\"ArrowRightIcon\"\n\t\t\t\tremixicon=\"RiArrowRightLine\"\n\t\t\t\tdata-icon=\"inline-end\"\n\t\t\t/>\n\t\t</Button>\n\t\t<Button size=\"sm\" variant=\"outline\">\n\t\t\tOutline\n\t\t\t<IconPlaceholder\n\t\t\t\tdata-icon=\"inline-end\"\n\t\t\t\tlucide=\"ArrowRightIcon\"\n\t\t\t\ttabler=\"IconArrowRight\"\n\t\t\t\thugeicons=\"ArrowRight02Icon\"\n\t\t\t\tphosphor=\"ArrowRightIcon\"\n\t\t\t\tremixicon=\"RiArrowRightLine\"\n\t\t\t/>\n\t\t</Button>\n\t\t<Button size=\"sm\" variant=\"ghost\">\n\t\t\tGhost\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowRightIcon\"\n\t\t\t\ttabler=\"IconArrowRight\"\n\t\t\t\thugeicons=\"ArrowRight02Icon\"\n\t\t\t\tphosphor=\"ArrowRightIcon\"\n\t\t\t\tremixicon=\"RiArrowRightLine\"\n\t\t\t\tdata-icon=\"inline-end\"\n\t\t\t/>\n\t\t</Button>\n\t\t<Button size=\"sm\" variant=\"destructive\">\n\t\t\tDestructive\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowRightIcon\"\n\t\t\t\ttabler=\"IconArrowRight\"\n\t\t\t\thugeicons=\"ArrowRight02Icon\"\n\t\t\t\tphosphor=\"ArrowRightIcon\"\n\t\t\t\tremixicon=\"RiArrowRightLine\"\n\t\t\t\tdata-icon=\"inline-end\"\n\t\t\t/>\n\t\t</Button>\n\t\t<Button size=\"sm\" variant=\"link\">\n\t\t\tLink\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowRightIcon\"\n\t\t\t\ttabler=\"IconArrowRight\"\n\t\t\t\thugeicons=\"ArrowRight02Icon\"\n\t\t\t\tphosphor=\"ArrowRightIcon\"\n\t\t\t\tremixicon=\"RiArrowRightLine\"\n\t\t\t\tdata-icon=\"inline-end\"\n\t\t\t/>\n\t\t</Button>\n\t</div>\n\t<div class=\"flex flex-wrap items-center gap-2\">\n\t\t<Button>\n\t\t\tDefault\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowRightIcon\"\n\t\t\t\ttabler=\"IconArrowRight\"\n\t\t\t\thugeicons=\"ArrowRight02Icon\"\n\t\t\t\tphosphor=\"ArrowRightIcon\"\n\t\t\t\tremixicon=\"RiArrowRightLine\"\n\t\t\t\tdata-icon=\"inline-end\"\n\t\t\t/>\n\t\t</Button>\n\t\t<Button variant=\"secondary\">\n\t\t\tSecondary\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowRightIcon\"\n\t\t\t\ttabler=\"IconArrowRight\"\n\t\t\t\thugeicons=\"ArrowRight02Icon\"\n\t\t\t\tphosphor=\"ArrowRightIcon\"\n\t\t\t\tremixicon=\"RiArrowRightLine\"\n\t\t\t\tdata-icon=\"inline-end\"\n\t\t\t/>\n\t\t</Button>\n\t\t<Button variant=\"outline\">\n\t\t\tOutline\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowRightIcon\"\n\t\t\t\ttabler=\"IconArrowRight\"\n\t\t\t\thugeicons=\"ArrowRight02Icon\"\n\t\t\t\tphosphor=\"ArrowRightIcon\"\n\t\t\t\tremixicon=\"RiArrowRightLine\"\n\t\t\t\tdata-icon=\"inline-end\"\n\t\t\t/>\n\t\t</Button>\n\t\t<Button variant=\"ghost\">\n\t\t\tGhost\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowRightIcon\"\n\t\t\t\ttabler=\"IconArrowRight\"\n\t\t\t\thugeicons=\"ArrowRight02Icon\"\n\t\t\t\tphosphor=\"ArrowRightIcon\"\n\t\t\t\tremixicon=\"RiArrowRightLine\"\n\t\t\t\tdata-icon=\"inline-end\"\n\t\t\t/>\n\t\t</Button>\n\t\t<Button variant=\"destructive\">\n\t\t\tDestructive\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowRightIcon\"\n\t\t\t\ttabler=\"IconArrowRight\"\n\t\t\t\thugeicons=\"ArrowRight02Icon\"\n\t\t\t\tphosphor=\"ArrowRightIcon\"\n\t\t\t\tremixicon=\"RiArrowRightLine\"\n\t\t\t\tdata-icon=\"inline-end\"\n\t\t\t/>\n\t\t</Button>\n\t\t<Button variant=\"link\">\n\t\t\tLink\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowRightIcon\"\n\t\t\t\ttabler=\"IconArrowRight\"\n\t\t\t\thugeicons=\"ArrowRight02Icon\"\n\t\t\t\tphosphor=\"ArrowRightIcon\"\n\t\t\t\tremixicon=\"RiArrowRightLine\"\n\t\t\t\tdata-icon=\"inline-end\"\n\t\t\t/>\n\t\t</Button>\n\t</div>\n\t<div class=\"flex flex-wrap items-center gap-2\">\n\t\t<Button size=\"lg\">\n\t\t\tDefault\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowRightIcon\"\n\t\t\t\ttabler=\"IconArrowRight\"\n\t\t\t\thugeicons=\"ArrowRight02Icon\"\n\t\t\t\tphosphor=\"ArrowRightIcon\"\n\t\t\t\tremixicon=\"RiArrowRightLine\"\n\t\t\t\tdata-icon=\"inline-end\"\n\t\t\t/>\n\t\t</Button>\n\t\t<Button size=\"lg\" variant=\"secondary\">\n\t\t\tSecondary\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowRightIcon\"\n\t\t\t\ttabler=\"IconArrowRight\"\n\t\t\t\thugeicons=\"ArrowRight02Icon\"\n\t\t\t\tphosphor=\"ArrowRightIcon\"\n\t\t\t\tremixicon=\"RiArrowRightLine\"\n\t\t\t\tdata-icon=\"inline-end\"\n\t\t\t/>\n\t\t</Button>\n\t\t<Button size=\"lg\" variant=\"outline\">\n\t\t\tOutline\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowRightIcon\"\n\t\t\t\ttabler=\"IconArrowRight\"\n\t\t\t\thugeicons=\"ArrowRight02Icon\"\n\t\t\t\tphosphor=\"ArrowRightIcon\"\n\t\t\t\tremixicon=\"RiArrowRightLine\"\n\t\t\t\tdata-icon=\"inline-end\"\n\t\t\t/>\n\t\t</Button>\n\t\t<Button size=\"lg\" variant=\"ghost\">\n\t\t\tGhost\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowRightIcon\"\n\t\t\t\ttabler=\"IconArrowRight\"\n\t\t\t\thugeicons=\"ArrowRight02Icon\"\n\t\t\t\tphosphor=\"ArrowRightIcon\"\n\t\t\t\tremixicon=\"RiArrowRightLine\"\n\t\t\t\tdata-icon=\"inline-end\"\n\t\t\t/>\n\t\t</Button>\n\t\t<Button size=\"lg\" variant=\"destructive\">\n\t\t\tDestructive\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowRightIcon\"\n\t\t\t\ttabler=\"IconArrowRight\"\n\t\t\t\thugeicons=\"ArrowRight02Icon\"\n\t\t\t\tphosphor=\"ArrowRightIcon\"\n\t\t\t\tremixicon=\"RiArrowRightLine\"\n\t\t\t\tdata-icon=\"inline-end\"\n\t\t\t/>\n\t\t</Button>\n\t\t<Button size=\"lg\" variant=\"link\">\n\t\t\tLink\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowRightIcon\"\n\t\t\t\ttabler=\"IconArrowRight\"\n\t\t\t\thugeicons=\"ArrowRight02Icon\"\n\t\t\t\tphosphor=\"ArrowRightIcon\"\n\t\t\t\tremixicon=\"RiArrowRightLine\"\n\t\t\t\tdata-icon=\"inline-end\"\n\t\t\t/>\n\t\t</Button>\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/button/button-invalid-states.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n</script>\n\n<Example title=\"Invalid States\">\n\t<div class=\"flex flex-wrap items-center gap-2\">\n\t\t<Button size=\"xs\" aria-invalid=\"true\">Default</Button>\n\t\t<Button size=\"xs\" variant=\"secondary\" aria-invalid=\"true\">Secondary</Button>\n\t\t<Button size=\"xs\" variant=\"outline\" aria-invalid=\"true\">Outline</Button>\n\t\t<Button size=\"xs\" variant=\"ghost\" aria-invalid=\"true\">Ghost</Button>\n\t\t<Button size=\"xs\" variant=\"destructive\" aria-invalid=\"true\">Destructive</Button>\n\t\t<Button size=\"xs\" variant=\"link\" aria-invalid=\"true\">Link</Button>\n\t</div>\n\t<div class=\"flex flex-wrap items-center gap-2\">\n\t\t<Button size=\"sm\" aria-invalid=\"true\">Default</Button>\n\t\t<Button size=\"sm\" variant=\"secondary\" aria-invalid=\"true\">Secondary</Button>\n\t\t<Button size=\"sm\" variant=\"outline\" aria-invalid=\"true\">Outline</Button>\n\t\t<Button size=\"sm\" variant=\"ghost\" aria-invalid=\"true\">Ghost</Button>\n\t\t<Button size=\"sm\" variant=\"destructive\" aria-invalid=\"true\">Destructive</Button>\n\t\t<Button size=\"sm\" variant=\"link\" aria-invalid=\"true\">Link</Button>\n\t</div>\n\t<div class=\"flex flex-wrap items-center gap-2\">\n\t\t<Button aria-invalid=\"true\">Default</Button>\n\t\t<Button variant=\"secondary\" aria-invalid=\"true\">Secondary</Button>\n\t\t<Button variant=\"outline\" aria-invalid=\"true\">Outline</Button>\n\t\t<Button variant=\"ghost\" aria-invalid=\"true\">Ghost</Button>\n\t\t<Button variant=\"destructive\" aria-invalid=\"true\">Destructive</Button>\n\t\t<Button variant=\"link\" aria-invalid=\"true\">Link</Button>\n\t</div>\n\t<div class=\"flex flex-wrap items-center gap-2\">\n\t\t<Button size=\"lg\" aria-invalid=\"true\">Default</Button>\n\t\t<Button size=\"lg\" variant=\"secondary\" aria-invalid=\"true\">Secondary</Button>\n\t\t<Button size=\"lg\" variant=\"outline\" aria-invalid=\"true\">Outline</Button>\n\t\t<Button size=\"lg\" variant=\"ghost\" aria-invalid=\"true\">Ghost</Button>\n\t\t<Button size=\"lg\" variant=\"destructive\" aria-invalid=\"true\">Destructive</Button>\n\t\t<Button size=\"lg\" variant=\"link\" aria-invalid=\"true\">Link</Button>\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/button/button-variants-and-sizes.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n</script>\n\n<Example title=\"Variants & Sizes\">\n\t<div class=\"flex flex-wrap items-center gap-2\">\n\t\t<Button size=\"xs\">Default</Button>\n\t\t<Button size=\"xs\" variant=\"secondary\">Secondary</Button>\n\t\t<Button size=\"xs\" variant=\"outline\">Outline</Button>\n\t\t<Button size=\"xs\" variant=\"ghost\">Ghost</Button>\n\t\t<Button size=\"xs\" variant=\"destructive\">Destructive</Button>\n\t\t<Button size=\"xs\" variant=\"link\">Link</Button>\n\t</div>\n\t<div class=\"flex flex-wrap items-center gap-2\">\n\t\t<Button size=\"sm\">Default</Button>\n\t\t<Button size=\"sm\" variant=\"secondary\">Secondary</Button>\n\t\t<Button size=\"sm\" variant=\"outline\">Outline</Button>\n\t\t<Button size=\"sm\" variant=\"ghost\">Ghost</Button>\n\t\t<Button size=\"sm\" variant=\"destructive\">Destructive</Button>\n\t\t<Button size=\"sm\" variant=\"link\">Link</Button>\n\t</div>\n\t<div class=\"flex flex-wrap items-center gap-2\">\n\t\t<Button>Default</Button>\n\t\t<Button variant=\"secondary\">Secondary</Button>\n\t\t<Button variant=\"outline\">Outline</Button>\n\t\t<Button variant=\"ghost\">Ghost</Button>\n\t\t<Button variant=\"destructive\">Destructive</Button>\n\t\t<Button variant=\"link\">Link</Button>\n\t</div>\n\t<div class=\"flex flex-wrap items-center gap-2\">\n\t\t<Button size=\"lg\">Default</Button>\n\t\t<Button size=\"lg\" variant=\"secondary\">Secondary</Button>\n\t\t<Button size=\"lg\" variant=\"outline\">Outline</Button>\n\t\t<Button size=\"lg\" variant=\"ghost\">Ghost</Button>\n\t\t<Button size=\"lg\" variant=\"destructive\">Destructive</Button>\n\t\t<Button size=\"lg\" variant=\"link\">Link</Button>\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/button/button.svelte",
    "content": "<script lang=\"ts\">\n\timport ExampleWrapper from \"../../../../../routes/(app)/(layout)/(create)/components/example-wrapper.svelte\";\n\timport ButtonVariantsAndSizes from \"./button-variants-and-sizes.svelte\";\n\timport ButtonIconRight from \"./button-icon-right.svelte\";\n\timport ButtonIconLeft from \"./button-icon-left.svelte\";\n\timport ButtonIconOnly from \"./button-icon-only.svelte\";\n\timport ButtonInvalidStates from \"./button-invalid-states.svelte\";\n\timport ButtonExamples from \"./button-examples.svelte\";\n</script>\n\n<ExampleWrapper class=\"lg:grid-cols-1 2xl:grid-cols-1\">\n\t<ButtonVariantsAndSizes />\n\t<ButtonIconRight />\n\t<ButtonIconLeft />\n\t<ButtonIconOnly />\n\t<ButtonInvalidStates />\n\t<ButtonExamples />\n</ExampleWrapper>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/button-group/button-group-basic.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { ButtonGroup } from \"$lib/registry/ui/button-group/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n</script>\n\n<Example title=\"Basic\">\n\t<div class=\"flex flex-col gap-4\">\n\t\t<ButtonGroup>\n\t\t\t<Button variant=\"outline\">Button</Button>\n\t\t\t<Button variant=\"outline\">Another Button</Button>\n\t\t</ButtonGroup>\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/button-group/button-group-navigation.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { ButtonGroup } from \"$lib/registry/ui/button-group/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Example title=\"Navigation\">\n\t<ButtonGroup>\n\t\t<ButtonGroup>\n\t\t\t<Button variant=\"outline\">\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"ArrowLeftIcon\"\n\t\t\t\t\ttabler=\"IconArrowLeft\"\n\t\t\t\t\thugeicons=\"ArrowLeft01Icon\"\n\t\t\t\t\tphosphor=\"ArrowLeftIcon\"\n\t\t\t\t\tremixicon=\"RiArrowLeftLine\"\n\t\t\t\t/>\n\t\t\t</Button>\n\t\t\t<Button variant=\"outline\">\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"ArrowRightIcon\"\n\t\t\t\t\ttabler=\"IconArrowRight\"\n\t\t\t\t\thugeicons=\"ArrowRight01Icon\"\n\t\t\t\t\tphosphor=\"ArrowRightIcon\"\n\t\t\t\t\tremixicon=\"RiArrowRightLine\"\n\t\t\t\t/>\n\t\t\t</Button>\n\t\t</ButtonGroup>\n\t\t<ButtonGroup aria-label=\"Single navigation button\">\n\t\t\t<Button variant=\"outline\" size=\"icon\">\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"ArrowLeftIcon\"\n\t\t\t\t\ttabler=\"IconArrowLeft\"\n\t\t\t\t\thugeicons=\"ArrowLeft01Icon\"\n\t\t\t\t\tphosphor=\"ArrowLeftIcon\"\n\t\t\t\t\tremixicon=\"RiArrowLeftLine\"\n\t\t\t\t/>\n\t\t\t</Button>\n\t\t</ButtonGroup>\n\t</ButtonGroup>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/button-group/button-group-nested.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { ButtonGroup } from \"$lib/registry/ui/button-group/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as InputGroup from \"$lib/registry/ui/input-group/index.js\";\n\timport * as Tooltip from \"$lib/registry/ui/tooltip/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Example title=\"Nested\">\n\t<ButtonGroup>\n\t\t<ButtonGroup>\n\t\t\t<Button variant=\"outline\" size=\"icon\">\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"PlusIcon\"\n\t\t\t\t\ttabler=\"IconPlus\"\n\t\t\t\t\thugeicons=\"PlusSignIcon\"\n\t\t\t\t\tphosphor=\"PlusIcon\"\n\t\t\t\t\tremixicon=\"RiAddLine\"\n\t\t\t\t/>\n\t\t\t</Button>\n\t\t</ButtonGroup>\n\t\t<ButtonGroup>\n\t\t\t<InputGroup.Root>\n\t\t\t\t<InputGroup.Input placeholder=\"Send a message...\" />\n\t\t\t\t<Tooltip.Root>\n\t\t\t\t\t<Tooltip.Trigger>\n\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t<InputGroup.Addon align=\"inline-end\" {...props}>\n\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\tlucide=\"AudioLinesIcon\"\n\t\t\t\t\t\t\t\t\ttabler=\"IconHeadphones\"\n\t\t\t\t\t\t\t\t\thugeicons=\"AudioWave01Icon\"\n\t\t\t\t\t\t\t\t\tphosphor=\"MicrophoneIcon\"\n\t\t\t\t\t\t\t\t\tremixicon=\"RiMicLine\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</InputGroup.Addon>\n\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t</Tooltip.Trigger>\n\t\t\t\t\t<Tooltip.Content>Voice Mode</Tooltip.Content>\n\t\t\t\t</Tooltip.Root>\n\t\t\t</InputGroup.Root>\n\t\t</ButtonGroup>\n\t</ButtonGroup>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/button-group/button-group-pagination-split.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { ButtonGroup } from \"$lib/registry/ui/button-group/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Example title=\"Pagination Split\">\n\t<ButtonGroup>\n\t\t<ButtonGroup>\n\t\t\t<Button variant=\"outline\" size=\"sm\">1</Button>\n\t\t\t<Button variant=\"outline\" size=\"sm\">2</Button>\n\t\t\t<Button variant=\"outline\" size=\"sm\">3</Button>\n\t\t\t<Button variant=\"outline\" size=\"sm\">4</Button>\n\t\t\t<Button variant=\"outline\" size=\"sm\">5</Button>\n\t\t</ButtonGroup>\n\t\t<ButtonGroup>\n\t\t\t<Button variant=\"outline\" size=\"icon-xs\">\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"ArrowLeftIcon\"\n\t\t\t\t\ttabler=\"IconArrowLeft\"\n\t\t\t\t\thugeicons=\"ArrowLeft01Icon\"\n\t\t\t\t\tphosphor=\"ArrowLeftIcon\"\n\t\t\t\t\tremixicon=\"RiArrowLeftLine\"\n\t\t\t\t/>\n\t\t\t</Button>\n\t\t\t<Button variant=\"outline\" size=\"icon-xs\">\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"ArrowRightIcon\"\n\t\t\t\t\ttabler=\"IconArrowRight\"\n\t\t\t\t\thugeicons=\"ArrowRight01Icon\"\n\t\t\t\t\tphosphor=\"ArrowRightIcon\"\n\t\t\t\t\tremixicon=\"RiArrowRightLine\"\n\t\t\t\t/>\n\t\t\t</Button>\n\t\t</ButtonGroup>\n\t</ButtonGroup>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/button-group/button-group-pagination.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { ButtonGroup } from \"$lib/registry/ui/button-group/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Example title=\"Pagination\">\n\t<ButtonGroup>\n\t\t<Button variant=\"outline\" size=\"sm\">\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowLeftIcon\"\n\t\t\t\ttabler=\"IconArrowLeft\"\n\t\t\t\thugeicons=\"ArrowLeft02Icon\"\n\t\t\t\tphosphor=\"ArrowLeftIcon\"\n\t\t\t\tremixicon=\"RiArrowLeftLine\"\n\t\t\t\tdata-icon=\"inline-start\"\n\t\t\t/>\n\t\t\tPrevious\n\t\t</Button>\n\t\t<Button variant=\"outline\" size=\"sm\">1</Button>\n\t\t<Button variant=\"outline\" size=\"sm\">2</Button>\n\t\t<Button variant=\"outline\" size=\"sm\">3</Button>\n\t\t<Button variant=\"outline\" size=\"sm\">4</Button>\n\t\t<Button variant=\"outline\" size=\"sm\">5</Button>\n\t\t<Button variant=\"outline\" size=\"sm\">\n\t\t\tNext\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowRightIcon\"\n\t\t\t\ttabler=\"IconArrowRight\"\n\t\t\t\thugeicons=\"ArrowRight02Icon\"\n\t\t\t\tphosphor=\"ArrowRightIcon\"\n\t\t\t\tremixicon=\"RiArrowRightLine\"\n\t\t\t\tdata-icon=\"inline-end\"\n\t\t\t/>\n\t\t</Button>\n\t</ButtonGroup>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/button-group/button-group-text-alignment.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { ButtonGroup } from \"$lib/registry/ui/button-group/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport { Label } from \"$lib/registry/ui/label/index.js\";\n</script>\n\n<Example title=\"Text Alignment\">\n\t<Field.Field>\n\t\t<Label id=\"alignment-label\">Text Alignment</Label>\n\t\t<ButtonGroup aria-labelledby=\"alignment-label\">\n\t\t\t<Button variant=\"outline\" size=\"sm\">Left</Button>\n\t\t\t<Button variant=\"outline\" size=\"sm\">Center</Button>\n\t\t\t<Button variant=\"outline\" size=\"sm\">Right</Button>\n\t\t\t<Button variant=\"outline\" size=\"sm\">Justify</Button>\n\t\t</ButtonGroup>\n\t</Field.Field>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/button-group/button-group-vertical-nested.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { ButtonGroup } from \"$lib/registry/ui/button-group/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Example title=\"Vertical Nested\">\n\t<ButtonGroup orientation=\"vertical\" aria-label=\"Design tools palette\">\n\t\t<ButtonGroup orientation=\"vertical\">\n\t\t\t<Button variant=\"outline\" size=\"icon\">\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"SearchIcon\"\n\t\t\t\t\ttabler=\"IconSearch\"\n\t\t\t\t\thugeicons=\"Search01Icon\"\n\t\t\t\t\tphosphor=\"MagnifyingGlassIcon\"\n\t\t\t\t\tremixicon=\"RiSearchLine\"\n\t\t\t\t/>\n\t\t\t</Button>\n\t\t\t<Button variant=\"outline\" size=\"icon\">\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"CopyIcon\"\n\t\t\t\t\ttabler=\"IconCopy\"\n\t\t\t\t\thugeicons=\"Copy01Icon\"\n\t\t\t\t\tphosphor=\"CopyIcon\"\n\t\t\t\t\tremixicon=\"RiFileCopyLine\"\n\t\t\t\t/>\n\t\t\t</Button>\n\t\t\t<Button variant=\"outline\" size=\"icon\">\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"ShareIcon\"\n\t\t\t\t\ttabler=\"IconShare\"\n\t\t\t\t\thugeicons=\"Share03Icon\"\n\t\t\t\t\tphosphor=\"ShareIcon\"\n\t\t\t\t\tremixicon=\"RiShareLine\"\n\t\t\t\t/>\n\t\t\t</Button>\n\t\t</ButtonGroup>\n\t\t<ButtonGroup orientation=\"vertical\">\n\t\t\t<Button variant=\"outline\" size=\"icon\">\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"FlipHorizontalIcon\"\n\t\t\t\t\ttabler=\"IconFlipHorizontal\"\n\t\t\t\t\thugeicons=\"FlipHorizontalIcon\"\n\t\t\t\t\tphosphor=\"ArrowsHorizontalIcon\"\n\t\t\t\t\tremixicon=\"RiFlipHorizontalLine\"\n\t\t\t\t/>\n\t\t\t</Button>\n\t\t\t<Button variant=\"outline\" size=\"icon\">\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"FlipVerticalIcon\"\n\t\t\t\t\ttabler=\"IconFlipVertical\"\n\t\t\t\t\thugeicons=\"FlipVerticalIcon\"\n\t\t\t\t\tphosphor=\"ArrowsVerticalIcon\"\n\t\t\t\t\tremixicon=\"RiFlipVerticalLine\"\n\t\t\t\t/>\n\t\t\t</Button>\n\t\t\t<Button variant=\"outline\" size=\"icon\">\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"RotateCwIcon\"\n\t\t\t\t\ttabler=\"IconRotateClockwise2\"\n\t\t\t\t\thugeicons=\"Rotate01Icon\"\n\t\t\t\t\tphosphor=\"ArrowClockwiseIcon\"\n\t\t\t\t\tremixicon=\"RiRefreshLine\"\n\t\t\t\t/>\n\t\t\t</Button>\n\t\t</ButtonGroup>\n\t\t<ButtonGroup>\n\t\t\t<Button variant=\"outline\" size=\"icon\">\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"TrashIcon\"\n\t\t\t\t\ttabler=\"IconTrash\"\n\t\t\t\t\thugeicons=\"Delete02Icon\"\n\t\t\t\t\tphosphor=\"TrashIcon\"\n\t\t\t\t\tremixicon=\"RiDeleteBinLine\"\n\t\t\t\t/>\n\t\t\t</Button>\n\t\t</ButtonGroup>\n\t</ButtonGroup>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/button-group/button-group-vertical.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { ButtonGroup } from \"$lib/registry/ui/button-group/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Example title=\"Vertical\">\n\t<div class=\"flex gap-6\">\n\t\t<ButtonGroup orientation=\"vertical\" aria-label=\"Media controls\" class=\"h-fit\">\n\t\t\t<Button variant=\"outline\" size=\"icon\">\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"PlusIcon\"\n\t\t\t\t\ttabler=\"IconPlus\"\n\t\t\t\t\thugeicons=\"PlusSignIcon\"\n\t\t\t\t\tphosphor=\"PlusIcon\"\n\t\t\t\t\tremixicon=\"RiAddLine\"\n\t\t\t\t/>\n\t\t\t</Button>\n\t\t\t<Button variant=\"outline\" size=\"icon\">\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"MinusIcon\"\n\t\t\t\t\ttabler=\"IconMinus\"\n\t\t\t\t\thugeicons=\"MinusSignIcon\"\n\t\t\t\t\tphosphor=\"MinusIcon\"\n\t\t\t\t\tremixicon=\"RiSubtractLine\"\n\t\t\t\t/>\n\t\t\t</Button>\n\t\t</ButtonGroup>\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/button-group/button-group-with-dropdown.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { ButtonGroup } from \"$lib/registry/ui/button-group/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Example title=\"With Dropdown\">\n\t<div class=\"flex flex-col gap-4\">\n\t\t<ButtonGroup>\n\t\t\t<Button variant=\"outline\">Update</Button>\n\t\t\t<DropdownMenu.Root>\n\t\t\t\t<DropdownMenu.Trigger>\n\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t<Button variant=\"outline\" size=\"icon\" {...props}>\n\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\tlucide=\"ChevronDownIcon\"\n\t\t\t\t\t\t\t\ttabler=\"IconChevronDown\"\n\t\t\t\t\t\t\t\thugeicons=\"ArrowDown01Icon\"\n\t\t\t\t\t\t\t\tphosphor=\"CaretDownIcon\"\n\t\t\t\t\t\t\t\tremixicon=\"RiArrowDownSLine\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t{/snippet}\n\t\t\t\t</DropdownMenu.Trigger>\n\t\t\t\t<DropdownMenu.Content align=\"end\">\n\t\t\t\t\t<DropdownMenu.Item>Disable</DropdownMenu.Item>\n\t\t\t\t\t<DropdownMenu.Item variant=\"destructive\">Uninstall</DropdownMenu.Item>\n\t\t\t\t</DropdownMenu.Content>\n\t\t\t</DropdownMenu.Root>\n\t\t</ButtonGroup>\n\t\t<ButtonGroup>\n\t\t\t<Button variant=\"outline\">Follow</Button>\n\t\t\t<DropdownMenu.Root>\n\t\t\t\t<DropdownMenu.Trigger>\n\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t<Button variant=\"outline\" size=\"icon\" {...props}>\n\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\tlucide=\"ChevronDownIcon\"\n\t\t\t\t\t\t\t\ttabler=\"IconChevronDown\"\n\t\t\t\t\t\t\t\thugeicons=\"ArrowDown01Icon\"\n\t\t\t\t\t\t\t\tphosphor=\"CaretDownIcon\"\n\t\t\t\t\t\t\t\tremixicon=\"RiArrowDownSLine\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t{/snippet}\n\t\t\t\t</DropdownMenu.Trigger>\n\t\t\t\t<DropdownMenu.Content align=\"end\" class=\"w-50\">\n\t\t\t\t\t<DropdownMenu.Group>\n\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\tlucide=\"VolumeX\"\n\t\t\t\t\t\t\t\ttabler=\"IconVolume\"\n\t\t\t\t\t\t\t\thugeicons=\"VolumeOffIcon\"\n\t\t\t\t\t\t\t\tphosphor=\"SpeakerSlashIcon\"\n\t\t\t\t\t\t\t\tremixicon=\"RiVolumeMuteLine\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\tMute Conversation\n\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\tlucide=\"CheckIcon\"\n\t\t\t\t\t\t\t\ttabler=\"IconCheck\"\n\t\t\t\t\t\t\t\thugeicons=\"Tick02Icon\"\n\t\t\t\t\t\t\t\tphosphor=\"CheckIcon\"\n\t\t\t\t\t\t\t\tremixicon=\"RiCheckLine\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\tMark as Read\n\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\tlucide=\"AlertTriangleIcon\"\n\t\t\t\t\t\t\t\ttabler=\"IconAlertTriangle\"\n\t\t\t\t\t\t\t\thugeicons=\"AlertCircleIcon\"\n\t\t\t\t\t\t\t\tphosphor=\"WarningIcon\"\n\t\t\t\t\t\t\t\tremixicon=\"RiErrorWarningLine\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\tReport Conversation\n\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\tlucide=\"UserRoundXIcon\"\n\t\t\t\t\t\t\t\ttabler=\"IconUserX\"\n\t\t\t\t\t\t\t\thugeicons=\"UserRemove01Icon\"\n\t\t\t\t\t\t\t\tphosphor=\"UserMinusIcon\"\n\t\t\t\t\t\t\t\tremixicon=\"RiUserUnfollowLine\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\tBlock User\n\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\tlucide=\"ShareIcon\"\n\t\t\t\t\t\t\t\ttabler=\"IconShare\"\n\t\t\t\t\t\t\t\thugeicons=\"Share03Icon\"\n\t\t\t\t\t\t\t\tphosphor=\"ShareIcon\"\n\t\t\t\t\t\t\t\tremixicon=\"RiShareLine\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\tShare Conversation\n\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\tlucide=\"CopyIcon\"\n\t\t\t\t\t\t\t\ttabler=\"IconCopy\"\n\t\t\t\t\t\t\t\thugeicons=\"Copy01Icon\"\n\t\t\t\t\t\t\t\tphosphor=\"CopyIcon\"\n\t\t\t\t\t\t\t\tremixicon=\"RiFileCopyLine\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\tCopy Conversation\n\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t</DropdownMenu.Group>\n\t\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t\t<DropdownMenu.Group>\n\t\t\t\t\t\t<DropdownMenu.Item variant=\"destructive\">\n\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\tlucide=\"TrashIcon\"\n\t\t\t\t\t\t\t\ttabler=\"IconTrash\"\n\t\t\t\t\t\t\t\thugeicons=\"Delete02Icon\"\n\t\t\t\t\t\t\t\tphosphor=\"TrashIcon\"\n\t\t\t\t\t\t\t\tremixicon=\"RiDeleteBinLine\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\tDelete Conversation\n\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t</DropdownMenu.Group>\n\t\t\t\t</DropdownMenu.Content>\n\t\t\t</DropdownMenu.Root>\n\t\t</ButtonGroup>\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/button-group/button-group-with-fields.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { ButtonGroup } from \"$lib/registry/ui/button-group/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport * as InputGroup from \"$lib/registry/ui/input-group/index.js\";\n\timport { Label } from \"$lib/registry/ui/label/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Example title=\"With Fields\">\n\t<Field.Group class=\"grid grid-cols-3 gap-4\">\n\t\t<Field.Field class=\"col-span-2\">\n\t\t\t<Label for=\"width\">Width</Label>\n\t\t\t<ButtonGroup>\n\t\t\t\t<InputGroup.Root>\n\t\t\t\t\t<InputGroup.Input id=\"width\" />\n\t\t\t\t\t<InputGroup.Addon class=\"text-muted-foreground\">W</InputGroup.Addon>\n\t\t\t\t\t<InputGroup.Addon align=\"inline-end\" class=\"text-muted-foreground\">\n\t\t\t\t\t\tpx\n\t\t\t\t\t</InputGroup.Addon>\n\t\t\t\t</InputGroup.Root>\n\t\t\t\t<Button variant=\"outline\" size=\"icon\">\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"MinusIcon\"\n\t\t\t\t\t\ttabler=\"IconMinus\"\n\t\t\t\t\t\thugeicons=\"MinusSignIcon\"\n\t\t\t\t\t\tphosphor=\"MinusIcon\"\n\t\t\t\t\t\tremixicon=\"RiSubtractLine\"\n\t\t\t\t\t/>\n\t\t\t\t</Button>\n\t\t\t\t<Button variant=\"outline\" size=\"icon\">\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"PlusIcon\"\n\t\t\t\t\t\ttabler=\"IconPlus\"\n\t\t\t\t\t\thugeicons=\"PlusSignIcon\"\n\t\t\t\t\t\tphosphor=\"PlusIcon\"\n\t\t\t\t\t\tremixicon=\"RiAddLine\"\n\t\t\t\t\t/>\n\t\t\t\t</Button>\n\t\t\t</ButtonGroup>\n\t\t</Field.Field>\n\t</Field.Group>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/button-group/button-group-with-icons.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { ButtonGroup } from \"$lib/registry/ui/button-group/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Example title=\"With Icons\">\n\t<div class=\"flex flex-col gap-4\">\n\t\t<ButtonGroup>\n\t\t\t<Button variant=\"outline\">\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"FlipHorizontalIcon\"\n\t\t\t\t\ttabler=\"IconFlipHorizontal\"\n\t\t\t\t\thugeicons=\"FlipHorizontalIcon\"\n\t\t\t\t\tphosphor=\"ArrowsHorizontalIcon\"\n\t\t\t\t\tremixicon=\"RiFlipHorizontalLine\"\n\t\t\t\t/>\n\t\t\t</Button>\n\t\t\t<Button variant=\"outline\">\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"FlipVerticalIcon\"\n\t\t\t\t\ttabler=\"IconFlipVertical\"\n\t\t\t\t\thugeicons=\"FlipVerticalIcon\"\n\t\t\t\t\tphosphor=\"ArrowsVerticalIcon\"\n\t\t\t\t\tremixicon=\"RiFlipVerticalLine\"\n\t\t\t\t/>\n\t\t\t</Button>\n\t\t\t<Button variant=\"outline\">\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"RotateCwIcon\"\n\t\t\t\t\ttabler=\"IconRotateClockwise2\"\n\t\t\t\t\thugeicons=\"Rotate01Icon\"\n\t\t\t\t\tphosphor=\"ArrowClockwiseIcon\"\n\t\t\t\t\tremixicon=\"RiRefreshLine\"\n\t\t\t\t/>\n\t\t\t</Button>\n\t\t</ButtonGroup>\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/button-group/button-group-with-input-group.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as InputGroup from \"$lib/registry/ui/input-group/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Example title=\"With Input Group\">\n\t<div class=\"flex flex-col gap-4\">\n\t\t<InputGroup.Root>\n\t\t\t<InputGroup.Input placeholder=\"Type to search...\" />\n\t\t\t<InputGroup.Addon align=\"inline-start\" class=\"text-muted-foreground\">\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"SearchIcon\"\n\t\t\t\t\ttabler=\"IconSearch\"\n\t\t\t\t\thugeicons=\"Search01Icon\"\n\t\t\t\t\tphosphor=\"MagnifyingGlassIcon\"\n\t\t\t\t\tremixicon=\"RiSearchLine\"\n\t\t\t\t/>\n\t\t\t</InputGroup.Addon>\n\t\t</InputGroup.Root>\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/button-group/button-group-with-input.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { ButtonGroup } from \"$lib/registry/ui/button-group/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport { Input } from \"$lib/registry/ui/input/index.js\";\n</script>\n\n<Example title=\"With Input\">\n\t<div class=\"flex flex-col gap-4\">\n\t\t<ButtonGroup>\n\t\t\t<Button variant=\"outline\">Button</Button>\n\t\t\t<Input placeholder=\"Type something here...\" />\n\t\t</ButtonGroup>\n\t\t<ButtonGroup>\n\t\t\t<Input placeholder=\"Type something here...\" />\n\t\t\t<Button variant=\"outline\">Button</Button>\n\t\t</ButtonGroup>\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/button-group/button-group-with-like.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { ButtonGroup } from \"$lib/registry/ui/button-group/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Example title=\"With Like\">\n\t<ButtonGroup>\n\t\t<Button variant=\"outline\">\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"HeartIcon\"\n\t\t\t\ttabler=\"IconBell\"\n\t\t\t\thugeicons=\"Notification02Icon\"\n\t\t\t\tphosphor=\"HeartIcon\"\n\t\t\t\tremixicon=\"RiHeartLine\"\n\t\t\t\tdata-icon=\"inline-start\"\n\t\t\t/>\n\t\t\tLike\n\t\t</Button>\n\t\t<Button variant=\"outline\" size=\"icon\" class=\"w-12\">1.2K</Button>\n\t</ButtonGroup>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/button-group/button-group-with-select-and-input.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { ButtonGroup } from \"$lib/registry/ui/button-group/index.js\";\n\timport * as Select from \"$lib/registry/ui/select/index.js\";\n\timport { Input } from \"$lib/registry/ui/input/index.js\";\n\n\tconst durationItems = [\n\t\t{ label: \"Hours\", value: \"hours\" },\n\t\t{ label: \"Days\", value: \"days\" },\n\t\t{ label: \"Weeks\", value: \"weeks\" },\n\t];\n\n\tlet duration = $state(durationItems[0].value);\n\tconst durationLabel = $derived(\n\t\tdurationItems.find((item) => item.value === duration)?.label ?? \"Hours\"\n\t);\n</script>\n\n<Example title=\"With Select and Input\">\n\t<ButtonGroup>\n\t\t<Select.Root type=\"single\" bind:value={duration}>\n\t\t\t<Select.Trigger id=\"duration\">\n\t\t\t\t{durationLabel}\n\t\t\t</Select.Trigger>\n\t\t\t<Select.Content align=\"start\">\n\t\t\t\t<Select.Group>\n\t\t\t\t\t{#each durationItems as item (item.value)}\n\t\t\t\t\t\t<Select.Item value={item.value} label={item.label}>\n\t\t\t\t\t\t\t{item.label}\n\t\t\t\t\t\t</Select.Item>\n\t\t\t\t\t{/each}\n\t\t\t\t</Select.Group>\n\t\t\t</Select.Content>\n\t\t</Select.Root>\n\t\t<Input />\n\t</ButtonGroup>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/button-group/button-group-with-select.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { ButtonGroup } from \"$lib/registry/ui/button-group/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport * as Select from \"$lib/registry/ui/select/index.js\";\n\timport { Input } from \"$lib/registry/ui/input/index.js\";\n\timport { Label } from \"$lib/registry/ui/label/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\n\tconst currencyItems = [\n\t\t{ label: \"$\", value: \"$\" },\n\t\t{ label: \"€\", value: \"€\" },\n\t\t{ label: \"£\", value: \"£\" },\n\t];\n\n\tlet currency = $state(currencyItems[0].value);\n\tconst currencyLabel = $derived(\n\t\tcurrencyItems.find((item) => item.value === currency)?.label ?? \"$\"\n\t);\n</script>\n\n<Example title=\"With Select\">\n\t<Field.Field>\n\t\t<Label for=\"amount\">Amount</Label>\n\t\t<ButtonGroup>\n\t\t\t<Select.Root type=\"single\" bind:value={currency}>\n\t\t\t\t<Select.Trigger>\n\t\t\t\t\t{currencyLabel}\n\t\t\t\t</Select.Trigger>\n\t\t\t\t<Select.Content>\n\t\t\t\t\t<Select.Group>\n\t\t\t\t\t\t{#each currencyItems as item (item.value)}\n\t\t\t\t\t\t\t<Select.Item value={item.value} label={item.label}>\n\t\t\t\t\t\t\t\t{item.label}\n\t\t\t\t\t\t\t</Select.Item>\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</Select.Group>\n\t\t\t\t</Select.Content>\n\t\t\t</Select.Root>\n\t\t\t<Input placeholder=\"Enter amount to send\" />\n\t\t\t<Button variant=\"outline\">\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"ArrowRightIcon\"\n\t\t\t\t\ttabler=\"IconArrowRight\"\n\t\t\t\t\thugeicons=\"ArrowRight01Icon\"\n\t\t\t\t\tphosphor=\"ArrowRightIcon\"\n\t\t\t\t\tremixicon=\"RiArrowRightLine\"\n\t\t\t\t/>\n\t\t\t</Button>\n\t\t</ButtonGroup>\n\t</Field.Field>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/button-group/button-group-with-text.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { ButtonGroup, ButtonGroupText } from \"$lib/registry/ui/button-group/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport { Input } from \"$lib/registry/ui/input/index.js\";\n\timport { Label } from \"$lib/registry/ui/label/index.js\";\n</script>\n\n<Example title=\"With Text\">\n\t<div class=\"flex flex-col gap-4\">\n\t\t<ButtonGroup>\n\t\t\t<ButtonGroupText>Text</ButtonGroupText>\n\t\t\t<Button variant=\"outline\">Another Button</Button>\n\t\t</ButtonGroup>\n\t\t<ButtonGroup>\n\t\t\t<ButtonGroupText>\n\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t<Label for=\"input-text\" {...props}>GPU Size</Label>\n\t\t\t\t{/snippet}\n\t\t\t</ButtonGroupText>\n\t\t\t<Input id=\"input-text\" placeholder=\"Type something here...\" />\n\t\t</ButtonGroup>\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/button-group/button-group.svelte",
    "content": "<script lang=\"ts\">\n\timport ExampleWrapper from \"../../../../../routes/(app)/(layout)/(create)/components/example-wrapper.svelte\";\n\timport ButtonGroupBasic from \"./button-group-basic.svelte\";\n\timport ButtonGroupWithInput from \"./button-group-with-input.svelte\";\n\timport ButtonGroupWithText from \"./button-group-with-text.svelte\";\n\timport ButtonGroupWithDropdown from \"./button-group-with-dropdown.svelte\";\n\timport ButtonGroupWithSelect from \"./button-group-with-select.svelte\";\n\timport ButtonGroupWithIcons from \"./button-group-with-icons.svelte\";\n\timport ButtonGroupWithInputGroup from \"./button-group-with-input-group.svelte\";\n\timport ButtonGroupWithFields from \"./button-group-with-fields.svelte\";\n\timport ButtonGroupWithLike from \"./button-group-with-like.svelte\";\n\timport ButtonGroupWithSelectAndInput from \"./button-group-with-select-and-input.svelte\";\n\timport ButtonGroupNested from \"./button-group-nested.svelte\";\n\timport ButtonGroupPagination from \"./button-group-pagination.svelte\";\n\timport ButtonGroupPaginationSplit from \"./button-group-pagination-split.svelte\";\n\timport ButtonGroupNavigation from \"./button-group-navigation.svelte\";\n\timport ButtonGroupTextAlignment from \"./button-group-text-alignment.svelte\";\n\timport ButtonGroupVertical from \"./button-group-vertical.svelte\";\n\timport ButtonGroupVerticalNested from \"./button-group-vertical-nested.svelte\";\n</script>\n\n<ExampleWrapper>\n\t<ButtonGroupBasic />\n\t<ButtonGroupWithInput />\n\t<ButtonGroupWithText />\n\t<ButtonGroupWithDropdown />\n\t<ButtonGroupWithSelect />\n\t<ButtonGroupWithIcons />\n\t<ButtonGroupWithInputGroup />\n\t<ButtonGroupWithFields />\n\t<ButtonGroupWithLike />\n\t<ButtonGroupWithSelectAndInput />\n\t<ButtonGroupNested />\n\t<ButtonGroupPagination />\n\t<ButtonGroupPaginationSplit />\n\t<ButtonGroupNavigation />\n\t<ButtonGroupTextAlignment />\n\t<ButtonGroupVertical />\n\t<ButtonGroupVerticalNested />\n</ExampleWrapper>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/calendar/calendar-booked-dates.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Calendar } from \"$lib/registry/ui/calendar/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport { CalendarDate, getLocalTimeZone, today } from \"@internationalized/date\";\n\n\tconst currentDate = today(getLocalTimeZone());\n\tconst bookedDates = Array.from(\n\t\t{ length: 15 },\n\t\t(_, i) => new CalendarDate(currentDate.year, currentDate.month, 12 + i)\n\t);\n</script>\n\n<Example title=\"Booked Dates\">\n\t<Card.Root class=\"mx-auto w-fit p-0\">\n\t\t<Card.Content class=\"p-0\">\n\t\t\t<Calendar\n\t\t\t\ttype=\"single\"\n\t\t\t\tisDateUnavailable={(d) => bookedDates.some((bd) => bd.compare(d) === 0)}\n\t\t\t/>\n\t\t</Card.Content>\n\t</Card.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/calendar/calendar-custom-days.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport { RangeCalendar } from \"$lib/registry/ui/range-calendar/index.js\";\n\timport type { DateRange } from \"bits-ui\";\n\timport { CalendarDate, getLocalTimeZone } from \"@internationalized/date\";\n\timport CalendarDayButton from \"$lib/registry/ui/range-calendar/range-calendar-day.svelte\";\n\n\tconst currentDate = new CalendarDate(2022, 1, 20);\n\tlet date = $state<DateRange | undefined>({\n\t\tstart: currentDate,\n\t\tend: currentDate.add({ days: 20 }),\n\t});\n</script>\n\n<Example title=\"Custom Days\">\n\t<Card.Root class=\"mx-auto w-fit p-0\">\n\t\t<Card.Content class=\"p-0\">\n\t\t\t<RangeCalendar\n\t\t\t\tbind:value={date}\n\t\t\t\tnumberOfMonths={1}\n\t\t\t\tcaptionLayout=\"dropdown\"\n\t\t\t\tclass=\"[--cell-size:--spacing(10)] md:[--cell-size:--spacing(12)]\"\n\t\t\t>\n\t\t\t\t{#snippet day({ day, outsideMonth })}\n\t\t\t\t\t{@const isWeekend =\n\t\t\t\t\t\tday.toDate(getLocalTimeZone()).getDay() === 0 ||\n\t\t\t\t\t\tday.toDate(getLocalTimeZone()).getDay() === 6}\n\t\t\t\t\t<CalendarDayButton>\n\t\t\t\t\t\t{day.day}\n\t\t\t\t\t\t{#if !outsideMonth}\n\t\t\t\t\t\t\t<span>{isWeekend ? \"$120\" : \"$100\"}</span>\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t</CalendarDayButton>\n\t\t\t\t{/snippet}\n\t\t\t</RangeCalendar>\n\t\t</Card.Content>\n\t</Card.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/calendar/calendar-in-card.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Calendar } from \"$lib/registry/ui/calendar/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n</script>\n\n<Example title=\"In Card\">\n\t<Card.Root class=\"mx-auto w-fit p-0\">\n\t\t<Card.Content class=\"p-0\">\n\t\t\t<Calendar type=\"single\" />\n\t\t</Card.Content>\n\t</Card.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/calendar/calendar-in-popover.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Calendar } from \"$lib/registry/ui/calendar/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Popover from \"$lib/registry/ui/popover/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Example title=\"In Popover\">\n\t<Popover.Root>\n\t\t<Popover.Trigger>\n\t\t\t{#snippet child({ props })}\n\t\t\t\t<Button {...props} variant=\"outline\" class=\"px-2.5 font-normal\">\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"CalendarIcon\"\n\t\t\t\t\t\ttabler=\"IconCalendar\"\n\t\t\t\t\t\thugeicons=\"CalendarIcon\"\n\t\t\t\t\t\tphosphor=\"CalendarBlankIcon\"\n\t\t\t\t\t\tremixicon=\"RiCalendarLine\"\n\t\t\t\t\t\tdata-icon=\"inline-start\"\n\t\t\t\t\t/>\n\t\t\t\t\tOpen Calendar\n\t\t\t\t</Button>\n\t\t\t{/snippet}\n\t\t</Popover.Trigger>\n\t\t<Popover.Content class=\"w-auto p-0\" align=\"start\">\n\t\t\t<Calendar type=\"single\" />\n\t\t</Popover.Content>\n\t</Popover.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/calendar/calendar-multiple.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Calendar } from \"$lib/registry/ui/calendar/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n</script>\n\n<Example title=\"Multiple\">\n\t<Card.Root class=\"mx-auto w-fit p-0\">\n\t\t<Card.Content class=\"p-0\">\n\t\t\t<Calendar type=\"multiple\" />\n\t\t</Card.Content>\n\t</Card.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/calendar/calendar-range-multiple-months.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport { RangeCalendar } from \"$lib/registry/ui/range-calendar/index.js\";\n</script>\n\n<Example\n\ttitle=\"Range Multiple Months\"\n\tcontainerClass=\"lg:col-span-full 2xl:col-span-full\"\n\tclass=\"p-12\"\n>\n\t<Card.Root class=\"mx-auto w-fit p-0\">\n\t\t<Card.Content class=\"p-0\">\n\t\t\t<RangeCalendar numberOfMonths={3} locale=\"es\" fixedWeeks />\n\t\t</Card.Content>\n\t</Card.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/calendar/calendar-range.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport { getLocalTimeZone } from \"@internationalized/date\";\n\timport { RangeCalendar } from \"$lib/registry/ui/range-calendar/index.js\";\n</script>\n\n<Example title=\"Range\" containerClass=\"lg:col-span-full 2xl:col-span-full\" class=\"p-12\">\n\t<Card.Root class=\"mx-auto w-fit p-0\">\n\t\t<Card.Content class=\"p-0\">\n\t\t\t<RangeCalendar\n\t\t\t\tnumberOfMonths={2}\n\t\t\t\tisDateUnavailable={(date) => {\n\t\t\t\t\tconst dateObj = date.toDate(getLocalTimeZone());\n\t\t\t\t\treturn dateObj > new Date() || dateObj < new Date(\"1900-01-01\");\n\t\t\t\t}}\n\t\t\t/>\n\t\t</Card.Content>\n\t</Card.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/calendar/calendar-single.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Calendar } from \"$lib/registry/ui/calendar/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n</script>\n\n<Example title=\"Single\">\n\t<Card.Root class=\"mx-auto w-fit p-0\">\n\t\t<Card.Content class=\"p-0\">\n\t\t\t<Calendar type=\"single\" captionLayout=\"dropdown\" />\n\t\t</Card.Content>\n\t</Card.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/calendar/calendar-week-numbers.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Calendar } from \"$lib/registry/ui/calendar/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n</script>\n\n<Example title=\"Week Numbers\" class=\"justify-center\">\n\t<Card.Root class=\"mx-auto w-fit p-0\">\n\t\t<Card.Content class=\"p-0\">\n\t\t\t<Calendar type=\"single\" />\n\t\t</Card.Content>\n\t</Card.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/calendar/calendar-with-presets.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Calendar } from \"$lib/registry/ui/calendar/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport { CalendarDate, getLocalTimeZone, today } from \"@internationalized/date\";\n\n\tconst currentDate = today(getLocalTimeZone());\n\tlet date = $state<CalendarDate | undefined>(new CalendarDate(currentDate.year, 1, 12));\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tlet currentMonth = $state<CalendarDate>(\n\t\tnew CalendarDate(currentDate.year, currentDate.month, 1)\n\t);\n\n\tconst presets = [\n\t\t{ label: \"Today\", value: 0 },\n\t\t{ label: \"Tomorrow\", value: 1 },\n\t\t{ label: \"In 3 days\", value: 3 },\n\t\t{ label: \"In a week\", value: 7 },\n\t\t{ label: \"In 2 weeks\", value: 14 },\n\t];\n</script>\n\n<Example title=\"With Presets\">\n\t<Card.Root class=\"mx-auto w-fit max-w-[300px]\" size=\"sm\">\n\t\t<Card.Content>\n\t\t\t<Calendar\n\t\t\t\ttype=\"single\"\n\t\t\t\tbind:value={date}\n\t\t\t\tfixedWeeks\n\t\t\t\tclass=\"p-0 [--cell-size:--spacing(9.5)]\"\n\t\t\t/>\n\t\t</Card.Content>\n\t\t<Card.Footer class=\"flex flex-wrap gap-2 border-t\">\n\t\t\t{#each presets as preset (preset.value)}\n\t\t\t\t<Button\n\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\tclass=\"flex-1\"\n\t\t\t\t\tonclick={() => {\n\t\t\t\t\t\tconst newDate = currentDate.add({ days: preset.value });\n\t\t\t\t\t\tdate = newDate;\n\t\t\t\t\t\tcurrentMonth = new CalendarDate(newDate.year, newDate.month, 1);\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{preset.label}\n\t\t\t\t</Button>\n\t\t\t{/each}\n\t\t</Card.Footer>\n\t</Card.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/calendar/calendar-with-time.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Calendar } from \"$lib/registry/ui/calendar/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport * as InputGroup from \"$lib/registry/ui/input-group/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Example title=\"With Time\">\n\t<Card.Root size=\"sm\" class=\"mx-auto w-fit\">\n\t\t<Card.Content>\n\t\t\t<Calendar type=\"single\" class=\"p-0\" />\n\t\t</Card.Content>\n\t\t<Card.Footer class=\"bg-card border-t\">\n\t\t\t<Field.Group>\n\t\t\t\t<Field.Field>\n\t\t\t\t\t<Field.Label for=\"time-from\">Start Time</Field.Label>\n\t\t\t\t\t<InputGroup.Root>\n\t\t\t\t\t\t<InputGroup.Input\n\t\t\t\t\t\t\tid=\"time-from\"\n\t\t\t\t\t\t\ttype=\"time\"\n\t\t\t\t\t\t\tstep=\"1\"\n\t\t\t\t\t\t\tvalue=\"10:30:00\"\n\t\t\t\t\t\t\tclass=\"appearance-none [&::-webkit-calendar-picker-indicator]:hidden [&::-webkit-calendar-picker-indicator]:appearance-none\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<InputGroup.Addon>\n\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\tlucide=\"Clock2Icon\"\n\t\t\t\t\t\t\t\ttabler=\"IconClockHour2\"\n\t\t\t\t\t\t\t\thugeicons=\"Clock03Icon\"\n\t\t\t\t\t\t\t\tphosphor=\"ClockIcon\"\n\t\t\t\t\t\t\t\tremixicon=\"RiTimeLine\"\n\t\t\t\t\t\t\t\tclass=\"text-muted-foreground\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</InputGroup.Addon>\n\t\t\t\t\t</InputGroup.Root>\n\t\t\t\t</Field.Field>\n\t\t\t\t<Field.Field>\n\t\t\t\t\t<Field.Label for=\"time-to\">End Time</Field.Label>\n\t\t\t\t\t<InputGroup.Root>\n\t\t\t\t\t\t<InputGroup.Input\n\t\t\t\t\t\t\tid=\"time-to\"\n\t\t\t\t\t\t\ttype=\"time\"\n\t\t\t\t\t\t\tstep=\"1\"\n\t\t\t\t\t\t\tvalue=\"12:30:00\"\n\t\t\t\t\t\t\tclass=\"appearance-none [&::-webkit-calendar-picker-indicator]:hidden [&::-webkit-calendar-picker-indicator]:appearance-none\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<InputGroup.Addon>\n\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\tlucide=\"Clock2Icon\"\n\t\t\t\t\t\t\t\ttabler=\"IconClockHour2\"\n\t\t\t\t\t\t\t\thugeicons=\"Clock03Icon\"\n\t\t\t\t\t\t\t\tphosphor=\"ClockIcon\"\n\t\t\t\t\t\t\t\tremixicon=\"RiTimeLine\"\n\t\t\t\t\t\t\t\tclass=\"text-muted-foreground\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</InputGroup.Addon>\n\t\t\t\t\t</InputGroup.Root>\n\t\t\t\t</Field.Field>\n\t\t\t</Field.Group>\n\t\t</Card.Footer>\n\t</Card.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/calendar/calendar.svelte",
    "content": "<script lang=\"ts\">\n\timport ExampleWrapper from \"../../../../../routes/(app)/(layout)/(create)/components/example-wrapper.svelte\";\n\timport CalendarSingle from \"./calendar-single.svelte\";\n\timport CalendarMultiple from \"./calendar-multiple.svelte\";\n\timport CalendarWeekNumbers from \"./calendar-week-numbers.svelte\";\n\timport CalendarBookedDates from \"./calendar-booked-dates.svelte\";\n\timport CalendarRange from \"./calendar-range.svelte\";\n\timport CalendarRangeMultipleMonths from \"./calendar-range-multiple-months.svelte\";\n\timport CalendarWithTime from \"./calendar-with-time.svelte\";\n\timport CalendarWithPresets from \"./calendar-with-presets.svelte\";\n\timport DatePickerSimple from \"./date-picker-simple.svelte\";\n\timport DataPickerWithDropdowns from \"./date-picker-with-dropdowns.svelte\";\n\timport DatePickerWithRange from \"./date-picker-with-range.svelte\";\n\timport CalendarCustomDays from \"./calendar-custom-days.svelte\";\n\timport CalendarInCard from \"./calendar-in-card.svelte\";\n\timport CalendarInPopover from \"./calendar-in-popover.svelte\";\n</script>\n\n<ExampleWrapper>\n\t<CalendarSingle />\n\t<CalendarMultiple />\n\t<CalendarWeekNumbers />\n\t<CalendarBookedDates />\n\t<CalendarRange />\n\t<CalendarRangeMultipleMonths />\n\t<CalendarWithTime />\n\t<CalendarWithPresets />\n\t<CalendarCustomDays />\n\t<DatePickerSimple />\n\t<DataPickerWithDropdowns />\n\t<DatePickerWithRange />\n\t<CalendarInCard />\n\t<CalendarInPopover />\n</ExampleWrapper>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/calendar/date-picker-simple.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Calendar } from \"$lib/registry/ui/calendar/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Popover from \"$lib/registry/ui/popover/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\timport { DateFormatter, type DateValue, getLocalTimeZone } from \"@internationalized/date\";\n\n\tconst df = new DateFormatter(\"en-US\", {\n\t\tdateStyle: \"long\",\n\t});\n\n\tlet date = $state<DateValue | undefined>();\n</script>\n\n<Example title=\"Date Picker Simple\">\n\t<Field.Field class=\"mx-auto w-72\">\n\t\t<Field.Label for=\"date-picker-simple\">Date</Field.Label>\n\t\t<Popover.Root>\n\t\t\t<Popover.Trigger>\n\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t<Button\n\t\t\t\t\t\t{...props}\n\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\tid=\"date-picker-simple\"\n\t\t\t\t\t\tclass=\"justify-start px-2.5 font-normal\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"CalendarIcon\"\n\t\t\t\t\t\t\ttabler=\"IconCalendar\"\n\t\t\t\t\t\t\thugeicons=\"CalendarIcon\"\n\t\t\t\t\t\t\tphosphor=\"CalendarBlankIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiCalendarLine\"\n\t\t\t\t\t\t\tdata-icon=\"inline-start\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t{date ? df.format(date.toDate(getLocalTimeZone())) : \"Pick a date\"}\n\t\t\t\t\t</Button>\n\t\t\t\t{/snippet}\n\t\t\t</Popover.Trigger>\n\t\t\t<Popover.Content class=\"w-auto p-0\" align=\"start\">\n\t\t\t\t<Calendar type=\"single\" bind:value={date} />\n\t\t\t</Popover.Content>\n\t\t</Popover.Root>\n\t</Field.Field>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/calendar/date-picker-with-dropdowns.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Calendar } from \"$lib/registry/ui/calendar/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Popover from \"$lib/registry/ui/popover/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\timport { DateFormatter, type DateValue, getLocalTimeZone } from \"@internationalized/date\";\n\n\tconst df = new DateFormatter(\"en-US\", {\n\t\tdateStyle: \"long\",\n\t});\n\n\tlet date = $state<DateValue | undefined>();\n\tlet open = $state(false);\n</script>\n\n<Example title=\"Date Picker with Dropdowns\">\n\t<Field.Field class=\"mx-auto w-72\">\n\t\t<Popover.Root bind:open>\n\t\t\t<Field.Label for=\"date-picker-with-dropdowns-desktop\">Date</Field.Label>\n\t\t\t<Popover.Trigger>\n\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t<Button\n\t\t\t\t\t\t{...props}\n\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\tid=\"date-picker-with-dropdowns-desktop\"\n\t\t\t\t\t\tclass=\"justify-start px-2.5 font-normal\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{date ? df.format(date.toDate(getLocalTimeZone())) : \"Pick a date\"}\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"ChevronDownIcon\"\n\t\t\t\t\t\t\ttabler=\"IconChevronDown\"\n\t\t\t\t\t\t\thugeicons=\"ArrowDownIcon\"\n\t\t\t\t\t\t\tphosphor=\"CaretDownIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiArrowDownSLine\"\n\t\t\t\t\t\t\tdata-icon=\"inline-start\"\n\t\t\t\t\t\t\tclass=\"ml-auto\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Button>\n\t\t\t\t{/snippet}\n\t\t\t</Popover.Trigger>\n\t\t\t<Popover.Content class=\"w-auto p-0\" align=\"start\">\n\t\t\t\t<Calendar type=\"single\" bind:value={date} captionLayout=\"dropdown\" />\n\t\t\t\t<div class=\"flex gap-2 border-t p-2\">\n\t\t\t\t\t<Button\n\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\tclass=\"w-full\"\n\t\t\t\t\t\tonclick={() => (open = false)}\n\t\t\t\t\t>\n\t\t\t\t\t\tDone\n\t\t\t\t\t</Button>\n\t\t\t\t</div>\n\t\t\t</Popover.Content>\n\t\t</Popover.Root>\n\t</Field.Field>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/calendar/date-picker-with-range.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Popover from \"$lib/registry/ui/popover/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\timport { CalendarDate, DateFormatter, getLocalTimeZone } from \"@internationalized/date\";\n\timport { RangeCalendar } from \"$lib/registry/ui/range-calendar/index.js\";\n\timport type { DateRange } from \"bits-ui\";\n\n\tconst df = new DateFormatter(\"en-US\", {\n\t\tdateStyle: \"medium\",\n\t});\n\n\tconst currentDate = new CalendarDate(2022, 1, 20);\n\tlet date = $state<DateRange | undefined>({\n\t\tstart: currentDate,\n\t\tend: currentDate.add({ days: 20 }),\n\t});\n</script>\n\n<Example title=\"Date Picker Range\">\n\t<Field.Field class=\"mx-auto w-72\">\n\t\t<Field.Label for=\"date-picker-range\">Date Picker Range</Field.Label>\n\t\t<Popover.Root>\n\t\t\t<Popover.Trigger>\n\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t<Button\n\t\t\t\t\t\t{...props}\n\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\tid=\"date-picker-range\"\n\t\t\t\t\t\tclass=\"justify-start px-2.5 font-normal\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"CalendarIcon\"\n\t\t\t\t\t\t\ttabler=\"IconCalendar\"\n\t\t\t\t\t\t\thugeicons=\"CalendarIcon\"\n\t\t\t\t\t\t\tphosphor=\"CalendarBlankIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiCalendarLine\"\n\t\t\t\t\t\t\tdata-icon=\"inline-start\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t{#if date?.start && date?.end}\n\t\t\t\t\t\t\t{df.format(date.start.toDate(getLocalTimeZone()))} - {df.format(\n\t\t\t\t\t\t\t\tdate.end.toDate(getLocalTimeZone())\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t{:else}\n\t\t\t\t\t\t\tPick a date\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t</Button>\n\t\t\t\t{/snippet}\n\t\t\t</Popover.Trigger>\n\t\t\t<Popover.Content class=\"w-auto p-0\" align=\"start\">\n\t\t\t\t<RangeCalendar bind:value={date} numberOfMonths={2} />\n\t\t\t</Popover.Content>\n\t\t</Popover.Root>\n\t</Field.Field>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/card/card-default.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Button from \"$lib/registry/ui/button/index.js\";\n</script>\n\n<Example title=\"Default Size\">\n\t<Card.Root size=\"default\" class=\"mx-auto w-full max-w-sm\">\n\t\t<Card.Header>\n\t\t\t<Card.Title>Default Card</Card.Title>\n\t\t\t<Card.Description>This card uses the default size variant.</Card.Description>\n\t\t</Card.Header>\n\t\t<Card.Content>\n\t\t\t<p>\n\t\t\t\tThe card component supports a size prop that defaults to \"default\" for standard\n\t\t\t\tspacing and sizing.\n\t\t\t</p>\n\t\t</Card.Content>\n\t\t<Card.Footer>\n\t\t\t<Button.Root variant=\"outline\" class=\"w-full\">Action</Button.Root>\n\t\t</Card.Footer>\n\t</Card.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/card/card-footer-with-border-small.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Button from \"$lib/registry/ui/button/index.js\";\n</script>\n\n<Example title=\"Footer with Border (Small)\">\n\t<Card.Root size=\"sm\" class=\"mx-auto w-full max-w-sm\">\n\t\t<Card.Content>\n\t\t\t<p>\n\t\t\t\tThe footer has a border-t class applied, creating a visual separation between the\n\t\t\t\tcontent and footer sections.\n\t\t\t</p>\n\t\t</Card.Content>\n\t\t<Card.Footer class=\"border-t\">\n\t\t\t<Button.Root variant=\"outline\" size=\"sm\" class=\"w-full\">Footer with Border</Button.Root>\n\t\t</Card.Footer>\n\t</Card.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/card/card-footer-with-border.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Button from \"$lib/registry/ui/button/index.js\";\n</script>\n\n<Example title=\"Footer with Border\">\n\t<Card.Root class=\"mx-auto w-full max-w-sm\">\n\t\t<Card.Content>\n\t\t\t<p>\n\t\t\t\tThe footer has a border-t class applied, creating a visual separation between the\n\t\t\t\tcontent and footer sections.\n\t\t\t</p>\n\t\t</Card.Content>\n\t\t<Card.Footer class=\"border-t\">\n\t\t\t<Button.Root variant=\"outline\" class=\"w-full\">Footer with Border</Button.Root>\n\t\t</Card.Footer>\n\t</Card.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/card/card-header-with-border-small.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n</script>\n\n<Example title=\"Header with Border (Small)\">\n\t<Card.Root size=\"sm\" class=\"mx-auto w-full max-w-sm\">\n\t\t<Card.Header class=\"border-b\">\n\t\t\t<Card.Title>Header with Border</Card.Title>\n\t\t\t<Card.Description>\n\t\t\t\tThis is a small card with a header that has a bottom border.\n\t\t\t</Card.Description>\n\t\t</Card.Header>\n\t\t<Card.Content>\n\t\t\t<p>\n\t\t\t\tThe header has a border-b class applied, creating a visual separation between the\n\t\t\t\theader and content sections.\n\t\t\t</p>\n\t\t</Card.Content>\n\t</Card.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/card/card-header-with-border.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n</script>\n\n<Example title=\"Header with Border\">\n\t<Card.Root class=\"mx-auto w-full max-w-sm\">\n\t\t<Card.Header class=\"border-b\">\n\t\t\t<Card.Title>Header with Border</Card.Title>\n\t\t\t<Card.Description>\n\t\t\t\tThis is a card with a header that has a bottom border.\n\t\t\t</Card.Description>\n\t\t</Card.Header>\n\t\t<Card.Content>\n\t\t\t<p>\n\t\t\t\tThe header has a border-b class applied, creating a visual separation between the\n\t\t\t\theader and content sections.\n\t\t\t</p>\n\t\t</Card.Content>\n\t</Card.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/card/card-login.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport * as Input from \"$lib/registry/ui/input/index.js\";\n\timport * as Button from \"$lib/registry/ui/button/index.js\";\n</script>\n\n<Example title=\"Login\">\n\t<Card.Root class=\"mx-auto w-full max-w-sm\">\n\t\t<Card.Header>\n\t\t\t<Card.Title>Login to your account</Card.Title>\n\t\t\t<Card.Description>Enter your email below to login to your account</Card.Description>\n\t\t</Card.Header>\n\t\t<Card.Content>\n\t\t\t<form>\n\t\t\t\t<Field.Group>\n\t\t\t\t\t<Field.Field>\n\t\t\t\t\t\t<Field.Label for=\"email\">Email</Field.Label>\n\t\t\t\t\t\t<Input.Root id=\"email\" type=\"email\" placeholder=\"m@example.com\" required />\n\t\t\t\t\t</Field.Field>\n\t\t\t\t\t<Field.Field>\n\t\t\t\t\t\t<div class=\"flex items-center\">\n\t\t\t\t\t\t\t<Field.Label for=\"password\">Password</Field.Label>\n\t\t\t\t\t\t\t<a\n\t\t\t\t\t\t\t\thref=\"#/\"\n\t\t\t\t\t\t\t\tclass=\"ml-auto inline-block underline-offset-4 hover:underline\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tForgot your password?\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<Input.Root id=\"password\" type=\"password\" required />\n\t\t\t\t\t</Field.Field>\n\t\t\t\t</Field.Group>\n\t\t\t</form>\n\t\t</Card.Content>\n\t\t<Card.Footer class=\"flex-col gap-2\">\n\t\t\t<Button.Root type=\"submit\" class=\"w-full\">Login</Button.Root>\n\t\t\t<Button.Root variant=\"outline\" class=\"w-full\">Login with Google</Button.Root>\n\t\t\t<div class=\"style-nova:mt-2 mt-4 text-center\">\n\t\t\t\tDon't have an account?\n\t\t\t\t<a href=\"#/\" class=\"underline underline-offset-4\"> Sign up </a>\n\t\t\t</div>\n\t\t</Card.Footer>\n\t</Card.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/card/card-meeting-notes.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Button from \"$lib/registry/ui/button/index.js\";\n\timport * as Avatar from \"$lib/registry/ui/avatar/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Example title=\"Meeting Notes\">\n\t<Card.Root class=\"mx-auto w-full max-w-sm\">\n\t\t<Card.Header>\n\t\t\t<Card.Title>Meeting Notes</Card.Title>\n\t\t\t<Card.Description>Transcript from the meeting with the client.</Card.Description>\n\t\t\t<Card.Action>\n\t\t\t\t<Button.Root variant=\"outline\" size=\"sm\">\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"CaptionsIcon\"\n\t\t\t\t\t\ttabler=\"IconTextCaption\"\n\t\t\t\t\t\thugeicons=\"TextCheckIcon\"\n\t\t\t\t\t\tphosphor=\"TextTIcon\"\n\t\t\t\t\t\tremixicon=\"RiClosedCaptioningLine\"\n\t\t\t\t\t/>\n\t\t\t\t\tTranscribe\n\t\t\t\t</Button.Root>\n\t\t\t</Card.Action>\n\t\t</Card.Header>\n\t\t<Card.Content>\n\t\t\t<p>Client requested dashboard redesign with focus on mobile responsiveness.</p>\n\t\t\t<ol class=\"mt-4 flex list-decimal flex-col gap-2 pl-6\">\n\t\t\t\t<li>New analytics widgets for daily/weekly metrics</li>\n\t\t\t\t<li>Simplified navigation menu</li>\n\t\t\t\t<li>Dark mode support</li>\n\t\t\t\t<li>Timeline: 6 weeks</li>\n\t\t\t\t<li>Follow-up meeting scheduled for next Tuesday</li>\n\t\t\t</ol>\n\t\t</Card.Content>\n\t\t<Card.Footer>\n\t\t\t<Avatar.Group>\n\t\t\t\t<Avatar.Root>\n\t\t\t\t\t<Avatar.Image src=\"https://github.com/shadcn.png\" alt=\"@shadcn\" />\n\t\t\t\t\t<Avatar.Fallback>CN</Avatar.Fallback>\n\t\t\t\t</Avatar.Root>\n\t\t\t\t<Avatar.Root>\n\t\t\t\t\t<Avatar.Image src=\"https://github.com/maxleiter.png\" alt=\"@maxleiter\" />\n\t\t\t\t\t<Avatar.Fallback>LR</Avatar.Fallback>\n\t\t\t\t</Avatar.Root>\n\t\t\t\t<Avatar.Root>\n\t\t\t\t\t<Avatar.Image src=\"https://github.com/evilrabbit.png\" alt=\"@evilrabbit\" />\n\t\t\t\t\t<Avatar.Fallback>ER</Avatar.Fallback>\n\t\t\t\t</Avatar.Root>\n\t\t\t\t<Avatar.GroupCount>+8</Avatar.GroupCount>\n\t\t\t</Avatar.Group>\n\t\t</Card.Footer>\n\t</Card.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/card/card-small.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Button from \"$lib/registry/ui/button/index.js\";\n</script>\n\n<Example title=\"Small Size\">\n\t<Card.Root size=\"sm\" class=\"mx-auto w-full max-w-sm\">\n\t\t<Card.Header>\n\t\t\t<Card.Title>Small Card</Card.Title>\n\t\t\t<Card.Description>This card uses the small size variant.</Card.Description>\n\t\t</Card.Header>\n\t\t<Card.Content>\n\t\t\t<p>\n\t\t\t\tThe card component supports a size prop that can be set to \"sm\" for a more compact\n\t\t\t\tappearance.\n\t\t\t</p>\n\t\t</Card.Content>\n\t\t<Card.Footer>\n\t\t\t<Button.Root variant=\"outline\" size=\"sm\" class=\"w-full\">Action</Button.Root>\n\t\t</Card.Footer>\n\t</Card.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/card/card-with-image-small.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Button from \"$lib/registry/ui/button/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Example title=\"With Image (Small)\">\n\t<Card.Root size=\"sm\" class=\"relative mx-auto w-full max-w-sm pt-0\">\n\t\t<div\n\t\t\tclass=\"bg-primary inse.t-0 absolute z-30 aspect-video opacity-50 mix-blend-color\"\n\t\t></div>\n\t\t<img\n\t\t\tsrc=\"https://images.unsplash.com/photo-1604076850742-4c7221f3101b?q=80&w=1887&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D\"\n\t\t\talt=\"by mymind on Unsplash\"\n\t\t\tclass=\"relative z-20 aspect-video w-full object-cover brightness-60 grayscale\"\n\t\t/>\n\t\t<Card.Header>\n\t\t\t<Card.Title>Beautiful Landscape</Card.Title>\n\t\t\t<Card.Description>\n\t\t\t\tA stunning view that captures the essence of natural beauty.\n\t\t\t</Card.Description>\n\t\t</Card.Header>\n\t\t<Card.Footer>\n\t\t\t<Button.Root size=\"sm\" class=\"w-full\">\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"PlusIcon\"\n\t\t\t\t\ttabler=\"IconPlus\"\n\t\t\t\t\thugeicons=\"Add01Icon\"\n\t\t\t\t\tphosphor=\"PlusIcon\"\n\t\t\t\t\tremixicon=\"RiAddLine\"\n\t\t\t\t\tdata-icon=\"inline-start\"\n\t\t\t\t/>\n\t\t\t\tButton\n\t\t\t</Button.Root>\n\t\t</Card.Footer>\n\t</Card.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/card/card-with-image.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Button from \"$lib/registry/ui/button/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Example title=\"With Image\">\n\t<Card.Root size=\"default\" class=\"relative mx-auto w-full max-w-sm pt-0\">\n\t\t<div\n\t\t\tclass=\"bg-primary inse.t-0 absolute z-30 aspect-video opacity-50 mix-blend-color\"\n\t\t></div>\n\t\t<img\n\t\t\tsrc=\"https://images.unsplash.com/photo-1604076850742-4c7221f3101b?q=80&w=1887&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D\"\n\t\t\talt=\"by mymind on Unsplash\"\n\t\t\tclass=\"relative z-20 aspect-video w-full object-cover brightness-60 grayscale\"\n\t\t/>\n\t\t<Card.Header>\n\t\t\t<Card.Title>Beautiful Landscape</Card.Title>\n\t\t\t<Card.Description>\n\t\t\t\tA stunning view that captures the essence of natural beauty.\n\t\t\t</Card.Description>\n\t\t</Card.Header>\n\t\t<Card.Footer>\n\t\t\t<Button.Root class=\"w-full\">\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"PlusIcon\"\n\t\t\t\t\ttabler=\"IconPlus\"\n\t\t\t\t\thugeicons=\"Add01Icon\"\n\t\t\t\t\tphosphor=\"PlusIcon\"\n\t\t\t\t\tremixicon=\"RiAddLine\"\n\t\t\t\t\tdata-icon=\"inline-start\"\n\t\t\t\t/>\n\t\t\t\tButton\n\t\t\t</Button.Root>\n\t\t</Card.Footer>\n\t</Card.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/card/card.svelte",
    "content": "<script lang=\"ts\">\n\timport ExampleWrapper from \"../../../../../routes/(app)/(layout)/(create)/components/example-wrapper.svelte\";\n\timport CardDefault from \"./card-default.svelte\";\n\timport CardSmall from \"./card-small.svelte\";\n\timport CardHeaderWithBorder from \"./card-header-with-border.svelte\";\n\timport CardFooterWithBorder from \"./card-footer-with-border.svelte\";\n\timport CardHeaderWithBorderSmall from \"./card-header-with-border-small.svelte\";\n\timport CardFooterWithBorderSmall from \"./card-footer-with-border-small.svelte\";\n\timport CardWithImage from \"./card-with-image.svelte\";\n\timport CardWithImageSmall from \"./card-with-image-small.svelte\";\n\timport CardLogin from \"./card-login.svelte\";\n\timport CardMeetingNotes from \"./card-meeting-notes.svelte\";\n</script>\n\n<ExampleWrapper>\n\t<CardDefault />\n\t<CardSmall />\n\t<CardHeaderWithBorder />\n\t<CardFooterWithBorder />\n\t<CardHeaderWithBorderSmall />\n\t<CardFooterWithBorderSmall />\n\t<CardWithImage />\n\t<CardWithImageSmall />\n\t<CardLogin />\n\t<CardMeetingNotes />\n</ExampleWrapper>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/carousel/carousel-basic.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Carousel from \"$lib/registry/ui/carousel/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n</script>\n\n<Example title=\"Basic\">\n\t<Carousel.Root class=\"mx-auto max-w-xs sm:max-w-sm\">\n\t\t<Carousel.Content>\n\t\t\t{#each Array(5) as _, index (index)}\n\t\t\t\t<Carousel.Item>\n\t\t\t\t\t<div class=\"p-1\">\n\t\t\t\t\t\t<Card.Root>\n\t\t\t\t\t\t\t<Card.Content\n\t\t\t\t\t\t\t\tclass=\"flex aspect-square items-center justify-center p-6\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<span class=\"text-4xl font-semibold\">{index + 1}</span>\n\t\t\t\t\t\t\t</Card.Content>\n\t\t\t\t\t\t</Card.Root>\n\t\t\t\t\t</div>\n\t\t\t\t</Carousel.Item>\n\t\t\t{/each}\n\t\t</Carousel.Content>\n\t\t<Carousel.Previous class=\"hidden sm:inline-flex\" />\n\t\t<Carousel.Next class=\"hidden sm:inline-flex\" />\n\t</Carousel.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/carousel/carousel-multiple.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Carousel from \"$lib/registry/ui/carousel/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n</script>\n\n<Example title=\"Multiple\">\n\t<Carousel.Root\n\t\tclass=\"mx-auto max-w-xs sm:max-w-sm\"\n\t\topts={{\n\t\t\talign: \"start\",\n\t\t}}\n\t>\n\t\t<Carousel.Content>\n\t\t\t{#each Array(5) as _, index (index)}\n\t\t\t\t<Carousel.Item class=\"sm:basis-1/2 lg:basis-1/3\">\n\t\t\t\t\t<div class=\"p-1\">\n\t\t\t\t\t\t<Card.Root>\n\t\t\t\t\t\t\t<Card.Content\n\t\t\t\t\t\t\t\tclass=\"flex aspect-square items-center justify-center p-6\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<span class=\"text-3xl font-semibold\">{index + 1}</span>\n\t\t\t\t\t\t\t</Card.Content>\n\t\t\t\t\t\t</Card.Root>\n\t\t\t\t\t</div>\n\t\t\t\t</Carousel.Item>\n\t\t\t{/each}\n\t\t</Carousel.Content>\n\t\t<Carousel.Previous class=\"hidden sm:inline-flex\" />\n\t\t<Carousel.Next class=\"hidden sm:inline-flex\" />\n\t</Carousel.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/carousel/carousel-with-gap.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Carousel from \"$lib/registry/ui/carousel/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n</script>\n\n<Example title=\"With Gap\">\n\t<Carousel.Root class=\"mx-auto max-w-xs sm:max-w-sm\">\n\t\t<Carousel.Content class=\"-ml-1\">\n\t\t\t{#each Array(5) as _, index (index)}\n\t\t\t\t<Carousel.Item class=\"pl-1 md:basis-1/2\">\n\t\t\t\t\t<div class=\"p-1\">\n\t\t\t\t\t\t<Card.Root>\n\t\t\t\t\t\t\t<Card.Content\n\t\t\t\t\t\t\t\tclass=\"flex aspect-square items-center justify-center p-6\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<span class=\"text-2xl font-semibold\">{index + 1}</span>\n\t\t\t\t\t\t\t</Card.Content>\n\t\t\t\t\t\t</Card.Root>\n\t\t\t\t\t</div>\n\t\t\t\t</Carousel.Item>\n\t\t\t{/each}\n\t\t</Carousel.Content>\n\t\t<Carousel.Previous class=\"hidden sm:inline-flex\" />\n\t\t<Carousel.Next class=\"hidden sm:inline-flex\" />\n\t</Carousel.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/carousel/carousel.svelte",
    "content": "<script lang=\"ts\">\n\timport ExampleWrapper from \"../../../../../routes/(app)/(layout)/(create)/components/example-wrapper.svelte\";\n\timport CarouselBasic from \"./carousel-basic.svelte\";\n\timport CarouselMultiple from \"./carousel-multiple.svelte\";\n\timport CarouselWithGap from \"./carousel-with-gap.svelte\";\n</script>\n\n<ExampleWrapper class=\"lg:grid-cols-1\">\n\t<CarouselBasic />\n\t<CarouselMultiple />\n\t<CarouselWithGap />\n</ExampleWrapper>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/chart/chart-area-example.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { AreaChart } from \"layerchart\";\n\timport { curveNatural } from \"d3-shape\";\n\timport { scaleBand } from \"d3-scale\";\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\n\tconst areaChartData = [\n\t\t{ month: \"January\", desktop: 186 },\n\t\t{ month: \"February\", desktop: 305 },\n\t\t{ month: \"March\", desktop: 237 },\n\t\t{ month: \"April\", desktop: 73 },\n\t\t{ month: \"May\", desktop: 209 },\n\t\t{ month: \"June\", desktop: 214 },\n\t];\n\n\tconst areaChartConfig = {\n\t\tdesktop: {\n\t\t\tlabel: \"Desktop\",\n\t\t\tcolor: \"var(--chart-1)\",\n\t\t},\n\t} satisfies Chart.ChartConfig;\n</script>\n\n<Example title=\"Area Chart\">\n\t<Card.Root class=\"w-full\">\n\t\t<Card.Header>\n\t\t\t<Card.Title>Area Chart</Card.Title>\n\t\t\t<Card.Description>Showing total visitors for the last 6 months</Card.Description>\n\t\t</Card.Header>\n\t\t<Card.Content>\n\t\t\t<Chart.Container config={areaChartConfig}>\n\t\t\t\t<AreaChart\n\t\t\t\t\tdata={areaChartData}\n\t\t\t\t\tx=\"month\"\n\t\t\t\t\txScale={scaleBand()}\n\t\t\t\t\taxis=\"x\"\n\t\t\t\t\tseries={[\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tkey: \"desktop\",\n\t\t\t\t\t\t\tlabel: \"Desktop\",\n\t\t\t\t\t\t\tcolor: areaChartConfig.desktop.color,\n\t\t\t\t\t\t},\n\t\t\t\t\t]}\n\t\t\t\t\tprops={{\n\t\t\t\t\t\tarea: {\n\t\t\t\t\t\t\tcurve: curveNatural,\n\t\t\t\t\t\t\t\"fill-opacity\": 0.4,\n\t\t\t\t\t\t\tmotion: \"tween\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\txAxis: {\n\t\t\t\t\t\t\tformat: (d) => d.slice(0, 3),\n\t\t\t\t\t\t\ttickLength: 0,\n\t\t\t\t\t\t},\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{#snippet tooltip()}\n\t\t\t\t\t\t<Chart.Tooltip indicator=\"line\" />\n\t\t\t\t\t{/snippet}\n\t\t\t\t</AreaChart>\n\t\t\t</Chart.Container>\n\t\t</Card.Content>\n\t\t<Card.Footer>\n\t\t\t<div class=\"flex w-full items-start gap-2\">\n\t\t\t\t<div class=\"grid gap-2\">\n\t\t\t\t\t<div class=\"flex items-center gap-2 leading-none font-medium\">\n\t\t\t\t\t\tTrending up by 5.2% this month\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"TrendingUpIcon\"\n\t\t\t\t\t\t\ttabler=\"IconTrendingUp\"\n\t\t\t\t\t\t\thugeicons=\"ChartUpIcon\"\n\t\t\t\t\t\t\tphosphor=\"TrendUpIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiLineChartLine\"\n\t\t\t\t\t\t\tclass=\"size-4\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"text-muted-foreground flex items-center gap-2 leading-none\">\n\t\t\t\t\t\tJanuary - June 2024\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</Card.Footer>\n\t</Card.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/chart/chart-bar-example.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { scaleBand } from \"d3-scale\";\n\timport { BarChart } from \"layerchart\";\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\n\tconst barChartData = [\n\t\t{ month: \"January\", desktop: 186, mobile: 80 },\n\t\t{ month: \"February\", desktop: 305, mobile: 200 },\n\t\t{ month: \"March\", desktop: 237, mobile: 120 },\n\t\t{ month: \"April\", desktop: 73, mobile: 190 },\n\t\t{ month: \"May\", desktop: 209, mobile: 130 },\n\t\t{ month: \"June\", desktop: 214, mobile: 140 },\n\t];\n\n\tconst barChartConfig = {\n\t\tdesktop: {\n\t\t\tlabel: \"Desktop\",\n\t\t\tcolor: \"var(--chart-1)\",\n\t\t},\n\t\tmobile: {\n\t\t\tlabel: \"Mobile\",\n\t\t\tcolor: \"var(--chart-2)\",\n\t\t},\n\t} satisfies Chart.ChartConfig;\n</script>\n\n<Example title=\"Bar Chart\">\n\t<Card.Root class=\"w-full\">\n\t\t<Card.Header>\n\t\t\t<Card.Title>Bar Chart - Multiple</Card.Title>\n\t\t\t<Card.Description>January - June 2024</Card.Description>\n\t\t</Card.Header>\n\t\t<Card.Content>\n\t\t\t<Chart.Container config={barChartConfig}>\n\t\t\t\t<BarChart\n\t\t\t\t\tdata={barChartData}\n\t\t\t\t\txScale={scaleBand().padding(0.25)}\n\t\t\t\t\tx=\"month\"\n\t\t\t\t\taxis=\"x\"\n\t\t\t\t\tseries={[\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tkey: \"desktop\",\n\t\t\t\t\t\t\tlabel: \"Desktop\",\n\t\t\t\t\t\t\tcolor: barChartConfig.desktop.color,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tkey: \"mobile\",\n\t\t\t\t\t\t\tlabel: \"Mobile\",\n\t\t\t\t\t\t\tcolor: barChartConfig.mobile.color,\n\t\t\t\t\t\t},\n\t\t\t\t\t]}\n\t\t\t\t\tx1Scale={scaleBand().paddingInner(0.2)}\n\t\t\t\t\tseriesLayout=\"group\"\n\t\t\t\t\trule={false}\n\t\t\t\t\tprops={{\n\t\t\t\t\t\tbars: {\n\t\t\t\t\t\t\tstroke: \"none\",\n\t\t\t\t\t\t\trounded: \"all\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\txAxis: {\n\t\t\t\t\t\t\tformat: (d) => d.slice(0, 3),\n\t\t\t\t\t\t\ttickLength: 0,\n\t\t\t\t\t\t},\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{#snippet tooltip()}\n\t\t\t\t\t\t<Chart.Tooltip indicator=\"dashed\" />\n\t\t\t\t\t{/snippet}\n\t\t\t\t</BarChart>\n\t\t\t</Chart.Container>\n\t\t</Card.Content>\n\t\t<Card.Footer class=\"flex-col items-start gap-2\">\n\t\t\t<div class=\"flex gap-2 leading-none font-medium\">\n\t\t\t\tTrending up by 5.2% this month\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"TrendingUpIcon\"\n\t\t\t\t\ttabler=\"IconTrendingUp\"\n\t\t\t\t\thugeicons=\"ChartUpIcon\"\n\t\t\t\t\tphosphor=\"TrendUpIcon\"\n\t\t\t\t\tremixicon=\"RiLineChartLine\"\n\t\t\t\t\tclass=\"size-4\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t<div class=\"text-muted-foreground leading-none\">\n\t\t\t\tShowing total visitors for the last 6 months\n\t\t\t</div>\n\t\t</Card.Footer>\n\t</Card.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/chart/chart-line-example.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { LineChart } from \"layerchart\";\n\timport { scaleBand } from \"d3-scale\";\n\timport { curveMonotoneX } from \"d3-shape\";\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\n\tconst lineChartData = [\n\t\t{ month: \"January\", desktop: 186, mobile: 80 },\n\t\t{ month: \"February\", desktop: 305, mobile: 200 },\n\t\t{ month: \"March\", desktop: 237, mobile: 120 },\n\t\t{ month: \"April\", desktop: 73, mobile: 190 },\n\t\t{ month: \"May\", desktop: 209, mobile: 130 },\n\t\t{ month: \"June\", desktop: 214, mobile: 140 },\n\t];\n\n\tconst lineChartConfig = {\n\t\tdesktop: {\n\t\t\tlabel: \"Desktop\",\n\t\t\tcolor: \"var(--chart-1)\",\n\t\t},\n\t\tmobile: {\n\t\t\tlabel: \"Mobile\",\n\t\t\tcolor: \"var(--chart-2)\",\n\t\t},\n\t} satisfies Chart.ChartConfig;\n</script>\n\n<Example title=\"Line Chart\">\n\t<Card.Root class=\"w-full\">\n\t\t<Card.Header>\n\t\t\t<Card.Title>Line Chart - Multiple</Card.Title>\n\t\t\t<Card.Description>January - June 2024</Card.Description>\n\t\t</Card.Header>\n\t\t<Card.Content>\n\t\t\t<Chart.Container config={lineChartConfig}>\n\t\t\t\t<LineChart\n\t\t\t\t\tdata={lineChartData}\n\t\t\t\t\tx=\"month\"\n\t\t\t\t\txScale={scaleBand()}\n\t\t\t\t\taxis=\"x\"\n\t\t\t\t\tseries={[\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tkey: \"desktop\",\n\t\t\t\t\t\t\tlabel: \"Desktop\",\n\t\t\t\t\t\t\tcolor: lineChartConfig.desktop.color,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tkey: \"mobile\",\n\t\t\t\t\t\t\tlabel: \"Mobile\",\n\t\t\t\t\t\t\tcolor: lineChartConfig.mobile.color,\n\t\t\t\t\t\t},\n\t\t\t\t\t]}\n\t\t\t\t\tprops={{\n\t\t\t\t\t\tspline: {\n\t\t\t\t\t\t\tcurve: curveMonotoneX,\n\t\t\t\t\t\t\tstrokeWidth: 2,\n\t\t\t\t\t\t\tmotion: \"tween\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\txAxis: {\n\t\t\t\t\t\t\tformat: (d) => d.slice(0, 3),\n\t\t\t\t\t\t\ttickLength: 0,\n\t\t\t\t\t\t},\n\t\t\t\t\t\thighlight: { points: false },\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{#snippet tooltip()}\n\t\t\t\t\t\t<Chart.Tooltip />\n\t\t\t\t\t{/snippet}\n\t\t\t\t</LineChart>\n\t\t\t</Chart.Container>\n\t\t</Card.Content>\n\t\t<Card.Footer>\n\t\t\t<div class=\"flex w-full items-start gap-2\">\n\t\t\t\t<div class=\"grid gap-2\">\n\t\t\t\t\t<div class=\"flex items-center gap-2 leading-none font-medium\">\n\t\t\t\t\t\tTrending up by 5.2% this month\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"TrendingUpIcon\"\n\t\t\t\t\t\t\ttabler=\"IconTrendingUp\"\n\t\t\t\t\t\t\thugeicons=\"ChartUpIcon\"\n\t\t\t\t\t\t\tphosphor=\"TrendUpIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiLineChartLine\"\n\t\t\t\t\t\t\tclass=\"size-4\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"text-muted-foreground flex items-center gap-2 leading-none\">\n\t\t\t\t\t\tShowing total visitors for the last 6 months\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</Card.Footer>\n\t</Card.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/chart/chart-radar-example.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { LineChart } from \"layerchart\";\n\timport { curveLinearClosed } from \"d3-shape\";\n\timport { scaleBand } from \"d3-scale\";\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\n\tconst radarChartData = [\n\t\t{ month: \"January\", desktop: 186, mobile: 80 },\n\t\t{ month: \"February\", desktop: 305, mobile: 200 },\n\t\t{ month: \"March\", desktop: 237, mobile: 120 },\n\t\t{ month: \"April\", desktop: 73, mobile: 190 },\n\t\t{ month: \"May\", desktop: 209, mobile: 130 },\n\t\t{ month: \"June\", desktop: 214, mobile: 140 },\n\t];\n\n\tconst radarChartConfig = {\n\t\tdesktop: {\n\t\t\tlabel: \"Desktop\",\n\t\t\tcolor: \"var(--chart-1)\",\n\t\t},\n\t\tmobile: {\n\t\t\tlabel: \"Mobile\",\n\t\t\tcolor: \"var(--chart-2)\",\n\t\t},\n\t} satisfies Chart.ChartConfig;\n</script>\n\n<Example title=\"Radar Chart\">\n\t<Card.Root class=\"w-full\">\n\t\t<Card.Header class=\"items-center pb-4\">\n\t\t\t<Card.Title>Radar Chart - Multiple</Card.Title>\n\t\t\t<Card.Description>Showing total visitors for the last 6 months</Card.Description>\n\t\t</Card.Header>\n\t\t<Card.Content class=\"pb-0\">\n\t\t\t<Chart.Container config={radarChartConfig} class=\"mx-auto aspect-square max-h-[250px]\">\n\t\t\t\t<LineChart\n\t\t\t\t\tdata={radarChartData}\n\t\t\t\t\tseries={[\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tkey: \"desktop\",\n\t\t\t\t\t\t\tlabel: \"Desktop\",\n\t\t\t\t\t\t\tcolor: radarChartConfig.desktop.color,\n\t\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\t\tfill: radarChartConfig.desktop.color,\n\t\t\t\t\t\t\t\tfillOpacity: 0.6,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tkey: \"mobile\",\n\t\t\t\t\t\t\tlabel: \"Mobile\",\n\t\t\t\t\t\t\tcolor: radarChartConfig.mobile.color,\n\t\t\t\t\t\t\tprops: {\n\t\t\t\t\t\t\t\tfill: radarChartConfig.mobile.color,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t]}\n\t\t\t\t\tradial\n\t\t\t\t\tx=\"month\"\n\t\t\t\t\txScale={scaleBand()}\n\t\t\t\t\tpadding={12}\n\t\t\t\t\tprops={{\n\t\t\t\t\t\tspline: {\n\t\t\t\t\t\t\tcurve: curveLinearClosed,\n\t\t\t\t\t\t\tstroke: \"0\",\n\t\t\t\t\t\t\tmotion: \"tween\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\txAxis: {\n\t\t\t\t\t\t\ttickLength: 0,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tyAxis: {\n\t\t\t\t\t\t\tformat: () => \"\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\tgrid: {\n\t\t\t\t\t\t\tradialY: \"linear\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttooltip: {\n\t\t\t\t\t\t\tcontext: {\n\t\t\t\t\t\t\t\tmode: \"voronoi\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\thighlight: {\n\t\t\t\t\t\t\tlines: false,\n\t\t\t\t\t\t\tpoints: { r: 4 },\n\t\t\t\t\t\t},\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t{#snippet tooltip()}\n\t\t\t\t\t\t<Chart.Tooltip indicator=\"line\" />\n\t\t\t\t\t{/snippet}\n\t\t\t\t</LineChart>\n\t\t\t</Chart.Container>\n\t\t</Card.Content>\n\t\t<Card.Footer class=\"flex-col gap-2\">\n\t\t\t<div class=\"flex items-center gap-2 leading-none font-medium\">\n\t\t\t\tTrending up by 5.2% this month\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"TrendingUpIcon\"\n\t\t\t\t\ttabler=\"IconTrendingUp\"\n\t\t\t\t\thugeicons=\"ChartUpIcon\"\n\t\t\t\t\tphosphor=\"TrendUpIcon\"\n\t\t\t\t\tremixicon=\"RiLineChartLine\"\n\t\t\t\t\tclass=\"size-4\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t<div class=\"text-muted-foreground flex items-center gap-2 leading-none\">\n\t\t\t\tJanuary - June 2024\n\t\t\t</div>\n\t\t</Card.Footer>\n\t</Card.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/chart/chart-radial-example.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport { ArcChart, Text } from \"layerchart\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\n\tconst radialChartData = [{ browser: \"safari\", visitors: 1260, fill: \"var(--color-safari)\" }];\n\n\tconst radialChartConfig = {\n\t\tvisitors: {\n\t\t\tlabel: \"Visitors\",\n\t\t},\n\t\tsafari: {\n\t\t\tlabel: \"Safari\",\n\t\t\tcolor: \"var(--chart-2)\",\n\t\t},\n\t} satisfies Chart.ChartConfig;\n</script>\n\n<Example title=\"Radial Chart\">\n\t<Card.Root class=\"w-full\">\n\t\t<Card.Header>\n\t\t\t<Card.Title>Radial Chart - Shape</Card.Title>\n\t\t\t<Card.Description>January - June 2024</Card.Description>\n\t\t</Card.Header>\n\t\t<Card.Content class=\"flex-1 pb-0\">\n\t\t\t<Chart.Container config={radialChartConfig} class=\"mx-auto aspect-square max-h-[210px]\">\n\t\t\t\t<ArcChart\n\t\t\t\t\tlabel=\"browser\"\n\t\t\t\t\tvalue=\"visitors\"\n\t\t\t\t\touterRadius={88}\n\t\t\t\t\tinnerRadius={66}\n\t\t\t\t\ttrackOuterRadius={83}\n\t\t\t\t\ttrackInnerRadius={72}\n\t\t\t\t\tpadding={40}\n\t\t\t\t\trange={[90, -270]}\n\t\t\t\t\tmaxValue={radialChartData[0].visitors * 4}\n\t\t\t\t\tseries={radialChartData.map((d) => ({\n\t\t\t\t\t\tkey: d.browser,\n\t\t\t\t\t\tcolor: d.fill,\n\t\t\t\t\t\tdata: [d],\n\t\t\t\t\t}))}\n\t\t\t\t\tprops={{\n\t\t\t\t\t\tarc: { track: { fill: \"var(--muted)\" }, motion: \"tween\" },\n\t\t\t\t\t\ttooltip: { context: { hideDelay: 350 } },\n\t\t\t\t\t}}\n\t\t\t\t\ttooltip={false}\n\t\t\t\t>\n\t\t\t\t\t{#snippet belowMarks()}\n\t\t\t\t\t\t<circle cx=\"0\" cy=\"0\" r=\"80\" class=\"fill-background\" />\n\t\t\t\t\t{/snippet}\n\t\t\t\t\t{#snippet aboveMarks()}\n\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\tvalue={String(radialChartData[0].visitors)}\n\t\t\t\t\t\t\ttextAnchor=\"middle\"\n\t\t\t\t\t\t\tverticalAnchor=\"middle\"\n\t\t\t\t\t\t\tclass=\"fill-foreground text-4xl! font-bold\"\n\t\t\t\t\t\t\tdy={3}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<Text\n\t\t\t\t\t\t\tvalue=\"Visitors\"\n\t\t\t\t\t\t\ttextAnchor=\"middle\"\n\t\t\t\t\t\t\tverticalAnchor=\"middle\"\n\t\t\t\t\t\t\tclass=\"fill-muted-foreground!\"\n\t\t\t\t\t\t\tdy={22}\n\t\t\t\t\t\t/>\n\t\t\t\t\t{/snippet}\n\t\t\t\t</ArcChart>\n\t\t\t</Chart.Container>\n\t\t</Card.Content>\n\t\t<Card.Footer class=\"flex-col gap-2\">\n\t\t\t<div class=\"flex items-center gap-2 leading-none font-medium\">\n\t\t\t\tTrending up by 5.2% this month\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"TrendingUpIcon\"\n\t\t\t\t\ttabler=\"IconTrendingUp\"\n\t\t\t\t\thugeicons=\"ChartUpIcon\"\n\t\t\t\t\tphosphor=\"TrendUpIcon\"\n\t\t\t\t\tremixicon=\"RiLineChartLine\"\n\t\t\t\t\tclass=\"size-4\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t<div class=\"text-muted-foreground leading-none\">\n\t\t\t\tShowing total visitors for the last 6 months\n\t\t\t</div>\n\t\t</Card.Footer>\n\t</Card.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/chart/chart.svelte",
    "content": "<script lang=\"ts\">\n\timport ExampleWrapper from \"../../../../../routes/(app)/(layout)/(create)/components/example-wrapper.svelte\";\n\timport ChartAreaExample from \"./chart-area-example.svelte\";\n\timport ChartBarExample from \"./chart-bar-example.svelte\";\n\timport ChartLineExample from \"./chart-line-example.svelte\";\n\timport ChartRadialExample from \"./chart-radial-example.svelte\";\n\timport ChartRadarExample from \"./chart-radar-example.svelte\";\n</script>\n\n<ExampleWrapper>\n\t<ChartAreaExample />\n\t<ChartBarExample />\n\t<ChartLineExample />\n\t<ChartRadialExample />\n\t<ChartRadarExample />\n</ExampleWrapper>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/chatgpt/chatgpt.svelte",
    "content": "<script lang=\"ts\">\n\timport ExampleWrapper from \"../../../../../routes/(app)/(layout)/(create)/components/example-wrapper.svelte\";\n\timport PromptForm from \"./prompt-form.svelte\";\n\timport ModelSelector from \"./model-selector.svelte\";\n\timport GroupChatDialog from \"./group-chat-dialog.svelte\";\n\timport CreateProjectForm from \"./create-project-form.svelte\";\n</script>\n\n<ExampleWrapper>\n\t<PromptForm />\n\t<ModelSelector />\n\t<GroupChatDialog />\n\t<CreateProjectForm />\n</ExampleWrapper>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/chatgpt/create-project-form.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport * as InputGroup from \"$lib/registry/ui/input-group/index.js\";\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\timport * as Popover from \"$lib/registry/ui/popover/index.js\";\n\timport { badgeVariants } from \"$lib/registry/ui/badge/index.js\";\n\timport { Alert, AlertDescription } from \"$lib/registry/ui/alert/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Item from \"$lib/registry/ui/item/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tconst categories = [\n\t\t{\n\t\t\tid: \"homework\",\n\t\t\tlabel: \"Homework\",\n\t\t},\n\t\t{\n\t\t\tid: \"writing\",\n\t\t\tlabel: \"Writing\",\n\t\t},\n\t\t{\n\t\t\tid: \"health\",\n\t\t\tlabel: \"Health\",\n\t\t},\n\t\t{\n\t\t\tid: \"travel\",\n\t\t\tlabel: \"Travel\",\n\t\t},\n\t];\n\n\tlet projectName = $state(\"\");\n\tlet selectedCategory = $state<string | null>(categories[0].id);\n\tlet memorySetting = $state<\"default\" | \"project-only\">(\"default\");\n\tlet selectedColor = $state<string | null>(\"var(--foreground)\");\n</script>\n\n<Example title=\"Create Project\" class=\"items-center justify-center\">\n\t<Card.Root class=\"w-full max-w-sm\">\n\t\t<Card.Header>\n\t\t\t<Card.Title>Create Project</Card.Title>\n\t\t\t<Card.Description>\n\t\t\t\tStart a new project to keep chats, files, and custom instructions in one place.\n\t\t\t</Card.Description>\n\t\t\t<Card.Action>\n\t\t\t\t<DropdownMenu.Root>\n\t\t\t\t\t<DropdownMenu.Trigger>\n\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t<Button variant=\"ghost\" size=\"icon\" {...props}>\n\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\tlucide=\"SettingsIcon\"\n\t\t\t\t\t\t\t\t\ttabler=\"IconSettings\"\n\t\t\t\t\t\t\t\t\thugeicons=\"Settings01Icon\"\n\t\t\t\t\t\t\t\t\tphosphor=\"GearIcon\"\n\t\t\t\t\t\t\t\t\tremixicon=\"RiSettingsLine\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<span class=\"sr-only\">Memory</span>\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t</DropdownMenu.Trigger>\n\t\t\t\t\t<DropdownMenu.Content align=\"end\" class=\"w-72\">\n\t\t\t\t\t\t<DropdownMenu.Group>\n\t\t\t\t\t\t\t<DropdownMenu.RadioGroup bind:value={memorySetting}>\n\t\t\t\t\t\t\t\t<DropdownMenu.RadioItem value=\"default\">\n\t\t\t\t\t\t\t\t\t<Item.Root size=\"xs\">\n\t\t\t\t\t\t\t\t\t\t<Item.Content>\n\t\t\t\t\t\t\t\t\t\t\t<Item.Title>Default</Item.Title>\n\t\t\t\t\t\t\t\t\t\t\t<Item.Description class=\"text-xs\">\n\t\t\t\t\t\t\t\t\t\t\t\tProject can access memories from outside chats, and\n\t\t\t\t\t\t\t\t\t\t\t\tvice versa.\n\t\t\t\t\t\t\t\t\t\t\t</Item.Description>\n\t\t\t\t\t\t\t\t\t\t</Item.Content>\n\t\t\t\t\t\t\t\t\t</Item.Root>\n\t\t\t\t\t\t\t\t</DropdownMenu.RadioItem>\n\t\t\t\t\t\t\t\t<DropdownMenu.RadioItem value=\"project-only\">\n\t\t\t\t\t\t\t\t\t<Item.Root size=\"xs\">\n\t\t\t\t\t\t\t\t\t\t<Item.Content>\n\t\t\t\t\t\t\t\t\t\t\t<Item.Title>Project Only</Item.Title>\n\t\t\t\t\t\t\t\t\t\t\t<Item.Description class=\"text-xs\">\n\t\t\t\t\t\t\t\t\t\t\t\tProject can only access its own memories. Its\n\t\t\t\t\t\t\t\t\t\t\t\tmemories are hidden from outside chats.\n\t\t\t\t\t\t\t\t\t\t\t</Item.Description>\n\t\t\t\t\t\t\t\t\t\t</Item.Content>\n\t\t\t\t\t\t\t\t\t</Item.Root>\n\t\t\t\t\t\t\t\t</DropdownMenu.RadioItem>\n\t\t\t\t\t\t\t</DropdownMenu.RadioGroup>\n\t\t\t\t\t\t</DropdownMenu.Group>\n\t\t\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t\t\t<DropdownMenu.Group>\n\t\t\t\t\t\t\t<DropdownMenu.Label>\n\t\t\t\t\t\t\t\tNote that this setting can&apos;t be changed later.\n\t\t\t\t\t\t\t</DropdownMenu.Label>\n\t\t\t\t\t\t</DropdownMenu.Group>\n\t\t\t\t\t</DropdownMenu.Content>\n\t\t\t\t</DropdownMenu.Root>\n\t\t\t</Card.Action>\n\t\t</Card.Header>\n\t\t<Card.Content>\n\t\t\t<Field.Group>\n\t\t\t\t<Field.Field>\n\t\t\t\t\t<Field.Label for=\"project-name\" class=\"sr-only\">Project Name</Field.Label>\n\t\t\t\t\t<InputGroup.Root>\n\t\t\t\t\t\t<InputGroup.Input\n\t\t\t\t\t\t\tid=\"project-name\"\n\t\t\t\t\t\t\tplaceholder=\"Copenhagen Trip\"\n\t\t\t\t\t\t\tvalue={projectName}\n\t\t\t\t\t\t\toninput={(e) => {\n\t\t\t\t\t\t\t\tprojectName = e.currentTarget.value;\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<InputGroup.Addon>\n\t\t\t\t\t\t\t<Popover.Root>\n\t\t\t\t\t\t\t\t<Popover.Trigger>\n\t\t\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t\t\t<InputGroup.Button\n\t\t\t\t\t\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\t\t\t\t\t\tsize=\"icon-xs\"\n\t\t\t\t\t\t\t\t\t\t\t{...props}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\t\t\tstyle={`--color: ${selectedColor}`}\n\t\t\t\t\t\t\t\t\t\t\t\tlucide=\"FolderIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\ttabler=\"IconFolder\"\n\t\t\t\t\t\t\t\t\t\t\t\thugeicons=\"FolderIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\tphosphor=\"FolderIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\tremixicon=\"RiFolderLine\"\n\t\t\t\t\t\t\t\t\t\t\t\tclass=\"text-(--color)\"\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t</InputGroup.Button>\n\t\t\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t\t\t</Popover.Trigger>\n\t\t\t\t\t\t\t\t<Popover.Content align=\"start\" class=\"w-60 p-3\">\n\t\t\t\t\t\t\t\t\t<div class=\"flex flex-wrap gap-2\">\n\t\t\t\t\t\t\t\t\t\t{#each [\"var(--foreground)\", \"#fa423e\", \"#f59e0b\", \"#8b5cf6\", \"#ec4899\", \"#10b981\", \"#6366f1\", \"#14b8a6\", \"#f97316\", \"#fbbc04\"] as color (color)}\n\t\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t\tsize=\"icon\"\n\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\t\t\t\t\t\t\tclass=\"rounded-full p-1\"\n\t\t\t\t\t\t\t\t\t\t\t\tstyle={`--color: ${color}`}\n\t\t\t\t\t\t\t\t\t\t\t\tdata-checked={selectedColor === color}\n\t\t\t\t\t\t\t\t\t\t\t\tonclick={() => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tselectedColor = color;\n\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"group-data-[checked=true]/button:ring-offset-background size-5 rounded-full bg-(--color) ring-2 ring-transparent ring-offset-2 ring-offset-(--color) group-data-[checked=true]/button:ring-(--color)\"\n\t\t\t\t\t\t\t\t\t\t\t\t></span>\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"sr-only\">{color}</span>\n\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</Popover.Content>\n\t\t\t\t\t\t\t</Popover.Root>\n\t\t\t\t\t\t</InputGroup.Addon>\n\t\t\t\t\t</InputGroup.Root>\n\t\t\t\t\t<Field.Description class=\"flex flex-wrap gap-2\">\n\t\t\t\t\t\t{#each categories as category (category.id)}\n\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tonclick={() => {\n\t\t\t\t\t\t\t\t\tselectedCategory =\n\t\t\t\t\t\t\t\t\t\tselectedCategory === category.id ? null : category.id;\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tdata-checked={selectedCategory === category.id}\n\t\t\t\t\t\t\t\tclass={cn(\n\t\t\t\t\t\t\t\t\tbadgeVariants({\n\t\t\t\t\t\t\t\t\t\tvariant:\n\t\t\t\t\t\t\t\t\t\t\tselectedCategory === category.id\n\t\t\t\t\t\t\t\t\t\t\t\t? \"default\"\n\t\t\t\t\t\t\t\t\t\t\t\t: \"outline\",\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t\"group/badge cursor-pointer\"\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\tlucide=\"CircleCheckIcon\"\n\t\t\t\t\t\t\t\t\ttabler=\"IconCircleCheck\"\n\t\t\t\t\t\t\t\t\thugeicons=\"CheckmarkCircle02Icon\"\n\t\t\t\t\t\t\t\t\tphosphor=\"CheckCircleIcon\"\n\t\t\t\t\t\t\t\t\tremixicon=\"RiCheckboxCircleLine\"\n\t\t\t\t\t\t\t\t\tdata-icon=\"inline-start\"\n\t\t\t\t\t\t\t\t\tclass=\"hidden group-data-[checked=true]/badge:inline\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t{category.label}\n\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</Field.Description>\n\t\t\t\t</Field.Field>\n\t\t\t\t<Field.Field>\n\t\t\t\t\t<Alert class=\"bg-muted\">\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"LightbulbIcon\"\n\t\t\t\t\t\t\ttabler=\"IconBulb\"\n\t\t\t\t\t\t\thugeicons=\"BulbIcon\"\n\t\t\t\t\t\t\tphosphor=\"LightbulbIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiLightbulbLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<AlertDescription class=\"text-xs\">\n\t\t\t\t\t\t\tProjects keep chats, files, and custom instructions in one place. Use\n\t\t\t\t\t\t\tthem for ongoing work, or just to keep things tidy.\n\t\t\t\t\t\t</AlertDescription>\n\t\t\t\t\t</Alert>\n\t\t\t\t</Field.Field>\n\t\t\t</Field.Group>\n\t\t</Card.Content>\n\t</Card.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/chatgpt/group-chat-dialog.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as AlertDialog from \"$lib/registry/ui/alert-dialog/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n</script>\n\n<Example title=\"Group Chat Dialog\" class=\"items-center justify-center\">\n\t<AlertDialog.Root>\n\t\t<AlertDialog.Trigger>\n\t\t\t<Button>Start Group Chat</Button>\n\t\t</AlertDialog.Trigger>\n\t\t<AlertDialog.Content>\n\t\t\t<AlertDialog.Header>\n\t\t\t\t<AlertDialog.Title>Use ChatGPT together</AlertDialog.Title>\n\t\t\t\t<AlertDialog.Description>\n\t\t\t\t\tAdd people to your chats to plan, share ideas, and get creative.\n\t\t\t\t</AlertDialog.Description>\n\t\t\t</AlertDialog.Header>\n\t\t\t<AlertDialog.Footer class=\"flex-row items-center justify-between sm:justify-between\">\n\t\t\t\t<a\n\t\t\t\t\thref=\"#/\"\n\t\t\t\t\tclass=\"text-muted-foreground hover:text-foreground text-sm underline underline-offset-4\"\n\t\t\t\t>\n\t\t\t\t\tLearn more\n\t\t\t\t</a>\n\t\t\t\t<div class=\"flex gap-2\">\n\t\t\t\t\t<AlertDialog.Cancel>Cancel</AlertDialog.Cancel>\n\t\t\t\t\t<AlertDialog.Action>Start group chat</AlertDialog.Action>\n\t\t\t\t</div>\n\t\t\t</AlertDialog.Footer>\n\t\t</AlertDialog.Content>\n\t</AlertDialog.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/chatgpt/model-selector.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\timport { buttonVariants } from \"$lib/registry/ui/button/index.js\";\n\timport * as Item from \"$lib/registry/ui/item/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet mode = $state(\"auto\");\n\tlet model = $state(\"gpt-5.1\");\n</script>\n\n<Example title=\"Model Selector\">\n\t<DropdownMenu.Root>\n\t\t<DropdownMenu.Trigger class={cn(buttonVariants({ variant: \"ghost\", size: \"sm\" }), \"gap-2\")}>\n\t\t\tChatGPT 5.1\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ChevronDownIcon\"\n\t\t\t\ttabler=\"IconChevronDown\"\n\t\t\t\thugeicons=\"ArrowDown01Icon\"\n\t\t\t\tphosphor=\"CaretDownIcon\"\n\t\t\t\tremixicon=\"RiArrowDownSLine\"\n\t\t\t\tclass=\"text-muted-foreground size-4\"\n\t\t\t/>\n\t\t</DropdownMenu.Trigger>\n\t\t<DropdownMenu.Content class=\"w-60\" align=\"start\">\n\t\t\t<DropdownMenu.Group>\n\t\t\t\t<DropdownMenu.Label class=\"text-muted-foreground text-xs font-normal\">\n\t\t\t\t\tGPT-5.1\n\t\t\t\t</DropdownMenu.Label>\n\t\t\t\t<DropdownMenu.RadioGroup bind:value={mode}>\n\t\t\t\t\t<DropdownMenu.RadioItem value=\"auto\">\n\t\t\t\t\t\t<Item.Root size=\"xs\" class=\"p-0\">\n\t\t\t\t\t\t\t<Item.Content>\n\t\t\t\t\t\t\t\t<Item.Title>Auto</Item.Title>\n\t\t\t\t\t\t\t\t<Item.Description class=\"text-xs\">\n\t\t\t\t\t\t\t\t\tDecides how long to think\n\t\t\t\t\t\t\t\t</Item.Description>\n\t\t\t\t\t\t\t</Item.Content>\n\t\t\t\t\t\t</Item.Root>\n\t\t\t\t\t</DropdownMenu.RadioItem>\n\t\t\t\t\t<DropdownMenu.RadioItem value=\"instant\">\n\t\t\t\t\t\t<Item.Root size=\"xs\" class=\"p-0\">\n\t\t\t\t\t\t\t<Item.Content>\n\t\t\t\t\t\t\t\t<Item.Title>Instant</Item.Title>\n\t\t\t\t\t\t\t\t<Item.Description class=\"text-xs\">\n\t\t\t\t\t\t\t\t\tAnswers right away\n\t\t\t\t\t\t\t\t</Item.Description>\n\t\t\t\t\t\t\t</Item.Content>\n\t\t\t\t\t\t</Item.Root>\n\t\t\t\t\t</DropdownMenu.RadioItem>\n\t\t\t\t\t<DropdownMenu.RadioItem value=\"thinking\">\n\t\t\t\t\t\t<Item.Root size=\"xs\" class=\"p-0\">\n\t\t\t\t\t\t\t<Item.Content>\n\t\t\t\t\t\t\t\t<Item.Title>Thinking</Item.Title>\n\t\t\t\t\t\t\t\t<Item.Description class=\"text-xs\">\n\t\t\t\t\t\t\t\t\tThinks longer for better answers\n\t\t\t\t\t\t\t\t</Item.Description>\n\t\t\t\t\t\t\t</Item.Content>\n\t\t\t\t\t\t</Item.Root>\n\t\t\t\t\t</DropdownMenu.RadioItem>\n\t\t\t\t</DropdownMenu.RadioGroup>\n\t\t\t</DropdownMenu.Group>\n\t\t\t<DropdownMenu.Separator />\n\t\t\t<DropdownMenu.Sub>\n\t\t\t\t<DropdownMenu.SubTrigger>\n\t\t\t\t\t<span class=\"font-medium\">Legacy models</span>\n\t\t\t\t</DropdownMenu.SubTrigger>\n\t\t\t\t<DropdownMenu.Portal>\n\t\t\t\t\t<DropdownMenu.SubContent>\n\t\t\t\t\t\t<DropdownMenu.Group>\n\t\t\t\t\t\t\t<DropdownMenu.RadioGroup bind:value={model}>\n\t\t\t\t\t\t\t\t<DropdownMenu.RadioItem value=\"gpt-4\">GPT-4</DropdownMenu.RadioItem>\n\t\t\t\t\t\t\t\t<DropdownMenu.RadioItem value=\"gpt-4-turbo\"\n\t\t\t\t\t\t\t\t\t>GPT-4 Turbo</DropdownMenu.RadioItem\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<DropdownMenu.RadioItem value=\"gpt-3.5\"\n\t\t\t\t\t\t\t\t\t>GPT-3.5</DropdownMenu.RadioItem\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t</DropdownMenu.RadioGroup>\n\t\t\t\t\t\t</DropdownMenu.Group>\n\t\t\t\t\t</DropdownMenu.SubContent>\n\t\t\t\t</DropdownMenu.Portal>\n\t\t\t</DropdownMenu.Sub>\n\t\t</DropdownMenu.Content>\n\t</DropdownMenu.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/chatgpt/prompt-form.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport * as InputGroup from \"$lib/registry/ui/input-group/index.js\";\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\timport * as Tooltip from \"$lib/registry/ui/tooltip/index.js\";\n\timport * as Kbd from \"$lib/registry/ui/kbd/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\n\tlet dictateEnabled = $state(false);\n</script>\n\n<Example title=\"Prompt Form\">\n\t<Field.Field>\n\t\t<Field.Label for=\"prompt\" class=\"sr-only\">Prompt</Field.Label>\n\t\t<InputGroup.Root>\n\t\t\t<InputGroup.Textarea id=\"prompt\" placeholder=\"Ask anything\" />\n\t\t\t<InputGroup.Addon align=\"block-end\">\n\t\t\t\t<Tooltip.Root>\n\t\t\t\t\t<DropdownMenu.Root>\n\t\t\t\t\t\t<Tooltip.Trigger>\n\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t<DropdownMenu.Trigger>\n\t\t\t\t\t\t\t\t\t{#snippet child({ props: triggerProps })}\n\t\t\t\t\t\t\t\t\t\t<InputGroup.Button\n\t\t\t\t\t\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\t\t\t\t\t\tsize=\"icon-sm\"\n\t\t\t\t\t\t\t\t\t\t\tonclick={() => (dictateEnabled = !dictateEnabled)}\n\t\t\t\t\t\t\t\t\t\t\tclass=\"rounded-4xl\"\n\t\t\t\t\t\t\t\t\t\t\t{...props}\n\t\t\t\t\t\t\t\t\t\t\t{...triggerProps}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\t\t\tlucide=\"PlusIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\ttabler=\"IconPlus\"\n\t\t\t\t\t\t\t\t\t\t\t\thugeicons=\"PlusSignIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\tphosphor=\"PlusIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\tremixicon=\"RiAddLine\"\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t</InputGroup.Button>\n\t\t\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t\t\t</DropdownMenu.Trigger>\n\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t</Tooltip.Trigger>\n\t\t\t\t\t\t<Tooltip.Content>\n\t\t\t\t\t\t\tAdd files and more <Kbd.Root>/</Kbd.Root>\n\t\t\t\t\t\t</Tooltip.Content>\n\t\t\t\t\t\t<DropdownMenu.Content class=\"w-56\">\n\t\t\t\t\t\t\t<DropdownMenu.Group>\n\t\t\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\tlucide=\"PaperclipIcon\"\n\t\t\t\t\t\t\t\t\t\ttabler=\"IconPaperclip\"\n\t\t\t\t\t\t\t\t\t\thugeicons=\"AttachmentIcon\"\n\t\t\t\t\t\t\t\t\t\tphosphor=\"PaperclipIcon\"\n\t\t\t\t\t\t\t\t\t\tremixicon=\"RiAttachmentLine\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\tAdd photos & files\n\t\t\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\tlucide=\"SparklesIcon\"\n\t\t\t\t\t\t\t\t\t\ttabler=\"IconSparkles\"\n\t\t\t\t\t\t\t\t\t\thugeicons=\"SparklesIcon\"\n\t\t\t\t\t\t\t\t\t\tphosphor=\"SparkleIcon\"\n\t\t\t\t\t\t\t\t\t\tremixicon=\"RiSparklingLine\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\tDeep research\n\t\t\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\tlucide=\"ShoppingBagIcon\"\n\t\t\t\t\t\t\t\t\t\ttabler=\"IconShoppingBag\"\n\t\t\t\t\t\t\t\t\t\thugeicons=\"ShoppingBag01Icon\"\n\t\t\t\t\t\t\t\t\t\tphosphor=\"BagIcon\"\n\t\t\t\t\t\t\t\t\t\tremixicon=\"RiShoppingBagLine\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\tShopping research\n\t\t\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\tlucide=\"WandIcon\"\n\t\t\t\t\t\t\t\t\t\ttabler=\"IconWand\"\n\t\t\t\t\t\t\t\t\t\thugeicons=\"MagicWand05Icon\"\n\t\t\t\t\t\t\t\t\t\tphosphor=\"MagicWandIcon\"\n\t\t\t\t\t\t\t\t\t\tremixicon=\"RiMagicLine\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\tCreate image\n\t\t\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t\t\t<Tooltip.Root>\n\t\t\t\t\t\t\t\t\t<Tooltip.Trigger>\n\t\t\t\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t\t\t\t<DropdownMenu.Item {...props}>\n\t\t\t\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\t\t\t\tlucide=\"MousePointerIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\ttabler=\"IconPointer\"\n\t\t\t\t\t\t\t\t\t\t\t\t\thugeicons=\"Cursor01Icon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tphosphor=\"HandPointingIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tremixicon=\"RiCursorLine\"\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\tAgent mode\n\t\t\t\t\t\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t\t\t\t</Tooltip.Trigger>\n\t\t\t\t\t\t\t\t\t<Tooltip.Content side=\"right\">\n\t\t\t\t\t\t\t\t\t\t<div class=\"font-medium\">35 left</div>\n\t\t\t\t\t\t\t\t\t\t<div class=\"text-primary-foreground/80 text-xs\">\n\t\t\t\t\t\t\t\t\t\t\tMore available for purchase\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</Tooltip.Content>\n\t\t\t\t\t\t\t\t</Tooltip.Root>\n\t\t\t\t\t\t\t</DropdownMenu.Group>\n\t\t\t\t\t\t\t<DropdownMenu.Sub>\n\t\t\t\t\t\t\t\t<DropdownMenu.SubTrigger>\n\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\tlucide=\"MoreHorizontalIcon\"\n\t\t\t\t\t\t\t\t\t\ttabler=\"IconDots\"\n\t\t\t\t\t\t\t\t\t\thugeicons=\"MoreHorizontalCircle01Icon\"\n\t\t\t\t\t\t\t\t\t\tphosphor=\"DotsThreeOutlineIcon\"\n\t\t\t\t\t\t\t\t\t\tremixicon=\"RiMoreLine\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\tMore\n\t\t\t\t\t\t\t\t</DropdownMenu.SubTrigger>\n\t\t\t\t\t\t\t\t<DropdownMenu.Portal>\n\t\t\t\t\t\t\t\t\t<DropdownMenu.SubContent>\n\t\t\t\t\t\t\t\t\t\t<DropdownMenu.Group>\n\t\t\t\t\t\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\t\t\t\tlucide=\"ShareIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\ttabler=\"IconShare\"\n\t\t\t\t\t\t\t\t\t\t\t\t\thugeicons=\"Share03Icon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tphosphor=\"ShareIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tremixicon=\"RiShareLine\"\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\tAdd sources\n\t\t\t\t\t\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\t\t\t\tlucide=\"BookOpenIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\ttabler=\"IconBook\"\n\t\t\t\t\t\t\t\t\t\t\t\t\thugeicons=\"BookIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tphosphor=\"BookOpenIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tremixicon=\"RiBookOpenLine\"\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\tStudy and learn\n\t\t\t\t\t\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\t\t\t\tlucide=\"GlobeIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\ttabler=\"IconWorld\"\n\t\t\t\t\t\t\t\t\t\t\t\t\thugeicons=\"GlobalIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tphosphor=\"GlobeIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tremixicon=\"RiGlobalLine\"\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\tWeb search\n\t\t\t\t\t\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\t\t\t\tlucide=\"PenToolIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\ttabler=\"IconPencil\"\n\t\t\t\t\t\t\t\t\t\t\t\t\thugeicons=\"PenIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tphosphor=\"PencilIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tremixicon=\"RiPencilLine\"\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\tCanvas\n\t\t\t\t\t\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t\t\t\t\t</DropdownMenu.Group>\n\t\t\t\t\t\t\t\t\t</DropdownMenu.SubContent>\n\t\t\t\t\t\t\t\t</DropdownMenu.Portal>\n\t\t\t\t\t\t\t</DropdownMenu.Sub>\n\t\t\t\t\t\t</DropdownMenu.Content>\n\t\t\t\t\t</DropdownMenu.Root>\n\t\t\t\t</Tooltip.Root>\n\t\t\t\t<Tooltip.Root>\n\t\t\t\t\t<Tooltip.Trigger>\n\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t<InputGroup.Button\n\t\t\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\t\t\tsize=\"icon-sm\"\n\t\t\t\t\t\t\t\tonclick={() => (dictateEnabled = !dictateEnabled)}\n\t\t\t\t\t\t\t\tclass=\"ml-auto rounded-4xl\"\n\t\t\t\t\t\t\t\t{...props}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\tlucide=\"AudioLinesIcon\"\n\t\t\t\t\t\t\t\t\ttabler=\"IconMicrophone\"\n\t\t\t\t\t\t\t\t\thugeicons=\"AudioWave01Icon\"\n\t\t\t\t\t\t\t\t\tphosphor=\"MicrophoneIcon\"\n\t\t\t\t\t\t\t\t\tremixicon=\"RiMicLine\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</InputGroup.Button>\n\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t</Tooltip.Trigger>\n\t\t\t\t\t<Tooltip.Content>Dictate</Tooltip.Content>\n\t\t\t\t</Tooltip.Root>\n\t\t\t\t<InputGroup.Button size=\"icon-sm\" variant=\"default\" class=\"rounded-4xl\">\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"ArrowUpIcon\"\n\t\t\t\t\t\ttabler=\"IconArrowUp\"\n\t\t\t\t\t\thugeicons=\"ArrowUp02Icon\"\n\t\t\t\t\t\tphosphor=\"ArrowUpIcon\"\n\t\t\t\t\t\tremixicon=\"RiArrowUpLine\"\n\t\t\t\t\t/>\n\t\t\t\t</InputGroup.Button>\n\t\t\t</InputGroup.Addon>\n\t\t</InputGroup.Root>\n\t</Field.Field>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/checkbox/checkbox-basic.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Checkbox from \"$lib/registry/ui/checkbox/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n</script>\n\n<Example title=\"Basic\">\n\t<Field.Field orientation=\"horizontal\">\n\t\t<Checkbox.Root id=\"terms\" />\n\t\t<Field.Label for=\"terms\">Accept terms and conditions</Field.Label>\n\t</Field.Field>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/checkbox/checkbox-disabled.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Checkbox from \"$lib/registry/ui/checkbox/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n</script>\n\n<Example title=\"Disabled\">\n\t<Field.Field orientation=\"horizontal\">\n\t\t<Checkbox.Root id=\"toggle\" disabled />\n\t\t<Field.Label for=\"toggle\">Enable notifications</Field.Label>\n\t</Field.Field>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/checkbox/checkbox-group.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Checkbox from \"$lib/registry/ui/checkbox/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n</script>\n\n<Example title=\"Group\">\n\t<Field.Field>\n\t\t<Field.Label>Show these items on the desktop:</Field.Label>\n\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t<Checkbox.Root id=\"finder-pref-9k2-hard-disks-ljj\" />\n\t\t\t<Field.Label for=\"finder-pref-9k2-hard-disks-ljj\" class=\"font-normal\">\n\t\t\t\tHard disks\n\t\t\t</Field.Label>\n\t\t</Field.Field>\n\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t<Checkbox.Root id=\"finder-pref-9k2-external-disks-1yg\" />\n\t\t\t<Field.Label for=\"finder-pref-9k2-external-disks-1yg\" class=\"font-normal\">\n\t\t\t\tExternal disks\n\t\t\t</Field.Label>\n\t\t</Field.Field>\n\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t<Checkbox.Root id=\"finder-pref-9k2-cds-dvds-fzt\" />\n\t\t\t<Field.Label for=\"finder-pref-9k2-cds-dvds-fzt\" class=\"font-normal\">\n\t\t\t\tCDs, DVDs, and iPods\n\t\t\t</Field.Label>\n\t\t</Field.Field>\n\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t<Checkbox.Root id=\"finder-pref-9k2-connected-servers-6l2\" />\n\t\t\t<Field.Label for=\"finder-pref-9k2-connected-servers-6l2\" class=\"font-normal\">\n\t\t\t\tConnected servers\n\t\t\t</Field.Label>\n\t\t</Field.Field>\n\t</Field.Field>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/checkbox/checkbox-in-table.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Checkbox from \"$lib/registry/ui/checkbox/index.js\";\n\timport * as Table from \"$lib/registry/ui/table/index.js\";\n\timport { SvelteSet } from \"svelte/reactivity\";\n\n\tconst tableData = [\n\t\t{\n\t\t\tid: \"1\",\n\t\t\tname: \"Sarah Chen\",\n\t\t\temail: \"sarah.chen@example.com\",\n\t\t\trole: \"Admin\",\n\t\t},\n\t\t{\n\t\t\tid: \"2\",\n\t\t\tname: \"Marcus Rodriguez\",\n\t\t\temail: \"marcus.rodriguez@example.com\",\n\t\t\trole: \"User\",\n\t\t},\n\t\t{\n\t\t\tid: \"3\",\n\t\t\tname: \"Priya Patel\",\n\t\t\temail: \"priya.patel@example.com\",\n\t\t\trole: \"User\",\n\t\t},\n\t\t{\n\t\t\tid: \"4\",\n\t\t\tname: \"David Kim\",\n\t\t\temail: \"david.kim@example.com\",\n\t\t\trole: \"Editor\",\n\t\t},\n\t];\n\n\tlet selectedRows = new SvelteSet([\"1\"]);\n\n\tconst selectAll = $derived(selectedRows.size === tableData.length);\n\n\tfunction handleSelectAll(checked: boolean | \"indeterminate\") {\n\t\tif (checked === true) {\n\t\t\tfor (const row of tableData) {\n\t\t\t\tselectedRows.add(row.id);\n\t\t\t}\n\t\t} else {\n\t\t\tselectedRows.clear();\n\t\t}\n\t}\n\n\tfunction handleSelectRow(id: string, checked: boolean | \"indeterminate\") {\n\t\tif (checked === true) {\n\t\t\tselectedRows.add(id);\n\t\t} else {\n\t\t\tselectedRows.delete(id);\n\t\t}\n\t}\n</script>\n\n<Example title=\"In Table\">\n\t<Table.Root>\n\t\t<Table.Header>\n\t\t\t<Table.Row>\n\t\t\t\t<Table.Head class=\"w-8\">\n\t\t\t\t\t<Checkbox.Root\n\t\t\t\t\t\tid=\"select-all\"\n\t\t\t\t\t\tchecked={selectAll}\n\t\t\t\t\t\tindeterminate={!selectAll && selectedRows.size > 0}\n\t\t\t\t\t\tonCheckedChange={handleSelectAll}\n\t\t\t\t\t/>\n\t\t\t\t</Table.Head>\n\t\t\t\t<Table.Head>Name</Table.Head>\n\t\t\t\t<Table.Head>Email</Table.Head>\n\t\t\t\t<Table.Head>Role</Table.Head>\n\t\t\t</Table.Row>\n\t\t</Table.Header>\n\t\t<Table.Body>\n\t\t\t{#each tableData as row (row.id)}\n\t\t\t\t<Table.Row data-state={selectedRows.has(row.id) ? \"selected\" : undefined}>\n\t\t\t\t\t<Table.Cell>\n\t\t\t\t\t\t<Checkbox.Root\n\t\t\t\t\t\t\tid={`row-${row.id}`}\n\t\t\t\t\t\t\tchecked={selectedRows.has(row.id)}\n\t\t\t\t\t\t\tonCheckedChange={(checked) => handleSelectRow(row.id, checked)}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Table.Cell>\n\t\t\t\t\t<Table.Cell class=\"font-medium\">{row.name}</Table.Cell>\n\t\t\t\t\t<Table.Cell>{row.email}</Table.Cell>\n\t\t\t\t\t<Table.Cell>{row.role}</Table.Cell>\n\t\t\t\t</Table.Row>\n\t\t\t{/each}\n\t\t</Table.Body>\n\t</Table.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/checkbox/checkbox-invalid.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Checkbox from \"$lib/registry/ui/checkbox/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n</script>\n\n<Example title=\"Invalid\">\n\t<Field.Field orientation=\"horizontal\" data-invalid>\n\t\t<Checkbox.Root id=\"terms-3\" aria-invalid />\n\t\t<Field.Label for=\"terms-3\">Accept terms and conditions</Field.Label>\n\t</Field.Field>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/checkbox/checkbox-with-description.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Checkbox from \"$lib/registry/ui/checkbox/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n</script>\n\n<Example title=\"With Description\">\n\t<Field.Field orientation=\"horizontal\">\n\t\t<Checkbox.Root id=\"terms-2\" checked />\n\t\t<Field.Content>\n\t\t\t<Field.Label for=\"terms-2\">Accept terms and conditions</Field.Label>\n\t\t\t<Field.Description>\n\t\t\t\tBy clicking this checkbox, you agree to the terms and conditions.\n\t\t\t</Field.Description>\n\t\t</Field.Content>\n\t</Field.Field>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/checkbox/checkbox-with-title.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Checkbox from \"$lib/registry/ui/checkbox/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n</script>\n\n<Example title=\"With Title\">\n\t<Field.Group>\n\t\t<Field.Label for=\"toggle-2\">\n\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t<Checkbox.Root id=\"toggle-2\" checked />\n\t\t\t\t<Field.Content>\n\t\t\t\t\t<Field.Title>Enable notifications</Field.Title>\n\t\t\t\t\t<Field.Description>\n\t\t\t\t\t\tYou can enable or disable notifications at any time.\n\t\t\t\t\t</Field.Description>\n\t\t\t\t</Field.Content>\n\t\t\t</Field.Field>\n\t\t</Field.Label>\n\t\t<Field.Label for=\"toggle-4\">\n\t\t\t<Field.Field orientation=\"horizontal\" data-disabled>\n\t\t\t\t<Checkbox.Root id=\"toggle-4\" disabled />\n\t\t\t\t<Field.Content>\n\t\t\t\t\t<Field.Title>Enable notifications</Field.Title>\n\t\t\t\t\t<Field.Description>\n\t\t\t\t\t\tYou can enable or disable notifications at any time.\n\t\t\t\t\t</Field.Description>\n\t\t\t\t</Field.Content>\n\t\t\t</Field.Field>\n\t\t</Field.Label>\n\t</Field.Group>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/checkbox/checkbox.svelte",
    "content": "<script lang=\"ts\">\n\timport ExampleWrapper from \"../../../../../routes/(app)/(layout)/(create)/components/example-wrapper.svelte\";\n\timport CheckboxBasic from \"./checkbox-basic.svelte\";\n\timport CheckboxWithDescription from \"./checkbox-with-description.svelte\";\n\timport CheckboxInvalid from \"./checkbox-invalid.svelte\";\n\timport CheckboxDisabled from \"./checkbox-disabled.svelte\";\n\timport CheckboxWithTitle from \"./checkbox-with-title.svelte\";\n\timport CheckboxInTable from \"./checkbox-in-table.svelte\";\n\timport CheckboxGroup from \"./checkbox-group.svelte\";\n</script>\n\n<ExampleWrapper>\n\t<CheckboxBasic />\n\t<CheckboxWithDescription />\n\t<CheckboxInvalid />\n\t<CheckboxDisabled />\n\t<CheckboxWithTitle />\n\t<CheckboxInTable />\n\t<CheckboxGroup />\n</ExampleWrapper>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/collapsible/collapsible-file-tree.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Collapsible from \"$lib/registry/ui/collapsible/index.js\";\n\timport * as Button from \"$lib/registry/ui/button/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Tabs from \"$lib/registry/ui/tabs/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\n\ttype FileTreeItem = { name: string } | { name: string; items: FileTreeItem[] };\n\n\tconst fileTree: FileTreeItem[] = [\n\t\t{\n\t\t\tname: \"src\",\n\t\t\titems: [\n\t\t\t\t{\n\t\t\t\t\tname: \"lib\",\n\t\t\t\t\titems: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"components\",\n\t\t\t\t\t\t\titems: [\n\t\t\t\t\t\t\t\t{ name: \"Header.svelte\" },\n\t\t\t\t\t\t\t\t{ name: \"Footer.svelte\" },\n\t\t\t\t\t\t\t\t{ name: \"Navigation.svelte\" },\n\t\t\t\t\t\t\t\t{ name: \"Card.svelte\" },\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{ name: \"utils.ts\" },\n\t\t\t\t\t\t{ name: \"stores.ts\" },\n\t\t\t\t\t\t{ name: \"types.ts\" },\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tname: \"routes\",\n\t\t\t\t\titems: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tname: \"(app)\",\n\t\t\t\t\t\t\titems: [\n\t\t\t\t\t\t\t\t{ name: \"+layout.svelte\" },\n\t\t\t\t\t\t\t\t{ name: \"+page.svelte\" },\n\t\t\t\t\t\t\t\t{ name: \"about\", items: [] },\n\t\t\t\t\t\t\t\t{ name: \"contact\", items: [] },\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{ name: \"+layout.svelte\" },\n\t\t\t\t\t\t{ name: \"+page.svelte\" },\n\t\t\t\t\t\t{ name: \"+error.svelte\" },\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t\t{ name: \"app.html\" },\n\t\t\t\t{ name: \"app.css\" },\n\t\t\t\t{ name: \"app.d.ts\" },\n\t\t\t\t{ name: \"hooks.server.ts\" },\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tname: \"static\",\n\t\t\titems: [{ name: \"favicon.png\" }, { name: \"robots.txt\" }, { name: \"images\", items: [] }],\n\t\t},\n\t\t{ name: \"package.json\" },\n\t\t{ name: \"svelte.config.js\" },\n\t\t{ name: \"vite.config.ts\" },\n\t\t{ name: \"tsconfig.json\" },\n\t\t{ name: \"README.md\" },\n\t\t{ name: \".gitignore\" },\n\t];\n</script>\n\n<Example title=\"File Tree\" class=\"items-center\">\n\t<Card.Root class=\"mx-auto w-full max-w-[16rem] gap-2\" size=\"sm\">\n\t\t<Card.Header>\n\t\t\t<Tabs.Root value=\"explorer\">\n\t\t\t\t<Tabs.List class=\"w-full\">\n\t\t\t\t\t<Tabs.Trigger value=\"explorer\">Explorer</Tabs.Trigger>\n\t\t\t\t\t<Tabs.Trigger value=\"settings\">Outline</Tabs.Trigger>\n\t\t\t\t</Tabs.List>\n\t\t\t</Tabs.Root>\n\t\t</Card.Header>\n\t\t<Card.Content>\n\t\t\t<div class=\"flex flex-col gap-1\">\n\t\t\t\t{#each fileTree as item (item.name)}\n\t\t\t\t\t{@render FileTreeItem({ item })}\n\t\t\t\t{/each}\n\t\t\t</div>\n\t\t</Card.Content>\n\t</Card.Root>\n</Example>\n\n{#snippet FileTreeItem({ item }: { item: FileTreeItem })}\n\t{#if \"items\" in item}\n\t\t<Collapsible.Root>\n\t\t\t<Collapsible.Trigger>\n\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t<Button.Root\n\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\tclass=\"group hover:bg-accent hover:text-accent-foreground w-full justify-start transition-none\"\n\t\t\t\t\t\t{...props}\n\t\t\t\t\t>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"ChevronRightIcon\"\n\t\t\t\t\t\t\ttabler=\"IconChevronRight\"\n\t\t\t\t\t\t\thugeicons=\"ArrowRight01Icon\"\n\t\t\t\t\t\t\tphosphor=\"CaretRightIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiArrowRightSLine\"\n\t\t\t\t\t\t\tclass=\"transition-transform group-data-[state=open]:rotate-90\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"FolderIcon\"\n\t\t\t\t\t\t\ttabler=\"IconFolder\"\n\t\t\t\t\t\t\thugeicons=\"Folder01Icon\"\n\t\t\t\t\t\t\tphosphor=\"FolderIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiFolderLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t{item.name}\n\t\t\t\t\t</Button.Root>\n\t\t\t\t{/snippet}\n\t\t\t</Collapsible.Trigger>\n\t\t\t<Collapsible.Content class=\"style-lyra:ml-4 mt-1 ml-5\">\n\t\t\t\t<div class=\"flex flex-col gap-1\">\n\t\t\t\t\t{#each item.items as subItem (subItem.name)}\n\t\t\t\t\t\t{@render FileTreeItem({ item: subItem })}\n\t\t\t\t\t{/each}\n\t\t\t\t</div>\n\t\t\t</Collapsible.Content>\n\t\t</Collapsible.Root>\n\t{:else}\n\t\t<Button.Root variant=\"link\" size=\"sm\" class=\"text-foreground w-full justify-start gap-2\">\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"FileIcon\"\n\t\t\t\ttabler=\"IconFile\"\n\t\t\t\thugeicons=\"File01Icon\"\n\t\t\t\tphosphor=\"FileIcon\"\n\t\t\t\tremixicon=\"RiFileLine\"\n\t\t\t/>\n\t\t\t<span>{item.name}</span>\n\t\t</Button.Root>\n\t{/if}\n{/snippet}\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/collapsible/collapsible-settings.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Collapsible from \"$lib/registry/ui/collapsible/index.js\";\n\timport * as Button from \"$lib/registry/ui/button/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport * as Input from \"$lib/registry/ui/input/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\n\tlet isOpen = $state(false);\n</script>\n\n<Example title=\"Settings\" class=\"items-center\">\n\t<Card.Root class=\"mx-auto w-full max-w-xs\" size=\"sm\">\n\t\t<Card.Header>\n\t\t\t<Card.Title>Radius</Card.Title>\n\t\t\t<Card.Description>Set the corner radius of the element.</Card.Description>\n\t\t</Card.Header>\n\t\t<Card.Content>\n\t\t\t<Collapsible.Root bind:open={isOpen} class=\"flex items-start gap-2\">\n\t\t\t\t<Field.Group class=\"grid w-full grid-cols-2 gap-2\">\n\t\t\t\t\t<Field.Field>\n\t\t\t\t\t\t<Field.Label for=\"radius-x\" class=\"sr-only\">Radius X</Field.Label>\n\t\t\t\t\t\t<Input.Root id=\"radius\" placeholder=\"0\" />\n\t\t\t\t\t</Field.Field>\n\t\t\t\t\t<Field.Field>\n\t\t\t\t\t\t<Field.Label for=\"radius-y\" class=\"sr-only\">Radius Y</Field.Label>\n\t\t\t\t\t\t<Input.Root id=\"radius\" placeholder=\"0\" />\n\t\t\t\t\t</Field.Field>\n\t\t\t\t\t<Collapsible.Content class=\"col-span-full grid grid-cols-subgrid gap-2\">\n\t\t\t\t\t\t<Field.Field>\n\t\t\t\t\t\t\t<Field.Label for=\"radius-x\" class=\"sr-only\">Radius X</Field.Label>\n\t\t\t\t\t\t\t<Input.Root id=\"radius\" placeholder=\"0\" />\n\t\t\t\t\t\t</Field.Field>\n\t\t\t\t\t\t<Field.Field>\n\t\t\t\t\t\t\t<Field.Label for=\"radius-y\" class=\"sr-only\">Radius Y</Field.Label>\n\t\t\t\t\t\t\t<Input.Root id=\"radius\" placeholder=\"0\" />\n\t\t\t\t\t\t</Field.Field>\n\t\t\t\t\t</Collapsible.Content>\n\t\t\t\t</Field.Group>\n\t\t\t\t<Collapsible.Trigger class=\"rounded-md\">\n\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t<Button.Root variant=\"outline\" size=\"icon\" {...props}>\n\t\t\t\t\t\t\t{#if isOpen}\n\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\tlucide=\"MinimizeIcon\"\n\t\t\t\t\t\t\t\t\ttabler=\"IconMinimize\"\n\t\t\t\t\t\t\t\t\thugeicons=\"ArrowShrinkIcon\"\n\t\t\t\t\t\t\t\t\tphosphor=\"CornersInIcon\"\n\t\t\t\t\t\t\t\t\tremixicon=\"RiContractUpDownLine\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t{:else}\n\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\tlucide=\"MaximizeIcon\"\n\t\t\t\t\t\t\t\t\ttabler=\"IconBorderCorners\"\n\t\t\t\t\t\t\t\t\thugeicons=\"ArrowExpandIcon\"\n\t\t\t\t\t\t\t\t\tphosphor=\"CornersOutIcon\"\n\t\t\t\t\t\t\t\t\tremixicon=\"RiExpandUpDownLine\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t</Button.Root>\n\t\t\t\t\t{/snippet}\n\t\t\t\t</Collapsible.Trigger>\n\t\t\t</Collapsible.Root>\n\t\t</Card.Content>\n\t</Card.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/collapsible/collapsible.svelte",
    "content": "<script lang=\"ts\">\n\timport ExampleWrapper from \"../../../../../routes/(app)/(layout)/(create)/components/example-wrapper.svelte\";\n\timport CollapsibleFileTree from \"./collapsible-file-tree.svelte\";\n\timport CollapsibleSettings from \"./collapsible-settings.svelte\";\n</script>\n\n<ExampleWrapper>\n\t<CollapsibleFileTree />\n\t<CollapsibleSettings />\n</ExampleWrapper>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/combobox/combobox-basic.svelte",
    "content": "<script lang=\"ts\">\n\timport { tick } from \"svelte\";\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Command from \"$lib/registry/ui/command/index.js\";\n\timport * as Popover from \"$lib/registry/ui/popover/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tconst frameworks = [\"Next.js\", \"SvelteKit\", \"Nuxt.js\", \"Remix\", \"Astro\"] as const;\n\n\tlet open = $state(false);\n\tlet value = $state(\"\");\n\tlet triggerRef = $state<HTMLButtonElement>(null!);\n\n\tconst selectedValue = $derived(value || null);\n\n\tfunction closeAndFocusTrigger() {\n\t\topen = false;\n\t\ttick().then(() => {\n\t\t\ttriggerRef?.focus();\n\t\t});\n\t}\n</script>\n\n<Example title=\"Basic\">\n\t<Popover.Root bind:open>\n\t\t<Popover.Trigger bind:ref={triggerRef}>\n\t\t\t{#snippet child({ props })}\n\t\t\t\t<Button\n\t\t\t\t\t{...props}\n\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\tclass=\"w-[200px] justify-between font-normal\"\n\t\t\t\t\trole=\"combobox\"\n\t\t\t\t\taria-expanded={open}\n\t\t\t\t>\n\t\t\t\t\t{selectedValue ?? \"Select a framework\"}\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"ChevronDownIcon\"\n\t\t\t\t\t\ttabler=\"IconChevronDown\"\n\t\t\t\t\t\thugeicons=\"ArrowDown01Icon\"\n\t\t\t\t\t\tphosphor=\"CaretDownIcon\"\n\t\t\t\t\t\tremixicon=\"RiArrowDownSLine\"\n\t\t\t\t\t\tclass=\"text-muted-foreground size-4 opacity-50\"\n\t\t\t\t\t/>\n\t\t\t\t</Button>\n\t\t\t{/snippet}\n\t\t</Popover.Trigger>\n\t\t<Popover.Content class=\"w-[200px] p-0\" align=\"start\">\n\t\t\t<Command.Root>\n\t\t\t\t<Command.Input placeholder=\"Search framework...\" />\n\t\t\t\t<Command.List>\n\t\t\t\t\t<Command.Empty>No items found.</Command.Empty>\n\t\t\t\t\t<Command.Group value=\"frameworks\">\n\t\t\t\t\t\t{#each frameworks as framework (framework)}\n\t\t\t\t\t\t\t<Command.Item\n\t\t\t\t\t\t\t\tvalue={framework}\n\t\t\t\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t\t\t\tvalue = framework;\n\t\t\t\t\t\t\t\t\tcloseAndFocusTrigger();\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\tlucide=\"CheckIcon\"\n\t\t\t\t\t\t\t\t\ttabler=\"IconCheck\"\n\t\t\t\t\t\t\t\t\thugeicons=\"Tick02Icon\"\n\t\t\t\t\t\t\t\t\tphosphor=\"CheckIcon\"\n\t\t\t\t\t\t\t\t\tremixicon=\"RiCheckLine\"\n\t\t\t\t\t\t\t\t\tclass={cn(value !== framework && \"text-transparent\")}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t{framework}\n\t\t\t\t\t\t\t</Command.Item>\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</Command.Group>\n\t\t\t\t</Command.List>\n\t\t\t</Command.Root>\n\t\t</Popover.Content>\n\t</Popover.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/combobox/combobox-disabled-items.svelte",
    "content": "<script lang=\"ts\">\n\timport { tick } from \"svelte\";\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Command from \"$lib/registry/ui/command/index.js\";\n\timport * as Popover from \"$lib/registry/ui/popover/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tconst frameworks = [\n\t\t{ value: \"Next.js\", disabled: false },\n\t\t{ value: \"SvelteKit\", disabled: false },\n\t\t{ value: \"Nuxt.js\", disabled: true },\n\t\t{ value: \"Remix\", disabled: true },\n\t\t{ value: \"Astro\", disabled: false },\n\t];\n\n\tlet open = $state(false);\n\tlet value = $state(\"\");\n\tlet triggerRef = $state<HTMLButtonElement>(null!);\n\n\tconst selectedValue = $derived(value || null);\n\n\tfunction closeAndFocusTrigger() {\n\t\topen = false;\n\t\ttick().then(() => {\n\t\t\ttriggerRef?.focus();\n\t\t});\n\t}\n</script>\n\n<Example title=\"Disabled Items\">\n\t<Popover.Root bind:open>\n\t\t<Popover.Trigger bind:ref={triggerRef}>\n\t\t\t{#snippet child({ props })}\n\t\t\t\t<Button\n\t\t\t\t\t{...props}\n\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\tclass=\"w-[200px] justify-between font-normal\"\n\t\t\t\t\trole=\"combobox\"\n\t\t\t\t\taria-expanded={open}\n\t\t\t\t>\n\t\t\t\t\t{selectedValue ?? \"Select a framework\"}\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"ChevronDownIcon\"\n\t\t\t\t\t\ttabler=\"IconChevronDown\"\n\t\t\t\t\t\thugeicons=\"ArrowDown01Icon\"\n\t\t\t\t\t\tphosphor=\"CaretDownIcon\"\n\t\t\t\t\t\tremixicon=\"RiArrowDownSLine\"\n\t\t\t\t\t\tclass=\"text-muted-foreground size-4 opacity-50\"\n\t\t\t\t\t/>\n\t\t\t\t</Button>\n\t\t\t{/snippet}\n\t\t</Popover.Trigger>\n\t\t<Popover.Content class=\"w-[200px] p-0\" align=\"start\">\n\t\t\t<Command.Root>\n\t\t\t\t<Command.Input placeholder=\"Search framework...\" />\n\t\t\t\t<Command.List>\n\t\t\t\t\t<Command.Empty>No items found.</Command.Empty>\n\t\t\t\t\t<Command.Group value=\"frameworks\">\n\t\t\t\t\t\t{#each frameworks as framework (framework.value)}\n\t\t\t\t\t\t\t<Command.Item\n\t\t\t\t\t\t\t\tvalue={framework.value}\n\t\t\t\t\t\t\t\tdisabled={framework.disabled}\n\t\t\t\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t\t\t\tif (!framework.disabled) {\n\t\t\t\t\t\t\t\t\t\tvalue = framework.value;\n\t\t\t\t\t\t\t\t\t\tcloseAndFocusTrigger();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tclass=\"aria-disabled:text-muted-foreground\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\tlucide=\"CheckIcon\"\n\t\t\t\t\t\t\t\t\ttabler=\"IconCheck\"\n\t\t\t\t\t\t\t\t\thugeicons=\"Tick02Icon\"\n\t\t\t\t\t\t\t\t\tphosphor=\"CheckIcon\"\n\t\t\t\t\t\t\t\t\tremixicon=\"RiCheckLine\"\n\t\t\t\t\t\t\t\t\tclass={cn(value !== framework.value && \"text-transparent\")}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t{framework.value}\n\t\t\t\t\t\t\t</Command.Item>\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</Command.Group>\n\t\t\t\t</Command.List>\n\t\t\t</Command.Root>\n\t\t</Popover.Content>\n\t</Popover.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/combobox/combobox-disabled.svelte",
    "content": "<script lang=\"ts\">\n\timport { tick } from \"svelte\";\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Command from \"$lib/registry/ui/command/index.js\";\n\timport * as Popover from \"$lib/registry/ui/popover/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tconst frameworks = [\"Next.js\", \"SvelteKit\", \"Nuxt.js\", \"Remix\", \"Astro\"] as const;\n\n\tlet open = $state(false);\n\tlet value = $state(\"\");\n\tlet triggerRef = $state<HTMLButtonElement>(null!);\n\n\tconst selectedValue = $derived(value || null);\n\n\tfunction closeAndFocusTrigger() {\n\t\topen = false;\n\t\ttick().then(() => {\n\t\t\ttriggerRef?.focus();\n\t\t});\n\t}\n</script>\n\n<Example title=\"Disabled\">\n\t<Popover.Root bind:open>\n\t\t<Popover.Trigger bind:ref={triggerRef}>\n\t\t\t{#snippet child({ props })}\n\t\t\t\t<Button\n\t\t\t\t\t{...props}\n\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\tclass=\"w-[200px] justify-between font-normal\"\n\t\t\t\t\trole=\"combobox\"\n\t\t\t\t\taria-expanded={open}\n\t\t\t\t\tdisabled\n\t\t\t\t>\n\t\t\t\t\t{selectedValue ?? \"Select a framework\"}\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"ChevronDownIcon\"\n\t\t\t\t\t\ttabler=\"IconChevronDown\"\n\t\t\t\t\t\thugeicons=\"ArrowDown01Icon\"\n\t\t\t\t\t\tphosphor=\"CaretDownIcon\"\n\t\t\t\t\t\tremixicon=\"RiArrowDownSLine\"\n\t\t\t\t\t\tclass=\"text-muted-foreground size-4 opacity-50\"\n\t\t\t\t\t/>\n\t\t\t\t</Button>\n\t\t\t{/snippet}\n\t\t</Popover.Trigger>\n\t\t<Popover.Content class=\"w-[200px] p-0\" align=\"start\">\n\t\t\t<Command.Root>\n\t\t\t\t<Command.Input placeholder=\"Search framework...\" />\n\t\t\t\t<Command.List>\n\t\t\t\t\t<Command.Empty>No items found.</Command.Empty>\n\t\t\t\t\t<Command.Group value=\"frameworks\">\n\t\t\t\t\t\t{#each frameworks as framework (framework)}\n\t\t\t\t\t\t\t<Command.Item\n\t\t\t\t\t\t\t\tvalue={framework}\n\t\t\t\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t\t\t\tvalue = framework;\n\t\t\t\t\t\t\t\t\tcloseAndFocusTrigger();\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\tlucide=\"CheckIcon\"\n\t\t\t\t\t\t\t\t\ttabler=\"IconCheck\"\n\t\t\t\t\t\t\t\t\thugeicons=\"Tick02Icon\"\n\t\t\t\t\t\t\t\t\tphosphor=\"CheckIcon\"\n\t\t\t\t\t\t\t\t\tremixicon=\"RiCheckLine\"\n\t\t\t\t\t\t\t\t\tclass={cn(value !== framework && \"text-transparent\")}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t{framework}\n\t\t\t\t\t\t\t</Command.Item>\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</Command.Group>\n\t\t\t\t</Command.List>\n\t\t\t</Command.Root>\n\t\t</Popover.Content>\n\t</Popover.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/combobox/combobox-in-dialog.svelte",
    "content": "<script lang=\"ts\">\n\timport { tick } from \"svelte\";\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Dialog from \"$lib/registry/ui/dialog/index.js\";\n\timport * as Command from \"$lib/registry/ui/command/index.js\";\n\timport * as Popover from \"$lib/registry/ui/popover/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\timport { toast } from \"svelte-sonner\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tconst frameworks = [\"Next.js\", \"SvelteKit\", \"Nuxt.js\", \"Remix\", \"Astro\"] as const;\n\n\tlet dialogOpen = $state(false);\n\tlet comboboxOpen = $state(false);\n\tlet value = $state(\"\");\n\tlet triggerRef = $state<HTMLButtonElement>(null!);\n\n\tconst selectedValue = $derived(value || null);\n\n\tfunction closeAndFocusTrigger() {\n\t\tcomboboxOpen = false;\n\t\ttick().then(() => {\n\t\t\ttriggerRef?.focus();\n\t\t});\n\t}\n</script>\n\n<Example title=\"Combobox in Dialog\">\n\t<Dialog.Root bind:open={dialogOpen}>\n\t\t<Dialog.Trigger>\n\t\t\t{#snippet child({ props })}\n\t\t\t\t<Button variant=\"outline\" {...props}>Open Dialog</Button>\n\t\t\t{/snippet}\n\t\t</Dialog.Trigger>\n\t\t<Dialog.Content class=\"sm:max-w-[425px]\">\n\t\t\t<Dialog.Header>\n\t\t\t\t<Dialog.Title>Select Framework</Dialog.Title>\n\t\t\t\t<Dialog.Description>\n\t\t\t\t\tChoose your preferred framework from the list below.\n\t\t\t\t</Dialog.Description>\n\t\t\t</Dialog.Header>\n\t\t\t<Field.Field>\n\t\t\t\t<Field.Label for=\"framework-dialog\" class=\"sr-only\">Framework</Field.Label>\n\t\t\t\t<Popover.Root bind:open={comboboxOpen}>\n\t\t\t\t\t<Popover.Trigger bind:ref={triggerRef}>\n\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t{...props}\n\t\t\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\t\t\tclass=\"w-full justify-between font-normal\"\n\t\t\t\t\t\t\t\trole=\"combobox\"\n\t\t\t\t\t\t\t\taria-expanded={comboboxOpen}\n\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\tid=\"framework-dialog\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{selectedValue ?? \"Select a framework\"}\n\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\tlucide=\"ChevronDownIcon\"\n\t\t\t\t\t\t\t\t\ttabler=\"IconChevronDown\"\n\t\t\t\t\t\t\t\t\thugeicons=\"ArrowDown01Icon\"\n\t\t\t\t\t\t\t\t\tphosphor=\"CaretDownIcon\"\n\t\t\t\t\t\t\t\t\tremixicon=\"RiArrowDownSLine\"\n\t\t\t\t\t\t\t\t\tclass=\"text-muted-foreground size-4 opacity-50\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t</Popover.Trigger>\n\t\t\t\t\t<Popover.Content class=\"w-(--bits-popover-anchor-width) p-0\" align=\"start\">\n\t\t\t\t\t\t<Command.Root>\n\t\t\t\t\t\t\t<Command.Input placeholder=\"Search framework...\" />\n\t\t\t\t\t\t\t<Command.List>\n\t\t\t\t\t\t\t\t<Command.Empty>No items found.</Command.Empty>\n\t\t\t\t\t\t\t\t<Command.Group value=\"frameworks\">\n\t\t\t\t\t\t\t\t\t{#each frameworks as framework (framework)}\n\t\t\t\t\t\t\t\t\t\t<Command.Item\n\t\t\t\t\t\t\t\t\t\t\tvalue={framework}\n\t\t\t\t\t\t\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t\t\t\t\t\t\tvalue = framework;\n\t\t\t\t\t\t\t\t\t\t\t\tcloseAndFocusTrigger();\n\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\t\t\tlucide=\"CheckIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\ttabler=\"IconCheck\"\n\t\t\t\t\t\t\t\t\t\t\t\thugeicons=\"Tick02Icon\"\n\t\t\t\t\t\t\t\t\t\t\t\tphosphor=\"CheckIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\tremixicon=\"RiCheckLine\"\n\t\t\t\t\t\t\t\t\t\t\t\tclass={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t\tvalue !== framework && \"text-transparent\"\n\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t{framework}\n\t\t\t\t\t\t\t\t\t\t</Command.Item>\n\t\t\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t\t</Command.Group>\n\t\t\t\t\t\t\t</Command.List>\n\t\t\t\t\t\t</Command.Root>\n\t\t\t\t\t</Popover.Content>\n\t\t\t\t</Popover.Root>\n\t\t\t</Field.Field>\n\t\t\t<Dialog.Footer>\n\t\t\t\t<Dialog.Close>\n\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t<Button variant=\"outline\" {...props}>Cancel</Button>\n\t\t\t\t\t{/snippet}\n\t\t\t\t</Dialog.Close>\n\t\t\t\t<Button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tonclick={() => {\n\t\t\t\t\t\ttoast(\"Framework selected.\");\n\t\t\t\t\t\tdialogOpen = false;\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\tConfirm\n\t\t\t\t</Button>\n\t\t\t</Dialog.Footer>\n\t\t</Dialog.Content>\n\t</Dialog.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/combobox/combobox-in-popup.svelte",
    "content": "<script lang=\"ts\">\n\timport { tick } from \"svelte\";\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Command from \"$lib/registry/ui/command/index.js\";\n\timport * as Popover from \"$lib/registry/ui/popover/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tconst countries = [\n\t\t{ code: \"us\", value: \"united-states\", label: \"United States\", continent: \"North America\" },\n\t\t{ code: \"gb\", value: \"united-kingdom\", label: \"United Kingdom\", continent: \"Europe\" },\n\t\t{ code: \"ca\", value: \"canada\", label: \"Canada\", continent: \"North America\" },\n\t\t{ code: \"au\", value: \"australia\", label: \"Australia\", continent: \"Oceania\" },\n\t\t{ code: \"de\", value: \"germany\", label: \"Germany\", continent: \"Europe\" },\n\t\t{ code: \"fr\", value: \"france\", label: \"France\", continent: \"Europe\" },\n\t\t{ code: \"jp\", value: \"japan\", label: \"Japan\", continent: \"Asia\" },\n\t\t{ code: \"cn\", value: \"china\", label: \"China\", continent: \"Asia\" },\n\t\t{ code: \"br\", value: \"brazil\", label: \"Brazil\", continent: \"South America\" },\n\t\t{ code: \"in\", value: \"india\", label: \"India\", continent: \"Asia\" },\n\t];\n\n\tlet open = $state(false);\n\tlet value = $state<(typeof countries)[0] | null>(countries[0]);\n\tlet triggerRef = $state<HTMLButtonElement>(null!);\n\n\tfunction closeAndFocusTrigger() {\n\t\topen = false;\n\t\ttick().then(() => {\n\t\t\ttriggerRef?.focus();\n\t\t});\n\t}\n</script>\n\n<Example title=\"Combobox in Popup\">\n\t<Popover.Root bind:open>\n\t\t<Popover.Trigger bind:ref={triggerRef}>\n\t\t\t{#snippet child({ props })}\n\t\t\t\t<Button\n\t\t\t\t\t{...props}\n\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\tclass=\"w-64 justify-between font-normal\"\n\t\t\t\t\trole=\"combobox\"\n\t\t\t\t\taria-expanded={open}\n\t\t\t\t>\n\t\t\t\t\t{value?.label ?? \"Select country\"}\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"ChevronDownIcon\"\n\t\t\t\t\t\ttabler=\"IconChevronDown\"\n\t\t\t\t\t\thugeicons=\"ArrowDown01Icon\"\n\t\t\t\t\t\tphosphor=\"CaretDownIcon\"\n\t\t\t\t\t\tremixicon=\"RiArrowDownSLine\"\n\t\t\t\t\t\tclass=\"text-muted-foreground size-4 opacity-50\"\n\t\t\t\t\t/>\n\t\t\t\t</Button>\n\t\t\t{/snippet}\n\t\t</Popover.Trigger>\n\t\t<Popover.Content class=\"w-64 p-0\" align=\"start\">\n\t\t\t<Command.Root>\n\t\t\t\t<Command.Input placeholder=\"Search\" />\n\t\t\t\t<Command.List>\n\t\t\t\t\t<Command.Empty>No items found.</Command.Empty>\n\t\t\t\t\t<Command.Group value=\"countries\">\n\t\t\t\t\t\t{#each countries as country (country.code)}\n\t\t\t\t\t\t\t<Command.Item\n\t\t\t\t\t\t\t\tvalue={country.label}\n\t\t\t\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t\t\t\tvalue = country;\n\t\t\t\t\t\t\t\t\tcloseAndFocusTrigger();\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\tlucide=\"CheckIcon\"\n\t\t\t\t\t\t\t\t\ttabler=\"IconCheck\"\n\t\t\t\t\t\t\t\t\thugeicons=\"Tick02Icon\"\n\t\t\t\t\t\t\t\t\tphosphor=\"CheckIcon\"\n\t\t\t\t\t\t\t\t\tremixicon=\"RiCheckLine\"\n\t\t\t\t\t\t\t\t\tclass={cn(value?.code !== country.code && \"text-transparent\")}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t{country.label}\n\t\t\t\t\t\t\t</Command.Item>\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</Command.Group>\n\t\t\t\t</Command.List>\n\t\t\t</Command.Root>\n\t\t</Popover.Content>\n\t</Popover.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/combobox/combobox-invalid.svelte",
    "content": "<script lang=\"ts\">\n\timport { tick } from \"svelte\";\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Command from \"$lib/registry/ui/command/index.js\";\n\timport * as Popover from \"$lib/registry/ui/popover/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tconst frameworks = [\"Next.js\", \"SvelteKit\", \"Nuxt.js\", \"Remix\", \"Astro\"] as const;\n\n\tlet open = $state(false);\n\tlet value = $state(\"\");\n\tlet openInvalid = $state(false);\n\tlet valueInvalid = $state(\"\");\n\tlet triggerRef = $state<HTMLButtonElement>(null!);\n\tlet triggerRefInvalid = $state<HTMLButtonElement>(null!);\n\n\tconst selectedValue = $derived(value || null);\n\tconst selectedValueInvalid = $derived(valueInvalid || null);\n\n\tfunction closeAndFocusTrigger() {\n\t\topen = false;\n\t\ttick().then(() => {\n\t\t\ttriggerRef?.focus();\n\t\t});\n\t}\n\n\tfunction closeAndFocusTriggerInvalid() {\n\t\topenInvalid = false;\n\t\ttick().then(() => {\n\t\t\ttriggerRefInvalid?.focus();\n\t\t});\n\t}\n</script>\n\n<Example title=\"Invalid\">\n\t<div class=\"flex flex-col gap-4\">\n\t\t<Popover.Root bind:open>\n\t\t\t<Popover.Trigger bind:ref={triggerRef}>\n\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t<Button\n\t\t\t\t\t\t{...props}\n\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\tclass=\"w-[200px] justify-between font-normal\"\n\t\t\t\t\t\trole=\"combobox\"\n\t\t\t\t\t\taria-expanded={open}\n\t\t\t\t\t\taria-invalid=\"true\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{selectedValue ?? \"Select a framework\"}\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"ChevronDownIcon\"\n\t\t\t\t\t\t\ttabler=\"IconChevronDown\"\n\t\t\t\t\t\t\thugeicons=\"ArrowDown01Icon\"\n\t\t\t\t\t\t\tphosphor=\"CaretDownIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiArrowDownSLine\"\n\t\t\t\t\t\t\tclass=\"text-muted-foreground size-4 opacity-50\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Button>\n\t\t\t\t{/snippet}\n\t\t\t</Popover.Trigger>\n\t\t\t<Popover.Content class=\"w-[200px] p-0\" align=\"start\">\n\t\t\t\t<Command.Root>\n\t\t\t\t\t<Command.Input placeholder=\"Search framework...\" />\n\t\t\t\t\t<Command.List>\n\t\t\t\t\t\t<Command.Empty>No items found.</Command.Empty>\n\t\t\t\t\t\t<Command.Group value=\"frameworks\">\n\t\t\t\t\t\t\t{#each frameworks as framework (framework)}\n\t\t\t\t\t\t\t\t<Command.Item\n\t\t\t\t\t\t\t\t\tvalue={framework}\n\t\t\t\t\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t\t\t\t\tvalue = framework;\n\t\t\t\t\t\t\t\t\t\tcloseAndFocusTrigger();\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\tlucide=\"CheckIcon\"\n\t\t\t\t\t\t\t\t\t\ttabler=\"IconCheck\"\n\t\t\t\t\t\t\t\t\t\thugeicons=\"Tick02Icon\"\n\t\t\t\t\t\t\t\t\t\tphosphor=\"CheckIcon\"\n\t\t\t\t\t\t\t\t\t\tremixicon=\"RiCheckLine\"\n\t\t\t\t\t\t\t\t\t\tclass={cn(value !== framework && \"text-transparent\")}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t{framework}\n\t\t\t\t\t\t\t\t</Command.Item>\n\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t</Command.Group>\n\t\t\t\t\t</Command.List>\n\t\t\t\t</Command.Root>\n\t\t\t</Popover.Content>\n\t\t</Popover.Root>\n\t\t<Field.Field data-invalid>\n\t\t\t<Field.Label for=\"combobox-framework-invalid\">Framework</Field.Label>\n\t\t\t<Popover.Root bind:open={openInvalid}>\n\t\t\t\t<Popover.Trigger bind:ref={triggerRefInvalid}>\n\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t{...props}\n\t\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\t\tclass=\"w-[200px] justify-between font-normal\"\n\t\t\t\t\t\t\trole=\"combobox\"\n\t\t\t\t\t\t\taria-expanded={openInvalid}\n\t\t\t\t\t\t\taria-invalid\n\t\t\t\t\t\t\tid=\"combobox-framework-invalid\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{selectedValueInvalid ?? \"Select a framework\"}\n\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\tlucide=\"ChevronDownIcon\"\n\t\t\t\t\t\t\t\ttabler=\"IconChevronDown\"\n\t\t\t\t\t\t\t\thugeicons=\"ArrowDown01Icon\"\n\t\t\t\t\t\t\t\tphosphor=\"CaretDownIcon\"\n\t\t\t\t\t\t\t\tremixicon=\"RiArrowDownSLine\"\n\t\t\t\t\t\t\t\tclass=\"text-muted-foreground size-4 opacity-50\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t{/snippet}\n\t\t\t\t</Popover.Trigger>\n\t\t\t\t<Popover.Content class=\"w-[200px] p-0\" align=\"start\">\n\t\t\t\t\t<Command.Root>\n\t\t\t\t\t\t<Command.Input placeholder=\"Search framework...\" />\n\t\t\t\t\t\t<Command.List>\n\t\t\t\t\t\t\t<Command.Empty>No items found.</Command.Empty>\n\t\t\t\t\t\t\t<Command.Group value=\"frameworks\">\n\t\t\t\t\t\t\t\t{#each frameworks as framework (framework)}\n\t\t\t\t\t\t\t\t\t<Command.Item\n\t\t\t\t\t\t\t\t\t\tvalue={framework}\n\t\t\t\t\t\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t\t\t\t\t\tvalueInvalid = framework;\n\t\t\t\t\t\t\t\t\t\t\tcloseAndFocusTriggerInvalid();\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\t\tlucide=\"CheckIcon\"\n\t\t\t\t\t\t\t\t\t\t\ttabler=\"IconCheck\"\n\t\t\t\t\t\t\t\t\t\t\thugeicons=\"Tick02Icon\"\n\t\t\t\t\t\t\t\t\t\t\tphosphor=\"CheckIcon\"\n\t\t\t\t\t\t\t\t\t\t\tremixicon=\"RiCheckLine\"\n\t\t\t\t\t\t\t\t\t\t\tclass={cn(\n\t\t\t\t\t\t\t\t\t\t\t\tvalueInvalid !== framework && \"text-transparent\"\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t{framework}\n\t\t\t\t\t\t\t\t\t</Command.Item>\n\t\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t</Command.Group>\n\t\t\t\t\t\t</Command.List>\n\t\t\t\t\t</Command.Root>\n\t\t\t\t</Popover.Content>\n\t\t\t</Popover.Root>\n\t\t\t<Field.Description>Please select a valid framework.</Field.Description>\n\t\t\t<Field.Error errors={[{ message: \"This field is required.\" }]} />\n\t\t</Field.Field>\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/combobox/combobox-large-list.svelte",
    "content": "<script lang=\"ts\">\n\timport { tick } from \"svelte\";\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Command from \"$lib/registry/ui/command/index.js\";\n\timport * as Popover from \"$lib/registry/ui/popover/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tconst largeListItems = Array.from({ length: 100 }, (_, i) => `Item ${i + 1}`);\n\n\tlet open = $state(false);\n\tlet value = $state(\"\");\n\tlet triggerRef = $state<HTMLButtonElement>(null!);\n\n\tfunction closeAndFocusTrigger() {\n\t\topen = false;\n\t\ttick().then(() => {\n\t\t\ttriggerRef?.focus();\n\t\t});\n\t}\n</script>\n\n<Example title=\"Large List (100 items)\">\n\t<Popover.Root bind:open>\n\t\t<Popover.Trigger bind:ref={triggerRef}>\n\t\t\t{#snippet child({ props })}\n\t\t\t\t<Button\n\t\t\t\t\t{...props}\n\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\tclass=\"w-[200px] justify-between font-normal\"\n\t\t\t\t\trole=\"combobox\"\n\t\t\t\t\taria-expanded={open}\n\t\t\t\t>\n\t\t\t\t\t{value || \"Search from 100 items\"}\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"ChevronDownIcon\"\n\t\t\t\t\t\ttabler=\"IconChevronDown\"\n\t\t\t\t\t\thugeicons=\"ArrowDown01Icon\"\n\t\t\t\t\t\tphosphor=\"CaretDownIcon\"\n\t\t\t\t\t\tremixicon=\"RiArrowDownSLine\"\n\t\t\t\t\t\tclass=\"text-muted-foreground size-4 opacity-50\"\n\t\t\t\t\t/>\n\t\t\t\t</Button>\n\t\t\t{/snippet}\n\t\t</Popover.Trigger>\n\t\t<Popover.Content class=\"max-h-72 w-[200px] p-0\" align=\"start\">\n\t\t\t<Command.Root>\n\t\t\t\t<Command.Input placeholder=\"Search...\" />\n\t\t\t\t<Command.List>\n\t\t\t\t\t<Command.Empty>No items found.</Command.Empty>\n\t\t\t\t\t<Command.Group value=\"items\">\n\t\t\t\t\t\t{#each largeListItems as item (item)}\n\t\t\t\t\t\t\t<Command.Item\n\t\t\t\t\t\t\t\tvalue={item}\n\t\t\t\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t\t\t\tvalue = item;\n\t\t\t\t\t\t\t\t\tcloseAndFocusTrigger();\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\tlucide=\"CheckIcon\"\n\t\t\t\t\t\t\t\t\ttabler=\"IconCheck\"\n\t\t\t\t\t\t\t\t\thugeicons=\"Tick02Icon\"\n\t\t\t\t\t\t\t\t\tphosphor=\"CheckIcon\"\n\t\t\t\t\t\t\t\t\tremixicon=\"RiCheckLine\"\n\t\t\t\t\t\t\t\t\tclass={cn(value !== item && \"text-transparent\")}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t{item}\n\t\t\t\t\t\t\t</Command.Item>\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</Command.Group>\n\t\t\t\t</Command.List>\n\t\t\t</Command.Root>\n\t\t</Popover.Content>\n\t</Popover.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/combobox/combobox-multiple-invalid.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Command from \"$lib/registry/ui/command/index.js\";\n\timport * as Popover from \"$lib/registry/ui/popover/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport { Badge } from \"$lib/registry/ui/badge/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tconst frameworks = [\"Next.js\", \"SvelteKit\", \"Nuxt.js\", \"Remix\", \"Astro\"] as const;\n\n\tlet open = $state(false);\n\tlet openInvalid = $state(false);\n\tlet values = $state<string[]>([frameworks[0], frameworks[1]]);\n\tlet valuesInvalid = $state<string[]>([frameworks[0], frameworks[1], frameworks[2]]);\n\n\tfunction toggleValue(framework: (typeof frameworks)[number], target: \"default\" | \"invalid\") {\n\t\tconst current = target === \"default\" ? values : valuesInvalid;\n\t\tconst setter =\n\t\t\ttarget === \"default\"\n\t\t\t\t? (v: string[]) => (values = v)\n\t\t\t\t: (v: string[]) => (valuesInvalid = v);\n\t\tsetter(\n\t\t\tcurrent.includes(framework)\n\t\t\t\t? current.filter((v) => v !== framework)\n\t\t\t\t: [...current, framework]\n\t\t);\n\t}\n\n\tfunction removeValue(e: MouseEvent, framework: string, target: \"default\" | \"invalid\") {\n\t\te.stopPropagation();\n\t\tif (target === \"default\") {\n\t\t\tvalues = values.filter((v) => v !== framework);\n\t\t} else {\n\t\t\tvaluesInvalid = valuesInvalid.filter((v) => v !== framework);\n\t\t}\n\t}\n</script>\n\n<Example title=\"Combobox Multiple Invalid\">\n\t<div class=\"flex flex-col gap-4\">\n\t\t<Popover.Root bind:open>\n\t\t\t<Popover.Trigger>\n\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t<div\n\t\t\t\t\t\t{...props}\n\t\t\t\t\t\trole=\"combobox\"\n\t\t\t\t\t\taria-expanded={open}\n\t\t\t\t\t\taria-invalid={true}\n\t\t\t\t\t\tclass=\"border-input bg-background aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 flex min-h-9 w-64 cursor-pointer flex-wrap items-center gap-1.5 rounded-md border px-2.5 py-1.5 text-sm shadow-xs transition-colors focus-within:ring-[3px] focus-within:ring-offset-2 aria-invalid:ring-[3px]\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{#each values as framework (framework)}\n\t\t\t\t\t\t\t<Badge\n\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\tclass=\"gap-1 pr-0.5\"\n\t\t\t\t\t\t\t\tonclick={(e) => removeValue(e, framework, \"default\")}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{framework}\n\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\tlucide=\"XIcon\"\n\t\t\t\t\t\t\t\t\ttabler=\"IconX\"\n\t\t\t\t\t\t\t\t\thugeicons=\"Cancel01Icon\"\n\t\t\t\t\t\t\t\t\tphosphor=\"XIcon\"\n\t\t\t\t\t\t\t\t\tremixicon=\"RiCloseLine\"\n\t\t\t\t\t\t\t\t\tclass=\"size-3\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</div>\n\t\t\t\t{/snippet}\n\t\t\t</Popover.Trigger>\n\t\t\t<Popover.Content class=\"w-64 p-0\" align=\"start\">\n\t\t\t\t<Command.Root>\n\t\t\t\t\t<Command.Input placeholder=\"Search framework...\" />\n\t\t\t\t\t<Command.List>\n\t\t\t\t\t\t<Command.Empty>No items found.</Command.Empty>\n\t\t\t\t\t\t<Command.Group value=\"frameworks\">\n\t\t\t\t\t\t\t{#each frameworks as framework (framework)}\n\t\t\t\t\t\t\t\t<Command.Item\n\t\t\t\t\t\t\t\t\tvalue={framework}\n\t\t\t\t\t\t\t\t\tonSelect={() => toggleValue(framework, \"default\")}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\tlucide=\"CheckIcon\"\n\t\t\t\t\t\t\t\t\t\ttabler=\"IconCheck\"\n\t\t\t\t\t\t\t\t\t\thugeicons=\"Tick02Icon\"\n\t\t\t\t\t\t\t\t\t\tphosphor=\"CheckIcon\"\n\t\t\t\t\t\t\t\t\t\tremixicon=\"RiCheckLine\"\n\t\t\t\t\t\t\t\t\t\tclass={cn(\n\t\t\t\t\t\t\t\t\t\t\t!values.includes(framework) && \"text-transparent\"\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t{framework}\n\t\t\t\t\t\t\t\t</Command.Item>\n\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t</Command.Group>\n\t\t\t\t\t</Command.List>\n\t\t\t\t</Command.Root>\n\t\t\t</Popover.Content>\n\t\t</Popover.Root>\n\t\t<Field.Field data-invalid>\n\t\t\t<Field.Label for=\"combobox-multiple-invalid\">Frameworks</Field.Label>\n\t\t\t<Popover.Root bind:open={openInvalid}>\n\t\t\t\t<Popover.Trigger>\n\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t{...props}\n\t\t\t\t\t\t\trole=\"combobox\"\n\t\t\t\t\t\t\taria-expanded={openInvalid}\n\t\t\t\t\t\t\taria-invalid={true}\n\t\t\t\t\t\t\tid=\"combobox-multiple-invalid\"\n\t\t\t\t\t\t\tclass=\"border-input bg-background aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 flex min-h-9 w-64 cursor-pointer flex-wrap items-center gap-1.5 rounded-md border px-2.5 py-1.5 text-sm shadow-xs transition-colors focus-within:ring-[3px] focus-within:ring-offset-2 aria-invalid:ring-[3px]\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{#each valuesInvalid as framework (framework)}\n\t\t\t\t\t\t\t\t<Badge\n\t\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\t\tclass=\"gap-1 pr-0.5\"\n\t\t\t\t\t\t\t\t\tonclick={(e) => removeValue(e, framework, \"invalid\")}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{framework}\n\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\tlucide=\"XIcon\"\n\t\t\t\t\t\t\t\t\t\ttabler=\"IconX\"\n\t\t\t\t\t\t\t\t\t\thugeicons=\"Cancel01Icon\"\n\t\t\t\t\t\t\t\t\t\tphosphor=\"XIcon\"\n\t\t\t\t\t\t\t\t\t\tremixicon=\"RiCloseLine\"\n\t\t\t\t\t\t\t\t\t\tclass=\"size-3\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t{/snippet}\n\t\t\t\t</Popover.Trigger>\n\t\t\t\t<Popover.Content class=\"w-64 p-0\" align=\"start\">\n\t\t\t\t\t<Command.Root>\n\t\t\t\t\t\t<Command.Input placeholder=\"Search framework...\" />\n\t\t\t\t\t\t<Command.List>\n\t\t\t\t\t\t\t<Command.Empty>No items found.</Command.Empty>\n\t\t\t\t\t\t\t<Command.Group value=\"frameworks\">\n\t\t\t\t\t\t\t\t{#each frameworks as framework (framework)}\n\t\t\t\t\t\t\t\t\t<Command.Item\n\t\t\t\t\t\t\t\t\t\tvalue={framework}\n\t\t\t\t\t\t\t\t\t\tonSelect={() => toggleValue(framework, \"invalid\")}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\t\tlucide=\"CheckIcon\"\n\t\t\t\t\t\t\t\t\t\t\ttabler=\"IconCheck\"\n\t\t\t\t\t\t\t\t\t\t\thugeicons=\"Tick02Icon\"\n\t\t\t\t\t\t\t\t\t\t\tphosphor=\"CheckIcon\"\n\t\t\t\t\t\t\t\t\t\t\tremixicon=\"RiCheckLine\"\n\t\t\t\t\t\t\t\t\t\t\tclass={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t!valuesInvalid.includes(framework) &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t\"text-transparent\"\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t{framework}\n\t\t\t\t\t\t\t\t\t</Command.Item>\n\t\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t</Command.Group>\n\t\t\t\t\t\t</Command.List>\n\t\t\t\t\t</Command.Root>\n\t\t\t\t</Popover.Content>\n\t\t\t</Popover.Root>\n\t\t\t<Field.Description>Please select at least one framework.</Field.Description>\n\t\t\t<Field.Error errors={[{ message: \"This field is required.\" }]} />\n\t\t</Field.Field>\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/combobox/combobox-multiple.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Command from \"$lib/registry/ui/command/index.js\";\n\timport * as Popover from \"$lib/registry/ui/popover/index.js\";\n\timport { Badge } from \"$lib/registry/ui/badge/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tconst frameworks = [\"Next.js\", \"SvelteKit\", \"Nuxt.js\", \"Remix\", \"Astro\"] as const;\n\n\tlet open = $state(false);\n\tlet values = $state<string[]>([frameworks[0]]);\n\n\tfunction toggleValue(framework: (typeof frameworks)[number]) {\n\t\tvalues = values.includes(framework)\n\t\t\t? values.filter((v) => v !== framework)\n\t\t\t: [...values, framework];\n\t}\n\n\tfunction removeValue(e: MouseEvent, framework: string) {\n\t\te.stopPropagation();\n\t\tvalues = values.filter((v) => v !== framework);\n\t}\n</script>\n\n<Example title=\"Combobox Multiple\">\n\t<Popover.Root bind:open>\n\t\t<Popover.Trigger>\n\t\t\t{#snippet child({ props })}\n\t\t\t\t<div\n\t\t\t\t\t{...props}\n\t\t\t\t\trole=\"combobox\"\n\t\t\t\t\taria-expanded={open}\n\t\t\t\t\tclass=\"border-input bg-background focus-within:ring-ring flex min-h-9 w-64 cursor-pointer flex-wrap items-center gap-1.5 rounded-md border px-2.5 py-1.5 text-sm shadow-xs transition-colors focus-within:ring-2 focus-within:ring-offset-2\"\n\t\t\t\t>\n\t\t\t\t\t{#each values as framework (framework)}\n\t\t\t\t\t\t<Badge\n\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\tclass=\"gap-1 pr-0.5\"\n\t\t\t\t\t\t\tonclick={(e) => removeValue(e, framework)}\n\t\t\t\t\t\t\tonkeydown={(e) =>\n\t\t\t\t\t\t\t\te.key === \"Enter\" &&\n\t\t\t\t\t\t\t\tremoveValue(e as unknown as MouseEvent, framework)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{framework}\n\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\tlucide=\"XIcon\"\n\t\t\t\t\t\t\t\ttabler=\"IconX\"\n\t\t\t\t\t\t\t\thugeicons=\"Cancel01Icon\"\n\t\t\t\t\t\t\t\tphosphor=\"XIcon\"\n\t\t\t\t\t\t\t\tremixicon=\"RiCloseLine\"\n\t\t\t\t\t\t\t\tclass=\"size-3\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</Badge>\n\t\t\t\t\t{/each}\n\t\t\t\t\t<span class=\"text-muted-foreground flex-1 py-1 text-sm\"\n\t\t\t\t\t\t>Select frameworks...</span\n\t\t\t\t\t>\n\t\t\t\t</div>\n\t\t\t{/snippet}\n\t\t</Popover.Trigger>\n\t\t<Popover.Content class=\"w-64 p-0\" align=\"start\">\n\t\t\t<Command.Root>\n\t\t\t\t<Command.Input placeholder=\"Search framework...\" />\n\t\t\t\t<Command.List>\n\t\t\t\t\t<Command.Empty>No items found.</Command.Empty>\n\t\t\t\t\t<Command.Group value=\"frameworks\">\n\t\t\t\t\t\t{#each frameworks as framework (framework)}\n\t\t\t\t\t\t\t<Command.Item value={framework} onSelect={() => toggleValue(framework)}>\n\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\tlucide=\"CheckIcon\"\n\t\t\t\t\t\t\t\t\ttabler=\"IconCheck\"\n\t\t\t\t\t\t\t\t\thugeicons=\"Tick02Icon\"\n\t\t\t\t\t\t\t\t\tphosphor=\"CheckIcon\"\n\t\t\t\t\t\t\t\t\tremixicon=\"RiCheckLine\"\n\t\t\t\t\t\t\t\t\tclass={cn(!values.includes(framework) && \"text-transparent\")}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t{framework}\n\t\t\t\t\t\t\t</Command.Item>\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</Command.Group>\n\t\t\t\t</Command.List>\n\t\t\t</Command.Root>\n\t\t</Popover.Content>\n\t</Popover.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/combobox/combobox-with-custom-items.svelte",
    "content": "<script lang=\"ts\">\n\timport { tick } from \"svelte\";\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Command from \"$lib/registry/ui/command/index.js\";\n\timport * as Popover from \"$lib/registry/ui/popover/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Item from \"$lib/registry/ui/item/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tconst countries = [\n\t\t{ code: \"us\", value: \"united-states\", label: \"United States\", continent: \"North America\" },\n\t\t{ code: \"gb\", value: \"united-kingdom\", label: \"United Kingdom\", continent: \"Europe\" },\n\t\t{ code: \"ca\", value: \"canada\", label: \"Canada\", continent: \"North America\" },\n\t\t{ code: \"au\", value: \"australia\", label: \"Australia\", continent: \"Oceania\" },\n\t\t{ code: \"de\", value: \"germany\", label: \"Germany\", continent: \"Europe\" },\n\t\t{ code: \"fr\", value: \"france\", label: \"France\", continent: \"Europe\" },\n\t\t{ code: \"jp\", value: \"japan\", label: \"Japan\", continent: \"Asia\" },\n\t\t{ code: \"cn\", value: \"china\", label: \"China\", continent: \"Asia\" },\n\t\t{ code: \"br\", value: \"brazil\", label: \"Brazil\", continent: \"South America\" },\n\t\t{ code: \"in\", value: \"india\", label: \"India\", continent: \"Asia\" },\n\t];\n\n\tlet open = $state(false);\n\tlet value = $state<(typeof countries)[0] | null>(null);\n\tlet triggerRef = $state<HTMLButtonElement>(null!);\n\n\tfunction closeAndFocusTrigger() {\n\t\topen = false;\n\t\ttick().then(() => {\n\t\t\ttriggerRef?.focus();\n\t\t});\n\t}\n</script>\n\n<Example title=\"With Custom Item Rendering\">\n\t<Popover.Root bind:open>\n\t\t<Popover.Trigger bind:ref={triggerRef}>\n\t\t\t{#snippet child({ props })}\n\t\t\t\t<Button\n\t\t\t\t\t{...props}\n\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\tclass=\"w-[200px] justify-between font-normal\"\n\t\t\t\t\trole=\"combobox\"\n\t\t\t\t\taria-expanded={open}\n\t\t\t\t>\n\t\t\t\t\t{value?.label ?? \"Search countries...\"}\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"ChevronDownIcon\"\n\t\t\t\t\t\ttabler=\"IconChevronDown\"\n\t\t\t\t\t\thugeicons=\"ArrowDown01Icon\"\n\t\t\t\t\t\tphosphor=\"CaretDownIcon\"\n\t\t\t\t\t\tremixicon=\"RiArrowDownSLine\"\n\t\t\t\t\t\tclass=\"text-muted-foreground size-4 opacity-50\"\n\t\t\t\t\t/>\n\t\t\t\t</Button>\n\t\t\t{/snippet}\n\t\t</Popover.Trigger>\n\t\t<Popover.Content class=\"w-[280px] p-0\" align=\"start\">\n\t\t\t<Command.Root>\n\t\t\t\t<Command.Input placeholder=\"Search countries...\" />\n\t\t\t\t<Command.List>\n\t\t\t\t\t<Command.Empty>No countries found.</Command.Empty>\n\t\t\t\t\t<Command.Group value=\"countries\">\n\t\t\t\t\t\t{#each countries as country (country.code)}\n\t\t\t\t\t\t\t<Command.Item\n\t\t\t\t\t\t\t\tvalue={country.label}\n\t\t\t\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t\t\t\tvalue = country;\n\t\t\t\t\t\t\t\t\tcloseAndFocusTrigger();\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\tlucide=\"CheckIcon\"\n\t\t\t\t\t\t\t\t\ttabler=\"IconCheck\"\n\t\t\t\t\t\t\t\t\thugeicons=\"Tick02Icon\"\n\t\t\t\t\t\t\t\t\tphosphor=\"CheckIcon\"\n\t\t\t\t\t\t\t\t\tremixicon=\"RiCheckLine\"\n\t\t\t\t\t\t\t\t\tclass={cn(value?.code !== country.code && \"text-transparent\")}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<Item.Root size=\"xs\" class=\"p-0\">\n\t\t\t\t\t\t\t\t\t<Item.Content>\n\t\t\t\t\t\t\t\t\t\t<Item.Title class=\"whitespace-nowrap\"\n\t\t\t\t\t\t\t\t\t\t\t>{country.label}</Item.Title\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<Item.Description>\n\t\t\t\t\t\t\t\t\t\t\t{country.continent} ({country.code})\n\t\t\t\t\t\t\t\t\t\t</Item.Description>\n\t\t\t\t\t\t\t\t\t</Item.Content>\n\t\t\t\t\t\t\t\t</Item.Root>\n\t\t\t\t\t\t\t</Command.Item>\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</Command.Group>\n\t\t\t\t</Command.List>\n\t\t\t</Command.Root>\n\t\t</Popover.Content>\n\t</Popover.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/combobox/combobox-with-form.svelte",
    "content": "<script lang=\"ts\">\n\timport { tick } from \"svelte\";\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport * as Command from \"$lib/registry/ui/command/index.js\";\n\timport * as Popover from \"$lib/registry/ui/popover/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\timport { toast } from \"svelte-sonner\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tconst frameworks = [\"Next.js\", \"SvelteKit\", \"Nuxt.js\", \"Remix\", \"Astro\"] as const;\n\n\tlet open = $state(false);\n\tlet value = $state(\"\");\n\tlet triggerRef = $state<HTMLButtonElement>(null!);\n\n\tconst selectedValue = $derived(value || null);\n\n\tfunction closeAndFocusTrigger() {\n\t\topen = false;\n\t\ttick().then(() => {\n\t\t\ttriggerRef?.focus();\n\t\t});\n\t}\n\n\tfunction handleSubmit(e: SubmitEvent) {\n\t\te.preventDefault();\n\t\tconst formData = new FormData(e.target as HTMLFormElement);\n\t\tconst framework = formData.get(\"framework\") as string;\n\t\ttoast(`You selected ${framework} as your framework.`);\n\t}\n</script>\n\n<Example title=\"Form with Combobox\">\n\t<Card.Root class=\"w-full max-w-sm\" size=\"sm\">\n\t\t<Card.Content>\n\t\t\t<form id=\"form-with-combobox\" class=\"w-full\" onsubmit={handleSubmit}>\n\t\t\t\t<Field.Group>\n\t\t\t\t\t<Field.Field>\n\t\t\t\t\t\t<Field.Label for=\"framework\">Framework</Field.Label>\n\t\t\t\t\t\t<div class=\"relative\">\n\t\t\t\t\t\t\t<input type=\"hidden\" name=\"framework\" {value} />\n\t\t\t\t\t\t\t<Popover.Root bind:open>\n\t\t\t\t\t\t\t\t<Popover.Trigger bind:ref={triggerRef}>\n\t\t\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t{...props}\n\t\t\t\t\t\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\t\t\t\t\t\tclass=\"w-full justify-between font-normal\"\n\t\t\t\t\t\t\t\t\t\t\trole=\"combobox\"\n\t\t\t\t\t\t\t\t\t\t\taria-expanded={open}\n\t\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\t\taria-describedby={undefined}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{selectedValue ?? \"Select a framework\"}\n\t\t\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\t\t\tlucide=\"ChevronDownIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\ttabler=\"IconChevronDown\"\n\t\t\t\t\t\t\t\t\t\t\t\thugeicons=\"ArrowDown01Icon\"\n\t\t\t\t\t\t\t\t\t\t\t\tphosphor=\"CaretDownIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\tremixicon=\"RiArrowDownSLine\"\n\t\t\t\t\t\t\t\t\t\t\t\tclass=\"text-muted-foreground size-4 opacity-50\"\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t\t\t</Popover.Trigger>\n\t\t\t\t\t\t\t\t<Popover.Content class=\"w-[200px] p-0\" align=\"start\">\n\t\t\t\t\t\t\t\t\t<Command.Root>\n\t\t\t\t\t\t\t\t\t\t<Command.Input placeholder=\"Search framework...\" />\n\t\t\t\t\t\t\t\t\t\t<Command.List>\n\t\t\t\t\t\t\t\t\t\t\t<Command.Empty>No items found.</Command.Empty>\n\t\t\t\t\t\t\t\t\t\t\t<Command.Group value=\"frameworks\">\n\t\t\t\t\t\t\t\t\t\t\t\t{#each frameworks as framework (framework)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Command.Item\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalue={framework}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalue = framework;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcloseAndFocusTrigger();\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tlucide=\"CheckIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttabler=\"IconCheck\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\thugeicons=\"Tick02Icon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tphosphor=\"CheckIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tremixicon=\"RiCheckLine\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tclass={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalue !== framework &&\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\"text-transparent\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{framework}\n\t\t\t\t\t\t\t\t\t\t\t\t\t</Command.Item>\n\t\t\t\t\t\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t\t\t\t\t</Command.Group>\n\t\t\t\t\t\t\t\t\t\t</Command.List>\n\t\t\t\t\t\t\t\t\t</Command.Root>\n\t\t\t\t\t\t\t\t</Popover.Content>\n\t\t\t\t\t\t\t</Popover.Root>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</Field.Field>\n\t\t\t\t</Field.Group>\n\t\t\t</form>\n\t\t</Card.Content>\n\t\t<Card.Footer>\n\t\t\t<Button type=\"submit\" form=\"form-with-combobox\">Submit</Button>\n\t\t</Card.Footer>\n\t</Card.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/combobox/combobox-with-groups-and-separator.svelte",
    "content": "<script lang=\"ts\">\n\timport { tick } from \"svelte\";\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Command from \"$lib/registry/ui/command/index.js\";\n\timport * as Popover from \"$lib/registry/ui/popover/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tconst timezones = [\n\t\t{\n\t\t\tvalue: \"Americas\",\n\t\t\titems: [\n\t\t\t\t\"(GMT-5) New York\",\n\t\t\t\t\"(GMT-8) Los Angeles\",\n\t\t\t\t\"(GMT-6) Chicago\",\n\t\t\t\t\"(GMT-5) Toronto\",\n\t\t\t\t\"(GMT-8) Vancouver\",\n\t\t\t\t\"(GMT-3) São Paulo\",\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tvalue: \"Europe\",\n\t\t\titems: [\n\t\t\t\t\"(GMT+0) London\",\n\t\t\t\t\"(GMT+1) Paris\",\n\t\t\t\t\"(GMT+1) Berlin\",\n\t\t\t\t\"(GMT+1) Rome\",\n\t\t\t\t\"(GMT+1) Madrid\",\n\t\t\t\t\"(GMT+1) Amsterdam\",\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tvalue: \"Asia/Pacific\",\n\t\t\titems: [\n\t\t\t\t\"(GMT+9) Tokyo\",\n\t\t\t\t\"(GMT+8) Shanghai\",\n\t\t\t\t\"(GMT+8) Singapore\",\n\t\t\t\t\"(GMT+4) Dubai\",\n\t\t\t\t\"(GMT+11) Sydney\",\n\t\t\t\t\"(GMT+9) Seoul\",\n\t\t\t],\n\t\t},\n\t] as const;\n\n\tlet open = $state(false);\n\tlet value = $state(\"\");\n\tlet triggerRef = $state<HTMLButtonElement>(null!);\n\n\tfunction closeAndFocusTrigger() {\n\t\topen = false;\n\t\ttick().then(() => {\n\t\t\ttriggerRef?.focus();\n\t\t});\n\t}\n</script>\n\n<Example title=\"With Groups and Separator\">\n\t<Popover.Root bind:open>\n\t\t<Popover.Trigger bind:ref={triggerRef}>\n\t\t\t{#snippet child({ props })}\n\t\t\t\t<Button\n\t\t\t\t\t{...props}\n\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\tclass=\"w-[200px] justify-between font-normal\"\n\t\t\t\t\trole=\"combobox\"\n\t\t\t\t\taria-expanded={open}\n\t\t\t\t>\n\t\t\t\t\t{value || \"Select a timezone\"}\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"ChevronDownIcon\"\n\t\t\t\t\t\ttabler=\"IconChevronDown\"\n\t\t\t\t\t\thugeicons=\"ArrowDown01Icon\"\n\t\t\t\t\t\tphosphor=\"CaretDownIcon\"\n\t\t\t\t\t\tremixicon=\"RiArrowDownSLine\"\n\t\t\t\t\t\tclass=\"text-muted-foreground size-4 opacity-50\"\n\t\t\t\t\t/>\n\t\t\t\t</Button>\n\t\t\t{/snippet}\n\t\t</Popover.Trigger>\n\t\t<Popover.Content class=\"w-[200px] p-0\" align=\"start\">\n\t\t\t<Command.Root>\n\t\t\t\t<Command.Input placeholder=\"Search timezone...\" />\n\t\t\t\t<Command.List>\n\t\t\t\t\t<Command.Empty>No timezones found.</Command.Empty>\n\t\t\t\t\t{#each timezones as group (group.value)}\n\t\t\t\t\t\t<Command.Group heading={group.value} value={group.value}>\n\t\t\t\t\t\t\t{#each group.items as item (item)}\n\t\t\t\t\t\t\t\t<Command.Item\n\t\t\t\t\t\t\t\t\tvalue={item}\n\t\t\t\t\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t\t\t\t\tvalue = item;\n\t\t\t\t\t\t\t\t\t\tcloseAndFocusTrigger();\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\tlucide=\"CheckIcon\"\n\t\t\t\t\t\t\t\t\t\ttabler=\"IconCheck\"\n\t\t\t\t\t\t\t\t\t\thugeicons=\"Tick02Icon\"\n\t\t\t\t\t\t\t\t\t\tphosphor=\"CheckIcon\"\n\t\t\t\t\t\t\t\t\t\tremixicon=\"RiCheckLine\"\n\t\t\t\t\t\t\t\t\t\tclass={cn(value !== item && \"text-transparent\")}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t{item}\n\t\t\t\t\t\t\t\t</Command.Item>\n\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t</Command.Group>\n\t\t\t\t\t\t<Command.Separator />\n\t\t\t\t\t{/each}\n\t\t\t\t</Command.List>\n\t\t\t</Command.Root>\n\t\t</Popover.Content>\n\t</Popover.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/combobox/combobox-with-groups.svelte",
    "content": "<script lang=\"ts\">\n\timport { tick } from \"svelte\";\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Command from \"$lib/registry/ui/command/index.js\";\n\timport * as Popover from \"$lib/registry/ui/popover/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tconst timezones = [\n\t\t{\n\t\t\tvalue: \"Americas\",\n\t\t\titems: [\n\t\t\t\t\"(GMT-5) New York\",\n\t\t\t\t\"(GMT-8) Los Angeles\",\n\t\t\t\t\"(GMT-6) Chicago\",\n\t\t\t\t\"(GMT-5) Toronto\",\n\t\t\t\t\"(GMT-8) Vancouver\",\n\t\t\t\t\"(GMT-3) São Paulo\",\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tvalue: \"Europe\",\n\t\t\titems: [\n\t\t\t\t\"(GMT+0) London\",\n\t\t\t\t\"(GMT+1) Paris\",\n\t\t\t\t\"(GMT+1) Berlin\",\n\t\t\t\t\"(GMT+1) Rome\",\n\t\t\t\t\"(GMT+1) Madrid\",\n\t\t\t\t\"(GMT+1) Amsterdam\",\n\t\t\t],\n\t\t},\n\t\t{\n\t\t\tvalue: \"Asia/Pacific\",\n\t\t\titems: [\n\t\t\t\t\"(GMT+9) Tokyo\",\n\t\t\t\t\"(GMT+8) Shanghai\",\n\t\t\t\t\"(GMT+8) Singapore\",\n\t\t\t\t\"(GMT+4) Dubai\",\n\t\t\t\t\"(GMT+11) Sydney\",\n\t\t\t\t\"(GMT+9) Seoul\",\n\t\t\t],\n\t\t},\n\t] as const;\n\n\tlet open = $state(false);\n\tlet value = $state(\"\");\n\tlet triggerRef = $state<HTMLButtonElement>(null!);\n\n\tfunction closeAndFocusTrigger() {\n\t\topen = false;\n\t\ttick().then(() => {\n\t\t\ttriggerRef?.focus();\n\t\t});\n\t}\n</script>\n\n<Example title=\"With Groups\">\n\t<Popover.Root bind:open>\n\t\t<Popover.Trigger bind:ref={triggerRef}>\n\t\t\t{#snippet child({ props })}\n\t\t\t\t<Button\n\t\t\t\t\t{...props}\n\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\tclass=\"w-[200px] justify-between font-normal\"\n\t\t\t\t\trole=\"combobox\"\n\t\t\t\t\taria-expanded={open}\n\t\t\t\t>\n\t\t\t\t\t{value || \"Select a timezone\"}\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"ChevronDownIcon\"\n\t\t\t\t\t\ttabler=\"IconChevronDown\"\n\t\t\t\t\t\thugeicons=\"ArrowDown01Icon\"\n\t\t\t\t\t\tphosphor=\"CaretDownIcon\"\n\t\t\t\t\t\tremixicon=\"RiArrowDownSLine\"\n\t\t\t\t\t\tclass=\"text-muted-foreground size-4 opacity-50\"\n\t\t\t\t\t/>\n\t\t\t\t</Button>\n\t\t\t{/snippet}\n\t\t</Popover.Trigger>\n\t\t<Popover.Content class=\"w-[200px] p-0\" align=\"start\">\n\t\t\t<Command.Root>\n\t\t\t\t<Command.Input placeholder=\"Search timezone...\" />\n\t\t\t\t<Command.List>\n\t\t\t\t\t<Command.Empty>No timezones found.</Command.Empty>\n\t\t\t\t\t{#each timezones as group (group.value)}\n\t\t\t\t\t\t<Command.Group heading={group.value} value={group.value}>\n\t\t\t\t\t\t\t{#each group.items as item (item)}\n\t\t\t\t\t\t\t\t<Command.Item\n\t\t\t\t\t\t\t\t\tvalue={item}\n\t\t\t\t\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t\t\t\t\tvalue = item;\n\t\t\t\t\t\t\t\t\t\tcloseAndFocusTrigger();\n\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\tlucide=\"CheckIcon\"\n\t\t\t\t\t\t\t\t\t\ttabler=\"IconCheck\"\n\t\t\t\t\t\t\t\t\t\thugeicons=\"Tick02Icon\"\n\t\t\t\t\t\t\t\t\t\tphosphor=\"CheckIcon\"\n\t\t\t\t\t\t\t\t\t\tremixicon=\"RiCheckLine\"\n\t\t\t\t\t\t\t\t\t\tclass={cn(value !== item && \"text-transparent\")}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t{item}\n\t\t\t\t\t\t\t\t</Command.Item>\n\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t</Command.Group>\n\t\t\t\t\t{/each}\n\t\t\t\t</Command.List>\n\t\t\t</Command.Root>\n\t\t</Popover.Content>\n\t</Popover.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/combobox/combobox.svelte",
    "content": "<script lang=\"ts\">\n\timport ExampleWrapper from \"../../../../../routes/(app)/(layout)/(create)/components/example-wrapper.svelte\";\n\timport ComboboxBasic from \"./combobox-basic.svelte\";\n\timport ComboboxDisabled from \"./combobox-disabled.svelte\";\n\timport ComboboxDisabledItems from \"./combobox-disabled-items.svelte\";\n\timport ComboboxInDialog from \"./combobox-in-dialog.svelte\";\n\timport ComboboxInPopup from \"./combobox-in-popup.svelte\";\n\timport ComboboxInvalid from \"./combobox-invalid.svelte\";\n\timport ComboboxLargeList from \"./combobox-large-list.svelte\";\n\timport ComboboxMultiple from \"./combobox-multiple.svelte\";\n\timport ComboboxMultipleInvalid from \"./combobox-multiple-invalid.svelte\";\n\timport ComboboxWithCustomItems from \"./combobox-with-custom-items.svelte\";\n\timport ComboboxWithForm from \"./combobox-with-form.svelte\";\n\timport ComboboxWithGroups from \"./combobox-with-groups.svelte\";\n\timport ComboboxWithGroupsAndSeparator from \"./combobox-with-groups-and-separator.svelte\";\n</script>\n\n<ExampleWrapper>\n\t<ComboboxBasic />\n\t<ComboboxDisabled />\n\t<ComboboxInvalid />\n\t<ComboboxWithGroups />\n\t<ComboboxWithGroupsAndSeparator />\n\t<ComboboxLargeList />\n\t<ComboboxInPopup />\n\t<ComboboxWithForm />\n\t<ComboboxMultiple />\n\t<ComboboxMultipleInvalid />\n\t<ComboboxWithCustomItems />\n\t<ComboboxInDialog />\n\t<ComboboxDisabledItems />\n</ExampleWrapper>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/command/command-basic.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Command from \"$lib/registry/ui/command/index.js\";\n\n\tlet open = $state(false);\n</script>\n\n<Example title=\"Basic\">\n\t<div class=\"flex flex-col gap-4\">\n\t\t<Button onclick={() => (open = true)} variant=\"outline\" class=\"w-fit\">Open Menu</Button>\n\t\t<Command.Dialog bind:open>\n\t\t\t<Command.Input placeholder=\"Type a command or search...\" />\n\t\t\t<Command.List>\n\t\t\t\t<Command.Empty>No results found.</Command.Empty>\n\t\t\t\t<Command.Group heading=\"Suggestions\">\n\t\t\t\t\t<Command.Item>Calendar</Command.Item>\n\t\t\t\t\t<Command.Item>Search Emoji</Command.Item>\n\t\t\t\t\t<Command.Item>Calculator</Command.Item>\n\t\t\t\t</Command.Group>\n\t\t\t</Command.List>\n\t\t</Command.Dialog>\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/command/command-inline.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Command from \"$lib/registry/ui/command/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Example title=\"Inline\">\n\t<Card.Root class=\"w-full p-0\">\n\t\t<Card.Content class=\"p-0\">\n\t\t\t<Command.Root>\n\t\t\t\t<Command.Input placeholder=\"Type a command or search...\" />\n\t\t\t\t<Command.List>\n\t\t\t\t\t<Command.Empty>No results found.</Command.Empty>\n\t\t\t\t\t<Command.Group heading=\"Suggestions\">\n\t\t\t\t\t\t<Command.Item>\n\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\tlucide=\"CalendarIcon\"\n\t\t\t\t\t\t\t\ttabler=\"IconCalendar\"\n\t\t\t\t\t\t\t\thugeicons=\"CalendarIcon\"\n\t\t\t\t\t\t\t\tphosphor=\"CalendarBlankIcon\"\n\t\t\t\t\t\t\t\tremixicon=\"RiCalendarLine\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<span>Calendar</span>\n\t\t\t\t\t\t</Command.Item>\n\t\t\t\t\t\t<Command.Item>\n\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\tlucide=\"SmileIcon\"\n\t\t\t\t\t\t\t\ttabler=\"IconMoodSmile\"\n\t\t\t\t\t\t\t\thugeicons=\"SmileIcon\"\n\t\t\t\t\t\t\t\tphosphor=\"SmileyIcon\"\n\t\t\t\t\t\t\t\tremixicon=\"RiEmotionLine\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<span>Search Emoji</span>\n\t\t\t\t\t\t</Command.Item>\n\t\t\t\t\t\t<Command.Item>\n\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\tlucide=\"CalculatorIcon\"\n\t\t\t\t\t\t\t\ttabler=\"IconCalculator\"\n\t\t\t\t\t\t\t\thugeicons=\"CalculatorIcon\"\n\t\t\t\t\t\t\t\tphosphor=\"CalculatorIcon\"\n\t\t\t\t\t\t\t\tremixicon=\"RiCalculatorLine\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<span>Calculator</span>\n\t\t\t\t\t\t</Command.Item>\n\t\t\t\t\t</Command.Group>\n\t\t\t\t\t<Command.Separator />\n\t\t\t\t\t<Command.Group heading=\"Settings\">\n\t\t\t\t\t\t<Command.Item>\n\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\tlucide=\"UserIcon\"\n\t\t\t\t\t\t\t\ttabler=\"IconUser\"\n\t\t\t\t\t\t\t\thugeicons=\"UserIcon\"\n\t\t\t\t\t\t\t\tphosphor=\"UserIcon\"\n\t\t\t\t\t\t\t\tremixicon=\"RiUserLine\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<span>Profile</span>\n\t\t\t\t\t\t\t<Command.Shortcut>⌘P</Command.Shortcut>\n\t\t\t\t\t\t</Command.Item>\n\t\t\t\t\t\t<Command.Item>\n\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\tlucide=\"CreditCardIcon\"\n\t\t\t\t\t\t\t\ttabler=\"IconCreditCard\"\n\t\t\t\t\t\t\t\thugeicons=\"CreditCardIcon\"\n\t\t\t\t\t\t\t\tphosphor=\"CreditCardIcon\"\n\t\t\t\t\t\t\t\tremixicon=\"RiBankCardLine\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<span>Billing</span>\n\t\t\t\t\t\t\t<Command.Shortcut>⌘B</Command.Shortcut>\n\t\t\t\t\t\t</Command.Item>\n\t\t\t\t\t\t<Command.Item>\n\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\tlucide=\"SettingsIcon\"\n\t\t\t\t\t\t\t\ttabler=\"IconSettings\"\n\t\t\t\t\t\t\t\thugeicons=\"SettingsIcon\"\n\t\t\t\t\t\t\t\tphosphor=\"GearIcon\"\n\t\t\t\t\t\t\t\tremixicon=\"RiSettingsLine\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<span>Settings</span>\n\t\t\t\t\t\t\t<Command.Shortcut>⌘S</Command.Shortcut>\n\t\t\t\t\t\t</Command.Item>\n\t\t\t\t\t</Command.Group>\n\t\t\t\t</Command.List>\n\t\t\t</Command.Root>\n\t\t</Card.Content>\n\t</Card.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/command/command-many-items.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Command from \"$lib/registry/ui/command/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\n\tlet open = $state(false);\n</script>\n\n<Example title=\"Many Groups & Items\">\n\t<div class=\"flex flex-col gap-4\">\n\t\t<Button onclick={() => (open = true)} variant=\"outline\" class=\"w-fit\">Open Menu</Button>\n\t\t<Command.Dialog bind:open>\n\t\t\t<Command.Input placeholder=\"Type a command or search...\" />\n\t\t\t<Command.List>\n\t\t\t\t<Command.Empty>No results found.</Command.Empty>\n\t\t\t\t<Command.Group heading=\"Navigation\">\n\t\t\t\t\t<Command.Item>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"HomeIcon\"\n\t\t\t\t\t\t\ttabler=\"IconHome\"\n\t\t\t\t\t\t\thugeicons=\"HomeIcon\"\n\t\t\t\t\t\t\tphosphor=\"HouseIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiHomeLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<span>Home</span>\n\t\t\t\t\t\t<Command.Shortcut>⌘H</Command.Shortcut>\n\t\t\t\t\t</Command.Item>\n\t\t\t\t\t<Command.Item>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"InboxIcon\"\n\t\t\t\t\t\t\ttabler=\"IconInbox\"\n\t\t\t\t\t\t\thugeicons=\"InboxIcon\"\n\t\t\t\t\t\t\tphosphor=\"TrayIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiInboxLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<span>Inbox</span>\n\t\t\t\t\t\t<Command.Shortcut>⌘I</Command.Shortcut>\n\t\t\t\t\t</Command.Item>\n\t\t\t\t\t<Command.Item>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"FileTextIcon\"\n\t\t\t\t\t\t\ttabler=\"IconFileText\"\n\t\t\t\t\t\t\thugeicons=\"File02Icon\"\n\t\t\t\t\t\t\tphosphor=\"FileTextIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiFileTextLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<span>Documents</span>\n\t\t\t\t\t\t<Command.Shortcut>⌘D</Command.Shortcut>\n\t\t\t\t\t</Command.Item>\n\t\t\t\t\t<Command.Item>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"FolderIcon\"\n\t\t\t\t\t\t\ttabler=\"IconFolder\"\n\t\t\t\t\t\t\thugeicons=\"FolderIcon\"\n\t\t\t\t\t\t\tphosphor=\"FolderIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiFolderLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<span>Folders</span>\n\t\t\t\t\t\t<Command.Shortcut>⌘F</Command.Shortcut>\n\t\t\t\t\t</Command.Item>\n\t\t\t\t</Command.Group>\n\t\t\t\t<Command.Separator />\n\t\t\t\t<Command.Group heading=\"Actions\">\n\t\t\t\t\t<Command.Item>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"PlusIcon\"\n\t\t\t\t\t\t\ttabler=\"IconPlus\"\n\t\t\t\t\t\t\thugeicons=\"PlusSignIcon\"\n\t\t\t\t\t\t\tphosphor=\"PlusIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiAddLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<span>New File</span>\n\t\t\t\t\t\t<Command.Shortcut>⌘N</Command.Shortcut>\n\t\t\t\t\t</Command.Item>\n\t\t\t\t\t<Command.Item>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"FolderPlusIcon\"\n\t\t\t\t\t\t\ttabler=\"IconFolderPlus\"\n\t\t\t\t\t\t\thugeicons=\"FolderAddIcon\"\n\t\t\t\t\t\t\tphosphor=\"FolderPlusIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiFolderAddLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<span>New Folder</span>\n\t\t\t\t\t\t<Command.Shortcut>⇧⌘N</Command.Shortcut>\n\t\t\t\t\t</Command.Item>\n\t\t\t\t\t<Command.Item>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"CopyIcon\"\n\t\t\t\t\t\t\ttabler=\"IconCopy\"\n\t\t\t\t\t\t\thugeicons=\"CopyIcon\"\n\t\t\t\t\t\t\tphosphor=\"CopyIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiFileCopyLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<span>Copy</span>\n\t\t\t\t\t\t<Command.Shortcut>⌘C</Command.Shortcut>\n\t\t\t\t\t</Command.Item>\n\t\t\t\t\t<Command.Item>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"ScissorsIcon\"\n\t\t\t\t\t\t\ttabler=\"IconCut\"\n\t\t\t\t\t\t\thugeicons=\"ScissorIcon\"\n\t\t\t\t\t\t\tphosphor=\"ScissorsIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiScissorsLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<span>Cut</span>\n\t\t\t\t\t\t<Command.Shortcut>⌘X</Command.Shortcut>\n\t\t\t\t\t</Command.Item>\n\t\t\t\t\t<Command.Item>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"ClipboardPasteIcon\"\n\t\t\t\t\t\t\ttabler=\"IconClipboard\"\n\t\t\t\t\t\t\thugeicons=\"ClipboardIcon\"\n\t\t\t\t\t\t\tphosphor=\"ClipboardIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiClipboardLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<span>Paste</span>\n\t\t\t\t\t\t<Command.Shortcut>⌘V</Command.Shortcut>\n\t\t\t\t\t</Command.Item>\n\t\t\t\t\t<Command.Item>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"TrashIcon\"\n\t\t\t\t\t\t\ttabler=\"IconTrash\"\n\t\t\t\t\t\t\thugeicons=\"DeleteIcon\"\n\t\t\t\t\t\t\tphosphor=\"TrashIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiDeleteBinLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<span>Delete</span>\n\t\t\t\t\t\t<Command.Shortcut>⌫</Command.Shortcut>\n\t\t\t\t\t</Command.Item>\n\t\t\t\t</Command.Group>\n\t\t\t\t<Command.Separator />\n\t\t\t\t<Command.Group heading=\"View\">\n\t\t\t\t\t<Command.Item>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"LayoutGridIcon\"\n\t\t\t\t\t\t\ttabler=\"IconLayoutGrid\"\n\t\t\t\t\t\t\thugeicons=\"GridIcon\"\n\t\t\t\t\t\t\tphosphor=\"GridFourIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiGridLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<span>Grid View</span>\n\t\t\t\t\t</Command.Item>\n\t\t\t\t\t<Command.Item>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"ListIcon\"\n\t\t\t\t\t\t\ttabler=\"IconList\"\n\t\t\t\t\t\t\thugeicons=\"Menu05Icon\"\n\t\t\t\t\t\t\tphosphor=\"ListIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiListUnordered\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<span>List View</span>\n\t\t\t\t\t</Command.Item>\n\t\t\t\t\t<Command.Item>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"ZoomInIcon\"\n\t\t\t\t\t\t\ttabler=\"IconZoomIn\"\n\t\t\t\t\t\t\thugeicons=\"ZoomInAreaIcon\"\n\t\t\t\t\t\t\tphosphor=\"MagnifyingGlassPlusIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiZoomInLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<span>Zoom In</span>\n\t\t\t\t\t\t<Command.Shortcut>⌘+</Command.Shortcut>\n\t\t\t\t\t</Command.Item>\n\t\t\t\t\t<Command.Item>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"ZoomOutIcon\"\n\t\t\t\t\t\t\ttabler=\"IconZoomOut\"\n\t\t\t\t\t\t\thugeicons=\"ZoomOutAreaIcon\"\n\t\t\t\t\t\t\tphosphor=\"MagnifyingGlassMinusIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiSearchEyeLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<span>Zoom Out</span>\n\t\t\t\t\t\t<Command.Shortcut>⌘-</Command.Shortcut>\n\t\t\t\t\t</Command.Item>\n\t\t\t\t</Command.Group>\n\t\t\t\t<Command.Separator />\n\t\t\t\t<Command.Group heading=\"Account\">\n\t\t\t\t\t<Command.Item>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"UserIcon\"\n\t\t\t\t\t\t\ttabler=\"IconUser\"\n\t\t\t\t\t\t\thugeicons=\"UserIcon\"\n\t\t\t\t\t\t\tphosphor=\"UserIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiUserLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<span>Profile</span>\n\t\t\t\t\t\t<Command.Shortcut>⌘P</Command.Shortcut>\n\t\t\t\t\t</Command.Item>\n\t\t\t\t\t<Command.Item>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"CreditCardIcon\"\n\t\t\t\t\t\t\ttabler=\"IconCreditCard\"\n\t\t\t\t\t\t\thugeicons=\"CreditCardIcon\"\n\t\t\t\t\t\t\tphosphor=\"CreditCardIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiBankCardLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<span>Billing</span>\n\t\t\t\t\t\t<Command.Shortcut>⌘B</Command.Shortcut>\n\t\t\t\t\t</Command.Item>\n\t\t\t\t\t<Command.Item>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"SettingsIcon\"\n\t\t\t\t\t\t\ttabler=\"IconSettings\"\n\t\t\t\t\t\t\thugeicons=\"SettingsIcon\"\n\t\t\t\t\t\t\tphosphor=\"GearIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiSettingsLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<span>Settings</span>\n\t\t\t\t\t\t<Command.Shortcut>⌘S</Command.Shortcut>\n\t\t\t\t\t</Command.Item>\n\t\t\t\t\t<Command.Item>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"BellIcon\"\n\t\t\t\t\t\t\ttabler=\"IconBell\"\n\t\t\t\t\t\t\thugeicons=\"NotificationIcon\"\n\t\t\t\t\t\t\tphosphor=\"BellIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiNotificationLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<span>Notifications</span>\n\t\t\t\t\t</Command.Item>\n\t\t\t\t\t<Command.Item>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"HelpCircleIcon\"\n\t\t\t\t\t\t\ttabler=\"IconHelpCircle\"\n\t\t\t\t\t\t\thugeicons=\"HelpCircleIcon\"\n\t\t\t\t\t\t\tphosphor=\"QuestionIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiQuestionLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<span>Help & Support</span>\n\t\t\t\t\t</Command.Item>\n\t\t\t\t</Command.Group>\n\t\t\t\t<Command.Separator />\n\t\t\t\t<Command.Group heading=\"Tools\">\n\t\t\t\t\t<Command.Item>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"CalculatorIcon\"\n\t\t\t\t\t\t\ttabler=\"IconCalculator\"\n\t\t\t\t\t\t\thugeicons=\"CalculatorIcon\"\n\t\t\t\t\t\t\tphosphor=\"CalculatorIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiCalculatorLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<span>Calculator</span>\n\t\t\t\t\t</Command.Item>\n\t\t\t\t\t<Command.Item>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"CalendarIcon\"\n\t\t\t\t\t\t\ttabler=\"IconCalendar\"\n\t\t\t\t\t\t\thugeicons=\"CalendarIcon\"\n\t\t\t\t\t\t\tphosphor=\"CalendarBlankIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiCalendarLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<span>Calendar</span>\n\t\t\t\t\t</Command.Item>\n\t\t\t\t\t<Command.Item>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"ImageIcon\"\n\t\t\t\t\t\t\ttabler=\"IconPhoto\"\n\t\t\t\t\t\t\thugeicons=\"ImageIcon\"\n\t\t\t\t\t\t\tphosphor=\"ImageIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiImageLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<span>Image Editor</span>\n\t\t\t\t\t</Command.Item>\n\t\t\t\t\t<Command.Item>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"CodeIcon\"\n\t\t\t\t\t\t\ttabler=\"IconCode\"\n\t\t\t\t\t\t\thugeicons=\"CodeIcon\"\n\t\t\t\t\t\t\tphosphor=\"CodeIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiCodeLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<span>Code Editor</span>\n\t\t\t\t\t</Command.Item>\n\t\t\t\t</Command.Group>\n\t\t\t</Command.List>\n\t\t</Command.Dialog>\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/command/command-with-groups.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Command from \"$lib/registry/ui/command/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\n\tlet open = $state(false);\n</script>\n\n<Example title=\"With Groups\">\n\t<div class=\"flex flex-col gap-4\">\n\t\t<Button onclick={() => (open = true)} variant=\"outline\" class=\"w-fit\">Open Menu</Button>\n\t\t<Command.Dialog bind:open>\n\t\t\t<Command.Input placeholder=\"Type a command or search...\" />\n\t\t\t<Command.List>\n\t\t\t\t<Command.Empty>No results found.</Command.Empty>\n\t\t\t\t<Command.Group heading=\"Suggestions\">\n\t\t\t\t\t<Command.Item>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"CalendarIcon\"\n\t\t\t\t\t\t\ttabler=\"IconCalendar\"\n\t\t\t\t\t\t\thugeicons=\"CalendarIcon\"\n\t\t\t\t\t\t\tphosphor=\"CalendarBlankIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiCalendarLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<span>Calendar</span>\n\t\t\t\t\t</Command.Item>\n\t\t\t\t\t<Command.Item>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"SmileIcon\"\n\t\t\t\t\t\t\ttabler=\"IconMoodSmile\"\n\t\t\t\t\t\t\thugeicons=\"SmileIcon\"\n\t\t\t\t\t\t\tphosphor=\"SmileyIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiEmotionLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<span>Search Emoji</span>\n\t\t\t\t\t</Command.Item>\n\t\t\t\t\t<Command.Item>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"CalculatorIcon\"\n\t\t\t\t\t\t\ttabler=\"IconCalculator\"\n\t\t\t\t\t\t\thugeicons=\"CalculatorIcon\"\n\t\t\t\t\t\t\tphosphor=\"CalculatorIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiCalculatorLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<span>Calculator</span>\n\t\t\t\t\t</Command.Item>\n\t\t\t\t</Command.Group>\n\t\t\t\t<Command.Separator />\n\t\t\t\t<Command.Group heading=\"Settings\">\n\t\t\t\t\t<Command.Item>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"UserIcon\"\n\t\t\t\t\t\t\ttabler=\"IconUser\"\n\t\t\t\t\t\t\thugeicons=\"UserIcon\"\n\t\t\t\t\t\t\tphosphor=\"UserIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiUserLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<span>Profile</span>\n\t\t\t\t\t\t<Command.Shortcut>⌘P</Command.Shortcut>\n\t\t\t\t\t</Command.Item>\n\t\t\t\t\t<Command.Item>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"CreditCardIcon\"\n\t\t\t\t\t\t\ttabler=\"IconCreditCard\"\n\t\t\t\t\t\t\thugeicons=\"CreditCardIcon\"\n\t\t\t\t\t\t\tphosphor=\"CreditCardIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiBankCardLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<span>Billing</span>\n\t\t\t\t\t\t<Command.Shortcut>⌘B</Command.Shortcut>\n\t\t\t\t\t</Command.Item>\n\t\t\t\t\t<Command.Item>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"SettingsIcon\"\n\t\t\t\t\t\t\ttabler=\"IconSettings\"\n\t\t\t\t\t\t\thugeicons=\"SettingsIcon\"\n\t\t\t\t\t\t\tphosphor=\"GearIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiSettingsLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<span>Settings</span>\n\t\t\t\t\t\t<Command.Shortcut>⌘S</Command.Shortcut>\n\t\t\t\t\t</Command.Item>\n\t\t\t\t</Command.Group>\n\t\t\t</Command.List>\n\t\t</Command.Dialog>\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/command/command-with-shortcuts.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Command from \"$lib/registry/ui/command/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\n\tlet open = $state(false);\n</script>\n\n<Example title=\"With Shortcuts\">\n\t<div class=\"flex flex-col gap-4\">\n\t\t<Button onclick={() => (open = true)} variant=\"outline\" class=\"w-fit\">Open Menu</Button>\n\t\t<Command.Dialog bind:open>\n\t\t\t<Command.Input placeholder=\"Type a command or search...\" />\n\t\t\t<Command.List>\n\t\t\t\t<Command.Empty>No results found.</Command.Empty>\n\t\t\t\t<Command.Group heading=\"Settings\">\n\t\t\t\t\t<Command.Item>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"UserIcon\"\n\t\t\t\t\t\t\ttabler=\"IconUser\"\n\t\t\t\t\t\t\thugeicons=\"UserIcon\"\n\t\t\t\t\t\t\tphosphor=\"UserIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiUserLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<span>Profile</span>\n\t\t\t\t\t\t<Command.Shortcut>⌘P</Command.Shortcut>\n\t\t\t\t\t</Command.Item>\n\t\t\t\t\t<Command.Item>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"CreditCardIcon\"\n\t\t\t\t\t\t\ttabler=\"IconCreditCard\"\n\t\t\t\t\t\t\thugeicons=\"CreditCardIcon\"\n\t\t\t\t\t\t\tphosphor=\"CreditCardIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiBankCardLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<span>Billing</span>\n\t\t\t\t\t\t<Command.Shortcut>⌘B</Command.Shortcut>\n\t\t\t\t\t</Command.Item>\n\t\t\t\t\t<Command.Item>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"SettingsIcon\"\n\t\t\t\t\t\t\ttabler=\"IconSettings\"\n\t\t\t\t\t\t\thugeicons=\"SettingsIcon\"\n\t\t\t\t\t\t\tphosphor=\"GearIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiSettingsLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<span>Settings</span>\n\t\t\t\t\t\t<Command.Shortcut>⌘S</Command.Shortcut>\n\t\t\t\t\t</Command.Item>\n\t\t\t\t</Command.Group>\n\t\t\t</Command.List>\n\t\t</Command.Dialog>\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/command/command.svelte",
    "content": "<script lang=\"ts\">\n\timport ExampleWrapper from \"../../../../../routes/(app)/(layout)/(create)/components/example-wrapper.svelte\";\n\timport CommandInline from \"./command-inline.svelte\";\n\timport CommandBasic from \"./command-basic.svelte\";\n\timport CommandWithShortcuts from \"./command-with-shortcuts.svelte\";\n\timport CommandWithGroups from \"./command-with-groups.svelte\";\n\timport CommandManyItems from \"./command-many-items.svelte\";\n</script>\n\n<ExampleWrapper>\n\t<CommandInline />\n\t<CommandBasic />\n\t<CommandWithShortcuts />\n\t<CommandWithGroups />\n\t<CommandManyItems />\n</ExampleWrapper>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/context-menu/context-menu-basic.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as ContextMenu from \"$lib/registry/ui/context-menu/index.js\";\n</script>\n\n<Example title=\"Basic\">\n\t<ContextMenu.Root>\n\t\t<ContextMenu.Trigger\n\t\t\tclass=\"flex aspect-[2/0.5] w-full items-center justify-center rounded-lg border text-sm\"\n\t\t>\n\t\t\tRight click here\n\t\t</ContextMenu.Trigger>\n\t\t<ContextMenu.Content>\n\t\t\t<ContextMenu.Group>\n\t\t\t\t<ContextMenu.Item>Back</ContextMenu.Item>\n\t\t\t\t<ContextMenu.Item disabled>Forward</ContextMenu.Item>\n\t\t\t\t<ContextMenu.Item>Reload</ContextMenu.Item>\n\t\t\t</ContextMenu.Group>\n\t\t</ContextMenu.Content>\n\t</ContextMenu.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/context-menu/context-menu-in-dialog.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { buttonVariants } from \"$lib/registry/ui/button/index.js\";\n\timport * as ContextMenu from \"$lib/registry/ui/context-menu/index.js\";\n\timport * as Dialog from \"$lib/registry/ui/dialog/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\n\tlet open = $state(false);\n</script>\n\n<Example title=\"In Dialog\">\n\t<Dialog.Root bind:open>\n\t\t<Dialog.Trigger class={buttonVariants({ variant: \"outline\" })}>Open Dialog</Dialog.Trigger>\n\t\t<Dialog.Content>\n\t\t\t<Dialog.Header>\n\t\t\t\t<Dialog.Title>Context Menu Example</Dialog.Title>\n\t\t\t\t<Dialog.Description>\n\t\t\t\t\tRight click on the area below to see the context menu.\n\t\t\t\t</Dialog.Description>\n\t\t\t</Dialog.Header>\n\t\t\t<ContextMenu.Root>\n\t\t\t\t<ContextMenu.Trigger\n\t\t\t\t\tclass=\"flex aspect-[2/0.5] w-full items-center justify-center rounded-lg border text-sm\"\n\t\t\t\t>\n\t\t\t\t\tRight click here\n\t\t\t\t</ContextMenu.Trigger>\n\t\t\t\t<ContextMenu.Content>\n\t\t\t\t\t<ContextMenu.Group>\n\t\t\t\t\t\t<ContextMenu.Item>\n\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\tlucide=\"CopyIcon\"\n\t\t\t\t\t\t\t\ttabler=\"IconCopy\"\n\t\t\t\t\t\t\t\thugeicons=\"CopyIcon\"\n\t\t\t\t\t\t\t\tphosphor=\"CopyIcon\"\n\t\t\t\t\t\t\t\tremixicon=\"RiFileCopyLine\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\tCopy\n\t\t\t\t\t\t</ContextMenu.Item>\n\t\t\t\t\t\t<ContextMenu.Item>\n\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\tlucide=\"ScissorsIcon\"\n\t\t\t\t\t\t\t\ttabler=\"IconCut\"\n\t\t\t\t\t\t\t\thugeicons=\"ScissorIcon\"\n\t\t\t\t\t\t\t\tphosphor=\"ScissorsIcon\"\n\t\t\t\t\t\t\t\tremixicon=\"RiScissorsLine\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\tCut\n\t\t\t\t\t\t</ContextMenu.Item>\n\t\t\t\t\t\t<ContextMenu.Item>\n\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\tlucide=\"ClipboardPasteIcon\"\n\t\t\t\t\t\t\t\ttabler=\"IconClipboard\"\n\t\t\t\t\t\t\t\thugeicons=\"ClipboardIcon\"\n\t\t\t\t\t\t\t\tphosphor=\"ClipboardIcon\"\n\t\t\t\t\t\t\t\tremixicon=\"RiClipboardLine\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\tPaste\n\t\t\t\t\t\t</ContextMenu.Item>\n\t\t\t\t\t</ContextMenu.Group>\n\t\t\t\t\t<ContextMenu.Separator />\n\t\t\t\t\t<ContextMenu.Sub>\n\t\t\t\t\t\t<ContextMenu.SubTrigger>More Options</ContextMenu.SubTrigger>\n\t\t\t\t\t\t<ContextMenu.SubContent>\n\t\t\t\t\t\t\t<ContextMenu.Group>\n\t\t\t\t\t\t\t\t<ContextMenu.Item>Save Page...</ContextMenu.Item>\n\t\t\t\t\t\t\t\t<ContextMenu.Item>Create Shortcut...</ContextMenu.Item>\n\t\t\t\t\t\t\t\t<ContextMenu.Item>Name Window...</ContextMenu.Item>\n\t\t\t\t\t\t\t</ContextMenu.Group>\n\t\t\t\t\t\t\t<ContextMenu.Separator />\n\t\t\t\t\t\t\t<ContextMenu.Group>\n\t\t\t\t\t\t\t\t<ContextMenu.Item>Developer Tools</ContextMenu.Item>\n\t\t\t\t\t\t\t</ContextMenu.Group>\n\t\t\t\t\t\t</ContextMenu.SubContent>\n\t\t\t\t\t</ContextMenu.Sub>\n\t\t\t\t\t<ContextMenu.Separator />\n\t\t\t\t\t<ContextMenu.Group>\n\t\t\t\t\t\t<ContextMenu.Item variant=\"destructive\">\n\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\tlucide=\"TrashIcon\"\n\t\t\t\t\t\t\t\ttabler=\"IconTrash\"\n\t\t\t\t\t\t\t\thugeicons=\"DeleteIcon\"\n\t\t\t\t\t\t\t\tphosphor=\"TrashIcon\"\n\t\t\t\t\t\t\t\tremixicon=\"RiDeleteBinLine\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\tDelete\n\t\t\t\t\t\t</ContextMenu.Item>\n\t\t\t\t\t</ContextMenu.Group>\n\t\t\t\t</ContextMenu.Content>\n\t\t\t</ContextMenu.Root>\n\t\t</Dialog.Content>\n\t</Dialog.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/context-menu/context-menu-with-checkboxes.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as ContextMenu from \"$lib/registry/ui/context-menu/index.js\";\n</script>\n\n<Example title=\"With Checkboxes\">\n\t<ContextMenu.Root>\n\t\t<ContextMenu.Trigger\n\t\t\tclass=\"flex aspect-[2/0.5] w-full items-center justify-center rounded-lg border text-sm\"\n\t\t>\n\t\t\tRight click here\n\t\t</ContextMenu.Trigger>\n\t\t<ContextMenu.Content>\n\t\t\t<ContextMenu.Group>\n\t\t\t\t<ContextMenu.CheckboxItem checked>Show Bookmarks Bar</ContextMenu.CheckboxItem>\n\t\t\t\t<ContextMenu.CheckboxItem>Show Full URLs</ContextMenu.CheckboxItem>\n\t\t\t\t<ContextMenu.CheckboxItem checked>Show Developer Tools</ContextMenu.CheckboxItem>\n\t\t\t</ContextMenu.Group>\n\t\t</ContextMenu.Content>\n\t</ContextMenu.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/context-menu/context-menu-with-destructive.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as ContextMenu from \"$lib/registry/ui/context-menu/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Example title=\"With Destructive Items\">\n\t<ContextMenu.Root>\n\t\t<ContextMenu.Trigger\n\t\t\tclass=\"flex aspect-[2/0.5] w-full items-center justify-center rounded-lg border text-sm\"\n\t\t>\n\t\t\tRight click here\n\t\t</ContextMenu.Trigger>\n\t\t<ContextMenu.Content>\n\t\t\t<ContextMenu.Group>\n\t\t\t\t<ContextMenu.Item>\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"PencilIcon\"\n\t\t\t\t\t\ttabler=\"IconPencil\"\n\t\t\t\t\t\thugeicons=\"EditIcon\"\n\t\t\t\t\t\tphosphor=\"PencilIcon\"\n\t\t\t\t\t\tremixicon=\"RiPencilLine\"\n\t\t\t\t\t/>\n\t\t\t\t\tEdit\n\t\t\t\t</ContextMenu.Item>\n\t\t\t\t<ContextMenu.Item>\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"ShareIcon\"\n\t\t\t\t\t\ttabler=\"IconShare\"\n\t\t\t\t\t\thugeicons=\"ShareIcon\"\n\t\t\t\t\t\tphosphor=\"ShareIcon\"\n\t\t\t\t\t\tremixicon=\"RiShareLine\"\n\t\t\t\t\t/>\n\t\t\t\t\tShare\n\t\t\t\t</ContextMenu.Item>\n\t\t\t</ContextMenu.Group>\n\t\t\t<ContextMenu.Separator />\n\t\t\t<ContextMenu.Group>\n\t\t\t\t<ContextMenu.Item>\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"ArchiveIcon\"\n\t\t\t\t\t\ttabler=\"IconArchive\"\n\t\t\t\t\t\thugeicons=\"Archive02Icon\"\n\t\t\t\t\t\tphosphor=\"ArchiveIcon\"\n\t\t\t\t\t\tremixicon=\"RiArchiveLine\"\n\t\t\t\t\t/>\n\t\t\t\t\tArchive\n\t\t\t\t</ContextMenu.Item>\n\t\t\t\t<ContextMenu.Item variant=\"destructive\">\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"TrashIcon\"\n\t\t\t\t\t\ttabler=\"IconTrash\"\n\t\t\t\t\t\thugeicons=\"DeleteIcon\"\n\t\t\t\t\t\tphosphor=\"TrashIcon\"\n\t\t\t\t\t\tremixicon=\"RiDeleteBinLine\"\n\t\t\t\t\t/>\n\t\t\t\t\tDelete\n\t\t\t\t</ContextMenu.Item>\n\t\t\t</ContextMenu.Group>\n\t\t</ContextMenu.Content>\n\t</ContextMenu.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/context-menu/context-menu-with-groups.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as ContextMenu from \"$lib/registry/ui/context-menu/index.js\";\n</script>\n\n<Example title=\"With Groups, Labels & Separators\">\n\t<ContextMenu.Root>\n\t\t<ContextMenu.Trigger\n\t\t\tclass=\"flex aspect-[2/0.5] w-full items-center justify-center rounded-lg border text-sm\"\n\t\t>\n\t\t\tRight click here\n\t\t</ContextMenu.Trigger>\n\t\t<ContextMenu.Content>\n\t\t\t<ContextMenu.Group>\n\t\t\t\t<ContextMenu.Label>File</ContextMenu.Label>\n\t\t\t\t<ContextMenu.Item>\n\t\t\t\t\tNew File\n\t\t\t\t\t<ContextMenu.Shortcut>⌘N</ContextMenu.Shortcut>\n\t\t\t\t</ContextMenu.Item>\n\t\t\t\t<ContextMenu.Item>\n\t\t\t\t\tOpen File\n\t\t\t\t\t<ContextMenu.Shortcut>⌘O</ContextMenu.Shortcut>\n\t\t\t\t</ContextMenu.Item>\n\t\t\t\t<ContextMenu.Item>\n\t\t\t\t\tSave\n\t\t\t\t\t<ContextMenu.Shortcut>⌘S</ContextMenu.Shortcut>\n\t\t\t\t</ContextMenu.Item>\n\t\t\t</ContextMenu.Group>\n\t\t\t<ContextMenu.Separator />\n\t\t\t<ContextMenu.Group>\n\t\t\t\t<ContextMenu.Label>Edit</ContextMenu.Label>\n\t\t\t\t<ContextMenu.Item>\n\t\t\t\t\tUndo\n\t\t\t\t\t<ContextMenu.Shortcut>⌘Z</ContextMenu.Shortcut>\n\t\t\t\t</ContextMenu.Item>\n\t\t\t\t<ContextMenu.Item>\n\t\t\t\t\tRedo\n\t\t\t\t\t<ContextMenu.Shortcut>⇧⌘Z</ContextMenu.Shortcut>\n\t\t\t\t</ContextMenu.Item>\n\t\t\t</ContextMenu.Group>\n\t\t\t<ContextMenu.Separator />\n\t\t\t<ContextMenu.Group>\n\t\t\t\t<ContextMenu.Item>\n\t\t\t\t\tCut\n\t\t\t\t\t<ContextMenu.Shortcut>⌘X</ContextMenu.Shortcut>\n\t\t\t\t</ContextMenu.Item>\n\t\t\t\t<ContextMenu.Item>\n\t\t\t\t\tCopy\n\t\t\t\t\t<ContextMenu.Shortcut>⌘C</ContextMenu.Shortcut>\n\t\t\t\t</ContextMenu.Item>\n\t\t\t\t<ContextMenu.Item>\n\t\t\t\t\tPaste\n\t\t\t\t\t<ContextMenu.Shortcut>⌘V</ContextMenu.Shortcut>\n\t\t\t\t</ContextMenu.Item>\n\t\t\t</ContextMenu.Group>\n\t\t\t<ContextMenu.Separator />\n\t\t\t<ContextMenu.Group>\n\t\t\t\t<ContextMenu.Item variant=\"destructive\">\n\t\t\t\t\tDelete\n\t\t\t\t\t<ContextMenu.Shortcut>⌫</ContextMenu.Shortcut>\n\t\t\t\t</ContextMenu.Item>\n\t\t\t</ContextMenu.Group>\n\t\t</ContextMenu.Content>\n\t</ContextMenu.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/context-menu/context-menu-with-icons.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as ContextMenu from \"$lib/registry/ui/context-menu/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Example title=\"With Icons\">\n\t<ContextMenu.Root>\n\t\t<ContextMenu.Trigger\n\t\t\tclass=\"flex aspect-[2/0.5] w-full items-center justify-center rounded-lg border text-sm\"\n\t\t>\n\t\t\tRight click here\n\t\t</ContextMenu.Trigger>\n\t\t<ContextMenu.Content>\n\t\t\t<ContextMenu.Group>\n\t\t\t\t<ContextMenu.Item>\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"CopyIcon\"\n\t\t\t\t\t\ttabler=\"IconCopy\"\n\t\t\t\t\t\thugeicons=\"CopyIcon\"\n\t\t\t\t\t\tphosphor=\"CopyIcon\"\n\t\t\t\t\t\tremixicon=\"RiFileCopyLine\"\n\t\t\t\t\t/>\n\t\t\t\t\tCopy\n\t\t\t\t</ContextMenu.Item>\n\t\t\t\t<ContextMenu.Item>\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"ScissorsIcon\"\n\t\t\t\t\t\ttabler=\"IconCut\"\n\t\t\t\t\t\thugeicons=\"ScissorIcon\"\n\t\t\t\t\t\tphosphor=\"ScissorsIcon\"\n\t\t\t\t\t\tremixicon=\"RiScissorsLine\"\n\t\t\t\t\t/>\n\t\t\t\t\tCut\n\t\t\t\t</ContextMenu.Item>\n\t\t\t\t<ContextMenu.Item>\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"ClipboardPasteIcon\"\n\t\t\t\t\t\ttabler=\"IconClipboard\"\n\t\t\t\t\t\thugeicons=\"ClipboardIcon\"\n\t\t\t\t\t\tphosphor=\"ClipboardIcon\"\n\t\t\t\t\t\tremixicon=\"RiClipboardLine\"\n\t\t\t\t\t/>\n\t\t\t\t\tPaste\n\t\t\t\t</ContextMenu.Item>\n\t\t\t</ContextMenu.Group>\n\t\t\t<ContextMenu.Separator />\n\t\t\t<ContextMenu.Group>\n\t\t\t\t<ContextMenu.Item variant=\"destructive\">\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"TrashIcon\"\n\t\t\t\t\t\ttabler=\"IconTrash\"\n\t\t\t\t\t\thugeicons=\"DeleteIcon\"\n\t\t\t\t\t\tphosphor=\"TrashIcon\"\n\t\t\t\t\t\tremixicon=\"RiDeleteBinLine\"\n\t\t\t\t\t/>\n\t\t\t\t\tDelete\n\t\t\t\t</ContextMenu.Item>\n\t\t\t</ContextMenu.Group>\n\t\t</ContextMenu.Content>\n\t</ContextMenu.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/context-menu/context-menu-with-inset.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as ContextMenu from \"$lib/registry/ui/context-menu/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\n\tlet showBookmarks = $state(true);\n\tlet showUrls = $state(false);\n\tlet theme = $state(\"system\");\n</script>\n\n<Example title=\"With Inset\">\n\t<ContextMenu.Root>\n\t\t<ContextMenu.Trigger\n\t\t\tclass=\"flex aspect-[2/0.5] w-full items-center justify-center rounded-lg border text-sm\"\n\t\t>\n\t\t\tRight click here\n\t\t</ContextMenu.Trigger>\n\t\t<ContextMenu.Content class=\"w-44\">\n\t\t\t<ContextMenu.Group>\n\t\t\t\t<ContextMenu.Label>Actions</ContextMenu.Label>\n\t\t\t\t<ContextMenu.Item>\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"CopyIcon\"\n\t\t\t\t\t\ttabler=\"IconCopy\"\n\t\t\t\t\t\thugeicons=\"CopyIcon\"\n\t\t\t\t\t\tphosphor=\"CopyIcon\"\n\t\t\t\t\t\tremixicon=\"RiFileCopyLine\"\n\t\t\t\t\t/>\n\t\t\t\t\tCopy\n\t\t\t\t</ContextMenu.Item>\n\t\t\t\t<ContextMenu.Item>\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"ScissorsIcon\"\n\t\t\t\t\t\ttabler=\"IconCut\"\n\t\t\t\t\t\thugeicons=\"ScissorIcon\"\n\t\t\t\t\t\tphosphor=\"ScissorsIcon\"\n\t\t\t\t\t\tremixicon=\"RiScissorsLine\"\n\t\t\t\t\t/>\n\t\t\t\t\tCut\n\t\t\t\t</ContextMenu.Item>\n\t\t\t\t<ContextMenu.Item inset>Paste</ContextMenu.Item>\n\t\t\t</ContextMenu.Group>\n\t\t\t<ContextMenu.Separator />\n\t\t\t<ContextMenu.Group>\n\t\t\t\t<ContextMenu.Label inset>Appearance</ContextMenu.Label>\n\t\t\t\t<ContextMenu.CheckboxItem inset bind:checked={showBookmarks}>\n\t\t\t\t\tBookmarks\n\t\t\t\t</ContextMenu.CheckboxItem>\n\t\t\t\t<ContextMenu.CheckboxItem inset bind:checked={showUrls}>\n\t\t\t\t\tFull URLs\n\t\t\t\t</ContextMenu.CheckboxItem>\n\t\t\t</ContextMenu.Group>\n\t\t\t<ContextMenu.Separator />\n\t\t\t<ContextMenu.Group>\n\t\t\t\t<ContextMenu.Label inset>Theme</ContextMenu.Label>\n\t\t\t\t<ContextMenu.RadioGroup bind:value={theme}>\n\t\t\t\t\t<ContextMenu.RadioItem inset value=\"light\">Light</ContextMenu.RadioItem>\n\t\t\t\t\t<ContextMenu.RadioItem inset value=\"dark\">Dark</ContextMenu.RadioItem>\n\t\t\t\t\t<ContextMenu.RadioItem inset value=\"system\">System</ContextMenu.RadioItem>\n\t\t\t\t</ContextMenu.RadioGroup>\n\t\t\t</ContextMenu.Group>\n\t\t\t<ContextMenu.Separator />\n\t\t\t<ContextMenu.Sub>\n\t\t\t\t<ContextMenu.SubTrigger inset>More Options</ContextMenu.SubTrigger>\n\t\t\t\t<ContextMenu.SubContent>\n\t\t\t\t\t<ContextMenu.Group>\n\t\t\t\t\t\t<ContextMenu.Item>Save Page...</ContextMenu.Item>\n\t\t\t\t\t\t<ContextMenu.Item>Create Shortcut...</ContextMenu.Item>\n\t\t\t\t\t</ContextMenu.Group>\n\t\t\t\t</ContextMenu.SubContent>\n\t\t\t</ContextMenu.Sub>\n\t\t</ContextMenu.Content>\n\t</ContextMenu.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/context-menu/context-menu-with-radio.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as ContextMenu from \"$lib/registry/ui/context-menu/index.js\";\n\n\tlet user = $state(\"pedro\");\n\tlet theme = $state(\"light\");\n</script>\n\n<Example title=\"With Radio Group\">\n\t<ContextMenu.Root>\n\t\t<ContextMenu.Trigger\n\t\t\tclass=\"flex aspect-[2/0.5] w-full items-center justify-center rounded-lg border text-sm\"\n\t\t>\n\t\t\tRight click here\n\t\t</ContextMenu.Trigger>\n\t\t<ContextMenu.Content>\n\t\t\t<ContextMenu.Group>\n\t\t\t\t<ContextMenu.Label>People</ContextMenu.Label>\n\t\t\t\t<ContextMenu.RadioGroup bind:value={user}>\n\t\t\t\t\t<ContextMenu.RadioItem value=\"pedro\">Pedro Duarte</ContextMenu.RadioItem>\n\t\t\t\t\t<ContextMenu.RadioItem value=\"colm\">Colm Tuite</ContextMenu.RadioItem>\n\t\t\t\t</ContextMenu.RadioGroup>\n\t\t\t</ContextMenu.Group>\n\t\t\t<ContextMenu.Separator />\n\t\t\t<ContextMenu.Group>\n\t\t\t\t<ContextMenu.Label>Theme</ContextMenu.Label>\n\t\t\t\t<ContextMenu.RadioGroup bind:value={theme}>\n\t\t\t\t\t<ContextMenu.RadioItem value=\"light\">Light</ContextMenu.RadioItem>\n\t\t\t\t\t<ContextMenu.RadioItem value=\"dark\">Dark</ContextMenu.RadioItem>\n\t\t\t\t\t<ContextMenu.RadioItem value=\"system\">System</ContextMenu.RadioItem>\n\t\t\t\t</ContextMenu.RadioGroup>\n\t\t\t</ContextMenu.Group>\n\t\t</ContextMenu.Content>\n\t</ContextMenu.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/context-menu/context-menu-with-shortcuts.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as ContextMenu from \"$lib/registry/ui/context-menu/index.js\";\n</script>\n\n<Example title=\"With Shortcuts\">\n\t<ContextMenu.Root>\n\t\t<ContextMenu.Trigger\n\t\t\tclass=\"flex aspect-[2/0.5] w-full items-center justify-center rounded-lg border text-sm\"\n\t\t>\n\t\t\tRight click here\n\t\t</ContextMenu.Trigger>\n\t\t<ContextMenu.Content>\n\t\t\t<ContextMenu.Group>\n\t\t\t\t<ContextMenu.Item>\n\t\t\t\t\tBack\n\t\t\t\t\t<ContextMenu.Shortcut>⌘[</ContextMenu.Shortcut>\n\t\t\t\t</ContextMenu.Item>\n\t\t\t\t<ContextMenu.Item disabled>\n\t\t\t\t\tForward\n\t\t\t\t\t<ContextMenu.Shortcut>⌘]</ContextMenu.Shortcut>\n\t\t\t\t</ContextMenu.Item>\n\t\t\t\t<ContextMenu.Item>\n\t\t\t\t\tReload\n\t\t\t\t\t<ContextMenu.Shortcut>⌘R</ContextMenu.Shortcut>\n\t\t\t\t</ContextMenu.Item>\n\t\t\t</ContextMenu.Group>\n\t\t\t<ContextMenu.Separator />\n\t\t\t<ContextMenu.Group>\n\t\t\t\t<ContextMenu.Item>\n\t\t\t\t\tSave\n\t\t\t\t\t<ContextMenu.Shortcut>⌘S</ContextMenu.Shortcut>\n\t\t\t\t</ContextMenu.Item>\n\t\t\t\t<ContextMenu.Item>\n\t\t\t\t\tSave As...\n\t\t\t\t\t<ContextMenu.Shortcut>⇧⌘S</ContextMenu.Shortcut>\n\t\t\t\t</ContextMenu.Item>\n\t\t\t</ContextMenu.Group>\n\t\t</ContextMenu.Content>\n\t</ContextMenu.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/context-menu/context-menu-with-sides.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as ContextMenu from \"$lib/registry/ui/context-menu/index.js\";\n</script>\n\n<Example title=\"With Sides\">\n\t<div class=\"grid grid-cols-2 gap-6\">\n\t\t<ContextMenu.Root>\n\t\t\t<ContextMenu.Trigger\n\t\t\t\tclass=\"flex aspect-[2/0.5] w-full items-center justify-center rounded-lg border text-sm\"\n\t\t\t>\n\t\t\t\tRight click (top)\n\t\t\t</ContextMenu.Trigger>\n\t\t\t<ContextMenu.Content side=\"top\">\n\t\t\t\t<ContextMenu.Group>\n\t\t\t\t\t<ContextMenu.Item>Back</ContextMenu.Item>\n\t\t\t\t\t<ContextMenu.Item>Forward</ContextMenu.Item>\n\t\t\t\t\t<ContextMenu.Item>Reload</ContextMenu.Item>\n\t\t\t\t</ContextMenu.Group>\n\t\t\t</ContextMenu.Content>\n\t\t</ContextMenu.Root>\n\t\t<ContextMenu.Root>\n\t\t\t<ContextMenu.Trigger\n\t\t\t\tclass=\"flex aspect-[2/0.5] w-full items-center justify-center rounded-lg border text-sm\"\n\t\t\t>\n\t\t\t\tRight click (right)\n\t\t\t</ContextMenu.Trigger>\n\t\t\t<ContextMenu.Content side=\"right\">\n\t\t\t\t<ContextMenu.Group>\n\t\t\t\t\t<ContextMenu.Item>Back</ContextMenu.Item>\n\t\t\t\t\t<ContextMenu.Item>Forward</ContextMenu.Item>\n\t\t\t\t\t<ContextMenu.Item>Reload</ContextMenu.Item>\n\t\t\t\t</ContextMenu.Group>\n\t\t\t</ContextMenu.Content>\n\t\t</ContextMenu.Root>\n\t\t<ContextMenu.Root>\n\t\t\t<ContextMenu.Trigger\n\t\t\t\tclass=\"flex aspect-[2/0.5] w-full items-center justify-center rounded-lg border text-sm\"\n\t\t\t>\n\t\t\t\tRight click (bottom)\n\t\t\t</ContextMenu.Trigger>\n\t\t\t<ContextMenu.Content side=\"bottom\">\n\t\t\t\t<ContextMenu.Group>\n\t\t\t\t\t<ContextMenu.Item>Back</ContextMenu.Item>\n\t\t\t\t\t<ContextMenu.Item>Forward</ContextMenu.Item>\n\t\t\t\t\t<ContextMenu.Item>Reload</ContextMenu.Item>\n\t\t\t\t</ContextMenu.Group>\n\t\t\t</ContextMenu.Content>\n\t\t</ContextMenu.Root>\n\t\t<ContextMenu.Root>\n\t\t\t<ContextMenu.Trigger\n\t\t\t\tclass=\"flex aspect-[2/0.5] w-full items-center justify-center rounded-lg border text-sm\"\n\t\t\t>\n\t\t\t\tRight click (left)\n\t\t\t</ContextMenu.Trigger>\n\t\t\t<ContextMenu.Content side=\"left\">\n\t\t\t\t<ContextMenu.Group>\n\t\t\t\t\t<ContextMenu.Item>Back</ContextMenu.Item>\n\t\t\t\t\t<ContextMenu.Item>Forward</ContextMenu.Item>\n\t\t\t\t\t<ContextMenu.Item>Reload</ContextMenu.Item>\n\t\t\t\t</ContextMenu.Group>\n\t\t\t</ContextMenu.Content>\n\t\t</ContextMenu.Root>\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/context-menu/context-menu-with-submenu.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as ContextMenu from \"$lib/registry/ui/context-menu/index.js\";\n</script>\n\n<Example title=\"With Submenu\">\n\t<ContextMenu.Root>\n\t\t<ContextMenu.Trigger\n\t\t\tclass=\"flex aspect-[2/0.5] w-full items-center justify-center rounded-lg border text-sm\"\n\t\t>\n\t\t\tRight click here\n\t\t</ContextMenu.Trigger>\n\t\t<ContextMenu.Content>\n\t\t\t<ContextMenu.Group>\n\t\t\t\t<ContextMenu.Item>\n\t\t\t\t\tCopy\n\t\t\t\t\t<ContextMenu.Shortcut>⌘C</ContextMenu.Shortcut>\n\t\t\t\t</ContextMenu.Item>\n\t\t\t\t<ContextMenu.Item>\n\t\t\t\t\tCut\n\t\t\t\t\t<ContextMenu.Shortcut>⌘X</ContextMenu.Shortcut>\n\t\t\t\t</ContextMenu.Item>\n\t\t\t</ContextMenu.Group>\n\t\t\t<ContextMenu.Sub>\n\t\t\t\t<ContextMenu.SubTrigger>More Tools</ContextMenu.SubTrigger>\n\t\t\t\t<ContextMenu.SubContent>\n\t\t\t\t\t<ContextMenu.Group>\n\t\t\t\t\t\t<ContextMenu.Item>Save Page...</ContextMenu.Item>\n\t\t\t\t\t\t<ContextMenu.Item>Create Shortcut...</ContextMenu.Item>\n\t\t\t\t\t\t<ContextMenu.Item>Name Window...</ContextMenu.Item>\n\t\t\t\t\t</ContextMenu.Group>\n\t\t\t\t\t<ContextMenu.Separator />\n\t\t\t\t\t<ContextMenu.Group>\n\t\t\t\t\t\t<ContextMenu.Item>Developer Tools</ContextMenu.Item>\n\t\t\t\t\t</ContextMenu.Group>\n\t\t\t\t\t<ContextMenu.Separator />\n\t\t\t\t\t<ContextMenu.Group>\n\t\t\t\t\t\t<ContextMenu.Item variant=\"destructive\">Delete</ContextMenu.Item>\n\t\t\t\t\t</ContextMenu.Group>\n\t\t\t\t</ContextMenu.SubContent>\n\t\t\t</ContextMenu.Sub>\n\t\t</ContextMenu.Content>\n\t</ContextMenu.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/context-menu/context-menu.svelte",
    "content": "<script lang=\"ts\">\n\timport ExampleWrapper from \"../../../../../routes/(app)/(layout)/(create)/components/example-wrapper.svelte\";\n\timport ContextMenuBasic from \"./context-menu-basic.svelte\";\n\timport ContextMenuWithSides from \"./context-menu-with-sides.svelte\";\n\timport ContextMenuWithIcons from \"./context-menu-with-icons.svelte\";\n\timport ContextMenuWithShortcuts from \"./context-menu-with-shortcuts.svelte\";\n\timport ContextMenuWithSubmenu from \"./context-menu-with-submenu.svelte\";\n\timport ContextMenuWithGroups from \"./context-menu-with-groups.svelte\";\n\timport ContextMenuWithCheckboxes from \"./context-menu-with-checkboxes.svelte\";\n\timport ContextMenuWithRadio from \"./context-menu-with-radio.svelte\";\n\timport ContextMenuWithDestructive from \"./context-menu-with-destructive.svelte\";\n\timport ContextMenuInDialog from \"./context-menu-in-dialog.svelte\";\n\timport ContextMenuWithInset from \"./context-menu-with-inset.svelte\";\n</script>\n\n<ExampleWrapper>\n\t<ContextMenuBasic />\n\t<ContextMenuWithSides />\n\t<ContextMenuWithIcons />\n\t<ContextMenuWithShortcuts />\n\t<ContextMenuWithSubmenu />\n\t<ContextMenuWithGroups />\n\t<ContextMenuWithCheckboxes />\n\t<ContextMenuWithRadio />\n\t<ContextMenuWithDestructive />\n\t<ContextMenuInDialog />\n\t<ContextMenuWithInset />\n</ExampleWrapper>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/demo/demo.svelte",
    "content": "<script lang=\"ts\">\n\timport * as AlertDialog from \"$lib/registry/ui/alert-dialog/index.js\";\n\timport { Badge } from \"$lib/registry/ui/badge/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as ButtonGroup from \"$lib/registry/ui/button-group/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport { Checkbox } from \"$lib/registry/ui/checkbox/index.js\";\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport * as InputGroup from \"$lib/registry/ui/input-group/index.js\";\n\timport * as Item from \"$lib/registry/ui/item/index.js\";\n\timport * as RadioGroup from \"$lib/registry/ui/radio-group/index.js\";\n\timport { Slider } from \"$lib/registry/ui/slider/index.js\";\n\timport { Switch } from \"$lib/registry/ui/switch/index.js\";\n\timport { Textarea } from \"$lib/registry/ui/textarea/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\n\tconst colorVariants = [\n\t\t\"--background\",\n\t\t\"--foreground\",\n\t\t\"--primary\",\n\t\t\"--secondary\",\n\t\t\"--muted\",\n\t\t\"--accent\",\n\t\t\"--destructive\",\n\t\t\"--chart-1\",\n\t\t\"--chart-2\",\n\t\t\"--chart-3\",\n\t\t\"--chart-4\",\n\t\t\"--chart-5\",\n\t];\n\n\tlet sliderValue = $state(500);\n\tlet radioValue = $state(\"apple\");\n\tlet switchChecked = $state(true);\n\tlet checkbox1Checked = $state(true);\n\tlet checkbox2Checked = $state(false);\n</script>\n\n<div\n\tclass=\"bg-muted dark:bg-background flex min-h-screen w-full flex-col items-center justify-center p-4 sm:p-6 lg:p-12\"\n>\n\t<div class=\"grid max-w-3xl gap-4 sm:grid-cols-2\">\n\t\t<div class=\"flex flex-col gap-4\">\n\t\t\t<Card.Root>\n\t\t\t\t<Card.Content class=\"flex flex-col gap-6\">\n\t\t\t\t\t<div class=\"flex flex-col gap-1\">\n\t\t\t\t\t\t<div class=\"text-2xl font-medium\">Style Overview</div>\n\t\t\t\t\t\t<div class=\"text-muted-foreground line-clamp-2 text-base\">\n\t\t\t\t\t\t\tDesigners love packing quirky glyphs into test phrases. This is a\n\t\t\t\t\t\t\tpreview of the typography styles.\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"grid grid-cols-6 gap-3\">\n\t\t\t\t\t\t{#each colorVariants as variant (variant)}\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclass=\"flex flex-col flex-wrap items-center gap-2\"\n\t\t\t\t\t\t\t\tstyle=\"--color: var({variant})\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclass=\"after:border-border relative aspect-square w-full rounded-lg bg-(--color) after:absolute after:inset-0 after:rounded-lg after:border after:mix-blend-darken dark:after:mix-blend-lighten\"\n\t\t\t\t\t\t\t\t></div>\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclass=\"hidden max-w-14 truncate font-mono text-[0.60rem] md:block\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{variant}\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</div>\n\t\t\t\t</Card.Content>\n\t\t\t</Card.Root>\n\t\t\t<Card.Root>\n\t\t\t\t<Card.Content>\n\t\t\t\t\t<div class=\"grid grid-cols-8 place-items-center gap-4\">\n\t\t\t\t\t\t<Card.Root\n\t\t\t\t\t\t\tclass=\"ring-border flex size-8 items-center justify-center rounded-md p-0 ring *:[svg]:size-4\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\tlucide=\"CopyIcon\"\n\t\t\t\t\t\t\t\ttabler=\"IconCopy\"\n\t\t\t\t\t\t\t\thugeicons=\"Copy01Icon\"\n\t\t\t\t\t\t\t\tphosphor=\"CopyIcon\"\n\t\t\t\t\t\t\t\tremixicon=\"RiFileCopyLine\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</Card.Root>\n\t\t\t\t\t\t<Card.Root\n\t\t\t\t\t\t\tclass=\"ring-border flex size-8 items-center justify-center rounded-md p-0 ring *:[svg]:size-4\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\tlucide=\"CircleAlertIcon\"\n\t\t\t\t\t\t\t\ttabler=\"IconExclamationCircle\"\n\t\t\t\t\t\t\t\thugeicons=\"AlertCircleIcon\"\n\t\t\t\t\t\t\t\tphosphor=\"WarningCircleIcon\"\n\t\t\t\t\t\t\t\tremixicon=\"RiErrorWarningLine\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</Card.Root>\n\t\t\t\t\t\t<Card.Root\n\t\t\t\t\t\t\tclass=\"ring-border flex size-8 items-center justify-center rounded-md p-0 ring *:[svg]:size-4\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\tlucide=\"TrashIcon\"\n\t\t\t\t\t\t\t\ttabler=\"IconTrash\"\n\t\t\t\t\t\t\t\thugeicons=\"Delete02Icon\"\n\t\t\t\t\t\t\t\tphosphor=\"TrashIcon\"\n\t\t\t\t\t\t\t\tremixicon=\"RiDeleteBinLine\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</Card.Root>\n\t\t\t\t\t\t<Card.Root\n\t\t\t\t\t\t\tclass=\"ring-border flex size-8 items-center justify-center rounded-md p-0 ring *:[svg]:size-4\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\tlucide=\"ShareIcon\"\n\t\t\t\t\t\t\t\ttabler=\"IconShare\"\n\t\t\t\t\t\t\t\thugeicons=\"Share03Icon\"\n\t\t\t\t\t\t\t\tphosphor=\"ShareIcon\"\n\t\t\t\t\t\t\t\tremixicon=\"RiShareLine\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</Card.Root>\n\t\t\t\t\t\t<Card.Root\n\t\t\t\t\t\t\tclass=\"ring-border flex size-8 items-center justify-center rounded-md p-0 ring *:[svg]:size-4\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\tlucide=\"ShoppingBagIcon\"\n\t\t\t\t\t\t\t\ttabler=\"IconShoppingBag\"\n\t\t\t\t\t\t\t\thugeicons=\"ShoppingBag01Icon\"\n\t\t\t\t\t\t\t\tphosphor=\"BagIcon\"\n\t\t\t\t\t\t\t\tremixicon=\"RiShoppingBagLine\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</Card.Root>\n\t\t\t\t\t\t<Card.Root\n\t\t\t\t\t\t\tclass=\"ring-border flex size-8 items-center justify-center rounded-md p-0 ring *:[svg]:size-4\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\tlucide=\"MoreHorizontalIcon\"\n\t\t\t\t\t\t\t\ttabler=\"IconDots\"\n\t\t\t\t\t\t\t\thugeicons=\"MoreHorizontalCircle01Icon\"\n\t\t\t\t\t\t\t\tphosphor=\"DotsThreeIcon\"\n\t\t\t\t\t\t\t\tremixicon=\"RiMoreLine\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</Card.Root>\n\t\t\t\t\t\t<Card.Root\n\t\t\t\t\t\t\tclass=\"ring-border flex size-8 items-center justify-center rounded-md p-0 ring *:[svg]:size-4\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\tlucide=\"Loader2Icon\"\n\t\t\t\t\t\t\t\ttabler=\"IconLoader\"\n\t\t\t\t\t\t\t\thugeicons=\"Loading03Icon\"\n\t\t\t\t\t\t\t\tphosphor=\"SpinnerIcon\"\n\t\t\t\t\t\t\t\tremixicon=\"RiLoaderLine\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</Card.Root>\n\t\t\t\t\t\t<Card.Root\n\t\t\t\t\t\t\tclass=\"ring-border flex size-8 items-center justify-center rounded-md p-0 ring *:[svg]:size-4\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\tlucide=\"PlusIcon\"\n\t\t\t\t\t\t\t\ttabler=\"IconPlus\"\n\t\t\t\t\t\t\t\thugeicons=\"PlusSignIcon\"\n\t\t\t\t\t\t\t\tphosphor=\"PlusIcon\"\n\t\t\t\t\t\t\t\tremixicon=\"RiAddLine\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</Card.Root>\n\t\t\t\t\t\t<Card.Root\n\t\t\t\t\t\t\tclass=\"ring-border flex size-8 items-center justify-center rounded-md p-0 ring *:[svg]:size-4\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\tlucide=\"MinusIcon\"\n\t\t\t\t\t\t\t\ttabler=\"IconMinus\"\n\t\t\t\t\t\t\t\thugeicons=\"MinusSignIcon\"\n\t\t\t\t\t\t\t\tphosphor=\"MinusIcon\"\n\t\t\t\t\t\t\t\tremixicon=\"RiSubtractLine\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</Card.Root>\n\t\t\t\t\t\t<Card.Root\n\t\t\t\t\t\t\tclass=\"ring-border flex size-8 items-center justify-center rounded-md p-0 ring *:[svg]:size-4\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\tlucide=\"ArrowLeftIcon\"\n\t\t\t\t\t\t\t\ttabler=\"IconArrowLeft\"\n\t\t\t\t\t\t\t\thugeicons=\"ArrowLeft02Icon\"\n\t\t\t\t\t\t\t\tphosphor=\"ArrowLeftIcon\"\n\t\t\t\t\t\t\t\tremixicon=\"RiArrowLeftLine\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</Card.Root>\n\t\t\t\t\t\t<Card.Root\n\t\t\t\t\t\t\tclass=\"ring-border flex size-8 items-center justify-center rounded-md p-0 ring *:[svg]:size-4\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\tlucide=\"ArrowRightIcon\"\n\t\t\t\t\t\t\t\ttabler=\"IconArrowRight\"\n\t\t\t\t\t\t\t\thugeicons=\"ArrowRight02Icon\"\n\t\t\t\t\t\t\t\tphosphor=\"ArrowRightIcon\"\n\t\t\t\t\t\t\t\tremixicon=\"RiArrowRightLine\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</Card.Root>\n\t\t\t\t\t\t<Card.Root\n\t\t\t\t\t\t\tclass=\"ring-border flex size-8 items-center justify-center rounded-md p-0 ring *:[svg]:size-4\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\tlucide=\"CheckIcon\"\n\t\t\t\t\t\t\t\ttabler=\"IconCheck\"\n\t\t\t\t\t\t\t\thugeicons=\"Tick02Icon\"\n\t\t\t\t\t\t\t\tphosphor=\"CheckIcon\"\n\t\t\t\t\t\t\t\tremixicon=\"RiCheckLine\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</Card.Root>\n\t\t\t\t\t\t<Card.Root\n\t\t\t\t\t\t\tclass=\"ring-border flex size-8 items-center justify-center rounded-md p-0 ring *:[svg]:size-4\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\tlucide=\"ChevronDownIcon\"\n\t\t\t\t\t\t\t\ttabler=\"IconChevronDown\"\n\t\t\t\t\t\t\t\thugeicons=\"ArrowDown01Icon\"\n\t\t\t\t\t\t\t\tphosphor=\"CaretDownIcon\"\n\t\t\t\t\t\t\t\tremixicon=\"RiArrowDownSLine\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</Card.Root>\n\t\t\t\t\t\t<Card.Root\n\t\t\t\t\t\t\tclass=\"ring-border flex size-8 items-center justify-center rounded-md p-0 ring *:[svg]:size-4\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\tlucide=\"ChevronRightIcon\"\n\t\t\t\t\t\t\t\ttabler=\"IconChevronRight\"\n\t\t\t\t\t\t\t\thugeicons=\"ArrowRight01Icon\"\n\t\t\t\t\t\t\t\tphosphor=\"CaretRightIcon\"\n\t\t\t\t\t\t\t\tremixicon=\"RiArrowRightSLine\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</Card.Root>\n\t\t\t\t\t\t<Card.Root\n\t\t\t\t\t\t\tclass=\"ring-border flex size-8 items-center justify-center rounded-md p-0 ring *:[svg]:size-4\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\tlucide=\"SearchIcon\"\n\t\t\t\t\t\t\t\ttabler=\"IconSearch\"\n\t\t\t\t\t\t\t\thugeicons=\"Search01Icon\"\n\t\t\t\t\t\t\t\tphosphor=\"MagnifyingGlassIcon\"\n\t\t\t\t\t\t\t\tremixicon=\"RiSearchLine\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</Card.Root>\n\t\t\t\t\t\t<Card.Root\n\t\t\t\t\t\t\tclass=\"ring-border flex size-8 items-center justify-center rounded-md p-0 ring *:[svg]:size-4\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\tlucide=\"SettingsIcon\"\n\t\t\t\t\t\t\t\ttabler=\"IconSettings\"\n\t\t\t\t\t\t\t\thugeicons=\"Settings01Icon\"\n\t\t\t\t\t\t\t\tphosphor=\"GearIcon\"\n\t\t\t\t\t\t\t\tremixicon=\"RiSettingsLine\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</Card.Root>\n\t\t\t\t\t</div>\n\t\t\t\t</Card.Content>\n\t\t\t</Card.Root>\n\t\t</div>\n\t\t<div class=\"flex flex-col gap-4\">\n\t\t\t<Card.Root class=\"w-full\">\n\t\t\t\t<Card.Content class=\"flex flex-col gap-6\">\n\t\t\t\t\t<div class=\"flex flex-col gap-4\">\n\t\t\t\t\t\t<div class=\"flex flex-wrap gap-2\">\n\t\t\t\t\t\t\t<Button>Button</Button>\n\t\t\t\t\t\t\t<Button variant=\"secondary\">Secondary</Button>\n\t\t\t\t\t\t\t<Button variant=\"outline\">Outline</Button>\n\t\t\t\t\t\t\t<Button variant=\"destructive\">Delete</Button>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<Item.Root variant=\"outline\">\n\t\t\t\t\t\t\t<Item.Content>\n\t\t\t\t\t\t\t\t<Item.Title>Two-factor authentication</Item.Title>\n\t\t\t\t\t\t\t\t<Item.Description class=\"text-pretty xl:hidden 2xl:block\">\n\t\t\t\t\t\t\t\t\tVerify via email or phone number.\n\t\t\t\t\t\t\t\t</Item.Description>\n\t\t\t\t\t\t\t</Item.Content>\n\t\t\t\t\t\t\t<Item.Actions class=\"hidden md:flex\">\n\t\t\t\t\t\t\t\t<Button size=\"sm\" variant=\"secondary\">Enable</Button>\n\t\t\t\t\t\t\t</Item.Actions>\n\t\t\t\t\t\t</Item.Root>\n\t\t\t\t\t</div>\n\t\t\t\t\t<Slider\n\t\t\t\t\t\ttype=\"single\"\n\t\t\t\t\t\tbind:value={sliderValue}\n\t\t\t\t\t\tmax={1000}\n\t\t\t\t\t\tmin={0}\n\t\t\t\t\t\tstep={10}\n\t\t\t\t\t\tclass=\"flex-1\"\n\t\t\t\t\t\taria-label=\"Slider\"\n\t\t\t\t\t/>\n\t\t\t\t\t<Field.Group>\n\t\t\t\t\t\t<Field.Field>\n\t\t\t\t\t\t\t<InputGroup.Root>\n\t\t\t\t\t\t\t\t<InputGroup.Input placeholder=\"Name\" />\n\t\t\t\t\t\t\t\t<InputGroup.Addon align=\"inline-end\">\n\t\t\t\t\t\t\t\t\t<InputGroup.Text>\n\t\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\t\tlucide=\"SearchIcon\"\n\t\t\t\t\t\t\t\t\t\t\ttabler=\"IconSearch\"\n\t\t\t\t\t\t\t\t\t\t\thugeicons=\"Search01Icon\"\n\t\t\t\t\t\t\t\t\t\t\tphosphor=\"MagnifyingGlassIcon\"\n\t\t\t\t\t\t\t\t\t\t\tremixicon=\"RiSearchLine\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</InputGroup.Text>\n\t\t\t\t\t\t\t\t</InputGroup.Addon>\n\t\t\t\t\t\t\t</InputGroup.Root>\n\t\t\t\t\t\t</Field.Field>\n\t\t\t\t\t\t<Field.Field class=\"flex-1\">\n\t\t\t\t\t\t\t<Textarea placeholder=\"Message\" class=\"resize-none\" />\n\t\t\t\t\t\t</Field.Field>\n\t\t\t\t\t</Field.Group>\n\t\t\t\t\t<div class=\"flex items-center gap-2\">\n\t\t\t\t\t\t<div class=\"flex gap-2\">\n\t\t\t\t\t\t\t<Badge>Badge</Badge>\n\t\t\t\t\t\t\t<Badge variant=\"secondary\">Secondary</Badge>\n\t\t\t\t\t\t\t<Badge variant=\"outline\">Outline</Badge>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<RadioGroup.Root bind:value={radioValue} class=\"ml-auto flex w-fit gap-3\">\n\t\t\t\t\t\t\t<RadioGroup.Item value=\"apple\" />\n\t\t\t\t\t\t\t<RadioGroup.Item value=\"banana\" />\n\t\t\t\t\t\t</RadioGroup.Root>\n\t\t\t\t\t\t<div class=\"flex gap-3\">\n\t\t\t\t\t\t\t<Checkbox bind:checked={checkbox1Checked} />\n\t\t\t\t\t\t\t<Checkbox bind:checked={checkbox2Checked} />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"flex items-center gap-4\">\n\t\t\t\t\t\t<AlertDialog.Root>\n\t\t\t\t\t\t\t<AlertDialog.Trigger>\n\t\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t\t<Button variant=\"outline\" {...props}>\n\t\t\t\t\t\t\t\t\t\t<span class=\"hidden md:block\">Alert Dialog</span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"block md:hidden\">Dialog</span>\n\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t\t</AlertDialog.Trigger>\n\t\t\t\t\t\t\t<AlertDialog.Content size=\"sm\">\n\t\t\t\t\t\t\t\t<AlertDialog.Header>\n\t\t\t\t\t\t\t\t\t<AlertDialog.Title>\n\t\t\t\t\t\t\t\t\t\tAllow accessory to connect?\n\t\t\t\t\t\t\t\t\t</AlertDialog.Title>\n\t\t\t\t\t\t\t\t\t<AlertDialog.Description>\n\t\t\t\t\t\t\t\t\t\tDo you want to allow the USB accessory to connect to this\n\t\t\t\t\t\t\t\t\t\tdevice and your data?\n\t\t\t\t\t\t\t\t\t</AlertDialog.Description>\n\t\t\t\t\t\t\t\t</AlertDialog.Header>\n\t\t\t\t\t\t\t\t<AlertDialog.Footer>\n\t\t\t\t\t\t\t\t\t<AlertDialog.Cancel>Don't allow</AlertDialog.Cancel>\n\t\t\t\t\t\t\t\t\t<AlertDialog.Action>Allow</AlertDialog.Action>\n\t\t\t\t\t\t\t\t</AlertDialog.Footer>\n\t\t\t\t\t\t\t</AlertDialog.Content>\n\t\t\t\t\t\t</AlertDialog.Root>\n\t\t\t\t\t\t<ButtonGroup.Root>\n\t\t\t\t\t\t\t<Button variant=\"outline\">Button Group</Button>\n\t\t\t\t\t\t\t<DropdownMenu.Root>\n\t\t\t\t\t\t\t\t<DropdownMenu.Trigger>\n\t\t\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t\t\t<Button variant=\"outline\" size=\"icon\" {...props}>\n\t\t\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\t\t\tlucide=\"ChevronUpIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\ttabler=\"IconChevronUp\"\n\t\t\t\t\t\t\t\t\t\t\t\thugeicons=\"ArrowUp01Icon\"\n\t\t\t\t\t\t\t\t\t\t\t\tphosphor=\"CaretUpIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\tremixicon=\"RiArrowUpSLine\"\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t\t\t</DropdownMenu.Trigger>\n\t\t\t\t\t\t\t\t<DropdownMenu.Content align=\"end\" side=\"top\" class=\"w-40\">\n\t\t\t\t\t\t\t\t\t<DropdownMenu.Group>\n\t\t\t\t\t\t\t\t\t\t<DropdownMenu.Label>Quick Actions</DropdownMenu.Label>\n\t\t\t\t\t\t\t\t\t\t<DropdownMenu.Item>Mute Conversation</DropdownMenu.Item>\n\t\t\t\t\t\t\t\t\t\t<DropdownMenu.Item>Mark as Read</DropdownMenu.Item>\n\t\t\t\t\t\t\t\t\t\t<DropdownMenu.Item>Block User</DropdownMenu.Item>\n\t\t\t\t\t\t\t\t\t</DropdownMenu.Group>\n\t\t\t\t\t\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t\t\t\t\t\t<DropdownMenu.Group>\n\t\t\t\t\t\t\t\t\t\t<DropdownMenu.Label>Conversation</DropdownMenu.Label>\n\t\t\t\t\t\t\t\t\t\t<DropdownMenu.Item>Share Conversation</DropdownMenu.Item>\n\t\t\t\t\t\t\t\t\t\t<DropdownMenu.Item>Copy Conversation</DropdownMenu.Item>\n\t\t\t\t\t\t\t\t\t\t<DropdownMenu.Item>Report Conversation</DropdownMenu.Item>\n\t\t\t\t\t\t\t\t\t</DropdownMenu.Group>\n\t\t\t\t\t\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t\t\t\t\t\t<DropdownMenu.Group>\n\t\t\t\t\t\t\t\t\t\t<DropdownMenu.Item variant=\"destructive\">\n\t\t\t\t\t\t\t\t\t\t\tDelete Conversation\n\t\t\t\t\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t\t\t\t</DropdownMenu.Group>\n\t\t\t\t\t\t\t\t</DropdownMenu.Content>\n\t\t\t\t\t\t\t</DropdownMenu.Root>\n\t\t\t\t\t\t</ButtonGroup.Root>\n\t\t\t\t\t\t<Switch bind:checked={switchChecked} class=\"ml-auto\" />\n\t\t\t\t\t</div>\n\t\t\t\t</Card.Content>\n\t\t\t</Card.Root>\n\t\t</div>\n\t</div>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/dialog/dialog-chat-settings.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Dialog from \"$lib/registry/ui/dialog/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport * as InputGroup from \"$lib/registry/ui/input-group/index.js\";\n\timport * as Select from \"$lib/registry/ui/select/index.js\";\n\timport * as Tabs from \"$lib/registry/ui/tabs/index.js\";\n\timport * as NativeSelect from \"$lib/registry/ui/native-select/index.js\";\n\timport { Checkbox } from \"$lib/registry/ui/checkbox/index.js\";\n\timport { Switch } from \"$lib/registry/ui/switch/index.js\";\n\timport { Textarea } from \"$lib/registry/ui/textarea/index.js\";\n\timport * as Tooltip from \"$lib/registry/ui/tooltip/index.js\";\n\timport { Kbd } from \"$lib/registry/ui/kbd/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\n\tconst spokenLanguages = [\n\t\t{ label: \"Auto\", value: \"auto\" },\n\t\t{ label: \"English\", value: \"en\" },\n\t\t{ label: \"Spanish\", value: \"es\" },\n\t\t{ label: \"French\", value: \"fr\" },\n\t\t{ label: \"German\", value: \"de\" },\n\t\t{ label: \"Italian\", value: \"it\" },\n\t\t{ label: \"Portuguese\", value: \"pt\" },\n\t\t{ label: \"Russian\", value: \"ru\" },\n\t\t{ label: \"Chinese\", value: \"zh\" },\n\t\t{ label: \"Japanese\", value: \"ja\" },\n\t\t{ label: \"Korean\", value: \"ko\" },\n\t\t{ label: \"Arabic\", value: \"ar\" },\n\t\t{ label: \"Hindi\", value: \"hi\" },\n\t\t{ label: \"Bengali\", value: \"bn\" },\n\t\t{ label: \"Telugu\", value: \"te\" },\n\t\t{ label: \"Marathi\", value: \"mr\" },\n\t\t{ label: \"Kannada\", value: \"kn\" },\n\t\t{ label: \"Malayalam\", value: \"ml\" },\n\t];\n\n\tconst voices = [\n\t\t{ label: \"Samantha\", value: \"samantha\" },\n\t\t{ label: \"Alex\", value: \"alex\" },\n\t\t{ label: \"Fred\", value: \"fred\" },\n\t\t{ label: \"Victoria\", value: \"victoria\" },\n\t\t{ label: \"Tom\", value: \"tom\" },\n\t\t{ label: \"Karen\", value: \"karen\" },\n\t\t{ label: \"Sam\", value: \"sam\" },\n\t\t{ label: \"Daniel\", value: \"daniel\" },\n\t];\n\n\tconst themes = [\n\t\t{ label: \"Light\", value: \"light\" },\n\t\t{ label: \"Dark\", value: \"dark\" },\n\t\t{ label: \"System\", value: \"system\" },\n\t];\n\n\tconst accents = [\n\t\t{ label: \"Default\", value: \"default\" },\n\t\t{ label: \"Red\", value: \"red\" },\n\t\t{ label: \"Blue\", value: \"blue\" },\n\t\t{ label: \"Green\", value: \"green\" },\n\t\t{ label: \"Purple\", value: \"purple\" },\n\t\t{ label: \"Pink\", value: \"pink\" },\n\t];\n\n\tlet tab = $state(\"general\");\n\tlet theme = $state(\"system\");\n\tlet accentColor = $state(\"default\");\n\tlet spokenLanguage = $state(\"en\");\n\tlet voice = $state(\"samantha\");\n\n\tconst themeLabel = $derived(themes.find((t) => t.value === theme)?.label ?? \"System\");\n\tconst accentLabel = $derived(accents.find((a) => a.value === accentColor)?.label ?? \"Default\");\n\tconst spokenLanguageLabel = $derived(\n\t\tspokenLanguages.find((l) => l.value === spokenLanguage)?.label ?? \"English\"\n\t);\n\tconst voiceLabel = $derived(voices.find((v) => v.value === voice)?.label ?? \"Samantha\");\n</script>\n\n<Example title=\"Chat Settings\" class=\"items-center justify-center\">\n\t<Dialog.Root>\n\t\t<Dialog.Trigger>\n\t\t\t{#snippet child({ props })}\n\t\t\t\t<Button variant=\"outline\" {...props}>Chat Settings</Button>\n\t\t\t{/snippet}\n\t\t</Dialog.Trigger>\n\t\t<Dialog.Content class=\"min-w-md\">\n\t\t\t<Dialog.Header>\n\t\t\t\t<Dialog.Title>Chat Settings</Dialog.Title>\n\t\t\t\t<Dialog.Description>\n\t\t\t\t\tCustomize your chat settings: theme, accent color, spoken language, voice,\n\t\t\t\t\tpersonality, and custom instructions.\n\t\t\t\t</Dialog.Description>\n\t\t\t</Dialog.Header>\n\t\t\t<div class=\"flex flex-col gap-4\">\n\t\t\t\t<NativeSelect.Root bind:value={tab} class=\"w-full md:hidden\">\n\t\t\t\t\t<NativeSelect.Option value=\"general\">General</NativeSelect.Option>\n\t\t\t\t\t<NativeSelect.Option value=\"notifications\">Notifications</NativeSelect.Option>\n\t\t\t\t\t<NativeSelect.Option value=\"personalization\"\n\t\t\t\t\t\t>Personalization</NativeSelect.Option\n\t\t\t\t\t>\n\t\t\t\t\t<NativeSelect.Option value=\"security\">Security</NativeSelect.Option>\n\t\t\t\t</NativeSelect.Root>\n\t\t\t\t<Tabs.Root bind:value={tab}>\n\t\t\t\t\t<Tabs.List class=\"hidden w-full md:flex\">\n\t\t\t\t\t\t<Tabs.Trigger value=\"general\">General</Tabs.Trigger>\n\t\t\t\t\t\t<Tabs.Trigger value=\"notifications\">Notifications</Tabs.Trigger>\n\t\t\t\t\t\t<Tabs.Trigger value=\"personalization\">Personalization</Tabs.Trigger>\n\t\t\t\t\t\t<Tabs.Trigger value=\"security\">Security</Tabs.Trigger>\n\t\t\t\t\t</Tabs.List>\n\t\t\t\t\t<div\n\t\t\t\t\t\tclass=\"min-h-[450px] rounded-lg border p-4 [&_[data-slot=select-trigger]]:min-w-[125px]\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<Tabs.Content value=\"general\">\n\t\t\t\t\t\t\t<Field.Set>\n\t\t\t\t\t\t\t\t<Field.Group>\n\t\t\t\t\t\t\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t\t\t\t\t\t\t<Field.Label for=\"theme\">Theme</Field.Label>\n\t\t\t\t\t\t\t\t\t\t<Select.Root type=\"single\" bind:value={theme}>\n\t\t\t\t\t\t\t\t\t\t\t<Select.Trigger id=\"theme\">\n\t\t\t\t\t\t\t\t\t\t\t\t{themeLabel}\n\t\t\t\t\t\t\t\t\t\t\t</Select.Trigger>\n\t\t\t\t\t\t\t\t\t\t\t<Select.Content align=\"end\">\n\t\t\t\t\t\t\t\t\t\t\t\t<Select.Group>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{#each themes as themeItem (themeItem.value)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Select.Item value={themeItem.value}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{themeItem.label}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Select.Item>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t\t\t\t\t\t</Select.Group>\n\t\t\t\t\t\t\t\t\t\t\t</Select.Content>\n\t\t\t\t\t\t\t\t\t\t</Select.Root>\n\t\t\t\t\t\t\t\t\t</Field.Field>\n\t\t\t\t\t\t\t\t\t<Field.Separator />\n\t\t\t\t\t\t\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t\t\t\t\t\t\t<Field.Label for=\"accent-color\">Accent Color</Field.Label>\n\t\t\t\t\t\t\t\t\t\t<Select.Root type=\"single\" bind:value={accentColor}>\n\t\t\t\t\t\t\t\t\t\t\t<Select.Trigger id=\"accent-color\">\n\t\t\t\t\t\t\t\t\t\t\t\t{accentLabel}\n\t\t\t\t\t\t\t\t\t\t\t</Select.Trigger>\n\t\t\t\t\t\t\t\t\t\t\t<Select.Content align=\"end\">\n\t\t\t\t\t\t\t\t\t\t\t\t<Select.Group>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{#each accents as accent (accent.value)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Select.Item value={accent.value}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{accent.label}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Select.Item>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t\t\t\t\t\t</Select.Group>\n\t\t\t\t\t\t\t\t\t\t\t</Select.Content>\n\t\t\t\t\t\t\t\t\t\t</Select.Root>\n\t\t\t\t\t\t\t\t\t</Field.Field>\n\t\t\t\t\t\t\t\t\t<Field.Separator />\n\t\t\t\t\t\t\t\t\t<Field.Field orientation=\"responsive\">\n\t\t\t\t\t\t\t\t\t\t<Field.Content>\n\t\t\t\t\t\t\t\t\t\t\t<Field.Label for=\"spoken-language\">\n\t\t\t\t\t\t\t\t\t\t\t\tSpoken Language\n\t\t\t\t\t\t\t\t\t\t\t</Field.Label>\n\t\t\t\t\t\t\t\t\t\t\t<Field.Description>\n\t\t\t\t\t\t\t\t\t\t\t\tFor best results, select the language you mainly\n\t\t\t\t\t\t\t\t\t\t\t\tspeak. If it&apos;s not listed, it may still be\n\t\t\t\t\t\t\t\t\t\t\t\tsupported via auto-detection.\n\t\t\t\t\t\t\t\t\t\t\t</Field.Description>\n\t\t\t\t\t\t\t\t\t\t</Field.Content>\n\t\t\t\t\t\t\t\t\t\t<Select.Root type=\"single\" bind:value={spokenLanguage}>\n\t\t\t\t\t\t\t\t\t\t\t<Select.Trigger id=\"spoken-language\">\n\t\t\t\t\t\t\t\t\t\t\t\t{spokenLanguageLabel}\n\t\t\t\t\t\t\t\t\t\t\t</Select.Trigger>\n\t\t\t\t\t\t\t\t\t\t\t<Select.Content align=\"end\">\n\t\t\t\t\t\t\t\t\t\t\t\t<Select.Group>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{#each spokenLanguages as language (language.value)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Select.Item value={language.value}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{language.label}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Select.Item>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t\t\t\t\t\t</Select.Group>\n\t\t\t\t\t\t\t\t\t\t\t</Select.Content>\n\t\t\t\t\t\t\t\t\t\t</Select.Root>\n\t\t\t\t\t\t\t\t\t</Field.Field>\n\t\t\t\t\t\t\t\t\t<Field.Separator />\n\t\t\t\t\t\t\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t\t\t\t\t\t\t<Field.Label for=\"voice\">Voice</Field.Label>\n\t\t\t\t\t\t\t\t\t\t<Select.Root type=\"single\" bind:value={voice}>\n\t\t\t\t\t\t\t\t\t\t\t<Select.Trigger id=\"voice\">\n\t\t\t\t\t\t\t\t\t\t\t\t{voiceLabel}\n\t\t\t\t\t\t\t\t\t\t\t</Select.Trigger>\n\t\t\t\t\t\t\t\t\t\t\t<Select.Content align=\"end\">\n\t\t\t\t\t\t\t\t\t\t\t\t<Select.Group>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{#each voices as voiceItem (voiceItem.value)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Select.Item value={voiceItem.value}>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{voiceItem.label}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Select.Item>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t\t\t\t\t\t</Select.Group>\n\t\t\t\t\t\t\t\t\t\t\t</Select.Content>\n\t\t\t\t\t\t\t\t\t\t</Select.Root>\n\t\t\t\t\t\t\t\t\t</Field.Field>\n\t\t\t\t\t\t\t\t</Field.Group>\n\t\t\t\t\t\t\t</Field.Set>\n\t\t\t\t\t\t</Tabs.Content>\n\t\t\t\t\t\t<Tabs.Content value=\"notifications\">\n\t\t\t\t\t\t\t<Field.Group>\n\t\t\t\t\t\t\t\t<Field.Set>\n\t\t\t\t\t\t\t\t\t<Field.Label>Responses</Field.Label>\n\t\t\t\t\t\t\t\t\t<Field.Description>\n\t\t\t\t\t\t\t\t\t\tGet notified when ChatGPT responds to requests that take\n\t\t\t\t\t\t\t\t\t\ttime, like research or image generation.\n\t\t\t\t\t\t\t\t\t</Field.Description>\n\t\t\t\t\t\t\t\t\t<Field.Group data-slot=\"checkbox-group\">\n\t\t\t\t\t\t\t\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t\t\t\t\t\t\t\t<Checkbox id=\"push\" checked disabled />\n\t\t\t\t\t\t\t\t\t\t\t<Field.Label for=\"push\" class=\"font-normal\">\n\t\t\t\t\t\t\t\t\t\t\t\tPush notifications\n\t\t\t\t\t\t\t\t\t\t\t</Field.Label>\n\t\t\t\t\t\t\t\t\t\t</Field.Field>\n\t\t\t\t\t\t\t\t\t</Field.Group>\n\t\t\t\t\t\t\t\t</Field.Set>\n\t\t\t\t\t\t\t\t<Field.Separator />\n\t\t\t\t\t\t\t\t<Field.Set>\n\t\t\t\t\t\t\t\t\t<Field.Label>Tasks</Field.Label>\n\t\t\t\t\t\t\t\t\t<Field.Description>\n\t\t\t\t\t\t\t\t\t\tGet notified when tasks you&apos;ve created have updates. <a\n\t\t\t\t\t\t\t\t\t\t\thref=\"#/\">Manage tasks</a\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t</Field.Description>\n\t\t\t\t\t\t\t\t\t<Field.Group data-slot=\"checkbox-group\">\n\t\t\t\t\t\t\t\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t\t\t\t\t\t\t\t<Checkbox id=\"push-tasks\" />\n\t\t\t\t\t\t\t\t\t\t\t<Field.Label for=\"push-tasks\" class=\"font-normal\">\n\t\t\t\t\t\t\t\t\t\t\t\tPush notifications\n\t\t\t\t\t\t\t\t\t\t\t</Field.Label>\n\t\t\t\t\t\t\t\t\t\t</Field.Field>\n\t\t\t\t\t\t\t\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t\t\t\t\t\t\t\t<Checkbox id=\"email-tasks\" />\n\t\t\t\t\t\t\t\t\t\t\t<Field.Label for=\"email-tasks\" class=\"font-normal\">\n\t\t\t\t\t\t\t\t\t\t\t\tEmail notifications\n\t\t\t\t\t\t\t\t\t\t\t</Field.Label>\n\t\t\t\t\t\t\t\t\t\t</Field.Field>\n\t\t\t\t\t\t\t\t\t</Field.Group>\n\t\t\t\t\t\t\t\t</Field.Set>\n\t\t\t\t\t\t\t</Field.Group>\n\t\t\t\t\t\t</Tabs.Content>\n\t\t\t\t\t\t<Tabs.Content value=\"personalization\">\n\t\t\t\t\t\t\t<Field.Group>\n\t\t\t\t\t\t\t\t<Field.Field orientation=\"responsive\">\n\t\t\t\t\t\t\t\t\t<Field.Label for=\"nickname\">Nickname</Field.Label>\n\t\t\t\t\t\t\t\t\t<InputGroup.Root>\n\t\t\t\t\t\t\t\t\t\t<InputGroup.Input\n\t\t\t\t\t\t\t\t\t\t\tid=\"nickname\"\n\t\t\t\t\t\t\t\t\t\t\tplaceholder=\"Broski\"\n\t\t\t\t\t\t\t\t\t\t\tclass=\"@md/field-group:max-w-[200px]\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t<InputGroup.Addon align=\"inline-end\">\n\t\t\t\t\t\t\t\t\t\t\t<Tooltip.Root>\n\t\t\t\t\t\t\t\t\t\t\t\t<Tooltip.Trigger>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<InputGroup.Button\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"icon-xs\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{...props}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tlucide=\"InfoIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttabler=\"IconInfoCircle\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\thugeicons=\"AlertCircleIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tphosphor=\"InfoIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tremixicon=\"RiInformationLine\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</InputGroup.Button>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t\t\t\t\t\t\t</Tooltip.Trigger>\n\t\t\t\t\t\t\t\t\t\t\t\t<Tooltip.Content class=\"flex items-center gap-2\">\n\t\t\t\t\t\t\t\t\t\t\t\t\tUsed to identify you in the chat. <Kbd>N</Kbd>\n\t\t\t\t\t\t\t\t\t\t\t\t</Tooltip.Content>\n\t\t\t\t\t\t\t\t\t\t\t</Tooltip.Root>\n\t\t\t\t\t\t\t\t\t\t</InputGroup.Addon>\n\t\t\t\t\t\t\t\t\t</InputGroup.Root>\n\t\t\t\t\t\t\t\t</Field.Field>\n\t\t\t\t\t\t\t\t<Field.Separator />\n\t\t\t\t\t\t\t\t<Field.Field\n\t\t\t\t\t\t\t\t\torientation=\"responsive\"\n\t\t\t\t\t\t\t\t\tclass=\"@md/field-group:flex-col @2xl/field-group:flex-row\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<Field.Content>\n\t\t\t\t\t\t\t\t\t\t<Field.Label for=\"about\">More about you</Field.Label>\n\t\t\t\t\t\t\t\t\t\t<Field.Description>\n\t\t\t\t\t\t\t\t\t\t\tTell us more about yourself. This will be used to help\n\t\t\t\t\t\t\t\t\t\t\tus personalize your experience.\n\t\t\t\t\t\t\t\t\t\t</Field.Description>\n\t\t\t\t\t\t\t\t\t</Field.Content>\n\t\t\t\t\t\t\t\t\t<Textarea\n\t\t\t\t\t\t\t\t\t\tid=\"about\"\n\t\t\t\t\t\t\t\t\t\tplaceholder=\"I'm a software engineer...\"\n\t\t\t\t\t\t\t\t\t\tclass=\"min-h-[120px] @md/field-group:min-w-full @2xl/field-group:min-w-[300px]\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</Field.Field>\n\t\t\t\t\t\t\t\t<Field.Separator />\n\t\t\t\t\t\t\t\t<Field.Label>\n\t\t\t\t\t\t\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t\t\t\t\t\t\t<Field.Content>\n\t\t\t\t\t\t\t\t\t\t\t<Field.Label for=\"customization\">\n\t\t\t\t\t\t\t\t\t\t\t\tEnable customizations\n\t\t\t\t\t\t\t\t\t\t\t</Field.Label>\n\t\t\t\t\t\t\t\t\t\t\t<Field.Description>\n\t\t\t\t\t\t\t\t\t\t\t\tEnable customizations to make ChatGPT more\n\t\t\t\t\t\t\t\t\t\t\t\tpersonalized.\n\t\t\t\t\t\t\t\t\t\t\t</Field.Description>\n\t\t\t\t\t\t\t\t\t\t</Field.Content>\n\t\t\t\t\t\t\t\t\t\t<Switch id=\"customization\" checked />\n\t\t\t\t\t\t\t\t\t</Field.Field>\n\t\t\t\t\t\t\t\t</Field.Label>\n\t\t\t\t\t\t\t</Field.Group>\n\t\t\t\t\t\t</Tabs.Content>\n\t\t\t\t\t\t<Tabs.Content value=\"security\">\n\t\t\t\t\t\t\t<Field.Group>\n\t\t\t\t\t\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t\t\t\t\t\t<Field.Content>\n\t\t\t\t\t\t\t\t\t\t<Field.Label for=\"2fa\">\n\t\t\t\t\t\t\t\t\t\t\tMulti-factor authentication\n\t\t\t\t\t\t\t\t\t\t</Field.Label>\n\t\t\t\t\t\t\t\t\t\t<Field.Description>\n\t\t\t\t\t\t\t\t\t\t\tEnable multi-factor authentication to secure your\n\t\t\t\t\t\t\t\t\t\t\taccount. If you do not have a two-factor authentication\n\t\t\t\t\t\t\t\t\t\t\tdevice, you can use a one-time code sent to your email.\n\t\t\t\t\t\t\t\t\t\t</Field.Description>\n\t\t\t\t\t\t\t\t\t</Field.Content>\n\t\t\t\t\t\t\t\t\t<Switch id=\"2fa\" />\n\t\t\t\t\t\t\t\t</Field.Field>\n\t\t\t\t\t\t\t\t<Field.Separator />\n\t\t\t\t\t\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t\t\t\t\t\t<Field.Content>\n\t\t\t\t\t\t\t\t\t\t<Field.Title>Log out</Field.Title>\n\t\t\t\t\t\t\t\t\t\t<Field.Description>\n\t\t\t\t\t\t\t\t\t\t\tLog out of your account on this device.\n\t\t\t\t\t\t\t\t\t\t</Field.Description>\n\t\t\t\t\t\t\t\t\t</Field.Content>\n\t\t\t\t\t\t\t\t\t<Button variant=\"outline\" size=\"sm\">Log Out</Button>\n\t\t\t\t\t\t\t\t</Field.Field>\n\t\t\t\t\t\t\t\t<Field.Separator />\n\t\t\t\t\t\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t\t\t\t\t\t<Field.Content>\n\t\t\t\t\t\t\t\t\t\t<Field.Title>Log out of all devices</Field.Title>\n\t\t\t\t\t\t\t\t\t\t<Field.Description>\n\t\t\t\t\t\t\t\t\t\t\tThis will log you out of all devices, including the\n\t\t\t\t\t\t\t\t\t\t\tcurrent session. It may take up to 30 minutes for the\n\t\t\t\t\t\t\t\t\t\t\tchanges to take effect.\n\t\t\t\t\t\t\t\t\t\t</Field.Description>\n\t\t\t\t\t\t\t\t\t</Field.Content>\n\t\t\t\t\t\t\t\t\t<Button variant=\"outline\" size=\"sm\">Log Out All</Button>\n\t\t\t\t\t\t\t\t</Field.Field>\n\t\t\t\t\t\t\t</Field.Group>\n\t\t\t\t\t\t</Tabs.Content>\n\t\t\t\t\t</div>\n\t\t\t\t</Tabs.Root>\n\t\t\t</div>\n\t\t</Dialog.Content>\n\t</Dialog.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/dialog/dialog-no-close-button.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Dialog from \"$lib/registry/ui/dialog/index.js\";\n</script>\n\n<Example title=\"No Close Button\" class=\"items-center justify-center\">\n\t<Dialog.Root>\n\t\t<Dialog.Trigger>\n\t\t\t{#snippet child({ props })}\n\t\t\t\t<Button variant=\"outline\" {...props}>No Close Button</Button>\n\t\t\t{/snippet}\n\t\t</Dialog.Trigger>\n\t\t<Dialog.Content showCloseButton={false}>\n\t\t\t<Dialog.Header>\n\t\t\t\t<Dialog.Title>No Close Button</Dialog.Title>\n\t\t\t\t<Dialog.Description>\n\t\t\t\t\tThis dialog doesn&apos;t have a close button in the top-right corner.\n\t\t\t\t</Dialog.Description>\n\t\t\t</Dialog.Header>\n\t\t\t<Dialog.Footer>\n\t\t\t\t<Dialog.Close>\n\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t<Button variant=\"outline\" {...props}>Close</Button>\n\t\t\t\t\t{/snippet}\n\t\t\t\t</Dialog.Close>\n\t\t\t</Dialog.Footer>\n\t\t</Dialog.Content>\n\t</Dialog.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/dialog/dialog-scrollable-content.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Dialog from \"$lib/registry/ui/dialog/index.js\";\n</script>\n\n<Example title=\"Scrollable Content\" class=\"items-center justify-center\">\n\t<Dialog.Root>\n\t\t<Dialog.Trigger>\n\t\t\t{#snippet child({ props })}\n\t\t\t\t<Button variant=\"outline\" {...props}>Scrollable Content</Button>\n\t\t\t{/snippet}\n\t\t</Dialog.Trigger>\n\t\t<Dialog.Content>\n\t\t\t<Dialog.Header>\n\t\t\t\t<Dialog.Title>Scrollable Content</Dialog.Title>\n\t\t\t\t<Dialog.Description>This is a dialog with scrollable content.</Dialog.Description>\n\t\t\t</Dialog.Header>\n\t\t\t<div class=\"-mx-4 max-h-[70vh] overflow-y-auto px-4\">\n\t\t\t\t{#each Array(10) as _, i (i)}\n\t\t\t\t\t<p class=\"mb-4 leading-normal\">\n\t\t\t\t\t\tLorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod\n\t\t\t\t\t\ttempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,\n\t\t\t\t\t\tquis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo\n\t\t\t\t\t\tconsequat. Duis aute irure dolor in reprehenderit in voluptate velit esse\n\t\t\t\t\t\tcillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat\n\t\t\t\t\t\tnon proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\n\t\t\t\t\t</p>\n\t\t\t\t{/each}\n\t\t\t</div>\n\t\t</Dialog.Content>\n\t</Dialog.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/dialog/dialog-with-form.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Dialog from \"$lib/registry/ui/dialog/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport { Input } from \"$lib/registry/ui/input/index.js\";\n</script>\n\n<Example title=\"With Form\" class=\"w-full items-center justify-center\">\n\t<Dialog.Root>\n\t\t<form>\n\t\t\t<Dialog.Trigger>\n\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t<Button variant=\"outline\" {...props}>Edit Profile</Button>\n\t\t\t\t{/snippet}\n\t\t\t</Dialog.Trigger>\n\t\t\t<Dialog.Content>\n\t\t\t\t<Dialog.Header>\n\t\t\t\t\t<Dialog.Title>Edit profile</Dialog.Title>\n\t\t\t\t\t<Dialog.Description>\n\t\t\t\t\t\tMake changes to your profile here. Click save when you&apos;re done. Your\n\t\t\t\t\t\tprofile will be updated immediately.\n\t\t\t\t\t</Dialog.Description>\n\t\t\t\t</Dialog.Header>\n\t\t\t\t<Field.Group>\n\t\t\t\t\t<Field.Field>\n\t\t\t\t\t\t<Field.Label for=\"name-1\">Name</Field.Label>\n\t\t\t\t\t\t<Input id=\"name-1\" name=\"name\" value=\"Pedro Duarte\" />\n\t\t\t\t\t</Field.Field>\n\t\t\t\t\t<Field.Field>\n\t\t\t\t\t\t<Field.Label for=\"username-1\">Username</Field.Label>\n\t\t\t\t\t\t<Input id=\"username-1\" name=\"username\" value=\"@peduarte\" />\n\t\t\t\t\t</Field.Field>\n\t\t\t\t</Field.Group>\n\t\t\t\t<Dialog.Footer>\n\t\t\t\t\t<Dialog.Close>\n\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t<Button variant=\"outline\" {...props}>Cancel</Button>\n\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t</Dialog.Close>\n\t\t\t\t\t<Button type=\"submit\">Save changes</Button>\n\t\t\t\t</Dialog.Footer>\n\t\t\t</Dialog.Content>\n\t\t</form>\n\t</Dialog.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/dialog/dialog-with-sticky-footer.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Dialog from \"$lib/registry/ui/dialog/index.js\";\n</script>\n\n<Example title=\"With Sticky Footer\" class=\"items-center justify-center\">\n\t<Dialog.Root>\n\t\t<Dialog.Trigger>\n\t\t\t{#snippet child({ props })}\n\t\t\t\t<Button variant=\"outline\" {...props}>Sticky Footer</Button>\n\t\t\t{/snippet}\n\t\t</Dialog.Trigger>\n\t\t<Dialog.Content>\n\t\t\t<Dialog.Header>\n\t\t\t\t<Dialog.Title>Scrollable Content</Dialog.Title>\n\t\t\t\t<Dialog.Description>This is a dialog with scrollable content.</Dialog.Description>\n\t\t\t</Dialog.Header>\n\t\t\t<div class=\"-mx-4 max-h-[70vh] overflow-y-auto px-4\">\n\t\t\t\t{#each Array(10) as _, i (i)}\n\t\t\t\t\t<p class=\"mb-4 leading-normal\">\n\t\t\t\t\t\tLorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod\n\t\t\t\t\t\ttempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,\n\t\t\t\t\t\tquis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo\n\t\t\t\t\t\tconsequat. Duis aute irure dolor in reprehenderit in voluptate velit esse\n\t\t\t\t\t\tcillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat\n\t\t\t\t\t\tnon proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\n\t\t\t\t\t</p>\n\t\t\t\t{/each}\n\t\t\t</div>\n\t\t\t<Dialog.Footer>\n\t\t\t\t<Dialog.Close>\n\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t<Button variant=\"outline\" {...props}>Close</Button>\n\t\t\t\t\t{/snippet}\n\t\t\t\t</Dialog.Close>\n\t\t\t</Dialog.Footer>\n\t\t</Dialog.Content>\n\t</Dialog.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/dialog/dialog.svelte",
    "content": "<script lang=\"ts\">\n\timport ExampleWrapper from \"../../../../../routes/(app)/(layout)/(create)/components/example-wrapper.svelte\";\n\timport DialogWithForm from \"./dialog-with-form.svelte\";\n\timport DialogScrollableContent from \"./dialog-scrollable-content.svelte\";\n\timport DialogWithStickyFooter from \"./dialog-with-sticky-footer.svelte\";\n\timport DialogNoCloseButton from \"./dialog-no-close-button.svelte\";\n\timport DialogChatSettings from \"./dialog-chat-settings.svelte\";\n</script>\n\n<ExampleWrapper>\n\t<DialogWithForm />\n\t<DialogScrollableContent />\n\t<DialogWithStickyFooter />\n\t<DialogNoCloseButton />\n\t<DialogChatSettings />\n</ExampleWrapper>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/drawer/drawer-scrollable-content.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Drawer from \"$lib/registry/ui/drawer/index.js\";\n</script>\n\n<Example title=\"Scrollable Content\">\n\t<Drawer.Root direction=\"right\">\n\t\t<Drawer.Trigger>\n\t\t\t{#snippet child({ props })}\n\t\t\t\t<Button variant=\"outline\" {...props}>Scrollable Content</Button>\n\t\t\t{/snippet}\n\t\t</Drawer.Trigger>\n\t\t<Drawer.Content>\n\t\t\t<Drawer.Header>\n\t\t\t\t<Drawer.Title>Move Goal</Drawer.Title>\n\t\t\t\t<Drawer.Description>Set your daily activity goal.</Drawer.Description>\n\t\t\t</Drawer.Header>\n\t\t\t<div class=\"no-scrollbar overflow-y-auto px-4\">\n\t\t\t\t{#each Array.from({ length: 10 }) as _, index (index)}\n\t\t\t\t\t<p class=\"style-lyra:mb-2 style-lyra:leading-relaxed mb-4 leading-normal\">\n\t\t\t\t\t\tLorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod\n\t\t\t\t\t\ttempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,\n\t\t\t\t\t\tquis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo\n\t\t\t\t\t\tconsequat. Duis aute irure dolor in reprehenderit in voluptate velit esse\n\t\t\t\t\t\tcillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat\n\t\t\t\t\t\tnon proident, sunt in culpa qui officia deserunt mollit anim id est laborum.\n\t\t\t\t\t</p>\n\t\t\t\t{/each}\n\t\t\t</div>\n\t\t\t<Drawer.Footer>\n\t\t\t\t<Button>Submit</Button>\n\t\t\t\t<Drawer.Close>\n\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t<Button variant=\"outline\" {...props}>Cancel</Button>\n\t\t\t\t\t{/snippet}\n\t\t\t\t</Drawer.Close>\n\t\t\t</Drawer.Footer>\n\t\t</Drawer.Content>\n\t</Drawer.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/drawer/drawer-with-sides.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Drawer from \"$lib/registry/ui/drawer/index.js\";\n\n\tconst DRAWER_SIDES = [\"top\", \"right\", \"bottom\", \"left\"] as const;\n</script>\n\n<Example title=\"Sides\">\n\t<div class=\"flex flex-wrap gap-2\">\n\t\t{#each DRAWER_SIDES as side (side)}\n\t\t\t<Drawer.Root\n\t\t\t\tdirection={side === \"bottom\" ? undefined : (side as \"top\" | \"right\" | \"left\")}\n\t\t\t>\n\t\t\t\t<Drawer.Trigger>\n\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t<Button variant=\"outline\" class=\"capitalize\" {...props}>{side}</Button>\n\t\t\t\t\t{/snippet}\n\t\t\t\t</Drawer.Trigger>\n\t\t\t\t<Drawer.Content\n\t\t\t\t\tclass=\"data-[vaul-drawer-direction=bottom]:max-h-[50vh] data-[vaul-drawer-direction=top]:max-h-[50vh]\"\n\t\t\t\t>\n\t\t\t\t\t<Drawer.Header>\n\t\t\t\t\t\t<Drawer.Title>Move Goal</Drawer.Title>\n\t\t\t\t\t\t<Drawer.Description>Set your daily activity goal.</Drawer.Description>\n\t\t\t\t\t</Drawer.Header>\n\t\t\t\t\t<div class=\"no-scrollbar overflow-y-auto px-4\">\n\t\t\t\t\t\t{#each Array.from({ length: 10 }) as _, i (i)}\n\t\t\t\t\t\t\t<p\n\t\t\t\t\t\t\t\tclass=\"style-lyra:mb-2 style-lyra:leading-relaxed mb-4 leading-normal\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tLorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do\n\t\t\t\t\t\t\t\teiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim\n\t\t\t\t\t\t\t\tad minim veniam, quis nostrud exercitation ullamco laboris nisi ut\n\t\t\t\t\t\t\t\taliquip ex ea commodo consequat. Duis aute irure dolor in\n\t\t\t\t\t\t\t\treprehenderit in voluptate velit esse cillum dolore eu fugiat nulla\n\t\t\t\t\t\t\t\tpariatur. Excepteur sint occaecat cupidatat non proident, sunt in\n\t\t\t\t\t\t\t\tculpa qui officia deserunt mollit anim id est laborum.\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</div>\n\t\t\t\t\t<Drawer.Footer>\n\t\t\t\t\t\t<Button>Submit</Button>\n\t\t\t\t\t\t<Drawer.Close>\n\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t<Button variant=\"outline\" {...props}>Cancel</Button>\n\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t</Drawer.Close>\n\t\t\t\t\t</Drawer.Footer>\n\t\t\t\t</Drawer.Content>\n\t\t\t</Drawer.Root>\n\t\t{/each}\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/drawer/drawer.svelte",
    "content": "<script lang=\"ts\">\n\timport ExampleWrapper from \"../../../../../routes/(app)/(layout)/(create)/components/example-wrapper.svelte\";\n\timport DrawerScrollableContent from \"./drawer-scrollable-content.svelte\";\n\timport DrawerWithSides from \"./drawer-with-sides.svelte\";\n</script>\n\n<ExampleWrapper>\n\t<DrawerScrollableContent />\n\t<DrawerWithSides />\n</ExampleWrapper>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/dropdown-menu/dropdown-menu-basic.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n</script>\n\n<Example title=\"Basic\">\n\t<DropdownMenu.Root>\n\t\t<DropdownMenu.Trigger>\n\t\t\t{#snippet child({ props })}\n\t\t\t\t<Button variant=\"outline\" class=\"w-fit\" {...props}>Open</Button>\n\t\t\t{/snippet}\n\t\t</DropdownMenu.Trigger>\n\t\t<DropdownMenu.Content>\n\t\t\t<DropdownMenu.Group>\n\t\t\t\t<DropdownMenu.Label>My Account</DropdownMenu.Label>\n\t\t\t\t<DropdownMenu.Item>Profile</DropdownMenu.Item>\n\t\t\t\t<DropdownMenu.Item>Billing</DropdownMenu.Item>\n\t\t\t\t<DropdownMenu.Item>Settings</DropdownMenu.Item>\n\t\t\t</DropdownMenu.Group>\n\t\t\t<DropdownMenu.Separator />\n\t\t\t<DropdownMenu.Item>GitHub</DropdownMenu.Item>\n\t\t\t<DropdownMenu.Item>Support</DropdownMenu.Item>\n\t\t\t<DropdownMenu.Item disabled>API</DropdownMenu.Item>\n\t\t</DropdownMenu.Content>\n\t</DropdownMenu.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/dropdown-menu/dropdown-menu-complex.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\n\tlet notifications = $state({\n\t\temail: true,\n\t\tsms: false,\n\t\tpush: true,\n\t});\n\tlet theme = $state(\"light\");\n</script>\n\n<Example title=\"Complex\">\n\t<DropdownMenu.Root>\n\t\t<DropdownMenu.Trigger>\n\t\t\t{#snippet child({ props })}\n\t\t\t\t<Button variant=\"outline\" class=\"w-fit\" {...props}>Complex Menu</Button>\n\t\t\t{/snippet}\n\t\t</DropdownMenu.Trigger>\n\t\t<DropdownMenu.Content\n\t\t\tclass=\"style-maia:w-56 style-mira:w-48 style-nova:w-48 style-vega:w-56 style-lyra:w-48\"\n\t\t>\n\t\t\t<DropdownMenu.Group>\n\t\t\t\t<DropdownMenu.Label>File</DropdownMenu.Label>\n\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"FileIcon\"\n\t\t\t\t\t\ttabler=\"IconFile\"\n\t\t\t\t\t\thugeicons=\"FileIcon\"\n\t\t\t\t\t\tphosphor=\"FileIcon\"\n\t\t\t\t\t\tremixicon=\"RiFileLine\"\n\t\t\t\t\t/>\n\t\t\t\t\tNew File\n\t\t\t\t\t<DropdownMenu.Shortcut>⌘N</DropdownMenu.Shortcut>\n\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"FolderIcon\"\n\t\t\t\t\t\ttabler=\"IconFolder\"\n\t\t\t\t\t\thugeicons=\"FolderIcon\"\n\t\t\t\t\t\tphosphor=\"FolderIcon\"\n\t\t\t\t\t\tremixicon=\"RiFolderLine\"\n\t\t\t\t\t/>\n\t\t\t\t\tNew Folder\n\t\t\t\t\t<DropdownMenu.Shortcut>⇧⌘N</DropdownMenu.Shortcut>\n\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t<DropdownMenu.Sub>\n\t\t\t\t\t<DropdownMenu.SubTrigger>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"FolderOpenIcon\"\n\t\t\t\t\t\t\ttabler=\"IconFolderOpen\"\n\t\t\t\t\t\t\thugeicons=\"FolderOpenIcon\"\n\t\t\t\t\t\t\tphosphor=\"FolderOpenIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiFolderOpenLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\tOpen Recent\n\t\t\t\t\t</DropdownMenu.SubTrigger>\n\t\t\t\t\t<DropdownMenu.Portal>\n\t\t\t\t\t\t<DropdownMenu.SubContent>\n\t\t\t\t\t\t\t<DropdownMenu.Group>\n\t\t\t\t\t\t\t\t<DropdownMenu.Label>Recent Projects</DropdownMenu.Label>\n\t\t\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\tlucide=\"FileCodeIcon\"\n\t\t\t\t\t\t\t\t\t\ttabler=\"IconFileCode\"\n\t\t\t\t\t\t\t\t\t\thugeicons=\"CodeIcon\"\n\t\t\t\t\t\t\t\t\t\tphosphor=\"CodeIcon\"\n\t\t\t\t\t\t\t\t\t\tremixicon=\"RiFileCodeLine\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\tProject Alpha\n\t\t\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\tlucide=\"FileCodeIcon\"\n\t\t\t\t\t\t\t\t\t\ttabler=\"IconFileCode\"\n\t\t\t\t\t\t\t\t\t\thugeicons=\"CodeIcon\"\n\t\t\t\t\t\t\t\t\t\tphosphor=\"CodeIcon\"\n\t\t\t\t\t\t\t\t\t\tremixicon=\"RiFileCodeLine\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\tProject Beta\n\t\t\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t\t\t<DropdownMenu.Sub>\n\t\t\t\t\t\t\t\t\t<DropdownMenu.SubTrigger>\n\t\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\t\tlucide=\"MoreHorizontalIcon\"\n\t\t\t\t\t\t\t\t\t\t\ttabler=\"IconDots\"\n\t\t\t\t\t\t\t\t\t\t\thugeicons=\"MoreHorizontalCircle01Icon\"\n\t\t\t\t\t\t\t\t\t\t\tphosphor=\"DotsThreeOutlineIcon\"\n\t\t\t\t\t\t\t\t\t\t\tremixicon=\"RiMoreLine\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\tMore Projects\n\t\t\t\t\t\t\t\t\t</DropdownMenu.SubTrigger>\n\t\t\t\t\t\t\t\t\t<DropdownMenu.Portal>\n\t\t\t\t\t\t\t\t\t\t<DropdownMenu.SubContent>\n\t\t\t\t\t\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\t\t\t\tlucide=\"FileCodeIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\ttabler=\"IconFileCode\"\n\t\t\t\t\t\t\t\t\t\t\t\t\thugeicons=\"CodeIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tphosphor=\"FileCodeIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tremixicon=\"RiFileCodeLine\"\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\tProject Gamma\n\t\t\t\t\t\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\t\t\t\tlucide=\"FileCodeIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\ttabler=\"IconFileCode\"\n\t\t\t\t\t\t\t\t\t\t\t\t\thugeicons=\"CodeIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tphosphor=\"FileCodeIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tremixicon=\"RiFileCodeLine\"\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\tProject Delta\n\t\t\t\t\t\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t\t\t\t\t</DropdownMenu.SubContent>\n\t\t\t\t\t\t\t\t\t</DropdownMenu.Portal>\n\t\t\t\t\t\t\t\t</DropdownMenu.Sub>\n\t\t\t\t\t\t\t</DropdownMenu.Group>\n\t\t\t\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t\t\t\t<DropdownMenu.Group>\n\t\t\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\tlucide=\"FolderSearchIcon\"\n\t\t\t\t\t\t\t\t\t\ttabler=\"IconFolderSearch\"\n\t\t\t\t\t\t\t\t\t\thugeicons=\"SearchIcon\"\n\t\t\t\t\t\t\t\t\t\tphosphor=\"MagnifyingGlassIcon\"\n\t\t\t\t\t\t\t\t\t\tremixicon=\"RiSearchLine\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\tBrowse...\n\t\t\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t\t</DropdownMenu.Group>\n\t\t\t\t\t\t</DropdownMenu.SubContent>\n\t\t\t\t\t</DropdownMenu.Portal>\n\t\t\t\t</DropdownMenu.Sub>\n\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"SaveIcon\"\n\t\t\t\t\t\ttabler=\"IconDeviceFloppy\"\n\t\t\t\t\t\thugeicons=\"FloppyDiskIcon\"\n\t\t\t\t\t\tphosphor=\"FloppyDiskIcon\"\n\t\t\t\t\t\tremixicon=\"RiSaveLine\"\n\t\t\t\t\t/>\n\t\t\t\t\tSave\n\t\t\t\t\t<DropdownMenu.Shortcut>⌘S</DropdownMenu.Shortcut>\n\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"DownloadIcon\"\n\t\t\t\t\t\ttabler=\"IconDownload\"\n\t\t\t\t\t\thugeicons=\"DownloadIcon\"\n\t\t\t\t\t\tphosphor=\"DownloadIcon\"\n\t\t\t\t\t\tremixicon=\"RiDownloadLine\"\n\t\t\t\t\t/>\n\t\t\t\t\tExport\n\t\t\t\t\t<DropdownMenu.Shortcut>⇧⌘E</DropdownMenu.Shortcut>\n\t\t\t\t</DropdownMenu.Item>\n\t\t\t</DropdownMenu.Group>\n\t\t\t<DropdownMenu.Separator />\n\t\t\t<DropdownMenu.Group>\n\t\t\t\t<DropdownMenu.Label>View</DropdownMenu.Label>\n\t\t\t\t<DropdownMenu.CheckboxItem\n\t\t\t\t\tchecked={notifications.email}\n\t\t\t\t\tonCheckedChange={(checked) =>\n\t\t\t\t\t\t(notifications = { ...notifications, email: checked === true })}\n\t\t\t\t>\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"EyeIcon\"\n\t\t\t\t\t\ttabler=\"IconEye\"\n\t\t\t\t\t\thugeicons=\"EyeIcon\"\n\t\t\t\t\t\tphosphor=\"EyeIcon\"\n\t\t\t\t\t\tremixicon=\"RiEyeLine\"\n\t\t\t\t\t/>\n\t\t\t\t\tShow Sidebar\n\t\t\t\t</DropdownMenu.CheckboxItem>\n\t\t\t\t<DropdownMenu.CheckboxItem\n\t\t\t\t\tchecked={notifications.sms}\n\t\t\t\t\tonCheckedChange={(checked) =>\n\t\t\t\t\t\t(notifications = { ...notifications, sms: checked === true })}\n\t\t\t\t>\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"LayoutIcon\"\n\t\t\t\t\t\ttabler=\"IconLayout\"\n\t\t\t\t\t\thugeicons=\"LayoutIcon\"\n\t\t\t\t\t\tphosphor=\"LayoutIcon\"\n\t\t\t\t\t\tremixicon=\"RiLayoutLine\"\n\t\t\t\t\t/>\n\t\t\t\t\tShow Status Bar\n\t\t\t\t</DropdownMenu.CheckboxItem>\n\t\t\t\t<DropdownMenu.Sub>\n\t\t\t\t\t<DropdownMenu.SubTrigger>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"PaletteIcon\"\n\t\t\t\t\t\t\ttabler=\"IconPalette\"\n\t\t\t\t\t\t\thugeicons=\"PaintBoardIcon\"\n\t\t\t\t\t\t\tphosphor=\"PaletteIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiPaletteLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\tTheme\n\t\t\t\t\t</DropdownMenu.SubTrigger>\n\t\t\t\t\t<DropdownMenu.Portal>\n\t\t\t\t\t\t<DropdownMenu.SubContent>\n\t\t\t\t\t\t\t<DropdownMenu.Group>\n\t\t\t\t\t\t\t\t<DropdownMenu.Label>Appearance</DropdownMenu.Label>\n\t\t\t\t\t\t\t\t<DropdownMenu.RadioGroup bind:value={theme}>\n\t\t\t\t\t\t\t\t\t<DropdownMenu.RadioItem value=\"light\">\n\t\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\t\tlucide=\"SunIcon\"\n\t\t\t\t\t\t\t\t\t\t\ttabler=\"IconSun\"\n\t\t\t\t\t\t\t\t\t\t\thugeicons=\"SunIcon\"\n\t\t\t\t\t\t\t\t\t\t\tphosphor=\"SunIcon\"\n\t\t\t\t\t\t\t\t\t\t\tremixicon=\"RiSunLine\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\tLight\n\t\t\t\t\t\t\t\t\t</DropdownMenu.RadioItem>\n\t\t\t\t\t\t\t\t\t<DropdownMenu.RadioItem value=\"dark\">\n\t\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\t\tlucide=\"MoonIcon\"\n\t\t\t\t\t\t\t\t\t\t\ttabler=\"IconMoon\"\n\t\t\t\t\t\t\t\t\t\t\thugeicons=\"MoonIcon\"\n\t\t\t\t\t\t\t\t\t\t\tphosphor=\"MoonIcon\"\n\t\t\t\t\t\t\t\t\t\t\tremixicon=\"RiMoonLine\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\tDark\n\t\t\t\t\t\t\t\t\t</DropdownMenu.RadioItem>\n\t\t\t\t\t\t\t\t\t<DropdownMenu.RadioItem value=\"system\">\n\t\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\t\tlucide=\"MonitorIcon\"\n\t\t\t\t\t\t\t\t\t\t\ttabler=\"IconDeviceDesktop\"\n\t\t\t\t\t\t\t\t\t\t\thugeicons=\"ComputerIcon\"\n\t\t\t\t\t\t\t\t\t\t\tphosphor=\"MonitorIcon\"\n\t\t\t\t\t\t\t\t\t\t\tremixicon=\"RiComputerLine\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\tSystem\n\t\t\t\t\t\t\t\t\t</DropdownMenu.RadioItem>\n\t\t\t\t\t\t\t\t</DropdownMenu.RadioGroup>\n\t\t\t\t\t\t\t</DropdownMenu.Group>\n\t\t\t\t\t\t</DropdownMenu.SubContent>\n\t\t\t\t\t</DropdownMenu.Portal>\n\t\t\t\t</DropdownMenu.Sub>\n\t\t\t</DropdownMenu.Group>\n\t\t\t<DropdownMenu.Separator />\n\t\t\t<DropdownMenu.Group>\n\t\t\t\t<DropdownMenu.Label>Account</DropdownMenu.Label>\n\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"UserIcon\"\n\t\t\t\t\t\ttabler=\"IconUser\"\n\t\t\t\t\t\thugeicons=\"UserIcon\"\n\t\t\t\t\t\tphosphor=\"UserIcon\"\n\t\t\t\t\t\tremixicon=\"RiUserLine\"\n\t\t\t\t\t/>\n\t\t\t\t\tProfile\n\t\t\t\t\t<DropdownMenu.Shortcut>⇧⌘P</DropdownMenu.Shortcut>\n\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"CreditCardIcon\"\n\t\t\t\t\t\ttabler=\"IconCreditCard\"\n\t\t\t\t\t\thugeicons=\"CreditCardIcon\"\n\t\t\t\t\t\tphosphor=\"CreditCardIcon\"\n\t\t\t\t\t\tremixicon=\"RiBankCardLine\"\n\t\t\t\t\t/>\n\t\t\t\t\tBilling\n\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t<DropdownMenu.Sub>\n\t\t\t\t\t<DropdownMenu.SubTrigger>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"SettingsIcon\"\n\t\t\t\t\t\t\ttabler=\"IconSettings\"\n\t\t\t\t\t\t\thugeicons=\"SettingsIcon\"\n\t\t\t\t\t\t\tphosphor=\"GearIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiSettingsLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\tSettings\n\t\t\t\t\t</DropdownMenu.SubTrigger>\n\t\t\t\t\t<DropdownMenu.Portal>\n\t\t\t\t\t\t<DropdownMenu.SubContent>\n\t\t\t\t\t\t\t<DropdownMenu.Group>\n\t\t\t\t\t\t\t\t<DropdownMenu.Label>Preferences</DropdownMenu.Label>\n\t\t\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\tlucide=\"KeyboardIcon\"\n\t\t\t\t\t\t\t\t\t\ttabler=\"IconKeyboard\"\n\t\t\t\t\t\t\t\t\t\thugeicons=\"KeyboardIcon\"\n\t\t\t\t\t\t\t\t\t\tphosphor=\"KeyboardIcon\"\n\t\t\t\t\t\t\t\t\t\tremixicon=\"RiKeyboardLine\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\tKeyboard Shortcuts\n\t\t\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\tlucide=\"LanguagesIcon\"\n\t\t\t\t\t\t\t\t\t\ttabler=\"IconLanguage\"\n\t\t\t\t\t\t\t\t\t\thugeicons=\"LanguageCircleIcon\"\n\t\t\t\t\t\t\t\t\t\tphosphor=\"TranslateIcon\"\n\t\t\t\t\t\t\t\t\t\tremixicon=\"RiTranslate\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\tLanguage\n\t\t\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t\t\t<DropdownMenu.Sub>\n\t\t\t\t\t\t\t\t\t<DropdownMenu.SubTrigger>\n\t\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\t\tlucide=\"BellIcon\"\n\t\t\t\t\t\t\t\t\t\t\ttabler=\"IconBell\"\n\t\t\t\t\t\t\t\t\t\t\thugeicons=\"NotificationIcon\"\n\t\t\t\t\t\t\t\t\t\t\tphosphor=\"BellIcon\"\n\t\t\t\t\t\t\t\t\t\t\tremixicon=\"RiNotificationLine\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\tNotifications\n\t\t\t\t\t\t\t\t\t</DropdownMenu.SubTrigger>\n\t\t\t\t\t\t\t\t\t<DropdownMenu.Portal>\n\t\t\t\t\t\t\t\t\t\t<DropdownMenu.SubContent>\n\t\t\t\t\t\t\t\t\t\t\t<DropdownMenu.Group>\n\t\t\t\t\t\t\t\t\t\t\t\t<DropdownMenu.Label>\n\t\t\t\t\t\t\t\t\t\t\t\t\tNotification Types\n\t\t\t\t\t\t\t\t\t\t\t\t</DropdownMenu.Label>\n\t\t\t\t\t\t\t\t\t\t\t\t<DropdownMenu.CheckboxItem\n\t\t\t\t\t\t\t\t\t\t\t\t\tchecked={notifications.push}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonCheckedChange={(checked) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t(notifications = {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t...notifications,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tpush: checked === true,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tlucide=\"BellIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttabler=\"IconBell\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\thugeicons=\"NotificationIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tphosphor=\"BellIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tremixicon=\"RiNotificationLine\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t\tPush Notifications\n\t\t\t\t\t\t\t\t\t\t\t\t</DropdownMenu.CheckboxItem>\n\t\t\t\t\t\t\t\t\t\t\t\t<DropdownMenu.CheckboxItem\n\t\t\t\t\t\t\t\t\t\t\t\t\tchecked={notifications.email}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonCheckedChange={(checked) =>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t(notifications = {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t...notifications,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\temail: checked === true,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tlucide=\"MailIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttabler=\"IconMail\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\thugeicons=\"MailIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tphosphor=\"EnvelopeIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tremixicon=\"RiMailLine\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t\tEmail Notifications\n\t\t\t\t\t\t\t\t\t\t\t\t</DropdownMenu.CheckboxItem>\n\t\t\t\t\t\t\t\t\t\t\t</DropdownMenu.Group>\n\t\t\t\t\t\t\t\t\t\t</DropdownMenu.SubContent>\n\t\t\t\t\t\t\t\t\t</DropdownMenu.Portal>\n\t\t\t\t\t\t\t\t</DropdownMenu.Sub>\n\t\t\t\t\t\t\t</DropdownMenu.Group>\n\t\t\t\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t\t\t\t<DropdownMenu.Group>\n\t\t\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\tlucide=\"ShieldIcon\"\n\t\t\t\t\t\t\t\t\t\ttabler=\"IconShield\"\n\t\t\t\t\t\t\t\t\t\thugeicons=\"ShieldIcon\"\n\t\t\t\t\t\t\t\t\t\tphosphor=\"ShieldIcon\"\n\t\t\t\t\t\t\t\t\t\tremixicon=\"RiShieldLine\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\tPrivacy & Security\n\t\t\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t\t</DropdownMenu.Group>\n\t\t\t\t\t\t</DropdownMenu.SubContent>\n\t\t\t\t\t</DropdownMenu.Portal>\n\t\t\t\t</DropdownMenu.Sub>\n\t\t\t</DropdownMenu.Group>\n\t\t\t<DropdownMenu.Separator />\n\t\t\t<DropdownMenu.Group>\n\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"HelpCircleIcon\"\n\t\t\t\t\t\ttabler=\"IconHelpCircle\"\n\t\t\t\t\t\thugeicons=\"HelpCircleIcon\"\n\t\t\t\t\t\tphosphor=\"QuestionIcon\"\n\t\t\t\t\t\tremixicon=\"RiQuestionLine\"\n\t\t\t\t\t/>\n\t\t\t\t\tHelp & Support\n\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"FileTextIcon\"\n\t\t\t\t\t\ttabler=\"IconFileText\"\n\t\t\t\t\t\thugeicons=\"File01Icon\"\n\t\t\t\t\t\tphosphor=\"FileTextIcon\"\n\t\t\t\t\t\tremixicon=\"RiFileTextLine\"\n\t\t\t\t\t/>\n\t\t\t\t\tDocumentation\n\t\t\t\t</DropdownMenu.Item>\n\t\t\t</DropdownMenu.Group>\n\t\t\t<DropdownMenu.Separator />\n\t\t\t<DropdownMenu.Group>\n\t\t\t\t<DropdownMenu.Item variant=\"destructive\">\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"LogOutIcon\"\n\t\t\t\t\t\ttabler=\"IconLogout\"\n\t\t\t\t\t\thugeicons=\"LogoutIcon\"\n\t\t\t\t\t\tphosphor=\"SignOutIcon\"\n\t\t\t\t\t\tremixicon=\"RiLogoutBoxLine\"\n\t\t\t\t\t/>\n\t\t\t\t\tSign Out\n\t\t\t\t\t<DropdownMenu.Shortcut>⇧⌘Q</DropdownMenu.Shortcut>\n\t\t\t\t</DropdownMenu.Item>\n\t\t\t</DropdownMenu.Group>\n\t\t</DropdownMenu.Content>\n\t</DropdownMenu.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/dropdown-menu/dropdown-menu-in-dialog.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\timport * as Dialog from \"$lib/registry/ui/dialog/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Example title=\"In Dialog\">\n\t<Dialog.Root>\n\t\t<Dialog.Trigger>\n\t\t\t{#snippet child({ props })}\n\t\t\t\t<Button variant=\"outline\" {...props}>Open Dialog</Button>\n\t\t\t{/snippet}\n\t\t</Dialog.Trigger>\n\t\t<Dialog.Content>\n\t\t\t<Dialog.Header>\n\t\t\t\t<Dialog.Title>Dropdown Menu Example</Dialog.Title>\n\t\t\t\t<Dialog.Description>\n\t\t\t\t\tClick the button below to see the dropdown menu.\n\t\t\t\t</Dialog.Description>\n\t\t\t</Dialog.Header>\n\t\t\t<DropdownMenu.Root>\n\t\t\t\t<DropdownMenu.Trigger>\n\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t<Button variant=\"outline\" class=\"w-fit\" {...props}>Open Menu</Button>\n\t\t\t\t\t{/snippet}\n\t\t\t\t</DropdownMenu.Trigger>\n\t\t\t\t<DropdownMenu.Content>\n\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"CopyIcon\"\n\t\t\t\t\t\t\ttabler=\"IconCopy\"\n\t\t\t\t\t\t\thugeicons=\"CopyIcon\"\n\t\t\t\t\t\t\tphosphor=\"CopyIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiFileCopyLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\tCopy\n\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"ScissorsIcon\"\n\t\t\t\t\t\t\ttabler=\"IconCut\"\n\t\t\t\t\t\t\thugeicons=\"ScissorIcon\"\n\t\t\t\t\t\t\tphosphor=\"ScissorsIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiScissorsLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\tCut\n\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"ClipboardPasteIcon\"\n\t\t\t\t\t\t\ttabler=\"IconClipboard\"\n\t\t\t\t\t\t\thugeicons=\"ClipboardIcon\"\n\t\t\t\t\t\t\tphosphor=\"ClipboardIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiClipboardLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\tPaste\n\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t\t<DropdownMenu.Sub>\n\t\t\t\t\t\t<DropdownMenu.SubTrigger>More Options</DropdownMenu.SubTrigger>\n\t\t\t\t\t\t<DropdownMenu.Portal>\n\t\t\t\t\t\t\t<DropdownMenu.SubContent>\n\t\t\t\t\t\t\t\t<DropdownMenu.Item>Save Page...</DropdownMenu.Item>\n\t\t\t\t\t\t\t\t<DropdownMenu.Item>Create Shortcut...</DropdownMenu.Item>\n\t\t\t\t\t\t\t\t<DropdownMenu.Item>Name Window...</DropdownMenu.Item>\n\t\t\t\t\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t\t\t\t\t<DropdownMenu.Item>Developer Tools</DropdownMenu.Item>\n\t\t\t\t\t\t\t</DropdownMenu.SubContent>\n\t\t\t\t\t\t</DropdownMenu.Portal>\n\t\t\t\t\t</DropdownMenu.Sub>\n\t\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t\t<DropdownMenu.Item variant=\"destructive\">\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"TrashIcon\"\n\t\t\t\t\t\t\ttabler=\"IconTrash\"\n\t\t\t\t\t\t\thugeicons=\"DeleteIcon\"\n\t\t\t\t\t\t\tphosphor=\"TrashIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiDeleteBinLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\tDelete\n\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t</DropdownMenu.Content>\n\t\t\t</DropdownMenu.Root>\n\t\t</Dialog.Content>\n\t</Dialog.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/dropdown-menu/dropdown-menu-with-avatar.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\timport * as Avatar from \"$lib/registry/ui/avatar/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Example title=\"With Avatar\">\n\t<div class=\"flex items-center justify-between gap-4\">\n\t\t<DropdownMenu.Root>\n\t\t\t<DropdownMenu.Trigger>\n\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t<Button\n\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\tclass=\"h-12 justify-start px-2 md:max-w-[200px]\"\n\t\t\t\t\t\t{...props}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Avatar.Root>\n\t\t\t\t\t\t\t<Avatar.Image src=\"https://github.com/shadcn.png\" alt=\"Shadcn\" />\n\t\t\t\t\t\t\t<Avatar.Fallback class=\"rounded-lg\">CN</Avatar.Fallback>\n\t\t\t\t\t\t</Avatar.Root>\n\t\t\t\t\t\t<div class=\"grid flex-1 text-left text-sm leading-tight\">\n\t\t\t\t\t\t\t<span class=\"truncate font-semibold\">shadcn</span>\n\t\t\t\t\t\t\t<span class=\"text-muted-foreground truncate text-xs\">\n\t\t\t\t\t\t\t\tshadcn@example.com\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"ChevronsUpDownIcon\"\n\t\t\t\t\t\t\ttabler=\"IconSelector\"\n\t\t\t\t\t\t\thugeicons=\"UnfoldMoreIcon\"\n\t\t\t\t\t\t\tphosphor=\"CaretUpDownIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiArrowUpDownLine\"\n\t\t\t\t\t\t\tclass=\"text-muted-foreground ml-auto\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Button>\n\t\t\t\t{/snippet}\n\t\t\t</DropdownMenu.Trigger>\n\t\t\t<DropdownMenu.Content class=\"w-(--anchor-width) min-w-56\">\n\t\t\t\t<DropdownMenu.Group>\n\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"BadgeCheckIcon\"\n\t\t\t\t\t\t\ttabler=\"IconRosetteDiscountCheck\"\n\t\t\t\t\t\t\thugeicons=\"CheckmarkBadgeIcon\"\n\t\t\t\t\t\t\tphosphor=\"CheckCircleIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiCheckboxCircleLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\tAccount\n\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"CreditCardIcon\"\n\t\t\t\t\t\t\ttabler=\"IconCreditCard\"\n\t\t\t\t\t\t\thugeicons=\"CreditCardIcon\"\n\t\t\t\t\t\t\tphosphor=\"CreditCardIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiBankCardLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\tBilling\n\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"BellIcon\"\n\t\t\t\t\t\t\ttabler=\"IconBell\"\n\t\t\t\t\t\t\thugeicons=\"NotificationIcon\"\n\t\t\t\t\t\t\tphosphor=\"BellIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiNotificationLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\tNotifications\n\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t</DropdownMenu.Group>\n\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"LogOutIcon\"\n\t\t\t\t\t\ttabler=\"IconLogout\"\n\t\t\t\t\t\thugeicons=\"LogoutIcon\"\n\t\t\t\t\t\tphosphor=\"SignOutIcon\"\n\t\t\t\t\t\tremixicon=\"RiLogoutBoxLine\"\n\t\t\t\t\t/>\n\t\t\t\t\tSign Out\n\t\t\t\t</DropdownMenu.Item>\n\t\t\t</DropdownMenu.Content>\n\t\t</DropdownMenu.Root>\n\t\t<DropdownMenu.Root>\n\t\t\t<DropdownMenu.Trigger>\n\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t<Button variant=\"ghost\" size=\"icon\" class=\"rounded-full\" {...props}>\n\t\t\t\t\t\t<Avatar.Root>\n\t\t\t\t\t\t\t<Avatar.Image src=\"https://github.com/shadcn.png\" alt=\"shadcn\" />\n\t\t\t\t\t\t\t<Avatar.Fallback>LR</Avatar.Fallback>\n\t\t\t\t\t\t</Avatar.Root>\n\t\t\t\t\t</Button>\n\t\t\t\t{/snippet}\n\t\t\t</DropdownMenu.Trigger>\n\t\t\t<DropdownMenu.Content align=\"end\" side=\"top\">\n\t\t\t\t<DropdownMenu.Group>\n\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"BadgeCheckIcon\"\n\t\t\t\t\t\t\ttabler=\"IconRosetteDiscountCheck\"\n\t\t\t\t\t\t\thugeicons=\"CheckmarkBadgeIcon\"\n\t\t\t\t\t\t\tphosphor=\"CheckCircleIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiCheckboxCircleLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\tAccount\n\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"CreditCardIcon\"\n\t\t\t\t\t\t\ttabler=\"IconCreditCard\"\n\t\t\t\t\t\t\thugeicons=\"CreditCardIcon\"\n\t\t\t\t\t\t\tphosphor=\"CreditCardIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiBankCardLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\tBilling\n\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"BellIcon\"\n\t\t\t\t\t\t\ttabler=\"IconBell\"\n\t\t\t\t\t\t\thugeicons=\"NotificationIcon\"\n\t\t\t\t\t\t\tphosphor=\"BellIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiNotificationLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\tNotifications\n\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t</DropdownMenu.Group>\n\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"LogOutIcon\"\n\t\t\t\t\t\ttabler=\"IconLogout\"\n\t\t\t\t\t\thugeicons=\"LogoutIcon\"\n\t\t\t\t\t\tphosphor=\"SignOutIcon\"\n\t\t\t\t\t\tremixicon=\"RiLogoutBoxLine\"\n\t\t\t\t\t/>\n\t\t\t\t\tSign Out\n\t\t\t\t</DropdownMenu.Item>\n\t\t\t</DropdownMenu.Content>\n\t\t</DropdownMenu.Root>\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/dropdown-menu/dropdown-menu-with-checkboxes-icons.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\n\tlet notifications = $state({\n\t\temail: true,\n\t\tsms: false,\n\t\tpush: true,\n\t});\n</script>\n\n<Example title=\"Checkboxes with Icons\">\n\t<DropdownMenu.Root>\n\t\t<DropdownMenu.Trigger>\n\t\t\t{#snippet child({ props })}\n\t\t\t\t<Button variant=\"outline\" class=\"w-fit\" {...props}>Notifications</Button>\n\t\t\t{/snippet}\n\t\t</DropdownMenu.Trigger>\n\t\t<DropdownMenu.Content class=\"min-w-56\">\n\t\t\t<DropdownMenu.Group>\n\t\t\t\t<DropdownMenu.Label>Notification Preferences</DropdownMenu.Label>\n\t\t\t\t<DropdownMenu.CheckboxItem\n\t\t\t\t\tchecked={notifications.email}\n\t\t\t\t\tonCheckedChange={(checked) =>\n\t\t\t\t\t\t(notifications = { ...notifications, email: checked === true })}\n\t\t\t\t>\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"MailIcon\"\n\t\t\t\t\t\ttabler=\"IconMail\"\n\t\t\t\t\t\thugeicons=\"MailIcon\"\n\t\t\t\t\t\tphosphor=\"EnvelopeIcon\"\n\t\t\t\t\t\tremixicon=\"RiMailLine\"\n\t\t\t\t\t/>\n\t\t\t\t\tEmail notifications\n\t\t\t\t</DropdownMenu.CheckboxItem>\n\t\t\t\t<DropdownMenu.CheckboxItem\n\t\t\t\t\tchecked={notifications.sms}\n\t\t\t\t\tonCheckedChange={(checked) =>\n\t\t\t\t\t\t(notifications = { ...notifications, sms: checked === true })}\n\t\t\t\t>\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"MessageSquareIcon\"\n\t\t\t\t\t\ttabler=\"IconMessage\"\n\t\t\t\t\t\thugeicons=\"MessageIcon\"\n\t\t\t\t\t\tphosphor=\"ChatCircleIcon\"\n\t\t\t\t\t\tremixicon=\"RiChat1Line\"\n\t\t\t\t\t/>\n\t\t\t\t\tSMS notifications\n\t\t\t\t</DropdownMenu.CheckboxItem>\n\t\t\t\t<DropdownMenu.CheckboxItem\n\t\t\t\t\tchecked={notifications.push}\n\t\t\t\t\tonCheckedChange={(checked) =>\n\t\t\t\t\t\t(notifications = { ...notifications, push: checked === true })}\n\t\t\t\t>\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"BellIcon\"\n\t\t\t\t\t\ttabler=\"IconBell\"\n\t\t\t\t\t\thugeicons=\"NotificationIcon\"\n\t\t\t\t\t\tphosphor=\"BellIcon\"\n\t\t\t\t\t\tremixicon=\"RiNotificationLine\"\n\t\t\t\t\t/>\n\t\t\t\t\tPush notifications\n\t\t\t\t</DropdownMenu.CheckboxItem>\n\t\t\t</DropdownMenu.Group>\n\t\t</DropdownMenu.Content>\n\t</DropdownMenu.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/dropdown-menu/dropdown-menu-with-checkboxes.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\n\tlet showStatusBar = $state(true);\n\tlet showActivityBar = $state(false);\n\tlet showPanel = $state(false);\n</script>\n\n<Example title=\"With Checkboxes\">\n\t<DropdownMenu.Root>\n\t\t<DropdownMenu.Trigger>\n\t\t\t{#snippet child({ props })}\n\t\t\t\t<Button variant=\"outline\" class=\"w-fit\" {...props}>Checkboxes</Button>\n\t\t\t{/snippet}\n\t\t</DropdownMenu.Trigger>\n\t\t<DropdownMenu.Content class=\"min-w-40\">\n\t\t\t<DropdownMenu.Group>\n\t\t\t\t<DropdownMenu.Label>Appearance</DropdownMenu.Label>\n\t\t\t\t<DropdownMenu.CheckboxItem bind:checked={showStatusBar}>\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"LayoutIcon\"\n\t\t\t\t\t\ttabler=\"IconLayout\"\n\t\t\t\t\t\thugeicons=\"LayoutIcon\"\n\t\t\t\t\t\tphosphor=\"LayoutIcon\"\n\t\t\t\t\t\tremixicon=\"RiLayoutLine\"\n\t\t\t\t\t/>\n\t\t\t\t\tStatus Bar\n\t\t\t\t</DropdownMenu.CheckboxItem>\n\t\t\t\t<DropdownMenu.CheckboxItem bind:checked={showActivityBar} disabled>\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"ActivityIcon\"\n\t\t\t\t\t\ttabler=\"IconActivity\"\n\t\t\t\t\t\thugeicons=\"ActivityIcon\"\n\t\t\t\t\t\tphosphor=\"PulseIcon\"\n\t\t\t\t\t\tremixicon=\"RiPulseLine\"\n\t\t\t\t\t/>\n\t\t\t\t\tActivity Bar\n\t\t\t\t</DropdownMenu.CheckboxItem>\n\t\t\t\t<DropdownMenu.CheckboxItem bind:checked={showPanel}>\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"PanelLeftIcon\"\n\t\t\t\t\t\ttabler=\"IconLayoutSidebar\"\n\t\t\t\t\t\thugeicons=\"LayoutLeftIcon\"\n\t\t\t\t\t\tphosphor=\"SidebarIcon\"\n\t\t\t\t\t\tremixicon=\"RiSideBarLine\"\n\t\t\t\t\t/>\n\t\t\t\t\tPanel\n\t\t\t\t</DropdownMenu.CheckboxItem>\n\t\t\t</DropdownMenu.Group>\n\t\t</DropdownMenu.Content>\n\t</DropdownMenu.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/dropdown-menu/dropdown-menu-with-destructive.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Example title=\"With Destructive Items\">\n\t<DropdownMenu.Root>\n\t\t<DropdownMenu.Trigger>\n\t\t\t{#snippet child({ props })}\n\t\t\t\t<Button variant=\"outline\" class=\"w-fit\" {...props}>Actions</Button>\n\t\t\t{/snippet}\n\t\t</DropdownMenu.Trigger>\n\t\t<DropdownMenu.Content>\n\t\t\t<DropdownMenu.Item>\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"PencilIcon\"\n\t\t\t\t\ttabler=\"IconPencil\"\n\t\t\t\t\thugeicons=\"EditIcon\"\n\t\t\t\t\tphosphor=\"PencilIcon\"\n\t\t\t\t\tremixicon=\"RiPencilLine\"\n\t\t\t\t/>\n\t\t\t\tEdit\n\t\t\t</DropdownMenu.Item>\n\t\t\t<DropdownMenu.Item>\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"ShareIcon\"\n\t\t\t\t\ttabler=\"IconShare\"\n\t\t\t\t\thugeicons=\"ShareIcon\"\n\t\t\t\t\tphosphor=\"ShareIcon\"\n\t\t\t\t\tremixicon=\"RiShareLine\"\n\t\t\t\t/>\n\t\t\t\tShare\n\t\t\t</DropdownMenu.Item>\n\t\t\t<DropdownMenu.Separator />\n\t\t\t<DropdownMenu.Item>\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"ArchiveIcon\"\n\t\t\t\t\ttabler=\"IconArchive\"\n\t\t\t\t\thugeicons=\"Archive02Icon\"\n\t\t\t\t\tphosphor=\"ArchiveIcon\"\n\t\t\t\t\tremixicon=\"RiArchiveLine\"\n\t\t\t\t/>\n\t\t\t\tArchive\n\t\t\t</DropdownMenu.Item>\n\t\t\t<DropdownMenu.Item variant=\"destructive\">\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"TrashIcon\"\n\t\t\t\t\ttabler=\"IconTrash\"\n\t\t\t\t\thugeicons=\"DeleteIcon\"\n\t\t\t\t\tphosphor=\"TrashIcon\"\n\t\t\t\t\tremixicon=\"RiDeleteBinLine\"\n\t\t\t\t/>\n\t\t\t\tDelete\n\t\t\t</DropdownMenu.Item>\n\t\t</DropdownMenu.Content>\n\t</DropdownMenu.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/dropdown-menu/dropdown-menu-with-icons.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Example title=\"With Icons\">\n\t<DropdownMenu.Root>\n\t\t<DropdownMenu.Trigger>\n\t\t\t{#snippet child({ props })}\n\t\t\t\t<Button variant=\"outline\" class=\"w-fit\" {...props}>Open</Button>\n\t\t\t{/snippet}\n\t\t</DropdownMenu.Trigger>\n\t\t<DropdownMenu.Content>\n\t\t\t<DropdownMenu.Item>\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"UserIcon\"\n\t\t\t\t\ttabler=\"IconUser\"\n\t\t\t\t\thugeicons=\"UserIcon\"\n\t\t\t\t\tphosphor=\"UserIcon\"\n\t\t\t\t\tremixicon=\"RiUserLine\"\n\t\t\t\t/>\n\t\t\t\tProfile\n\t\t\t</DropdownMenu.Item>\n\t\t\t<DropdownMenu.Item>\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"CreditCardIcon\"\n\t\t\t\t\ttabler=\"IconCreditCard\"\n\t\t\t\t\thugeicons=\"CreditCardIcon\"\n\t\t\t\t\tphosphor=\"CreditCardIcon\"\n\t\t\t\t\tremixicon=\"RiBankCardLine\"\n\t\t\t\t/>\n\t\t\t\tBilling\n\t\t\t</DropdownMenu.Item>\n\t\t\t<DropdownMenu.Item>\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"SettingsIcon\"\n\t\t\t\t\ttabler=\"IconSettings\"\n\t\t\t\t\thugeicons=\"SettingsIcon\"\n\t\t\t\t\tphosphor=\"GearIcon\"\n\t\t\t\t\tremixicon=\"RiSettingsLine\"\n\t\t\t\t/>\n\t\t\t\tSettings\n\t\t\t</DropdownMenu.Item>\n\t\t\t<DropdownMenu.Separator />\n\t\t\t<DropdownMenu.Item variant=\"destructive\">\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"LogOutIcon\"\n\t\t\t\t\ttabler=\"IconLogout\"\n\t\t\t\t\thugeicons=\"LogoutIcon\"\n\t\t\t\t\tphosphor=\"SignOutIcon\"\n\t\t\t\t\tremixicon=\"RiLogoutBoxLine\"\n\t\t\t\t/>\n\t\t\t\tLog out\n\t\t\t</DropdownMenu.Item>\n\t\t</DropdownMenu.Content>\n\t</DropdownMenu.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/dropdown-menu/dropdown-menu-with-radio-icons.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\n\tlet paymentMethod = $state(\"card\");\n</script>\n\n<Example title=\"Radio with Icons\">\n\t<DropdownMenu.Root>\n\t\t<DropdownMenu.Trigger>\n\t\t\t{#snippet child({ props })}\n\t\t\t\t<Button variant=\"outline\" class=\"w-fit\" {...props}>Payment Method</Button>\n\t\t\t{/snippet}\n\t\t</DropdownMenu.Trigger>\n\t\t<DropdownMenu.Content class=\"min-w-56\">\n\t\t\t<DropdownMenu.Group>\n\t\t\t\t<DropdownMenu.Label>Select Payment Method</DropdownMenu.Label>\n\t\t\t\t<DropdownMenu.RadioGroup bind:value={paymentMethod}>\n\t\t\t\t\t<DropdownMenu.RadioItem value=\"card\">\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"CreditCardIcon\"\n\t\t\t\t\t\t\ttabler=\"IconCreditCard\"\n\t\t\t\t\t\t\thugeicons=\"CreditCardIcon\"\n\t\t\t\t\t\t\tphosphor=\"CreditCardIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiBankCardLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\tCredit Card\n\t\t\t\t\t</DropdownMenu.RadioItem>\n\t\t\t\t\t<DropdownMenu.RadioItem value=\"paypal\">\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"WalletIcon\"\n\t\t\t\t\t\t\ttabler=\"IconWallet\"\n\t\t\t\t\t\t\thugeicons=\"WalletIcon\"\n\t\t\t\t\t\t\tphosphor=\"WalletIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiWalletLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\tPayPal\n\t\t\t\t\t</DropdownMenu.RadioItem>\n\t\t\t\t\t<DropdownMenu.RadioItem value=\"bank\">\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"Building2Icon\"\n\t\t\t\t\t\t\ttabler=\"IconBuildingBank\"\n\t\t\t\t\t\t\thugeicons=\"BankIcon\"\n\t\t\t\t\t\t\tphosphor=\"BankIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiBankLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\tBank Transfer\n\t\t\t\t\t</DropdownMenu.RadioItem>\n\t\t\t\t</DropdownMenu.RadioGroup>\n\t\t\t</DropdownMenu.Group>\n\t\t</DropdownMenu.Content>\n\t</DropdownMenu.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/dropdown-menu/dropdown-menu-with-radio.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\n\tlet position = $state(\"bottom\");\n</script>\n\n<Example title=\"With Radio Group\">\n\t<DropdownMenu.Root>\n\t\t<DropdownMenu.Trigger>\n\t\t\t{#snippet child({ props })}\n\t\t\t\t<Button variant=\"outline\" class=\"w-fit\" {...props}>Radio Group</Button>\n\t\t\t{/snippet}\n\t\t</DropdownMenu.Trigger>\n\t\t<DropdownMenu.Content>\n\t\t\t<DropdownMenu.Group>\n\t\t\t\t<DropdownMenu.Label>Panel Position</DropdownMenu.Label>\n\t\t\t\t<DropdownMenu.RadioGroup bind:value={position}>\n\t\t\t\t\t<DropdownMenu.RadioItem value=\"top\">\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"ArrowUpIcon\"\n\t\t\t\t\t\t\ttabler=\"IconArrowUp\"\n\t\t\t\t\t\t\thugeicons=\"ArrowUp01Icon\"\n\t\t\t\t\t\t\tphosphor=\"ArrowUpIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiArrowUpLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\tTop\n\t\t\t\t\t</DropdownMenu.RadioItem>\n\t\t\t\t\t<DropdownMenu.RadioItem value=\"bottom\">\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"ArrowDownIcon\"\n\t\t\t\t\t\t\ttabler=\"IconArrowDown\"\n\t\t\t\t\t\t\thugeicons=\"ArrowDown01Icon\"\n\t\t\t\t\t\t\tphosphor=\"ArrowDownIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiArrowDownLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\tBottom\n\t\t\t\t\t</DropdownMenu.RadioItem>\n\t\t\t\t\t<DropdownMenu.RadioItem value=\"right\" disabled>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"ArrowRightIcon\"\n\t\t\t\t\t\t\ttabler=\"IconArrowRight\"\n\t\t\t\t\t\t\thugeicons=\"ArrowRight01Icon\"\n\t\t\t\t\t\t\tphosphor=\"ArrowRightIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiArrowRightLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\tRight\n\t\t\t\t\t</DropdownMenu.RadioItem>\n\t\t\t\t</DropdownMenu.RadioGroup>\n\t\t\t</DropdownMenu.Group>\n\t\t</DropdownMenu.Content>\n\t</DropdownMenu.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/dropdown-menu/dropdown-menu-with-shortcuts.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n</script>\n\n<Example title=\"With Shortcuts\">\n\t<DropdownMenu.Root>\n\t\t<DropdownMenu.Trigger>\n\t\t\t{#snippet child({ props })}\n\t\t\t\t<Button variant=\"outline\" class=\"w-fit\" {...props}>Open</Button>\n\t\t\t{/snippet}\n\t\t</DropdownMenu.Trigger>\n\t\t<DropdownMenu.Content>\n\t\t\t<DropdownMenu.Group>\n\t\t\t\t<DropdownMenu.Label>My Account</DropdownMenu.Label>\n\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\tProfile\n\t\t\t\t\t<DropdownMenu.Shortcut>⇧⌘P</DropdownMenu.Shortcut>\n\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\tBilling\n\t\t\t\t\t<DropdownMenu.Shortcut>⌘B</DropdownMenu.Shortcut>\n\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\tSettings\n\t\t\t\t\t<DropdownMenu.Shortcut>⌘S</DropdownMenu.Shortcut>\n\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\tKeyboard shortcuts\n\t\t\t\t\t<DropdownMenu.Shortcut>⌘K</DropdownMenu.Shortcut>\n\t\t\t\t</DropdownMenu.Item>\n\t\t\t</DropdownMenu.Group>\n\t\t\t<DropdownMenu.Separator />\n\t\t\t<DropdownMenu.Item>\n\t\t\t\tLog out\n\t\t\t\t<DropdownMenu.Shortcut>⇧⌘Q</DropdownMenu.Shortcut>\n\t\t\t</DropdownMenu.Item>\n\t\t</DropdownMenu.Content>\n\t</DropdownMenu.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/dropdown-menu/dropdown-menu-with-submenu.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n</script>\n\n<Example title=\"With Submenu\">\n\t<DropdownMenu.Root>\n\t\t<DropdownMenu.Trigger>\n\t\t\t{#snippet child({ props })}\n\t\t\t\t<Button variant=\"outline\" class=\"w-fit\" {...props}>Open</Button>\n\t\t\t{/snippet}\n\t\t</DropdownMenu.Trigger>\n\t\t<DropdownMenu.Content>\n\t\t\t<DropdownMenu.Group>\n\t\t\t\t<DropdownMenu.Item>Team</DropdownMenu.Item>\n\t\t\t\t<DropdownMenu.Sub>\n\t\t\t\t\t<DropdownMenu.SubTrigger>Invite users</DropdownMenu.SubTrigger>\n\t\t\t\t\t<DropdownMenu.Portal>\n\t\t\t\t\t\t<DropdownMenu.SubContent>\n\t\t\t\t\t\t\t<DropdownMenu.Item>Email</DropdownMenu.Item>\n\t\t\t\t\t\t\t<DropdownMenu.Item>Message</DropdownMenu.Item>\n\t\t\t\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t\t\t\t<DropdownMenu.Item>More...</DropdownMenu.Item>\n\t\t\t\t\t\t</DropdownMenu.SubContent>\n\t\t\t\t\t</DropdownMenu.Portal>\n\t\t\t\t</DropdownMenu.Sub>\n\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\tNew Team\n\t\t\t\t\t<DropdownMenu.Shortcut>⌘+T</DropdownMenu.Shortcut>\n\t\t\t\t</DropdownMenu.Item>\n\t\t\t</DropdownMenu.Group>\n\t\t</DropdownMenu.Content>\n\t</DropdownMenu.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/dropdown-menu/dropdown-menu.svelte",
    "content": "<script lang=\"ts\">\n\timport ExampleWrapper from \"../../../../../routes/(app)/(layout)/(create)/components/example-wrapper.svelte\";\n\timport DropdownMenuBasic from \"./dropdown-menu-basic.svelte\";\n\timport DropdownMenuComplex from \"./dropdown-menu-complex.svelte\";\n\timport DropdownMenuWithIcons from \"./dropdown-menu-with-icons.svelte\";\n\timport DropdownMenuWithShortcuts from \"./dropdown-menu-with-shortcuts.svelte\";\n\timport DropdownMenuWithSubmenu from \"./dropdown-menu-with-submenu.svelte\";\n\timport DropdownMenuWithCheckboxes from \"./dropdown-menu-with-checkboxes.svelte\";\n\timport DropdownMenuWithCheckboxesIcons from \"./dropdown-menu-with-checkboxes-icons.svelte\";\n\timport DropdownMenuWithRadio from \"./dropdown-menu-with-radio.svelte\";\n\timport DropdownMenuWithRadioIcons from \"./dropdown-menu-with-radio-icons.svelte\";\n\timport DropdownMenuWithDestructive from \"./dropdown-menu-with-destructive.svelte\";\n\timport DropdownMenuWithAvatar from \"./dropdown-menu-with-avatar.svelte\";\n\timport DropdownMenuInDialog from \"./dropdown-menu-in-dialog.svelte\";\n</script>\n\n<ExampleWrapper>\n\t<DropdownMenuBasic />\n\t<DropdownMenuComplex />\n\t<DropdownMenuWithIcons />\n\t<DropdownMenuWithShortcuts />\n\t<DropdownMenuWithSubmenu />\n\t<DropdownMenuWithCheckboxes />\n\t<DropdownMenuWithCheckboxesIcons />\n\t<DropdownMenuWithRadio />\n\t<DropdownMenuWithRadioIcons />\n\t<DropdownMenuWithDestructive />\n\t<DropdownMenuWithAvatar />\n\t<DropdownMenuInDialog />\n</ExampleWrapper>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/elevenlabs/bar-visualizer-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport BarVisualizer, { type AgentState } from \"./bar-visualizer.svelte\";\n\n\tlet agentState: AgentState = $state(\"speaking\");\n</script>\n\n<Example title=\"Bar Visualizer\">\n\t<Card.Root>\n\t\t<Card.Header>\n\t\t\t<Card.Title>Audio Frequency Visualizer</Card.Title>\n\t\t\t<Card.Description>\n\t\t\t\tReal-time frequency band visualization with animated state transitions\n\t\t\t</Card.Description>\n\t\t</Card.Header>\n\t\t<Card.Content>\n\t\t\t<BarVisualizer\n\t\t\t\t{agentState}\n\t\t\t\tdemo={true}\n\t\t\t\tbarCount={20}\n\t\t\t\tminHeight={15}\n\t\t\t\tmaxHeight={90}\n\t\t\t\tclass=\"h-40 max-w-full\"\n\t\t\t/>\n\t\t</Card.Content>\n\t\t<Card.Footer class=\"gap-2\">\n\t\t\t<Button\n\t\t\t\tsize=\"sm\"\n\t\t\t\tvariant={agentState === \"connecting\" ? \"default\" : \"outline\"}\n\t\t\t\tonclick={() => (agentState = \"connecting\")}\n\t\t\t>\n\t\t\t\tConnecting\n\t\t\t</Button>\n\t\t\t<Button\n\t\t\t\tsize=\"sm\"\n\t\t\t\tvariant={agentState === \"listening\" ? \"default\" : \"outline\"}\n\t\t\t\tonclick={() => (agentState = \"listening\")}\n\t\t\t>\n\t\t\t\tListening\n\t\t\t</Button>\n\t\t\t<Button\n\t\t\t\tsize=\"sm\"\n\t\t\t\tvariant={agentState === \"speaking\" ? \"default\" : \"outline\"}\n\t\t\t\tonclick={() => (agentState = \"speaking\")}\n\t\t\t>\n\t\t\t\tSpeaking\n\t\t\t</Button>\n\t\t</Card.Footer>\n\t</Card.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/elevenlabs/bar-visualizer.svelte",
    "content": "<script lang=\"ts\" module>\n\texport type AgentState = \"connecting\" | \"initializing\" | \"listening\" | \"speaking\" | \"thinking\";\n\n\ttype AnimationState = AgentState | undefined;\n\n\tfunction generateConnectingSequenceBar(columns: number): number[][] {\n\t\tconst seq = [];\n\t\tfor (let x = 0; x < columns; x++) {\n\t\t\tseq.push([x, columns - 1 - x]);\n\t\t}\n\t\treturn seq;\n\t}\n\n\tfunction generateListeningSequenceBar(columns: number): number[][] {\n\t\tconst center = Math.floor(columns / 2);\n\t\tconst noIndex = -1;\n\t\treturn [[center], [noIndex]];\n\t}\n</script>\n\n<script lang=\"ts\">\n\timport { cn } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tinterface Props extends HTMLAttributes<HTMLDivElement> {\n\t\tagentState?: AgentState;\n\t\tbarCount?: number;\n\t\tmediaStream?: MediaStream | null;\n\t\tminHeight?: number;\n\t\tmaxHeight?: number;\n\t\tdemo?: boolean;\n\t\tcenterAlign?: boolean;\n\t}\n\n\tlet {\n\t\tagentState,\n\t\tbarCount = 15,\n\t\tmediaStream = null,\n\t\tminHeight = 20,\n\t\tmaxHeight = 100,\n\t\tdemo = false,\n\t\tcenterAlign = false,\n\t\tclass: className,\n\t\t...restProps\n\t}: Props = $props();\n\n\t// Volume bands state\n\tlet volumeBands = $derived<number[]>(new Array(barCount).fill(0.2));\n\tlet highlightedIndices = $state<number[]>([]);\n\n\t// Animation frame IDs for cleanup\n\tlet volumeAnimationId: number | undefined;\n\tlet barAnimationId: number | null = null;\n\n\t// Audio analysis for real audio\n\tfunction createAudioAnalyser(stream: MediaStream) {\n\t\tconst AudioContextConstructor =\n\t\t\twindow.AudioContext ||\n\t\t\t(window as unknown as { webkitAudioContext: typeof AudioContext }).webkitAudioContext;\n\t\tconst audioContext = new AudioContextConstructor();\n\t\tconst source = audioContext.createMediaStreamSource(stream);\n\t\tconst analyser = audioContext.createAnalyser();\n\n\t\tanalyser.fftSize = 2048;\n\n\t\tsource.connect(analyser);\n\n\t\tconst cleanup = () => {\n\t\t\tsource.disconnect();\n\t\t\taudioContext.close();\n\t\t};\n\n\t\treturn { analyser, audioContext, cleanup };\n\t}\n\n\t// Multiband volume processing\n\tfunction normalizeDb(value: number): number {\n\t\tif (value === -Infinity) return 0;\n\t\tconst minDb = -100;\n\t\tconst maxDb = -10;\n\t\tconst db = 1 - (Math.max(minDb, Math.min(maxDb, value)) * -1) / 100;\n\t\treturn Math.sqrt(db);\n\t}\n\n\t// Real audio volume tracking\n\t$effect(() => {\n\t\tif (demo || !mediaStream) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst bands = barCount;\n\t\tconst loPass = 100;\n\t\tconst hiPass = 200;\n\t\tconst updateInterval = 32;\n\n\t\tconst { analyser, cleanup } = createAudioAnalyser(mediaStream);\n\t\tconst bufferLength = analyser.frequencyBinCount;\n\t\tconst dataArray = new Float32Array(bufferLength);\n\t\tconst sliceStart = loPass;\n\t\tconst sliceEnd = hiPass;\n\t\tconst sliceLength = sliceEnd - sliceStart;\n\t\tconst chunkSize = Math.ceil(sliceLength / bands);\n\n\t\tlet lastUpdate = 0;\n\n\t\tconst updateVolume = (timestamp: number) => {\n\t\t\tif (timestamp - lastUpdate >= updateInterval) {\n\t\t\t\tanalyser.getFloatFrequencyData(dataArray);\n\n\t\t\t\tconst chunks = new Array(bands);\n\n\t\t\t\tfor (let i = 0; i < bands; i++) {\n\t\t\t\t\tlet sum = 0;\n\t\t\t\t\tlet count = 0;\n\t\t\t\t\tconst startIdx = sliceStart + i * chunkSize;\n\t\t\t\t\tconst endIdx = Math.min(sliceStart + (i + 1) * chunkSize, sliceEnd);\n\n\t\t\t\t\tfor (let j = startIdx; j < endIdx; j++) {\n\t\t\t\t\t\tsum += normalizeDb(dataArray[j]);\n\t\t\t\t\t\tcount++;\n\t\t\t\t\t}\n\n\t\t\t\t\tchunks[i] = count > 0 ? sum / count : 0;\n\t\t\t\t}\n\n\t\t\t\tvolumeBands = chunks;\n\t\t\t\tlastUpdate = timestamp;\n\t\t\t}\n\n\t\t\tvolumeAnimationId = requestAnimationFrame(updateVolume);\n\t\t};\n\n\t\tvolumeAnimationId = requestAnimationFrame(updateVolume);\n\n\t\treturn () => {\n\t\t\tcleanup();\n\t\t\tif (volumeAnimationId) {\n\t\t\t\tcancelAnimationFrame(volumeAnimationId);\n\t\t\t}\n\t\t};\n\t});\n\n\t// Fake volume animation for demo mode\n\t$effect(() => {\n\t\tif (!demo) return;\n\n\t\tif (agentState !== \"speaking\" && agentState !== \"listening\") {\n\t\t\tvolumeBands = new Array(barCount).fill(0.2);\n\t\t\treturn;\n\t\t}\n\n\t\tconst startTime = Date.now() / 1000;\n\t\tconst updateInterval = 50;\n\t\tlet lastUpdate = 0;\n\n\t\tconst updateFakeVolume = (timestamp: number) => {\n\t\t\tif (timestamp - lastUpdate >= updateInterval) {\n\t\t\t\tconst time = Date.now() / 1000 - startTime;\n\t\t\t\tconst newBands = new Array(barCount);\n\n\t\t\t\tfor (let i = 0; i < barCount; i++) {\n\t\t\t\t\tconst waveOffset = i * 0.5;\n\t\t\t\t\tconst baseVolume = Math.sin(time * 2 + waveOffset) * 0.3 + 0.5;\n\t\t\t\t\tconst randomNoise = Math.random() * 0.2;\n\t\t\t\t\tnewBands[i] = Math.max(0.1, Math.min(1, baseVolume + randomNoise));\n\t\t\t\t}\n\n\t\t\t\tvolumeBands = newBands;\n\t\t\t\tlastUpdate = timestamp;\n\t\t\t}\n\n\t\t\tvolumeAnimationId = requestAnimationFrame(updateFakeVolume);\n\t\t};\n\n\t\tvolumeAnimationId = requestAnimationFrame(updateFakeVolume);\n\n\t\treturn () => {\n\t\t\tif (volumeAnimationId) {\n\t\t\t\tcancelAnimationFrame(volumeAnimationId);\n\t\t\t}\n\t\t};\n\t});\n\n\t// Bar animation sequencing\n\t$effect(() => {\n\t\tconst animState = agentState as AnimationState;\n\t\tlet sequence: number[][];\n\n\t\tif (animState === \"thinking\" || animState === \"listening\") {\n\t\t\tsequence = generateListeningSequenceBar(barCount);\n\t\t} else if (animState === \"connecting\" || animState === \"initializing\") {\n\t\t\tsequence = generateConnectingSequenceBar(barCount);\n\t\t} else if (animState === undefined || animState === \"speaking\") {\n\t\t\tsequence = [new Array(barCount).fill(0).map((_, idx) => idx)];\n\t\t} else {\n\t\t\tsequence = [[]];\n\t\t}\n\n\t\tconst interval =\n\t\t\tanimState === \"connecting\"\n\t\t\t\t? 2000 / barCount\n\t\t\t\t: animState === \"thinking\"\n\t\t\t\t\t? 150\n\t\t\t\t\t: animState === \"listening\"\n\t\t\t\t\t\t? 500\n\t\t\t\t\t\t: 1000;\n\n\t\tlet indexRef = 0;\n\t\thighlightedIndices = sequence[0] || [];\n\n\t\tlet startTime = performance.now();\n\n\t\tconst animate = (time: number) => {\n\t\t\tconst timeElapsed = time - startTime;\n\n\t\t\tif (timeElapsed >= interval) {\n\t\t\t\tindexRef = (indexRef + 1) % sequence.length;\n\t\t\t\thighlightedIndices = sequence[indexRef] || [];\n\t\t\t\tstartTime = time;\n\t\t\t}\n\n\t\t\tbarAnimationId = requestAnimationFrame(animate);\n\t\t};\n\n\t\tbarAnimationId = requestAnimationFrame(animate);\n\n\t\treturn () => {\n\t\t\tif (barAnimationId !== null) {\n\t\t\t\tcancelAnimationFrame(barAnimationId);\n\t\t\t}\n\t\t};\n\t});\n</script>\n\n<div\n\tdata-state={agentState}\n\tclass={cn(\n\t\t\"relative flex justify-center gap-1.5\",\n\t\tcenterAlign ? \"items-center\" : \"items-end\",\n\t\t\"bg-muted h-32 w-full overflow-hidden rounded-lg p-4\",\n\t\tclassName\n\t)}\n\t{...restProps}\n>\n\t{#each volumeBands as volume, index (index)}\n\t\t{@const heightPct = Math.min(maxHeight, Math.max(minHeight, volume * 100 + 5))}\n\t\t{@const isHighlighted = highlightedIndices?.includes(index) ?? false}\n\t\t<div\n\t\t\tdata-highlighted={isHighlighted}\n\t\t\tclass={cn(\n\t\t\t\t\"max-w-[12px] min-w-[8px] flex-1 transition-all duration-150\",\n\t\t\t\t\"rounded-full\",\n\t\t\t\t\"bg-border data-[highlighted=true]:bg-primary\",\n\t\t\t\tagentState === \"speaking\" && \"bg-primary\",\n\t\t\t\tagentState === \"thinking\" && isHighlighted && \"animate-pulse\"\n\t\t\t)}\n\t\t\tstyle=\"height: {heightPct}%; {agentState === 'thinking'\n\t\t\t\t? 'animation-duration: 300ms;'\n\t\t\t\t: ''}\"\n\t\t></div>\n\t{/each}\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/elevenlabs/elevenlabs.svelte",
    "content": "<script lang=\"ts\">\n\timport ExampleWrapper from \"../../../../../routes/(app)/(layout)/(create)/components/example-wrapper.svelte\";\n\timport BarVisualizerDemo from \"./bar-visualizer-demo.svelte\";\n\timport WaveformDemo from \"./waveform-demo.svelte\";\n</script>\n\n<ExampleWrapper>\n\t<BarVisualizerDemo />\n\t<WaveformDemo />\n</ExampleWrapper>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/elevenlabs/live-waveform.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\timport { onMount } from \"svelte\";\n\n\tinterface Props extends HTMLAttributes<HTMLDivElement> {\n\t\tactive?: boolean;\n\t\tprocessing?: boolean;\n\t\tdeviceId?: string;\n\t\tbarWidth?: number;\n\t\tbarHeight?: number;\n\t\tbarGap?: number;\n\t\tbarRadius?: number;\n\t\tbarColor?: string;\n\t\tfadeEdges?: boolean;\n\t\tfadeWidth?: number;\n\t\theight?: string | number;\n\t\tsensitivity?: number;\n\t\tsmoothingTimeConstant?: number;\n\t\tfftSize?: number;\n\t\thistorySize?: number;\n\t\tupdateRate?: number;\n\t\tmode?: \"scrolling\" | \"static\";\n\t\tonError?: (error: Error) => void;\n\t\tonStreamReady?: (stream: MediaStream) => void;\n\t\tonStreamEnd?: () => void;\n\t}\n\n\tlet {\n\t\tactive = false,\n\t\tprocessing = false,\n\t\tdeviceId,\n\t\tbarWidth = 3,\n\t\tbarGap = 1,\n\t\tbarRadius = 1.5,\n\t\tbarColor,\n\t\tfadeEdges = true,\n\t\tfadeWidth = 24,\n\t\tbarHeight: baseBarHeight = 4,\n\t\theight = 64,\n\t\tsensitivity = 1,\n\t\tsmoothingTimeConstant = 0.8,\n\t\tfftSize = 256,\n\t\thistorySize = 60,\n\t\tupdateRate = 30,\n\t\tmode = \"static\",\n\t\tonError,\n\t\tonStreamReady,\n\t\tonStreamEnd,\n\t\tclass: className,\n\t\t...restProps\n\t}: Props = $props();\n\n\tlet canvasRef: HTMLCanvasElement;\n\tlet containerRef: HTMLDivElement;\n\n\t// Refs for animation state\n\tlet history: number[] = [];\n\tlet analyser: AnalyserNode | null = null;\n\tlet audioContext: AudioContext | null = null;\n\tlet stream: MediaStream | null = null;\n\tlet animationId = 0;\n\tlet lastUpdate = 0;\n\tlet processingAnimationId: number | null = null;\n\tlet lastActiveData: number[] = [];\n\tlet transitionProgress = 0;\n\tlet staticBars: number[] = [];\n\tlet needsRedraw = true;\n\tlet gradientCache: CanvasGradient | null = null;\n\tlet lastWidth = 0;\n\n\tconst heightStyle = $derived(typeof height === \"number\" ? `${height}px` : height);\n\n\tonMount(() => {\n\t\t// Handle canvas resizing\n\t\tconst resizeObserver = new ResizeObserver(() => {\n\t\t\tif (!canvasRef || !containerRef) return;\n\t\t\tconst rect = containerRef.getBoundingClientRect();\n\t\t\tconst dpr = window.devicePixelRatio || 1;\n\t\t\tcanvasRef.width = rect.width * dpr;\n\t\t\tcanvasRef.height = rect.height * dpr;\n\t\t\tcanvasRef.style.width = `${rect.width}px`;\n\t\t\tcanvasRef.style.height = `${rect.height}px`;\n\t\t\tconst ctx = canvasRef.getContext(\"2d\");\n\t\t\tif (ctx) {\n\t\t\t\tctx.scale(dpr, dpr);\n\t\t\t}\n\t\t\tgradientCache = null;\n\t\t\tlastWidth = rect.width;\n\t\t\tneedsRedraw = true;\n\t\t});\n\n\t\tresizeObserver.observe(containerRef);\n\n\t\treturn () => {\n\t\t\tresizeObserver.disconnect();\n\t\t};\n\t});\n\n\t// Handle processing animation (when not active but processing)\n\t$effect(() => {\n\t\tif (processing && !active) {\n\t\t\tlet time = 0;\n\t\t\ttransitionProgress = 0;\n\n\t\t\tconst animateProcessing = () => {\n\t\t\t\ttime += 0.03;\n\t\t\t\ttransitionProgress = Math.min(1, transitionProgress + 0.02);\n\n\t\t\t\tconst processingData: number[] = [];\n\t\t\t\tconst barCount = Math.floor(\n\t\t\t\t\t(containerRef?.getBoundingClientRect().width || 200) / (barWidth + barGap)\n\t\t\t\t);\n\n\t\t\t\tif (mode === \"static\") {\n\t\t\t\t\tconst halfCount = Math.floor(barCount / 2);\n\t\t\t\t\tfor (let i = 0; i < barCount; i++) {\n\t\t\t\t\t\tconst normalizedPosition = (i - halfCount) / halfCount;\n\t\t\t\t\t\tconst centerWeight = 1 - Math.abs(normalizedPosition) * 0.4;\n\t\t\t\t\t\tconst wave1 = Math.sin(time * 1.5 + normalizedPosition * 3) * 0.25;\n\t\t\t\t\t\tconst wave2 = Math.sin(time * 0.8 - normalizedPosition * 2) * 0.2;\n\t\t\t\t\t\tconst wave3 = Math.cos(time * 2 + normalizedPosition) * 0.15;\n\t\t\t\t\t\tconst combinedWave = wave1 + wave2 + wave3;\n\t\t\t\t\t\tconst processingValue = (0.2 + combinedWave) * centerWeight;\n\n\t\t\t\t\t\tlet finalValue = processingValue;\n\t\t\t\t\t\tif (lastActiveData.length > 0 && transitionProgress < 1) {\n\t\t\t\t\t\t\tconst lastDataIndex = Math.min(i, lastActiveData.length - 1);\n\t\t\t\t\t\t\tconst lastValue = lastActiveData[lastDataIndex] || 0;\n\t\t\t\t\t\t\tfinalValue =\n\t\t\t\t\t\t\t\tlastValue * (1 - transitionProgress) +\n\t\t\t\t\t\t\t\tprocessingValue * transitionProgress;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tprocessingData.push(Math.max(0.05, Math.min(1, finalValue)));\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tfor (let i = 0; i < barCount; i++) {\n\t\t\t\t\t\tconst normalizedPosition = (i - barCount / 2) / (barCount / 2);\n\t\t\t\t\t\tconst centerWeight = 1 - Math.abs(normalizedPosition) * 0.4;\n\t\t\t\t\t\tconst wave1 = Math.sin(time * 1.5 + i * 0.15) * 0.25;\n\t\t\t\t\t\tconst wave2 = Math.sin(time * 0.8 - i * 0.1) * 0.2;\n\t\t\t\t\t\tconst wave3 = Math.cos(time * 2 + i * 0.05) * 0.15;\n\t\t\t\t\t\tconst combinedWave = wave1 + wave2 + wave3;\n\t\t\t\t\t\tconst processingValue = (0.2 + combinedWave) * centerWeight;\n\n\t\t\t\t\t\tlet finalValue = processingValue;\n\t\t\t\t\t\tif (lastActiveData.length > 0 && transitionProgress < 1) {\n\t\t\t\t\t\t\tconst lastDataIndex = Math.floor(\n\t\t\t\t\t\t\t\t(i / barCount) * lastActiveData.length\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tconst lastValue = lastActiveData[lastDataIndex] || 0;\n\t\t\t\t\t\t\tfinalValue =\n\t\t\t\t\t\t\t\tlastValue * (1 - transitionProgress) +\n\t\t\t\t\t\t\t\tprocessingValue * transitionProgress;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tprocessingData.push(Math.max(0.05, Math.min(1, finalValue)));\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (mode === \"static\") {\n\t\t\t\t\tstaticBars = processingData;\n\t\t\t\t} else {\n\t\t\t\t\thistory = processingData;\n\t\t\t\t}\n\t\t\t\tneedsRedraw = true;\n\t\t\t\tprocessingAnimationId = requestAnimationFrame(animateProcessing);\n\t\t\t};\n\n\t\t\tanimateProcessing();\n\n\t\t\treturn () => {\n\t\t\t\tif (processingAnimationId) {\n\t\t\t\t\tcancelAnimationFrame(processingAnimationId);\n\t\t\t\t}\n\t\t\t};\n\t\t} else if (!active && !processing) {\n\t\t\t// Fade to idle\n\t\t\tconst hasData = mode === \"static\" ? staticBars.length > 0 : history.length > 0;\n\n\t\t\tif (hasData) {\n\t\t\t\tlet fadeProgress = 0;\n\n\t\t\t\tconst fadeToIdle = () => {\n\t\t\t\t\tfadeProgress += 0.03;\n\t\t\t\t\tif (fadeProgress < 1) {\n\t\t\t\t\t\tif (mode === \"static\") {\n\t\t\t\t\t\t\tstaticBars = staticBars.map((value) => value * (1 - fadeProgress));\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\thistory = history.map((value) => value * (1 - fadeProgress));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tneedsRedraw = true;\n\t\t\t\t\t\trequestAnimationFrame(fadeToIdle);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (mode === \"static\") {\n\t\t\t\t\t\t\tstaticBars = [];\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\thistory = [];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\tfadeToIdle();\n\t\t\t}\n\t\t}\n\t});\n\n\t// Handle microphone setup and teardown\n\t$effect(() => {\n\t\tif (!active) {\n\t\t\tif (stream) {\n\t\t\t\tstream.getTracks().forEach((track) => track.stop());\n\t\t\t\tstream = null;\n\t\t\t\tonStreamEnd?.();\n\t\t\t}\n\t\t\tif (audioContext && audioContext.state !== \"closed\") {\n\t\t\t\taudioContext.close();\n\t\t\t\taudioContext = null;\n\t\t\t}\n\t\t\tif (animationId) {\n\t\t\t\tcancelAnimationFrame(animationId);\n\t\t\t\tanimationId = 0;\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tconst setupMicrophone = async () => {\n\t\t\ttry {\n\t\t\t\tstream = await navigator.mediaDevices.getUserMedia({\n\t\t\t\t\taudio: deviceId\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\tdeviceId: { exact: deviceId },\n\t\t\t\t\t\t\t\techoCancellation: true,\n\t\t\t\t\t\t\t\tnoiseSuppression: true,\n\t\t\t\t\t\t\t\tautoGainControl: true,\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\techoCancellation: true,\n\t\t\t\t\t\t\t\tnoiseSuppression: true,\n\t\t\t\t\t\t\t\tautoGainControl: true,\n\t\t\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t\tonStreamReady?.(stream);\n\n\t\t\t\tconst AudioContextConstructor =\n\t\t\t\t\twindow.AudioContext ||\n\t\t\t\t\t(window as unknown as { webkitAudioContext: typeof AudioContext })\n\t\t\t\t\t\t.webkitAudioContext;\n\t\t\t\taudioContext = new AudioContextConstructor();\n\t\t\t\tanalyser = audioContext.createAnalyser();\n\t\t\t\tanalyser.fftSize = fftSize;\n\t\t\t\tanalyser.smoothingTimeConstant = smoothingTimeConstant;\n\n\t\t\t\tconst source = audioContext.createMediaStreamSource(stream);\n\t\t\t\tsource.connect(analyser);\n\n\t\t\t\t// Clear history when starting\n\t\t\t\thistory = [];\n\t\t\t} catch (error) {\n\t\t\t\tonError?.(error as Error);\n\t\t\t}\n\t\t};\n\n\t\tsetupMicrophone();\n\n\t\treturn () => {\n\t\t\tif (stream) {\n\t\t\t\tstream.getTracks().forEach((track) => track.stop());\n\t\t\t\tstream = null;\n\t\t\t\tonStreamEnd?.();\n\t\t\t}\n\t\t\tif (audioContext && audioContext.state !== \"closed\") {\n\t\t\t\taudioContext.close();\n\t\t\t\taudioContext = null;\n\t\t\t}\n\t\t\tif (animationId) {\n\t\t\t\tcancelAnimationFrame(animationId);\n\t\t\t\tanimationId = 0;\n\t\t\t}\n\t\t};\n\t});\n\n\t// Animation loop\n\t$effect(() => {\n\t\tif (!canvasRef) return;\n\n\t\tconst ctx = canvasRef.getContext(\"2d\");\n\t\tif (!ctx) return;\n\n\t\tlet rafId: number;\n\n\t\tconst animate = (currentTime: number) => {\n\t\t\tconst rect = canvasRef.getBoundingClientRect();\n\n\t\t\t// Update audio data if active\n\t\t\tif (active && currentTime - lastUpdate > updateRate) {\n\t\t\t\tlastUpdate = currentTime;\n\t\t\t\tif (analyser) {\n\t\t\t\t\tconst dataArray = new Uint8Array(analyser.frequencyBinCount);\n\t\t\t\t\tanalyser.getByteFrequencyData(dataArray);\n\n\t\t\t\t\tif (mode === \"static\") {\n\t\t\t\t\t\t// For static mode, update bars in place\n\t\t\t\t\t\tconst startFreq = Math.floor(dataArray.length * 0.05);\n\t\t\t\t\t\tconst endFreq = Math.floor(dataArray.length * 0.4);\n\t\t\t\t\t\tconst relevantData = dataArray.slice(startFreq, endFreq);\n\t\t\t\t\t\tconst barCount = Math.floor(rect.width / (barWidth + barGap));\n\t\t\t\t\t\tconst halfCount = Math.floor(barCount / 2);\n\t\t\t\t\t\tconst newBars: number[] = [];\n\n\t\t\t\t\t\t// Mirror the data for symmetric display\n\t\t\t\t\t\tfor (let i = halfCount - 1; i >= 0; i--) {\n\t\t\t\t\t\t\tconst dataIndex = Math.floor((i / halfCount) * relevantData.length);\n\t\t\t\t\t\t\tconst value = Math.min(\n\t\t\t\t\t\t\t\t1,\n\t\t\t\t\t\t\t\t(relevantData[dataIndex] / 255) * sensitivity\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tnewBars.push(Math.max(0.05, value));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tfor (let i = 0; i < halfCount; i++) {\n\t\t\t\t\t\t\tconst dataIndex = Math.floor((i / halfCount) * relevantData.length);\n\t\t\t\t\t\t\tconst value = Math.min(\n\t\t\t\t\t\t\t\t1,\n\t\t\t\t\t\t\t\t(relevantData[dataIndex] / 255) * sensitivity\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tnewBars.push(Math.max(0.05, value));\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tstaticBars = newBars;\n\t\t\t\t\t\tlastActiveData = newBars;\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// Scrolling mode - original behavior\n\t\t\t\t\t\tlet sum = 0;\n\t\t\t\t\t\tconst startFreq = Math.floor(dataArray.length * 0.05);\n\t\t\t\t\t\tconst endFreq = Math.floor(dataArray.length * 0.4);\n\t\t\t\t\t\tconst relevantData = dataArray.slice(startFreq, endFreq);\n\n\t\t\t\t\t\tfor (let i = 0; i < relevantData.length; i++) {\n\t\t\t\t\t\t\tsum += relevantData[i];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst average = (sum / relevantData.length / 255) * sensitivity;\n\n\t\t\t\t\t\t// Add to history\n\t\t\t\t\t\thistory.push(Math.min(1, Math.max(0.05, average)));\n\t\t\t\t\t\tlastActiveData = [...history];\n\n\t\t\t\t\t\t// Maintain history size\n\t\t\t\t\t\tif (history.length > historySize) {\n\t\t\t\t\t\t\thistory.shift();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tneedsRedraw = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Only redraw if needed\n\t\t\tif (!needsRedraw && !active) {\n\t\t\t\trafId = requestAnimationFrame(animate);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tneedsRedraw = active;\n\n\t\t\tctx.clearRect(0, 0, rect.width, rect.height);\n\n\t\t\tconst computedBarColor =\n\t\t\t\tbarColor ||\n\t\t\t\t(() => {\n\t\t\t\t\tconst style = getComputedStyle(canvasRef);\n\t\t\t\t\tconst color = style.color;\n\t\t\t\t\treturn color || \"#000\";\n\t\t\t\t})();\n\n\t\t\tconst step = barWidth + barGap;\n\t\t\tconst barCount = Math.floor(rect.width / step);\n\t\t\tconst centerY = rect.height / 2;\n\n\t\t\t// Draw bars based on mode\n\t\t\tif (mode === \"static\") {\n\t\t\t\tconst dataToRender = processing\n\t\t\t\t\t? staticBars\n\t\t\t\t\t: active\n\t\t\t\t\t\t? staticBars\n\t\t\t\t\t\t: staticBars.length > 0\n\t\t\t\t\t\t\t? staticBars\n\t\t\t\t\t\t\t: [];\n\n\t\t\t\tfor (let i = 0; i < barCount && i < dataToRender.length; i++) {\n\t\t\t\t\tconst value = dataToRender[i] || 0.1;\n\t\t\t\t\tconst x = i * step;\n\t\t\t\t\tconst barHeightCalc = Math.max(baseBarHeight, value * rect.height * 0.8);\n\t\t\t\t\tconst y = centerY - barHeightCalc / 2;\n\n\t\t\t\t\tctx.fillStyle = computedBarColor;\n\t\t\t\t\tctx.globalAlpha = 0.4 + value * 0.6;\n\n\t\t\t\t\tif (barRadius > 0) {\n\t\t\t\t\t\tctx.beginPath();\n\t\t\t\t\t\tctx.roundRect(x, y, barWidth, barHeightCalc, barRadius);\n\t\t\t\t\t\tctx.fill();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tctx.fillRect(x, y, barWidth, barHeightCalc);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Scrolling mode\n\t\t\t\tfor (let i = 0; i < barCount && i < history.length; i++) {\n\t\t\t\t\tconst dataIndex = history.length - 1 - i;\n\t\t\t\t\tconst value = history[dataIndex] || 0.1;\n\t\t\t\t\tconst x = rect.width - (i + 1) * step;\n\t\t\t\t\tconst barHeightCalc = Math.max(baseBarHeight, value * rect.height * 0.8);\n\t\t\t\t\tconst y = centerY - barHeightCalc / 2;\n\n\t\t\t\t\tctx.fillStyle = computedBarColor;\n\t\t\t\t\tctx.globalAlpha = 0.4 + value * 0.6;\n\n\t\t\t\t\tif (barRadius > 0) {\n\t\t\t\t\t\tctx.beginPath();\n\t\t\t\t\t\tctx.roundRect(x, y, barWidth, barHeightCalc, barRadius);\n\t\t\t\t\t\tctx.fill();\n\t\t\t\t\t} else {\n\t\t\t\t\t\tctx.fillRect(x, y, barWidth, barHeightCalc);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Apply edge fading\n\t\t\tif (fadeEdges && fadeWidth > 0 && rect.width > 0) {\n\t\t\t\tif (!gradientCache || lastWidth !== rect.width) {\n\t\t\t\t\tconst gradient = ctx.createLinearGradient(0, 0, rect.width, 0);\n\t\t\t\t\tconst fadePercent = Math.min(0.3, fadeWidth / rect.width);\n\n\t\t\t\t\tgradient.addColorStop(0, \"rgba(255,255,255,1)\");\n\t\t\t\t\tgradient.addColorStop(fadePercent, \"rgba(255,255,255,0)\");\n\t\t\t\t\tgradient.addColorStop(1 - fadePercent, \"rgba(255,255,255,0)\");\n\t\t\t\t\tgradient.addColorStop(1, \"rgba(255,255,255,1)\");\n\n\t\t\t\t\tgradientCache = gradient;\n\t\t\t\t\tlastWidth = rect.width;\n\t\t\t\t}\n\n\t\t\t\tctx.globalCompositeOperation = \"destination-out\";\n\t\t\t\tctx.fillStyle = gradientCache;\n\t\t\t\tctx.fillRect(0, 0, rect.width, rect.height);\n\t\t\t\tctx.globalCompositeOperation = \"source-over\";\n\t\t\t}\n\n\t\t\tctx.globalAlpha = 1;\n\t\t\trafId = requestAnimationFrame(animate);\n\t\t};\n\n\t\trafId = requestAnimationFrame(animate);\n\n\t\treturn () => {\n\t\t\tif (rafId) {\n\t\t\t\tcancelAnimationFrame(rafId);\n\t\t\t}\n\t\t};\n\t});\n</script>\n\n<div\n\tclass={cn(\"relative h-full w-full\", className)}\n\tbind:this={containerRef}\n\tstyle=\"height: {heightStyle};\"\n\taria-label={active\n\t\t? \"Live audio waveform\"\n\t\t: processing\n\t\t\t? \"Processing audio\"\n\t\t\t: \"Audio waveform idle\"}\n\trole=\"img\"\n\t{...restProps}\n>\n\t{#if !active && !processing}\n\t\t<div\n\t\t\tclass=\"border-muted-foreground/20 absolute top-1/2 right-0 left-0 -translate-y-1/2 border-t-2 border-dotted\"\n\t\t></div>\n\t{/if}\n\t<canvas class=\"block h-full w-full\" bind:this={canvasRef} aria-hidden=\"true\"></canvas>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/elevenlabs/waveform-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport LiveWaveform from \"./live-waveform.svelte\";\n\n\tlet active = $state(false);\n\tlet processing = $state(true);\n\tlet mode = $state<\"static\" | \"scrolling\">(\"static\");\n\n\tfunction handleToggleActive() {\n\t\tactive = !active;\n\t\tif (active) {\n\t\t\tprocessing = false;\n\t\t}\n\t}\n\n\tfunction handleToggleProcessing() {\n\t\tprocessing = !processing;\n\t\tif (processing) {\n\t\t\tactive = false;\n\t\t}\n\t}\n</script>\n\n<Example title=\"Waveform\" class=\"items-center justify-center\">\n\t<Card.Root>\n\t\t<Card.Header>\n\t\t\t<Card.Title>Live Audio Waveform</Card.Title>\n\t\t\t<Card.Description>\n\t\t\t\tReal-time microphone input visualization with audio reactivity\n\t\t\t</Card.Description>\n\t\t</Card.Header>\n\t\t<Card.Content>\n\t\t\t<LiveWaveform\n\t\t\t\t{active}\n\t\t\t\t{processing}\n\t\t\t\theight={80}\n\t\t\t\tbarWidth={3}\n\t\t\t\tbarGap={2}\n\t\t\t\t{mode}\n\t\t\t\tfadeEdges={true}\n\t\t\t\tbarColor=\"gray\"\n\t\t\t\thistorySize={120}\n\t\t\t/>\n\t\t</Card.Content>\n\t\t<Card.Footer class=\"gap-2\">\n\t\t\t<Button size=\"sm\" variant={active ? \"default\" : \"outline\"} onclick={handleToggleActive}>\n\t\t\t\t{active ? \"Stop\" : \"Start\"} Listening\n\t\t\t</Button>\n\t\t\t<Button\n\t\t\t\tsize=\"sm\"\n\t\t\t\tvariant={processing ? \"default\" : \"outline\"}\n\t\t\t\tonclick={handleToggleProcessing}\n\t\t\t>\n\t\t\t\t{processing ? \"Stop\" : \"Start\"} Processing\n\t\t\t</Button>\n\t\t\t<Button\n\t\t\t\tsize=\"sm\"\n\t\t\t\tvariant=\"outline\"\n\t\t\t\tonclick={() => (mode = mode === \"static\" ? \"scrolling\" : \"static\")}\n\t\t\t>\n\t\t\t\t{mode === \"static\" ? \"Static\" : \"Scrolling\"}\n\t\t\t</Button>\n\t\t</Card.Footer>\n\t</Card.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/empty/empty-basic.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Empty from \"$lib/registry/ui/empty/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Example title=\"Basic\">\n\t<Empty.Root>\n\t\t<Empty.Header>\n\t\t\t<Empty.Title>No projects yet</Empty.Title>\n\t\t\t<Empty.Description>\n\t\t\t\tYou haven&apos;t created any projects yet. Get started by creating your first\n\t\t\t\tproject.\n\t\t\t</Empty.Description>\n\t\t</Empty.Header>\n\t\t<Empty.Content>\n\t\t\t<div class=\"flex gap-2\">\n\t\t\t\t<Button href=\"#/\">Create project</Button>\n\t\t\t\t<Button variant=\"outline\">Import project</Button>\n\t\t\t</div>\n\t\t\t<Button variant=\"link\" href=\"#/\" class=\"text-muted-foreground\">\n\t\t\t\tLearn more\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"ArrowUpRightIcon\"\n\t\t\t\t\ttabler=\"IconArrowUpRight\"\n\t\t\t\t\thugeicons=\"ArrowUpRight01Icon\"\n\t\t\t\t\tphosphor=\"ArrowUpRightIcon\"\n\t\t\t\t\tremixicon=\"RiArrowRightUpLine\"\n\t\t\t\t/>\n\t\t\t</Button>\n\t\t</Empty.Content>\n\t</Empty.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/empty/empty-in-card.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Empty from \"$lib/registry/ui/empty/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Example title=\"In Card\">\n\t<Empty.Root>\n\t\t<Empty.Header>\n\t\t\t<Empty.Media variant=\"icon\">\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"FolderIcon\"\n\t\t\t\t\ttabler=\"IconFolder\"\n\t\t\t\t\thugeicons=\"Folder01Icon\"\n\t\t\t\t\tphosphor=\"FolderIcon\"\n\t\t\t\t\tremixicon=\"RiFolderLine\"\n\t\t\t\t/>\n\t\t\t</Empty.Media>\n\t\t\t<Empty.Title>No projects yet</Empty.Title>\n\t\t\t<Empty.Description>\n\t\t\t\tYou haven&apos;t created any projects yet. Get started by creating your first\n\t\t\t\tproject.\n\t\t\t</Empty.Description>\n\t\t</Empty.Header>\n\t\t<Empty.Content>\n\t\t\t<div class=\"flex gap-2\">\n\t\t\t\t<Button href=\"#/\">Create project</Button>\n\t\t\t\t<Button variant=\"outline\">Import project</Button>\n\t\t\t</div>\n\t\t\t<Button variant=\"link\" href=\"#/\" class=\"text-muted-foreground\">\n\t\t\t\tLearn more\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"ArrowUpRightIcon\"\n\t\t\t\t\ttabler=\"IconArrowUpRight\"\n\t\t\t\t\thugeicons=\"ArrowUpRight01Icon\"\n\t\t\t\t\tphosphor=\"ArrowUpRightIcon\"\n\t\t\t\t\tremixicon=\"RiArrowRightUpLine\"\n\t\t\t\t/>\n\t\t\t</Button>\n\t\t</Empty.Content>\n\t</Empty.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/empty/empty-with-border.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Empty from \"$lib/registry/ui/empty/index.js\";\n\timport * as InputGroup from \"$lib/registry/ui/input-group/index.js\";\n\timport * as Kbd from \"$lib/registry/ui/kbd/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Example title=\"With Border\">\n\t<Empty.Root class=\"border\">\n\t\t<Empty.Header>\n\t\t\t<Empty.Title>404 - Not Found</Empty.Title>\n\t\t\t<Empty.Description>\n\t\t\t\tThe page you&apos;re looking for doesn&apos;t exist. Try searching for what you need\n\t\t\t\tbelow.\n\t\t\t</Empty.Description>\n\t\t</Empty.Header>\n\t\t<Empty.Content>\n\t\t\t<InputGroup.Root class=\"w-3/4\">\n\t\t\t\t<InputGroup.Input placeholder=\"Try searching for pages...\" />\n\t\t\t\t<InputGroup.Addon>\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"CircleDashedIcon\"\n\t\t\t\t\t\ttabler=\"IconCircleDashed\"\n\t\t\t\t\t\thugeicons=\"DashedLineCircleIcon\"\n\t\t\t\t\t\tphosphor=\"CircleDashedIcon\"\n\t\t\t\t\t\tremixicon=\"RiLoaderLine\"\n\t\t\t\t\t/>\n\t\t\t\t</InputGroup.Addon>\n\t\t\t\t<InputGroup.Addon align=\"inline-end\">\n\t\t\t\t\t<Kbd.Root>/</Kbd.Root>\n\t\t\t\t</InputGroup.Addon>\n\t\t\t</InputGroup.Root>\n\t\t\t<Empty.Description>\n\t\t\t\tNeed help? <a href=\"#/\">Contact support</a>\n\t\t\t</Empty.Description>\n\t\t</Empty.Content>\n\t</Empty.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/empty/empty-with-icon.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Empty from \"$lib/registry/ui/empty/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Example title=\"With Icon\">\n\t<Empty.Root class=\"border\">\n\t\t<Empty.Header>\n\t\t\t<Empty.Media variant=\"icon\">\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"FolderIcon\"\n\t\t\t\t\ttabler=\"IconFolder\"\n\t\t\t\t\thugeicons=\"Folder01Icon\"\n\t\t\t\t\tphosphor=\"FolderIcon\"\n\t\t\t\t\tremixicon=\"RiFolderLine\"\n\t\t\t\t/>\n\t\t\t</Empty.Media>\n\t\t\t<Empty.Title>Nothing to see here</Empty.Title>\n\t\t\t<Empty.Description>\n\t\t\t\tNo posts have been created yet. Get started by <a href=\"#/\"\n\t\t\t\t\t>creating your first post</a\n\t\t\t\t>.\n\t\t\t</Empty.Description>\n\t\t</Empty.Header>\n\t\t<Empty.Content>\n\t\t\t<Button variant=\"outline\">\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"PlusIcon\"\n\t\t\t\t\ttabler=\"IconPlus\"\n\t\t\t\t\thugeicons=\"PlusSignIcon\"\n\t\t\t\t\tphosphor=\"PlusIcon\"\n\t\t\t\t\tremixicon=\"RiAddLine\"\n\t\t\t\t\tdata-icon=\"inline-start\"\n\t\t\t\t/>\n\t\t\t\tNew Post\n\t\t\t</Button>\n\t\t</Empty.Content>\n\t</Empty.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/empty/empty-with-muted-background-alt.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Empty from \"$lib/registry/ui/empty/index.js\";\n\timport * as InputGroup from \"$lib/registry/ui/input-group/index.js\";\n\timport * as Kbd from \"$lib/registry/ui/kbd/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Example title=\"With Muted Background Alt\">\n\t<Empty.Root class=\"bg-muted/50\">\n\t\t<Empty.Header>\n\t\t\t<Empty.Title>404 - Not Found</Empty.Title>\n\t\t\t<Empty.Description>\n\t\t\t\tThe page you&apos;re looking for doesn&apos;t exist. Try searching for what you need\n\t\t\t\tbelow.\n\t\t\t</Empty.Description>\n\t\t</Empty.Header>\n\t\t<Empty.Content>\n\t\t\t<InputGroup.Root class=\"w-3/4\">\n\t\t\t\t<InputGroup.Input placeholder=\"Try searching for pages...\" />\n\t\t\t\t<InputGroup.Addon>\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"CircleDashedIcon\"\n\t\t\t\t\t\ttabler=\"IconCircleDashed\"\n\t\t\t\t\t\thugeicons=\"DashedLineCircleIcon\"\n\t\t\t\t\t\tphosphor=\"CircleDashedIcon\"\n\t\t\t\t\t\tremixicon=\"RiLoaderLine\"\n\t\t\t\t\t/>\n\t\t\t\t</InputGroup.Addon>\n\t\t\t\t<InputGroup.Addon align=\"inline-end\">\n\t\t\t\t\t<Kbd.Root>/</Kbd.Root>\n\t\t\t\t</InputGroup.Addon>\n\t\t\t</InputGroup.Root>\n\t\t\t<Empty.Description>\n\t\t\t\tNeed help? <a href=\"#/\">Contact support</a>\n\t\t\t</Empty.Description>\n\t\t</Empty.Content>\n\t</Empty.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/empty/empty-with-muted-background.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Empty from \"$lib/registry/ui/empty/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Example title=\"With Muted Background\">\n\t<Empty.Root class=\"bg-muted\">\n\t\t<Empty.Header>\n\t\t\t<Empty.Title>No results found</Empty.Title>\n\t\t\t<Empty.Description>\n\t\t\t\tNo results found for your search. Try adjusting your search terms.\n\t\t\t</Empty.Description>\n\t\t</Empty.Header>\n\t\t<Empty.Content>\n\t\t\t<Button>Try again</Button>\n\t\t\t<Button variant=\"link\" href=\"#/\" class=\"text-muted-foreground\">\n\t\t\t\tLearn more\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"ArrowUpRightIcon\"\n\t\t\t\t\ttabler=\"IconArrowUpRight\"\n\t\t\t\t\thugeicons=\"ArrowUpRight01Icon\"\n\t\t\t\t\tphosphor=\"ArrowUpRightIcon\"\n\t\t\t\t\tremixicon=\"RiArrowRightUpLine\"\n\t\t\t\t/>\n\t\t\t</Button>\n\t\t</Empty.Content>\n\t</Empty.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/empty/empty.svelte",
    "content": "<script lang=\"ts\">\n\timport ExampleWrapper from \"../../../../../routes/(app)/(layout)/(create)/components/example-wrapper.svelte\";\n\timport EmptyBasic from \"./empty-basic.svelte\";\n\timport EmptyWithMutedBackground from \"./empty-with-muted-background.svelte\";\n\timport EmptyWithBorder from \"./empty-with-border.svelte\";\n\timport EmptyWithIcon from \"./empty-with-icon.svelte\";\n\timport EmptyWithMutedBackgroundAlt from \"./empty-with-muted-background-alt.svelte\";\n\timport EmptyInCard from \"./empty-in-card.svelte\";\n</script>\n\n<ExampleWrapper>\n\t<EmptyBasic />\n\t<EmptyWithMutedBackground />\n\t<EmptyWithBorder />\n\t<EmptyWithIcon />\n\t<EmptyWithMutedBackgroundAlt />\n\t<EmptyInCard />\n</ExampleWrapper>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/field/field-checkbox-fields.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport { Checkbox } from \"$lib/registry/ui/checkbox/index.js\";\n</script>\n\n<Example title=\"Checkbox Fields\">\n\t<Field.Group>\n\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t<Checkbox id=\"checkbox-basic\" checked />\n\t\t\t<Field.Label for=\"checkbox-basic\" class=\"font-normal\">\n\t\t\t\tI agree to the terms and conditions\n\t\t\t</Field.Label>\n\t\t</Field.Field>\n\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t<Field.Label for=\"checkbox-right\">Accept terms and conditions</Field.Label>\n\t\t\t<Checkbox id=\"checkbox-right\" />\n\t\t</Field.Field>\n\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t<Checkbox id=\"checkbox-with-desc\" />\n\t\t\t<Field.Content>\n\t\t\t\t<Field.Label for=\"checkbox-with-desc\">Subscribe to newsletter</Field.Label>\n\t\t\t\t<Field.Description>\n\t\t\t\t\tReceive weekly updates about new features and promotions.\n\t\t\t\t</Field.Description>\n\t\t\t</Field.Content>\n\t\t</Field.Field>\n\t\t<Field.Label for=\"checkbox-with-title\">\n\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t<Checkbox id=\"checkbox-with-title\" />\n\t\t\t\t<Field.Content>\n\t\t\t\t\t<Field.Title>Enable Touch ID</Field.Title>\n\t\t\t\t\t<Field.Description\n\t\t\t\t\t\t>Enable Touch ID to quickly unlock your device.</Field.Description\n\t\t\t\t\t>\n\t\t\t\t</Field.Content>\n\t\t\t</Field.Field>\n\t\t</Field.Label>\n\t\t<Field.Set>\n\t\t\t<Field.Legend variant=\"label\">Preferences</Field.Legend>\n\t\t\t<Field.Description\n\t\t\t\t>Select all that apply to customize your experience.</Field.Description\n\t\t\t>\n\t\t\t<Field.Group class=\"gap-3\">\n\t\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t\t<Checkbox id=\"pref-dark\" />\n\t\t\t\t\t<Field.Label for=\"pref-dark\" class=\"font-normal\">Dark mode</Field.Label>\n\t\t\t\t</Field.Field>\n\t\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t\t<Checkbox id=\"pref-compact\" />\n\t\t\t\t\t<Field.Label for=\"pref-compact\" class=\"font-normal\">Compact view</Field.Label>\n\t\t\t\t</Field.Field>\n\t\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t\t<Checkbox id=\"pref-notifications\" />\n\t\t\t\t\t<Field.Label for=\"pref-notifications\" class=\"font-normal\">\n\t\t\t\t\t\tEnable notifications\n\t\t\t\t\t</Field.Label>\n\t\t\t\t</Field.Field>\n\t\t\t</Field.Group>\n\t\t</Field.Set>\n\t\t<Field.Field data-invalid orientation=\"horizontal\">\n\t\t\t<Checkbox id=\"checkbox-invalid\" aria-invalid />\n\t\t\t<Field.Label for=\"checkbox-invalid\" class=\"font-normal\">Invalid checkbox</Field.Label>\n\t\t</Field.Field>\n\t\t<Field.Field data-disabled orientation=\"horizontal\">\n\t\t\t<Checkbox id=\"checkbox-disabled-field\" disabled />\n\t\t\t<Field.Label for=\"checkbox-disabled-field\" class=\"font-normal\">\n\t\t\t\tDisabled checkbox\n\t\t\t</Field.Label>\n\t\t</Field.Field>\n\t</Field.Group>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/field/field-horizontal-fields.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport * as Input from \"$lib/registry/ui/input/index.js\";\n\timport * as Textarea from \"$lib/registry/ui/textarea/index.js\";\n\timport * as Select from \"$lib/registry/ui/select/index.js\";\n\timport * as NativeSelect from \"$lib/registry/ui/native-select/index.js\";\n\timport { Switch } from \"$lib/registry/ui/switch/index.js\";\n\timport { Slider } from \"$lib/registry/ui/slider/index.js\";\n\n\tconst basicItems = [\n\t\t{ label: \"Select a fruit\", value: undefined },\n\t\t{ label: \"Apple\", value: \"apple\" },\n\t\t{ label: \"Banana\", value: \"banana\" },\n\t\t{ label: \"Orange\", value: \"orange\" },\n\t];\n\n\tlet fruitValue = $state<string | undefined>(undefined);\n\tconst fruitLabel = $derived(\n\t\tbasicItems.find((item) => item.value === fruitValue)?.label ?? \"Select a fruit\"\n\t);\n</script>\n\n<Example title=\"Horizontal Fields\">\n\t<Field.Group class=\"**:data-[slot=field-content]:min-w-48\">\n\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t<Field.Content>\n\t\t\t\t<Field.Label for=\"horizontal-input\">Username</Field.Label>\n\t\t\t\t<Field.Description>Enter your preferred username.</Field.Description>\n\t\t\t</Field.Content>\n\t\t\t<Input.Root id=\"horizontal-input\" placeholder=\"johndoe\" />\n\t\t</Field.Field>\n\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t<Field.Content>\n\t\t\t\t<Field.Label for=\"horizontal-textarea\">Bio</Field.Label>\n\t\t\t\t<Field.Description>Write a short description about yourself.</Field.Description>\n\t\t\t</Field.Content>\n\t\t\t<Textarea.Root id=\"horizontal-textarea\" placeholder=\"Tell us about yourself...\" />\n\t\t</Field.Field>\n\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t<Field.Content>\n\t\t\t\t<Field.Label for=\"horizontal-switch\">Email Notifications</Field.Label>\n\t\t\t\t<Field.Description>Receive email updates about your account.</Field.Description>\n\t\t\t</Field.Content>\n\t\t\t<Switch id=\"horizontal-switch\" />\n\t\t</Field.Field>\n\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t<Field.Content>\n\t\t\t\t<Field.Label for=\"horizontal-select\">Favorite Fruit</Field.Label>\n\t\t\t\t<Field.Description>Choose your favorite fruit.</Field.Description>\n\t\t\t</Field.Content>\n\t\t\t<Select.Root type=\"single\" bind:value={fruitValue}>\n\t\t\t\t<Select.Trigger id=\"horizontal-select\">{fruitLabel}</Select.Trigger>\n\t\t\t\t<Select.Content>\n\t\t\t\t\t<Select.Group>\n\t\t\t\t\t\t{#each basicItems.filter((i) => i.value !== undefined) as item (item.value)}\n\t\t\t\t\t\t\t<Select.Item value={item.value!}>{item.label}</Select.Item>\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</Select.Group>\n\t\t\t\t</Select.Content>\n\t\t\t</Select.Root>\n\t\t</Field.Field>\n\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t<Field.Content>\n\t\t\t\t<Field.Label for=\"horizontal-native-select\">Country</Field.Label>\n\t\t\t\t<Field.Description>Select your country.</Field.Description>\n\t\t\t</Field.Content>\n\t\t\t<NativeSelect.Root id=\"horizontal-native-select\">\n\t\t\t\t<NativeSelect.Option value=\"\">Select a country</NativeSelect.Option>\n\t\t\t\t<NativeSelect.Option value=\"us\">United States</NativeSelect.Option>\n\t\t\t\t<NativeSelect.Option value=\"uk\">United Kingdom</NativeSelect.Option>\n\t\t\t\t<NativeSelect.Option value=\"ca\">Canada</NativeSelect.Option>\n\t\t\t</NativeSelect.Root>\n\t\t</Field.Field>\n\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t<Field.Content>\n\t\t\t\t<Field.Label for=\"horizontal-slider\">Volume</Field.Label>\n\t\t\t\t<Field.Description>Adjust the volume level.</Field.Description>\n\t\t\t</Field.Content>\n\t\t\t<Slider type=\"single\" id=\"horizontal-slider\" value={50} max={100} />\n\t\t</Field.Field>\n\t</Field.Group>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/field/field-input-fields.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport * as Input from \"$lib/registry/ui/input/index.js\";\n\timport { Badge } from \"$lib/registry/ui/badge/index.js\";\n</script>\n\n<Example title=\"Input Fields\">\n\t<Field.Group>\n\t\t<Field.Field>\n\t\t\t<Field.Label for=\"input-basic\">Basic Input</Field.Label>\n\t\t\t<Input.Root id=\"input-basic\" placeholder=\"Enter text\" />\n\t\t</Field.Field>\n\t\t<Field.Field>\n\t\t\t<Field.Label for=\"input-with-desc\">Input with Description</Field.Label>\n\t\t\t<Input.Root id=\"input-with-desc\" placeholder=\"Enter your username\" />\n\t\t\t<Field.Description>Choose a unique username for your account.</Field.Description>\n\t\t</Field.Field>\n\t\t<Field.Field>\n\t\t\t<Field.Label for=\"input-desc-first\">Email Address</Field.Label>\n\t\t\t<Field.Description>We'll never share your email with anyone.</Field.Description>\n\t\t\t<Input.Root id=\"input-desc-first\" type=\"email\" placeholder=\"email@example.com\" />\n\t\t</Field.Field>\n\t\t<Field.Field>\n\t\t\t<Field.Label for=\"input-required\">\n\t\t\t\tRequired Field <span class=\"text-destructive\">*</span>\n\t\t\t</Field.Label>\n\t\t\t<Input.Root id=\"input-required\" placeholder=\"This field is required\" required />\n\t\t\t<Field.Description>This field must be filled out.</Field.Description>\n\t\t</Field.Field>\n\t\t<Field.Field>\n\t\t\t<Field.Label for=\"input-disabled\">Disabled Input</Field.Label>\n\t\t\t<Input.Root id=\"input-disabled\" placeholder=\"Cannot edit\" disabled />\n\t\t\t<Field.Description>This field is currently disabled.</Field.Description>\n\t\t</Field.Field>\n\t\t<Field.Field>\n\t\t\t<Field.Label for=\"input-badge\">\n\t\t\t\tInput with Badge\n\t\t\t\t<Badge variant=\"secondary\" class=\"ml-auto\">Recommended</Badge>\n\t\t\t</Field.Label>\n\t\t\t<Input.Root id=\"input-badge\" placeholder=\"Enter value\" />\n\t\t</Field.Field>\n\t\t<Field.Field data-invalid>\n\t\t\t<Field.Label for=\"input-invalid\">Invalid Input</Field.Label>\n\t\t\t<Input.Root id=\"input-invalid\" placeholder=\"This field has an error\" aria-invalid />\n\t\t\t<Field.Description>This field contains validation errors.</Field.Description>\n\t\t</Field.Field>\n\t\t<Field.Field data-disabled>\n\t\t\t<Field.Label for=\"input-disabled-field\">Disabled Field</Field.Label>\n\t\t\t<Input.Root id=\"input-disabled-field\" placeholder=\"Cannot edit\" disabled />\n\t\t\t<Field.Description>This field is currently disabled.</Field.Description>\n\t\t</Field.Field>\n\t</Field.Group>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/field/field-input-otp-fields.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport * as InputOTP from \"$lib/registry/ui/input-otp/index.js\";\n\timport { REGEXP_ONLY_DIGITS } from \"bits-ui\";\n\n\tlet value = $state(\"\");\n\tlet pinValue = $state(\"\");\n</script>\n\n<Example title=\"OTP Input Fields\">\n\t<Field.Group>\n\t\t<Field.Field>\n\t\t\t<Field.Label for=\"otp-basic\">Verification Code</Field.Label>\n\t\t\t<InputOTP.Root id=\"otp-basic\" maxlength={6}>\n\t\t\t\t{#snippet children({ cells })}\n\t\t\t\t\t<InputOTP.Group>\n\t\t\t\t\t\t{#each cells as cell (cell)}\n\t\t\t\t\t\t\t<InputOTP.Slot {cell} />\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</InputOTP.Group>\n\t\t\t\t{/snippet}\n\t\t\t</InputOTP.Root>\n\t\t</Field.Field>\n\t\t<Field.Field>\n\t\t\t<Field.Label for=\"otp-with-desc\">Enter OTP</Field.Label>\n\t\t\t<InputOTP.Root id=\"otp-with-desc\" maxlength={6} bind:value>\n\t\t\t\t{#snippet children({ cells })}\n\t\t\t\t\t<InputOTP.Group>\n\t\t\t\t\t\t{#each cells as cell (cell)}\n\t\t\t\t\t\t\t<InputOTP.Slot {cell} />\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</InputOTP.Group>\n\t\t\t\t{/snippet}\n\t\t\t</InputOTP.Root>\n\t\t\t<Field.Description>Enter the 6-digit code sent to your email.</Field.Description>\n\t\t</Field.Field>\n\t\t<Field.Field>\n\t\t\t<Field.Label for=\"otp-separator\">Two-Factor Authentication</Field.Label>\n\t\t\t<InputOTP.Root id=\"otp-separator\" maxlength={6}>\n\t\t\t\t{#snippet children({ cells })}\n\t\t\t\t\t<InputOTP.Group>\n\t\t\t\t\t\t{#each cells.slice(0, 3) as cell (cell)}\n\t\t\t\t\t\t\t<InputOTP.Slot {cell} />\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</InputOTP.Group>\n\t\t\t\t\t<InputOTP.Separator />\n\t\t\t\t\t<InputOTP.Group>\n\t\t\t\t\t\t{#each cells.slice(3, 6) as cell (cell)}\n\t\t\t\t\t\t\t<InputOTP.Slot {cell} />\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</InputOTP.Group>\n\t\t\t\t{/snippet}\n\t\t\t</InputOTP.Root>\n\t\t\t<Field.Description>Enter the code from your authenticator app.</Field.Description>\n\t\t</Field.Field>\n\t\t<Field.Field>\n\t\t\t<Field.Label for=\"otp-pin\">PIN Code</Field.Label>\n\t\t\t<InputOTP.Root\n\t\t\t\tid=\"otp-pin\"\n\t\t\t\tmaxlength={4}\n\t\t\t\tpattern={REGEXP_ONLY_DIGITS}\n\t\t\t\tbind:value={pinValue}\n\t\t\t>\n\t\t\t\t{#snippet children({ cells })}\n\t\t\t\t\t<InputOTP.Group>\n\t\t\t\t\t\t{#each cells as cell (cell)}\n\t\t\t\t\t\t\t<InputOTP.Slot {cell} />\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</InputOTP.Group>\n\t\t\t\t{/snippet}\n\t\t\t</InputOTP.Root>\n\t\t\t<Field.Description>Enter your 4-digit PIN (numbers only).</Field.Description>\n\t\t</Field.Field>\n\t\t<Field.Field data-invalid>\n\t\t\t<Field.Label for=\"otp-invalid\">Invalid OTP</Field.Label>\n\t\t\t<InputOTP.Root id=\"otp-invalid\" maxlength={6}>\n\t\t\t\t{#snippet children({ cells })}\n\t\t\t\t\t<InputOTP.Group>\n\t\t\t\t\t\t{#each cells as cell (cell)}\n\t\t\t\t\t\t\t<InputOTP.Slot {cell} aria-invalid />\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</InputOTP.Group>\n\t\t\t\t{/snippet}\n\t\t\t</InputOTP.Root>\n\t\t\t<Field.Description>This OTP field contains validation errors.</Field.Description>\n\t\t</Field.Field>\n\t\t<Field.Field data-disabled>\n\t\t\t<Field.Label for=\"otp-disabled-field\">Disabled OTP</Field.Label>\n\t\t\t<InputOTP.Root id=\"otp-disabled-field\" maxlength={6} disabled>\n\t\t\t\t{#snippet children({ cells })}\n\t\t\t\t\t<InputOTP.Group>\n\t\t\t\t\t\t{#each cells as cell (cell)}\n\t\t\t\t\t\t\t<InputOTP.Slot {cell} />\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</InputOTP.Group>\n\t\t\t\t{/snippet}\n\t\t\t</InputOTP.Root>\n\t\t\t<Field.Description>This OTP field is currently disabled.</Field.Description>\n\t\t</Field.Field>\n\t</Field.Group>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/field/field-native-select-fields.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport * as NativeSelect from \"$lib/registry/ui/native-select/index.js\";\n</script>\n\n<Example title=\"Native Select Fields\">\n\t<Field.Group>\n\t\t<Field.Field>\n\t\t\t<Field.Label for=\"native-select-basic\">Basic Native Select</Field.Label>\n\t\t\t<NativeSelect.Root id=\"native-select-basic\">\n\t\t\t\t<NativeSelect.Option value=\"\">Choose an option</NativeSelect.Option>\n\t\t\t\t<NativeSelect.Option value=\"option1\">Option 1</NativeSelect.Option>\n\t\t\t\t<NativeSelect.Option value=\"option2\">Option 2</NativeSelect.Option>\n\t\t\t\t<NativeSelect.Option value=\"option3\">Option 3</NativeSelect.Option>\n\t\t\t</NativeSelect.Root>\n\t\t</Field.Field>\n\t\t<Field.Field>\n\t\t\t<Field.Label for=\"native-select-country\">Country</Field.Label>\n\t\t\t<NativeSelect.Root id=\"native-select-country\">\n\t\t\t\t<NativeSelect.Option value=\"\">Select your country</NativeSelect.Option>\n\t\t\t\t<NativeSelect.Option value=\"us\">United States</NativeSelect.Option>\n\t\t\t\t<NativeSelect.Option value=\"uk\">United Kingdom</NativeSelect.Option>\n\t\t\t\t<NativeSelect.Option value=\"ca\">Canada</NativeSelect.Option>\n\t\t\t</NativeSelect.Root>\n\t\t\t<Field.Description>Select the country where you currently reside.</Field.Description>\n\t\t</Field.Field>\n\t\t<Field.Field>\n\t\t\t<Field.Label for=\"native-select-timezone\">Timezone</Field.Label>\n\t\t\t<Field.Description\n\t\t\t\t>Choose your local timezone for accurate scheduling.</Field.Description\n\t\t\t>\n\t\t\t<NativeSelect.Root id=\"native-select-timezone\">\n\t\t\t\t<NativeSelect.Option value=\"\">Select timezone</NativeSelect.Option>\n\t\t\t\t<NativeSelect.Option value=\"utc\">UTC</NativeSelect.Option>\n\t\t\t\t<NativeSelect.Option value=\"est\">Eastern Time</NativeSelect.Option>\n\t\t\t\t<NativeSelect.Option value=\"pst\">Pacific Time</NativeSelect.Option>\n\t\t\t</NativeSelect.Root>\n\t\t</Field.Field>\n\t\t<Field.Field>\n\t\t\t<Field.Label for=\"native-select-grouped\">Grouped Options</Field.Label>\n\t\t\t<NativeSelect.Root id=\"native-select-grouped\">\n\t\t\t\t<NativeSelect.Option value=\"\">Select a region</NativeSelect.Option>\n\t\t\t\t<NativeSelect.OptGroup label=\"North America\">\n\t\t\t\t\t<NativeSelect.Option value=\"us\">United States</NativeSelect.Option>\n\t\t\t\t\t<NativeSelect.Option value=\"ca\">Canada</NativeSelect.Option>\n\t\t\t\t\t<NativeSelect.Option value=\"mx\">Mexico</NativeSelect.Option>\n\t\t\t\t</NativeSelect.OptGroup>\n\t\t\t\t<NativeSelect.OptGroup label=\"Europe\">\n\t\t\t\t\t<NativeSelect.Option value=\"uk\">United Kingdom</NativeSelect.Option>\n\t\t\t\t\t<NativeSelect.Option value=\"fr\">France</NativeSelect.Option>\n\t\t\t\t\t<NativeSelect.Option value=\"de\">Germany</NativeSelect.Option>\n\t\t\t\t</NativeSelect.OptGroup>\n\t\t\t</NativeSelect.Root>\n\t\t\t<Field.Description>Native select with grouped options using optgroup.</Field.Description\n\t\t\t>\n\t\t</Field.Field>\n\t\t<Field.Field data-invalid>\n\t\t\t<Field.Label for=\"native-select-invalid\">Invalid Native Select</Field.Label>\n\t\t\t<NativeSelect.Root id=\"native-select-invalid\" aria-invalid>\n\t\t\t\t<NativeSelect.Option value=\"\">This field has an error</NativeSelect.Option>\n\t\t\t\t<NativeSelect.Option value=\"option1\">Option 1</NativeSelect.Option>\n\t\t\t\t<NativeSelect.Option value=\"option2\">Option 2</NativeSelect.Option>\n\t\t\t\t<NativeSelect.Option value=\"option3\">Option 3</NativeSelect.Option>\n\t\t\t</NativeSelect.Root>\n\t\t\t<Field.Description>This field contains validation errors.</Field.Description>\n\t\t</Field.Field>\n\t\t<Field.Field data-disabled>\n\t\t\t<Field.Label for=\"native-select-disabled-field\">Disabled Field</Field.Label>\n\t\t\t<NativeSelect.Root id=\"native-select-disabled-field\" disabled>\n\t\t\t\t<NativeSelect.Option value=\"\">Cannot select</NativeSelect.Option>\n\t\t\t\t<NativeSelect.Option value=\"option1\">Option 1</NativeSelect.Option>\n\t\t\t\t<NativeSelect.Option value=\"option2\">Option 2</NativeSelect.Option>\n\t\t\t\t<NativeSelect.Option value=\"option3\">Option 3</NativeSelect.Option>\n\t\t\t</NativeSelect.Root>\n\t\t\t<Field.Description>This field is currently disabled.</Field.Description>\n\t\t</Field.Field>\n\t</Field.Group>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/field/field-radio-fields.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport * as RadioGroup from \"$lib/registry/ui/radio-group/index.js\";\n</script>\n\n<Example title=\"Radio Fields\">\n\t<Field.Group>\n\t\t<Field.Set>\n\t\t\t<Field.Legend variant=\"label\">Subscription Plan</Field.Legend>\n\t\t\t<RadioGroup.Root value=\"free\">\n\t\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t\t<RadioGroup.Item value=\"free\" id=\"radio-free\" />\n\t\t\t\t\t<Field.Label for=\"radio-free\" class=\"font-normal\">Free Plan</Field.Label>\n\t\t\t\t</Field.Field>\n\t\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t\t<RadioGroup.Item value=\"pro\" id=\"radio-pro\" />\n\t\t\t\t\t<Field.Label for=\"radio-pro\" class=\"font-normal\">Pro Plan</Field.Label>\n\t\t\t\t</Field.Field>\n\t\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t\t<RadioGroup.Item value=\"enterprise\" id=\"radio-enterprise\" />\n\t\t\t\t\t<Field.Label for=\"radio-enterprise\" class=\"font-normal\">Enterprise</Field.Label>\n\t\t\t\t</Field.Field>\n\t\t\t</RadioGroup.Root>\n\t\t</Field.Set>\n\t\t<Field.Set>\n\t\t\t<Field.Legend variant=\"label\">Battery Level</Field.Legend>\n\t\t\t<Field.Description>Choose your preferred battery level.</Field.Description>\n\t\t\t<RadioGroup.Root>\n\t\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t\t<RadioGroup.Item value=\"high\" id=\"battery-high\" />\n\t\t\t\t\t<Field.Label for=\"battery-high\">High</Field.Label>\n\t\t\t\t</Field.Field>\n\t\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t\t<RadioGroup.Item value=\"medium\" id=\"battery-medium\" />\n\t\t\t\t\t<Field.Label for=\"battery-medium\">Medium</Field.Label>\n\t\t\t\t</Field.Field>\n\t\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t\t<RadioGroup.Item value=\"low\" id=\"battery-low\" />\n\t\t\t\t\t<Field.Label for=\"battery-low\">Low</Field.Label>\n\t\t\t\t</Field.Field>\n\t\t\t</RadioGroup.Root>\n\t\t</Field.Set>\n\t\t<RadioGroup.Root class=\"gap-6\">\n\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t<RadioGroup.Item value=\"option1\" id=\"radio-content-1\" />\n\t\t\t\t<Field.Content>\n\t\t\t\t\t<Field.Label for=\"radio-content-1\">Enable Touch ID</Field.Label>\n\t\t\t\t\t<Field.Description\n\t\t\t\t\t\t>Enable Touch ID to quickly unlock your device.</Field.Description\n\t\t\t\t\t>\n\t\t\t\t</Field.Content>\n\t\t\t</Field.Field>\n\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t<RadioGroup.Item value=\"option2\" id=\"radio-content-2\" />\n\t\t\t\t<Field.Content>\n\t\t\t\t\t<Field.Label for=\"radio-content-2\">\n\t\t\t\t\t\tEnable Touch ID and Face ID to make it even faster to unlock your device.\n\t\t\t\t\t\tThis is a long label to test the layout.\n\t\t\t\t\t</Field.Label>\n\t\t\t\t\t<Field.Description\n\t\t\t\t\t\t>Enable Touch ID to quickly unlock your device.</Field.Description\n\t\t\t\t\t>\n\t\t\t\t</Field.Content>\n\t\t\t</Field.Field>\n\t\t</RadioGroup.Root>\n\t\t<RadioGroup.Root class=\"gap-3\">\n\t\t\t<Field.Label for=\"radio-title-1\">\n\t\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t\t<RadioGroup.Item value=\"title1\" id=\"radio-title-1\" />\n\t\t\t\t\t<Field.Content>\n\t\t\t\t\t\t<Field.Title>Enable Touch ID</Field.Title>\n\t\t\t\t\t\t<Field.Description\n\t\t\t\t\t\t\t>Enable Touch ID to quickly unlock your device.</Field.Description\n\t\t\t\t\t\t>\n\t\t\t\t\t</Field.Content>\n\t\t\t\t</Field.Field>\n\t\t\t</Field.Label>\n\t\t\t<Field.Label for=\"radio-title-2\">\n\t\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t\t<RadioGroup.Item value=\"title2\" id=\"radio-title-2\" />\n\t\t\t\t\t<Field.Content>\n\t\t\t\t\t\t<Field.Title>\n\t\t\t\t\t\t\tEnable Touch ID and Face ID to make it even faster to unlock your\n\t\t\t\t\t\t\tdevice. This is a long label to test the layout.\n\t\t\t\t\t\t</Field.Title>\n\t\t\t\t\t\t<Field.Description\n\t\t\t\t\t\t\t>Enable Touch ID to quickly unlock your device.</Field.Description\n\t\t\t\t\t\t>\n\t\t\t\t\t</Field.Content>\n\t\t\t\t</Field.Field>\n\t\t\t</Field.Label>\n\t\t</RadioGroup.Root>\n\t\t<Field.Set>\n\t\t\t<Field.Legend variant=\"label\">Invalid Radio Group</Field.Legend>\n\t\t\t<RadioGroup.Root>\n\t\t\t\t<Field.Field data-invalid orientation=\"horizontal\">\n\t\t\t\t\t<RadioGroup.Item value=\"invalid1\" id=\"radio-invalid-1\" aria-invalid />\n\t\t\t\t\t<Field.Label for=\"radio-invalid-1\">Invalid Option 1</Field.Label>\n\t\t\t\t</Field.Field>\n\t\t\t\t<Field.Field data-invalid orientation=\"horizontal\">\n\t\t\t\t\t<RadioGroup.Item value=\"invalid2\" id=\"radio-invalid-2\" aria-invalid />\n\t\t\t\t\t<Field.Label for=\"radio-invalid-2\">Invalid Option 2</Field.Label>\n\t\t\t\t</Field.Field>\n\t\t\t</RadioGroup.Root>\n\t\t</Field.Set>\n\t\t<Field.Set>\n\t\t\t<Field.Legend variant=\"label\">Disabled Radio Group</Field.Legend>\n\t\t\t<RadioGroup.Root disabled>\n\t\t\t\t<Field.Field data-disabled orientation=\"horizontal\">\n\t\t\t\t\t<RadioGroup.Item value=\"disabled1\" id=\"radio-disabled-1\" disabled />\n\t\t\t\t\t<Field.Label for=\"radio-disabled-1\">Disabled Option 1</Field.Label>\n\t\t\t\t</Field.Field>\n\t\t\t\t<Field.Field data-disabled orientation=\"horizontal\">\n\t\t\t\t\t<RadioGroup.Item value=\"disabled2\" id=\"radio-disabled-2\" disabled />\n\t\t\t\t\t<Field.Label for=\"radio-disabled-2\">Disabled Option 2</Field.Label>\n\t\t\t\t</Field.Field>\n\t\t\t</RadioGroup.Root>\n\t\t</Field.Set>\n\t</Field.Group>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/field/field-select-fields.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport * as Select from \"$lib/registry/ui/select/index.js\";\n\n\tconst basicItems = [\n\t\t{ label: \"Option 1\", value: \"option1\" },\n\t\t{ label: \"Option 2\", value: \"option2\" },\n\t\t{ label: \"Option 3\", value: \"option3\" },\n\t];\n\tconst countryItems = [\n\t\t{ label: \"United States\", value: \"us\" },\n\t\t{ label: \"United Kingdom\", value: \"uk\" },\n\t\t{ label: \"Canada\", value: \"ca\" },\n\t];\n\tconst timezoneItems = [\n\t\t{ label: \"UTC\", value: \"utc\" },\n\t\t{ label: \"Eastern Time\", value: \"est\" },\n\t\t{ label: \"Pacific Time\", value: \"pst\" },\n\t];\n\tconst invalidItems = [\n\t\t{ label: \"Option 1\", value: \"option1\" },\n\t\t{ label: \"Option 2\", value: \"option2\" },\n\t\t{ label: \"Option 3\", value: \"option3\" },\n\t];\n\tconst disabledItems = [\n\t\t{ label: \"Option 1\", value: \"option1\" },\n\t\t{ label: \"Option 2\", value: \"option2\" },\n\t\t{ label: \"Option 3\", value: \"option3\" },\n\t];\n\n\tlet basicValue = $state<string | undefined>(undefined);\n\tlet countryValue = $state<string | undefined>(undefined);\n\tlet timezoneValue = $state<string | undefined>(undefined);\n\tlet invalidValue = $state<string | undefined>(undefined);\n\tlet disabledValue = $state<string | undefined>(undefined);\n\n\tconst basicLabel = $derived(\n\t\tbasicItems.find((item) => item.value === basicValue)?.label ?? \"Choose an option\"\n\t);\n\tconst countryLabel = $derived(\n\t\tcountryItems.find((item) => item.value === countryValue)?.label ?? \"Select your country\"\n\t);\n\tconst timezoneLabel = $derived(\n\t\ttimezoneItems.find((item) => item.value === timezoneValue)?.label ?? \"Select timezone\"\n\t);\n\tconst invalidLabel = $derived(\n\t\tinvalidItems.find((item) => item.value === invalidValue)?.label ?? \"This field has an error\"\n\t);\n\tconst disabledLabel = $derived(\n\t\tdisabledItems.find((item) => item.value === disabledValue)?.label ?? \"Cannot select\"\n\t);\n</script>\n\n<Example title=\"Select Fields\">\n\t<Field.Group>\n\t\t<Field.Field>\n\t\t\t<Field.Label for=\"select-basic\">Basic Select</Field.Label>\n\t\t\t<Select.Root type=\"single\" bind:value={basicValue}>\n\t\t\t\t<Select.Trigger id=\"select-basic\">{basicLabel}</Select.Trigger>\n\t\t\t\t<Select.Content>\n\t\t\t\t\t<Select.Group>\n\t\t\t\t\t\t{#each basicItems as item (item.value)}\n\t\t\t\t\t\t\t<Select.Item value={item.value}>{item.label}</Select.Item>\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</Select.Group>\n\t\t\t\t</Select.Content>\n\t\t\t</Select.Root>\n\t\t</Field.Field>\n\t\t<Field.Field>\n\t\t\t<Field.Label for=\"select-country\">Country</Field.Label>\n\t\t\t<Select.Root type=\"single\" bind:value={countryValue}>\n\t\t\t\t<Select.Trigger id=\"select-country\">{countryLabel}</Select.Trigger>\n\t\t\t\t<Select.Content>\n\t\t\t\t\t<Select.Group>\n\t\t\t\t\t\t{#each countryItems as item (item.value)}\n\t\t\t\t\t\t\t<Select.Item value={item.value}>{item.label}</Select.Item>\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</Select.Group>\n\t\t\t\t</Select.Content>\n\t\t\t</Select.Root>\n\t\t\t<Field.Description>Select the country where you currently reside.</Field.Description>\n\t\t</Field.Field>\n\t\t<Field.Field>\n\t\t\t<Field.Label for=\"select-timezone\">Timezone</Field.Label>\n\t\t\t<Field.Description\n\t\t\t\t>Choose your local timezone for accurate scheduling.</Field.Description\n\t\t\t>\n\t\t\t<Select.Root type=\"single\" bind:value={timezoneValue}>\n\t\t\t\t<Select.Trigger id=\"select-timezone\">{timezoneLabel}</Select.Trigger>\n\t\t\t\t<Select.Content>\n\t\t\t\t\t<Select.Group>\n\t\t\t\t\t\t{#each timezoneItems as item (item.value)}\n\t\t\t\t\t\t\t<Select.Item value={item.value}>{item.label}</Select.Item>\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</Select.Group>\n\t\t\t\t</Select.Content>\n\t\t\t</Select.Root>\n\t\t</Field.Field>\n\t\t<Field.Field data-invalid>\n\t\t\t<Field.Label for=\"select-invalid\">Invalid Select</Field.Label>\n\t\t\t<Select.Root type=\"single\" bind:value={invalidValue}>\n\t\t\t\t<Select.Trigger id=\"select-invalid\" aria-invalid>{invalidLabel}</Select.Trigger>\n\t\t\t\t<Select.Content>\n\t\t\t\t\t<Select.Group>\n\t\t\t\t\t\t{#each invalidItems as item (item.value)}\n\t\t\t\t\t\t\t<Select.Item value={item.value}>{item.label}</Select.Item>\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</Select.Group>\n\t\t\t\t</Select.Content>\n\t\t\t</Select.Root>\n\t\t\t<Field.Description>This field contains validation errors.</Field.Description>\n\t\t</Field.Field>\n\t\t<Field.Field data-disabled>\n\t\t\t<Field.Label for=\"select-disabled-field\">Disabled Field</Field.Label>\n\t\t\t<Select.Root type=\"single\" bind:value={disabledValue} disabled>\n\t\t\t\t<Select.Trigger id=\"select-disabled-field\">{disabledLabel}</Select.Trigger>\n\t\t\t\t<Select.Content>\n\t\t\t\t\t<Select.Group>\n\t\t\t\t\t\t{#each disabledItems as item (item.value)}\n\t\t\t\t\t\t\t<Select.Item value={item.value}>{item.label}</Select.Item>\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</Select.Group>\n\t\t\t\t</Select.Content>\n\t\t\t</Select.Root>\n\t\t\t<Field.Description>This field is currently disabled.</Field.Description>\n\t\t</Field.Field>\n\t</Field.Group>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/field/field-slider-fields.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport { Slider } from \"$lib/registry/ui/slider/index.js\";\n\n\tlet brightness = $state(75);\n\tlet temperature = $state([0.3, 0.7]);\n\tlet priceRange = $state([25, 75]);\n\tlet colorBalance = $state([10, 20, 70]);\n</script>\n\n<Example title=\"Slider Fields\">\n\t<Field.Group>\n\t\t<Field.Field>\n\t\t\t<Field.Label for=\"slider-volume\">Volume</Field.Label>\n\t\t\t<Slider type=\"single\" id=\"slider-volume\" value={50} max={100} step={1} />\n\t\t</Field.Field>\n\t\t<Field.Field>\n\t\t\t<Field.Label for=\"slider-brightness\">Screen Brightness</Field.Label>\n\t\t\t<Slider\n\t\t\t\ttype=\"single\"\n\t\t\t\tid=\"slider-brightness\"\n\t\t\t\tbind:value={brightness}\n\t\t\t\tmax={100}\n\t\t\t\tstep={5}\n\t\t\t/>\n\t\t\t<Field.Description>Current brightness: {brightness}%</Field.Description>\n\t\t</Field.Field>\n\t\t<Field.Field>\n\t\t\t<Field.Label for=\"slider-quality\">Video Quality</Field.Label>\n\t\t\t<Field.Description>Higher quality uses more bandwidth.</Field.Description>\n\t\t\t<Slider type=\"single\" id=\"slider-quality\" value={720} max={1080} min={360} step={360} />\n\t\t</Field.Field>\n\t\t<Field.Field>\n\t\t\t<Field.Label for=\"slider-temperature\">Temperature Range</Field.Label>\n\t\t\t<Slider\n\t\t\t\ttype=\"multiple\"\n\t\t\t\tid=\"slider-temperature\"\n\t\t\t\tbind:value={temperature}\n\t\t\t\tmin={0}\n\t\t\t\tmax={1}\n\t\t\t\tstep={0.1}\n\t\t\t/>\n\t\t\t<Field.Description>\n\t\t\t\tRange: {temperature[0].toFixed(1)} - {temperature[1].toFixed(1)}\n\t\t\t</Field.Description>\n\t\t</Field.Field>\n\t\t<Field.Field>\n\t\t\t<Field.Label for=\"slider-price-range\">Price Range</Field.Label>\n\t\t\t<Slider\n\t\t\t\ttype=\"multiple\"\n\t\t\t\tid=\"slider-price-range\"\n\t\t\t\tbind:value={priceRange}\n\t\t\t\tmax={100}\n\t\t\t\tstep={5}\n\t\t\t/>\n\t\t\t<Field.Description>${priceRange[0]} - ${priceRange[1]}</Field.Description>\n\t\t</Field.Field>\n\t\t<Field.Field>\n\t\t\t<Field.Label for=\"slider-color-balance\">Color Balance</Field.Label>\n\t\t\t<Slider\n\t\t\t\ttype=\"multiple\"\n\t\t\t\tid=\"slider-color-balance\"\n\t\t\t\tbind:value={colorBalance}\n\t\t\t\tmax={100}\n\t\t\t\tstep={10}\n\t\t\t/>\n\t\t\t<Field.Description>\n\t\t\t\tRed: {colorBalance[0]}%, Green: {colorBalance[1]}%, Blue: {colorBalance[2]}%\n\t\t\t</Field.Description>\n\t\t</Field.Field>\n\t\t<Field.Field data-invalid>\n\t\t\t<Field.Label for=\"slider-invalid\">Invalid Slider</Field.Label>\n\t\t\t<Slider type=\"single\" id=\"slider-invalid\" value={40} max={100} aria-invalid />\n\t\t\t<Field.Description>This slider has validation errors.</Field.Description>\n\t\t</Field.Field>\n\t\t<Field.Field data-disabled>\n\t\t\t<Field.Label for=\"slider-disabled-field\">Disabled Slider</Field.Label>\n\t\t\t<Slider type=\"single\" id=\"slider-disabled-field\" value={50} max={100} disabled />\n\t\t\t<Field.Description>This slider is currently disabled.</Field.Description>\n\t\t</Field.Field>\n\t</Field.Group>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/field/field-switch-fields.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport { Switch } from \"$lib/registry/ui/switch/index.js\";\n</script>\n\n<Example title=\"Switch Fields\">\n\t<Field.Group>\n\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t<Field.Content>\n\t\t\t\t<Field.Label for=\"switch-airplane\">Airplane Mode</Field.Label>\n\t\t\t\t<Field.Description\n\t\t\t\t\t>Turn on airplane mode to disable all connections.</Field.Description\n\t\t\t\t>\n\t\t\t</Field.Content>\n\t\t\t<Switch id=\"switch-airplane\" />\n\t\t</Field.Field>\n\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t<Field.Label for=\"switch-dark\">Dark Mode</Field.Label>\n\t\t\t<Switch id=\"switch-dark\" />\n\t\t</Field.Field>\n\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t<Switch id=\"switch-marketing\" />\n\t\t\t<Field.Content>\n\t\t\t\t<Field.Label for=\"switch-marketing\">Marketing Emails</Field.Label>\n\t\t\t\t<Field.Description>\n\t\t\t\t\tReceive emails about new products, features, and more.\n\t\t\t\t</Field.Description>\n\t\t\t</Field.Content>\n\t\t</Field.Field>\n\t\t<Field.Field>\n\t\t\t<Field.Label>Privacy Settings</Field.Label>\n\t\t\t<Field.Description>Manage your privacy preferences.</Field.Description>\n\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t<Switch id=\"switch-profile\" checked />\n\t\t\t\t<Field.Content>\n\t\t\t\t\t<Field.Label for=\"switch-profile\" class=\"font-normal\">\n\t\t\t\t\t\tMake profile visible to others\n\t\t\t\t\t</Field.Label>\n\t\t\t\t</Field.Content>\n\t\t\t</Field.Field>\n\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t<Switch id=\"switch-email\" />\n\t\t\t\t<Field.Content>\n\t\t\t\t\t<Field.Label for=\"switch-email\" class=\"font-normal\"\n\t\t\t\t\t\t>Show email on profile</Field.Label\n\t\t\t\t\t>\n\t\t\t\t</Field.Content>\n\t\t\t</Field.Field>\n\t\t</Field.Field>\n\t\t<Field.Field data-invalid orientation=\"horizontal\">\n\t\t\t<Field.Content>\n\t\t\t\t<Field.Label for=\"switch-invalid\">Invalid Switch</Field.Label>\n\t\t\t\t<Field.Description>This switch has validation errors.</Field.Description>\n\t\t\t</Field.Content>\n\t\t\t<Switch id=\"switch-invalid\" aria-invalid />\n\t\t</Field.Field>\n\t\t<Field.Field data-disabled orientation=\"horizontal\">\n\t\t\t<Field.Content>\n\t\t\t\t<Field.Label for=\"switch-disabled-field\">Disabled Switch</Field.Label>\n\t\t\t\t<Field.Description>This switch is currently disabled.</Field.Description>\n\t\t\t</Field.Content>\n\t\t\t<Switch id=\"switch-disabled-field\" disabled />\n\t\t</Field.Field>\n\t</Field.Group>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/field/field-textarea-fields.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport * as Textarea from \"$lib/registry/ui/textarea/index.js\";\n</script>\n\n<Example title=\"Textarea Fields\">\n\t<Field.Group>\n\t\t<Field.Field>\n\t\t\t<Field.Label for=\"textarea-basic\">Basic Textarea</Field.Label>\n\t\t\t<Textarea.Root id=\"textarea-basic\" placeholder=\"Enter your message\" />\n\t\t</Field.Field>\n\t\t<Field.Field>\n\t\t\t<Field.Label for=\"textarea-comments\">Comments</Field.Label>\n\t\t\t<Textarea.Root\n\t\t\t\tid=\"textarea-comments\"\n\t\t\t\tplaceholder=\"Share your thoughts...\"\n\t\t\t\tclass=\"min-h-[100px]\"\n\t\t\t/>\n\t\t\t<Field.Description>Maximum 500 characters allowed.</Field.Description>\n\t\t</Field.Field>\n\t\t<Field.Field>\n\t\t\t<Field.Label for=\"textarea-bio\">Bio</Field.Label>\n\t\t\t<Field.Description>Tell us about yourself in a few sentences.</Field.Description>\n\t\t\t<Textarea.Root id=\"textarea-bio\" placeholder=\"I am a...\" class=\"min-h-[120px]\" />\n\t\t</Field.Field>\n\t\t<Field.Field>\n\t\t\t<Field.Label for=\"textarea-desc-after\">Message</Field.Label>\n\t\t\t<Textarea.Root id=\"textarea-desc-after\" placeholder=\"Enter your message\" />\n\t\t\t<Field.Description>\n\t\t\t\tEnter your message so it is long enough to test the layout.\n\t\t\t</Field.Description>\n\t\t</Field.Field>\n\t\t<Field.Field data-invalid>\n\t\t\t<Field.Label for=\"textarea-invalid\">Invalid Textarea</Field.Label>\n\t\t\t<Textarea.Root\n\t\t\t\tid=\"textarea-invalid\"\n\t\t\t\tplaceholder=\"This field has an error\"\n\t\t\t\taria-invalid\n\t\t\t/>\n\t\t\t<Field.Description>This field contains validation errors.</Field.Description>\n\t\t</Field.Field>\n\t\t<Field.Field data-disabled>\n\t\t\t<Field.Label for=\"textarea-disabled-field\">Disabled Field</Field.Label>\n\t\t\t<Textarea.Root id=\"textarea-disabled-field\" placeholder=\"Cannot edit\" disabled />\n\t\t\t<Field.Description>This field is currently disabled.</Field.Description>\n\t\t</Field.Field>\n\t</Field.Group>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/field/field.svelte",
    "content": "<script lang=\"ts\">\n\timport ExampleWrapper from \"../../../../../routes/(app)/(layout)/(create)/components/example-wrapper.svelte\";\n\timport FieldInputFields from \"./field-input-fields.svelte\";\n\timport FieldTextareaFields from \"./field-textarea-fields.svelte\";\n\timport FieldSelectFields from \"./field-select-fields.svelte\";\n\timport FieldCheckboxFields from \"./field-checkbox-fields.svelte\";\n\timport FieldRadioFields from \"./field-radio-fields.svelte\";\n\timport FieldSwitchFields from \"./field-switch-fields.svelte\";\n\timport FieldSliderFields from \"./field-slider-fields.svelte\";\n\timport FieldNativeSelectFields from \"./field-native-select-fields.svelte\";\n\timport FieldInputOTPFields from \"./field-input-otp-fields.svelte\";\n\timport FieldHorizontalFields from \"./field-horizontal-fields.svelte\";\n</script>\n\n<ExampleWrapper>\n\t<FieldInputFields />\n\t<FieldTextareaFields />\n\t<FieldSelectFields />\n\t<FieldCheckboxFields />\n\t<FieldRadioFields />\n\t<FieldSwitchFields />\n\t<FieldSliderFields />\n\t<FieldNativeSelectFields />\n\t<FieldInputOTPFields />\n\t<FieldHorizontalFields />\n</ExampleWrapper>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/github/assign-issue.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Tooltip from \"$lib/registry/ui/tooltip/index.js\";\n\timport * as Popover from \"$lib/registry/ui/popover/index.js\";\n\timport * as Command from \"$lib/registry/ui/command/index.js\";\n\timport * as Avatar from \"$lib/registry/ui/avatar/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\n\tconst users = [\n\t\t\"shadcn\",\n\t\t\"maxleiter\",\n\t\t\"evilrabbit\",\n\t\t\"pranathip\",\n\t\t\"jorgezreik\",\n\t\t\"shuding\",\n\t\t\"rauchg\",\n\t];\n\n\tlet open = $state(false);\n\tlet selectedUsers = $state<string[]>([users[0]]);\n\n\tfunction toggleUser(username: string) {\n\t\tif (selectedUsers.includes(username)) {\n\t\t\tselectedUsers = selectedUsers.filter((u) => u !== username);\n\t\t} else {\n\t\t\tselectedUsers = [...selectedUsers, username];\n\t\t}\n\t}\n\n\tfunction removeUser(username: string, event: MouseEvent) {\n\t\tevent.stopPropagation();\n\t\tselectedUsers = selectedUsers.filter((u) => u !== username);\n\t}\n</script>\n\n<Example title=\"User Select\" class=\"items-center justify-center\">\n\t<Card.Root class=\"w-full max-w-sm\" size=\"sm\">\n\t\t<Card.Header class=\"border-b\">\n\t\t\t<Card.Title class=\"text-sm\">Assign Issue</Card.Title>\n\t\t\t<Card.Description class=\"text-sm\">\n\t\t\t\tSelect users to assign to this issue.\n\t\t\t</Card.Description>\n\t\t\t<Card.Action>\n\t\t\t\t<Tooltip.Root>\n\t\t\t\t\t<Tooltip.Trigger>\n\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t<Button variant=\"outline\" size=\"icon-xs\" {...props}>\n\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\tlucide=\"PlusIcon\"\n\t\t\t\t\t\t\t\t\ttabler=\"IconPlus\"\n\t\t\t\t\t\t\t\t\thugeicons=\"PlusSignIcon\"\n\t\t\t\t\t\t\t\t\tphosphor=\"PlusIcon\"\n\t\t\t\t\t\t\t\t\tremixicon=\"RiAddLine\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t</Tooltip.Trigger>\n\t\t\t\t\t<Tooltip.Content>Add user</Tooltip.Content>\n\t\t\t\t</Tooltip.Root>\n\t\t\t</Card.Action>\n\t\t</Card.Header>\n\t\t<Card.Content>\n\t\t\t<Popover.Root bind:open>\n\t\t\t\t<Popover.Trigger>\n\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t{...props}\n\t\t\t\t\t\t\tclass=\"bg-input/20 dark:bg-input/30 border-input focus-within:border-ring focus-within:ring-ring/30 flex min-h-7 cursor-pointer flex-wrap items-center gap-1 rounded-md border bg-clip-padding px-1 py-0.5 text-xs/relaxed transition-colors focus-within:ring-2\"\n\t\t\t\t\t\t\trole=\"button\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{#each selectedUsers as username (username)}\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclass=\"bg-muted-foreground/10 text-foreground flex h-[calc(--spacing(4.75))] w-fit items-center justify-center gap-1 rounded-[calc(var(--radius-sm)-2px)] px-1.5 text-xs/relaxed font-medium whitespace-nowrap\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<Avatar.Root class=\"size-4\">\n\t\t\t\t\t\t\t\t\t\t<Avatar.Image\n\t\t\t\t\t\t\t\t\t\t\tsrc={`https://github.com/${username}.png`}\n\t\t\t\t\t\t\t\t\t\t\talt={username}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t<Avatar.Fallback>{username.charAt(0)}</Avatar.Fallback>\n\t\t\t\t\t\t\t\t\t</Avatar.Root>\n\t\t\t\t\t\t\t\t\t{username}\n\t\t\t\t\t\t\t\t\t<button\n\t\t\t\t\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\t\t\t\t\tclass=\"-ml-1 opacity-50 hover:opacity-100\"\n\t\t\t\t\t\t\t\t\t\tonclick={(e) => removeUser(username, e)}\n\t\t\t\t\t\t\t\t\t\taria-label={`Remove ${username}`}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\t\tlucide=\"XIcon\"\n\t\t\t\t\t\t\t\t\t\t\ttabler=\"IconX\"\n\t\t\t\t\t\t\t\t\t\t\thugeicons=\"Cancel01Icon\"\n\t\t\t\t\t\t\t\t\t\t\tphosphor=\"XIcon\"\n\t\t\t\t\t\t\t\t\t\t\tremixicon=\"RiCloseLine\"\n\t\t\t\t\t\t\t\t\t\t\tclass=\"size-3\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</button>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t<input\n\t\t\t\t\t\t\t\ttype=\"text\"\n\t\t\t\t\t\t\t\tplaceholder={selectedUsers.length > 0\n\t\t\t\t\t\t\t\t\t? undefined\n\t\t\t\t\t\t\t\t\t: \"Select a item...\"}\n\t\t\t\t\t\t\t\tclass=\"min-w-[120px] flex-1 border-none bg-transparent outline-none\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t{/snippet}\n\t\t\t\t</Popover.Trigger>\n\t\t\t\t<Popover.Content class=\"w-[var(--bits-popover-trigger-width)] p-0\">\n\t\t\t\t\t<Command.Root>\n\t\t\t\t\t\t<Command.Input placeholder=\"Search users...\" />\n\t\t\t\t\t\t<Command.List>\n\t\t\t\t\t\t\t<Command.Empty>No users found.</Command.Empty>\n\t\t\t\t\t\t\t<Command.Group>\n\t\t\t\t\t\t\t\t{#each users as username (username)}\n\t\t\t\t\t\t\t\t\t<Command.Item\n\t\t\t\t\t\t\t\t\t\tvalue={username}\n\t\t\t\t\t\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t\t\t\t\t\ttoggleUser(username);\n\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\tdata-checked={selectedUsers.includes(username)}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<Avatar.Root class=\"size-5\">\n\t\t\t\t\t\t\t\t\t\t\t<Avatar.Image\n\t\t\t\t\t\t\t\t\t\t\t\tsrc={`https://github.com/${username}.png`}\n\t\t\t\t\t\t\t\t\t\t\t\talt={username}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t<Avatar.Fallback>{username.charAt(0)}</Avatar.Fallback>\n\t\t\t\t\t\t\t\t\t\t</Avatar.Root>\n\t\t\t\t\t\t\t\t\t\t{username}\n\t\t\t\t\t\t\t\t\t</Command.Item>\n\t\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t</Command.Group>\n\t\t\t\t\t\t</Command.List>\n\t\t\t\t\t</Command.Root>\n\t\t\t\t</Popover.Content>\n\t\t\t</Popover.Root>\n\t\t</Card.Content>\n\t</Card.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/github/codespaces-card.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Tabs from \"$lib/registry/ui/tabs/index.js\";\n\timport * as Item from \"$lib/registry/ui/item/index.js\";\n\timport * as Tooltip from \"$lib/registry/ui/tooltip/index.js\";\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\timport * as Empty from \"$lib/registry/ui/empty/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport * as InputGroup from \"$lib/registry/ui/input-group/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport { Separator } from \"$lib/registry/ui/separator/index.js\";\n\timport { Spinner } from \"$lib/registry/ui/spinner/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\n\tlet isCreatingCodespace = $state(false);\n</script>\n\n<Example title=\"Codespaces\" class=\"min-h-[550px] lg:p-12\">\n\t<Card.Root class=\"mx-auto w-full max-w-sm\" size=\"sm\">\n\t\t<Card.Content>\n\t\t\t<Tabs.Root value=\"codespaces\">\n\t\t\t\t<Tabs.List class=\"w-full\">\n\t\t\t\t\t<Tabs.Trigger value=\"codespaces\">Codespaces</Tabs.Trigger>\n\t\t\t\t\t<Tabs.Trigger value=\"local\">Local</Tabs.Trigger>\n\t\t\t\t</Tabs.List>\n\t\t\t\t<Tabs.Content value=\"codespaces\">\n\t\t\t\t\t<Item.Root size=\"sm\" class=\"px-1 pt-2\">\n\t\t\t\t\t\t<Item.Content>\n\t\t\t\t\t\t\t<Item.Title>Codespaces</Item.Title>\n\t\t\t\t\t\t\t<Item.Description>Your workspaces in the cloud</Item.Description>\n\t\t\t\t\t\t</Item.Content>\n\t\t\t\t\t\t<Item.Actions>\n\t\t\t\t\t\t\t<Tooltip.Root>\n\t\t\t\t\t\t\t\t<Tooltip.Trigger>\n\t\t\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t\t\t<Button variant=\"ghost\" size=\"icon-sm\" {...props}>\n\t\t\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\t\t\tlucide=\"PlusIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\ttabler=\"IconPlus\"\n\t\t\t\t\t\t\t\t\t\t\t\thugeicons=\"PlusSignIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\tphosphor=\"PlusIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\tremixicon=\"RiAddLine\"\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t\t\t</Tooltip.Trigger>\n\t\t\t\t\t\t\t\t<Tooltip.Content side=\"bottom\">\n\t\t\t\t\t\t\t\t\tCreate a codespace on main\n\t\t\t\t\t\t\t\t</Tooltip.Content>\n\t\t\t\t\t\t\t</Tooltip.Root>\n\t\t\t\t\t\t\t<DropdownMenu.Root>\n\t\t\t\t\t\t\t\t<Tooltip.Root>\n\t\t\t\t\t\t\t\t\t<Tooltip.Trigger>\n\t\t\t\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t\t\t\t<DropdownMenu.Trigger {...props}>\n\t\t\t\t\t\t\t\t\t\t\t\t{#snippet child({ props: triggerProps })}\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"icon-sm\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{...triggerProps}\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tlucide=\"MoreHorizontalIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttabler=\"IconDots\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\thugeicons=\"MoreHorizontalCircle01Icon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tphosphor=\"DotsThreeOutlineIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tremixicon=\"RiMoreLine\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t\t\t\t\t\t</DropdownMenu.Trigger>\n\t\t\t\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t\t\t\t</Tooltip.Trigger>\n\t\t\t\t\t\t\t\t\t<Tooltip.Content side=\"bottom\">\n\t\t\t\t\t\t\t\t\t\tCodespace repository configuration\n\t\t\t\t\t\t\t\t\t</Tooltip.Content>\n\t\t\t\t\t\t\t\t</Tooltip.Root>\n\t\t\t\t\t\t\t\t<DropdownMenu.Content align=\"end\" class=\"w-56\">\n\t\t\t\t\t\t\t\t\t<DropdownMenu.Group>\n\t\t\t\t\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\t\t\tlucide=\"PlusIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\ttabler=\"IconPlus\"\n\t\t\t\t\t\t\t\t\t\t\t\thugeicons=\"PlusSignIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\tphosphor=\"PlusIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\tremixicon=\"RiAddLine\"\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\tNew with options...\n\t\t\t\t\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\t\t\tlucide=\"ContainerIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\ttabler=\"IconBox\"\n\t\t\t\t\t\t\t\t\t\t\t\thugeicons=\"CubeIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\tphosphor=\"CubeIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\tremixicon=\"RiBox1Line\"\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\tConfigure dev container\n\t\t\t\t\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\t\t\tlucide=\"ZapIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\ttabler=\"IconBolt\"\n\t\t\t\t\t\t\t\t\t\t\t\thugeicons=\"ZapIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\tphosphor=\"LightningIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\tremixicon=\"RiFlashlightLine\"\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\tSet up prebuilds\n\t\t\t\t\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t\t\t\t</DropdownMenu.Group>\n\t\t\t\t\t\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t\t\t\t\t\t<DropdownMenu.Group>\n\t\t\t\t\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\t\t\tlucide=\"ServerIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\ttabler=\"IconServer\"\n\t\t\t\t\t\t\t\t\t\t\t\thugeicons=\"ServerStackIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\tphosphor=\"HardDrivesIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\tremixicon=\"RiServerLine\"\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\tManage codespaces\n\t\t\t\t\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\t\t\tlucide=\"ShareIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\ttabler=\"IconShare2\"\n\t\t\t\t\t\t\t\t\t\t\t\thugeicons=\"Share03Icon\"\n\t\t\t\t\t\t\t\t\t\t\t\tphosphor=\"ShareIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\tremixicon=\"RiShareLine\"\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\tShare deep link\n\t\t\t\t\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\t\t\tlucide=\"InfoIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\ttabler=\"IconInfoCircle\"\n\t\t\t\t\t\t\t\t\t\t\t\thugeicons=\"AlertCircleIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\tphosphor=\"InfoIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\tremixicon=\"RiInformationLine\"\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\tWhat are codespaces?\n\t\t\t\t\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t\t\t\t</DropdownMenu.Group>\n\t\t\t\t\t\t\t\t</DropdownMenu.Content>\n\t\t\t\t\t\t\t</DropdownMenu.Root>\n\t\t\t\t\t\t</Item.Actions>\n\t\t\t\t\t</Item.Root>\n\t\t\t\t\t<Separator class=\"-mx-2 my-2 w-auto!\" />\n\t\t\t\t\t<Empty.Root class=\"p-4\">\n\t\t\t\t\t\t<Empty.Header>\n\t\t\t\t\t\t\t<Empty.Media variant=\"icon\">\n\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\tlucide=\"ServerIcon\"\n\t\t\t\t\t\t\t\t\ttabler=\"IconServer\"\n\t\t\t\t\t\t\t\t\thugeicons=\"ServerStackIcon\"\n\t\t\t\t\t\t\t\t\tphosphor=\"HardDrivesIcon\"\n\t\t\t\t\t\t\t\t\tremixicon=\"RiServerLine\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</Empty.Media>\n\t\t\t\t\t\t\t<Empty.Title>No codespaces</Empty.Title>\n\t\t\t\t\t\t\t<Empty.Description>\n\t\t\t\t\t\t\t\tYou don&apos;t have any codespaces with this repository checked out\n\t\t\t\t\t\t\t</Empty.Description>\n\t\t\t\t\t\t</Empty.Header>\n\t\t\t\t\t\t<Empty.Content>\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\tonclick={() => {\n\t\t\t\t\t\t\t\t\tisCreatingCodespace = true;\n\t\t\t\t\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\t\t\t\t\tisCreatingCodespace = false;\n\t\t\t\t\t\t\t\t\t}, 2000);\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tdisabled={isCreatingCodespace}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{#if isCreatingCodespace}\n\t\t\t\t\t\t\t\t\t<Spinner data-icon=\"inline-start\" />\n\t\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\t\tCreate Codespace\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t<a\n\t\t\t\t\t\t\t\thref=\"#learn-more\"\n\t\t\t\t\t\t\t\tclass=\"text-muted-foreground text-xs underline underline-offset-4\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tLearn more about codespaces\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t</Empty.Content>\n\t\t\t\t\t</Empty.Root>\n\t\t\t\t\t<Separator class=\"-mx-2 my-2 w-auto!\" />\n\t\t\t\t\t<div class=\"text-muted-foreground p-1.5 text-xs\">\n\t\t\t\t\t\tCodespace usage for this repository is paid for by\n\t\t\t\t\t\t<span class=\"font-medium\">shadcn</span>.\n\t\t\t\t\t</div>\n\t\t\t\t</Tabs.Content>\n\t\t\t\t<Tabs.Content value=\"local\">\n\t\t\t\t\t<Item.Root size=\"sm\" class=\"hidden p-0\">\n\t\t\t\t\t\t<Item.Content>\n\t\t\t\t\t\t\t<Item.Title class=\"gap-2\">\n\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\tlucide=\"TerminalIcon\"\n\t\t\t\t\t\t\t\t\ttabler=\"IconTerminal\"\n\t\t\t\t\t\t\t\t\thugeicons=\"ComputerTerminal01Icon\"\n\t\t\t\t\t\t\t\t\tphosphor=\"TerminalIcon\"\n\t\t\t\t\t\t\t\t\tremixicon=\"RiTerminalBoxLine\"\n\t\t\t\t\t\t\t\t\tclass=\"size-4\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\tClone\n\t\t\t\t\t\t\t</Item.Title>\n\t\t\t\t\t\t</Item.Content>\n\t\t\t\t\t\t<Item.Actions>\n\t\t\t\t\t\t\t<Tooltip.Root>\n\t\t\t\t\t\t\t\t<Tooltip.Trigger>\n\t\t\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t\t\t<Button variant=\"ghost\" size=\"icon\" {...props}>\n\t\t\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\t\t\tlucide=\"InfoIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\ttabler=\"IconInfoCircle\"\n\t\t\t\t\t\t\t\t\t\t\t\thugeicons=\"AlertCircleIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\tphosphor=\"InfoIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\tremixicon=\"RiInformationLine\"\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t\t\t</Tooltip.Trigger>\n\t\t\t\t\t\t\t\t<Tooltip.Content side=\"left\">\n\t\t\t\t\t\t\t\t\tWhich remote URL should I use?\n\t\t\t\t\t\t\t\t</Tooltip.Content>\n\t\t\t\t\t\t\t</Tooltip.Root>\n\t\t\t\t\t\t</Item.Actions>\n\t\t\t\t\t</Item.Root>\n\t\t\t\t\t<Tabs.Root value=\"https\">\n\t\t\t\t\t\t<Tabs.List\n\t\t\t\t\t\t\tvariant=\"line\"\n\t\t\t\t\t\t\tclass=\"w-full justify-start border-b *:[button]:flex-0\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Tabs.Trigger value=\"https\">HTTPS</Tabs.Trigger>\n\t\t\t\t\t\t\t<Tabs.Trigger value=\"ssh\">SSH</Tabs.Trigger>\n\t\t\t\t\t\t\t<Tabs.Trigger value=\"cli\">GitHub CLI</Tabs.Trigger>\n\t\t\t\t\t\t</Tabs.List>\n\t\t\t\t\t\t<div class=\"bg-muted/30 rounded-md border p-2\">\n\t\t\t\t\t\t\t<Tabs.Content value=\"https\">\n\t\t\t\t\t\t\t\t<Field.Field class=\"gap-2\">\n\t\t\t\t\t\t\t\t\t<Field.Label for=\"https-url\" class=\"sr-only\">\n\t\t\t\t\t\t\t\t\t\tHTTPS URL\n\t\t\t\t\t\t\t\t\t</Field.Label>\n\t\t\t\t\t\t\t\t\t<InputGroup.Root>\n\t\t\t\t\t\t\t\t\t\t<InputGroup.Addon align=\"inline-end\">\n\t\t\t\t\t\t\t\t\t\t\t<InputGroup.Button variant=\"ghost\" size=\"icon-xs\">\n\t\t\t\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\t\t\t\tlucide=\"CopyIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\ttabler=\"IconCopy\"\n\t\t\t\t\t\t\t\t\t\t\t\t\thugeicons=\"Copy01Icon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tphosphor=\"CopyIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tremixicon=\"RiFileCopyLine\"\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t</InputGroup.Button>\n\t\t\t\t\t\t\t\t\t\t</InputGroup.Addon>\n\t\t\t\t\t\t\t\t\t\t<InputGroup.Input\n\t\t\t\t\t\t\t\t\t\t\tid=\"https-url\"\n\t\t\t\t\t\t\t\t\t\t\tvalue=\"https://github.com/shadcn-ui/ui.git\"\n\t\t\t\t\t\t\t\t\t\t\treadonly\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</InputGroup.Root>\n\t\t\t\t\t\t\t\t\t<Field.Description>Clone using the web URL.</Field.Description>\n\t\t\t\t\t\t\t\t</Field.Field>\n\t\t\t\t\t\t\t</Tabs.Content>\n\t\t\t\t\t\t\t<Tabs.Content value=\"ssh\">\n\t\t\t\t\t\t\t\t<Field.Field class=\"gap-2\">\n\t\t\t\t\t\t\t\t\t<Field.Label for=\"ssh-url\" class=\"sr-only\">SSH URL</Field.Label>\n\t\t\t\t\t\t\t\t\t<InputGroup.Root>\n\t\t\t\t\t\t\t\t\t\t<InputGroup.Addon align=\"inline-end\">\n\t\t\t\t\t\t\t\t\t\t\t<InputGroup.Button variant=\"ghost\" size=\"icon-xs\">\n\t\t\t\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\t\t\t\tlucide=\"CopyIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\ttabler=\"IconCopy\"\n\t\t\t\t\t\t\t\t\t\t\t\t\thugeicons=\"Copy01Icon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tphosphor=\"CopyIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tremixicon=\"RiFileCopyLine\"\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t</InputGroup.Button>\n\t\t\t\t\t\t\t\t\t\t</InputGroup.Addon>\n\t\t\t\t\t\t\t\t\t\t<InputGroup.Input\n\t\t\t\t\t\t\t\t\t\t\tid=\"ssh-url\"\n\t\t\t\t\t\t\t\t\t\t\tvalue=\"git@github.com:shadcn-ui/ui.git\"\n\t\t\t\t\t\t\t\t\t\t\treadonly\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</InputGroup.Root>\n\t\t\t\t\t\t\t\t\t<Field.Description>\n\t\t\t\t\t\t\t\t\t\tUse a password-protected SSH key.\n\t\t\t\t\t\t\t\t\t</Field.Description>\n\t\t\t\t\t\t\t\t</Field.Field>\n\t\t\t\t\t\t\t</Tabs.Content>\n\t\t\t\t\t\t\t<Tabs.Content value=\"cli\">\n\t\t\t\t\t\t\t\t<Field.Field class=\"gap-2\">\n\t\t\t\t\t\t\t\t\t<Field.Label for=\"cli-command\" class=\"sr-only\">\n\t\t\t\t\t\t\t\t\t\tCLI Command\n\t\t\t\t\t\t\t\t\t</Field.Label>\n\t\t\t\t\t\t\t\t\t<InputGroup.Root>\n\t\t\t\t\t\t\t\t\t\t<InputGroup.Addon align=\"inline-end\">\n\t\t\t\t\t\t\t\t\t\t\t<InputGroup.Button variant=\"ghost\" size=\"icon-xs\">\n\t\t\t\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\t\t\t\tlucide=\"CopyIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\ttabler=\"IconCopy\"\n\t\t\t\t\t\t\t\t\t\t\t\t\thugeicons=\"Copy01Icon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tphosphor=\"CopyIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tremixicon=\"RiFileCopyLine\"\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t</InputGroup.Button>\n\t\t\t\t\t\t\t\t\t\t</InputGroup.Addon>\n\t\t\t\t\t\t\t\t\t\t<InputGroup.Input\n\t\t\t\t\t\t\t\t\t\t\tid=\"cli-command\"\n\t\t\t\t\t\t\t\t\t\t\tvalue=\"gh repo clone shadcn-ui/ui\"\n\t\t\t\t\t\t\t\t\t\t\treadonly\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</InputGroup.Root>\n\t\t\t\t\t\t\t\t\t<Field.Description>\n\t\t\t\t\t\t\t\t\t\tWork fast with our official CLI.\n\t\t\t\t\t\t\t\t\t\t<a href=\"#learn-more\">Learn more</a>\n\t\t\t\t\t\t\t\t\t</Field.Description>\n\t\t\t\t\t\t\t\t</Field.Field>\n\t\t\t\t\t\t\t</Tabs.Content>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</Tabs.Root>\n\t\t\t\t\t<Separator class=\"-mx-2 my-2 w-auto!\" />\n\t\t\t\t\t<div class=\"flex flex-col\">\n\t\t\t\t\t\t<Button variant=\"ghost\" size=\"sm\" class=\"justify-start gap-1.5\">\n\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\tlucide=\"MonitorIcon\"\n\t\t\t\t\t\t\t\ttabler=\"IconDeviceDesktop\"\n\t\t\t\t\t\t\t\thugeicons=\"ComputerIcon\"\n\t\t\t\t\t\t\t\tphosphor=\"MonitorIcon\"\n\t\t\t\t\t\t\t\tremixicon=\"RiComputerLine\"\n\t\t\t\t\t\t\t\tdata-icon=\"inline-start\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\tOpen with GitHub Desktop\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t<Button variant=\"ghost\" size=\"sm\" class=\"justify-start gap-1.5\">\n\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\tlucide=\"DownloadIcon\"\n\t\t\t\t\t\t\t\ttabler=\"IconDownload\"\n\t\t\t\t\t\t\t\thugeicons=\"DownloadIcon\"\n\t\t\t\t\t\t\t\tphosphor=\"DownloadIcon\"\n\t\t\t\t\t\t\t\tremixicon=\"RiDownloadLine\"\n\t\t\t\t\t\t\t\tdata-icon=\"inline-start\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\tDownload ZIP\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t</div>\n\t\t\t\t</Tabs.Content>\n\t\t\t</Tabs.Root>\n\t\t</Card.Content>\n\t</Card.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/github/contributions-activity.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport { Checkbox } from \"$lib/registry/ui/checkbox/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n</script>\n\n<Example title=\"Contributions Activity\" class=\"justify-center\">\n\t<Card.Root class=\"mx-auto w-full max-w-md\">\n\t\t<Card.Header>\n\t\t\t<Card.Title>Contributions & Activity</Card.Title>\n\t\t\t<Card.Description>Manage your contributions and activity visibility.</Card.Description>\n\t\t</Card.Header>\n\t\t<Card.Content>\n\t\t\t<form id=\"contributions-activity\">\n\t\t\t\t<Field.Group>\n\t\t\t\t\t<Field.Set>\n\t\t\t\t\t\t<Field.Legend class=\"sr-only\">Contributions & activity</Field.Legend>\n\t\t\t\t\t\t<Field.Group class=\"gap-3\">\n\t\t\t\t\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t\t\t\t\t<Checkbox id=\"private-profile\" />\n\t\t\t\t\t\t\t\t<Field.Content>\n\t\t\t\t\t\t\t\t\t<Field.Label for=\"private-profile\" class=\"font-normal\">\n\t\t\t\t\t\t\t\t\t\tMake profile private and hide activity\n\t\t\t\t\t\t\t\t\t</Field.Label>\n\t\t\t\t\t\t\t\t\t<Field.Description>\n\t\t\t\t\t\t\t\t\t\tEnabling this will hide your contributions and activity from\n\t\t\t\t\t\t\t\t\t\tyour GitHub profile and from social features like followers,\n\t\t\t\t\t\t\t\t\t\tstars, feeds, leaderboards and releases.\n\t\t\t\t\t\t\t\t\t</Field.Description>\n\t\t\t\t\t\t\t\t</Field.Content>\n\t\t\t\t\t\t\t</Field.Field>\n\t\t\t\t\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t\t\t\t\t<Checkbox id=\"private-contributions\" checked />\n\t\t\t\t\t\t\t\t<Field.Content>\n\t\t\t\t\t\t\t\t\t<Field.Label for=\"private-contributions\" class=\"font-normal\">\n\t\t\t\t\t\t\t\t\t\tInclude private contributions on my profile\n\t\t\t\t\t\t\t\t\t</Field.Label>\n\t\t\t\t\t\t\t\t\t<Field.Description>\n\t\t\t\t\t\t\t\t\t\tYour contribution graph, achievements, and activity overview\n\t\t\t\t\t\t\t\t\t\twill show your private contributions without revealing any\n\t\t\t\t\t\t\t\t\t\trepository or organization information.\n\t\t\t\t\t\t\t\t\t\t<a href=\"#read-more\">Read more</a>.\n\t\t\t\t\t\t\t\t\t</Field.Description>\n\t\t\t\t\t\t\t\t</Field.Content>\n\t\t\t\t\t\t\t</Field.Field>\n\t\t\t\t\t\t</Field.Group>\n\t\t\t\t\t</Field.Set>\n\t\t\t\t</Field.Group>\n\t\t\t</form>\n\t\t</Card.Content>\n\t\t<Card.Footer>\n\t\t\t<Button form=\"contributions-activity\">Save Changes</Button>\n\t\t</Card.Footer>\n\t</Card.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/github/contributors.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Avatar from \"$lib/registry/ui/avatar/index.js\";\n\timport { Badge } from \"$lib/registry/ui/badge/index.js\";\n\n\tconst usernames = [\n\t\t\"shadcn\",\n\t\t\"vercel\",\n\t\t\"nextjs\",\n\t\t\"tailwindlabs\",\n\t\t\"typescript-lang\",\n\t\t\"eslint\",\n\t\t\"prettier\",\n\t\t\"babel\",\n\t\t\"webpack\",\n\t\t\"rollup\",\n\t\t\"parcel\",\n\t\t\"vite\",\n\t\t\"react\",\n\t\t\"vue\",\n\t\t\"angular\",\n\t\t\"solid\",\n\t];\n</script>\n\n<Example title=\"Contributors\" class=\"items-center lg:p-16\">\n\t<Card.Root class=\"max-w-sm\">\n\t\t<Card.Header>\n\t\t\t<Card.Title>\n\t\t\t\tContributors <Badge variant=\"secondary\">312</Badge>\n\t\t\t</Card.Title>\n\t\t</Card.Header>\n\t\t<Card.Content>\n\t\t\t<div class=\"flex flex-wrap gap-2\">\n\t\t\t\t{#each usernames as username (username)}\n\t\t\t\t\t<Avatar.Root>\n\t\t\t\t\t\t<Avatar.Image src={`https://github.com/${username}.png`} alt={username} />\n\t\t\t\t\t\t<Avatar.Fallback>{username.charAt(0)}</Avatar.Fallback>\n\t\t\t\t\t</Avatar.Root>\n\t\t\t\t{/each}\n\t\t\t</div>\n\t\t</Card.Content>\n\t\t<Card.Footer>\n\t\t\t<a href=\"#/\" class=\"text-sm underline underline-offset-4\"> + 810 contributors </a>\n\t\t</Card.Footer>\n\t</Card.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/github/github.svelte",
    "content": "<script lang=\"ts\">\n\timport ExampleWrapper from \"../../../../../routes/(app)/(layout)/(create)/components/example-wrapper.svelte\";\n\timport CodespacesCard from \"./codespaces-card.svelte\";\n\timport AssignIssue from \"./assign-issue.svelte\";\n\timport Navbar from \"./navbar.svelte\";\n\timport RepositoryToolbar from \"./repository-toolbar.svelte\";\n\timport Profile from \"./profile.svelte\";\n\timport ContributionsActivity from \"./contributions-activity.svelte\";\n\timport Contributors from \"./contributors.svelte\";\n</script>\n\n<ExampleWrapper>\n\t<CodespacesCard />\n\t<AssignIssue />\n\t<Navbar />\n\t<RepositoryToolbar />\n\t<Profile />\n\t<ContributionsActivity />\n\t<Contributors />\n</ExampleWrapper>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/github/navbar.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Drawer from \"$lib/registry/ui/drawer/index.js\";\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\timport * as Item from \"$lib/registry/ui/item/index.js\";\n\timport * as Avatar from \"$lib/registry/ui/avatar/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Example title=\"Account Menu\">\n\t<header class=\"flex h-14 w-full items-center gap-2\">\n\t\t<Drawer.Root direction=\"left\">\n\t\t\t<Drawer.Trigger>\n\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t<Button variant=\"outline\" size=\"icon\" {...props}>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"MenuIcon\"\n\t\t\t\t\t\t\thugeicons=\"Menu09Icon\"\n\t\t\t\t\t\t\ttabler=\"IconMenu\"\n\t\t\t\t\t\t\tphosphor=\"ListIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiMenuLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<span class=\"sr-only\">Open menu</span>\n\t\t\t\t\t</Button>\n\t\t\t\t{/snippet}\n\t\t\t</Drawer.Trigger>\n\t\t\t<Drawer.Content class=\"max-w-72\">\n\t\t\t\t<Drawer.Header class=\"flex flex-row items-center justify-between px-5 pb-0\">\n\t\t\t\t\t<Drawer.Title>Menu</Drawer.Title>\n\t\t\t\t\t<Drawer.Close>\n\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t<Button variant=\"ghost\" size=\"icon-sm\" {...props}>\n\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\tlucide=\"XIcon\"\n\t\t\t\t\t\t\t\t\ttabler=\"IconX\"\n\t\t\t\t\t\t\t\t\thugeicons=\"Cancel01Icon\"\n\t\t\t\t\t\t\t\t\tphosphor=\"XIcon\"\n\t\t\t\t\t\t\t\t\tremixicon=\"RiCloseLine\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<span class=\"sr-only\">Close</span>\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t</Drawer.Close>\n\t\t\t\t</Drawer.Header>\n\t\t\t\t<div class=\"p-2\">\n\t\t\t\t\t<Item.Group class=\"gap-px\">\n\t\t\t\t\t\t<Item.Root size=\"xs\">\n\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t<a href=\"#/\" {...props}>\n\t\t\t\t\t\t\t\t\t<Item.Media variant=\"icon\">\n\t\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\t\tlucide=\"HomeIcon\"\n\t\t\t\t\t\t\t\t\t\t\ttabler=\"IconHome\"\n\t\t\t\t\t\t\t\t\t\t\thugeicons=\"HomeIcon\"\n\t\t\t\t\t\t\t\t\t\t\tphosphor=\"HouseIcon\"\n\t\t\t\t\t\t\t\t\t\t\tremixicon=\"RiHomeLine\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</Item.Media>\n\t\t\t\t\t\t\t\t\t<Item.Content>\n\t\t\t\t\t\t\t\t\t\t<Item.Title>Home</Item.Title>\n\t\t\t\t\t\t\t\t\t</Item.Content>\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t</Item.Root>\n\t\t\t\t\t\t<Item.Root size=\"xs\">\n\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t<a href=\"#/\" {...props}>\n\t\t\t\t\t\t\t\t\t<Item.Media variant=\"icon\">\n\t\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\t\tlucide=\"CircleIcon\"\n\t\t\t\t\t\t\t\t\t\t\ttabler=\"IconCircle\"\n\t\t\t\t\t\t\t\t\t\t\thugeicons=\"CircleIcon\"\n\t\t\t\t\t\t\t\t\t\t\tphosphor=\"CircleIcon\"\n\t\t\t\t\t\t\t\t\t\t\tremixicon=\"RiCircleLine\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</Item.Media>\n\t\t\t\t\t\t\t\t\t<Item.Content>\n\t\t\t\t\t\t\t\t\t\t<Item.Title>Issues</Item.Title>\n\t\t\t\t\t\t\t\t\t</Item.Content>\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t</Item.Root>\n\t\t\t\t\t\t<Item.Root size=\"xs\">\n\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t<a href=\"#/\" {...props}>\n\t\t\t\t\t\t\t\t\t<Item.Media variant=\"icon\">\n\t\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\t\tlucide=\"GitBranchIcon\"\n\t\t\t\t\t\t\t\t\t\t\ttabler=\"IconGitBranch\"\n\t\t\t\t\t\t\t\t\t\t\thugeicons=\"GitBranchIcon\"\n\t\t\t\t\t\t\t\t\t\t\tphosphor=\"GitBranchIcon\"\n\t\t\t\t\t\t\t\t\t\t\tremixicon=\"RiGitBranchLine\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</Item.Media>\n\t\t\t\t\t\t\t\t\t<Item.Content>\n\t\t\t\t\t\t\t\t\t\t<Item.Title>Pull requests</Item.Title>\n\t\t\t\t\t\t\t\t\t</Item.Content>\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t</Item.Root>\n\t\t\t\t\t\t<Item.Root size=\"xs\">\n\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t<a href=\"#/\" {...props}>\n\t\t\t\t\t\t\t\t\t<Item.Media variant=\"icon\">\n\t\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\t\tlucide=\"LayoutGridIcon\"\n\t\t\t\t\t\t\t\t\t\t\ttabler=\"IconLayoutGrid\"\n\t\t\t\t\t\t\t\t\t\t\thugeicons=\"GridIcon\"\n\t\t\t\t\t\t\t\t\t\t\tphosphor=\"GridFourIcon\"\n\t\t\t\t\t\t\t\t\t\t\tremixicon=\"RiGridLine\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</Item.Media>\n\t\t\t\t\t\t\t\t\t<Item.Content>\n\t\t\t\t\t\t\t\t\t\t<Item.Title>Projects</Item.Title>\n\t\t\t\t\t\t\t\t\t</Item.Content>\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t</Item.Root>\n\t\t\t\t\t\t<Item.Root size=\"xs\">\n\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t<a href=\"#/\" {...props}>\n\t\t\t\t\t\t\t\t\t<Item.Media variant=\"icon\">\n\t\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\t\tlucide=\"MailIcon\"\n\t\t\t\t\t\t\t\t\t\t\ttabler=\"IconMail\"\n\t\t\t\t\t\t\t\t\t\t\thugeicons=\"MailIcon\"\n\t\t\t\t\t\t\t\t\t\t\tphosphor=\"EnvelopeIcon\"\n\t\t\t\t\t\t\t\t\t\t\tremixicon=\"RiMailLine\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</Item.Media>\n\t\t\t\t\t\t\t\t\t<Item.Content>\n\t\t\t\t\t\t\t\t\t\t<Item.Title>Discussions</Item.Title>\n\t\t\t\t\t\t\t\t\t</Item.Content>\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t</Item.Root>\n\t\t\t\t\t\t<Item.Root size=\"xs\">\n\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t<a href=\"#/\" {...props}>\n\t\t\t\t\t\t\t\t\t<Item.Media variant=\"icon\">\n\t\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\t\tlucide=\"ServerIcon\"\n\t\t\t\t\t\t\t\t\t\t\ttabler=\"IconServer\"\n\t\t\t\t\t\t\t\t\t\t\thugeicons=\"ServerStackIcon\"\n\t\t\t\t\t\t\t\t\t\t\tphosphor=\"HardDrivesIcon\"\n\t\t\t\t\t\t\t\t\t\t\tremixicon=\"RiServerLine\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</Item.Media>\n\t\t\t\t\t\t\t\t\t<Item.Content>\n\t\t\t\t\t\t\t\t\t\t<Item.Title>Codespaces</Item.Title>\n\t\t\t\t\t\t\t\t\t</Item.Content>\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t</Item.Root>\n\t\t\t\t\t\t<Item.Root size=\"xs\">\n\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t<a href=\"#/\" {...props}>\n\t\t\t\t\t\t\t\t\t<Item.Media variant=\"icon\">\n\t\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\t\tlucide=\"BotIcon\"\n\t\t\t\t\t\t\t\t\t\t\ttabler=\"IconRobot\"\n\t\t\t\t\t\t\t\t\t\t\thugeicons=\"RoboticIcon\"\n\t\t\t\t\t\t\t\t\t\t\tphosphor=\"RobotIcon\"\n\t\t\t\t\t\t\t\t\t\t\tremixicon=\"RiRobotLine\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</Item.Media>\n\t\t\t\t\t\t\t\t\t<Item.Content>\n\t\t\t\t\t\t\t\t\t\t<Item.Title>Copilot</Item.Title>\n\t\t\t\t\t\t\t\t\t</Item.Content>\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t</Item.Root>\n\t\t\t\t\t\t<Item.Root size=\"xs\">\n\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t<a href=\"#/\" {...props}>\n\t\t\t\t\t\t\t\t\t<Item.Media variant=\"icon\">\n\t\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\t\tlucide=\"SparklesIcon\"\n\t\t\t\t\t\t\t\t\t\t\ttabler=\"IconSparkles\"\n\t\t\t\t\t\t\t\t\t\t\thugeicons=\"SparklesIcon\"\n\t\t\t\t\t\t\t\t\t\t\tphosphor=\"SparkleIcon\"\n\t\t\t\t\t\t\t\t\t\t\tremixicon=\"RiSparklingLine\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</Item.Media>\n\t\t\t\t\t\t\t\t\t<Item.Content>\n\t\t\t\t\t\t\t\t\t\t<Item.Title>Spark</Item.Title>\n\t\t\t\t\t\t\t\t\t</Item.Content>\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t</Item.Root>\n\t\t\t\t\t\t<Item.Separator />\n\t\t\t\t\t\t<Item.Root size=\"xs\">\n\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t<a href=\"#/\" {...props}>\n\t\t\t\t\t\t\t\t\t<Item.Media variant=\"icon\">\n\t\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\t\tlucide=\"SearchIcon\"\n\t\t\t\t\t\t\t\t\t\t\ttabler=\"IconSearch\"\n\t\t\t\t\t\t\t\t\t\t\thugeicons=\"SearchIcon\"\n\t\t\t\t\t\t\t\t\t\t\tphosphor=\"MagnifyingGlassIcon\"\n\t\t\t\t\t\t\t\t\t\t\tremixicon=\"RiSearchLine\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</Item.Media>\n\t\t\t\t\t\t\t\t\t<Item.Content>\n\t\t\t\t\t\t\t\t\t\t<Item.Title>Explore</Item.Title>\n\t\t\t\t\t\t\t\t\t</Item.Content>\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t</Item.Root>\n\t\t\t\t\t\t<Item.Root size=\"xs\">\n\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t<a href=\"#/\" {...props}>\n\t\t\t\t\t\t\t\t\t<Item.Media variant=\"icon\">\n\t\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\t\tlucide=\"ShoppingBagIcon\"\n\t\t\t\t\t\t\t\t\t\t\ttabler=\"IconShoppingBag\"\n\t\t\t\t\t\t\t\t\t\t\thugeicons=\"ShoppingBasket01Icon\"\n\t\t\t\t\t\t\t\t\t\t\tphosphor=\"BagIcon\"\n\t\t\t\t\t\t\t\t\t\t\tremixicon=\"RiShoppingBagLine\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</Item.Media>\n\t\t\t\t\t\t\t\t\t<Item.Content>\n\t\t\t\t\t\t\t\t\t\t<Item.Title>Marketplace</Item.Title>\n\t\t\t\t\t\t\t\t\t</Item.Content>\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t</Item.Root>\n\t\t\t\t\t\t<Item.Root size=\"xs\">\n\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t<a href=\"#/\" {...props}>\n\t\t\t\t\t\t\t\t\t<Item.Media variant=\"icon\">\n\t\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\t\tlucide=\"LinkIcon\"\n\t\t\t\t\t\t\t\t\t\t\ttabler=\"IconLink\"\n\t\t\t\t\t\t\t\t\t\t\thugeicons=\"LinkIcon\"\n\t\t\t\t\t\t\t\t\t\t\tphosphor=\"LinkIcon\"\n\t\t\t\t\t\t\t\t\t\t\tremixicon=\"RiLink\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</Item.Media>\n\t\t\t\t\t\t\t\t\t<Item.Content>\n\t\t\t\t\t\t\t\t\t\t<Item.Title>MCP registry</Item.Title>\n\t\t\t\t\t\t\t\t\t</Item.Content>\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t</Item.Root>\n\t\t\t\t\t</Item.Group>\n\t\t\t\t</div>\n\t\t\t</Drawer.Content>\n\t\t</Drawer.Root>\n\t\t<DropdownMenu.Root>\n\t\t\t<DropdownMenu.Trigger>\n\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t<Button variant=\"ghost\" size=\"icon\" class=\"ml-auto rounded-full\" {...props}>\n\t\t\t\t\t\t<Avatar.Root>\n\t\t\t\t\t\t\t<Avatar.Image src=\"https://github.com/shadcn.png\" alt=\"shadcn\" />\n\t\t\t\t\t\t\t<Avatar.Fallback>SC</Avatar.Fallback>\n\t\t\t\t\t\t</Avatar.Root>\n\t\t\t\t\t</Button>\n\t\t\t\t{/snippet}\n\t\t\t</DropdownMenu.Trigger>\n\t\t\t<DropdownMenu.Content class=\"w-56\" align=\"end\">\n\t\t\t\t<DropdownMenu.Group>\n\t\t\t\t\t<DropdownMenu.Label class=\"p-0 font-normal\">\n\t\t\t\t\t\t<Item.Root class=\"px-2 py-1 pb-0.5\" size=\"sm\">\n\t\t\t\t\t\t\t<Item.Media>\n\t\t\t\t\t\t\t\t<Avatar.Root>\n\t\t\t\t\t\t\t\t\t<Avatar.Image\n\t\t\t\t\t\t\t\t\t\tsrc=\"https://github.com/shadcn.png\"\n\t\t\t\t\t\t\t\t\t\talt=\"shadcn\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<Avatar.Fallback>SC</Avatar.Fallback>\n\t\t\t\t\t\t\t\t</Avatar.Root>\n\t\t\t\t\t\t\t</Item.Media>\n\t\t\t\t\t\t\t<Item.Content class=\"gap-0\">\n\t\t\t\t\t\t\t\t<Item.Title class=\"text-foreground text-sm\">shadcn</Item.Title>\n\t\t\t\t\t\t\t\t<Item.Description class=\"text-xs\">\n\t\t\t\t\t\t\t\t\tshadcn@example.com\n\t\t\t\t\t\t\t\t</Item.Description>\n\t\t\t\t\t\t\t</Item.Content>\n\t\t\t\t\t\t</Item.Root>\n\t\t\t\t\t</DropdownMenu.Label>\n\t\t\t\t</DropdownMenu.Group>\n\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t<DropdownMenu.Group>\n\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"SmileIcon\"\n\t\t\t\t\t\t\ttabler=\"IconMoodSmile\"\n\t\t\t\t\t\t\thugeicons=\"SmileIcon\"\n\t\t\t\t\t\t\tphosphor=\"SmileyIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiEmotionLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\tSet status\n\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"CircleAlertIcon\"\n\t\t\t\t\t\t\ttabler=\"IconExclamationCircle\"\n\t\t\t\t\t\t\thugeicons=\"AlertCircleIcon\"\n\t\t\t\t\t\t\tphosphor=\"WarningCircleIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiErrorWarningLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\tSingle sign-on\n\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t</DropdownMenu.Group>\n\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t<DropdownMenu.Group>\n\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"UserIcon\"\n\t\t\t\t\t\t\ttabler=\"IconUser\"\n\t\t\t\t\t\t\thugeicons=\"UserIcon\"\n\t\t\t\t\t\t\tphosphor=\"UserIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiUserLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\tProfile\n\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"FolderIcon\"\n\t\t\t\t\t\t\ttabler=\"IconFolder\"\n\t\t\t\t\t\t\thugeicons=\"FolderIcon\"\n\t\t\t\t\t\t\tphosphor=\"FolderIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiFolderLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\tRepositories\n\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"StarIcon\"\n\t\t\t\t\t\t\ttabler=\"IconStar\"\n\t\t\t\t\t\t\thugeicons=\"StarIcon\"\n\t\t\t\t\t\t\tphosphor=\"StarIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiStarLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\tStars\n\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"CodeIcon\"\n\t\t\t\t\t\t\ttabler=\"IconCode\"\n\t\t\t\t\t\t\thugeicons=\"CodeIcon\"\n\t\t\t\t\t\t\tphosphor=\"CodeIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiCodeLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\tGists\n\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"FolderIcon\"\n\t\t\t\t\t\t\ttabler=\"IconFolder\"\n\t\t\t\t\t\t\thugeicons=\"FolderIcon\"\n\t\t\t\t\t\t\tphosphor=\"FolderIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiFolderLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\tOrganizations\n\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"ServerIcon\"\n\t\t\t\t\t\t\ttabler=\"IconServer\"\n\t\t\t\t\t\t\thugeicons=\"ServerStackIcon\"\n\t\t\t\t\t\t\tphosphor=\"HardDrivesIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiServerLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\tEnterprises\n\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"HeartIcon\"\n\t\t\t\t\t\t\ttabler=\"IconHeart\"\n\t\t\t\t\t\t\thugeicons=\"FavouriteIcon\"\n\t\t\t\t\t\t\tphosphor=\"HeartIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiHeartLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\tSponsors\n\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t</DropdownMenu.Group>\n\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t<DropdownMenu.Group>\n\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"SettingsIcon\"\n\t\t\t\t\t\t\ttabler=\"IconSettings\"\n\t\t\t\t\t\t\thugeicons=\"SettingsIcon\"\n\t\t\t\t\t\t\tphosphor=\"GearIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiSettingsLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\tSettings\n\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"BotIcon\"\n\t\t\t\t\t\t\ttabler=\"IconRobot\"\n\t\t\t\t\t\t\thugeicons=\"RoboticIcon\"\n\t\t\t\t\t\t\tphosphor=\"RobotIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiRobotLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\tCopilot settings\n\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"SparklesIcon\"\n\t\t\t\t\t\t\ttabler=\"IconSparkles\"\n\t\t\t\t\t\t\thugeicons=\"SparklesIcon\"\n\t\t\t\t\t\t\tphosphor=\"SparkleIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiSparklingLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\tFeature preview\n\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"MonitorIcon\"\n\t\t\t\t\t\t\ttabler=\"IconDeviceDesktop\"\n\t\t\t\t\t\t\thugeicons=\"ComputerIcon\"\n\t\t\t\t\t\t\tphosphor=\"MonitorIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiComputerLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\tAppearance\n\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"UserIcon\"\n\t\t\t\t\t\t\ttabler=\"IconUser\"\n\t\t\t\t\t\t\thugeicons=\"UserIcon\"\n\t\t\t\t\t\t\tphosphor=\"UserIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiUserLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\tAccessibility\n\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"ArrowUpIcon\"\n\t\t\t\t\t\t\ttabler=\"IconArrowUp\"\n\t\t\t\t\t\t\thugeicons=\"ArrowUpIcon\"\n\t\t\t\t\t\t\tphosphor=\"ArrowUpIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiArrowUpLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\tUpgrade\n\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t</DropdownMenu.Group>\n\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"LogOutIcon\"\n\t\t\t\t\t\ttabler=\"IconLogout\"\n\t\t\t\t\t\thugeicons=\"LogoutIcon\"\n\t\t\t\t\t\tphosphor=\"SignOutIcon\"\n\t\t\t\t\t\tremixicon=\"RiLogoutBoxLine\"\n\t\t\t\t\t/>\n\t\t\t\t\tSign out\n\t\t\t\t</DropdownMenu.Item>\n\t\t\t</DropdownMenu.Content>\n\t\t</DropdownMenu.Root>\n\t</header>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/github/profile.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport * as NativeSelect from \"$lib/registry/ui/native-select/index.js\";\n\timport { Input } from \"$lib/registry/ui/input/index.js\";\n\timport { Textarea } from \"$lib/registry/ui/textarea/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n</script>\n\n<Example title=\"Profile\" class=\"items-center justify-center\">\n\t<Card.Root class=\"mx-auto w-full max-w-md\">\n\t\t<Card.Header>\n\t\t\t<Card.Title>Profile</Card.Title>\n\t\t\t<Card.Description>Manage your profile information.</Card.Description>\n\t\t</Card.Header>\n\t\t<Card.Content>\n\t\t\t<form id=\"profile\">\n\t\t\t\t<Field.Group>\n\t\t\t\t\t<Field.Field>\n\t\t\t\t\t\t<Field.Label for=\"name\">Name</Field.Label>\n\t\t\t\t\t\t<Input id=\"name\" placeholder=\"shadcn\" />\n\t\t\t\t\t\t<Field.Description>\n\t\t\t\t\t\t\tYour name may appear around GitHub where you contribute or are\n\t\t\t\t\t\t\tmentioned. You can remove it at any time.\n\t\t\t\t\t\t</Field.Description>\n\t\t\t\t\t</Field.Field>\n\t\t\t\t\t<Field.Field>\n\t\t\t\t\t\t<Field.Label for=\"email\">Public Email</Field.Label>\n\t\t\t\t\t\t<NativeSelect.Root id=\"email\">\n\t\t\t\t\t\t\t<NativeSelect.Option value=\"m@shadcn.com\">\n\t\t\t\t\t\t\t\tm@shadcn.com\n\t\t\t\t\t\t\t</NativeSelect.Option>\n\t\t\t\t\t\t\t<NativeSelect.Option value=\"m@gmail.com\">\n\t\t\t\t\t\t\t\tm@gmail.com\n\t\t\t\t\t\t\t</NativeSelect.Option>\n\t\t\t\t\t\t</NativeSelect.Root>\n\t\t\t\t\t\t<Field.Description>\n\t\t\t\t\t\t\tYou can manage verified email addresses in your\n\t\t\t\t\t\t\t<a href=\"#email-settings\">email settings</a>.\n\t\t\t\t\t\t</Field.Description>\n\t\t\t\t\t</Field.Field>\n\t\t\t\t\t<Field.Field>\n\t\t\t\t\t\t<Field.Label for=\"bio\">Bio</Field.Label>\n\t\t\t\t\t\t<Textarea id=\"bio\" placeholder=\"Tell us a little bit about yourself\" />\n\t\t\t\t\t\t<Field.Description>\n\t\t\t\t\t\t\tYou can <span>@mention</span> other users and organizations to link to them.\n\t\t\t\t\t\t</Field.Description>\n\t\t\t\t\t</Field.Field>\n\t\t\t\t</Field.Group>\n\t\t\t</form>\n\t\t</Card.Content>\n\t\t<Card.Footer>\n\t\t\t<Button form=\"profile\">Save Profile</Button>\n\t\t</Card.Footer>\n\t</Card.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/github/repository-toolbar.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as InputGroup from \"$lib/registry/ui/input-group/index.js\";\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\timport * as Popover from \"$lib/registry/ui/popover/index.js\";\n\timport * as Tooltip from \"$lib/registry/ui/tooltip/index.js\";\n\timport * as Command from \"$lib/registry/ui/command/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport * as Empty from \"$lib/registry/ui/empty/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport { Kbd } from \"$lib/registry/ui/kbd/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\n\tlet selectedBranch = $state(\"main\");\n\n\tconst branches = [\n\t\t\"main\",\n\t\t\"develop\",\n\t\t\"feature/123\",\n\t\t\"feature/user-authentication\",\n\t\t\"feature/dashboard-redesign\",\n\t\t\"bugfix/login-error\",\n\t\t\"hotfix/security-patch\",\n\t\t\"release/v2.0.0\",\n\t\t\"feature/api-integration\",\n\t\t\"bugfix/memory-leak\",\n\t\t\"feature/dark-mode\",\n\t\t\"feature/responsive-design\",\n\t\t\"bugfix/typo-fix\",\n\t\t\"feature/search-functionality\",\n\t\t\"release/v1.9.0\",\n\t\t\"feature/notifications\",\n\t\t\"bugfix/cache-issue\",\n\t\t\"feature/payment-gateway\",\n\t\t\"hotfix/critical-bug\",\n\t\t\"feature/admin-panel\",\n\t\t\"bugfix/validation-error\",\n\t\t\"feature/analytics\",\n\t\t\"release/v2.1.0\",\n\t];\n</script>\n\n<Example title=\"Repository Toolbar\">\n\t<div class=\"flex items-center gap-2\">\n\t\t<InputGroup.Root>\n\t\t\t<InputGroup.Input placeholder=\"Go to file\" />\n\t\t\t<InputGroup.Addon align=\"inline-start\">\n\t\t\t\t<InputGroup.Button variant=\"ghost\" size=\"icon-xs\">\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"SearchIcon\"\n\t\t\t\t\t\ttabler=\"IconSearch\"\n\t\t\t\t\t\thugeicons=\"SearchIcon\"\n\t\t\t\t\t\tphosphor=\"MagnifyingGlassIcon\"\n\t\t\t\t\t\tremixicon=\"RiSearchLine\"\n\t\t\t\t\t/>\n\t\t\t\t</InputGroup.Button>\n\t\t\t</InputGroup.Addon>\n\t\t\t<InputGroup.Addon align=\"inline-end\">\n\t\t\t\t<Kbd>t</Kbd>\n\t\t\t</InputGroup.Addon>\n\t\t</InputGroup.Root>\n\t\t<DropdownMenu.Root>\n\t\t\t<DropdownMenu.Trigger>\n\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t<Button variant=\"outline\" {...props}>\n\t\t\t\t\t\tAdd File\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"ChevronDownIcon\"\n\t\t\t\t\t\t\ttabler=\"IconChevronDown\"\n\t\t\t\t\t\t\thugeicons=\"ArrowDown01Icon\"\n\t\t\t\t\t\t\tphosphor=\"CaretDownIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiArrowDownSLine\"\n\t\t\t\t\t\t\tdata-icon=\"inline-end\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Button>\n\t\t\t\t{/snippet}\n\t\t\t</DropdownMenu.Trigger>\n\t\t\t<DropdownMenu.Content align=\"end\">\n\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"PlusIcon\"\n\t\t\t\t\t\ttabler=\"IconPlus\"\n\t\t\t\t\t\thugeicons=\"PlusSignIcon\"\n\t\t\t\t\t\tphosphor=\"PlusIcon\"\n\t\t\t\t\t\tremixicon=\"RiAddLine\"\n\t\t\t\t\t/>\n\t\t\t\t\tCreate new file\n\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"UploadIcon\"\n\t\t\t\t\t\thugeicons=\"Upload01Icon\"\n\t\t\t\t\t\ttabler=\"IconUpload\"\n\t\t\t\t\t\tphosphor=\"UploadIcon\"\n\t\t\t\t\t\tremixicon=\"RiUploadLine\"\n\t\t\t\t\t/>\n\t\t\t\t\tUpload files\n\t\t\t\t</DropdownMenu.Item>\n\t\t\t</DropdownMenu.Content>\n\t\t</DropdownMenu.Root>\n\t\t<Popover.Root>\n\t\t\t<Tooltip.Root>\n\t\t\t\t<Tooltip.Trigger>\n\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t<Popover.Trigger {...props}>\n\t\t\t\t\t\t\t{#snippet child({ props: triggerProps })}\n\t\t\t\t\t\t\t\t<Button variant=\"outline\" size=\"icon\" {...triggerProps}>\n\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\tlucide=\"CloudCogIcon\"\n\t\t\t\t\t\t\t\t\t\thugeicons=\"AiCloud01Icon\"\n\t\t\t\t\t\t\t\t\t\ttabler=\"IconCloudCog\"\n\t\t\t\t\t\t\t\t\t\tphosphor=\"CloudArrowUpIcon\"\n\t\t\t\t\t\t\t\t\t\tremixicon=\"RiCloudLine\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t</Popover.Trigger>\n\t\t\t\t\t{/snippet}\n\t\t\t\t</Tooltip.Trigger>\n\t\t\t\t<Tooltip.Content>New Agent Task</Tooltip.Content>\n\t\t\t</Tooltip.Root>\n\t\t\t<Popover.Content class=\"w-80\">\n\t\t\t\t<Field.Field>\n\t\t\t\t\t<Field.Label for=\"new-agent-task\">New Agent Task</Field.Label>\n\t\t\t\t\t<InputGroup.Root>\n\t\t\t\t\t\t<InputGroup.Textarea placeholder=\"Describe your task in natural language.\"\n\t\t\t\t\t\t></InputGroup.Textarea>\n\t\t\t\t\t\t<InputGroup.Addon align=\"block-end\">\n\t\t\t\t\t\t\t<Popover.Root>\n\t\t\t\t\t\t\t\t<Tooltip.Root>\n\t\t\t\t\t\t\t\t\t<Popover.Trigger>\n\t\t\t\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t\t\t\t<Tooltip.Trigger {...props}>\n\t\t\t\t\t\t\t\t\t\t\t\t{#snippet child({ props: triggerProps })}\n\t\t\t\t\t\t\t\t\t\t\t\t\t<InputGroup.Button\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"icon-sm\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{...triggerProps}\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tlucide=\"GitBranchIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\thugeicons=\"GitBranchIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttabler=\"IconGitBranch\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tphosphor=\"GitBranchIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tremixicon=\"RiGitBranchLine\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</InputGroup.Button>\n\t\t\t\t\t\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t\t\t\t\t\t</Tooltip.Trigger>\n\t\t\t\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t\t\t\t</Popover.Trigger>\n\t\t\t\t\t\t\t\t\t<Tooltip.Content>Select a branch</Tooltip.Content>\n\t\t\t\t\t\t\t\t</Tooltip.Root>\n\t\t\t\t\t\t\t\t<Popover.Content side=\"bottom\" align=\"start\" class=\"p-1\">\n\t\t\t\t\t\t\t\t\t<Field.Field>\n\t\t\t\t\t\t\t\t\t\t<Field.Label for=\"select-branch\" class=\"sr-only\">\n\t\t\t\t\t\t\t\t\t\t\tSelect a Branch\n\t\t\t\t\t\t\t\t\t\t</Field.Label>\n\t\t\t\t\t\t\t\t\t\t<Command.Root>\n\t\t\t\t\t\t\t\t\t\t\t<Command.Input\n\t\t\t\t\t\t\t\t\t\t\t\tid=\"select-branch\"\n\t\t\t\t\t\t\t\t\t\t\t\tplaceholder=\"Find a branch\"\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t<Command.Empty>No branches found</Command.Empty>\n\t\t\t\t\t\t\t\t\t\t\t<Command.List>\n\t\t\t\t\t\t\t\t\t\t\t\t<Command.Group>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{#each branches as branch (branch)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Command.Item\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalue={branch}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tonSelect={() =>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t(selectedBranch = branch)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tdata-checked={selectedBranch === branch}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{branch}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Command.Item>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t\t\t\t\t\t</Command.Group>\n\t\t\t\t\t\t\t\t\t\t\t</Command.List>\n\t\t\t\t\t\t\t\t\t\t</Command.Root>\n\t\t\t\t\t\t\t\t\t</Field.Field>\n\t\t\t\t\t\t\t\t</Popover.Content>\n\t\t\t\t\t\t\t</Popover.Root>\n\t\t\t\t\t\t\t<Popover.Root>\n\t\t\t\t\t\t\t\t<Tooltip.Root>\n\t\t\t\t\t\t\t\t\t<Popover.Trigger>\n\t\t\t\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t\t\t\t<Tooltip.Trigger {...props}>\n\t\t\t\t\t\t\t\t\t\t\t\t{#snippet child({ props: triggerProps })}\n\t\t\t\t\t\t\t\t\t\t\t\t\t<InputGroup.Button\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize=\"icon-sm\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{...triggerProps}\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tlucide=\"BotIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\thugeicons=\"RoboticIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttabler=\"IconRobot\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tphosphor=\"RobotIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tremixicon=\"RiRobotLine\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</InputGroup.Button>\n\t\t\t\t\t\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t\t\t\t\t\t</Tooltip.Trigger>\n\t\t\t\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t\t\t\t</Popover.Trigger>\n\t\t\t\t\t\t\t\t\t<Tooltip.Content>Select Agent</Tooltip.Content>\n\t\t\t\t\t\t\t\t</Tooltip.Root>\n\t\t\t\t\t\t\t\t<Popover.Content side=\"top\" align=\"start\">\n\t\t\t\t\t\t\t\t\t<Empty.Root class=\"gap-4 p-0\">\n\t\t\t\t\t\t\t\t\t\t<Empty.Header>\n\t\t\t\t\t\t\t\t\t\t\t<Empty.Title class=\"text-sm\">\n\t\t\t\t\t\t\t\t\t\t\t\tThis repository has no custom agents\n\t\t\t\t\t\t\t\t\t\t\t</Empty.Title>\n\t\t\t\t\t\t\t\t\t\t\t<Empty.Description class=\"text-xs\">\n\t\t\t\t\t\t\t\t\t\t\t\tCustom agents are reusable instructions and tools in\n\t\t\t\t\t\t\t\t\t\t\t\tyour repository.\n\t\t\t\t\t\t\t\t\t\t\t</Empty.Description>\n\t\t\t\t\t\t\t\t\t\t</Empty.Header>\n\t\t\t\t\t\t\t\t\t\t<Empty.Content>\n\t\t\t\t\t\t\t\t\t\t\t<Button variant=\"outline\" size=\"sm\">\n\t\t\t\t\t\t\t\t\t\t\t\tCreate Custom Agent\n\t\t\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t\t\t</Empty.Content>\n\t\t\t\t\t\t\t\t\t</Empty.Root>\n\t\t\t\t\t\t\t\t</Popover.Content>\n\t\t\t\t\t\t\t</Popover.Root>\n\t\t\t\t\t\t\t<Tooltip.Root>\n\t\t\t\t\t\t\t\t<Tooltip.Trigger>\n\t\t\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t\t\t<InputGroup.Button\n\t\t\t\t\t\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\t\t\t\t\t\tsize=\"icon-sm\"\n\t\t\t\t\t\t\t\t\t\t\tclass=\"ml-auto\"\n\t\t\t\t\t\t\t\t\t\t\t{...props}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\t\t\tlucide=\"SendIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\thugeicons=\"SentIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\ttabler=\"IconSend\"\n\t\t\t\t\t\t\t\t\t\t\t\tphosphor=\"PaperPlaneTiltIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\tremixicon=\"RiSendPlaneLine\"\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t</InputGroup.Button>\n\t\t\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t\t\t</Tooltip.Trigger>\n\t\t\t\t\t\t\t\t<Tooltip.Content class=\"flex items-center gap-2 pr-2\">\n\t\t\t\t\t\t\t\t\tStart Task <Kbd>⏎</Kbd>\n\t\t\t\t\t\t\t\t</Tooltip.Content>\n\t\t\t\t\t\t\t</Tooltip.Root>\n\t\t\t\t\t\t</InputGroup.Addon>\n\t\t\t\t\t</InputGroup.Root>\n\t\t\t\t</Field.Field>\n\t\t\t</Popover.Content>\n\t\t</Popover.Root>\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/home/badge-examples.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Badge } from \"$lib/registry/ui/badge/index.js\";\n\timport { Spinner } from \"$lib/registry/ui/spinner/index.js\";\n</script>\n\n<Example title=\"Badge\" class=\"items-center justify-center\">\n\t<div class=\"flex items-center justify-center gap-2\">\n\t\t<Badge>\n\t\t\t<Spinner data-icon=\"inline-start\" />\n\t\t\tSyncing\n\t\t</Badge>\n\t\t<Badge variant=\"secondary\">\n\t\t\t<Spinner data-icon=\"inline-start\" />\n\t\t\tUpdating\n\t\t</Badge>\n\t\t<Badge variant=\"outline\">\n\t\t\t<Spinner data-icon=\"inline-start\" />\n\t\t\tLoading\n\t\t</Badge>\n\t\t<Badge variant=\"link\" class=\"hidden sm:flex\">\n\t\t\t<Spinner data-icon=\"inline-start\" />\n\t\t\tLink\n\t\t</Badge>\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/home/button-group-examples.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as ButtonGroup from \"$lib/registry/ui/button-group/index.js\";\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\timport * as Popover from \"$lib/registry/ui/popover/index.js\";\n\timport { Textarea } from \"$lib/registry/ui/textarea/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\n\tlet label = $state(\"personal\");\n</script>\n\n<Example title=\"Button Group\" class=\"items-center justify-center\">\n\t<div class=\"flex flex-col gap-6\">\n\t\t<ButtonGroup.Root>\n\t\t\t<ButtonGroup.Root class=\"hidden sm:flex\">\n\t\t\t\t<Button variant=\"outline\" size=\"icon-sm\" aria-label=\"Go Back\">\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"ArrowLeftIcon\"\n\t\t\t\t\t\ttabler=\"IconArrowLeft\"\n\t\t\t\t\t\thugeicons=\"ArrowLeft01Icon\"\n\t\t\t\t\t\tphosphor=\"ArrowLeftIcon\"\n\t\t\t\t\t\tremixicon=\"RiArrowLeftLine\"\n\t\t\t\t\t/>\n\t\t\t\t</Button>\n\t\t\t</ButtonGroup.Root>\n\t\t\t<ButtonGroup.Root>\n\t\t\t\t<Button variant=\"outline\" size=\"sm\">Archive</Button>\n\t\t\t\t<Button variant=\"outline\" size=\"sm\">Report</Button>\n\t\t\t</ButtonGroup.Root>\n\t\t\t<ButtonGroup.Root>\n\t\t\t\t<Button variant=\"outline\" size=\"sm\">Snooze</Button>\n\t\t\t\t<DropdownMenu.Root>\n\t\t\t\t\t<DropdownMenu.Trigger>\n\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\t\t\tsize=\"icon-sm\"\n\t\t\t\t\t\t\t\taria-label=\"More Options\"\n\t\t\t\t\t\t\t\t{...props}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\tlucide=\"ChevronDownIcon\"\n\t\t\t\t\t\t\t\t\ttabler=\"IconChevronDown\"\n\t\t\t\t\t\t\t\t\thugeicons=\"ArrowDown01Icon\"\n\t\t\t\t\t\t\t\t\tphosphor=\"CaretDownIcon\"\n\t\t\t\t\t\t\t\t\tremixicon=\"RiArrowDownSLine\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t</DropdownMenu.Trigger>\n\t\t\t\t\t<DropdownMenu.Content align=\"end\" class=\"w-48\">\n\t\t\t\t\t\t<DropdownMenu.Group>\n\t\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\tlucide=\"MailCheckIcon\"\n\t\t\t\t\t\t\t\t\ttabler=\"IconMailCheck\"\n\t\t\t\t\t\t\t\t\thugeicons=\"MailValidation01Icon\"\n\t\t\t\t\t\t\t\t\tphosphor=\"EnvelopeIcon\"\n\t\t\t\t\t\t\t\t\tremixicon=\"RiMailCheckLine\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\tMark as Read\n\t\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\tlucide=\"ArchiveIcon\"\n\t\t\t\t\t\t\t\t\ttabler=\"IconArchive\"\n\t\t\t\t\t\t\t\t\thugeicons=\"ArchiveIcon\"\n\t\t\t\t\t\t\t\t\tphosphor=\"ArchiveIcon\"\n\t\t\t\t\t\t\t\t\tremixicon=\"RiArchiveLine\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\tArchive\n\t\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t</DropdownMenu.Group>\n\t\t\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t\t\t<DropdownMenu.Group>\n\t\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\tlucide=\"ClockIcon\"\n\t\t\t\t\t\t\t\t\ttabler=\"IconClock\"\n\t\t\t\t\t\t\t\t\thugeicons=\"ClockIcon\"\n\t\t\t\t\t\t\t\t\tphosphor=\"ClockIcon\"\n\t\t\t\t\t\t\t\t\tremixicon=\"RiTimeLine\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\tSnooze\n\t\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\tlucide=\"CalendarPlusIcon\"\n\t\t\t\t\t\t\t\t\ttabler=\"IconCalendarPlus\"\n\t\t\t\t\t\t\t\t\thugeicons=\"CalendarAdd01Icon\"\n\t\t\t\t\t\t\t\t\tphosphor=\"CalendarPlusIcon\"\n\t\t\t\t\t\t\t\t\tremixicon=\"RiCalendarCheckLine\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\tAdd to Calendar\n\t\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\tlucide=\"ListFilterIcon\"\n\t\t\t\t\t\t\t\t\ttabler=\"IconFilterPlus\"\n\t\t\t\t\t\t\t\t\thugeicons=\"AddToListIcon\"\n\t\t\t\t\t\t\t\t\tphosphor=\"ListPlusIcon\"\n\t\t\t\t\t\t\t\t\tremixicon=\"RiAddBoxLine\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\tAdd to List\n\t\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t\t<DropdownMenu.Sub>\n\t\t\t\t\t\t\t\t<DropdownMenu.SubTrigger>\n\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\tlucide=\"TagIcon\"\n\t\t\t\t\t\t\t\t\t\ttabler=\"IconTag\"\n\t\t\t\t\t\t\t\t\t\thugeicons=\"TagIcon\"\n\t\t\t\t\t\t\t\t\t\tphosphor=\"TagIcon\"\n\t\t\t\t\t\t\t\t\t\tremixicon=\"RiPriceTagLine\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\tLabel As...\n\t\t\t\t\t\t\t\t</DropdownMenu.SubTrigger>\n\t\t\t\t\t\t\t\t<DropdownMenu.Portal>\n\t\t\t\t\t\t\t\t\t<DropdownMenu.SubContent>\n\t\t\t\t\t\t\t\t\t\t<DropdownMenu.Group>\n\t\t\t\t\t\t\t\t\t\t\t<DropdownMenu.RadioGroup bind:value={label}>\n\t\t\t\t\t\t\t\t\t\t\t\t<DropdownMenu.RadioItem value=\"personal\">\n\t\t\t\t\t\t\t\t\t\t\t\t\tPersonal\n\t\t\t\t\t\t\t\t\t\t\t\t</DropdownMenu.RadioItem>\n\t\t\t\t\t\t\t\t\t\t\t\t<DropdownMenu.RadioItem value=\"work\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t>Work</DropdownMenu.RadioItem\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<DropdownMenu.RadioItem value=\"other\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t>Other</DropdownMenu.RadioItem\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t</DropdownMenu.RadioGroup>\n\t\t\t\t\t\t\t\t\t\t</DropdownMenu.Group>\n\t\t\t\t\t\t\t\t\t</DropdownMenu.SubContent>\n\t\t\t\t\t\t\t\t</DropdownMenu.Portal>\n\t\t\t\t\t\t\t</DropdownMenu.Sub>\n\t\t\t\t\t\t</DropdownMenu.Group>\n\t\t\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t\t\t<DropdownMenu.Group>\n\t\t\t\t\t\t\t<DropdownMenu.Item variant=\"destructive\">\n\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\tlucide=\"Trash2Icon\"\n\t\t\t\t\t\t\t\t\ttabler=\"IconTrash\"\n\t\t\t\t\t\t\t\t\thugeicons=\"Delete02Icon\"\n\t\t\t\t\t\t\t\t\tphosphor=\"TrashIcon\"\n\t\t\t\t\t\t\t\t\tremixicon=\"RiDeleteBinLine\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\tTrash\n\t\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t</DropdownMenu.Group>\n\t\t\t\t\t</DropdownMenu.Content>\n\t\t\t\t</DropdownMenu.Root>\n\t\t\t</ButtonGroup.Root>\n\t\t\t<ButtonGroup.Root class=\"hidden sm:flex\">\n\t\t\t\t<Button variant=\"outline\" size=\"icon-sm\" aria-label=\"Previous\">\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"ArrowLeftIcon\"\n\t\t\t\t\t\ttabler=\"IconArrowLeft\"\n\t\t\t\t\t\thugeicons=\"ArrowLeft01Icon\"\n\t\t\t\t\t\tphosphor=\"ArrowLeftIcon\"\n\t\t\t\t\t\tremixicon=\"RiArrowLeftLine\"\n\t\t\t\t\t/>\n\t\t\t\t</Button>\n\t\t\t\t<Button variant=\"outline\" size=\"icon-sm\" aria-label=\"Next\">\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"ArrowRightIcon\"\n\t\t\t\t\t\ttabler=\"IconArrowRight\"\n\t\t\t\t\t\thugeicons=\"ArrowRight01Icon\"\n\t\t\t\t\t\tphosphor=\"ArrowRightIcon\"\n\t\t\t\t\t\tremixicon=\"RiArrowRightLine\"\n\t\t\t\t\t/>\n\t\t\t\t</Button>\n\t\t\t</ButtonGroup.Root>\n\t\t</ButtonGroup.Root>\n\t\t<div class=\"flex gap-4\">\n\t\t\t<ButtonGroup.Root class=\"hidden sm:flex\">\n\t\t\t\t<ButtonGroup.Root>\n\t\t\t\t\t<Button variant=\"outline\">1</Button>\n\t\t\t\t\t<Button variant=\"outline\">2</Button>\n\t\t\t\t\t<Button variant=\"outline\">3</Button>\n\t\t\t\t</ButtonGroup.Root>\n\t\t\t</ButtonGroup.Root>\n\t\t\t<ButtonGroup.Root>\n\t\t\t\t<ButtonGroup.Root>\n\t\t\t\t\t<Button variant=\"outline\">Follow</Button>\n\t\t\t\t\t<DropdownMenu.Root>\n\t\t\t\t\t\t<DropdownMenu.Trigger>\n\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t<Button variant=\"outline\" size=\"icon\" {...props}>\n\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\tlucide=\"ChevronDownIcon\"\n\t\t\t\t\t\t\t\t\t\ttabler=\"IconChevronDown\"\n\t\t\t\t\t\t\t\t\t\thugeicons=\"ArrowDown01Icon\"\n\t\t\t\t\t\t\t\t\t\tphosphor=\"CaretDownIcon\"\n\t\t\t\t\t\t\t\t\t\tremixicon=\"RiArrowDownSLine\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t</DropdownMenu.Trigger>\n\t\t\t\t\t\t<DropdownMenu.Content align=\"end\" class=\"w-52\">\n\t\t\t\t\t\t\t<DropdownMenu.Group>\n\t\t\t\t\t\t\t\t<DropdownMenu.Label>Quick Actions</DropdownMenu.Label>\n\t\t\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\tlucide=\"VolumeX\"\n\t\t\t\t\t\t\t\t\t\ttabler=\"IconVolume\"\n\t\t\t\t\t\t\t\t\t\thugeicons=\"VolumeOffIcon\"\n\t\t\t\t\t\t\t\t\t\tphosphor=\"SpeakerSlashIcon\"\n\t\t\t\t\t\t\t\t\t\tremixicon=\"RiVolumeMuteLine\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\tMute Conversation\n\t\t\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\tlucide=\"CheckIcon\"\n\t\t\t\t\t\t\t\t\t\ttabler=\"IconCheck\"\n\t\t\t\t\t\t\t\t\t\thugeicons=\"Tick02Icon\"\n\t\t\t\t\t\t\t\t\t\tphosphor=\"CheckIcon\"\n\t\t\t\t\t\t\t\t\t\tremixicon=\"RiCheckLine\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\tMark as Read\n\t\t\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\tlucide=\"UserRoundXIcon\"\n\t\t\t\t\t\t\t\t\t\ttabler=\"IconUserX\"\n\t\t\t\t\t\t\t\t\t\thugeicons=\"UserRemove01Icon\"\n\t\t\t\t\t\t\t\t\t\tphosphor=\"UserMinusIcon\"\n\t\t\t\t\t\t\t\t\t\tremixicon=\"RiUserMinusLine\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\tBlock User\n\t\t\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t\t</DropdownMenu.Group>\n\t\t\t\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t\t\t\t<DropdownMenu.Group>\n\t\t\t\t\t\t\t\t<DropdownMenu.Label>Conversation</DropdownMenu.Label>\n\t\t\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\tlucide=\"ShareIcon\"\n\t\t\t\t\t\t\t\t\t\ttabler=\"IconShare\"\n\t\t\t\t\t\t\t\t\t\thugeicons=\"Share03Icon\"\n\t\t\t\t\t\t\t\t\t\tphosphor=\"ShareIcon\"\n\t\t\t\t\t\t\t\t\t\tremixicon=\"RiShareLine\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\tShare Conversation\n\t\t\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\tlucide=\"CopyIcon\"\n\t\t\t\t\t\t\t\t\t\ttabler=\"IconCopy\"\n\t\t\t\t\t\t\t\t\t\thugeicons=\"Copy01Icon\"\n\t\t\t\t\t\t\t\t\t\tphosphor=\"CopyIcon\"\n\t\t\t\t\t\t\t\t\t\tremixicon=\"RiFileCopyLine\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\tCopy Conversation\n\t\t\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\tlucide=\"AlertTriangleIcon\"\n\t\t\t\t\t\t\t\t\t\ttabler=\"IconAlertTriangle\"\n\t\t\t\t\t\t\t\t\t\thugeicons=\"AlertCircleIcon\"\n\t\t\t\t\t\t\t\t\t\tphosphor=\"WarningIcon\"\n\t\t\t\t\t\t\t\t\t\tremixicon=\"RiAlertLine\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\tReport Conversation\n\t\t\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t\t</DropdownMenu.Group>\n\t\t\t\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t\t\t\t<DropdownMenu.Group>\n\t\t\t\t\t\t\t\t<DropdownMenu.Item variant=\"destructive\">\n\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\tlucide=\"TrashIcon\"\n\t\t\t\t\t\t\t\t\t\ttabler=\"IconTrash\"\n\t\t\t\t\t\t\t\t\t\thugeicons=\"Delete02Icon\"\n\t\t\t\t\t\t\t\t\t\tphosphor=\"TrashIcon\"\n\t\t\t\t\t\t\t\t\t\tremixicon=\"RiDeleteBinLine\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\tDelete Conversation\n\t\t\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t\t</DropdownMenu.Group>\n\t\t\t\t\t\t</DropdownMenu.Content>\n\t\t\t\t\t</DropdownMenu.Root>\n\t\t\t\t</ButtonGroup.Root>\n\t\t\t\t<ButtonGroup.Root>\n\t\t\t\t\t<Button variant=\"outline\">\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"BotIcon\"\n\t\t\t\t\t\t\ttabler=\"IconRobot\"\n\t\t\t\t\t\t\thugeicons=\"BotIcon\"\n\t\t\t\t\t\t\tphosphor=\"RobotIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiRobotLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\tCopilot\n\t\t\t\t\t</Button>\n\t\t\t\t\t<Popover.Root>\n\t\t\t\t\t\t<Popover.Trigger>\n\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\t\t\t\tsize=\"icon\"\n\t\t\t\t\t\t\t\t\taria-label=\"Open Popover\"\n\t\t\t\t\t\t\t\t\t{...props}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\tlucide=\"ChevronDownIcon\"\n\t\t\t\t\t\t\t\t\t\ttabler=\"IconChevronDown\"\n\t\t\t\t\t\t\t\t\t\thugeicons=\"ArrowDown01Icon\"\n\t\t\t\t\t\t\t\t\t\tphosphor=\"CaretDownIcon\"\n\t\t\t\t\t\t\t\t\t\tremixicon=\"RiArrowDownSLine\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t</Popover.Trigger>\n\t\t\t\t\t\t<Popover.Content align=\"end\" class=\"w-96\">\n\t\t\t\t\t\t\t<Popover.Header>\n\t\t\t\t\t\t\t\t<Popover.Title>Agent Tasks</Popover.Title>\n\t\t\t\t\t\t\t\t<Popover.Description>\n\t\t\t\t\t\t\t\t\tDescribe your task in natural language. Copilot will work in the\n\t\t\t\t\t\t\t\t\tbackground and open a pull request.\n\t\t\t\t\t\t\t\t</Popover.Description>\n\t\t\t\t\t\t\t</Popover.Header>\n\t\t\t\t\t\t\t<div class=\"text-sm *:[p:not(:last-child)]:mb-2\">\n\t\t\t\t\t\t\t\t<Textarea\n\t\t\t\t\t\t\t\t\tplaceholder=\"Describe your task in natural language.\"\n\t\t\t\t\t\t\t\t\tclass=\"min-h-32 resize-none\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</Popover.Content>\n\t\t\t\t\t</Popover.Root>\n\t\t\t\t</ButtonGroup.Root>\n\t\t\t</ButtonGroup.Root>\n\t\t</div>\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/home/empty-avatar-group.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Empty from \"$lib/registry/ui/empty/index.js\";\n\timport * as Avatar from \"$lib/registry/ui/avatar/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as AlertDialog from \"$lib/registry/ui/alert-dialog/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Example title=\"Empty\">\n\t<Empty.Root class=\"h-full flex-none border\">\n\t\t<Empty.Header>\n\t\t\t<Empty.Media>\n\t\t\t\t<Avatar.Group class=\"grayscale\">\n\t\t\t\t\t<Avatar.Root size=\"lg\">\n\t\t\t\t\t\t<Avatar.Image src=\"https://github.com/shadcn.png\" alt=\"@shadcn\" />\n\t\t\t\t\t\t<Avatar.Fallback>CN</Avatar.Fallback>\n\t\t\t\t\t</Avatar.Root>\n\t\t\t\t\t<Avatar.Root size=\"lg\">\n\t\t\t\t\t\t<Avatar.Image src=\"https://github.com/maxleiter.png\" alt=\"@maxleiter\" />\n\t\t\t\t\t\t<Avatar.Fallback>LR</Avatar.Fallback>\n\t\t\t\t\t</Avatar.Root>\n\t\t\t\t\t<Avatar.Root size=\"lg\">\n\t\t\t\t\t\t<Avatar.Image src=\"https://github.com/evilrabbit.png\" alt=\"@evilrabbit\" />\n\t\t\t\t\t\t<Avatar.Fallback>ER</Avatar.Fallback>\n\t\t\t\t\t</Avatar.Root>\n\t\t\t\t</Avatar.Group>\n\t\t\t</Empty.Media>\n\t\t\t<Empty.Title>No Team Members</Empty.Title>\n\t\t\t<Empty.Description>Invite your team to collaborate on this project.</Empty.Description>\n\t\t</Empty.Header>\n\t\t<Empty.Content>\n\t\t\t<div class=\"flex gap-2\">\n\t\t\t\t<AlertDialog.Root>\n\t\t\t\t\t<AlertDialog.Trigger>\n\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t<Button variant=\"outline\" {...props}>Show Dialog</Button>\n\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t</AlertDialog.Trigger>\n\t\t\t\t\t<AlertDialog.Content>\n\t\t\t\t\t\t<AlertDialog.Header>\n\t\t\t\t\t\t\t<AlertDialog.Title>Are you absolutely sure?</AlertDialog.Title>\n\t\t\t\t\t\t\t<AlertDialog.Description>\n\t\t\t\t\t\t\t\tThis action cannot be undone. This will permanently delete your\n\t\t\t\t\t\t\t\taccount and remove your data from our servers.\n\t\t\t\t\t\t\t</AlertDialog.Description>\n\t\t\t\t\t\t</AlertDialog.Header>\n\t\t\t\t\t\t<AlertDialog.Footer>\n\t\t\t\t\t\t\t<AlertDialog.Cancel>Cancel</AlertDialog.Cancel>\n\t\t\t\t\t\t\t<AlertDialog.Action>Continue</AlertDialog.Action>\n\t\t\t\t\t\t</AlertDialog.Footer>\n\t\t\t\t\t</AlertDialog.Content>\n\t\t\t\t</AlertDialog.Root>\n\t\t\t\t<AlertDialog.Root>\n\t\t\t\t\t<AlertDialog.Trigger>\n\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t<Button {...props}>Connect Mouse</Button>\n\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t</AlertDialog.Trigger>\n\t\t\t\t\t<AlertDialog.Content size=\"sm\">\n\t\t\t\t\t\t<AlertDialog.Header>\n\t\t\t\t\t\t\t<AlertDialog.Media>\n\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\tlucide=\"BluetoothIcon\"\n\t\t\t\t\t\t\t\t\ttabler=\"IconBluetooth\"\n\t\t\t\t\t\t\t\t\thugeicons=\"BluetoothIcon\"\n\t\t\t\t\t\t\t\t\tphosphor=\"BluetoothIcon\"\n\t\t\t\t\t\t\t\t\tremixicon=\"RiBluetoothLine\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</AlertDialog.Media>\n\t\t\t\t\t\t\t<AlertDialog.Title>Allow accessory to connect?</AlertDialog.Title>\n\t\t\t\t\t\t\t<AlertDialog.Description>\n\t\t\t\t\t\t\t\tDo you want to allow the USB accessory to connect to this device?\n\t\t\t\t\t\t\t</AlertDialog.Description>\n\t\t\t\t\t\t</AlertDialog.Header>\n\t\t\t\t\t\t<AlertDialog.Footer>\n\t\t\t\t\t\t\t<AlertDialog.Cancel>Don&apos;t allow</AlertDialog.Cancel>\n\t\t\t\t\t\t\t<AlertDialog.Action>Allow</AlertDialog.Action>\n\t\t\t\t\t\t</AlertDialog.Footer>\n\t\t\t\t\t</AlertDialog.Content>\n\t\t\t\t</AlertDialog.Root>\n\t\t\t</div>\n\t\t</Empty.Content>\n\t</Empty.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/home/field-examples.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport { Input } from \"$lib/registry/ui/input/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport { Checkbox } from \"$lib/registry/ui/checkbox/index.js\";\n\timport { Switch } from \"$lib/registry/ui/switch/index.js\";\n\timport { Slider } from \"$lib/registry/ui/slider/index.js\";\n\timport * as RadioGroup from \"$lib/registry/ui/radio-group/index.js\";\n\timport * as ButtonGroup from \"$lib/registry/ui/button-group/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\n\tlet gpuCount = $state(8);\n\tlet value = $state([200, 800]);\n\n\tfunction handleGpuAdjustment(adjustment: number) {\n\t\tgpuCount = Math.max(1, Math.min(99, gpuCount + adjustment));\n\t}\n\n\tfunction handleGpuInputChange(e: Event) {\n\t\tconst target = e.target as HTMLInputElement;\n\t\tconst val = parseInt(target.value, 10);\n\t\tif (!isNaN(val) && val >= 1 && val <= 99) {\n\t\t\tgpuCount = val;\n\t\t}\n\t}\n</script>\n\n<Example title=\"Fields\">\n\t<Field.Set class=\"w-full max-w-md\">\n\t\t<Field.Group>\n\t\t\t<Field.Set>\n\t\t\t\t<Field.Legend>Compute Environment</Field.Legend>\n\t\t\t\t<Field.Description\n\t\t\t\t\t>Select the compute environment for your cluster.</Field.Description\n\t\t\t\t>\n\t\t\t\t<RadioGroup.Root value=\"kubernetes\">\n\t\t\t\t\t<Field.Label for=\"kubernetes-r2h\">\n\t\t\t\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t\t\t\t<Field.Content>\n\t\t\t\t\t\t\t\t<Field.Title>Kubernetes</Field.Title>\n\t\t\t\t\t\t\t\t<Field.Description>\n\t\t\t\t\t\t\t\t\tRun GPU workloads on a K8s configured cluster. This is the\n\t\t\t\t\t\t\t\t\tdefault.\n\t\t\t\t\t\t\t\t</Field.Description>\n\t\t\t\t\t\t\t</Field.Content>\n\t\t\t\t\t\t\t<RadioGroup.Item\n\t\t\t\t\t\t\t\tvalue=\"kubernetes\"\n\t\t\t\t\t\t\t\tid=\"kubernetes-r2h\"\n\t\t\t\t\t\t\t\taria-label=\"Kubernetes\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</Field.Field>\n\t\t\t\t\t</Field.Label>\n\t\t\t\t\t<Field.Label for=\"vm-z4k\">\n\t\t\t\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t\t\t\t<Field.Content>\n\t\t\t\t\t\t\t\t<Field.Title>Virtual Machine</Field.Title>\n\t\t\t\t\t\t\t\t<Field.Description>\n\t\t\t\t\t\t\t\t\tAccess a VM configured cluster to run workloads. (Coming soon)\n\t\t\t\t\t\t\t\t</Field.Description>\n\t\t\t\t\t\t\t</Field.Content>\n\t\t\t\t\t\t\t<RadioGroup.Item value=\"vm\" id=\"vm-z4k\" aria-label=\"Virtual Machine\" />\n\t\t\t\t\t\t</Field.Field>\n\t\t\t\t\t</Field.Label>\n\t\t\t\t</RadioGroup.Root>\n\t\t\t</Field.Set>\n\t\t\t<Field.Separator />\n\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t<Field.Content>\n\t\t\t\t\t<Field.Label for=\"number-of-gpus-f6l\">Number of GPUs</Field.Label>\n\t\t\t\t\t<Field.Description>You can add more later.</Field.Description>\n\t\t\t\t</Field.Content>\n\t\t\t\t<ButtonGroup.Root>\n\t\t\t\t\t<Input\n\t\t\t\t\t\tid=\"number-of-gpus-f6l\"\n\t\t\t\t\t\tvalue={gpuCount}\n\t\t\t\t\t\toninput={handleGpuInputChange}\n\t\t\t\t\t\tsize={3}\n\t\t\t\t\t\tmaxlength={3}\n\t\t\t\t\t/>\n\t\t\t\t\t<Button\n\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\tsize=\"icon\"\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\taria-label=\"Decrement\"\n\t\t\t\t\t\tonclick={() => handleGpuAdjustment(-1)}\n\t\t\t\t\t\tdisabled={gpuCount <= 1}\n\t\t\t\t\t>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"MinusIcon\"\n\t\t\t\t\t\t\ttabler=\"IconMinus\"\n\t\t\t\t\t\t\thugeicons=\"MinusSignIcon\"\n\t\t\t\t\t\t\tphosphor=\"MinusIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiSubtractLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Button>\n\t\t\t\t\t<Button\n\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\tsize=\"icon\"\n\t\t\t\t\t\ttype=\"button\"\n\t\t\t\t\t\taria-label=\"Increment\"\n\t\t\t\t\t\tonclick={() => handleGpuAdjustment(1)}\n\t\t\t\t\t\tdisabled={gpuCount >= 99}\n\t\t\t\t\t>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"PlusIcon\"\n\t\t\t\t\t\t\ttabler=\"IconPlus\"\n\t\t\t\t\t\t\thugeicons=\"PlusSignIcon\"\n\t\t\t\t\t\t\tphosphor=\"PlusIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiAddLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Button>\n\t\t\t\t</ButtonGroup.Root>\n\t\t\t</Field.Field>\n\t\t\t<Field.Separator />\n\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t<Field.Content>\n\t\t\t\t\t<Field.Label for=\"tinting\">Wallpaper Tinting</Field.Label>\n\t\t\t\t\t<Field.Description>Allow the wallpaper to be tinted.</Field.Description>\n\t\t\t\t</Field.Content>\n\t\t\t\t<Switch id=\"tinting\" checked={true} />\n\t\t\t</Field.Field>\n\t\t\t<Field.Separator />\n\t\t\t<Field.Label for=\"checkbox-demo\">\n\t\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t\t<Checkbox id=\"checkbox-demo\" checked={true} />\n\t\t\t\t\t<Field.Label for=\"checkbox-demo\" class=\"line-clamp-1\">\n\t\t\t\t\t\tI agree to the terms and conditions\n\t\t\t\t\t</Field.Label>\n\t\t\t\t</Field.Field>\n\t\t\t</Field.Label>\n\t\t\t<Field.Field>\n\t\t\t\t<Field.Title>Price Range</Field.Title>\n\t\t\t\t<Field.Description>\n\t\t\t\t\tSet your budget range ($\n\t\t\t\t\t<span class=\"font-medium tabular-nums\">{value[0]}</span> -\n\t\t\t\t\t<span class=\"font-medium tabular-nums\">{value[1]}</span>).\n\t\t\t\t</Field.Description>\n\t\t\t\t<Slider\n\t\t\t\t\ttype=\"multiple\"\n\t\t\t\t\tbind:value\n\t\t\t\t\tmax={1000}\n\t\t\t\t\tmin={0}\n\t\t\t\t\tstep={10}\n\t\t\t\t\tclass=\"mt-2 w-full\"\n\t\t\t\t\taria-label=\"Price Range\"\n\t\t\t\t/>\n\t\t\t</Field.Field>\n\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t<Button type=\"submit\">Submit</Button>\n\t\t\t\t<Button variant=\"outline\" type=\"button\">Cancel</Button>\n\t\t\t</Field.Field>\n\t\t</Field.Group>\n\t</Field.Set>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/home/form-example.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport { Input } from \"$lib/registry/ui/input/index.js\";\n\timport { Textarea } from \"$lib/registry/ui/textarea/index.js\";\n\timport { Checkbox } from \"$lib/registry/ui/checkbox/index.js\";\n\timport * as Select from \"$lib/registry/ui/select/index.js\";\n\n\tconst monthItems = [\n\t\t{ label: \"01\", value: \"01\" },\n\t\t{ label: \"02\", value: \"02\" },\n\t\t{ label: \"03\", value: \"03\" },\n\t\t{ label: \"04\", value: \"04\" },\n\t\t{ label: \"05\", value: \"05\" },\n\t\t{ label: \"06\", value: \"06\" },\n\t\t{ label: \"07\", value: \"07\" },\n\t\t{ label: \"08\", value: \"08\" },\n\t\t{ label: \"09\", value: \"09\" },\n\t\t{ label: \"10\", value: \"10\" },\n\t\t{ label: \"11\", value: \"11\" },\n\t\t{ label: \"12\", value: \"12\" },\n\t];\n\n\tconst yearItems = [\n\t\t{ label: \"2024\", value: \"2024\" },\n\t\t{ label: \"2025\", value: \"2025\" },\n\t\t{ label: \"2026\", value: \"2026\" },\n\t\t{ label: \"2027\", value: \"2027\" },\n\t\t{ label: \"2028\", value: \"2028\" },\n\t\t{ label: \"2029\", value: \"2029\" },\n\t];\n\n\tlet month = $state<string | undefined>(undefined);\n\tlet year = $state<string | undefined>(undefined);\n\n\tconst monthLabel = $derived(monthItems.find((item) => item.value === month)?.label ?? \"MM\");\n\tconst yearLabel = $derived(yearItems.find((item) => item.value === year)?.label ?? \"YYYY\");\n</script>\n\n<Example title=\"Complex Form\">\n\t<Card.Root class=\"w-full max-w-md\">\n\t\t<Card.Header>\n\t\t\t<Card.Title>Payment Method</Card.Title>\n\t\t\t<Card.Description>All transactions are secure and encrypted</Card.Description>\n\t\t</Card.Header>\n\t\t<Card.Content>\n\t\t\t<form>\n\t\t\t\t<Field.Group>\n\t\t\t\t\t<Field.Set>\n\t\t\t\t\t\t<Field.Group>\n\t\t\t\t\t\t\t<Field.Field>\n\t\t\t\t\t\t\t\t<Field.Label for=\"checkout-7j9-card-name-43j\"\n\t\t\t\t\t\t\t\t\t>Name on Card</Field.Label\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t\t\tid=\"checkout-7j9-card-name-43j\"\n\t\t\t\t\t\t\t\t\tplaceholder=\"John Doe\"\n\t\t\t\t\t\t\t\t\trequired\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</Field.Field>\n\t\t\t\t\t\t\t<div class=\"grid grid-cols-3 gap-4\">\n\t\t\t\t\t\t\t\t<Field.Field class=\"col-span-2\">\n\t\t\t\t\t\t\t\t\t<Field.Label for=\"checkout-7j9-card-number-uw1\">\n\t\t\t\t\t\t\t\t\t\tCard Number\n\t\t\t\t\t\t\t\t\t</Field.Label>\n\t\t\t\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t\t\t\tid=\"checkout-7j9-card-number-uw1\"\n\t\t\t\t\t\t\t\t\t\tplaceholder=\"1234 5678 9012 3456\"\n\t\t\t\t\t\t\t\t\t\trequired\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<Field.Description\n\t\t\t\t\t\t\t\t\t\t>Enter your 16-digit number.</Field.Description\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t</Field.Field>\n\t\t\t\t\t\t\t\t<Field.Field class=\"col-span-1\">\n\t\t\t\t\t\t\t\t\t<Field.Label for=\"checkout-7j9-cvv\">CVV</Field.Label>\n\t\t\t\t\t\t\t\t\t<Input id=\"checkout-7j9-cvv\" placeholder=\"123\" required />\n\t\t\t\t\t\t\t\t</Field.Field>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"grid grid-cols-2 gap-4\">\n\t\t\t\t\t\t\t\t<Field.Field>\n\t\t\t\t\t\t\t\t\t<Field.Label for=\"checkout-7j9-exp-month-ts6\">Month</Field.Label\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<Select.Root type=\"single\" bind:value={month}>\n\t\t\t\t\t\t\t\t\t\t<Select.Trigger id=\"checkout-7j9-exp-month-ts6\">\n\t\t\t\t\t\t\t\t\t\t\t{monthLabel}\n\t\t\t\t\t\t\t\t\t\t</Select.Trigger>\n\t\t\t\t\t\t\t\t\t\t<Select.Content>\n\t\t\t\t\t\t\t\t\t\t\t<Select.Group>\n\t\t\t\t\t\t\t\t\t\t\t\t{#each monthItems as item (item.value)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Select.Item value={item.value}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t>{item.label}</Select.Item\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t\t\t\t\t</Select.Group>\n\t\t\t\t\t\t\t\t\t\t</Select.Content>\n\t\t\t\t\t\t\t\t\t</Select.Root>\n\t\t\t\t\t\t\t\t</Field.Field>\n\t\t\t\t\t\t\t\t<Field.Field>\n\t\t\t\t\t\t\t\t\t<Field.Label for=\"checkout-7j9-exp-year-f59\">Year</Field.Label>\n\t\t\t\t\t\t\t\t\t<Select.Root type=\"single\" bind:value={year}>\n\t\t\t\t\t\t\t\t\t\t<Select.Trigger id=\"checkout-7j9-exp-year-f59\">\n\t\t\t\t\t\t\t\t\t\t\t{yearLabel}\n\t\t\t\t\t\t\t\t\t\t</Select.Trigger>\n\t\t\t\t\t\t\t\t\t\t<Select.Content>\n\t\t\t\t\t\t\t\t\t\t\t<Select.Group>\n\t\t\t\t\t\t\t\t\t\t\t\t{#each yearItems as item (item.value)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Select.Item value={item.value}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t>{item.label}</Select.Item\n\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t\t\t\t\t</Select.Group>\n\t\t\t\t\t\t\t\t\t\t</Select.Content>\n\t\t\t\t\t\t\t\t\t</Select.Root>\n\t\t\t\t\t\t\t\t</Field.Field>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</Field.Group>\n\t\t\t\t\t</Field.Set>\n\t\t\t\t\t<Field.Separator />\n\t\t\t\t\t<Field.Set>\n\t\t\t\t\t\t<Field.Legend>Billing Address</Field.Legend>\n\t\t\t\t\t\t<Field.Description>\n\t\t\t\t\t\t\tThe billing address associated with your payment.\n\t\t\t\t\t\t</Field.Description>\n\t\t\t\t\t\t<Field.Group>\n\t\t\t\t\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t\t\t\t\t<Checkbox id=\"checkout-7j9-same-as-shipping-wgm\" checked={true} />\n\t\t\t\t\t\t\t\t<Field.Label\n\t\t\t\t\t\t\t\t\tfor=\"checkout-7j9-same-as-shipping-wgm\"\n\t\t\t\t\t\t\t\t\tclass=\"font-normal\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\tSame as shipping address\n\t\t\t\t\t\t\t\t</Field.Label>\n\t\t\t\t\t\t\t</Field.Field>\n\t\t\t\t\t\t</Field.Group>\n\t\t\t\t\t</Field.Set>\n\t\t\t\t\t<Field.Separator />\n\t\t\t\t\t<Field.Set>\n\t\t\t\t\t\t<Field.Group>\n\t\t\t\t\t\t\t<Field.Field>\n\t\t\t\t\t\t\t\t<Field.Label for=\"checkout-7j9-optional-comments\"\n\t\t\t\t\t\t\t\t\t>Comments</Field.Label\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<Textarea\n\t\t\t\t\t\t\t\t\tid=\"checkout-7j9-optional-comments\"\n\t\t\t\t\t\t\t\t\tplaceholder=\"Add any additional comments\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</Field.Field>\n\t\t\t\t\t\t</Field.Group>\n\t\t\t\t\t</Field.Set>\n\t\t\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t\t\t<Button type=\"submit\">Submit</Button>\n\t\t\t\t\t\t<Button variant=\"outline\" type=\"button\">Cancel</Button>\n\t\t\t\t\t</Field.Field>\n\t\t\t\t</Field.Group>\n\t\t\t</form>\n\t\t</Card.Content>\n\t</Card.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/home/home.svelte",
    "content": "<script lang=\"ts\">\n\timport ExampleWrapper from \"../../../../../routes/(app)/(layout)/(create)/components/example-wrapper.svelte\";\n\timport ObservabilityCard from \"./observability-card.svelte\";\n\timport SmallFormExample from \"./small-form-example.svelte\";\n\timport FormExample from \"./form-example.svelte\";\n\timport FieldExamples from \"./field-examples.svelte\";\n\timport ItemExample from \"./item-example.svelte\";\n\timport ButtonGroupExamples from \"./button-group-examples.svelte\";\n\timport EmptyAvatarGroup from \"./empty-avatar-group.svelte\";\n\timport InputGroupExamples from \"./input-group-examples.svelte\";\n\timport SheetExample from \"./sheet-example.svelte\";\n\timport BadgeExamples from \"./badge-examples.svelte\";\n</script>\n\n<ExampleWrapper>\n\t<ObservabilityCard />\n\t<SmallFormExample />\n\t<FormExample />\n\t<FieldExamples />\n\t<ItemExample />\n\t<ButtonGroupExamples />\n\t<EmptyAvatarGroup />\n\t<InputGroupExamples />\n\t<SheetExample />\n\t<BadgeExamples />\n</ExampleWrapper>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/home/input-group-examples.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as InputGroup from \"$lib/registry/ui/input-group/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport { Label } from \"$lib/registry/ui/label/index.js\";\n\timport * as Tooltip from \"$lib/registry/ui/tooltip/index.js\";\n\timport * as Popover from \"$lib/registry/ui/popover/index.js\";\n\timport * as ButtonGroup from \"$lib/registry/ui/button-group/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\timport { Separator } from \"$lib/registry/ui/separator/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\n\tlet isFavorite = $state(false);\n\tlet voiceEnabled = $state(false);\n</script>\n\n<Example title=\"Input Group\">\n\t<div class=\"flex flex-col gap-6\">\n\t\t<InputGroup.Root>\n\t\t\t<InputGroup.Input placeholder=\"Search...\" />\n\t\t\t<InputGroup.Addon>\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"SearchIcon\"\n\t\t\t\t\ttabler=\"IconSearch\"\n\t\t\t\t\thugeicons=\"Search01Icon\"\n\t\t\t\t\tphosphor=\"MagnifyingGlassIcon\"\n\t\t\t\t\tremixicon=\"RiSearchLine\"\n\t\t\t\t/>\n\t\t\t</InputGroup.Addon>\n\t\t\t<InputGroup.Addon align=\"inline-end\">12 results</InputGroup.Addon>\n\t\t</InputGroup.Root>\n\t\t<InputGroup.Root>\n\t\t\t<InputGroup.Input placeholder=\"example.com\" class=\"pl-1!\" />\n\t\t\t<InputGroup.Addon>\n\t\t\t\t<InputGroup.Text>https://</InputGroup.Text>\n\t\t\t</InputGroup.Addon>\n\t\t\t<InputGroup.Addon align=\"inline-end\">\n\t\t\t\t<Tooltip.Root>\n\t\t\t\t\t<Tooltip.Trigger>\n\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t<InputGroup.Button\n\t\t\t\t\t\t\t\tclass=\"rounded-full\"\n\t\t\t\t\t\t\t\tsize=\"icon-xs\"\n\t\t\t\t\t\t\t\taria-label=\"Info\"\n\t\t\t\t\t\t\t\t{...props}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\tlucide=\"InfoIcon\"\n\t\t\t\t\t\t\t\t\ttabler=\"IconInfoCircle\"\n\t\t\t\t\t\t\t\t\thugeicons=\"AlertCircleIcon\"\n\t\t\t\t\t\t\t\t\tphosphor=\"InfoIcon\"\n\t\t\t\t\t\t\t\t\tremixicon=\"RiInformationLine\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</InputGroup.Button>\n\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t</Tooltip.Trigger>\n\t\t\t\t\t<Tooltip.Content>This is content in a tooltip.</Tooltip.Content>\n\t\t\t\t</Tooltip.Root>\n\t\t\t</InputGroup.Addon>\n\t\t</InputGroup.Root>\n\t\t<Field.Field>\n\t\t\t<Label for=\"input-secure-19\" class=\"sr-only\">Input Secure</Label>\n\t\t\t<InputGroup.Root>\n\t\t\t\t<InputGroup.Input id=\"input-secure-19\" class=\"pl-0.5!\" />\n\t\t\t\t<InputGroup.Addon>\n\t\t\t\t\t<Popover.Root>\n\t\t\t\t\t\t<Popover.Trigger>\n\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t<InputGroup.Button\n\t\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\t\tsize=\"icon-xs\"\n\t\t\t\t\t\t\t\t\taria-label=\"Info\"\n\t\t\t\t\t\t\t\t\t{...props}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\tlucide=\"InfoIcon\"\n\t\t\t\t\t\t\t\t\t\ttabler=\"IconInfoCircle\"\n\t\t\t\t\t\t\t\t\t\thugeicons=\"AlertCircleIcon\"\n\t\t\t\t\t\t\t\t\t\tphosphor=\"InfoIcon\"\n\t\t\t\t\t\t\t\t\t\tremixicon=\"RiInformationLine\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</InputGroup.Button>\n\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t</Popover.Trigger>\n\t\t\t\t\t\t<Popover.Content\n\t\t\t\t\t\t\talign=\"start\"\n\t\t\t\t\t\t\talignOffset={10}\n\t\t\t\t\t\t\tclass=\"flex flex-col gap-1 rounded-xl text-sm\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<p class=\"font-medium\">Your connection is not secure.</p>\n\t\t\t\t\t\t\t<p>You should not enter any sensitive information on this site.</p>\n\t\t\t\t\t\t</Popover.Content>\n\t\t\t\t\t</Popover.Root>\n\t\t\t\t</InputGroup.Addon>\n\t\t\t\t<InputGroup.Addon class=\"text-muted-foreground pl-1!\">https://</InputGroup.Addon>\n\t\t\t\t<InputGroup.Addon align=\"inline-end\">\n\t\t\t\t\t<InputGroup.Button\n\t\t\t\t\t\tonclick={() => (isFavorite = !isFavorite)}\n\t\t\t\t\t\tsize=\"icon-xs\"\n\t\t\t\t\t\taria-label=\"Favorite\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"StarIcon\"\n\t\t\t\t\t\t\ttabler=\"IconStar\"\n\t\t\t\t\t\t\thugeicons=\"StarIcon\"\n\t\t\t\t\t\t\tphosphor=\"StarIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiStarLine\"\n\t\t\t\t\t\t\tdata-favorite={isFavorite}\n\t\t\t\t\t\t\tclass=\"data-[favorite=true]:fill-primary data-[favorite=true]:stroke-primary\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</InputGroup.Button>\n\t\t\t\t</InputGroup.Addon>\n\t\t\t</InputGroup.Root>\n\t\t</Field.Field>\n\t\t<ButtonGroup.Root class=\"w-full\">\n\t\t\t<ButtonGroup.Root>\n\t\t\t\t<Button variant=\"outline\" size=\"icon\" aria-label=\"Add\">\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"PlusIcon\"\n\t\t\t\t\t\ttabler=\"IconPlus\"\n\t\t\t\t\t\thugeicons=\"PlusSignIcon\"\n\t\t\t\t\t\tphosphor=\"PlusIcon\"\n\t\t\t\t\t\tremixicon=\"RiAddLine\"\n\t\t\t\t\t/>\n\t\t\t\t</Button>\n\t\t\t</ButtonGroup.Root>\n\t\t\t<ButtonGroup.Root class=\"flex-1\">\n\t\t\t\t<InputGroup.Root>\n\t\t\t\t\t<InputGroup.Input\n\t\t\t\t\t\tplaceholder={voiceEnabled\n\t\t\t\t\t\t\t? \"Record and send audio...\"\n\t\t\t\t\t\t\t: \"Send a message...\"}\n\t\t\t\t\t\tdisabled={voiceEnabled}\n\t\t\t\t\t/>\n\t\t\t\t\t<InputGroup.Addon align=\"inline-end\">\n\t\t\t\t\t\t<Tooltip.Root>\n\t\t\t\t\t\t\t<Tooltip.Trigger>\n\t\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t\t<InputGroup.Button\n\t\t\t\t\t\t\t\t\t\tonclick={() => (voiceEnabled = !voiceEnabled)}\n\t\t\t\t\t\t\t\t\t\tdata-active={voiceEnabled}\n\t\t\t\t\t\t\t\t\t\tclass=\"data-[active=true]:bg-primary data-[active=true]:text-primary-foreground\"\n\t\t\t\t\t\t\t\t\t\taria-pressed={voiceEnabled}\n\t\t\t\t\t\t\t\t\t\tsize=\"icon-xs\"\n\t\t\t\t\t\t\t\t\t\taria-label=\"Voice Mode\"\n\t\t\t\t\t\t\t\t\t\t{...props}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\t\tlucide=\"AudioLinesIcon\"\n\t\t\t\t\t\t\t\t\t\t\ttabler=\"IconWaveSine\"\n\t\t\t\t\t\t\t\t\t\t\thugeicons=\"AudioWave01Icon\"\n\t\t\t\t\t\t\t\t\t\t\tphosphor=\"MicrophoneIcon\"\n\t\t\t\t\t\t\t\t\t\t\tremixicon=\"RiMicLine\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</InputGroup.Button>\n\t\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t\t</Tooltip.Trigger>\n\t\t\t\t\t\t\t<Tooltip.Content>Voice Mode</Tooltip.Content>\n\t\t\t\t\t\t</Tooltip.Root>\n\t\t\t\t\t</InputGroup.Addon>\n\t\t\t\t</InputGroup.Root>\n\t\t\t</ButtonGroup.Root>\n\t\t</ButtonGroup.Root>\n\t\t<InputGroup.Root>\n\t\t\t<InputGroup.Textarea placeholder=\"Ask, Search or Chat...\" />\n\t\t\t<InputGroup.Addon align=\"block-end\">\n\t\t\t\t<InputGroup.Button\n\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\tclass=\"style-lyra:rounded-none rounded-full\"\n\t\t\t\t\tsize=\"icon-xs\"\n\t\t\t\t\taria-label=\"Add\"\n\t\t\t\t>\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"PlusIcon\"\n\t\t\t\t\t\ttabler=\"IconPlus\"\n\t\t\t\t\t\thugeicons=\"PlusSignIcon\"\n\t\t\t\t\t\tphosphor=\"PlusIcon\"\n\t\t\t\t\t\tremixicon=\"RiAddLine\"\n\t\t\t\t\t/>\n\t\t\t\t</InputGroup.Button>\n\t\t\t\t<DropdownMenu.Root>\n\t\t\t\t\t<DropdownMenu.Trigger>\n\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t<InputGroup.Button variant=\"ghost\" {...props}>Auto</InputGroup.Button>\n\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t</DropdownMenu.Trigger>\n\t\t\t\t\t<DropdownMenu.Content side=\"top\" align=\"start\" class=\"[--radius:0.95rem]\">\n\t\t\t\t\t\t<DropdownMenu.Group>\n\t\t\t\t\t\t\t<DropdownMenu.Item>Auto</DropdownMenu.Item>\n\t\t\t\t\t\t\t<DropdownMenu.Item>Agent</DropdownMenu.Item>\n\t\t\t\t\t\t\t<DropdownMenu.Item>Manual</DropdownMenu.Item>\n\t\t\t\t\t\t</DropdownMenu.Group>\n\t\t\t\t\t</DropdownMenu.Content>\n\t\t\t\t</DropdownMenu.Root>\n\t\t\t\t<InputGroup.Text class=\"ml-auto\">52% used</InputGroup.Text>\n\t\t\t\t<Separator orientation=\"vertical\" class=\"h-4!\" />\n\t\t\t\t<InputGroup.Button\n\t\t\t\t\tvariant=\"default\"\n\t\t\t\t\tclass=\"style-lyra:rounded-none rounded-full\"\n\t\t\t\t\tsize=\"icon-xs\"\n\t\t\t\t>\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"ArrowUpIcon\"\n\t\t\t\t\t\ttabler=\"IconArrowUp\"\n\t\t\t\t\t\thugeicons=\"ArrowUp01Icon\"\n\t\t\t\t\t\tphosphor=\"ArrowUpIcon\"\n\t\t\t\t\t\tremixicon=\"RiArrowUpLine\"\n\t\t\t\t\t/>\n\t\t\t\t\t<span class=\"sr-only\">Send</span>\n\t\t\t\t</InputGroup.Button>\n\t\t\t</InputGroup.Addon>\n\t\t</InputGroup.Root>\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/home/item-example.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Item from \"$lib/registry/ui/item/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Example title=\"Item\">\n\t<div class=\"flex w-full max-w-md flex-col gap-6\">\n\t\t<Item.Root variant=\"outline\">\n\t\t\t<Item.Content>\n\t\t\t\t<Item.Title>Two-factor authentication</Item.Title>\n\t\t\t\t<Item.Description class=\"text-pretty xl:hidden 2xl:block\">\n\t\t\t\t\tVerify via email or phone number.\n\t\t\t\t</Item.Description>\n\t\t\t</Item.Content>\n\t\t\t<Item.Actions>\n\t\t\t\t<Button size=\"sm\" variant=\"secondary\">Enable</Button>\n\t\t\t</Item.Actions>\n\t\t</Item.Root>\n\t\t<Item.Root variant=\"outline\" size=\"sm\">\n\t\t\t{#snippet child({ props })}\n\t\t\t\t<a href=\"#/\" {...props}>\n\t\t\t\t\t<Item.Media variant=\"icon\">\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"ShoppingBagIcon\"\n\t\t\t\t\t\t\ttabler=\"IconShoppingBag\"\n\t\t\t\t\t\t\thugeicons=\"ShoppingBasket01Icon\"\n\t\t\t\t\t\t\tphosphor=\"BagIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiShoppingBagLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Item.Media>\n\t\t\t\t\t<Item.Content>\n\t\t\t\t\t\t<Item.Title>Your order has been shipped.</Item.Title>\n\t\t\t\t\t</Item.Content>\n\t\t\t\t</a>\n\t\t\t{/snippet}\n\t\t</Item.Root>\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/home/observability-card.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport { Badge } from \"$lib/registry/ui/badge/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Example title=\"Card\" class=\"items-center justify-center\">\n\t<Card.Root class=\"relative w-full max-w-sm overflow-hidden pt-0\">\n\t\t<div class=\"bg-primary absolute inset-0 z-30 aspect-video opacity-50 mix-blend-color\"></div>\n\t\t<img\n\t\t\tsrc=\"https://images.unsplash.com/photo-1604076850742-4c7221f3101b?q=80&w=1887&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D\"\n\t\t\talt=\"by mymind on Unsplash\"\n\t\t\ttitle=\"Photo by mymind on Unsplash\"\n\t\t\tclass=\"relative z-20 aspect-video w-full object-cover brightness-60 grayscale\"\n\t\t/>\n\t\t<Card.Header>\n\t\t\t<Card.Title>Observability Plus is replacing Monitoring</Card.Title>\n\t\t\t<Card.Description>\n\t\t\t\tSwitch to the improved way to explore your data, with natural language. Monitoring\n\t\t\t\twill no longer be available on the Pro plan in November, 2025\n\t\t\t</Card.Description>\n\t\t</Card.Header>\n\t\t<Card.Footer>\n\t\t\t<Button>\n\t\t\t\tCreate Query\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"PlusIcon\"\n\t\t\t\t\ttabler=\"IconPlus\"\n\t\t\t\t\thugeicons=\"PlusSignIcon\"\n\t\t\t\t\tphosphor=\"PlusIcon\"\n\t\t\t\t\tremixicon=\"RiAddLine\"\n\t\t\t\t\tdata-icon=\"inline-end\"\n\t\t\t\t/>\n\t\t\t</Button>\n\t\t\t<Badge variant=\"secondary\" class=\"ml-auto\">Warning</Badge>\n\t\t</Card.Footer>\n\t</Card.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/home/sheet-example.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Sheet from \"$lib/registry/ui/sheet/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\n\tconst SHEET_SIDES = [\"top\", \"right\", \"bottom\", \"left\"] as const;\n</script>\n\n<Example title=\"Sheet\">\n\t<div class=\"flex gap-2\">\n\t\t{#each SHEET_SIDES as side (side)}\n\t\t\t<Sheet.Root>\n\t\t\t\t<Sheet.Trigger>\n\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t<Button variant=\"secondary\" class=\"flex-1 capitalize\" {...props}>\n\t\t\t\t\t\t\t{side}\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t{/snippet}\n\t\t\t\t</Sheet.Trigger>\n\t\t\t\t<Sheet.Content\n\t\t\t\t\t{side}\n\t\t\t\t\tclass=\"data-[side=bottom]:max-h-[50vh] data-[side=top]:max-h-[50vh]\"\n\t\t\t\t>\n\t\t\t\t\t<Sheet.Header>\n\t\t\t\t\t\t<Sheet.Title>Edit profile</Sheet.Title>\n\t\t\t\t\t\t<Sheet.Description>\n\t\t\t\t\t\t\tMake changes to your profile here. Click save when you&apos;re done.\n\t\t\t\t\t\t</Sheet.Description>\n\t\t\t\t\t</Sheet.Header>\n\t\t\t\t\t<div class=\"overflow-y-auto px-4 text-sm\">\n\t\t\t\t\t\t{#each Array.from({ length: 10 }) as _, index (index)}\n\t\t\t\t\t\t\t<p\n\t\t\t\t\t\t\t\tclass=\"style-lyra:mb-2 style-lyra:leading-relaxed mb-4 leading-normal\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tLorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do\n\t\t\t\t\t\t\t\teiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim\n\t\t\t\t\t\t\t\tad minim veniam, quis nostrud exercitation ullamco laboris nisi ut\n\t\t\t\t\t\t\t\taliquip ex ea commodo consequat. Duis aute irure dolor in\n\t\t\t\t\t\t\t\treprehenderit in voluptate velit esse cillum dolore eu fugiat nulla\n\t\t\t\t\t\t\t\tpariatur. Excepteur sint occaecat cupidatat non proident, sunt in\n\t\t\t\t\t\t\t\tculpa qui officia deserunt mollit anim id est laborum.\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</div>\n\t\t\t\t\t<Sheet.Footer>\n\t\t\t\t\t\t<Button type=\"submit\">Save changes</Button>\n\t\t\t\t\t\t<Sheet.Close>\n\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t<Button variant=\"outline\" {...props}>Cancel</Button>\n\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t</Sheet.Close>\n\t\t\t\t\t</Sheet.Footer>\n\t\t\t\t</Sheet.Content>\n\t\t\t</Sheet.Root>\n\t\t{/each}\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/home/small-form-example.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport { Input } from \"$lib/registry/ui/input/index.js\";\n\timport { Textarea } from \"$lib/registry/ui/textarea/index.js\";\n\timport * as Select from \"$lib/registry/ui/select/index.js\";\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\timport * as Command from \"$lib/registry/ui/command/index.js\";\n\timport * as Popover from \"$lib/registry/ui/popover/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\timport { tick } from \"svelte\";\n\timport { cn } from \"$lib/utils.js\";\n\timport { setMode } from \"mode-watcher\";\n\timport { buttonVariants } from \"$lib/registry/ui/button/index.js\";\n\n\tconst frameworks = [\"Next.js\", \"SvelteKit\", \"Nuxt.js\", \"Remix\", \"Astro\"] as const;\n\n\tconst roleItems = [\n\t\t{ label: \"Developer\", value: \"developer\" },\n\t\t{ label: \"Designer\", value: \"designer\" },\n\t\t{ label: \"Manager\", value: \"manager\" },\n\t\t{ label: \"Other\", value: \"other\" },\n\t];\n\n\tlet notifications = $state({\n\t\temail: true,\n\t\tsms: false,\n\t\tpush: true,\n\t});\n\tlet theme = $state(\"light\");\n\tlet frameworkOpen = $state(false);\n\tlet frameworkValue = $state(\"\");\n\tlet role = $state<string | undefined>(undefined);\n\tlet triggerRef = $state<HTMLButtonElement>(null!);\n\n\tconst selectedFramework = $derived(\n\t\tframeworks.find((f) => f.toLowerCase() === frameworkValue) || \"\"\n\t);\n\n\tfunction closeAndFocusTrigger() {\n\t\tframeworkOpen = false;\n\t\ttick().then(() => {\n\t\t\ttriggerRef.focus();\n\t\t});\n\t}\n\n\tconst roleLabel = $derived(\n\t\troleItems.find((item) => item.value === role)?.label ?? \"Select role\"\n\t);\n</script>\n\n<Example title=\"Form\">\n\t<Card.Root class=\"w-full max-w-md\">\n\t\t<Card.Header>\n\t\t\t<Card.Title>User Information</Card.Title>\n\t\t\t<Card.Description>Please fill in your details below</Card.Description>\n\t\t\t<Card.Action>\n\t\t\t\t<DropdownMenu.Root>\n\t\t\t\t\t<DropdownMenu.Trigger>\n\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t<Button variant=\"ghost\" size=\"icon\" {...props}>\n\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\tlucide=\"MoreVerticalIcon\"\n\t\t\t\t\t\t\t\t\ttabler=\"IconDotsVertical\"\n\t\t\t\t\t\t\t\t\thugeicons=\"MoreVerticalCircle01Icon\"\n\t\t\t\t\t\t\t\t\tphosphor=\"DotsThreeVerticalIcon\"\n\t\t\t\t\t\t\t\t\tremixicon=\"RiMore2Line\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<span class=\"sr-only\">More options</span>\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t</DropdownMenu.Trigger>\n\t\t\t\t\t<DropdownMenu.Content\n\t\t\t\t\t\talign=\"end\"\n\t\t\t\t\t\tclass=\"style-maia:w-56 style-mira:w-48 style-nova:w-48 style-vega:w-56 style-lyra:w-48\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<DropdownMenu.Group>\n\t\t\t\t\t\t\t<DropdownMenu.Label>File</DropdownMenu.Label>\n\t\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\tlucide=\"FileIcon\"\n\t\t\t\t\t\t\t\t\ttabler=\"IconFile\"\n\t\t\t\t\t\t\t\t\thugeicons=\"FileIcon\"\n\t\t\t\t\t\t\t\t\tphosphor=\"FileIcon\"\n\t\t\t\t\t\t\t\t\tremixicon=\"RiFileLine\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\tNew File\n\t\t\t\t\t\t\t\t<DropdownMenu.Shortcut>⌘N</DropdownMenu.Shortcut>\n\t\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\tlucide=\"FolderIcon\"\n\t\t\t\t\t\t\t\t\ttabler=\"IconFolder\"\n\t\t\t\t\t\t\t\t\thugeicons=\"FolderIcon\"\n\t\t\t\t\t\t\t\t\tphosphor=\"FolderIcon\"\n\t\t\t\t\t\t\t\t\tremixicon=\"RiFolderLine\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\tNew Folder\n\t\t\t\t\t\t\t\t<DropdownMenu.Shortcut>⇧⌘N</DropdownMenu.Shortcut>\n\t\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t\t<DropdownMenu.Sub>\n\t\t\t\t\t\t\t\t<DropdownMenu.SubTrigger>\n\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\tlucide=\"FolderOpenIcon\"\n\t\t\t\t\t\t\t\t\t\ttabler=\"IconFolderOpen\"\n\t\t\t\t\t\t\t\t\t\thugeicons=\"FolderOpenIcon\"\n\t\t\t\t\t\t\t\t\t\tphosphor=\"FolderOpenIcon\"\n\t\t\t\t\t\t\t\t\t\tremixicon=\"RiFolderOpenLine\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\tOpen Recent\n\t\t\t\t\t\t\t\t</DropdownMenu.SubTrigger>\n\t\t\t\t\t\t\t\t<DropdownMenu.Portal>\n\t\t\t\t\t\t\t\t\t<DropdownMenu.SubContent>\n\t\t\t\t\t\t\t\t\t\t<DropdownMenu.Group>\n\t\t\t\t\t\t\t\t\t\t\t<DropdownMenu.Label>Recent Projects</DropdownMenu.Label>\n\t\t\t\t\t\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\t\t\t\tlucide=\"FileCodeIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\ttabler=\"IconFileCode\"\n\t\t\t\t\t\t\t\t\t\t\t\t\thugeicons=\"CodeIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tphosphor=\"CodeIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tremixicon=\"RiFileCodeLine\"\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\tProject Alpha\n\t\t\t\t\t\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\t\t\t\tlucide=\"FileCodeIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\ttabler=\"IconFileCode\"\n\t\t\t\t\t\t\t\t\t\t\t\t\thugeicons=\"CodeIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tphosphor=\"CodeIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tremixicon=\"RiFileCodeLine\"\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\tProject Beta\n\t\t\t\t\t\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t\t\t\t\t\t<DropdownMenu.Sub>\n\t\t\t\t\t\t\t\t\t\t\t\t<DropdownMenu.SubTrigger>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tlucide=\"MoreHorizontalIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttabler=\"IconDots\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\thugeicons=\"MoreHorizontalCircle01Icon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tphosphor=\"DotsThreeOutlineIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tremixicon=\"RiMoreLine\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t\tMore Projects\n\t\t\t\t\t\t\t\t\t\t\t\t</DropdownMenu.SubTrigger>\n\t\t\t\t\t\t\t\t\t\t\t\t<DropdownMenu.Portal>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<DropdownMenu.SubContent>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tlucide=\"FileCodeIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttabler=\"IconFileCode\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\thugeicons=\"CodeIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tphosphor=\"CodeIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tremixicon=\"RiFileCodeLine\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tProject Gamma\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tlucide=\"FileCodeIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\ttabler=\"IconFileCode\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\thugeicons=\"CodeIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tphosphor=\"CodeIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tremixicon=\"RiFileCodeLine\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tProject Delta\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</DropdownMenu.SubContent>\n\t\t\t\t\t\t\t\t\t\t\t\t</DropdownMenu.Portal>\n\t\t\t\t\t\t\t\t\t\t\t</DropdownMenu.Sub>\n\t\t\t\t\t\t\t\t\t\t</DropdownMenu.Group>\n\t\t\t\t\t\t\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t\t\t\t\t\t\t<DropdownMenu.Group>\n\t\t\t\t\t\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\t\t\t\tlucide=\"FolderSearchIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\ttabler=\"IconFolderSearch\"\n\t\t\t\t\t\t\t\t\t\t\t\t\thugeicons=\"SearchIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tphosphor=\"MagnifyingGlassIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tremixicon=\"RiSearchLine\"\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\tBrowse...\n\t\t\t\t\t\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t\t\t\t\t</DropdownMenu.Group>\n\t\t\t\t\t\t\t\t\t</DropdownMenu.SubContent>\n\t\t\t\t\t\t\t\t</DropdownMenu.Portal>\n\t\t\t\t\t\t\t</DropdownMenu.Sub>\n\t\t\t\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\tlucide=\"SaveIcon\"\n\t\t\t\t\t\t\t\t\ttabler=\"IconDeviceFloppy\"\n\t\t\t\t\t\t\t\t\thugeicons=\"FloppyDiskIcon\"\n\t\t\t\t\t\t\t\t\tphosphor=\"FloppyDiskIcon\"\n\t\t\t\t\t\t\t\t\tremixicon=\"RiSaveLine\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\tSave\n\t\t\t\t\t\t\t\t<DropdownMenu.Shortcut>⌘S</DropdownMenu.Shortcut>\n\t\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\tlucide=\"DownloadIcon\"\n\t\t\t\t\t\t\t\t\ttabler=\"IconDownload\"\n\t\t\t\t\t\t\t\t\thugeicons=\"DownloadIcon\"\n\t\t\t\t\t\t\t\t\tphosphor=\"DownloadIcon\"\n\t\t\t\t\t\t\t\t\tremixicon=\"RiDownloadLine\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\tExport\n\t\t\t\t\t\t\t\t<DropdownMenu.Shortcut>⇧⌘E</DropdownMenu.Shortcut>\n\t\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t</DropdownMenu.Group>\n\t\t\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t\t\t<DropdownMenu.Group>\n\t\t\t\t\t\t\t<DropdownMenu.Label>View</DropdownMenu.Label>\n\t\t\t\t\t\t\t<DropdownMenu.CheckboxItem\n\t\t\t\t\t\t\t\tchecked={notifications.email}\n\t\t\t\t\t\t\t\tonCheckedChange={(checked) => {\n\t\t\t\t\t\t\t\t\tnotifications = { ...notifications, email: checked === true };\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\tlucide=\"EyeIcon\"\n\t\t\t\t\t\t\t\t\ttabler=\"IconEye\"\n\t\t\t\t\t\t\t\t\thugeicons=\"EyeIcon\"\n\t\t\t\t\t\t\t\t\tphosphor=\"EyeIcon\"\n\t\t\t\t\t\t\t\t\tremixicon=\"RiEyeLine\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\tShow Sidebar\n\t\t\t\t\t\t\t</DropdownMenu.CheckboxItem>\n\t\t\t\t\t\t\t<DropdownMenu.CheckboxItem\n\t\t\t\t\t\t\t\tchecked={notifications.sms}\n\t\t\t\t\t\t\t\tonCheckedChange={(checked) => {\n\t\t\t\t\t\t\t\t\tnotifications = { ...notifications, sms: checked === true };\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\tlucide=\"LayoutIcon\"\n\t\t\t\t\t\t\t\t\ttabler=\"IconLayout\"\n\t\t\t\t\t\t\t\t\thugeicons=\"LayoutIcon\"\n\t\t\t\t\t\t\t\t\tphosphor=\"LayoutIcon\"\n\t\t\t\t\t\t\t\t\tremixicon=\"RiLayoutLine\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\tShow Status Bar\n\t\t\t\t\t\t\t</DropdownMenu.CheckboxItem>\n\t\t\t\t\t\t\t<DropdownMenu.Sub>\n\t\t\t\t\t\t\t\t<DropdownMenu.SubTrigger>\n\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\tlucide=\"PaletteIcon\"\n\t\t\t\t\t\t\t\t\t\ttabler=\"IconPalette\"\n\t\t\t\t\t\t\t\t\t\thugeicons=\"PaintBoardIcon\"\n\t\t\t\t\t\t\t\t\t\tphosphor=\"PaletteIcon\"\n\t\t\t\t\t\t\t\t\t\tremixicon=\"RiPaletteLine\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\tTheme\n\t\t\t\t\t\t\t\t</DropdownMenu.SubTrigger>\n\t\t\t\t\t\t\t\t<DropdownMenu.Portal>\n\t\t\t\t\t\t\t\t\t<DropdownMenu.SubContent>\n\t\t\t\t\t\t\t\t\t\t<DropdownMenu.Group>\n\t\t\t\t\t\t\t\t\t\t\t<DropdownMenu.Label>Appearance</DropdownMenu.Label>\n\t\t\t\t\t\t\t\t\t\t\t<DropdownMenu.RadioGroup\n\t\t\t\t\t\t\t\t\t\t\t\tvalue={theme}\n\t\t\t\t\t\t\t\t\t\t\t\tonValueChange={(value) => {\n\t\t\t\t\t\t\t\t\t\t\t\t\tsetMode(value as \"light\" | \"dark\" | \"system\");\n\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t<DropdownMenu.RadioItem value=\"light\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tlucide=\"SunIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttabler=\"IconSun\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\thugeicons=\"SunIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tphosphor=\"SunIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tremixicon=\"RiSunLine\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t\tLight\n\t\t\t\t\t\t\t\t\t\t\t\t</DropdownMenu.RadioItem>\n\t\t\t\t\t\t\t\t\t\t\t\t<DropdownMenu.RadioItem value=\"dark\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tlucide=\"MoonIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttabler=\"IconMoon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\thugeicons=\"MoonIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tphosphor=\"MoonIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tremixicon=\"RiMoonLine\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t\tDark\n\t\t\t\t\t\t\t\t\t\t\t\t</DropdownMenu.RadioItem>\n\t\t\t\t\t\t\t\t\t\t\t\t<DropdownMenu.RadioItem value=\"system\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tlucide=\"MonitorIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttabler=\"IconDeviceDesktop\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\thugeicons=\"ComputerIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tphosphor=\"MonitorIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tremixicon=\"RiComputerLine\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t\tSystem\n\t\t\t\t\t\t\t\t\t\t\t\t</DropdownMenu.RadioItem>\n\t\t\t\t\t\t\t\t\t\t\t</DropdownMenu.RadioGroup>\n\t\t\t\t\t\t\t\t\t\t</DropdownMenu.Group>\n\t\t\t\t\t\t\t\t\t</DropdownMenu.SubContent>\n\t\t\t\t\t\t\t\t</DropdownMenu.Portal>\n\t\t\t\t\t\t\t</DropdownMenu.Sub>\n\t\t\t\t\t\t</DropdownMenu.Group>\n\t\t\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t\t\t<DropdownMenu.Group>\n\t\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\tlucide=\"HelpCircleIcon\"\n\t\t\t\t\t\t\t\t\ttabler=\"IconHelpCircle\"\n\t\t\t\t\t\t\t\t\thugeicons=\"HelpCircleIcon\"\n\t\t\t\t\t\t\t\t\tphosphor=\"QuestionIcon\"\n\t\t\t\t\t\t\t\t\tremixicon=\"RiQuestionLine\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\tHelp & Support\n\t\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\tlucide=\"FileTextIcon\"\n\t\t\t\t\t\t\t\t\ttabler=\"IconFileText\"\n\t\t\t\t\t\t\t\t\thugeicons=\"File01Icon\"\n\t\t\t\t\t\t\t\t\tphosphor=\"FileTextIcon\"\n\t\t\t\t\t\t\t\t\tremixicon=\"RiFileTextLine\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\tDocumentation\n\t\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t</DropdownMenu.Group>\n\t\t\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t\t\t<DropdownMenu.Group>\n\t\t\t\t\t\t\t<DropdownMenu.Item variant=\"destructive\">\n\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\tlucide=\"LogOutIcon\"\n\t\t\t\t\t\t\t\t\ttabler=\"IconLogout\"\n\t\t\t\t\t\t\t\t\thugeicons=\"LogoutIcon\"\n\t\t\t\t\t\t\t\t\tphosphor=\"SignOutIcon\"\n\t\t\t\t\t\t\t\t\tremixicon=\"RiLogoutBoxLine\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\tSign Out\n\t\t\t\t\t\t\t\t<DropdownMenu.Shortcut>⇧⌘Q</DropdownMenu.Shortcut>\n\t\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t</DropdownMenu.Group>\n\t\t\t\t\t</DropdownMenu.Content>\n\t\t\t\t</DropdownMenu.Root>\n\t\t\t</Card.Action>\n\t\t</Card.Header>\n\t\t<Card.Content>\n\t\t\t<form>\n\t\t\t\t<Field.Group>\n\t\t\t\t\t<div class=\"grid grid-cols-2 gap-4\">\n\t\t\t\t\t\t<Field.Field>\n\t\t\t\t\t\t\t<Field.Label for=\"small-form-name\">Name</Field.Label>\n\t\t\t\t\t\t\t<Input id=\"small-form-name\" placeholder=\"Enter your name\" required />\n\t\t\t\t\t\t</Field.Field>\n\t\t\t\t\t\t<Field.Field>\n\t\t\t\t\t\t\t<Field.Label for=\"small-form-role\">Role</Field.Label>\n\t\t\t\t\t\t\t<Select.Root type=\"single\" bind:value={role}>\n\t\t\t\t\t\t\t\t<Select.Trigger id=\"small-form-role\">\n\t\t\t\t\t\t\t\t\t{roleLabel}\n\t\t\t\t\t\t\t\t</Select.Trigger>\n\t\t\t\t\t\t\t\t<Select.Content>\n\t\t\t\t\t\t\t\t\t<Select.Group>\n\t\t\t\t\t\t\t\t\t\t{#each roleItems as item (item.value)}\n\t\t\t\t\t\t\t\t\t\t\t<Select.Item value={item.value}\n\t\t\t\t\t\t\t\t\t\t\t\t>{item.label}</Select.Item\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t\t\t</Select.Group>\n\t\t\t\t\t\t\t\t</Select.Content>\n\t\t\t\t\t\t\t</Select.Root>\n\t\t\t\t\t\t</Field.Field>\n\t\t\t\t\t</div>\n\t\t\t\t\t<Field.Field>\n\t\t\t\t\t\t<Field.Label for=\"small-form-framework\">Framework</Field.Label>\n\t\t\t\t\t\t<Popover.Root bind:open={frameworkOpen}>\n\t\t\t\t\t\t\t<Popover.Trigger\n\t\t\t\t\t\t\t\tbind:ref={triggerRef}\n\t\t\t\t\t\t\t\trole=\"combobox\"\n\t\t\t\t\t\t\t\tclass={cn(\n\t\t\t\t\t\t\t\t\tbuttonVariants({ variant: \"outline\" }),\n\t\t\t\t\t\t\t\t\t\"w-full justify-between\",\n\t\t\t\t\t\t\t\t\t!frameworkValue && \"text-muted-foreground\"\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{selectedFramework || \"Select a framework\"}\n\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\tlucide=\"ChevronDownIcon\"\n\t\t\t\t\t\t\t\t\ttabler=\"IconSelector\"\n\t\t\t\t\t\t\t\t\thugeicons=\"UnfoldMoreIcon\"\n\t\t\t\t\t\t\t\t\tphosphor=\"CaretDownIcon\"\n\t\t\t\t\t\t\t\t\tremixicon=\"RiArrowDownSLine\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</Popover.Trigger>\n\t\t\t\t\t\t\t<Popover.Content class=\"w-(--bits-popover-anchor-width) p-0\">\n\t\t\t\t\t\t\t\t<Command.Root>\n\t\t\t\t\t\t\t\t\t<Command.Input autofocus placeholder=\"Search framework...\" />\n\t\t\t\t\t\t\t\t\t<Command.Empty>No frameworks found.</Command.Empty>\n\t\t\t\t\t\t\t\t\t<Command.List>\n\t\t\t\t\t\t\t\t\t\t<Command.Group>\n\t\t\t\t\t\t\t\t\t\t\t{#each frameworks as framework (framework)}\n\t\t\t\t\t\t\t\t\t\t\t\t<Command.Item\n\t\t\t\t\t\t\t\t\t\t\t\t\tvalue={framework}\n\t\t\t\t\t\t\t\t\t\t\t\t\tdata-checked={frameworkValue ===\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tframework.toLowerCase()}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tframeworkValue = framework.toLowerCase();\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcloseAndFocusTrigger();\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{framework}\n\t\t\t\t\t\t\t\t\t\t\t\t</Command.Item>\n\t\t\t\t\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t\t\t\t</Command.Group>\n\t\t\t\t\t\t\t\t\t</Command.List>\n\t\t\t\t\t\t\t\t</Command.Root>\n\t\t\t\t\t\t\t</Popover.Content>\n\t\t\t\t\t\t</Popover.Root>\n\t\t\t\t\t</Field.Field>\n\t\t\t\t\t<Field.Field>\n\t\t\t\t\t\t<Field.Label for=\"small-form-comments\">Comments</Field.Label>\n\t\t\t\t\t\t<Textarea\n\t\t\t\t\t\t\tid=\"small-form-comments\"\n\t\t\t\t\t\t\tplaceholder=\"Add any additional comments\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Field.Field>\n\t\t\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t\t\t<Button type=\"submit\">Submit</Button>\n\t\t\t\t\t\t<Button variant=\"outline\" type=\"button\">Cancel</Button>\n\t\t\t\t\t</Field.Field>\n\t\t\t\t</Field.Group>\n\t\t\t</form>\n\t\t</Card.Content>\n\t</Card.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/hover-card/hover-card-in-dialog.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Dialog from \"$lib/registry/ui/dialog/index.js\";\n\timport * as HoverCard from \"$lib/registry/ui/hover-card/index.js\";\n</script>\n\n<Example title=\"In Dialog\">\n\t<Dialog.Root>\n\t\t<Dialog.Trigger>\n\t\t\t{#snippet child({ props })}\n\t\t\t\t<Button variant=\"outline\" {...props}>Open Dialog</Button>\n\t\t\t{/snippet}\n\t\t</Dialog.Trigger>\n\t\t<Dialog.Content>\n\t\t\t<Dialog.Header>\n\t\t\t\t<Dialog.Title>Hover Card Example</Dialog.Title>\n\t\t\t\t<Dialog.Description>\n\t\t\t\t\tHover over the button below to see the hover card.\n\t\t\t\t</Dialog.Description>\n\t\t\t</Dialog.Header>\n\t\t\t<HoverCard.Root openDelay={100} closeDelay={100}>\n\t\t\t\t<HoverCard.Trigger>\n\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t<Button variant=\"outline\" class=\"w-fit\" {...props}>Hover me</Button>\n\t\t\t\t\t{/snippet}\n\t\t\t\t</HoverCard.Trigger>\n\t\t\t\t<HoverCard.Content>\n\t\t\t\t\t<div\n\t\t\t\t\t\tclass=\"style-lyra:gap-1 style-nova:gap-1.5 style-vega:gap-2 style-maia:gap-2 style-mira:gap-1 flex flex-col\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<h4 class=\"font-medium\">Hover Card</h4>\n\t\t\t\t\t\t<p>\n\t\t\t\t\t\t\tThis hover card appears inside a dialog. Hover over the button to see\n\t\t\t\t\t\t\tit.\n\t\t\t\t\t\t</p>\n\t\t\t\t\t</div>\n\t\t\t\t</HoverCard.Content>\n\t\t\t</HoverCard.Root>\n\t\t</Dialog.Content>\n\t</Dialog.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/hover-card/hover-card-sides.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as HoverCard from \"$lib/registry/ui/hover-card/index.js\";\n\n\tconst HOVER_CARD_SIDES = [\"top\", \"right\", \"bottom\", \"left\"] as const;\n</script>\n\n<Example title=\"Sides\">\n\t<div class=\"flex flex-wrap items-center justify-center gap-4\">\n\t\t{#each HOVER_CARD_SIDES as side (side)}\n\t\t\t<HoverCard.Root openDelay={100} closeDelay={100}>\n\t\t\t\t<HoverCard.Trigger>\n\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t<Button variant=\"outline\" class=\"capitalize\" {...props}>\n\t\t\t\t\t\t\t{side}\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t{/snippet}\n\t\t\t\t</HoverCard.Trigger>\n\t\t\t\t<HoverCard.Content {side}>\n\t\t\t\t\t<div\n\t\t\t\t\t\tclass=\"style-lyra:gap-1 style-nova:gap-1.5 style-vega:gap-2 style-maia:gap-2 style-mira:gap-1 flex flex-col\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<h4 class=\"font-medium\">Hover Card</h4>\n\t\t\t\t\t\t<p>This hover card appears on the {side} side of the trigger.</p>\n\t\t\t\t\t</div>\n\t\t\t\t</HoverCard.Content>\n\t\t\t</HoverCard.Root>\n\t\t{/each}\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/hover-card/hover-card.svelte",
    "content": "<script lang=\"ts\">\n\timport ExampleWrapper from \"../../../../../routes/(app)/(layout)/(create)/components/example-wrapper.svelte\";\n\timport HoverCardSides from \"./hover-card-sides.svelte\";\n\timport HoverCardInDialog from \"./hover-card-in-dialog.svelte\";\n</script>\n\n<ExampleWrapper>\n\t<HoverCardSides />\n\t<HoverCardInDialog />\n</ExampleWrapper>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/index.ts",
    "content": "import type { RegistryItemType } from \"shadcn-svelte/schema\";\n\ntype Example = {\n\ttitle: string;\n\tname: string;\n\ttype: RegistryItemType;\n};\n\nexport const examples: Example[] = [\n\t{\n\t\ttitle: \"Preview\",\n\t\tname: \"preview\",\n\t\ttype: \"registry:example\",\n\t},\n\t{\n\t\ttitle: \"Accordion\",\n\t\tname: \"accordion\",\n\t\ttype: \"registry:example\",\n\t},\n\t{\n\t\ttitle: \"Alert\",\n\t\tname: \"alert\",\n\t\ttype: \"registry:example\",\n\t},\n\t{\n\t\ttitle: \"Alert Dialog\",\n\t\tname: \"alert-dialog\",\n\t\ttype: \"registry:example\",\n\t},\n\t{\n\t\ttitle: \"Aspect Ratio\",\n\t\tname: \"aspect-ratio\",\n\t\ttype: \"registry:example\",\n\t},\n\t{\n\t\ttitle: \"Avatar\",\n\t\tname: \"avatar\",\n\t\ttype: \"registry:example\",\n\t},\n\t{\n\t\ttitle: \"Badge\",\n\t\tname: \"badge\",\n\t\ttype: \"registry:example\",\n\t},\n\t{\n\t\ttitle: \"Breadcrumb\",\n\t\tname: \"breadcrumb\",\n\t\ttype: \"registry:example\",\n\t},\n\t{\n\t\ttitle: \"Button\",\n\t\tname: \"button\",\n\t\ttype: \"registry:example\",\n\t},\n\t{\n\t\ttitle: \"Button Group\",\n\t\tname: \"button-group\",\n\t\ttype: \"registry:example\",\n\t},\n\t{\n\t\ttitle: \"Calendar\",\n\t\tname: \"calendar\",\n\t\ttype: \"registry:example\",\n\t},\n\t{\n\t\ttitle: \"Card\",\n\t\tname: \"card\",\n\t\ttype: \"registry:example\",\n\t},\n\t{\n\t\ttitle: \"Carousel\",\n\t\tname: \"carousel\",\n\t\ttype: \"registry:example\",\n\t},\n\t{\n\t\ttitle: \"Chart\",\n\t\tname: \"chart\",\n\t\ttype: \"registry:example\",\n\t},\n\t{\n\t\ttitle: \"Checkbox\",\n\t\tname: \"checkbox\",\n\t\ttype: \"registry:example\",\n\t},\n\t{\n\t\ttitle: \"Collapsible\",\n\t\tname: \"collapsible\",\n\t\ttype: \"registry:example\",\n\t},\n\t{\n\t\ttitle: \"Combobox\",\n\t\tname: \"combobox\",\n\t\ttype: \"registry:example\",\n\t},\n\t{\n\t\ttitle: \"Command\",\n\t\tname: \"command\",\n\t\ttype: \"registry:example\",\n\t},\n\t{\n\t\ttitle: \"Context Menu\",\n\t\tname: \"context-menu\",\n\t\ttype: \"registry:example\",\n\t},\n\t{\n\t\ttitle: \"Dialog\",\n\t\tname: \"dialog\",\n\t\ttype: \"registry:example\",\n\t},\n\t{\n\t\ttitle: \"Drawer\",\n\t\tname: \"drawer\",\n\t\ttype: \"registry:example\",\n\t},\n\t{\n\t\ttitle: \"Dropdown Menu\",\n\t\tname: \"dropdown-menu\",\n\t\ttype: \"registry:example\",\n\t},\n\t{\n\t\ttitle: \"Empty\",\n\t\tname: \"empty\",\n\t\ttype: \"registry:example\",\n\t},\n\t{\n\t\ttitle: \"Field\",\n\t\tname: \"field\",\n\t\ttype: \"registry:example\",\n\t},\n\t{\n\t\ttitle: \"Hover Card\",\n\t\tname: \"hover-card\",\n\t\ttype: \"registry:example\",\n\t},\n\t{\n\t\ttitle: \"Input\",\n\t\tname: \"input\",\n\t\ttype: \"registry:example\",\n\t},\n\t{\n\t\ttitle: \"Input Group\",\n\t\tname: \"input-group\",\n\t\ttype: \"registry:example\",\n\t},\n\t{\n\t\ttitle: \"Input OTP\",\n\t\tname: \"input-otp\",\n\t\ttype: \"registry:example\",\n\t},\n\t{\n\t\ttitle: \"Item\",\n\t\tname: \"item\",\n\t\ttype: \"registry:example\",\n\t},\n\t{\n\t\ttitle: \"Kbd\",\n\t\tname: \"kbd\",\n\t\ttype: \"registry:example\",\n\t},\n\t{\n\t\ttitle: \"Label\",\n\t\tname: \"label\",\n\t\ttype: \"registry:example\",\n\t},\n\t{\n\t\ttitle: \"Menubar\",\n\t\tname: \"menubar\",\n\t\ttype: \"registry:example\",\n\t},\n\t{\n\t\ttitle: \"Navigation Menu\",\n\t\tname: \"navigation-menu\",\n\t\ttype: \"registry:example\",\n\t},\n\t{\n\t\ttitle: \"Native Select\",\n\t\tname: \"native-select\",\n\t\ttype: \"registry:example\",\n\t},\n\t{\n\t\ttitle: \"Pagination\",\n\t\tname: \"pagination\",\n\t\ttype: \"registry:example\",\n\t},\n\t{\n\t\ttitle: \"Popover\",\n\t\tname: \"popover\",\n\t\ttype: \"registry:example\",\n\t},\n\t{\n\t\ttitle: \"Progress\",\n\t\tname: \"progress\",\n\t\ttype: \"registry:example\",\n\t},\n\t{\n\t\ttitle: \"Radio Group\",\n\t\tname: \"radio-group\",\n\t\ttype: \"registry:example\",\n\t},\n\t{\n\t\ttitle: \"Resizable\",\n\t\tname: \"resizable\",\n\t\ttype: \"registry:example\",\n\t},\n\t{\n\t\ttitle: \"Scroll Area\",\n\t\tname: \"scroll-area\",\n\t\ttype: \"registry:example\",\n\t},\n\t{\n\t\ttitle: \"Select\",\n\t\tname: \"select\",\n\t\ttype: \"registry:example\",\n\t},\n\t{\n\t\ttitle: \"Separator\",\n\t\tname: \"separator\",\n\t\ttype: \"registry:example\",\n\t},\n\t{\n\t\ttitle: \"Sheet\",\n\t\tname: \"sheet\",\n\t\ttype: \"registry:example\",\n\t},\n\t{\n\t\ttitle: \"Sidebar\",\n\t\tname: \"sidebar\",\n\t\ttype: \"registry:example\",\n\t},\n\t{\n\t\ttitle: \"Sidebar (Icon)\",\n\t\tname: \"sidebar-icon\",\n\t\ttype: \"registry:example\",\n\t},\n\t{\n\t\ttitle: \"Sidebar (Inset)\",\n\t\tname: \"sidebar-inset\",\n\t\ttype: \"registry:example\",\n\t},\n\t{\n\t\ttitle: \"Sidebar (Floating)\",\n\t\tname: \"sidebar-floating\",\n\t\ttype: \"registry:example\",\n\t},\n\t{\n\t\ttitle: \"Skeleton\",\n\t\tname: \"skeleton\",\n\t\ttype: \"registry:example\",\n\t},\n\t{\n\t\ttitle: \"Slider\",\n\t\tname: \"slider\",\n\t\ttype: \"registry:example\",\n\t},\n\t{\n\t\ttitle: \"Sonner\",\n\t\tname: \"sonner\",\n\t\ttype: \"registry:example\",\n\t},\n\t{\n\t\ttitle: \"Spinner\",\n\t\tname: \"spinner\",\n\t\ttype: \"registry:example\",\n\t},\n\t{\n\t\ttitle: \"Switch\",\n\t\tname: \"switch\",\n\t\ttype: \"registry:example\",\n\t},\n\t{\n\t\ttitle: \"Table\",\n\t\tname: \"table\",\n\t\ttype: \"registry:example\",\n\t},\n\t{\n\t\ttitle: \"Tabs\",\n\t\tname: \"tabs\",\n\t\ttype: \"registry:example\",\n\t},\n\t{\n\t\ttitle: \"Textarea\",\n\t\tname: \"textarea\",\n\t\ttype: \"registry:example\",\n\t},\n\t{\n\t\ttitle: \"Toggle\",\n\t\tname: \"toggle\",\n\t\ttype: \"registry:example\",\n\t},\n\t{\n\t\ttitle: \"Toggle Group\",\n\t\tname: \"toggle-group\",\n\t\ttype: \"registry:example\",\n\t},\n\t{\n\t\ttitle: \"Tooltip\",\n\t\tname: \"tooltip\",\n\t\ttype: \"registry:example\",\n\t},\n\t{\n\t\ttitle: \"Demo\",\n\t\tname: \"demo\",\n\t\ttype: \"registry:example\",\n\t},\n\t// {\n\t// \ttitle: \"Home\",\n\t// \tname: \"home\",\n\t// \ttype: \"registry:block\",\n\t// },\n\t// {\n\t// \ttitle: \"Elevenlabs\",\n\t// \tname: \"elevenlabs\",\n\t// \ttype: \"registry:block\",\n\t// },\n\t// {\n\t// \ttitle: \"GitHub\",\n\t// \tname: \"github\",\n\t// \ttype: \"registry:block\",\n\t// },\n\t// {\n\t// \ttitle: \"Vercel\",\n\t// \tname: \"vercel\",\n\t// \ttype: \"registry:block\",\n\t// },\n\t// {\n\t// \ttitle: \"ChatGPT\",\n\t// \tname: \"chatgpt\",\n\t// \ttype: \"registry:block\",\n\t// },\n];\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/input/input-basic.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Input from \"$lib/registry/ui/input/index.js\";\n</script>\n\n<Example title=\"Basic\">\n\t<Input.Root type=\"email\" placeholder=\"Email\" />\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/input/input-disabled.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Input from \"$lib/registry/ui/input/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n</script>\n\n<Example title=\"Disabled\">\n\t<Field.Field>\n\t\t<Field.Label for=\"input-demo-disabled\">Email</Field.Label>\n\t\t<Input.Root id=\"input-demo-disabled\" type=\"email\" placeholder=\"Email\" disabled />\n\t</Field.Field>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/input/input-form.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Input from \"$lib/registry/ui/input/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport * as Button from \"$lib/registry/ui/button/index.js\";\n\timport * as Select from \"$lib/registry/ui/select/index.js\";\n\n\tconst countryItems = [\n\t\t{ label: \"United States\", value: \"us\" },\n\t\t{ label: \"United Kingdom\", value: \"uk\" },\n\t\t{ label: \"Canada\", value: \"ca\" },\n\t];\n\n\tlet country = $state(countryItems[0].value);\n\tconst countryLabel = $derived(\n\t\tcountryItems.find((item) => item.value === country)?.label ?? \"United States\"\n\t);\n</script>\n\n<Example title=\"Form\">\n\t<form class=\"w-full\">\n\t\t<Field.Group>\n\t\t\t<Field.Field>\n\t\t\t\t<Field.Label for=\"form-name\">Name</Field.Label>\n\t\t\t\t<Input.Root id=\"form-name\" type=\"text\" placeholder=\"John Doe\" />\n\t\t\t</Field.Field>\n\t\t\t<Field.Field>\n\t\t\t\t<Field.Label for=\"form-email\">Email</Field.Label>\n\t\t\t\t<Input.Root id=\"form-email\" type=\"email\" placeholder=\"john@example.com\" />\n\t\t\t\t<Field.Description>We'll never share your email with anyone.</Field.Description>\n\t\t\t</Field.Field>\n\t\t\t<div class=\"grid grid-cols-2 gap-4\">\n\t\t\t\t<Field.Field>\n\t\t\t\t\t<Field.Label for=\"form-phone\">Phone</Field.Label>\n\t\t\t\t\t<Input.Root id=\"form-phone\" type=\"tel\" placeholder=\"+1 (555) 123-4567\" />\n\t\t\t\t</Field.Field>\n\t\t\t\t<Field.Field>\n\t\t\t\t\t<Field.Label for=\"form-country\">Country</Field.Label>\n\t\t\t\t\t<Select.Root type=\"single\" bind:value={country}>\n\t\t\t\t\t\t<Select.Trigger id=\"form-country\">\n\t\t\t\t\t\t\t{countryLabel}\n\t\t\t\t\t\t</Select.Trigger>\n\t\t\t\t\t\t<Select.Content>\n\t\t\t\t\t\t\t<Select.Item value=\"us\">United States</Select.Item>\n\t\t\t\t\t\t\t<Select.Item value=\"uk\">United Kingdom</Select.Item>\n\t\t\t\t\t\t\t<Select.Item value=\"ca\">Canada</Select.Item>\n\t\t\t\t\t\t</Select.Content>\n\t\t\t\t\t</Select.Root>\n\t\t\t\t</Field.Field>\n\t\t\t</div>\n\t\t\t<Field.Field>\n\t\t\t\t<Field.Label for=\"form-address\">Address</Field.Label>\n\t\t\t\t<Input.Root id=\"form-address\" type=\"text\" placeholder=\"123 Main St\" />\n\t\t\t</Field.Field>\n\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t<Button.Root type=\"button\" variant=\"outline\">Cancel</Button.Root>\n\t\t\t\t<Button.Root type=\"submit\">Submit</Button.Root>\n\t\t\t</Field.Field>\n\t\t</Field.Group>\n\t</form>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/input/input-invalid.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Input from \"$lib/registry/ui/input/index.js\";\n</script>\n\n<Example title=\"Invalid\">\n\t<Input.Root type=\"text\" placeholder=\"Error\" aria-invalid=\"true\" />\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/input/input-types.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Input from \"$lib/registry/ui/input/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n</script>\n\n<Example title=\"Input Types\">\n\t<div class=\"flex w-full flex-col gap-6\">\n\t\t<Field.Field>\n\t\t\t<Field.Label for=\"input-demo-password\">Password</Field.Label>\n\t\t\t<Input.Root id=\"input-demo-password\" type=\"password\" placeholder=\"Password\" />\n\t\t</Field.Field>\n\t\t<Field.Field>\n\t\t\t<Field.Label for=\"input-demo-tel\">Phone</Field.Label>\n\t\t\t<Input.Root id=\"input-demo-tel\" type=\"tel\" placeholder=\"+1 (555) 123-4567\" />\n\t\t</Field.Field>\n\t\t<Field.Field>\n\t\t\t<Field.Label for=\"input-demo-url\">URL</Field.Label>\n\t\t\t<Input.Root id=\"input-demo-url\" type=\"url\" placeholder=\"https://example.com\" />\n\t\t</Field.Field>\n\t\t<Field.Field>\n\t\t\t<Field.Label for=\"input-demo-search\">Search</Field.Label>\n\t\t\t<Input.Root id=\"input-demo-search\" type=\"search\" placeholder=\"Search\" />\n\t\t</Field.Field>\n\t\t<Field.Field>\n\t\t\t<Field.Label for=\"input-demo-number\">Number</Field.Label>\n\t\t\t<Input.Root id=\"input-demo-number\" type=\"number\" placeholder=\"123\" />\n\t\t</Field.Field>\n\t\t<Field.Field>\n\t\t\t<Field.Label for=\"input-demo-date\">Date</Field.Label>\n\t\t\t<Input.Root id=\"input-demo-date\" type=\"date\" />\n\t\t</Field.Field>\n\t\t<Field.Field>\n\t\t\t<Field.Label for=\"input-demo-time\">Time</Field.Label>\n\t\t\t<Input.Root id=\"input-demo-time\" type=\"time\" />\n\t\t</Field.Field>\n\t\t<Field.Field>\n\t\t\t<Field.Label for=\"input-demo-file\">File</Field.Label>\n\t\t\t<Input.Root id=\"input-demo-file\" type=\"file\" />\n\t\t</Field.Field>\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/input/input-with-button.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Input from \"$lib/registry/ui/input/index.js\";\n\timport * as Button from \"$lib/registry/ui/button/index.js\";\n</script>\n\n<Example title=\"With Button\">\n\t<div class=\"flex w-full gap-2\">\n\t\t<Input.Root type=\"search\" placeholder=\"Search...\" class=\"flex-1\" />\n\t\t<Button.Root>Search</Button.Root>\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/input/input-with-description.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Input from \"$lib/registry/ui/input/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n</script>\n\n<Example title=\"With Description\">\n\t<Field.Field>\n\t\t<Field.Label for=\"input-demo-username\">Username</Field.Label>\n\t\t<Input.Root id=\"input-demo-username\" type=\"text\" placeholder=\"Enter your username\" />\n\t\t<Field.Description>Choose a unique username for your account.</Field.Description>\n\t</Field.Field>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/input/input-with-label.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Input from \"$lib/registry/ui/input/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n</script>\n\n<Example title=\"With Label\">\n\t<Field.Field>\n\t\t<Field.Label for=\"input-demo-email\">Email</Field.Label>\n\t\t<Input.Root id=\"input-demo-email\" type=\"email\" placeholder=\"name@example.com\" />\n\t</Field.Field>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/input/input-with-native-select.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Input from \"$lib/registry/ui/input/index.js\";\n\timport * as NativeSelect from \"$lib/registry/ui/native-select/index.js\";\n</script>\n\n<Example title=\"With Native Select\">\n\t<div class=\"flex w-full gap-2\">\n\t\t<Input.Root type=\"tel\" placeholder=\"(555) 123-4567\" class=\"flex-1\" />\n\t\t<NativeSelect.Root value=\"+1\">\n\t\t\t<NativeSelect.Option value=\"+1\">+1</NativeSelect.Option>\n\t\t\t<NativeSelect.Option value=\"+44\">+44</NativeSelect.Option>\n\t\t\t<NativeSelect.Option value=\"+46\">+46</NativeSelect.Option>\n\t\t</NativeSelect.Root>\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/input/input-with-select.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Input from \"$lib/registry/ui/input/index.js\";\n\timport * as Select from \"$lib/registry/ui/select/index.js\";\n\n\tconst currencyItems = [\n\t\t{ label: \"USD\", value: \"usd\" },\n\t\t{ label: \"EUR\", value: \"eur\" },\n\t\t{ label: \"GBP\", value: \"gbp\" },\n\t];\n\n\tlet currency = $state(currencyItems[0].value);\n\tconst currencyLabel = $derived(\n\t\tcurrencyItems.find((item) => item.value === currency)?.label ?? \"USD\"\n\t);\n</script>\n\n<Example title=\"With Select\">\n\t<div class=\"flex w-full gap-2\">\n\t\t<Input.Root type=\"text\" placeholder=\"Enter amount\" class=\"flex-1\" />\n\t\t<Select.Root type=\"single\" bind:value={currency}>\n\t\t\t<Select.Trigger class=\"w-32\">\n\t\t\t\t{currencyLabel}\n\t\t\t</Select.Trigger>\n\t\t\t<Select.Content>\n\t\t\t\t<Select.Item value=\"usd\">USD</Select.Item>\n\t\t\t\t<Select.Item value=\"eur\">EUR</Select.Item>\n\t\t\t\t<Select.Item value=\"gbp\">GBP</Select.Item>\n\t\t\t</Select.Content>\n\t\t</Select.Root>\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/input/input.svelte",
    "content": "<script lang=\"ts\">\n\timport ExampleWrapper from \"../../../../../routes/(app)/(layout)/(create)/components/example-wrapper.svelte\";\n\timport InputBasic from \"./input-basic.svelte\";\n\timport InputInvalid from \"./input-invalid.svelte\";\n\timport InputWithLabel from \"./input-with-label.svelte\";\n\timport InputWithDescription from \"./input-with-description.svelte\";\n\timport InputDisabled from \"./input-disabled.svelte\";\n\timport InputTypes from \"./input-types.svelte\";\n\timport InputWithSelect from \"./input-with-select.svelte\";\n\timport InputWithButton from \"./input-with-button.svelte\";\n\timport InputWithNativeSelect from \"./input-with-native-select.svelte\";\n\timport InputForm from \"./input-form.svelte\";\n</script>\n\n<ExampleWrapper>\n\t<InputBasic />\n\t<InputInvalid />\n\t<InputWithLabel />\n\t<InputWithDescription />\n\t<InputDisabled />\n\t<InputTypes />\n\t<InputWithSelect />\n\t<InputWithButton />\n\t<InputWithNativeSelect />\n\t<InputForm />\n</ExampleWrapper>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/input-group/input-group-basic.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Input } from \"$lib/registry/ui/input/index.js\";\n\timport * as InputGroup from \"$lib/registry/ui/input-group/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n</script>\n\n<Example title=\"Basic\">\n\t<Field.Group>\n\t\t<Field.Field>\n\t\t\t<Field.Label for=\"input-default-01\">Default (No Input Group)</Field.Label>\n\t\t\t<Input placeholder=\"Placeholder\" id=\"input-default-01\" />\n\t\t</Field.Field>\n\t\t<Field.Field>\n\t\t\t<Field.Label for=\"input-group-02\">Input Group</Field.Label>\n\t\t\t<InputGroup.Root>\n\t\t\t\t<InputGroup.Input id=\"input-group-02\" placeholder=\"Placeholder\" />\n\t\t\t</InputGroup.Root>\n\t\t</Field.Field>\n\t\t<Field.Field data-disabled=\"true\">\n\t\t\t<Field.Label for=\"input-disabled-03\">Disabled</Field.Label>\n\t\t\t<InputGroup.Root>\n\t\t\t\t<InputGroup.Input\n\t\t\t\t\tid=\"input-disabled-03\"\n\t\t\t\t\tplaceholder=\"This field is disabled\"\n\t\t\t\t\tdisabled\n\t\t\t\t/>\n\t\t\t</InputGroup.Root>\n\t\t</Field.Field>\n\t\t<Field.Field data-invalid=\"true\">\n\t\t\t<Field.Label for=\"input-invalid-04\">Invalid</Field.Label>\n\t\t\t<InputGroup.Root>\n\t\t\t\t<InputGroup.Input\n\t\t\t\t\tid=\"input-invalid-04\"\n\t\t\t\t\tplaceholder=\"This field is invalid\"\n\t\t\t\t\taria-invalid=\"true\"\n\t\t\t\t/>\n\t\t\t</InputGroup.Root>\n\t\t</Field.Field>\n\t</Field.Group>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/input-group/input-group-in-card.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as InputGroup from \"$lib/registry/ui/input-group/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Example title=\"In Card\">\n\t<Card.Root class=\"w-full\">\n\t\t<Card.Header>\n\t\t\t<Card.Title>Card with Input Group</Card.Title>\n\t\t\t<Card.Description>This is a card with an input group.</Card.Description>\n\t\t</Card.Header>\n\t\t<Card.Content>\n\t\t\t<Field.Group>\n\t\t\t\t<Field.Field>\n\t\t\t\t\t<Field.Label for=\"email-input\">Email Address</Field.Label>\n\t\t\t\t\t<InputGroup.Root>\n\t\t\t\t\t\t<InputGroup.Input\n\t\t\t\t\t\t\tid=\"email-input\"\n\t\t\t\t\t\t\ttype=\"email\"\n\t\t\t\t\t\t\tplaceholder=\"you@example.com\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<InputGroup.Addon align=\"inline-end\">\n\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\tlucide=\"MailIcon\"\n\t\t\t\t\t\t\t\ttabler=\"IconMail\"\n\t\t\t\t\t\t\t\thugeicons=\"MailIcon\"\n\t\t\t\t\t\t\t\tphosphor=\"EnvelopeIcon\"\n\t\t\t\t\t\t\t\tremixicon=\"RiMailLine\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</InputGroup.Addon>\n\t\t\t\t\t</InputGroup.Root>\n\t\t\t\t</Field.Field>\n\t\t\t\t<Field.Field>\n\t\t\t\t\t<Field.Label for=\"website-input\">Website URL</Field.Label>\n\t\t\t\t\t<InputGroup.Root>\n\t\t\t\t\t\t<InputGroup.Addon>\n\t\t\t\t\t\t\t<InputGroup.Text>https://</InputGroup.Text>\n\t\t\t\t\t\t</InputGroup.Addon>\n\t\t\t\t\t\t<InputGroup.Input id=\"website-input\" placeholder=\"example.com\" />\n\t\t\t\t\t\t<InputGroup.Addon align=\"inline-end\">\n\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\tlucide=\"ExternalLinkIcon\"\n\t\t\t\t\t\t\t\ttabler=\"IconExternalLink\"\n\t\t\t\t\t\t\t\thugeicons=\"LinkSquare02Icon\"\n\t\t\t\t\t\t\t\tphosphor=\"ArrowSquareOutIcon\"\n\t\t\t\t\t\t\t\tremixicon=\"RiExternalLinkLine\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</InputGroup.Addon>\n\t\t\t\t\t</InputGroup.Root>\n\t\t\t\t</Field.Field>\n\t\t\t\t<Field.Field>\n\t\t\t\t\t<Field.Label for=\"feedback-textarea\">Feedback & Comments</Field.Label>\n\t\t\t\t\t<InputGroup.Root>\n\t\t\t\t\t\t<InputGroup.Textarea\n\t\t\t\t\t\t\tid=\"feedback-textarea\"\n\t\t\t\t\t\t\tplaceholder=\"Share your thoughts...\"\n\t\t\t\t\t\t\tclass=\"min-h-[100px]\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<InputGroup.Addon align=\"block-end\">\n\t\t\t\t\t\t\t<InputGroup.Text>0/500 characters</InputGroup.Text>\n\t\t\t\t\t\t</InputGroup.Addon>\n\t\t\t\t\t</InputGroup.Root>\n\t\t\t\t</Field.Field>\n\t\t\t</Field.Group>\n\t\t</Card.Content>\n\t\t<Card.Footer class=\"justify-end gap-2\">\n\t\t\t<Button variant=\"outline\">Cancel</Button>\n\t\t\t<Button>Submit</Button>\n\t\t</Card.Footer>\n\t</Card.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/input-group/input-group-textarea-examples.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Textarea } from \"$lib/registry/ui/textarea/index.js\";\n\timport * as InputGroup from \"$lib/registry/ui/input-group/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Example title=\"Textarea\">\n\t<Field.Group>\n\t\t<Field.Field>\n\t\t\t<Field.Label for=\"textarea-header-footer-12\"\n\t\t\t\t>Default Textarea (No Input Group)</Field.Label\n\t\t\t>\n\t\t\t<Textarea id=\"textarea-header-footer-12\" placeholder=\"Enter your text here...\" />\n\t\t</Field.Field>\n\t\t<Field.Field>\n\t\t\t<Field.Label for=\"textarea-header-footer-13\">Input Group</Field.Label>\n\t\t\t<InputGroup.Root>\n\t\t\t\t<InputGroup.Textarea\n\t\t\t\t\tid=\"textarea-header-footer-13\"\n\t\t\t\t\tplaceholder=\"Enter your text here...\"\n\t\t\t\t/>\n\t\t\t</InputGroup.Root>\n\t\t\t<Field.Description>This is a description of the input group.</Field.Description>\n\t\t</Field.Field>\n\t\t<Field.Field data-invalid=\"true\">\n\t\t\t<Field.Label for=\"textarea-header-footer-14\">Invalid</Field.Label>\n\t\t\t<InputGroup.Root>\n\t\t\t\t<InputGroup.Textarea\n\t\t\t\t\tid=\"textarea-header-footer-14\"\n\t\t\t\t\tplaceholder=\"Enter your text here...\"\n\t\t\t\t\taria-invalid=\"true\"\n\t\t\t\t/>\n\t\t\t</InputGroup.Root>\n\t\t\t<Field.Description>This is a description of the input group.</Field.Description>\n\t\t</Field.Field>\n\t\t<Field.Field data-disabled=\"true\">\n\t\t\t<Field.Label for=\"textarea-header-footer-15\">Disabled</Field.Label>\n\t\t\t<InputGroup.Root>\n\t\t\t\t<InputGroup.Textarea\n\t\t\t\t\tid=\"textarea-header-footer-15\"\n\t\t\t\t\tplaceholder=\"Enter your text here...\"\n\t\t\t\t\tdisabled\n\t\t\t\t/>\n\t\t\t</InputGroup.Root>\n\t\t\t<Field.Description>This is a description of the input group.</Field.Description>\n\t\t</Field.Field>\n\t\t<Field.Field>\n\t\t\t<Field.Label for=\"prompt-31\">Addon (block-start)</Field.Label>\n\t\t\t<InputGroup.Root>\n\t\t\t\t<InputGroup.Textarea id=\"prompt-31\" />\n\t\t\t\t<InputGroup.Addon align=\"block-start\">\n\t\t\t\t\t<InputGroup.Text>Ask, Search or Chat...</InputGroup.Text>\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"InfoIcon\"\n\t\t\t\t\t\ttabler=\"IconInfoCircle\"\n\t\t\t\t\t\thugeicons=\"AlertCircleIcon\"\n\t\t\t\t\t\tphosphor=\"InfoIcon\"\n\t\t\t\t\t\tremixicon=\"RiInformationLine\"\n\t\t\t\t\t\tclass=\"text-muted-foreground ml-auto\"\n\t\t\t\t\t/>\n\t\t\t\t</InputGroup.Addon>\n\t\t\t</InputGroup.Root>\n\t\t\t<Field.Description>This is a description of the input group.</Field.Description>\n\t\t</Field.Field>\n\t\t<Field.Field>\n\t\t\t<Field.Label for=\"textarea-header-footer-30\">Addon (block-end)</Field.Label>\n\t\t\t<InputGroup.Root>\n\t\t\t\t<InputGroup.Textarea\n\t\t\t\t\tid=\"textarea-header-footer-30\"\n\t\t\t\t\tplaceholder=\"Enter your text here...\"\n\t\t\t\t/>\n\t\t\t\t<InputGroup.Addon align=\"block-end\">\n\t\t\t\t\t<InputGroup.Text>0/280 characters</InputGroup.Text>\n\t\t\t\t\t<InputGroup.Button\n\t\t\t\t\t\tvariant=\"default\"\n\t\t\t\t\t\tsize=\"icon-xs\"\n\t\t\t\t\t\tclass=\"ml-auto rounded-full\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"ArrowUpIcon\"\n\t\t\t\t\t\t\ttabler=\"IconArrowUp\"\n\t\t\t\t\t\t\thugeicons=\"ArrowUpIcon\"\n\t\t\t\t\t\t\tphosphor=\"ArrowUpIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiArrowUpLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<span class=\"sr-only\">Send</span>\n\t\t\t\t\t</InputGroup.Button>\n\t\t\t\t</InputGroup.Addon>\n\t\t\t</InputGroup.Root>\n\t\t</Field.Field>\n\t\t<Field.Field>\n\t\t\t<Field.Label for=\"textarea-comment-31\">Addon (Buttons)</Field.Label>\n\t\t\t<InputGroup.Root>\n\t\t\t\t<InputGroup.Textarea\n\t\t\t\t\tid=\"textarea-comment-31\"\n\t\t\t\t\tplaceholder=\"Share your thoughts...\"\n\t\t\t\t\tclass=\"min-h-[120px]\"\n\t\t\t\t/>\n\t\t\t\t<InputGroup.Addon align=\"block-end\">\n\t\t\t\t\t<InputGroup.Button variant=\"ghost\" class=\"ml-auto\" size=\"sm\"\n\t\t\t\t\t\t>Cancel</InputGroup.Button\n\t\t\t\t\t>\n\t\t\t\t\t<InputGroup.Button variant=\"default\" size=\"sm\">Post Comment</InputGroup.Button>\n\t\t\t\t</InputGroup.Addon>\n\t\t\t</InputGroup.Root>\n\t\t</Field.Field>\n\t\t<Field.Field>\n\t\t\t<Field.Label for=\"textarea-code-32\">Code Editor</Field.Label>\n\t\t\t<InputGroup.Root>\n\t\t\t\t<InputGroup.Textarea\n\t\t\t\t\tid=\"textarea-code-32\"\n\t\t\t\t\tplaceholder=\"console.log('Hello, world!');\"\n\t\t\t\t\tclass=\"min-h-[300px] py-3\"\n\t\t\t\t/>\n\t\t\t\t<InputGroup.Addon align=\"block-start\" class=\"border-b\">\n\t\t\t\t\t<InputGroup.Text class=\"font-mono font-medium\">\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"CodeIcon\"\n\t\t\t\t\t\t\ttabler=\"IconBrandJavascript\"\n\t\t\t\t\t\t\thugeicons=\"CodeIcon\"\n\t\t\t\t\t\t\tphosphor=\"CodeIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiCodeLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\tscript.js\n\t\t\t\t\t</InputGroup.Text>\n\t\t\t\t\t<InputGroup.Button size=\"icon-xs\" class=\"ml-auto\">\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"RefreshCwIcon\"\n\t\t\t\t\t\t\ttabler=\"IconRefresh\"\n\t\t\t\t\t\t\thugeicons=\"RefreshIcon\"\n\t\t\t\t\t\t\tphosphor=\"ArrowClockwiseIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiRefreshLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</InputGroup.Button>\n\t\t\t\t\t<InputGroup.Button size=\"icon-xs\" variant=\"ghost\">\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"CopyIcon\"\n\t\t\t\t\t\t\ttabler=\"IconCopy\"\n\t\t\t\t\t\t\thugeicons=\"CopyIcon\"\n\t\t\t\t\t\t\tphosphor=\"CopyIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiFileCopyLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</InputGroup.Button>\n\t\t\t\t</InputGroup.Addon>\n\t\t\t\t<InputGroup.Addon align=\"block-end\" class=\"border-t\">\n\t\t\t\t\t<InputGroup.Text>Line 1, Column 1</InputGroup.Text>\n\t\t\t\t\t<InputGroup.Text class=\"ml-auto\">JavaScript</InputGroup.Text>\n\t\t\t\t</InputGroup.Addon>\n\t\t\t</InputGroup.Root>\n\t\t</Field.Field>\n\t</Field.Group>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/input-group/input-group-with-addons.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as InputGroup from \"$lib/registry/ui/input-group/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Example title=\"With Addons\">\n\t<Field.Group>\n\t\t<Field.Field>\n\t\t\t<Field.Label for=\"input-icon-left-05\">Addon (inline-start)</Field.Label>\n\t\t\t<InputGroup.Root>\n\t\t\t\t<InputGroup.Input id=\"input-icon-left-05\" />\n\t\t\t\t<InputGroup.Addon>\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"SearchIcon\"\n\t\t\t\t\t\ttabler=\"IconSearch\"\n\t\t\t\t\t\thugeicons=\"SearchIcon\"\n\t\t\t\t\t\tphosphor=\"MagnifyingGlassIcon\"\n\t\t\t\t\t\tremixicon=\"RiSearchLine\"\n\t\t\t\t\t\tclass=\"text-muted-foreground\"\n\t\t\t\t\t/>\n\t\t\t\t</InputGroup.Addon>\n\t\t\t</InputGroup.Root>\n\t\t</Field.Field>\n\t\t<Field.Field>\n\t\t\t<Field.Label for=\"input-icon-right-07\">Addon (inline-end)</Field.Label>\n\t\t\t<InputGroup.Root>\n\t\t\t\t<InputGroup.Input id=\"input-icon-right-07\" />\n\t\t\t\t<InputGroup.Addon align=\"inline-end\">\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"EyeOffIcon\"\n\t\t\t\t\t\ttabler=\"IconEyeClosed\"\n\t\t\t\t\t\thugeicons=\"ViewOffIcon\"\n\t\t\t\t\t\tphosphor=\"EyeSlashIcon\"\n\t\t\t\t\t\tremixicon=\"RiEyeOffLine\"\n\t\t\t\t\t/>\n\t\t\t\t</InputGroup.Addon>\n\t\t\t</InputGroup.Root>\n\t\t</Field.Field>\n\t\t<Field.Field>\n\t\t\t<Field.Label for=\"input-icon-both-09\">Addon (inline-start and inline-end)</Field.Label>\n\t\t\t<InputGroup.Root>\n\t\t\t\t<InputGroup.Input id=\"input-icon-both-09\" />\n\t\t\t\t<InputGroup.Addon>\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"MicIcon\"\n\t\t\t\t\t\ttabler=\"IconMicrophone\"\n\t\t\t\t\t\thugeicons=\"VoiceIcon\"\n\t\t\t\t\t\tphosphor=\"MicrophoneIcon\"\n\t\t\t\t\t\tremixicon=\"RiMicLine\"\n\t\t\t\t\t\tclass=\"text-muted-foreground\"\n\t\t\t\t\t/>\n\t\t\t\t</InputGroup.Addon>\n\t\t\t\t<InputGroup.Addon align=\"inline-end\">\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"RadioIcon\"\n\t\t\t\t\t\ttabler=\"IconPlayerRecordFilled\"\n\t\t\t\t\t\thugeicons=\"RecordIcon\"\n\t\t\t\t\t\tphosphor=\"RecordIcon\"\n\t\t\t\t\t\tremixicon=\"RiRecordCircleLine\"\n\t\t\t\t\t\tclass=\"animate-pulse text-red-500\"\n\t\t\t\t\t/>\n\t\t\t\t</InputGroup.Addon>\n\t\t\t</InputGroup.Root>\n\t\t</Field.Field>\n\t\t<Field.Field>\n\t\t\t<Field.Label for=\"input-addon-20\">Addon (block-start)</Field.Label>\n\t\t\t<InputGroup.Root class=\"h-auto\">\n\t\t\t\t<InputGroup.Input id=\"input-addon-20\" />\n\t\t\t\t<InputGroup.Addon align=\"block-start\">\n\t\t\t\t\t<InputGroup.Text>First Name</InputGroup.Text>\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"InfoIcon\"\n\t\t\t\t\t\ttabler=\"IconInfoCircle\"\n\t\t\t\t\t\thugeicons=\"AlertCircleIcon\"\n\t\t\t\t\t\tphosphor=\"InfoIcon\"\n\t\t\t\t\t\tremixicon=\"RiInformationLine\"\n\t\t\t\t\t\tclass=\"text-muted-foreground ml-auto\"\n\t\t\t\t\t/>\n\t\t\t\t</InputGroup.Addon>\n\t\t\t</InputGroup.Root>\n\t\t</Field.Field>\n\t\t<Field.Field>\n\t\t\t<Field.Label for=\"input-addon-21\">Addon (block-end)</Field.Label>\n\t\t\t<InputGroup.Root class=\"h-auto\">\n\t\t\t\t<InputGroup.Input id=\"input-addon-21\" />\n\t\t\t\t<InputGroup.Addon align=\"block-end\">\n\t\t\t\t\t<InputGroup.Text>20/240 characters</InputGroup.Text>\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"InfoIcon\"\n\t\t\t\t\t\ttabler=\"IconInfoCircle\"\n\t\t\t\t\t\thugeicons=\"AlertCircleIcon\"\n\t\t\t\t\t\tphosphor=\"InfoIcon\"\n\t\t\t\t\t\tremixicon=\"RiInformationLine\"\n\t\t\t\t\t\tclass=\"text-muted-foreground ml-auto\"\n\t\t\t\t\t/>\n\t\t\t\t</InputGroup.Addon>\n\t\t\t</InputGroup.Root>\n\t\t</Field.Field>\n\t\t<Field.Field>\n\t\t\t<Field.Label for=\"input-icon-both-10\">Multiple Icons</Field.Label>\n\t\t\t<InputGroup.Root>\n\t\t\t\t<InputGroup.Input id=\"input-icon-both-10\" />\n\t\t\t\t<InputGroup.Addon align=\"inline-end\">\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"StarIcon\"\n\t\t\t\t\t\ttabler=\"IconStar\"\n\t\t\t\t\t\thugeicons=\"StarIcon\"\n\t\t\t\t\t\tphosphor=\"StarIcon\"\n\t\t\t\t\t\tremixicon=\"RiStarLine\"\n\t\t\t\t\t/>\n\t\t\t\t\t<InputGroup.Button size=\"icon-xs\" onclick={() => {}}>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"CopyIcon\"\n\t\t\t\t\t\t\ttabler=\"IconCopy\"\n\t\t\t\t\t\t\thugeicons=\"CopyIcon\"\n\t\t\t\t\t\t\tphosphor=\"CopyIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiFileCopyLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</InputGroup.Button>\n\t\t\t\t</InputGroup.Addon>\n\t\t\t\t<InputGroup.Addon>\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"RadioIcon\"\n\t\t\t\t\t\ttabler=\"IconPlayerRecordFilled\"\n\t\t\t\t\t\thugeicons=\"RecordIcon\"\n\t\t\t\t\t\tphosphor=\"RecordIcon\"\n\t\t\t\t\t\tremixicon=\"RiRecordCircleLine\"\n\t\t\t\t\t\tclass=\"animate-pulse text-red-500\"\n\t\t\t\t\t/>\n\t\t\t\t</InputGroup.Addon>\n\t\t\t</InputGroup.Root>\n\t\t</Field.Field>\n\t\t<Field.Field>\n\t\t\t<Field.Label for=\"input-description-10\">Description</Field.Label>\n\t\t\t<InputGroup.Root>\n\t\t\t\t<InputGroup.Input id=\"input-description-10\" />\n\t\t\t\t<InputGroup.Addon align=\"inline-end\">\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"InfoIcon\"\n\t\t\t\t\t\ttabler=\"IconInfoCircle\"\n\t\t\t\t\t\thugeicons=\"AlertCircleIcon\"\n\t\t\t\t\t\tphosphor=\"InfoIcon\"\n\t\t\t\t\t\tremixicon=\"RiInformationLine\"\n\t\t\t\t\t/>\n\t\t\t\t</InputGroup.Addon>\n\t\t\t</InputGroup.Root>\n\t\t\t<Field.Description>This is a description of the input group.</Field.Description>\n\t\t</Field.Field>\n\t\t<Field.Field>\n\t\t\t<Field.Label for=\"input-label-10\">Label</Field.Label>\n\t\t\t<InputGroup.Root>\n\t\t\t\t<InputGroup.Addon>\n\t\t\t\t\t<Field.Label for=\"input-label-10\">Label</Field.Label>\n\t\t\t\t</InputGroup.Addon>\n\t\t\t\t<InputGroup.Input id=\"input-label-10\" />\n\t\t\t</InputGroup.Root>\n\t\t\t<InputGroup.Root>\n\t\t\t\t<InputGroup.Input id=\"input-optional-12\" aria-label=\"Optional\" />\n\t\t\t\t<InputGroup.Addon align=\"inline-end\">\n\t\t\t\t\t<InputGroup.Text>(optional)</InputGroup.Text>\n\t\t\t\t</InputGroup.Addon>\n\t\t\t</InputGroup.Root>\n\t\t</Field.Field>\n\t</Field.Group>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/input-group/input-group-with-buttons.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as InputGroup from \"$lib/registry/ui/input-group/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Example title=\"With Buttons\">\n\t<Field.Group>\n\t\t<Field.Field>\n\t\t\t<Field.Label for=\"input-button-13\">Button</Field.Label>\n\t\t\t<InputGroup.Root>\n\t\t\t\t<InputGroup.Input id=\"input-button-13\" />\n\t\t\t\t<InputGroup.Addon>\n\t\t\t\t\t<InputGroup.Button>Default</InputGroup.Button>\n\t\t\t\t</InputGroup.Addon>\n\t\t\t</InputGroup.Root>\n\t\t\t<InputGroup.Root>\n\t\t\t\t<InputGroup.Input id=\"input-button-14\" />\n\t\t\t\t<InputGroup.Addon>\n\t\t\t\t\t<InputGroup.Button variant=\"outline\">Outline</InputGroup.Button>\n\t\t\t\t</InputGroup.Addon>\n\t\t\t</InputGroup.Root>\n\t\t\t<InputGroup.Root>\n\t\t\t\t<InputGroup.Input id=\"input-button-15\" />\n\t\t\t\t<InputGroup.Addon>\n\t\t\t\t\t<InputGroup.Button variant=\"secondary\">Secondary</InputGroup.Button>\n\t\t\t\t</InputGroup.Addon>\n\t\t\t</InputGroup.Root>\n\t\t\t<InputGroup.Root>\n\t\t\t\t<InputGroup.Input id=\"input-button-16\" />\n\t\t\t\t<InputGroup.Addon align=\"inline-end\">\n\t\t\t\t\t<InputGroup.Button variant=\"secondary\">Button</InputGroup.Button>\n\t\t\t\t</InputGroup.Addon>\n\t\t\t</InputGroup.Root>\n\t\t\t<InputGroup.Root>\n\t\t\t\t<InputGroup.Input id=\"input-button-17\" />\n\t\t\t\t<InputGroup.Addon align=\"inline-end\">\n\t\t\t\t\t<InputGroup.Button size=\"icon-xs\">\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"CopyIcon\"\n\t\t\t\t\t\t\ttabler=\"IconCopy\"\n\t\t\t\t\t\t\thugeicons=\"CopyIcon\"\n\t\t\t\t\t\t\tphosphor=\"CopyIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiFileCopyLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</InputGroup.Button>\n\t\t\t\t</InputGroup.Addon>\n\t\t\t</InputGroup.Root>\n\t\t\t<InputGroup.Root>\n\t\t\t\t<InputGroup.Input id=\"input-button-18\" />\n\t\t\t\t<InputGroup.Addon align=\"inline-end\">\n\t\t\t\t\t<InputGroup.Button variant=\"secondary\" size=\"icon-xs\">\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"TrashIcon\"\n\t\t\t\t\t\t\ttabler=\"IconTrash\"\n\t\t\t\t\t\t\thugeicons=\"DeleteIcon\"\n\t\t\t\t\t\t\tphosphor=\"TrashIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiDeleteBinLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</InputGroup.Button>\n\t\t\t\t</InputGroup.Addon>\n\t\t\t</InputGroup.Root>\n\t\t</Field.Field>\n\t</Field.Group>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/input-group/input-group-with-kbd.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as InputGroup from \"$lib/registry/ui/input-group/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport * as Kbd from \"$lib/registry/ui/kbd/index.js\";\n\timport { Spinner } from \"$lib/registry/ui/spinner/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Example title=\"With Kbd\">\n\t<Field.Group>\n\t\t<Field.Field>\n\t\t\t<Field.Label for=\"input-kbd-22\">Input Group with Kbd</Field.Label>\n\t\t\t<InputGroup.Root>\n\t\t\t\t<InputGroup.Input id=\"input-kbd-22\" />\n\t\t\t\t<InputGroup.Addon>\n\t\t\t\t\t<Kbd.Root>⌘K</Kbd.Root>\n\t\t\t\t</InputGroup.Addon>\n\t\t\t</InputGroup.Root>\n\t\t\t<InputGroup.Root>\n\t\t\t\t<InputGroup.Input id=\"input-kbd-23\" />\n\t\t\t\t<InputGroup.Addon align=\"inline-end\">\n\t\t\t\t\t<Kbd.Root>⌘K</Kbd.Root>\n\t\t\t\t</InputGroup.Addon>\n\t\t\t</InputGroup.Root>\n\t\t\t<InputGroup.Root>\n\t\t\t\t<InputGroup.Input id=\"input-search-apps-24\" placeholder=\"Search for Apps...\" />\n\t\t\t\t<InputGroup.Addon align=\"inline-end\">Ask AI</InputGroup.Addon>\n\t\t\t\t<InputGroup.Addon align=\"inline-end\">\n\t\t\t\t\t<Kbd.Root>Tab</Kbd.Root>\n\t\t\t\t</InputGroup.Addon>\n\t\t\t</InputGroup.Root>\n\t\t\t<InputGroup.Root>\n\t\t\t\t<InputGroup.Input id=\"input-search-type-25\" placeholder=\"Type to search...\" />\n\t\t\t\t<InputGroup.Addon align=\"inline-start\">\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"SparklesIcon\"\n\t\t\t\t\t\ttabler=\"IconServerSpark\"\n\t\t\t\t\t\thugeicons=\"SparklesIcon\"\n\t\t\t\t\t\tphosphor=\"SparkleIcon\"\n\t\t\t\t\t\tremixicon=\"RiSparklingLine\"\n\t\t\t\t\t/>\n\t\t\t\t</InputGroup.Addon>\n\t\t\t\t<InputGroup.Addon align=\"inline-end\">\n\t\t\t\t\t<Kbd.Group>\n\t\t\t\t\t\t<Kbd.Root>Ctrl</Kbd.Root>\n\t\t\t\t\t\t<Kbd.Root>C</Kbd.Root>\n\t\t\t\t\t</Kbd.Group>\n\t\t\t\t</InputGroup.Addon>\n\t\t\t</InputGroup.Root>\n\t\t</Field.Field>\n\t\t<Field.Field>\n\t\t\t<Field.Label for=\"input-username-26\">Username</Field.Label>\n\t\t\t<InputGroup.Root>\n\t\t\t\t<InputGroup.Input id=\"input-username-26\" value=\"shadcn\" />\n\t\t\t\t<InputGroup.Addon align=\"inline-end\">\n\t\t\t\t\t<div\n\t\t\t\t\t\tclass=\"flex size-4 items-center justify-center rounded-full bg-green-500 dark:bg-green-800\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"CheckIcon\"\n\t\t\t\t\t\t\ttabler=\"IconCheck\"\n\t\t\t\t\t\t\thugeicons=\"Tick02Icon\"\n\t\t\t\t\t\t\tphosphor=\"CheckIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiCheckLine\"\n\t\t\t\t\t\t\tclass=\"size-3 text-white\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t</InputGroup.Addon>\n\t\t\t</InputGroup.Root>\n\t\t\t<Field.Description class=\"text-green-700\">This username is available.</Field.Description\n\t\t\t>\n\t\t</Field.Field>\n\t\t<InputGroup.Root>\n\t\t\t<InputGroup.Input id=\"input-search-docs-27\" placeholder=\"Search documentation...\" />\n\t\t\t<InputGroup.Addon>\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"SearchIcon\"\n\t\t\t\t\ttabler=\"IconSearch\"\n\t\t\t\t\thugeicons=\"SearchIcon\"\n\t\t\t\t\tphosphor=\"MagnifyingGlassIcon\"\n\t\t\t\t\tremixicon=\"RiSearchLine\"\n\t\t\t\t/>\n\t\t\t</InputGroup.Addon>\n\t\t\t<InputGroup.Addon align=\"inline-end\">12 results</InputGroup.Addon>\n\t\t</InputGroup.Root>\n\t\t<InputGroup.Root data-disabled=\"true\">\n\t\t\t<InputGroup.Input\n\t\t\t\tid=\"input-search-disabled-28\"\n\t\t\t\tplaceholder=\"Search documentation...\"\n\t\t\t\tdisabled\n\t\t\t/>\n\t\t\t<InputGroup.Addon>\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"SearchIcon\"\n\t\t\t\t\ttabler=\"IconSearch\"\n\t\t\t\t\thugeicons=\"SearchIcon\"\n\t\t\t\t\tphosphor=\"MagnifyingGlassIcon\"\n\t\t\t\t\tremixicon=\"RiSearchLine\"\n\t\t\t\t/>\n\t\t\t</InputGroup.Addon>\n\t\t\t<InputGroup.Addon align=\"inline-end\">Disabled</InputGroup.Addon>\n\t\t</InputGroup.Root>\n\t\t<Field.Group class=\"grid grid-cols-2 gap-4\">\n\t\t\t<Field.Field>\n\t\t\t\t<Field.Label for=\"input-group-11\">First Name</Field.Label>\n\t\t\t\t<InputGroup.Root>\n\t\t\t\t\t<InputGroup.Input id=\"input-group-11\" placeholder=\"First Name\" />\n\t\t\t\t\t<InputGroup.Addon align=\"inline-end\">\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"InfoIcon\"\n\t\t\t\t\t\t\ttabler=\"IconInfoCircle\"\n\t\t\t\t\t\t\thugeicons=\"AlertCircleIcon\"\n\t\t\t\t\t\t\tphosphor=\"InfoIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiInformationLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</InputGroup.Addon>\n\t\t\t\t</InputGroup.Root>\n\t\t\t</Field.Field>\n\t\t\t<Field.Field>\n\t\t\t\t<Field.Label for=\"input-group-12\">Last Name</Field.Label>\n\t\t\t\t<InputGroup.Root>\n\t\t\t\t\t<InputGroup.Input id=\"input-group-12\" placeholder=\"Last Name\" />\n\t\t\t\t\t<InputGroup.Addon align=\"inline-end\">\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"InfoIcon\"\n\t\t\t\t\t\t\ttabler=\"IconInfoCircle\"\n\t\t\t\t\t\t\thugeicons=\"AlertCircleIcon\"\n\t\t\t\t\t\t\tphosphor=\"InfoIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiInformationLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</InputGroup.Addon>\n\t\t\t\t</InputGroup.Root>\n\t\t\t</Field.Field>\n\t\t</Field.Group>\n\t\t<Field.Field data-disabled=\"true\">\n\t\t\t<Field.Label for=\"input-group-29\"\n\t\t\t\t>Loading (&quot;data-disabled=&quot;true&quot;)</Field.Label\n\t\t\t>\n\t\t\t<InputGroup.Root>\n\t\t\t\t<InputGroup.Input id=\"input-group-29\" disabled value=\"shadcn\" />\n\t\t\t\t<InputGroup.Addon align=\"inline-end\">\n\t\t\t\t\t<Spinner />\n\t\t\t\t</InputGroup.Addon>\n\t\t\t</InputGroup.Root>\n\t\t\t<Field.Description>This is a description of the input group.</Field.Description>\n\t\t</Field.Field>\n\t</Field.Group>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/input-group/input-group-with-tooltip.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as InputGroup from \"$lib/registry/ui/input-group/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport * as Tooltip from \"$lib/registry/ui/tooltip/index.js\";\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\timport * as Popover from \"$lib/registry/ui/popover/index.js\";\n\timport * as ButtonGroup from \"$lib/registry/ui/button-group/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\n\tlet country = $state(\"+1\");\n</script>\n\n<Example title=\"With Tooltip, Dropdown, Popover\">\n\t<Field.Group>\n\t\t<Field.Field>\n\t\t\t<Field.Label for=\"input-tooltip-20\">Tooltip</Field.Label>\n\t\t\t<InputGroup.Root>\n\t\t\t\t<InputGroup.Input id=\"input-tooltip-20\" />\n\t\t\t\t<InputGroup.Addon align=\"inline-end\">\n\t\t\t\t\t<Tooltip.Root>\n\t\t\t\t\t\t<Tooltip.Trigger>\n\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t<InputGroup.Button {...props} class=\"rounded-full\" size=\"icon-xs\">\n\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\tlucide=\"InfoIcon\"\n\t\t\t\t\t\t\t\t\t\ttabler=\"IconInfoCircle\"\n\t\t\t\t\t\t\t\t\t\thugeicons=\"AlertCircleIcon\"\n\t\t\t\t\t\t\t\t\t\tphosphor=\"InfoIcon\"\n\t\t\t\t\t\t\t\t\t\tremixicon=\"RiInformationLine\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</InputGroup.Button>\n\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t</Tooltip.Trigger>\n\t\t\t\t\t\t<Tooltip.Content>This is content in a tooltip.</Tooltip.Content>\n\t\t\t\t\t</Tooltip.Root>\n\t\t\t\t</InputGroup.Addon>\n\t\t\t</InputGroup.Root>\n\t\t\t<Field.Description>This is a description of the input group.</Field.Description>\n\t\t</Field.Field>\n\t\t<Field.Field>\n\t\t\t<Field.Label for=\"input-dropdown-21\">Dropdown</Field.Label>\n\t\t\t<InputGroup.Root>\n\t\t\t\t<InputGroup.Input id=\"input-dropdown-21\" />\n\t\t\t\t<InputGroup.Addon>\n\t\t\t\t\t<DropdownMenu.Root>\n\t\t\t\t\t\t<DropdownMenu.Trigger>\n\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t<InputGroup.Button\n\t\t\t\t\t\t\t\t\t{...props}\n\t\t\t\t\t\t\t\t\tclass=\"text-muted-foreground tabular-nums\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{country}\n\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\tlucide=\"ChevronDownIcon\"\n\t\t\t\t\t\t\t\t\t\ttabler=\"IconChevronDown\"\n\t\t\t\t\t\t\t\t\t\thugeicons=\"ArrowDownIcon\"\n\t\t\t\t\t\t\t\t\t\tphosphor=\"CaretDownIcon\"\n\t\t\t\t\t\t\t\t\t\tremixicon=\"RiArrowDownSLine\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</InputGroup.Button>\n\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t</DropdownMenu.Trigger>\n\t\t\t\t\t\t<DropdownMenu.Content\n\t\t\t\t\t\t\talign=\"start\"\n\t\t\t\t\t\t\tclass=\"min-w-16\"\n\t\t\t\t\t\t\tsideOffset={10}\n\t\t\t\t\t\t\talignOffset={-8}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<DropdownMenu.Item onclick={() => (country = \"+1\")}\n\t\t\t\t\t\t\t\t>+1</DropdownMenu.Item\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<DropdownMenu.Item onclick={() => (country = \"+44\")}\n\t\t\t\t\t\t\t\t>+44</DropdownMenu.Item\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<DropdownMenu.Item onclick={() => (country = \"+46\")}\n\t\t\t\t\t\t\t\t>+46</DropdownMenu.Item\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t</DropdownMenu.Content>\n\t\t\t\t\t</DropdownMenu.Root>\n\t\t\t\t</InputGroup.Addon>\n\t\t\t</InputGroup.Root>\n\t\t\t<Field.Description>This is a description of the input group.</Field.Description>\n\t\t</Field.Field>\n\t\t<Field.Field>\n\t\t\t<Field.Label for=\"input-secure-19\">Popover</Field.Label>\n\t\t\t<InputGroup.Root>\n\t\t\t\t<Popover.Root>\n\t\t\t\t\t<Popover.Trigger>\n\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t<InputGroup.Addon {...props}>\n\t\t\t\t\t\t\t\t<InputGroup.Button variant=\"secondary\" size=\"icon-xs\">\n\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\tlucide=\"InfoIcon\"\n\t\t\t\t\t\t\t\t\t\ttabler=\"IconInfoCircle\"\n\t\t\t\t\t\t\t\t\t\thugeicons=\"AlertCircleIcon\"\n\t\t\t\t\t\t\t\t\t\tphosphor=\"InfoIcon\"\n\t\t\t\t\t\t\t\t\t\tremixicon=\"RiInformationLine\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</InputGroup.Button>\n\t\t\t\t\t\t\t</InputGroup.Addon>\n\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t</Popover.Trigger>\n\t\t\t\t\t<Popover.Content align=\"start\">\n\t\t\t\t\t\t<div class=\"space-y-2\">\n\t\t\t\t\t\t\t<h4 class=\"leading-none font-medium\">Your connection is not secure.</h4>\n\t\t\t\t\t\t\t<p class=\"text-muted-foreground text-sm\">\n\t\t\t\t\t\t\t\tYou should not enter any sensitive information on this site.\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</Popover.Content>\n\t\t\t\t</Popover.Root>\n\t\t\t\t<InputGroup.Addon class=\"text-muted-foreground pl-1\">https://</InputGroup.Addon>\n\t\t\t\t<InputGroup.Input id=\"input-secure-19\" />\n\t\t\t\t<InputGroup.Addon align=\"inline-end\">\n\t\t\t\t\t<InputGroup.Button size=\"icon-xs\" onclick={() => {}}>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"StarIcon\"\n\t\t\t\t\t\t\ttabler=\"IconStar\"\n\t\t\t\t\t\t\thugeicons=\"StarIcon\"\n\t\t\t\t\t\t\tphosphor=\"StarIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiStarLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</InputGroup.Button>\n\t\t\t\t</InputGroup.Addon>\n\t\t\t</InputGroup.Root>\n\t\t\t<Field.Description>This is a description of the input group.</Field.Description>\n\t\t</Field.Field>\n\t\t<Field.Field>\n\t\t\t<Field.Label for=\"url\">Button Group</Field.Label>\n\t\t\t<ButtonGroup.Root>\n\t\t\t\t<ButtonGroup.Text>https://</ButtonGroup.Text>\n\t\t\t\t<InputGroup.Root>\n\t\t\t\t\t<InputGroup.Input id=\"url\" />\n\t\t\t\t\t<InputGroup.Addon align=\"inline-end\">\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"InfoIcon\"\n\t\t\t\t\t\t\ttabler=\"IconInfoCircle\"\n\t\t\t\t\t\t\thugeicons=\"AlertCircleIcon\"\n\t\t\t\t\t\t\tphosphor=\"InfoIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiInformationLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</InputGroup.Addon>\n\t\t\t\t</InputGroup.Root>\n\t\t\t\t<ButtonGroup.Text>.com</ButtonGroup.Text>\n\t\t\t</ButtonGroup.Root>\n\t\t\t<Field.Description>This is a description of the input group.</Field.Description>\n\t\t</Field.Field>\n\t</Field.Group>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/input-group/input-group.svelte",
    "content": "<script lang=\"ts\">\n\timport ExampleWrapper from \"../../../../../routes/(app)/(layout)/(create)/components/example-wrapper.svelte\";\n\timport InputGroupBasic from \"./input-group-basic.svelte\";\n\timport InputGroupWithAddons from \"./input-group-with-addons.svelte\";\n\timport InputGroupWithButtons from \"./input-group-with-buttons.svelte\";\n\timport InputGroupWithTooltip from \"./input-group-with-tooltip.svelte\";\n\timport InputGroupWithKbd from \"./input-group-with-kbd.svelte\";\n\timport InputGroupInCard from \"./input-group-in-card.svelte\";\n\timport InputGroupTextareaExamples from \"./input-group-textarea-examples.svelte\";\n</script>\n\n<ExampleWrapper class=\"min-w-0\">\n\t<InputGroupBasic />\n\t<InputGroupWithAddons />\n\t<InputGroupWithButtons />\n\t<InputGroupWithTooltip />\n\t<InputGroupWithKbd />\n\t<InputGroupInCard />\n\t<InputGroupTextareaExamples />\n</ExampleWrapper>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/input-otp/input-otp-alphanumeric.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport * as InputOTP from \"$lib/registry/ui/input-otp/index.js\";\n\timport { REGEXP_ONLY_DIGITS_AND_CHARS } from \"bits-ui\";\n</script>\n\n<Example title=\"Alphanumeric\">\n\t<Field.Field>\n\t\t<Field.Label for=\"alphanumeric\">Alphanumeric</Field.Label>\n\t\t<Field.Description>Accepts both letters and numbers.</Field.Description>\n\t\t<InputOTP.Root id=\"alphanumeric\" maxlength={6} pattern={REGEXP_ONLY_DIGITS_AND_CHARS}>\n\t\t\t{#snippet children({ cells })}\n\t\t\t\t<InputOTP.Group>\n\t\t\t\t\t{#each cells.slice(0, 3) as cell (cell)}\n\t\t\t\t\t\t<InputOTP.Slot {cell} />\n\t\t\t\t\t{/each}\n\t\t\t\t</InputOTP.Group>\n\t\t\t\t<InputOTP.Separator />\n\t\t\t\t<InputOTP.Group>\n\t\t\t\t\t{#each cells.slice(3, 6) as cell (cell)}\n\t\t\t\t\t\t<InputOTP.Slot {cell} />\n\t\t\t\t\t{/each}\n\t\t\t\t</InputOTP.Group>\n\t\t\t{/snippet}\n\t\t</InputOTP.Root>\n\t</Field.Field>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/input-otp/input-otp-disabled.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport * as InputOTP from \"$lib/registry/ui/input-otp/index.js\";\n</script>\n\n<Example title=\"Disabled\">\n\t<Field.Field>\n\t\t<Field.Label for=\"disabled\">Disabled</Field.Label>\n\t\t<InputOTP.Root id=\"disabled\" maxlength={6} disabled value=\"123456\">\n\t\t\t{#snippet children({ cells })}\n\t\t\t\t<InputOTP.Group>\n\t\t\t\t\t{#each cells.slice(0, 3) as cell (cell)}\n\t\t\t\t\t\t<InputOTP.Slot {cell} />\n\t\t\t\t\t{/each}\n\t\t\t\t</InputOTP.Group>\n\t\t\t\t<InputOTP.Separator />\n\t\t\t\t<InputOTP.Group>\n\t\t\t\t\t{#each cells.slice(3, 6) as cell (cell)}\n\t\t\t\t\t\t<InputOTP.Slot {cell} />\n\t\t\t\t\t{/each}\n\t\t\t\t</InputOTP.Group>\n\t\t\t{/snippet}\n\t\t</InputOTP.Root>\n\t</Field.Field>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/input-otp/input-otp-form.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Button from \"$lib/registry/ui/button/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport * as InputOTP from \"$lib/registry/ui/input-otp/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Example title=\"Form\">\n\t<Card.Root class=\"mx-auto max-w-md\">\n\t\t<Card.Header>\n\t\t\t<Card.Title>Verify your login</Card.Title>\n\t\t\t<Card.Description>\n\t\t\t\tEnter the verification code we sent to your email address:\n\t\t\t\t<span class=\"font-medium\">m@example.com</span>.\n\t\t\t</Card.Description>\n\t\t</Card.Header>\n\t\t<Card.Content>\n\t\t\t<form>\n\t\t\t\t<Field.Field>\n\t\t\t\t\t<div class=\"flex items-center justify-between\">\n\t\t\t\t\t\t<Field.Label for=\"otp-verification\">Verification code</Field.Label>\n\t\t\t\t\t\t<Button.Root variant=\"outline\" size=\"xs\">\n\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\tlucide=\"RefreshCwIcon\"\n\t\t\t\t\t\t\t\thugeicons=\"RefreshIcon\"\n\t\t\t\t\t\t\t\ttabler=\"IconRefresh\"\n\t\t\t\t\t\t\t\tphosphor=\"ArrowClockwiseIcon\"\n\t\t\t\t\t\t\t\tremixicon=\"RiRefreshLine\"\n\t\t\t\t\t\t\t\tdata-icon=\"inline-start\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\tResend Code\n\t\t\t\t\t\t</Button.Root>\n\t\t\t\t\t</div>\n\t\t\t\t\t<InputOTP.Root maxlength={6} id=\"otp-verification\" required>\n\t\t\t\t\t\t{#snippet children({ cells })}\n\t\t\t\t\t\t\t<InputOTP.Group\n\t\t\t\t\t\t\t\tclass=\"style-nova:*:data-[slot=input-otp-slot]:h-12 style-nova:*:data-[slot=input-otp-slot]:w-11 style-vega:*:data-[slot=input-otp-slot]:h-16 style-maia:*:data-[slot=input-otp-slot]:h-16 style-vega:*:data-[slot=input-otp-slot]:w-12 style-maia:*:data-[slot=input-otp-slot]:w-12 style-mira:*:data-[slot=input-otp-slot]:h-12 style-lyra:*:data-[slot=input-otp-slot]:h-12 style-lyra:*:data-[slot=input-otp-slot]:w-11 style-mira:*:data-[slot=input-otp-slot]:w-11 *:data-[slot=input-otp-slot]:text-xl\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{#each cells.slice(0, 3) as cell (cell)}\n\t\t\t\t\t\t\t\t\t<InputOTP.Slot {cell} />\n\t\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t</InputOTP.Group>\n\t\t\t\t\t\t\t<InputOTP.Separator />\n\t\t\t\t\t\t\t<InputOTP.Group\n\t\t\t\t\t\t\t\tclass=\"style-nova:*:data-[slot=input-otp-slot]:h-12 style-nova:*:data-[slot=input-otp-slot]:w-11 style-vega:*:data-[slot=input-otp-slot]:h-16 style-maia:*:data-[slot=input-otp-slot]:h-16 style-vega:*:data-[slot=input-otp-slot]:w-12 style-maia:*:data-[slot=input-otp-slot]:w-12 style-mira:*:data-[slot=input-otp-slot]:h-12 style-lyra:*:data-[slot=input-otp-slot]:h-12 style-lyra:*:data-[slot=input-otp-slot]:w-11 style-mira:*:data-[slot=input-otp-slot]:w-11 *:data-[slot=input-otp-slot]:text-xl\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t{#each cells.slice(3, 6) as cell (cell)}\n\t\t\t\t\t\t\t\t\t<InputOTP.Slot {cell} />\n\t\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t</InputOTP.Group>\n\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t</InputOTP.Root>\n\t\t\t\t\t<Field.Description>\n\t\t\t\t\t\t<a href=\"#/\">I no longer have access to this email address.</a>\n\t\t\t\t\t</Field.Description>\n\t\t\t\t</Field.Field>\n\t\t\t</form>\n\t\t</Card.Content>\n\t\t<Card.Footer class=\"flex-col gap-2\">\n\t\t\t<Button.Root type=\"submit\" class=\"w-full\">Verify</Button.Root>\n\t\t\t<div class=\"text-muted-foreground text-sm\">\n\t\t\t\tHaving trouble signing in?\n\t\t\t\t<a\n\t\t\t\t\thref=\"#/\"\n\t\t\t\t\tclass=\"hover:text-primary underline underline-offset-4 transition-colors\"\n\t\t\t\t>\n\t\t\t\t\tContact support\n\t\t\t\t</a>\n\t\t\t</div>\n\t\t</Card.Footer>\n\t</Card.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/input-otp/input-otp-four-digits.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport * as InputOTP from \"$lib/registry/ui/input-otp/index.js\";\n\timport { REGEXP_ONLY_DIGITS } from \"bits-ui\";\n</script>\n\n<Example title=\"4 Digits\">\n\t<Field.Field>\n\t\t<Field.Label for=\"four-digits\">4 Digits</Field.Label>\n\t\t<Field.Description>Common pattern for PIN codes.</Field.Description>\n\t\t<InputOTP.Root id=\"four-digits\" maxlength={4} pattern={REGEXP_ONLY_DIGITS}>\n\t\t\t{#snippet children({ cells })}\n\t\t\t\t<InputOTP.Group>\n\t\t\t\t\t{#each cells as cell (cell)}\n\t\t\t\t\t\t<InputOTP.Slot {cell} />\n\t\t\t\t\t{/each}\n\t\t\t\t</InputOTP.Group>\n\t\t\t{/snippet}\n\t\t</InputOTP.Root>\n\t</Field.Field>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/input-otp/input-otp-invalid.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport * as InputOTP from \"$lib/registry/ui/input-otp/index.js\";\n\n\tlet value = $state(\"000000\");\n</script>\n\n<Example title=\"Invalid State\">\n\t<Field.Field>\n\t\t<Field.Label for=\"invalid\">Invalid State</Field.Label>\n\t\t<Field.Description>Example showing the invalid error state.</Field.Description>\n\t\t<InputOTP.Root id=\"invalid\" maxlength={6} bind:value>\n\t\t\t{#snippet children({ cells })}\n\t\t\t\t<InputOTP.Group>\n\t\t\t\t\t{#each cells.slice(0, 2) as cell (cell)}\n\t\t\t\t\t\t<InputOTP.Slot {cell} aria-invalid />\n\t\t\t\t\t{/each}\n\t\t\t\t</InputOTP.Group>\n\t\t\t\t<InputOTP.Separator />\n\t\t\t\t<InputOTP.Group>\n\t\t\t\t\t{#each cells.slice(2, 4) as cell (cell)}\n\t\t\t\t\t\t<InputOTP.Slot {cell} aria-invalid />\n\t\t\t\t\t{/each}\n\t\t\t\t</InputOTP.Group>\n\t\t\t\t<InputOTP.Separator />\n\t\t\t\t<InputOTP.Group>\n\t\t\t\t\t{#each cells.slice(4, 6) as cell (cell)}\n\t\t\t\t\t\t<InputOTP.Slot {cell} aria-invalid />\n\t\t\t\t\t{/each}\n\t\t\t\t</InputOTP.Group>\n\t\t\t{/snippet}\n\t\t</InputOTP.Root>\n\t\t<Field.Error errors={[{ message: \"Invalid code. Please try again.\" }]} />\n\t</Field.Field>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/input-otp/input-otp-pattern.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport * as InputOTP from \"$lib/registry/ui/input-otp/index.js\";\n\timport { REGEXP_ONLY_DIGITS } from \"bits-ui\";\n</script>\n\n<Example title=\"Digits Only\">\n\t<Field.Field>\n\t\t<Field.Label for=\"digits-only\">Digits Only</Field.Label>\n\t\t<InputOTP.Root id=\"digits-only\" maxlength={6} pattern={REGEXP_ONLY_DIGITS}>\n\t\t\t{#snippet children({ cells })}\n\t\t\t\t<InputOTP.Group>\n\t\t\t\t\t{#each cells as cell (cell)}\n\t\t\t\t\t\t<InputOTP.Slot {cell} />\n\t\t\t\t\t{/each}\n\t\t\t\t</InputOTP.Group>\n\t\t\t{/snippet}\n\t\t</InputOTP.Root>\n\t</Field.Field>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/input-otp/input-otp-simple.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport * as InputOTP from \"$lib/registry/ui/input-otp/index.js\";\n</script>\n\n<Example title=\"Simple\">\n\t<Field.Field>\n\t\t<Field.Label for=\"simple\">Simple</Field.Label>\n\t\t<InputOTP.Root id=\"simple\" maxlength={6}>\n\t\t\t{#snippet children({ cells })}\n\t\t\t\t<InputOTP.Group>\n\t\t\t\t\t{#each cells.slice(0, 3) as cell (cell)}\n\t\t\t\t\t\t<InputOTP.Slot {cell} />\n\t\t\t\t\t{/each}\n\t\t\t\t</InputOTP.Group>\n\t\t\t\t<InputOTP.Separator />\n\t\t\t\t<InputOTP.Group>\n\t\t\t\t\t{#each cells.slice(3, 6) as cell (cell)}\n\t\t\t\t\t\t<InputOTP.Slot {cell} />\n\t\t\t\t\t{/each}\n\t\t\t\t</InputOTP.Group>\n\t\t\t{/snippet}\n\t\t</InputOTP.Root>\n\t</Field.Field>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/input-otp/input-otp-with-separator.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport * as InputOTP from \"$lib/registry/ui/input-otp/index.js\";\n\n\tlet value = $state(\"123456\");\n</script>\n\n<Example title=\"With Separator\">\n\t<Field.Field>\n\t\t<Field.Label for=\"with-separator\">With Separator</Field.Label>\n\t\t<InputOTP.Root id=\"with-separator\" maxlength={6} bind:value>\n\t\t\t{#snippet children({ cells })}\n\t\t\t\t<InputOTP.Group>\n\t\t\t\t\t{#each cells.slice(0, 2) as cell (cell)}\n\t\t\t\t\t\t<InputOTP.Slot {cell} />\n\t\t\t\t\t{/each}\n\t\t\t\t</InputOTP.Group>\n\t\t\t\t<InputOTP.Separator />\n\t\t\t\t<InputOTP.Group>\n\t\t\t\t\t{#each cells.slice(2, 4) as cell (cell)}\n\t\t\t\t\t\t<InputOTP.Slot {cell} />\n\t\t\t\t\t{/each}\n\t\t\t\t</InputOTP.Group>\n\t\t\t\t<InputOTP.Separator />\n\t\t\t\t<InputOTP.Group>\n\t\t\t\t\t{#each cells.slice(4, 6) as cell (cell)}\n\t\t\t\t\t\t<InputOTP.Slot {cell} />\n\t\t\t\t\t{/each}\n\t\t\t\t</InputOTP.Group>\n\t\t\t{/snippet}\n\t\t</InputOTP.Root>\n\t</Field.Field>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/input-otp/input-otp.svelte",
    "content": "<script lang=\"ts\">\n\timport ExampleWrapper from \"../../../../../routes/(app)/(layout)/(create)/components/example-wrapper.svelte\";\n\timport InputOTPForm from \"./input-otp-form.svelte\";\n\timport InputOTPSimple from \"./input-otp-simple.svelte\";\n\timport InputOTPPattern from \"./input-otp-pattern.svelte\";\n\timport InputOTPWithSeparator from \"./input-otp-with-separator.svelte\";\n\timport InputOTPAlphanumeric from \"./input-otp-alphanumeric.svelte\";\n\timport InputOTPDisabled from \"./input-otp-disabled.svelte\";\n\timport InputOTPFourDigits from \"./input-otp-four-digits.svelte\";\n\timport InputOTPInvalid from \"./input-otp-invalid.svelte\";\n</script>\n\n<ExampleWrapper>\n\t<InputOTPForm />\n\t<InputOTPSimple />\n\t<InputOTPPattern />\n\t<InputOTPWithSeparator />\n\t<InputOTPAlphanumeric />\n\t<InputOTPDisabled />\n\t<InputOTPFourDigits />\n\t<InputOTPInvalid />\n</ExampleWrapper>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/item/item-as-child.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Item from \"$lib/registry/ui/item/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Example title=\"asChild\">\n\t<Item.Group>\n\t\t<Item.Root>\n\t\t\t{#snippet child({ props })}\n\t\t\t\t<a href=\"#/\" {...props}>\n\t\t\t\t\t<Item.Content>\n\t\t\t\t\t\t<Item.Title>Title Only (Link)</Item.Title>\n\t\t\t\t\t</Item.Content>\n\t\t\t\t</a>\n\t\t\t{/snippet}\n\t\t</Item.Root>\n\t\t<Item.Root>\n\t\t\t{#snippet child({ props })}\n\t\t\t\t<a href=\"#/\" {...props}>\n\t\t\t\t\t<Item.Content>\n\t\t\t\t\t\t<Item.Title>Title + Description (Link)</Item.Title>\n\t\t\t\t\t\t<Item.Description>\n\t\t\t\t\t\t\tClickable item with title and description.\n\t\t\t\t\t\t</Item.Description>\n\t\t\t\t\t</Item.Content>\n\t\t\t\t</a>\n\t\t\t{/snippet}\n\t\t</Item.Root>\n\t\t<Item.Root>\n\t\t\t{#snippet child({ props })}\n\t\t\t\t<a href=\"#/\" {...props}>\n\t\t\t\t\t<Item.Media variant=\"icon\">\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"InboxIcon\"\n\t\t\t\t\t\t\ttabler=\"IconArchive\"\n\t\t\t\t\t\t\thugeicons=\"Archive02Icon\"\n\t\t\t\t\t\t\tphosphor=\"ArchiveIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiArchiveLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Item.Media>\n\t\t\t\t\t<Item.Content>\n\t\t\t\t\t\t<Item.Title>Media + Title (Link)</Item.Title>\n\t\t\t\t\t</Item.Content>\n\t\t\t\t</a>\n\t\t\t{/snippet}\n\t\t</Item.Root>\n\t\t<Item.Root>\n\t\t\t{#snippet child({ props })}\n\t\t\t\t<a href=\"#/\" {...props}>\n\t\t\t\t\t<Item.Media variant=\"icon\">\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"InboxIcon\"\n\t\t\t\t\t\t\ttabler=\"IconArchive\"\n\t\t\t\t\t\t\thugeicons=\"Archive02Icon\"\n\t\t\t\t\t\t\tphosphor=\"ArchiveIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiArchiveLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Item.Media>\n\t\t\t\t\t<Item.Content>\n\t\t\t\t\t\t<Item.Title>Media + Title + Description (Link)</Item.Title>\n\t\t\t\t\t\t<Item.Description>\n\t\t\t\t\t\t\tComplete link item with media, title, and description.\n\t\t\t\t\t\t</Item.Description>\n\t\t\t\t\t</Item.Content>\n\t\t\t\t</a>\n\t\t\t{/snippet}\n\t\t</Item.Root>\n\t\t<Item.Root>\n\t\t\t{#snippet child({ props })}\n\t\t\t\t<a href=\"#/\" {...props}>\n\t\t\t\t\t<Item.Content>\n\t\t\t\t\t\t<Item.Title>With Actions (Link)</Item.Title>\n\t\t\t\t\t\t<Item.Description>Link item that also has action buttons.</Item.Description>\n\t\t\t\t\t</Item.Content>\n\t\t\t\t\t<Item.Actions>\n\t\t\t\t\t\t<Button variant=\"outline\" size=\"sm\">Share</Button>\n\t\t\t\t\t</Item.Actions>\n\t\t\t\t</a>\n\t\t\t{/snippet}\n\t\t</Item.Root>\n\t</Item.Group>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/item/item-footer.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Item from \"$lib/registry/ui/item/index.js\";\n</script>\n\n<Example title=\"ItemFooter\">\n\t<Item.Root>\n\t\t<Item.Content>\n\t\t\t<Item.Title>Quarterly Report Q4 2024</Item.Title>\n\t\t\t<Item.Description>\n\t\t\t\tFinancial overview including revenue, expenses, and growth metrics for the fourth\n\t\t\t\tquarter.\n\t\t\t</Item.Description>\n\t\t</Item.Content>\n\t\t<Item.Footer>\n\t\t\t<span class=\"text-muted-foreground text-sm\">Last updated 2 hours ago</span>\n\t\t</Item.Footer>\n\t</Item.Root>\n\t<Item.Root variant=\"outline\">\n\t\t<Item.Content>\n\t\t\t<Item.Title>User Research Findings</Item.Title>\n\t\t\t<Item.Description>\n\t\t\t\tInsights from interviews and surveys conducted with 50+ users across different\n\t\t\t\tdemographics.\n\t\t\t</Item.Description>\n\t\t</Item.Content>\n\t\t<Item.Footer>\n\t\t\t<span class=\"text-muted-foreground text-sm\">Created by Sarah Chen</span>\n\t\t</Item.Footer>\n\t</Item.Root>\n\t<Item.Root variant=\"muted\">\n\t\t<Item.Content>\n\t\t\t<Item.Title>Product Roadmap</Item.Title>\n\t\t\t<Item.Description>\n\t\t\t\tPlanned features and improvements scheduled for the next three months.\n\t\t\t</Item.Description>\n\t\t</Item.Content>\n\t\t<Item.Footer>\n\t\t\t<span class=\"text-muted-foreground text-sm\">12 comments</span>\n\t\t</Item.Footer>\n\t</Item.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/item/item-group.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Item from \"$lib/registry/ui/item/index.js\";\n</script>\n\n<Example title=\"ItemGroup\">\n\t<Item.Group>\n\t\t<Item.Root>\n\t\t\t<Item.Content>\n\t\t\t\t<Item.Title>Item 1</Item.Title>\n\t\t\t\t<Item.Description>First item in the group.</Item.Description>\n\t\t\t</Item.Content>\n\t\t</Item.Root>\n\t\t<Item.Root>\n\t\t\t<Item.Content>\n\t\t\t\t<Item.Title>Item 2</Item.Title>\n\t\t\t\t<Item.Description>Second item in the group.</Item.Description>\n\t\t\t</Item.Content>\n\t\t</Item.Root>\n\t\t<Item.Root>\n\t\t\t<Item.Content>\n\t\t\t\t<Item.Title>Item 3</Item.Title>\n\t\t\t\t<Item.Description>Third item in the group.</Item.Description>\n\t\t\t</Item.Content>\n\t\t</Item.Root>\n\t</Item.Group>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/item/item-header-and-footer.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Item from \"$lib/registry/ui/item/index.js\";\n</script>\n\n<Example title=\"ItemHeader + ItemFooter\">\n\t<Item.Root>\n\t\t<Item.Header>\n\t\t\t<span class=\"text-sm font-medium\">Team Project</span>\n\t\t</Item.Header>\n\t\t<Item.Content>\n\t\t\t<Item.Title>Website Redesign</Item.Title>\n\t\t\t<Item.Description>\n\t\t\t\tComplete overhaul of the company website with modern design principles and improved\n\t\t\t\tuser experience.\n\t\t\t</Item.Description>\n\t\t</Item.Content>\n\t\t<Item.Footer>\n\t\t\t<span class=\"text-muted-foreground text-sm\">Updated 5 minutes ago</span>\n\t\t</Item.Footer>\n\t</Item.Root>\n\t<Item.Root variant=\"outline\">\n\t\t<Item.Header>\n\t\t\t<span class=\"text-sm font-medium\">Client Work</span>\n\t\t</Item.Header>\n\t\t<Item.Content>\n\t\t\t<Item.Title>Mobile App Development</Item.Title>\n\t\t\t<Item.Description>\n\t\t\t\tBuilding a cross-platform mobile application for iOS and Android with React Native.\n\t\t\t</Item.Description>\n\t\t</Item.Content>\n\t\t<Item.Footer>\n\t\t\t<span class=\"text-muted-foreground text-sm\">Status: In Progress</span>\n\t\t</Item.Footer>\n\t</Item.Root>\n\t<Item.Root variant=\"muted\">\n\t\t<Item.Header>\n\t\t\t<span class=\"text-sm font-medium\">Documentation</span>\n\t\t</Item.Header>\n\t\t<Item.Content>\n\t\t\t<Item.Title>API Integration Guide</Item.Title>\n\t\t\t<Item.Description>\n\t\t\t\tStep-by-step instructions for integrating third-party APIs with authentication and\n\t\t\t\terror handling.\n\t\t\t</Item.Description>\n\t\t</Item.Content>\n\t\t<Item.Footer>\n\t\t\t<span class=\"text-muted-foreground text-sm\">Category: Technical • 3 attachments</span>\n\t\t</Item.Footer>\n\t</Item.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/item/item-header.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Item from \"$lib/registry/ui/item/index.js\";\n</script>\n\n<Example title=\"ItemHeader\">\n\t<Item.Root>\n\t\t<Item.Header>\n\t\t\t<span class=\"text-sm font-medium\">Design System</span>\n\t\t</Item.Header>\n\t\t<Item.Content>\n\t\t\t<Item.Title>Component Library</Item.Title>\n\t\t\t<Item.Description>\n\t\t\t\tA comprehensive collection of reusable UI components for building consistent\n\t\t\t\tinterfaces.\n\t\t\t</Item.Description>\n\t\t</Item.Content>\n\t</Item.Root>\n\t<Item.Root variant=\"outline\">\n\t\t<Item.Header>\n\t\t\t<span class=\"text-sm font-medium\">Marketing</span>\n\t\t</Item.Header>\n\t\t<Item.Content>\n\t\t\t<Item.Title>Campaign Analytics</Item.Title>\n\t\t\t<Item.Description>\n\t\t\t\tTrack performance metrics and engagement rates across all marketing channels.\n\t\t\t</Item.Description>\n\t\t</Item.Content>\n\t</Item.Root>\n\t<Item.Root variant=\"muted\">\n\t\t<Item.Header>\n\t\t\t<span class=\"text-sm font-medium\">Engineering</span>\n\t\t</Item.Header>\n\t\t<Item.Content>\n\t\t\t<Item.Title>API Documentation</Item.Title>\n\t\t\t<Item.Description>\n\t\t\t\tComplete reference guide for all available endpoints and authentication methods.\n\t\t\t</Item.Description>\n\t\t</Item.Content>\n\t</Item.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/item/item-muted-group.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Item from \"$lib/registry/ui/item/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n</script>\n\n<Example title=\"Muted - ItemGroup\">\n\t<Item.Group>\n\t\t<Item.Root variant=\"muted\">\n\t\t\t<Item.Content>\n\t\t\t\t<Item.Title>Item 1</Item.Title>\n\t\t\t\t<Item.Description>First item in muted group.</Item.Description>\n\t\t\t</Item.Content>\n\t\t\t<Item.Actions>\n\t\t\t\t<Button variant=\"outline\" size=\"sm\">Action</Button>\n\t\t\t</Item.Actions>\n\t\t</Item.Root>\n\t\t<Item.Root variant=\"muted\">\n\t\t\t<Item.Content>\n\t\t\t\t<Item.Title>Item 2</Item.Title>\n\t\t\t\t<Item.Description>Second item in muted group.</Item.Description>\n\t\t\t</Item.Content>\n\t\t\t<Item.Actions>\n\t\t\t\t<Button variant=\"outline\" size=\"sm\">Action</Button>\n\t\t\t</Item.Actions>\n\t\t</Item.Root>\n\t\t<Item.Root variant=\"muted\">\n\t\t\t<Item.Content>\n\t\t\t\t<Item.Title>Item 3</Item.Title>\n\t\t\t\t<Item.Description>Third item in muted group.</Item.Description>\n\t\t\t</Item.Content>\n\t\t\t<Item.Actions>\n\t\t\t\t<Button variant=\"outline\" size=\"sm\">Action</Button>\n\t\t\t</Item.Actions>\n\t\t</Item.Root>\n\t</Item.Group>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/item/item-muted-image.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Item from \"$lib/registry/ui/item/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n</script>\n\n<Example title=\"Muted - ItemMedia image\">\n\t<Item.Root variant=\"muted\">\n\t\t<Item.Media variant=\"image\">\n\t\t\t<img\n\t\t\t\tsrc=\"https://avatar.vercel.sh/Project\"\n\t\t\t\talt=\"Project\"\n\t\t\t\twidth={40}\n\t\t\t\theight={40}\n\t\t\t\tclass=\"object-cover grayscale\"\n\t\t\t/>\n\t\t</Item.Media>\n\t\t<Item.Content>\n\t\t\t<Item.Title>Project Dashboard</Item.Title>\n\t\t\t<Item.Description>Overview of project settings and configuration.</Item.Description>\n\t\t</Item.Content>\n\t</Item.Root>\n\t<Item.Root variant=\"muted\">\n\t\t<Item.Media variant=\"image\">\n\t\t\t<img\n\t\t\t\tsrc=\"https://avatar.vercel.sh/Document\"\n\t\t\t\talt=\"Document\"\n\t\t\t\twidth={40}\n\t\t\t\theight={40}\n\t\t\t\tclass=\"object-cover grayscale\"\n\t\t\t/>\n\t\t</Item.Media>\n\t\t<Item.Content>\n\t\t\t<Item.Title>Document</Item.Title>\n\t\t\t<Item.Description>A document with metadata displayed.</Item.Description>\n\t\t</Item.Content>\n\t\t<Item.Actions>\n\t\t\t<Button variant=\"outline\" size=\"sm\">View</Button>\n\t\t</Item.Actions>\n\t</Item.Root>\n\t<Item.Root variant=\"muted\">\n\t\t<Item.Media variant=\"image\">\n\t\t\t<img\n\t\t\t\tsrc=\"https://avatar.vercel.sh/File\"\n\t\t\t\talt=\"File\"\n\t\t\t\twidth={40}\n\t\t\t\theight={40}\n\t\t\t\tclass=\"object-cover grayscale\"\n\t\t\t/>\n\t\t</Item.Media>\n\t\t<Item.Content>\n\t\t\t<Item.Title>File Attachment</Item.Title>\n\t\t\t<Item.Description>\n\t\t\t\tComplete file with image, title, description, and action button.\n\t\t\t</Item.Description>\n\t\t</Item.Content>\n\t\t<Item.Actions>\n\t\t\t<Button size=\"sm\">Download</Button>\n\t\t</Item.Actions>\n\t</Item.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/item/item-muted-link.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Item from \"$lib/registry/ui/item/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Example title=\"Muted - asChild\">\n\t<Item.Group>\n\t\t<Item.Root variant=\"muted\">\n\t\t\t{#snippet child({ props })}\n\t\t\t\t<a href=\"#/\" {...props}>\n\t\t\t\t\t<Item.Content>\n\t\t\t\t\t\t<Item.Title>Title Only (Link)</Item.Title>\n\t\t\t\t\t</Item.Content>\n\t\t\t\t</a>\n\t\t\t{/snippet}\n\t\t</Item.Root>\n\t\t<Item.Root variant=\"muted\">\n\t\t\t{#snippet child({ props })}\n\t\t\t\t<a href=\"#/\" {...props}>\n\t\t\t\t\t<Item.Content>\n\t\t\t\t\t\t<Item.Title>Title + Description (Link)</Item.Title>\n\t\t\t\t\t\t<Item.Description>\n\t\t\t\t\t\t\tClickable item with title and description.\n\t\t\t\t\t\t</Item.Description>\n\t\t\t\t\t</Item.Content>\n\t\t\t\t</a>\n\t\t\t{/snippet}\n\t\t</Item.Root>\n\t\t<Item.Root variant=\"muted\">\n\t\t\t{#snippet child({ props })}\n\t\t\t\t<a href=\"#/\" {...props}>\n\t\t\t\t\t<Item.Media variant=\"icon\">\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"InboxIcon\"\n\t\t\t\t\t\t\ttabler=\"IconArchive\"\n\t\t\t\t\t\t\thugeicons=\"Archive02Icon\"\n\t\t\t\t\t\t\tphosphor=\"ArchiveIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiArchiveLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Item.Media>\n\t\t\t\t\t<Item.Content>\n\t\t\t\t\t\t<Item.Title>Media + Title (Link)</Item.Title>\n\t\t\t\t\t</Item.Content>\n\t\t\t\t</a>\n\t\t\t{/snippet}\n\t\t</Item.Root>\n\t\t<Item.Root variant=\"muted\">\n\t\t\t{#snippet child({ props })}\n\t\t\t\t<a href=\"#/\" {...props}>\n\t\t\t\t\t<Item.Media variant=\"icon\">\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"InboxIcon\"\n\t\t\t\t\t\t\ttabler=\"IconArchive\"\n\t\t\t\t\t\t\thugeicons=\"Archive02Icon\"\n\t\t\t\t\t\t\tphosphor=\"ArchiveIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiArchiveLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Item.Media>\n\t\t\t\t\t<Item.Content>\n\t\t\t\t\t\t<Item.Title>Media + Title + Description (Link)</Item.Title>\n\t\t\t\t\t\t<Item.Description>\n\t\t\t\t\t\t\tComplete link item with media, title, and description.\n\t\t\t\t\t\t</Item.Description>\n\t\t\t\t\t</Item.Content>\n\t\t\t\t</a>\n\t\t\t{/snippet}\n\t\t</Item.Root>\n\t\t<Item.Root variant=\"muted\">\n\t\t\t{#snippet child({ props })}\n\t\t\t\t<a href=\"#/\" {...props}>\n\t\t\t\t\t<Item.Content>\n\t\t\t\t\t\t<Item.Title>With Actions (Link)</Item.Title>\n\t\t\t\t\t\t<Item.Description>Link item that also has action buttons.</Item.Description>\n\t\t\t\t\t</Item.Content>\n\t\t\t\t\t<Item.Actions>\n\t\t\t\t\t\t<Button variant=\"outline\" size=\"sm\">Share</Button>\n\t\t\t\t\t</Item.Actions>\n\t\t\t\t</a>\n\t\t\t{/snippet}\n\t\t</Item.Root>\n\t</Item.Group>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/item/item-outline-group.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Item from \"$lib/registry/ui/item/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Example title=\"Outline - ItemGroup\">\n\t<Item.Group>\n\t\t<Item.Root variant=\"outline\">\n\t\t\t<Item.Media variant=\"icon\">\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"InboxIcon\"\n\t\t\t\t\ttabler=\"IconArchive\"\n\t\t\t\t\thugeicons=\"Archive02Icon\"\n\t\t\t\t\tphosphor=\"ArchiveIcon\"\n\t\t\t\t\tremixicon=\"RiArchiveLine\"\n\t\t\t\t/>\n\t\t\t</Item.Media>\n\t\t\t<Item.Content>\n\t\t\t\t<Item.Title>Item 1</Item.Title>\n\t\t\t\t<Item.Description>First item with icon.</Item.Description>\n\t\t\t</Item.Content>\n\t\t</Item.Root>\n\t\t<Item.Root variant=\"outline\">\n\t\t\t<Item.Media variant=\"icon\">\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"InboxIcon\"\n\t\t\t\t\ttabler=\"IconArchive\"\n\t\t\t\t\thugeicons=\"Archive02Icon\"\n\t\t\t\t\tphosphor=\"ArchiveIcon\"\n\t\t\t\t\tremixicon=\"RiArchiveLine\"\n\t\t\t\t/>\n\t\t\t</Item.Media>\n\t\t\t<Item.Content>\n\t\t\t\t<Item.Title>Item 2</Item.Title>\n\t\t\t\t<Item.Description>Second item with icon.</Item.Description>\n\t\t\t</Item.Content>\n\t\t</Item.Root>\n\t\t<Item.Root variant=\"outline\">\n\t\t\t<Item.Media variant=\"icon\">\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"InboxIcon\"\n\t\t\t\t\ttabler=\"IconArchive\"\n\t\t\t\t\thugeicons=\"Archive02Icon\"\n\t\t\t\t\tphosphor=\"ArchiveIcon\"\n\t\t\t\t\tremixicon=\"RiArchiveLine\"\n\t\t\t\t/>\n\t\t\t</Item.Media>\n\t\t\t<Item.Content>\n\t\t\t\t<Item.Title>Item 3</Item.Title>\n\t\t\t\t<Item.Description>Third item with icon.</Item.Description>\n\t\t\t</Item.Content>\n\t\t</Item.Root>\n\t</Item.Group>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/item/item-outline-image-extra-small.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Item from \"$lib/registry/ui/item/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n</script>\n\n<Example title=\"Outline - ItemMedia image - Extra Small\">\n\t<Item.Root variant=\"outline\" size=\"xs\">\n\t\t<Item.Media variant=\"image\">\n\t\t\t<img\n\t\t\t\tsrc=\"https://avatar.vercel.sh/Project\"\n\t\t\t\talt=\"Project\"\n\t\t\t\twidth={40}\n\t\t\t\theight={40}\n\t\t\t\tclass=\"object-cover grayscale\"\n\t\t\t/>\n\t\t</Item.Media>\n\t\t<Item.Content>\n\t\t\t<Item.Title>Project Dashboard</Item.Title>\n\t\t</Item.Content>\n\t</Item.Root>\n\t<Item.Root variant=\"outline\" size=\"xs\">\n\t\t<Item.Media variant=\"image\">\n\t\t\t<img\n\t\t\t\tsrc=\"https://avatar.vercel.sh/Document\"\n\t\t\t\talt=\"Document\"\n\t\t\t\twidth={40}\n\t\t\t\theight={40}\n\t\t\t\tclass=\"object-cover grayscale\"\n\t\t\t/>\n\t\t</Item.Media>\n\t\t<Item.Content>\n\t\t\t<Item.Title>Document</Item.Title>\n\t\t</Item.Content>\n\t\t<Item.Actions>\n\t\t\t<Button variant=\"outline\" size=\"sm\">View</Button>\n\t\t</Item.Actions>\n\t</Item.Root>\n\t<Item.Root variant=\"outline\" size=\"xs\">\n\t\t<Item.Media variant=\"image\">\n\t\t\t<img\n\t\t\t\tsrc=\"https://avatar.vercel.sh/File\"\n\t\t\t\talt=\"File\"\n\t\t\t\twidth={40}\n\t\t\t\theight={40}\n\t\t\t\tclass=\"object-cover grayscale\"\n\t\t\t/>\n\t\t</Item.Media>\n\t\t<Item.Content>\n\t\t\t<Item.Title>File Attachment</Item.Title>\n\t\t</Item.Content>\n\t\t<Item.Actions>\n\t\t\t<Button size=\"sm\">Download</Button>\n\t\t</Item.Actions>\n\t</Item.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/item/item-outline-image-small.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Item from \"$lib/registry/ui/item/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n</script>\n\n<Example title=\"Outline - ItemMedia image - Small\">\n\t<Item.Root variant=\"outline\" size=\"sm\">\n\t\t<Item.Media variant=\"image\">\n\t\t\t<img\n\t\t\t\tsrc=\"https://avatar.vercel.sh/Project\"\n\t\t\t\talt=\"Project\"\n\t\t\t\twidth={40}\n\t\t\t\theight={40}\n\t\t\t\tclass=\"object-cover grayscale\"\n\t\t\t/>\n\t\t</Item.Media>\n\t\t<Item.Content>\n\t\t\t<Item.Title>Project Dashboard</Item.Title>\n\t\t\t<Item.Description>Overview of project settings and configuration.</Item.Description>\n\t\t</Item.Content>\n\t</Item.Root>\n\t<Item.Root variant=\"outline\" size=\"sm\">\n\t\t<Item.Media variant=\"image\">\n\t\t\t<img\n\t\t\t\tsrc=\"https://avatar.vercel.sh/Document\"\n\t\t\t\talt=\"Document\"\n\t\t\t\twidth={40}\n\t\t\t\theight={40}\n\t\t\t\tclass=\"object-cover grayscale\"\n\t\t\t/>\n\t\t</Item.Media>\n\t\t<Item.Content>\n\t\t\t<Item.Title>Document</Item.Title>\n\t\t\t<Item.Description>A document with metadata displayed.</Item.Description>\n\t\t</Item.Content>\n\t\t<Item.Actions>\n\t\t\t<Button variant=\"outline\" size=\"sm\">View</Button>\n\t\t</Item.Actions>\n\t</Item.Root>\n\t<Item.Root variant=\"outline\" size=\"sm\">\n\t\t<Item.Media variant=\"image\">\n\t\t\t<img\n\t\t\t\tsrc=\"https://avatar.vercel.sh/File\"\n\t\t\t\talt=\"File\"\n\t\t\t\twidth={40}\n\t\t\t\theight={40}\n\t\t\t\tclass=\"object-cover grayscale\"\n\t\t\t/>\n\t\t</Item.Media>\n\t\t<Item.Content>\n\t\t\t<Item.Title>File Attachment</Item.Title>\n\t\t\t<Item.Description>\n\t\t\t\tComplete file with image, title, description, and action button.\n\t\t\t</Item.Description>\n\t\t</Item.Content>\n\t\t<Item.Actions>\n\t\t\t<Button size=\"sm\">Download</Button>\n\t\t</Item.Actions>\n\t</Item.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/item/item-outline-image.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Item from \"$lib/registry/ui/item/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n</script>\n\n<Example title=\"Outline - ItemMedia image\">\n\t<Item.Root variant=\"outline\">\n\t\t<Item.Media variant=\"image\">\n\t\t\t<img\n\t\t\t\tsrc=\"https://avatar.vercel.sh/Project\"\n\t\t\t\talt=\"Project\"\n\t\t\t\twidth={40}\n\t\t\t\theight={40}\n\t\t\t\tclass=\"object-cover grayscale\"\n\t\t\t/>\n\t\t</Item.Media>\n\t\t<Item.Content>\n\t\t\t<Item.Title>Project Dashboard</Item.Title>\n\t\t\t<Item.Description>Overview of project settings and configuration.</Item.Description>\n\t\t</Item.Content>\n\t</Item.Root>\n\t<Item.Root variant=\"outline\">\n\t\t<Item.Media variant=\"image\">\n\t\t\t<img\n\t\t\t\tsrc=\"https://avatar.vercel.sh/Document\"\n\t\t\t\talt=\"Document\"\n\t\t\t\twidth={40}\n\t\t\t\theight={40}\n\t\t\t\tclass=\"object-cover grayscale\"\n\t\t\t/>\n\t\t</Item.Media>\n\t\t<Item.Content>\n\t\t\t<Item.Title>Document</Item.Title>\n\t\t\t<Item.Description>A document with metadata displayed.</Item.Description>\n\t\t</Item.Content>\n\t\t<Item.Actions>\n\t\t\t<Button variant=\"outline\" size=\"sm\">View</Button>\n\t\t</Item.Actions>\n\t</Item.Root>\n\t<Item.Root variant=\"outline\">\n\t\t<Item.Media variant=\"image\">\n\t\t\t<img\n\t\t\t\tsrc=\"https://avatar.vercel.sh/File\"\n\t\t\t\talt=\"File\"\n\t\t\t\twidth={40}\n\t\t\t\theight={40}\n\t\t\t\tclass=\"object-cover grayscale\"\n\t\t\t/>\n\t\t</Item.Media>\n\t\t<Item.Content>\n\t\t\t<Item.Title>File Attachment</Item.Title>\n\t\t\t<Item.Description>\n\t\t\t\tComplete file with image, title, description, and action button.\n\t\t\t</Item.Description>\n\t\t</Item.Content>\n\t\t<Item.Actions>\n\t\t\t<Button size=\"sm\">Download</Button>\n\t\t</Item.Actions>\n\t</Item.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/item/item-outline-link.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Item from \"$lib/registry/ui/item/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Example title=\"Outline - asChild\">\n\t<Item.Group>\n\t\t<Item.Root variant=\"outline\">\n\t\t\t{#snippet child({ props })}\n\t\t\t\t<a href=\"#/\" {...props}>\n\t\t\t\t\t<Item.Content>\n\t\t\t\t\t\t<Item.Title>Title Only (Link)</Item.Title>\n\t\t\t\t\t</Item.Content>\n\t\t\t\t</a>\n\t\t\t{/snippet}\n\t\t</Item.Root>\n\t\t<Item.Root variant=\"outline\">\n\t\t\t{#snippet child({ props })}\n\t\t\t\t<a href=\"#/\" {...props}>\n\t\t\t\t\t<Item.Content>\n\t\t\t\t\t\t<Item.Title>Title + Description (Link)</Item.Title>\n\t\t\t\t\t\t<Item.Description>\n\t\t\t\t\t\t\tClickable item with title and description.\n\t\t\t\t\t\t</Item.Description>\n\t\t\t\t\t</Item.Content>\n\t\t\t\t</a>\n\t\t\t{/snippet}\n\t\t</Item.Root>\n\t\t<Item.Root variant=\"outline\">\n\t\t\t{#snippet child({ props })}\n\t\t\t\t<a href=\"#/\" {...props}>\n\t\t\t\t\t<Item.Media variant=\"icon\">\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"InboxIcon\"\n\t\t\t\t\t\t\ttabler=\"IconArchive\"\n\t\t\t\t\t\t\thugeicons=\"Archive02Icon\"\n\t\t\t\t\t\t\tphosphor=\"ArchiveIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiArchiveLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Item.Media>\n\t\t\t\t\t<Item.Content>\n\t\t\t\t\t\t<Item.Title>Media + Title (Link)</Item.Title>\n\t\t\t\t\t</Item.Content>\n\t\t\t\t</a>\n\t\t\t{/snippet}\n\t\t</Item.Root>\n\t\t<Item.Root variant=\"outline\">\n\t\t\t{#snippet child({ props })}\n\t\t\t\t<a href=\"#/\" {...props}>\n\t\t\t\t\t<Item.Media variant=\"icon\">\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"InboxIcon\"\n\t\t\t\t\t\t\ttabler=\"IconArchive\"\n\t\t\t\t\t\t\thugeicons=\"Archive02Icon\"\n\t\t\t\t\t\t\tphosphor=\"ArchiveIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiArchiveLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Item.Media>\n\t\t\t\t\t<Item.Content>\n\t\t\t\t\t\t<Item.Title>Media + Title + Description (Link)</Item.Title>\n\t\t\t\t\t\t<Item.Description>\n\t\t\t\t\t\t\tComplete link item with media, title, and description.\n\t\t\t\t\t\t</Item.Description>\n\t\t\t\t\t</Item.Content>\n\t\t\t\t</a>\n\t\t\t{/snippet}\n\t\t</Item.Root>\n\t\t<Item.Root variant=\"outline\">\n\t\t\t{#snippet child({ props })}\n\t\t\t\t<a href=\"#/\" {...props}>\n\t\t\t\t\t<Item.Content>\n\t\t\t\t\t\t<Item.Title>With Actions (Link)</Item.Title>\n\t\t\t\t\t\t<Item.Description>Link item that also has action buttons.</Item.Description>\n\t\t\t\t\t</Item.Content>\n\t\t\t\t\t<Item.Actions>\n\t\t\t\t\t\t<Button variant=\"outline\" size=\"sm\">Share</Button>\n\t\t\t\t\t</Item.Actions>\n\t\t\t\t</a>\n\t\t\t{/snippet}\n\t\t</Item.Root>\n\t</Item.Group>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/item/item-separator.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Item from \"$lib/registry/ui/item/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Example title=\"ItemSeparator\">\n\t<Item.Group>\n\t\t<Item.Root variant=\"outline\">\n\t\t\t<Item.Media variant=\"icon\">\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"InboxIcon\"\n\t\t\t\t\ttabler=\"IconArchive\"\n\t\t\t\t\thugeicons=\"Archive02Icon\"\n\t\t\t\t\tphosphor=\"ArchiveIcon\"\n\t\t\t\t\tremixicon=\"RiArchiveLine\"\n\t\t\t\t/>\n\t\t\t</Item.Media>\n\t\t\t<Item.Content>\n\t\t\t\t<Item.Title>Inbox</Item.Title>\n\t\t\t\t<Item.Description>View all incoming messages.</Item.Description>\n\t\t\t</Item.Content>\n\t\t</Item.Root>\n\t\t<Item.Separator />\n\t\t<Item.Root variant=\"outline\">\n\t\t\t<Item.Media variant=\"icon\">\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"InboxIcon\"\n\t\t\t\t\ttabler=\"IconArchive\"\n\t\t\t\t\thugeicons=\"Archive02Icon\"\n\t\t\t\t\tphosphor=\"ArchiveIcon\"\n\t\t\t\t\tremixicon=\"RiArchiveLine\"\n\t\t\t\t/>\n\t\t\t</Item.Media>\n\t\t\t<Item.Content>\n\t\t\t\t<Item.Title>Sent</Item.Title>\n\t\t\t\t<Item.Description>View all sent messages.</Item.Description>\n\t\t\t</Item.Content>\n\t\t</Item.Root>\n\t\t<Item.Separator />\n\t\t<Item.Root variant=\"outline\">\n\t\t\t<Item.Media variant=\"icon\">\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"InboxIcon\"\n\t\t\t\t\ttabler=\"IconArchive\"\n\t\t\t\t\thugeicons=\"Archive02Icon\"\n\t\t\t\t\tphosphor=\"ArchiveIcon\"\n\t\t\t\t\tremixicon=\"RiArchiveLine\"\n\t\t\t\t/>\n\t\t\t</Item.Media>\n\t\t\t<Item.Content>\n\t\t\t\t<Item.Title>Drafts</Item.Title>\n\t\t\t\t<Item.Description>View all draft messages.</Item.Description>\n\t\t\t</Item.Content>\n\t\t</Item.Root>\n\t\t<Item.Separator />\n\t\t<Item.Root variant=\"outline\">\n\t\t\t<Item.Media variant=\"icon\">\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"InboxIcon\"\n\t\t\t\t\ttabler=\"IconArchive\"\n\t\t\t\t\thugeicons=\"Archive02Icon\"\n\t\t\t\t\tphosphor=\"ArchiveIcon\"\n\t\t\t\t\tremixicon=\"RiArchiveLine\"\n\t\t\t\t/>\n\t\t\t</Item.Media>\n\t\t\t<Item.Content>\n\t\t\t\t<Item.Title>Archive</Item.Title>\n\t\t\t\t<Item.Description>View archived messages.</Item.Description>\n\t\t\t</Item.Content>\n\t\t</Item.Root>\n\t</Item.Group>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/item/item-variants.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Item from \"$lib/registry/ui/item/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\timport type { ItemVariant, ItemSize } from \"$lib/registry/ui/item/item.svelte\";\n\n\ttype VariantConfig = {\n\t\ttitle: string;\n\t\tvariant?: ItemVariant;\n\t\tsize?: ItemSize;\n\t};\n\n\tconst variants: VariantConfig[] = [\n\t\t{ title: \"Default\" },\n\t\t{ title: \"Outline\", variant: \"outline\" },\n\t\t{ title: \"Muted\", variant: \"muted\" },\n\t\t{ title: \"Small\", size: \"sm\" },\n\t\t{ title: \"Outline - Small\", variant: \"outline\", size: \"sm\" },\n\t\t{ title: \"Muted - Small\", variant: \"muted\", size: \"sm\" },\n\t\t{ title: \"Extra Small\", size: \"xs\" },\n\t\t{ title: \"Outline - Extra Small\", variant: \"outline\", size: \"xs\" },\n\t\t{ title: \"Muted - Extra Small\", variant: \"muted\", size: \"xs\" },\n\t];\n</script>\n\n{#each variants as { title, variant, size } (`${title}-${variant}-${size}`)}\n\t<Example {title}>\n\t\t<Item.Root {variant} {size}>\n\t\t\t<Item.Content>\n\t\t\t\t<Item.Title>Title Only</Item.Title>\n\t\t\t</Item.Content>\n\t\t</Item.Root>\n\t\t<Item.Root {variant} {size}>\n\t\t\t<Item.Content>\n\t\t\t\t<Item.Title>Title + Button</Item.Title>\n\t\t\t</Item.Content>\n\t\t\t<Item.Actions>\n\t\t\t\t<Button variant=\"outline\" size={size === \"xs\" || size === \"sm\" ? \"sm\" : undefined}\n\t\t\t\t\t>Action</Button\n\t\t\t\t>\n\t\t\t</Item.Actions>\n\t\t</Item.Root>\n\t\t<Item.Root {variant} {size}>\n\t\t\t<Item.Content>\n\t\t\t\t<Item.Title>Title + Description</Item.Title>\n\t\t\t\t<Item.Description>\n\t\t\t\t\tThis is a description that provides additional context.\n\t\t\t\t</Item.Description>\n\t\t\t</Item.Content>\n\t\t</Item.Root>\n\t\t<Item.Root {variant} {size}>\n\t\t\t<Item.Content>\n\t\t\t\t<Item.Title>Title + Description + Button</Item.Title>\n\t\t\t\t<Item.Description>\n\t\t\t\t\tThis item includes a title, description, and action button.\n\t\t\t\t</Item.Description>\n\t\t\t</Item.Content>\n\t\t\t<Item.Actions>\n\t\t\t\t<Button variant=\"outline\" size={size === \"xs\" || size === \"sm\" ? \"sm\" : undefined}\n\t\t\t\t\t>Action</Button\n\t\t\t\t>\n\t\t\t</Item.Actions>\n\t\t</Item.Root>\n\t\t<Item.Root {variant} {size}>\n\t\t\t<Item.Media variant=\"icon\">\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"InboxIcon\"\n\t\t\t\t\ttabler=\"IconArchive\"\n\t\t\t\t\thugeicons=\"Archive02Icon\"\n\t\t\t\t\tphosphor=\"ArchiveIcon\"\n\t\t\t\t\tremixicon=\"RiArchiveLine\"\n\t\t\t\t/>\n\t\t\t</Item.Media>\n\t\t\t<Item.Content>\n\t\t\t\t<Item.Title>Media + Title</Item.Title>\n\t\t\t</Item.Content>\n\t\t</Item.Root>\n\t\t<Item.Root {variant} {size}>\n\t\t\t<Item.Media variant=\"icon\">\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"InboxIcon\"\n\t\t\t\t\ttabler=\"IconArchive\"\n\t\t\t\t\thugeicons=\"Archive02Icon\"\n\t\t\t\t\tphosphor=\"ArchiveIcon\"\n\t\t\t\t\tremixicon=\"RiArchiveLine\"\n\t\t\t\t/>\n\t\t\t</Item.Media>\n\t\t\t<Item.Content>\n\t\t\t\t<Item.Title>Media + Title + Button</Item.Title>\n\t\t\t</Item.Content>\n\t\t\t<Item.Actions>\n\t\t\t\t<Button size=\"sm\">Action</Button>\n\t\t\t</Item.Actions>\n\t\t</Item.Root>\n\t\t<Item.Root {variant} {size}>\n\t\t\t<Item.Media variant=\"icon\">\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"InboxIcon\"\n\t\t\t\t\ttabler=\"IconArchive\"\n\t\t\t\t\thugeicons=\"Archive02Icon\"\n\t\t\t\t\tphosphor=\"ArchiveIcon\"\n\t\t\t\t\tremixicon=\"RiArchiveLine\"\n\t\t\t\t/>\n\t\t\t</Item.Media>\n\t\t\t<Item.Content>\n\t\t\t\t<Item.Title>Media + Title + Description</Item.Title>\n\t\t\t\t<Item.Description\n\t\t\t\t\t>This item includes media, title, and description.</Item.Description\n\t\t\t\t>\n\t\t\t</Item.Content>\n\t\t</Item.Root>\n\t\t<Item.Root {variant} {size}>\n\t\t\t<Item.Media variant=\"icon\">\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"InboxIcon\"\n\t\t\t\t\ttabler=\"IconArchive\"\n\t\t\t\t\thugeicons=\"Archive02Icon\"\n\t\t\t\t\tphosphor=\"ArchiveIcon\"\n\t\t\t\t\tremixicon=\"RiArchiveLine\"\n\t\t\t\t/>\n\t\t\t</Item.Media>\n\t\t\t<Item.Content>\n\t\t\t\t<Item.Title>Media + Title + Description + Button</Item.Title>\n\t\t\t\t<Item.Description>\n\t\t\t\t\tComplete item with all components: media, title, description, and button.\n\t\t\t\t</Item.Description>\n\t\t\t</Item.Content>\n\t\t\t<Item.Actions>\n\t\t\t\t<Button size=\"sm\">Action</Button>\n\t\t\t</Item.Actions>\n\t\t</Item.Root>\n\t\t<Item.Root {variant} {size}>\n\t\t\t<Item.Content>\n\t\t\t\t<Item.Title>Multiple Actions</Item.Title>\n\t\t\t\t<Item.Description>\n\t\t\t\t\tItem with multiple action buttons in the actions area.\n\t\t\t\t</Item.Description>\n\t\t\t</Item.Content>\n\t\t\t<Item.Actions>\n\t\t\t\t<Button variant=\"outline\" size=\"sm\">Cancel</Button>\n\t\t\t\t<Button size=\"sm\">Confirm</Button>\n\t\t\t</Item.Actions>\n\t\t</Item.Root>\n\t</Example>\n{/each}\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/item/item-with-image.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Item from \"$lib/registry/ui/item/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n</script>\n\n<Example title=\"ItemMedia image\">\n\t<Item.Root>\n\t\t<Item.Media variant=\"image\">\n\t\t\t<img\n\t\t\t\tsrc=\"https://avatar.vercel.sh/Project\"\n\t\t\t\talt=\"Project\"\n\t\t\t\twidth={40}\n\t\t\t\theight={40}\n\t\t\t\tclass=\"object-cover grayscale\"\n\t\t\t/>\n\t\t</Item.Media>\n\t\t<Item.Content>\n\t\t\t<Item.Title>Project Dashboard</Item.Title>\n\t\t\t<Item.Description>Overview of project settings and configuration.</Item.Description>\n\t\t</Item.Content>\n\t</Item.Root>\n\t<Item.Root>\n\t\t<Item.Media variant=\"image\">\n\t\t\t<img\n\t\t\t\tsrc=\"https://avatar.vercel.sh/Document\"\n\t\t\t\talt=\"Document\"\n\t\t\t\twidth={40}\n\t\t\t\theight={40}\n\t\t\t\tclass=\"object-cover grayscale\"\n\t\t\t/>\n\t\t</Item.Media>\n\t\t<Item.Content>\n\t\t\t<Item.Title>Document</Item.Title>\n\t\t\t<Item.Description>A document with metadata displayed.</Item.Description>\n\t\t</Item.Content>\n\t\t<Item.Actions>\n\t\t\t<Button variant=\"outline\" size=\"sm\">View</Button>\n\t\t</Item.Actions>\n\t</Item.Root>\n\t<Item.Root>\n\t\t<Item.Media variant=\"image\">\n\t\t\t<img\n\t\t\t\tsrc=\"https://avatar.vercel.sh/File\"\n\t\t\t\talt=\"File\"\n\t\t\t\twidth={40}\n\t\t\t\theight={40}\n\t\t\t\tclass=\"object-cover grayscale\"\n\t\t\t/>\n\t\t</Item.Media>\n\t\t<Item.Content>\n\t\t\t<Item.Title>File Attachment</Item.Title>\n\t\t\t<Item.Description>\n\t\t\t\tComplete file with image, title, description, and action button.\n\t\t\t</Item.Description>\n\t\t</Item.Content>\n\t\t<Item.Actions>\n\t\t\t<Button size=\"sm\">Download</Button>\n\t\t</Item.Actions>\n\t</Item.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/item/item.svelte",
    "content": "<script lang=\"ts\">\n\timport ExampleWrapper from \"../../../../../routes/(app)/(layout)/(create)/components/example-wrapper.svelte\";\n\timport ItemVariants from \"./item-variants.svelte\";\n\timport ItemAsChild from \"./item-as-child.svelte\";\n\timport ItemOutlineLink from \"./item-outline-link.svelte\";\n\timport ItemMutedLink from \"./item-muted-link.svelte\";\n\timport ItemGroup from \"./item-group.svelte\";\n\timport ItemOutlineGroup from \"./item-outline-group.svelte\";\n\timport ItemMutedGroup from \"./item-muted-group.svelte\";\n\timport ItemSeparator from \"./item-separator.svelte\";\n\timport ItemHeader from \"./item-header.svelte\";\n\timport ItemFooter from \"./item-footer.svelte\";\n\timport ItemHeaderAndFooter from \"./item-header-and-footer.svelte\";\n\timport ItemWithImage from \"./item-with-image.svelte\";\n\timport ItemOutlineImage from \"./item-outline-image.svelte\";\n\timport ItemOutlineImageSmall from \"./item-outline-image-small.svelte\";\n\timport ItemOutlineImageExtraSmall from \"./item-outline-image-extra-small.svelte\";\n\timport ItemMutedImage from \"./item-muted-image.svelte\";\n</script>\n\n<ExampleWrapper>\n\t<ItemVariants />\n\t<ItemAsChild />\n\t<ItemOutlineLink />\n\t<ItemMutedLink />\n\t<ItemGroup />\n\t<ItemOutlineGroup />\n\t<ItemMutedGroup />\n\t<ItemSeparator />\n\t<ItemHeader />\n\t<ItemFooter />\n\t<ItemHeaderAndFooter />\n\t<ItemWithImage />\n\t<ItemOutlineImage />\n\t<ItemOutlineImageSmall />\n\t<ItemOutlineImageExtraSmall />\n\t<ItemMutedImage />\n</ExampleWrapper>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/kbd/kbd-arrow-keys.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Kbd from \"$lib/registry/ui/kbd/index.js\";\n</script>\n\n<Example title=\"Arrow Keys\">\n\t<div class=\"flex items-center gap-2\">\n\t\t<Kbd.Root>↑</Kbd.Root>\n\t\t<Kbd.Root>↓</Kbd.Root>\n\t\t<Kbd.Root>←</Kbd.Root>\n\t\t<Kbd.Root>→</Kbd.Root>\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/kbd/kbd-basic.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Kbd from \"$lib/registry/ui/kbd/index.js\";\n</script>\n\n<Example title=\"Basic\">\n\t<div class=\"flex items-center gap-2\">\n\t\t<Kbd.Root>Ctrl</Kbd.Root>\n\t\t<Kbd.Root>⌘K</Kbd.Root>\n\t\t<Kbd.Root>Ctrl + B</Kbd.Root>\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/kbd/kbd-group-example.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Kbd from \"$lib/registry/ui/kbd/index.js\";\n</script>\n\n<Example title=\"KbdGroup\">\n\t<Kbd.Group>\n\t\t<Kbd.Root>Ctrl</Kbd.Root>\n\t\t<Kbd.Root>Shift</Kbd.Root>\n\t\t<Kbd.Root>P</Kbd.Root>\n\t</Kbd.Group>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/kbd/kbd-in-input-group.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as InputGroup from \"$lib/registry/ui/input-group/index.js\";\n\timport * as Kbd from \"$lib/registry/ui/kbd/index.js\";\n</script>\n\n<Example title=\"InputGroup\">\n\t<InputGroup.Root>\n\t\t<InputGroup.Input />\n\t\t<InputGroup.Addon>\n\t\t\t<Kbd.Root>Space</Kbd.Root>\n\t\t</InputGroup.Addon>\n\t</InputGroup.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/kbd/kbd-in-tooltip.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Kbd from \"$lib/registry/ui/kbd/index.js\";\n\timport * as Tooltip from \"$lib/registry/ui/tooltip/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Example title=\"Tooltip\">\n\t<Tooltip.Root>\n\t\t<Tooltip.Trigger>\n\t\t\t{#snippet child({ props })}\n\t\t\t\t<Button size=\"icon-sm\" variant=\"outline\" {...props}>\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"SaveIcon\"\n\t\t\t\t\t\ttabler=\"IconDeviceFloppy\"\n\t\t\t\t\t\thugeicons=\"FloppyDiskIcon\"\n\t\t\t\t\t\tphosphor=\"FloppyDiskIcon\"\n\t\t\t\t\t\tremixicon=\"RiSaveLine\"\n\t\t\t\t\t/>\n\t\t\t\t</Button>\n\t\t\t{/snippet}\n\t\t</Tooltip.Trigger>\n\t\t<Tooltip.Content class=\"pr-1.5\">\n\t\t\t<div class=\"flex items-center gap-2\">\n\t\t\t\tSave Changes <Kbd.Root>S</Kbd.Root>\n\t\t\t</div>\n\t\t</Tooltip.Content>\n\t</Tooltip.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/kbd/kbd-modifier-keys.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Kbd from \"$lib/registry/ui/kbd/index.js\";\n</script>\n\n<Example title=\"Modifier Keys\">\n\t<div class=\"flex items-center gap-2\">\n\t\t<Kbd.Root>⌘</Kbd.Root>\n\t\t<Kbd.Root>C</Kbd.Root>\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/kbd/kbd-with-icons-and-text.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Kbd from \"$lib/registry/ui/kbd/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Example title=\"With Icons and Text\">\n\t<Kbd.Group>\n\t\t<Kbd.Root>\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowLeftIcon\"\n\t\t\t\ttabler=\"IconArrowLeft\"\n\t\t\t\thugeicons=\"ArrowLeft01Icon\"\n\t\t\t\tphosphor=\"ArrowLeftIcon\"\n\t\t\t\tremixicon=\"RiArrowLeftLine\"\n\t\t\t/>\n\t\t\tLeft\n\t\t</Kbd.Root>\n\t\t<Kbd.Root>\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"CircleDashedIcon\"\n\t\t\t\ttabler=\"IconCircleDashed\"\n\t\t\t\thugeicons=\"DashedLineCircleIcon\"\n\t\t\t\tphosphor=\"CircleDashedIcon\"\n\t\t\t\tremixicon=\"RiLoaderLine\"\n\t\t\t/>\n\t\t\tVoice Enabled\n\t\t</Kbd.Root>\n\t</Kbd.Group>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/kbd/kbd-with-icons.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Kbd from \"$lib/registry/ui/kbd/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Example title=\"With Icons\">\n\t<Kbd.Group>\n\t\t<Kbd.Root>\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"CircleDashedIcon\"\n\t\t\t\ttabler=\"IconCircleDashed\"\n\t\t\t\thugeicons=\"DashedLineCircleIcon\"\n\t\t\t\tphosphor=\"CircleDashedIcon\"\n\t\t\t\tremixicon=\"RiLoaderLine\"\n\t\t\t/>\n\t\t</Kbd.Root>\n\t\t<Kbd.Root>\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowLeftIcon\"\n\t\t\t\ttabler=\"IconArrowLeft\"\n\t\t\t\thugeicons=\"ArrowLeft01Icon\"\n\t\t\t\tphosphor=\"ArrowLeftIcon\"\n\t\t\t\tremixicon=\"RiArrowLeftLine\"\n\t\t\t/>\n\t\t</Kbd.Root>\n\t\t<Kbd.Root>\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowRightIcon\"\n\t\t\t\ttabler=\"IconArrowRight\"\n\t\t\t\thugeicons=\"ArrowRight01Icon\"\n\t\t\t\tphosphor=\"ArrowRightIcon\"\n\t\t\t\tremixicon=\"RiArrowRightLine\"\n\t\t\t/>\n\t\t</Kbd.Root>\n\t</Kbd.Group>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/kbd/kbd-with-samp.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Kbd from \"$lib/registry/ui/kbd/index.js\";\n</script>\n\n<Example title=\"With samp\">\n\t<Kbd.Root>\n\t\t<samp>File</samp>\n\t</Kbd.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/kbd/kbd.svelte",
    "content": "<script lang=\"ts\">\n\timport ExampleWrapper from \"../../../../../routes/(app)/(layout)/(create)/components/example-wrapper.svelte\";\n\timport KbdBasic from \"./kbd-basic.svelte\";\n\timport KbdModifierKeys from \"./kbd-modifier-keys.svelte\";\n\timport KbdGroupExample from \"./kbd-group-example.svelte\";\n\timport KbdArrowKeys from \"./kbd-arrow-keys.svelte\";\n\timport KbdWithIcons from \"./kbd-with-icons.svelte\";\n\timport KbdWithIconsAndText from \"./kbd-with-icons-and-text.svelte\";\n\timport KbdInInputGroup from \"./kbd-in-input-group.svelte\";\n\timport KbdInTooltip from \"./kbd-in-tooltip.svelte\";\n\timport KbdWithSamp from \"./kbd-with-samp.svelte\";\n</script>\n\n<ExampleWrapper>\n\t<KbdBasic />\n\t<KbdModifierKeys />\n\t<KbdGroupExample />\n\t<KbdArrowKeys />\n\t<KbdWithIcons />\n\t<KbdWithIconsAndText />\n\t<KbdInInputGroup />\n\t<KbdInTooltip />\n\t<KbdWithSamp />\n</ExampleWrapper>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/label/label-disabled.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport { Input } from \"$lib/registry/ui/input/index.js\";\n\timport { Label } from \"$lib/registry/ui/label/index.js\";\n</script>\n\n<Example title=\"Disabled\">\n\t<Field.Field data-disabled={true}>\n\t\t<Label for=\"label-demo-disabled\">Disabled</Label>\n\t\t<Input id=\"label-demo-disabled\" placeholder=\"Disabled\" disabled />\n\t</Field.Field>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/label/label-with-checkbox.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Checkbox } from \"$lib/registry/ui/checkbox/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport { Label } from \"$lib/registry/ui/label/index.js\";\n</script>\n\n<Example title=\"With Checkbox\">\n\t<Field.Field orientation=\"horizontal\">\n\t\t<Checkbox id=\"label-demo-terms\" />\n\t\t<Label for=\"label-demo-terms\">Accept terms and conditions</Label>\n\t</Field.Field>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/label/label-with-input.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport { Input } from \"$lib/registry/ui/input/index.js\";\n\timport { Label } from \"$lib/registry/ui/label/index.js\";\n</script>\n\n<Example title=\"With Input\">\n\t<Field.Field>\n\t\t<Label for=\"label-demo-username\">Username</Label>\n\t\t<Input id=\"label-demo-username\" placeholder=\"Username\" />\n\t</Field.Field>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/label/label-with-textarea.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport { Label } from \"$lib/registry/ui/label/index.js\";\n\timport { Textarea } from \"$lib/registry/ui/textarea/index.js\";\n</script>\n\n<Example title=\"With Textarea\">\n\t<Field.Field>\n\t\t<Label for=\"label-demo-message\">Message</Label>\n\t\t<Textarea id=\"label-demo-message\" placeholder=\"Message\" />\n\t</Field.Field>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/label/label.svelte",
    "content": "<script lang=\"ts\">\n\timport ExampleWrapper from \"../../../../../routes/(app)/(layout)/(create)/components/example-wrapper.svelte\";\n\timport LabelWithCheckbox from \"./label-with-checkbox.svelte\";\n\timport LabelWithInput from \"./label-with-input.svelte\";\n\timport LabelDisabled from \"./label-disabled.svelte\";\n\timport LabelWithTextarea from \"./label-with-textarea.svelte\";\n</script>\n\n<ExampleWrapper>\n\t<LabelWithCheckbox />\n\t<LabelWithInput />\n\t<LabelDisabled />\n\t<LabelWithTextarea />\n</ExampleWrapper>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/menubar/menubar-basic.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Menubar from \"$lib/registry/ui/menubar/index.js\";\n</script>\n\n<Example title=\"Basic\">\n\t<Menubar.Root>\n\t\t<Menubar.Menu>\n\t\t\t<Menubar.Trigger>File</Menubar.Trigger>\n\t\t\t<Menubar.Content>\n\t\t\t\t<Menubar.Item>\n\t\t\t\t\tNew Tab <Menubar.Shortcut>⌘T</Menubar.Shortcut>\n\t\t\t\t</Menubar.Item>\n\t\t\t\t<Menubar.Item>\n\t\t\t\t\tNew Window <Menubar.Shortcut>⌘N</Menubar.Shortcut>\n\t\t\t\t</Menubar.Item>\n\t\t\t\t<Menubar.Item disabled>New Incognito Window</Menubar.Item>\n\t\t\t\t<Menubar.Separator />\n\t\t\t\t<Menubar.Item>\n\t\t\t\t\tPrint... <Menubar.Shortcut>⌘P</Menubar.Shortcut>\n\t\t\t\t</Menubar.Item>\n\t\t\t</Menubar.Content>\n\t\t</Menubar.Menu>\n\t\t<Menubar.Menu>\n\t\t\t<Menubar.Trigger>Edit</Menubar.Trigger>\n\t\t\t<Menubar.Content>\n\t\t\t\t<Menubar.Item>\n\t\t\t\t\tUndo <Menubar.Shortcut>⌘Z</Menubar.Shortcut>\n\t\t\t\t</Menubar.Item>\n\t\t\t\t<Menubar.Item>\n\t\t\t\t\tRedo <Menubar.Shortcut>⇧⌘Z</Menubar.Shortcut>\n\t\t\t\t</Menubar.Item>\n\t\t\t\t<Menubar.Separator />\n\t\t\t\t<Menubar.Item>Cut</Menubar.Item>\n\t\t\t\t<Menubar.Item>Copy</Menubar.Item>\n\t\t\t\t<Menubar.Item>Paste</Menubar.Item>\n\t\t\t</Menubar.Content>\n\t\t</Menubar.Menu>\n\t</Menubar.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/menubar/menubar-destructive.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Menubar from \"$lib/registry/ui/menubar/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Example title=\"Destructive\">\n\t<Menubar.Root>\n\t\t<Menubar.Menu>\n\t\t\t<Menubar.Trigger>File</Menubar.Trigger>\n\t\t\t<Menubar.Content class=\"w-40\">\n\t\t\t\t<Menubar.Item>\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"FileIcon\"\n\t\t\t\t\t\ttabler=\"IconFile\"\n\t\t\t\t\t\thugeicons=\"FileIcon\"\n\t\t\t\t\t\tphosphor=\"FileIcon\"\n\t\t\t\t\t\tremixicon=\"RiFileLine\"\n\t\t\t\t\t/>\n\t\t\t\t\tNew File <Menubar.Shortcut>⌘N</Menubar.Shortcut>\n\t\t\t\t</Menubar.Item>\n\t\t\t\t<Menubar.Item>\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"FolderIcon\"\n\t\t\t\t\t\ttabler=\"IconFolder\"\n\t\t\t\t\t\thugeicons=\"FolderIcon\"\n\t\t\t\t\t\tphosphor=\"FolderIcon\"\n\t\t\t\t\t\tremixicon=\"RiFolderLine\"\n\t\t\t\t\t/>\n\t\t\t\t\tOpen Folder\n\t\t\t\t</Menubar.Item>\n\t\t\t\t<Menubar.Separator />\n\t\t\t\t<Menubar.Item variant=\"destructive\">\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"TrashIcon\"\n\t\t\t\t\t\ttabler=\"IconTrash\"\n\t\t\t\t\t\thugeicons=\"DeleteIcon\"\n\t\t\t\t\t\tphosphor=\"TrashIcon\"\n\t\t\t\t\t\tremixicon=\"RiDeleteBinLine\"\n\t\t\t\t\t/>\n\t\t\t\t\tDelete File <Menubar.Shortcut>⌘⌫</Menubar.Shortcut>\n\t\t\t\t</Menubar.Item>\n\t\t\t</Menubar.Content>\n\t\t</Menubar.Menu>\n\t\t<Menubar.Menu>\n\t\t\t<Menubar.Trigger>Account</Menubar.Trigger>\n\t\t\t<Menubar.Content>\n\t\t\t\t<Menubar.Item>\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"UserIcon\"\n\t\t\t\t\t\ttabler=\"IconUser\"\n\t\t\t\t\t\thugeicons=\"UserIcon\"\n\t\t\t\t\t\tphosphor=\"UserIcon\"\n\t\t\t\t\t\tremixicon=\"RiUserLine\"\n\t\t\t\t\t/>\n\t\t\t\t\tProfile\n\t\t\t\t</Menubar.Item>\n\t\t\t\t<Menubar.Item>\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"SettingsIcon\"\n\t\t\t\t\t\ttabler=\"IconSettings\"\n\t\t\t\t\t\thugeicons=\"SettingsIcon\"\n\t\t\t\t\t\tphosphor=\"GearIcon\"\n\t\t\t\t\t\tremixicon=\"RiSettingsLine\"\n\t\t\t\t\t/>\n\t\t\t\t\tSettings\n\t\t\t\t</Menubar.Item>\n\t\t\t\t<Menubar.Separator />\n\t\t\t\t<Menubar.Item variant=\"destructive\">\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"LogOutIcon\"\n\t\t\t\t\t\ttabler=\"IconLogout\"\n\t\t\t\t\t\thugeicons=\"LogoutIcon\"\n\t\t\t\t\t\tphosphor=\"SignOutIcon\"\n\t\t\t\t\t\tremixicon=\"RiLogoutBoxLine\"\n\t\t\t\t\t/>\n\t\t\t\t\tSign out\n\t\t\t\t</Menubar.Item>\n\t\t\t\t<Menubar.Separator />\n\t\t\t\t<Menubar.Item variant=\"destructive\">\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"TrashIcon\"\n\t\t\t\t\t\ttabler=\"IconTrash\"\n\t\t\t\t\t\thugeicons=\"DeleteIcon\"\n\t\t\t\t\t\tphosphor=\"TrashIcon\"\n\t\t\t\t\t\tremixicon=\"RiDeleteBinLine\"\n\t\t\t\t\t/>\n\t\t\t\t\tDelete\n\t\t\t\t</Menubar.Item>\n\t\t\t</Menubar.Content>\n\t\t</Menubar.Menu>\n\t</Menubar.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/menubar/menubar-format.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Menubar from \"$lib/registry/ui/menubar/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Example title=\"Format\">\n\t<Menubar.Root>\n\t\t<Menubar.Menu>\n\t\t\t<Menubar.Trigger>Format</Menubar.Trigger>\n\t\t\t<Menubar.Content>\n\t\t\t\t<Menubar.Item>\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"BoldIcon\"\n\t\t\t\t\t\ttabler=\"IconBold\"\n\t\t\t\t\t\thugeicons=\"TextBoldIcon\"\n\t\t\t\t\t\tphosphor=\"TextBIcon\"\n\t\t\t\t\t\tremixicon=\"RiBold\"\n\t\t\t\t\t/>\n\t\t\t\t\tBold <Menubar.Shortcut>⌘B</Menubar.Shortcut>\n\t\t\t\t</Menubar.Item>\n\t\t\t\t<Menubar.Item>\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"ItalicIcon\"\n\t\t\t\t\t\ttabler=\"IconItalic\"\n\t\t\t\t\t\thugeicons=\"TextItalicIcon\"\n\t\t\t\t\t\tphosphor=\"TextItalicIcon\"\n\t\t\t\t\t\tremixicon=\"RiItalic\"\n\t\t\t\t\t/>\n\t\t\t\t\tItalic <Menubar.Shortcut>⌘I</Menubar.Shortcut>\n\t\t\t\t</Menubar.Item>\n\t\t\t\t<Menubar.Item>\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"UnderlineIcon\"\n\t\t\t\t\t\ttabler=\"IconUnderline\"\n\t\t\t\t\t\thugeicons=\"TextUnderlineIcon\"\n\t\t\t\t\t\tphosphor=\"TextUnderlineIcon\"\n\t\t\t\t\t\tremixicon=\"RiUnderline\"\n\t\t\t\t\t/>\n\t\t\t\t\tUnderline <Menubar.Shortcut>⌘U</Menubar.Shortcut>\n\t\t\t\t</Menubar.Item>\n\t\t\t\t<Menubar.Separator />\n\t\t\t\t<Menubar.CheckboxItem checked>Strikethrough</Menubar.CheckboxItem>\n\t\t\t\t<Menubar.CheckboxItem>Code</Menubar.CheckboxItem>\n\t\t\t</Menubar.Content>\n\t\t</Menubar.Menu>\n\t\t<Menubar.Menu>\n\t\t\t<Menubar.Trigger>View</Menubar.Trigger>\n\t\t\t<Menubar.Content>\n\t\t\t\t<Menubar.CheckboxItem>Show Ruler</Menubar.CheckboxItem>\n\t\t\t\t<Menubar.CheckboxItem checked>Show Grid</Menubar.CheckboxItem>\n\t\t\t\t<Menubar.Separator />\n\t\t\t\t<Menubar.Item inset>Zoom In</Menubar.Item>\n\t\t\t\t<Menubar.Item inset>Zoom Out</Menubar.Item>\n\t\t\t</Menubar.Content>\n\t\t</Menubar.Menu>\n\t</Menubar.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/menubar/menubar-in-dialog.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Dialog from \"$lib/registry/ui/dialog/index.js\";\n\timport * as Menubar from \"$lib/registry/ui/menubar/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Example title=\"In Dialog\">\n\t<Dialog.Root>\n\t\t<Dialog.Trigger>\n\t\t\t{#snippet child({ props })}\n\t\t\t\t<Button variant=\"outline\" {...props}>Open Dialog</Button>\n\t\t\t{/snippet}\n\t\t</Dialog.Trigger>\n\t\t<Dialog.Content>\n\t\t\t<Dialog.Header>\n\t\t\t\t<Dialog.Title>Menubar Example</Dialog.Title>\n\t\t\t\t<Dialog.Description>\n\t\t\t\t\tUse the menubar below to see the menu options.\n\t\t\t\t</Dialog.Description>\n\t\t\t</Dialog.Header>\n\t\t\t<Menubar.Root>\n\t\t\t\t<Menubar.Menu>\n\t\t\t\t\t<Menubar.Trigger>File</Menubar.Trigger>\n\t\t\t\t\t<Menubar.Content>\n\t\t\t\t\t\t<Menubar.Item>\n\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\tlucide=\"CopyIcon\"\n\t\t\t\t\t\t\t\ttabler=\"IconCopy\"\n\t\t\t\t\t\t\t\thugeicons=\"CopyIcon\"\n\t\t\t\t\t\t\t\tphosphor=\"CopyIcon\"\n\t\t\t\t\t\t\t\tremixicon=\"RiFileCopyLine\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\tCopy\n\t\t\t\t\t\t</Menubar.Item>\n\t\t\t\t\t\t<Menubar.Item>\n\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\tlucide=\"ScissorsIcon\"\n\t\t\t\t\t\t\t\ttabler=\"IconCut\"\n\t\t\t\t\t\t\t\thugeicons=\"ScissorIcon\"\n\t\t\t\t\t\t\t\tphosphor=\"ScissorsIcon\"\n\t\t\t\t\t\t\t\tremixicon=\"RiScissorsLine\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\tCut\n\t\t\t\t\t\t</Menubar.Item>\n\t\t\t\t\t\t<Menubar.Item>\n\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\tlucide=\"ClipboardPasteIcon\"\n\t\t\t\t\t\t\t\ttabler=\"IconClipboard\"\n\t\t\t\t\t\t\t\thugeicons=\"ClipboardIcon\"\n\t\t\t\t\t\t\t\tphosphor=\"ClipboardIcon\"\n\t\t\t\t\t\t\t\tremixicon=\"RiClipboardLine\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\tPaste\n\t\t\t\t\t\t</Menubar.Item>\n\t\t\t\t\t\t<Menubar.Separator />\n\t\t\t\t\t\t<Menubar.Sub>\n\t\t\t\t\t\t\t<Menubar.SubTrigger>More Options</Menubar.SubTrigger>\n\t\t\t\t\t\t\t<Menubar.SubContent>\n\t\t\t\t\t\t\t\t<Menubar.Item>Save Page...</Menubar.Item>\n\t\t\t\t\t\t\t\t<Menubar.Item>Create Shortcut...</Menubar.Item>\n\t\t\t\t\t\t\t\t<Menubar.Item>Name Window...</Menubar.Item>\n\t\t\t\t\t\t\t\t<Menubar.Separator />\n\t\t\t\t\t\t\t\t<Menubar.Item>Developer Tools</Menubar.Item>\n\t\t\t\t\t\t\t</Menubar.SubContent>\n\t\t\t\t\t\t</Menubar.Sub>\n\t\t\t\t\t\t<Menubar.Separator />\n\t\t\t\t\t\t<Menubar.Item variant=\"destructive\">\n\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\tlucide=\"TrashIcon\"\n\t\t\t\t\t\t\t\ttabler=\"IconTrash\"\n\t\t\t\t\t\t\t\thugeicons=\"DeleteIcon\"\n\t\t\t\t\t\t\t\tphosphor=\"TrashIcon\"\n\t\t\t\t\t\t\t\tremixicon=\"RiDeleteBinLine\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\tDelete\n\t\t\t\t\t\t</Menubar.Item>\n\t\t\t\t\t</Menubar.Content>\n\t\t\t\t</Menubar.Menu>\n\t\t\t\t<Menubar.Menu>\n\t\t\t\t\t<Menubar.Trigger>Edit</Menubar.Trigger>\n\t\t\t\t\t<Menubar.Content>\n\t\t\t\t\t\t<Menubar.Item>\n\t\t\t\t\t\t\tUndo <Menubar.Shortcut>⌘Z</Menubar.Shortcut>\n\t\t\t\t\t\t</Menubar.Item>\n\t\t\t\t\t\t<Menubar.Item>\n\t\t\t\t\t\t\tRedo <Menubar.Shortcut>⇧⌘Z</Menubar.Shortcut>\n\t\t\t\t\t\t</Menubar.Item>\n\t\t\t\t\t</Menubar.Content>\n\t\t\t\t</Menubar.Menu>\n\t\t\t</Menubar.Root>\n\t\t</Dialog.Content>\n\t</Dialog.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/menubar/menubar-insert.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Menubar from \"$lib/registry/ui/menubar/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Example title=\"Insert\">\n\t<Menubar.Root>\n\t\t<Menubar.Menu>\n\t\t\t<Menubar.Trigger>Insert</Menubar.Trigger>\n\t\t\t<Menubar.Content>\n\t\t\t\t<Menubar.Sub>\n\t\t\t\t\t<Menubar.SubTrigger>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"ImageIcon\"\n\t\t\t\t\t\t\ttabler=\"IconPhoto\"\n\t\t\t\t\t\t\thugeicons=\"ImageIcon\"\n\t\t\t\t\t\t\tphosphor=\"ImageIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiImageLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\tMedia\n\t\t\t\t\t</Menubar.SubTrigger>\n\t\t\t\t\t<Menubar.SubContent>\n\t\t\t\t\t\t<Menubar.Item>Image</Menubar.Item>\n\t\t\t\t\t\t<Menubar.Item>Video</Menubar.Item>\n\t\t\t\t\t\t<Menubar.Item>Audio</Menubar.Item>\n\t\t\t\t\t</Menubar.SubContent>\n\t\t\t\t</Menubar.Sub>\n\t\t\t\t<Menubar.Separator />\n\t\t\t\t<Menubar.Item>\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"LinkIcon\"\n\t\t\t\t\t\ttabler=\"IconLink\"\n\t\t\t\t\t\thugeicons=\"LinkIcon\"\n\t\t\t\t\t\tphosphor=\"LinkIcon\"\n\t\t\t\t\t\tremixicon=\"RiLinksLine\"\n\t\t\t\t\t/>\n\t\t\t\t\tLink <Menubar.Shortcut>⌘K</Menubar.Shortcut>\n\t\t\t\t</Menubar.Item>\n\t\t\t\t<Menubar.Item>\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"TableIcon\"\n\t\t\t\t\t\ttabler=\"IconTable\"\n\t\t\t\t\t\thugeicons=\"TableIcon\"\n\t\t\t\t\t\tphosphor=\"TableIcon\"\n\t\t\t\t\t\tremixicon=\"RiTableLine\"\n\t\t\t\t\t/>\n\t\t\t\t\tTable\n\t\t\t\t</Menubar.Item>\n\t\t\t</Menubar.Content>\n\t\t</Menubar.Menu>\n\t\t<Menubar.Menu>\n\t\t\t<Menubar.Trigger>Tools</Menubar.Trigger>\n\t\t\t<Menubar.Content class=\"w-44\">\n\t\t\t\t<Menubar.Item>\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"SearchIcon\"\n\t\t\t\t\t\ttabler=\"IconSearch\"\n\t\t\t\t\t\thugeicons=\"SearchIcon\"\n\t\t\t\t\t\tphosphor=\"MagnifyingGlassIcon\"\n\t\t\t\t\t\tremixicon=\"RiSearchLine\"\n\t\t\t\t\t/>\n\t\t\t\t\tFind & Replace <Menubar.Shortcut>⌘F</Menubar.Shortcut>\n\t\t\t\t</Menubar.Item>\n\t\t\t\t<Menubar.Item>\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"CheckIcon\"\n\t\t\t\t\t\ttabler=\"IconCheck\"\n\t\t\t\t\t\thugeicons=\"Tick02Icon\"\n\t\t\t\t\t\tphosphor=\"CheckIcon\"\n\t\t\t\t\t\tremixicon=\"RiCheckLine\"\n\t\t\t\t\t/>\n\t\t\t\t\tSpell Check\n\t\t\t\t</Menubar.Item>\n\t\t\t</Menubar.Content>\n\t\t</Menubar.Menu>\n\t</Menubar.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/menubar/menubar-with-checkboxes.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Menubar from \"$lib/registry/ui/menubar/index.js\";\n</script>\n\n<Example title=\"With Checkboxes\">\n\t<Menubar.Root>\n\t\t<Menubar.Menu>\n\t\t\t<Menubar.Trigger>View</Menubar.Trigger>\n\t\t\t<Menubar.Content class=\"w-64\">\n\t\t\t\t<Menubar.CheckboxItem>Always Show Bookmarks Bar</Menubar.CheckboxItem>\n\t\t\t\t<Menubar.CheckboxItem checked>Always Show Full URLs</Menubar.CheckboxItem>\n\t\t\t\t<Menubar.Separator />\n\t\t\t\t<Menubar.Item inset>\n\t\t\t\t\tReload <Menubar.Shortcut>⌘R</Menubar.Shortcut>\n\t\t\t\t</Menubar.Item>\n\t\t\t\t<Menubar.Item disabled inset>\n\t\t\t\t\tForce Reload <Menubar.Shortcut>⇧⌘R</Menubar.Shortcut>\n\t\t\t\t</Menubar.Item>\n\t\t\t</Menubar.Content>\n\t\t</Menubar.Menu>\n\t\t<Menubar.Menu>\n\t\t\t<Menubar.Trigger>Format</Menubar.Trigger>\n\t\t\t<Menubar.Content>\n\t\t\t\t<Menubar.CheckboxItem checked>Strikethrough</Menubar.CheckboxItem>\n\t\t\t\t<Menubar.CheckboxItem>Code</Menubar.CheckboxItem>\n\t\t\t\t<Menubar.CheckboxItem>Superscript</Menubar.CheckboxItem>\n\t\t\t</Menubar.Content>\n\t\t</Menubar.Menu>\n\t</Menubar.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/menubar/menubar-with-icons.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Menubar from \"$lib/registry/ui/menubar/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Example title=\"With Icons\">\n\t<Menubar.Root>\n\t\t<Menubar.Menu>\n\t\t\t<Menubar.Trigger>File</Menubar.Trigger>\n\t\t\t<Menubar.Content>\n\t\t\t\t<Menubar.Item>\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"FileIcon\"\n\t\t\t\t\t\ttabler=\"IconFile\"\n\t\t\t\t\t\thugeicons=\"FileIcon\"\n\t\t\t\t\t\tphosphor=\"FileIcon\"\n\t\t\t\t\t\tremixicon=\"RiFileLine\"\n\t\t\t\t\t/>\n\t\t\t\t\tNew File <Menubar.Shortcut>⌘N</Menubar.Shortcut>\n\t\t\t\t</Menubar.Item>\n\t\t\t\t<Menubar.Item>\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"FolderIcon\"\n\t\t\t\t\t\ttabler=\"IconFolder\"\n\t\t\t\t\t\thugeicons=\"FolderIcon\"\n\t\t\t\t\t\tphosphor=\"FolderIcon\"\n\t\t\t\t\t\tremixicon=\"RiFolderLine\"\n\t\t\t\t\t/>\n\t\t\t\t\tOpen Folder\n\t\t\t\t</Menubar.Item>\n\t\t\t\t<Menubar.Separator />\n\t\t\t\t<Menubar.Item>\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"SaveIcon\"\n\t\t\t\t\t\ttabler=\"IconDeviceFloppy\"\n\t\t\t\t\t\thugeicons=\"FloppyDiskIcon\"\n\t\t\t\t\t\tphosphor=\"FloppyDiskIcon\"\n\t\t\t\t\t\tremixicon=\"RiSaveLine\"\n\t\t\t\t\t/>\n\t\t\t\t\tSave <Menubar.Shortcut>⌘S</Menubar.Shortcut>\n\t\t\t\t</Menubar.Item>\n\t\t\t</Menubar.Content>\n\t\t</Menubar.Menu>\n\t\t<Menubar.Menu>\n\t\t\t<Menubar.Trigger>More</Menubar.Trigger>\n\t\t\t<Menubar.Content>\n\t\t\t\t<Menubar.Group>\n\t\t\t\t\t<Menubar.Item>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"CircleDashedIcon\"\n\t\t\t\t\t\t\ttabler=\"IconCircleDashed\"\n\t\t\t\t\t\t\thugeicons=\"DashedLineCircleIcon\"\n\t\t\t\t\t\t\tphosphor=\"CircleDashedIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiLoaderLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\tSettings\n\t\t\t\t\t</Menubar.Item>\n\t\t\t\t\t<Menubar.Item>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"CircleDashedIcon\"\n\t\t\t\t\t\t\ttabler=\"IconCircleDashed\"\n\t\t\t\t\t\t\thugeicons=\"DashedLineCircleIcon\"\n\t\t\t\t\t\t\tphosphor=\"CircleDashedIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiLoaderLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\tHelp\n\t\t\t\t\t</Menubar.Item>\n\t\t\t\t\t<Menubar.Separator />\n\t\t\t\t\t<Menubar.Item variant=\"destructive\">\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"CircleDashedIcon\"\n\t\t\t\t\t\t\ttabler=\"IconCircleDashed\"\n\t\t\t\t\t\t\thugeicons=\"DashedLineCircleIcon\"\n\t\t\t\t\t\t\tphosphor=\"CircleDashedIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiLoaderLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\tDelete\n\t\t\t\t\t</Menubar.Item>\n\t\t\t\t</Menubar.Group>\n\t\t\t</Menubar.Content>\n\t\t</Menubar.Menu>\n\t</Menubar.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/menubar/menubar-with-inset.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Menubar from \"$lib/registry/ui/menubar/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\n\tlet showBookmarks = $state(true);\n\tlet showUrls = $state(false);\n\tlet theme = $state(\"system\");\n</script>\n\n<Example title=\"With Inset\">\n\t<Menubar.Root>\n\t\t<Menubar.Menu>\n\t\t\t<Menubar.Trigger>View</Menubar.Trigger>\n\t\t\t<Menubar.Content class=\"w-44\">\n\t\t\t\t<Menubar.Group>\n\t\t\t\t\t<Menubar.Label>Actions</Menubar.Label>\n\t\t\t\t\t<Menubar.Item>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"CopyIcon\"\n\t\t\t\t\t\t\ttabler=\"IconCopy\"\n\t\t\t\t\t\t\thugeicons=\"CopyIcon\"\n\t\t\t\t\t\t\tphosphor=\"CopyIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiFileCopyLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\tCopy\n\t\t\t\t\t</Menubar.Item>\n\t\t\t\t\t<Menubar.Item>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"ScissorsIcon\"\n\t\t\t\t\t\t\ttabler=\"IconCut\"\n\t\t\t\t\t\t\thugeicons=\"ScissorIcon\"\n\t\t\t\t\t\t\tphosphor=\"ScissorsIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiScissorsLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\tCut\n\t\t\t\t\t</Menubar.Item>\n\t\t\t\t\t<Menubar.Item inset>Paste</Menubar.Item>\n\t\t\t\t</Menubar.Group>\n\t\t\t\t<Menubar.Separator />\n\t\t\t\t<Menubar.Group>\n\t\t\t\t\t<Menubar.Label inset>Appearance</Menubar.Label>\n\t\t\t\t\t<Menubar.CheckboxItem inset bind:checked={showBookmarks}>\n\t\t\t\t\t\tBookmarks\n\t\t\t\t\t</Menubar.CheckboxItem>\n\t\t\t\t\t<Menubar.CheckboxItem inset bind:checked={showUrls}>\n\t\t\t\t\t\tFull URLs\n\t\t\t\t\t</Menubar.CheckboxItem>\n\t\t\t\t</Menubar.Group>\n\t\t\t\t<Menubar.Separator />\n\t\t\t\t<Menubar.Group>\n\t\t\t\t\t<Menubar.Label inset>Theme</Menubar.Label>\n\t\t\t\t\t<Menubar.RadioGroup bind:value={theme}>\n\t\t\t\t\t\t<Menubar.RadioItem inset value=\"light\">Light</Menubar.RadioItem>\n\t\t\t\t\t\t<Menubar.RadioItem inset value=\"dark\">Dark</Menubar.RadioItem>\n\t\t\t\t\t\t<Menubar.RadioItem inset value=\"system\">System</Menubar.RadioItem>\n\t\t\t\t\t</Menubar.RadioGroup>\n\t\t\t\t</Menubar.Group>\n\t\t\t\t<Menubar.Separator />\n\t\t\t\t<Menubar.Sub>\n\t\t\t\t\t<Menubar.SubTrigger inset>More Options</Menubar.SubTrigger>\n\t\t\t\t\t<Menubar.SubContent>\n\t\t\t\t\t\t<Menubar.Group>\n\t\t\t\t\t\t\t<Menubar.Item>Save Page...</Menubar.Item>\n\t\t\t\t\t\t\t<Menubar.Item>Create Shortcut...</Menubar.Item>\n\t\t\t\t\t\t</Menubar.Group>\n\t\t\t\t\t</Menubar.SubContent>\n\t\t\t\t</Menubar.Sub>\n\t\t\t</Menubar.Content>\n\t\t</Menubar.Menu>\n\t</Menubar.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/menubar/menubar-with-radio.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Menubar from \"$lib/registry/ui/menubar/index.js\";\n\n\tlet user = $state(\"benoit\");\n\tlet theme = $state(\"system\");\n</script>\n\n<Example title=\"With Radio\">\n\t<Menubar.Root>\n\t\t<Menubar.Menu>\n\t\t\t<Menubar.Trigger>Profiles</Menubar.Trigger>\n\t\t\t<Menubar.Content>\n\t\t\t\t<Menubar.RadioGroup bind:value={user}>\n\t\t\t\t\t<Menubar.RadioItem value=\"andy\">Andy</Menubar.RadioItem>\n\t\t\t\t\t<Menubar.RadioItem value=\"benoit\">Benoit</Menubar.RadioItem>\n\t\t\t\t\t<Menubar.RadioItem value=\"luis\">Luis</Menubar.RadioItem>\n\t\t\t\t</Menubar.RadioGroup>\n\t\t\t\t<Menubar.Separator />\n\t\t\t\t<Menubar.Item inset>Edit...</Menubar.Item>\n\t\t\t\t<Menubar.Item inset>Add Profile...</Menubar.Item>\n\t\t\t</Menubar.Content>\n\t\t</Menubar.Menu>\n\t\t<Menubar.Menu>\n\t\t\t<Menubar.Trigger>Theme</Menubar.Trigger>\n\t\t\t<Menubar.Content>\n\t\t\t\t<Menubar.RadioGroup bind:value={theme}>\n\t\t\t\t\t<Menubar.RadioItem value=\"light\">Light</Menubar.RadioItem>\n\t\t\t\t\t<Menubar.RadioItem value=\"dark\">Dark</Menubar.RadioItem>\n\t\t\t\t\t<Menubar.RadioItem value=\"system\">System</Menubar.RadioItem>\n\t\t\t\t</Menubar.RadioGroup>\n\t\t\t</Menubar.Content>\n\t\t</Menubar.Menu>\n\t</Menubar.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/menubar/menubar-with-shortcuts.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Menubar from \"$lib/registry/ui/menubar/index.js\";\n</script>\n\n<Example title=\"With Shortcuts\">\n\t<Menubar.Root>\n\t\t<Menubar.Menu>\n\t\t\t<Menubar.Trigger>File</Menubar.Trigger>\n\t\t\t<Menubar.Content>\n\t\t\t\t<Menubar.Item>\n\t\t\t\t\tNew Tab <Menubar.Shortcut>⌘T</Menubar.Shortcut>\n\t\t\t\t</Menubar.Item>\n\t\t\t\t<Menubar.Item>\n\t\t\t\t\tNew Window <Menubar.Shortcut>⌘N</Menubar.Shortcut>\n\t\t\t\t</Menubar.Item>\n\t\t\t\t<Menubar.Item>\n\t\t\t\t\tPrint... <Menubar.Shortcut>⌘P</Menubar.Shortcut>\n\t\t\t\t</Menubar.Item>\n\t\t\t</Menubar.Content>\n\t\t</Menubar.Menu>\n\t\t<Menubar.Menu>\n\t\t\t<Menubar.Trigger>Edit</Menubar.Trigger>\n\t\t\t<Menubar.Content>\n\t\t\t\t<Menubar.Item>\n\t\t\t\t\tUndo <Menubar.Shortcut>⌘Z</Menubar.Shortcut>\n\t\t\t\t</Menubar.Item>\n\t\t\t\t<Menubar.Item>\n\t\t\t\t\tRedo <Menubar.Shortcut>⇧⌘Z</Menubar.Shortcut>\n\t\t\t\t</Menubar.Item>\n\t\t\t\t<Menubar.Separator />\n\t\t\t\t<Menubar.Item>\n\t\t\t\t\tCut <Menubar.Shortcut>⌘X</Menubar.Shortcut>\n\t\t\t\t</Menubar.Item>\n\t\t\t\t<Menubar.Item>\n\t\t\t\t\tCopy <Menubar.Shortcut>⌘C</Menubar.Shortcut>\n\t\t\t\t</Menubar.Item>\n\t\t\t\t<Menubar.Item>\n\t\t\t\t\tPaste <Menubar.Shortcut>⌘V</Menubar.Shortcut>\n\t\t\t\t</Menubar.Item>\n\t\t\t</Menubar.Content>\n\t\t</Menubar.Menu>\n\t</Menubar.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/menubar/menubar-with-submenu.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Menubar from \"$lib/registry/ui/menubar/index.js\";\n</script>\n\n<Example title=\"With Submenu\">\n\t<Menubar.Root>\n\t\t<Menubar.Menu>\n\t\t\t<Menubar.Trigger>File</Menubar.Trigger>\n\t\t\t<Menubar.Content>\n\t\t\t\t<Menubar.Sub>\n\t\t\t\t\t<Menubar.SubTrigger>Share</Menubar.SubTrigger>\n\t\t\t\t\t<Menubar.SubContent>\n\t\t\t\t\t\t<Menubar.Item>Email link</Menubar.Item>\n\t\t\t\t\t\t<Menubar.Item>Messages</Menubar.Item>\n\t\t\t\t\t\t<Menubar.Item>Notes</Menubar.Item>\n\t\t\t\t\t</Menubar.SubContent>\n\t\t\t\t</Menubar.Sub>\n\t\t\t\t<Menubar.Separator />\n\t\t\t\t<Menubar.Item>\n\t\t\t\t\tPrint... <Menubar.Shortcut>⌘P</Menubar.Shortcut>\n\t\t\t\t</Menubar.Item>\n\t\t\t</Menubar.Content>\n\t\t</Menubar.Menu>\n\t\t<Menubar.Menu>\n\t\t\t<Menubar.Trigger>Edit</Menubar.Trigger>\n\t\t\t<Menubar.Content>\n\t\t\t\t<Menubar.Item>\n\t\t\t\t\tUndo <Menubar.Shortcut>⌘Z</Menubar.Shortcut>\n\t\t\t\t</Menubar.Item>\n\t\t\t\t<Menubar.Item>\n\t\t\t\t\tRedo <Menubar.Shortcut>⇧⌘Z</Menubar.Shortcut>\n\t\t\t\t</Menubar.Item>\n\t\t\t\t<Menubar.Separator />\n\t\t\t\t<Menubar.Sub>\n\t\t\t\t\t<Menubar.SubTrigger>Find</Menubar.SubTrigger>\n\t\t\t\t\t<Menubar.SubContent>\n\t\t\t\t\t\t<Menubar.Item>Find...</Menubar.Item>\n\t\t\t\t\t\t<Menubar.Item>Find Next</Menubar.Item>\n\t\t\t\t\t\t<Menubar.Item>Find Previous</Menubar.Item>\n\t\t\t\t\t</Menubar.SubContent>\n\t\t\t\t</Menubar.Sub>\n\t\t\t\t<Menubar.Separator />\n\t\t\t\t<Menubar.Item>Cut</Menubar.Item>\n\t\t\t\t<Menubar.Item>Copy</Menubar.Item>\n\t\t\t\t<Menubar.Item>Paste</Menubar.Item>\n\t\t\t</Menubar.Content>\n\t\t</Menubar.Menu>\n\t</Menubar.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/menubar/menubar.svelte",
    "content": "<script lang=\"ts\">\n\timport ExampleWrapper from \"../../../../../routes/(app)/(layout)/(create)/components/example-wrapper.svelte\";\n\timport MenubarBasic from \"./menubar-basic.svelte\";\n\timport MenubarWithSubmenu from \"./menubar-with-submenu.svelte\";\n\timport MenubarWithCheckboxes from \"./menubar-with-checkboxes.svelte\";\n\timport MenubarWithRadio from \"./menubar-with-radio.svelte\";\n\timport MenubarWithIcons from \"./menubar-with-icons.svelte\";\n\timport MenubarWithShortcuts from \"./menubar-with-shortcuts.svelte\";\n\timport MenubarFormat from \"./menubar-format.svelte\";\n\timport MenubarInsert from \"./menubar-insert.svelte\";\n\timport MenubarDestructive from \"./menubar-destructive.svelte\";\n\timport MenubarInDialog from \"./menubar-in-dialog.svelte\";\n\timport MenubarWithInset from \"./menubar-with-inset.svelte\";\n</script>\n\n<ExampleWrapper>\n\t<MenubarBasic />\n\t<MenubarWithSubmenu />\n\t<MenubarWithCheckboxes />\n\t<MenubarWithRadio />\n\t<MenubarWithIcons />\n\t<MenubarWithShortcuts />\n\t<MenubarFormat />\n\t<MenubarInsert />\n\t<MenubarDestructive />\n\t<MenubarInDialog />\n\t<MenubarWithInset />\n</ExampleWrapper>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/native-select/native-select-basic.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as NativeSelect from \"$lib/registry/ui/native-select/index.js\";\n</script>\n\n<Example title=\"Basic\">\n\t<NativeSelect.Root>\n\t\t<NativeSelect.Option value=\"\">Select a fruit</NativeSelect.Option>\n\t\t<NativeSelect.Option value=\"apple\">Apple</NativeSelect.Option>\n\t\t<NativeSelect.Option value=\"banana\">Banana</NativeSelect.Option>\n\t\t<NativeSelect.Option value=\"blueberry\">Blueberry</NativeSelect.Option>\n\t\t<NativeSelect.Option value=\"grapes\" disabled>Grapes</NativeSelect.Option>\n\t\t<NativeSelect.Option value=\"pineapple\">Pineapple</NativeSelect.Option>\n\t</NativeSelect.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/native-select/native-select-disabled.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as NativeSelect from \"$lib/registry/ui/native-select/index.js\";\n</script>\n\n<Example title=\"Disabled\">\n\t<NativeSelect.Root disabled>\n\t\t<NativeSelect.Option value=\"\">Disabled</NativeSelect.Option>\n\t\t<NativeSelect.Option value=\"apple\">Apple</NativeSelect.Option>\n\t\t<NativeSelect.Option value=\"banana\">Banana</NativeSelect.Option>\n\t\t<NativeSelect.Option value=\"blueberry\">Blueberry</NativeSelect.Option>\n\t</NativeSelect.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/native-select/native-select-invalid.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as NativeSelect from \"$lib/registry/ui/native-select/index.js\";\n</script>\n\n<Example title=\"Invalid\">\n\t<NativeSelect.Root aria-invalid=\"true\">\n\t\t<NativeSelect.Option value=\"\">Error state</NativeSelect.Option>\n\t\t<NativeSelect.Option value=\"apple\">Apple</NativeSelect.Option>\n\t\t<NativeSelect.Option value=\"banana\">Banana</NativeSelect.Option>\n\t\t<NativeSelect.Option value=\"blueberry\">Blueberry</NativeSelect.Option>\n\t</NativeSelect.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/native-select/native-select-sizes.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as NativeSelect from \"$lib/registry/ui/native-select/index.js\";\n</script>\n\n<Example title=\"Sizes\">\n\t<div class=\"flex flex-col gap-4\">\n\t\t<NativeSelect.Root size=\"sm\">\n\t\t\t<NativeSelect.Option value=\"\">Select a fruit</NativeSelect.Option>\n\t\t\t<NativeSelect.Option value=\"apple\">Apple</NativeSelect.Option>\n\t\t\t<NativeSelect.Option value=\"banana\">Banana</NativeSelect.Option>\n\t\t\t<NativeSelect.Option value=\"blueberry\">Blueberry</NativeSelect.Option>\n\t\t</NativeSelect.Root>\n\t\t<NativeSelect.Root size=\"default\">\n\t\t\t<NativeSelect.Option value=\"\">Select a fruit</NativeSelect.Option>\n\t\t\t<NativeSelect.Option value=\"apple\">Apple</NativeSelect.Option>\n\t\t\t<NativeSelect.Option value=\"banana\">Banana</NativeSelect.Option>\n\t\t\t<NativeSelect.Option value=\"blueberry\">Blueberry</NativeSelect.Option>\n\t\t</NativeSelect.Root>\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/native-select/native-select-with-field.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as NativeSelect from \"$lib/registry/ui/native-select/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n</script>\n\n<Example title=\"With Field\">\n\t<Field.Field>\n\t\t<Field.Label for=\"native-select-country\">Country</Field.Label>\n\t\t<NativeSelect.Root id=\"native-select-country\">\n\t\t\t<NativeSelect.Option value=\"\">Select a country</NativeSelect.Option>\n\t\t\t<NativeSelect.Option value=\"us\">United States</NativeSelect.Option>\n\t\t\t<NativeSelect.Option value=\"uk\">United Kingdom</NativeSelect.Option>\n\t\t\t<NativeSelect.Option value=\"ca\">Canada</NativeSelect.Option>\n\t\t\t<NativeSelect.Option value=\"au\">Australia</NativeSelect.Option>\n\t\t</NativeSelect.Root>\n\t\t<Field.Description>Select your country of residence.</Field.Description>\n\t</Field.Field>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/native-select/native-select-with-groups.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as NativeSelect from \"$lib/registry/ui/native-select/index.js\";\n</script>\n\n<Example title=\"With Groups\">\n\t<NativeSelect.Root>\n\t\t<NativeSelect.Option value=\"\">Select a food</NativeSelect.Option>\n\t\t<NativeSelect.OptGroup label=\"Fruits\">\n\t\t\t<NativeSelect.Option value=\"apple\">Apple</NativeSelect.Option>\n\t\t\t<NativeSelect.Option value=\"banana\">Banana</NativeSelect.Option>\n\t\t\t<NativeSelect.Option value=\"blueberry\">Blueberry</NativeSelect.Option>\n\t\t</NativeSelect.OptGroup>\n\t\t<NativeSelect.OptGroup label=\"Vegetables\">\n\t\t\t<NativeSelect.Option value=\"carrot\">Carrot</NativeSelect.Option>\n\t\t\t<NativeSelect.Option value=\"broccoli\">Broccoli</NativeSelect.Option>\n\t\t\t<NativeSelect.Option value=\"spinach\">Spinach</NativeSelect.Option>\n\t\t</NativeSelect.OptGroup>\n\t</NativeSelect.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/native-select/native-select.svelte",
    "content": "<script lang=\"ts\">\n\timport ExampleWrapper from \"../../../../../routes/(app)/(layout)/(create)/components/example-wrapper.svelte\";\n\timport NativeSelectBasic from \"./native-select-basic.svelte\";\n\timport NativeSelectWithGroups from \"./native-select-with-groups.svelte\";\n\timport NativeSelectSizes from \"./native-select-sizes.svelte\";\n\timport NativeSelectWithField from \"./native-select-with-field.svelte\";\n\timport NativeSelectDisabled from \"./native-select-disabled.svelte\";\n\timport NativeSelectInvalid from \"./native-select-invalid.svelte\";\n</script>\n\n<ExampleWrapper>\n\t<NativeSelectBasic />\n\t<NativeSelectWithGroups />\n\t<NativeSelectSizes />\n\t<NativeSelectWithField />\n\t<NativeSelectDisabled />\n\t<NativeSelectInvalid />\n</ExampleWrapper>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/navigation-menu/navigation-menu-with-viewport.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as NavigationMenu from \"$lib/registry/ui/navigation-menu/index.js\";\n\timport { navigationMenuTriggerStyle } from \"$lib/registry/ui/navigation-menu/navigation-menu-trigger.svelte\";\n\n\tconst components: { title: string; href: string; description: string }[] = [\n\t\t{\n\t\t\ttitle: \"Alert Dialog\",\n\t\t\thref: \"/docs/primitives/alert-dialog\",\n\t\t\tdescription:\n\t\t\t\t\"A modal dialog that interrupts the user with important content and expects a response.\",\n\t\t},\n\t\t{\n\t\t\ttitle: \"Hover Card\",\n\t\t\thref: \"/docs/primitives/hover-card\",\n\t\t\tdescription: \"For sighted users to preview content available behind a link.\",\n\t\t},\n\t\t{\n\t\t\ttitle: \"Progress\",\n\t\t\thref: \"/docs/primitives/progress\",\n\t\t\tdescription:\n\t\t\t\t\"Displays an indicator showing the completion progress of a task, typically displayed as a progress bar.\",\n\t\t},\n\t\t{\n\t\t\ttitle: \"Scroll-area\",\n\t\t\thref: \"/docs/primitives/scroll-area\",\n\t\t\tdescription: \"Visually or semantically separates content.\",\n\t\t},\n\t\t{\n\t\t\ttitle: \"Tabs\",\n\t\t\thref: \"/docs/primitives/tabs\",\n\t\t\tdescription:\n\t\t\t\t\"A set of layered sections of content—known as tab panels—that are displayed one at a time.\",\n\t\t},\n\t\t{\n\t\t\ttitle: \"Tooltip\",\n\t\t\thref: \"/docs/primitives/tooltip\",\n\t\t\tdescription:\n\t\t\t\t\"A popup that displays information related to an element when the element receives keyboard focus or the mouse hovers over it.\",\n\t\t},\n\t];\n</script>\n\n{#snippet ListItem({\n\ttitle,\n\thref,\n\tdescription,\n}: {\n\ttitle: string;\n\thref: string;\n\tdescription: string;\n})}\n\t<li>\n\t\t<NavigationMenu.Link>\n\t\t\t{#snippet child({ props })}\n\t\t\t\t<a {...props} {href}>\n\t\t\t\t\t<div class=\"flex flex-col gap-1 text-sm\">\n\t\t\t\t\t\t<div class=\"leading-none font-medium\">{title}</div>\n\t\t\t\t\t\t<div class=\"text-muted-foreground line-clamp-2\">\n\t\t\t\t\t\t\t{description}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</a>\n\t\t\t{/snippet}\n\t\t</NavigationMenu.Link>\n\t</li>\n{/snippet}\n\n<Example title=\"With Viewport\">\n\t<NavigationMenu.Root>\n\t\t<NavigationMenu.List>\n\t\t\t<NavigationMenu.Item>\n\t\t\t\t<NavigationMenu.Trigger>Getting started</NavigationMenu.Trigger>\n\t\t\t\t<NavigationMenu.Content>\n\t\t\t\t\t<ul class=\"w-96\">\n\t\t\t\t\t\t{@render ListItem({\n\t\t\t\t\t\t\ttitle: \"Introduction\",\n\t\t\t\t\t\t\thref: \"/docs\",\n\t\t\t\t\t\t\tdescription: \"Re-usable components built with Tailwind CSS.\",\n\t\t\t\t\t\t})}\n\t\t\t\t\t\t{@render ListItem({\n\t\t\t\t\t\t\ttitle: \"Installation\",\n\t\t\t\t\t\t\thref: \"/docs/installation\",\n\t\t\t\t\t\t\tdescription: \"How to install dependencies and structure your app.\",\n\t\t\t\t\t\t})}\n\t\t\t\t\t\t{@render ListItem({\n\t\t\t\t\t\t\ttitle: \"Typography\",\n\t\t\t\t\t\t\thref: \"/docs/primitives/typography\",\n\t\t\t\t\t\t\tdescription: \"Styles for headings, paragraphs, lists...etc\",\n\t\t\t\t\t\t})}\n\t\t\t\t\t</ul>\n\t\t\t\t</NavigationMenu.Content>\n\t\t\t</NavigationMenu.Item>\n\t\t\t<NavigationMenu.Item>\n\t\t\t\t<NavigationMenu.Trigger>Components</NavigationMenu.Trigger>\n\t\t\t\t<NavigationMenu.Content>\n\t\t\t\t\t<ul class=\"grid w-[400px] gap-1 md:w-[500px] md:grid-cols-2 lg:w-[600px]\">\n\t\t\t\t\t\t{#each components as component (component.title)}\n\t\t\t\t\t\t\t{@render ListItem({\n\t\t\t\t\t\t\t\ttitle: component.title,\n\t\t\t\t\t\t\t\thref: component.href,\n\t\t\t\t\t\t\t\tdescription: component.description,\n\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</ul>\n\t\t\t\t</NavigationMenu.Content>\n\t\t\t</NavigationMenu.Item>\n\t\t\t<NavigationMenu.Item>\n\t\t\t\t<NavigationMenu.Link class={navigationMenuTriggerStyle()}>\n\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t<a {...props} href=\"/docs\">Documentation</a>\n\t\t\t\t\t{/snippet}\n\t\t\t\t</NavigationMenu.Link>\n\t\t\t</NavigationMenu.Item>\n\t\t</NavigationMenu.List>\n\t</NavigationMenu.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/navigation-menu/navigation-menu-without-viewport.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as NavigationMenu from \"$lib/registry/ui/navigation-menu/index.js\";\n\timport { navigationMenuTriggerStyle } from \"$lib/registry/ui/navigation-menu/navigation-menu-trigger.svelte\";\n\timport CircleAlertIcon from \"@lucide/svelte/icons/circle-alert\";\n</script>\n\n<Example title=\"Without Viewport\">\n\t<NavigationMenu.Root viewport={false}>\n\t\t<NavigationMenu.List>\n\t\t\t<NavigationMenu.Item>\n\t\t\t\t<NavigationMenu.Link class={navigationMenuTriggerStyle()}>\n\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t<a {...props} href=\"/docs\">Documentation</a>\n\t\t\t\t\t{/snippet}\n\t\t\t\t</NavigationMenu.Link>\n\t\t\t</NavigationMenu.Item>\n\t\t\t<NavigationMenu.Item>\n\t\t\t\t<NavigationMenu.Trigger>List</NavigationMenu.Trigger>\n\t\t\t\t<NavigationMenu.Content>\n\t\t\t\t\t<ul class=\"w-72\">\n\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t<NavigationMenu.Link href=\"#/\">\n\t\t\t\t\t\t\t\t<div class=\"flex flex-col\">\n\t\t\t\t\t\t\t\t\t<div class=\"font-medium\">Components</div>\n\t\t\t\t\t\t\t\t\t<div class=\"text-muted-foreground\">\n\t\t\t\t\t\t\t\t\t\tBrowse all components in the library.\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</NavigationMenu.Link>\n\t\t\t\t\t\t\t<NavigationMenu.Link href=\"#/\">\n\t\t\t\t\t\t\t\t<div class=\"flex flex-col\">\n\t\t\t\t\t\t\t\t\t<div class=\"font-medium\">Documentation</div>\n\t\t\t\t\t\t\t\t\t<div class=\"text-muted-foreground\">\n\t\t\t\t\t\t\t\t\t\tLearn how to use the library.\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</NavigationMenu.Link>\n\t\t\t\t\t\t\t<NavigationMenu.Link href=\"#/\">\n\t\t\t\t\t\t\t\t<div class=\"flex flex-col\">\n\t\t\t\t\t\t\t\t\t<div class=\"font-medium\">Blog</div>\n\t\t\t\t\t\t\t\t\t<div class=\"text-muted-foreground\">\n\t\t\t\t\t\t\t\t\t\tRead our latest blog posts.\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</NavigationMenu.Link>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t</ul>\n\t\t\t\t</NavigationMenu.Content>\n\t\t\t</NavigationMenu.Item>\n\t\t\t<NavigationMenu.Item>\n\t\t\t\t<NavigationMenu.Trigger>Simple List</NavigationMenu.Trigger>\n\t\t\t\t<NavigationMenu.Content>\n\t\t\t\t\t<ul>\n\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t<NavigationMenu.Link href=\"#/\">Components</NavigationMenu.Link>\n\t\t\t\t\t\t\t<NavigationMenu.Link href=\"#/\">Documentation</NavigationMenu.Link>\n\t\t\t\t\t\t\t<NavigationMenu.Link href=\"#/\">Blocks</NavigationMenu.Link>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t</ul>\n\t\t\t\t</NavigationMenu.Content>\n\t\t\t</NavigationMenu.Item>\n\t\t\t<NavigationMenu.Item>\n\t\t\t\t<NavigationMenu.Trigger>With Icon</NavigationMenu.Trigger>\n\t\t\t\t<NavigationMenu.Content>\n\t\t\t\t\t<ul class=\"grid w-[200px]\">\n\t\t\t\t\t\t<li>\n\t\t\t\t\t\t\t<NavigationMenu.Link href=\"#/\" class=\"flex-row items-center gap-2\">\n\t\t\t\t\t\t\t\t<CircleAlertIcon />\n\t\t\t\t\t\t\t\tBacklog\n\t\t\t\t\t\t\t</NavigationMenu.Link>\n\t\t\t\t\t\t\t<NavigationMenu.Link href=\"#/\" class=\"flex-row items-center gap-2\">\n\t\t\t\t\t\t\t\t<CircleAlertIcon />\n\t\t\t\t\t\t\t\tTo Do\n\t\t\t\t\t\t\t</NavigationMenu.Link>\n\t\t\t\t\t\t\t<NavigationMenu.Link href=\"#/\">\n\t\t\t\t\t\t\t\t<CircleAlertIcon />\n\t\t\t\t\t\t\t\tDone\n\t\t\t\t\t\t\t</NavigationMenu.Link>\n\t\t\t\t\t\t</li>\n\t\t\t\t\t</ul>\n\t\t\t\t</NavigationMenu.Content>\n\t\t\t</NavigationMenu.Item>\n\t\t</NavigationMenu.List>\n\t</NavigationMenu.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/navigation-menu/navigation-menu.svelte",
    "content": "<script lang=\"ts\">\n\timport ExampleWrapper from \"../../../../../routes/(app)/(layout)/(create)/components/example-wrapper.svelte\";\n\timport NavigationMenuWithViewport from \"./navigation-menu-with-viewport.svelte\";\n\timport NavigationMenuWithoutViewport from \"./navigation-menu-without-viewport.svelte\";\n</script>\n\n<ExampleWrapper class=\"lg:grid-cols-1\">\n\t<NavigationMenuWithViewport />\n\t<NavigationMenuWithoutViewport />\n</ExampleWrapper>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/pagination/pagination-basic.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Pagination from \"$lib/registry/ui/pagination/index.js\";\n</script>\n\n<Example title=\"Basic\">\n\t<Pagination.Root page={2} count={30} perPage={10}>\n\t\t{#snippet children({ pages, currentPage })}\n\t\t\t<Pagination.Content>\n\t\t\t\t<Pagination.Item>\n\t\t\t\t\t<Pagination.PrevButton />\n\t\t\t\t</Pagination.Item>\n\t\t\t\t{#each pages as page (page.key)}\n\t\t\t\t\t{#if page.type === \"ellipsis\"}\n\t\t\t\t\t\t<Pagination.Item>\n\t\t\t\t\t\t\t<Pagination.Ellipsis />\n\t\t\t\t\t\t</Pagination.Item>\n\t\t\t\t\t{:else}\n\t\t\t\t\t\t<Pagination.Item>\n\t\t\t\t\t\t\t<Pagination.Link {page} isActive={currentPage === page.value} />\n\t\t\t\t\t\t</Pagination.Item>\n\t\t\t\t\t{/if}\n\t\t\t\t{/each}\n\t\t\t\t<Pagination.Item>\n\t\t\t\t\t<Pagination.NextButton />\n\t\t\t\t</Pagination.Item>\n\t\t\t</Pagination.Content>\n\t\t{/snippet}\n\t</Pagination.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/pagination/pagination-simple.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Pagination from \"$lib/registry/ui/pagination/index.js\";\n</script>\n\n<Example title=\"Simple\">\n\t<Pagination.Root page={2} count={50} perPage={10}>\n\t\t{#snippet children({ pages, currentPage })}\n\t\t\t<Pagination.Content>\n\t\t\t\t{#each pages as page (page.key)}\n\t\t\t\t\t<Pagination.Item>\n\t\t\t\t\t\t{#if page.type === \"ellipsis\"}\n\t\t\t\t\t\t\t<Pagination.Ellipsis />\n\t\t\t\t\t\t{:else}\n\t\t\t\t\t\t\t<Pagination.Link {page} isActive={currentPage === page.value} />\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t</Pagination.Item>\n\t\t\t\t{/each}\n\t\t\t</Pagination.Content>\n\t\t{/snippet}\n\t</Pagination.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/pagination/pagination-with-select.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Pagination from \"$lib/registry/ui/pagination/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport * as Select from \"$lib/registry/ui/select/index.js\";\n\n\tlet selectedValue = $state<string>(\"25\");\n\tconst selectedLabel = $derived(selectedValue);\n</script>\n\n<Example title=\"With Select\">\n\t<div class=\"flex items-center justify-between gap-4\">\n\t\t<Field.Field orientation=\"horizontal\" class=\"w-fit\">\n\t\t\t<Field.Label for=\"select-rows-per-page\">Rows per page</Field.Label>\n\t\t\t<Select.Root type=\"single\" bind:value={selectedValue}>\n\t\t\t\t<Select.Trigger class=\"w-20\" id=\"select-rows-per-page\">\n\t\t\t\t\t{selectedLabel}\n\t\t\t\t</Select.Trigger>\n\t\t\t\t<Select.Content align=\"start\">\n\t\t\t\t\t<Select.Group>\n\t\t\t\t\t\t<Select.Item value=\"10\">10</Select.Item>\n\t\t\t\t\t\t<Select.Item value=\"25\">25</Select.Item>\n\t\t\t\t\t\t<Select.Item value=\"50\">50</Select.Item>\n\t\t\t\t\t\t<Select.Item value=\"100\">100</Select.Item>\n\t\t\t\t\t</Select.Group>\n\t\t\t\t</Select.Content>\n\t\t\t</Select.Root>\n\t\t</Field.Field>\n\t\t<Pagination.Root page={2} count={100} class=\"mx-0 w-auto\">\n\t\t\t<Pagination.Content>\n\t\t\t\t<Pagination.Item>\n\t\t\t\t\t<Pagination.PrevButton />\n\t\t\t\t</Pagination.Item>\n\t\t\t\t<Pagination.Item>\n\t\t\t\t\t<Pagination.NextButton />\n\t\t\t\t</Pagination.Item>\n\t\t\t</Pagination.Content>\n\t\t</Pagination.Root>\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/pagination/pagination.svelte",
    "content": "<script lang=\"ts\">\n\timport ExampleWrapper from \"../../../../../routes/(app)/(layout)/(create)/components/example-wrapper.svelte\";\n\timport PaginationBasic from \"./pagination-basic.svelte\";\n\timport PaginationSimple from \"./pagination-simple.svelte\";\n\timport PaginationWithSelect from \"./pagination-with-select.svelte\";\n</script>\n\n<ExampleWrapper>\n\t<PaginationBasic />\n\t<PaginationSimple />\n\t<PaginationWithSelect />\n</ExampleWrapper>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/popover/popover-alignments.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Popover from \"$lib/registry/ui/popover/index.js\";\n</script>\n\n<Example title=\"Alignments\">\n\t<div class=\"flex gap-6\">\n\t\t<Popover.Root>\n\t\t\t<Popover.Trigger>\n\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t<Button variant=\"outline\" size=\"sm\" {...props}>Start</Button>\n\t\t\t\t{/snippet}\n\t\t\t</Popover.Trigger>\n\t\t\t<Popover.Content align=\"start\" class=\"w-40\">Aligned to start</Popover.Content>\n\t\t</Popover.Root>\n\t\t<Popover.Root>\n\t\t\t<Popover.Trigger>\n\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t<Button variant=\"outline\" size=\"sm\" {...props}>Center</Button>\n\t\t\t\t{/snippet}\n\t\t\t</Popover.Trigger>\n\t\t\t<Popover.Content align=\"center\" class=\"w-40\">Aligned to center</Popover.Content>\n\t\t</Popover.Root>\n\t\t<Popover.Root>\n\t\t\t<Popover.Trigger>\n\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t<Button variant=\"outline\" size=\"sm\" {...props}>End</Button>\n\t\t\t\t{/snippet}\n\t\t\t</Popover.Trigger>\n\t\t\t<Popover.Content align=\"end\" class=\"w-40\">Aligned to end</Popover.Content>\n\t\t</Popover.Root>\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/popover/popover-basic.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Popover from \"$lib/registry/ui/popover/index.js\";\n</script>\n\n<Example title=\"Basic\">\n\t<Popover.Root>\n\t\t<Popover.Trigger>\n\t\t\t{#snippet child({ props })}\n\t\t\t\t<Button variant=\"outline\" class=\"w-fit\" {...props}>Open Popover</Button>\n\t\t\t{/snippet}\n\t\t</Popover.Trigger>\n\t\t<Popover.Content align=\"start\">\n\t\t\t<Popover.Header>\n\t\t\t\t<Popover.Title>Dimensions</Popover.Title>\n\t\t\t\t<Popover.Description>Set the dimensions for the layer.</Popover.Description>\n\t\t\t</Popover.Header>\n\t\t</Popover.Content>\n\t</Popover.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/popover/popover-in-dialog.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Dialog from \"$lib/registry/ui/dialog/index.js\";\n\timport * as Popover from \"$lib/registry/ui/popover/index.js\";\n</script>\n\n<Example title=\"In Dialog\">\n\t<Dialog.Root>\n\t\t<Dialog.Trigger>\n\t\t\t{#snippet child({ props })}\n\t\t\t\t<Button variant=\"outline\" {...props}>Open Dialog</Button>\n\t\t\t{/snippet}\n\t\t</Dialog.Trigger>\n\t\t<Dialog.Content>\n\t\t\t<Dialog.Header>\n\t\t\t\t<Dialog.Title>Popover Example</Dialog.Title>\n\t\t\t\t<Dialog.Description>Click the button below to see the popover.</Dialog.Description>\n\t\t\t</Dialog.Header>\n\t\t\t<Popover.Root>\n\t\t\t\t<Popover.Trigger>\n\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t<Button variant=\"outline\" class=\"w-fit\" {...props}>Open Popover</Button>\n\t\t\t\t\t{/snippet}\n\t\t\t\t</Popover.Trigger>\n\t\t\t\t<Popover.Content align=\"start\">\n\t\t\t\t\t<Popover.Header>\n\t\t\t\t\t\t<Popover.Title>Popover in Dialog</Popover.Title>\n\t\t\t\t\t\t<Popover.Description>\n\t\t\t\t\t\t\tThis popover appears inside a dialog. Click the button to open it.\n\t\t\t\t\t\t</Popover.Description>\n\t\t\t\t\t</Popover.Header>\n\t\t\t\t</Popover.Content>\n\t\t\t</Popover.Root>\n\t\t</Dialog.Content>\n\t</Dialog.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/popover/popover-with-form.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport { Input } from \"$lib/registry/ui/input/index.js\";\n\timport * as Popover from \"$lib/registry/ui/popover/index.js\";\n</script>\n\n<Example title=\"With Form\">\n\t<Popover.Root>\n\t\t<Popover.Trigger>\n\t\t\t{#snippet child({ props })}\n\t\t\t\t<Button variant=\"outline\" {...props}>Open Popover</Button>\n\t\t\t{/snippet}\n\t\t</Popover.Trigger>\n\t\t<Popover.Content class=\"w-64\" align=\"start\">\n\t\t\t<Popover.Header>\n\t\t\t\t<Popover.Title>Dimensions</Popover.Title>\n\t\t\t\t<Popover.Description>Set the dimensions for the layer.</Popover.Description>\n\t\t\t</Popover.Header>\n\t\t\t<Field.Group class=\"gap-4\">\n\t\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t\t<Field.Label for=\"width\" class=\"w-1/2\">Width</Field.Label>\n\t\t\t\t\t<Input id=\"width\" value=\"100%\" />\n\t\t\t\t</Field.Field>\n\t\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t\t<Field.Label for=\"height\" class=\"w-1/2\">Height</Field.Label>\n\t\t\t\t\t<Input id=\"height\" value=\"25px\" />\n\t\t\t\t</Field.Field>\n\t\t\t</Field.Group>\n\t\t</Popover.Content>\n\t</Popover.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/popover/popover.svelte",
    "content": "<script lang=\"ts\">\n\timport ExampleWrapper from \"../../../../../routes/(app)/(layout)/(create)/components/example-wrapper.svelte\";\n\timport PopoverBasic from \"./popover-basic.svelte\";\n\timport PopoverWithForm from \"./popover-with-form.svelte\";\n\timport PopoverAlignments from \"./popover-alignments.svelte\";\n\timport PopoverInDialog from \"./popover-in-dialog.svelte\";\n</script>\n\n<ExampleWrapper>\n\t<PopoverBasic />\n\t<PopoverWithForm />\n\t<PopoverAlignments />\n\t<PopoverInDialog />\n</ExampleWrapper>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/preview/cards/activate-agent-dialog.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Alert from \"$lib/registry/ui/alert/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Item from \"$lib/registry/ui/item/index.js\";\n\timport { Badge } from \"$lib/registry/ui/badge/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Card.Root>\n\t<Card.Header>\n\t\t<Card.Title>\n\t\t\t<strong>Ship faster & safer</strong> with <strong>Vercel Agent</strong>\n\t\t</Card.Title>\n\t\t<Card.Description>\n\t\t\tYour use is subject to Vercel's\n\t\t\t<a href=\"https://vercel.com/legal\" class=\"underline\">Public Beta Agreement</a> and\n\t\t\t<a href=\"https://vercel.com/legal/ai-terms\" class=\"underline\">AI Product Terms</a>.\n\t\t</Card.Description>\n\t</Card.Header>\n\t<Card.Content class=\"flex flex-col gap-4\">\n\t\t<Item.Group class=\"gap-0\">\n\t\t\t<Item.Root size=\"xs\" class=\"px-0\">\n\t\t\t\t<Item.Media variant=\"icon\" class=\"self-start\">\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"CheckCircle2Icon\"\n\t\t\t\t\t\ttabler=\"IconCircleCheckFilled\"\n\t\t\t\t\t\thugeicons=\"CheckmarkCircle02Icon\"\n\t\t\t\t\t\tphosphor=\"CheckCircleIcon\"\n\t\t\t\t\t\tremixicon=\"RiCheckboxCircleLine\"\n\t\t\t\t\t\tclass=\"fill-primary text-primary-foreground size-5\"\n\t\t\t\t\t/>\n\t\t\t\t</Item.Media>\n\t\t\t\t<Item.Content>\n\t\t\t\t\t<Item.Title\n\t\t\t\t\t\tclass=\"text-muted-foreground *:[strong]:text-foreground inline leading-relaxed font-normal *:[strong]:font-medium\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<strong>Code reviews</strong> with full codebase context to catch\n\t\t\t\t\t\t<strong>hard-to-find</strong> bugs.\n\t\t\t\t\t</Item.Title>\n\t\t\t\t</Item.Content>\n\t\t\t</Item.Root>\n\t\t\t<Item.Root size=\"xs\" class=\"px-0\">\n\t\t\t\t<Item.Media variant=\"icon\" class=\"self-start\">\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"CheckCircle2Icon\"\n\t\t\t\t\t\ttabler=\"IconCircleCheckFilled\"\n\t\t\t\t\t\thugeicons=\"CheckmarkCircle02Icon\"\n\t\t\t\t\t\tphosphor=\"CheckCircleIcon\"\n\t\t\t\t\t\tremixicon=\"RiCheckboxCircleLine\"\n\t\t\t\t\t\tclass=\"fill-primary text-primary-foreground size-5\"\n\t\t\t\t\t/>\n\t\t\t\t</Item.Media>\n\t\t\t\t<Item.Content>\n\t\t\t\t\t<Item.Title\n\t\t\t\t\t\tclass=\"text-muted-foreground *:[strong]:text-foreground inline leading-relaxed font-normal *:[strong]:font-medium\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<strong>Code suggestions</strong> validated in sandboxes before you merge.\n\t\t\t\t\t</Item.Title>\n\t\t\t\t</Item.Content>\n\t\t\t</Item.Root>\n\t\t\t<Item.Root size=\"xs\" class=\"px-0\">\n\t\t\t\t<Item.Media variant=\"icon\" class=\"self-start\">\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"CheckCircle2Icon\"\n\t\t\t\t\t\ttabler=\"IconCircleCheckFilled\"\n\t\t\t\t\t\thugeicons=\"CheckmarkCircle02Icon\"\n\t\t\t\t\t\tphosphor=\"CheckCircleIcon\"\n\t\t\t\t\t\tremixicon=\"RiCheckboxCircleLine\"\n\t\t\t\t\t\tclass=\"fill-primary text-primary-foreground size-5\"\n\t\t\t\t\t/>\n\t\t\t\t</Item.Media>\n\t\t\t\t<Item.Content>\n\t\t\t\t\t<Item.Title\n\t\t\t\t\t\tclass=\"text-muted-foreground *:[strong]:text-foreground inline leading-relaxed font-normal *:[strong]:font-medium\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<strong>Root-cause analysis</strong> for production issues with deployment\n\t\t\t\t\t\tcontext.\n\t\t\t\t\t\t<Badge variant=\"secondary\" class=\"bg-chart-1 text-chart-5 ml-1\">\n\t\t\t\t\t\t\tRequires Observability Plus\n\t\t\t\t\t\t</Badge>\n\t\t\t\t\t</Item.Title>\n\t\t\t\t</Item.Content>\n\t\t\t</Item.Root>\n\t\t</Item.Group>\n\t\t<Alert.Root>\n\t\t\t<Alert.Description>\n\t\t\t\tPro teams get $100 in Vercel Agent trial credit for 2 weeks after activation.\n\t\t\t</Alert.Description>\n\t\t</Alert.Root>\n\t</Card.Content>\n\t<Card.Footer class=\"justify-end gap-2\">\n\t\t<Button variant=\"outline\">Cancel</Button>\n\t\t<Button>Enable with $100 credits</Button>\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/preview/cards/analytics-card.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport { Badge } from \"$lib/registry/ui/badge/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport { AreaChart } from \"layerchart\";\n\timport { curveLinear } from \"d3-shape\";\n\n\tconst chartData = [\n\t\t{ month: \"Jan\", visitors: 186 },\n\t\t{ month: \"Feb\", visitors: 305 },\n\t\t{ month: \"Mar\", visitors: 237 },\n\t\t{ month: \"Apr\", visitors: 73 },\n\t\t{ month: \"May\", visitors: 209 },\n\t\t{ month: \"Jun\", visitors: 214 },\n\t];\n\n\tconst chartConfig = {\n\t\tvisitors: {\n\t\t\tlabel: \"Visitors\",\n\t\t\tcolor: \"var(--chart-1)\",\n\t\t},\n\t} satisfies Chart.ChartConfig;\n</script>\n\n<Card.Root class=\"data-[size=sm]:pb-0\" size=\"sm\">\n\t<Card.Header>\n\t\t<Card.Title>Analytics</Card.Title>\n\t\t<Card.Description>\n\t\t\t418.2K Visitors <Badge>+10%</Badge>\n\t\t</Card.Description>\n\t\t<Card.Action>\n\t\t\t<Button variant=\"outline\" size=\"sm\">View Analytics</Button>\n\t\t</Card.Action>\n\t</Card.Header>\n\t<Chart.Container config={chartConfig} class=\"aspect-[1/0.35]\">\n\t\t<AreaChart\n\t\t\tdata={chartData}\n\t\t\tx=\"month\"\n\t\t\tseries={[\n\t\t\t\t{\n\t\t\t\t\tkey: \"visitors\",\n\t\t\t\t\tlabel: \"Visitors\",\n\t\t\t\t\tcolor: chartConfig.visitors.color,\n\t\t\t\t},\n\t\t\t]}\n\t\t\tprops={{\n\t\t\t\tarea: {\n\t\t\t\t\tcurve: curveLinear,\n\t\t\t\t\t\"fill-opacity\": 0.4,\n\t\t\t\t\tline: { class: \"stroke-1\" },\n\t\t\t\t},\n\t\t\t\txAxis: { format: () => \"\" },\n\t\t\t\tyAxis: { format: () => \"\" },\n\t\t\t}}\n\t\t>\n\t\t\t{#snippet tooltip()}\n\t\t\t\t<Chart.Tooltip indicator=\"line\" hideLabel />\n\t\t\t{/snippet}\n\t\t</AreaChart>\n\t</Chart.Container>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/preview/cards/anomaly-alert.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Empty from \"$lib/registry/ui/empty/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n</script>\n\n<Card.Root>\n\t<Card.Content>\n\t\t<Empty.Root class=\"h-48\">\n\t\t\t<Empty.Header>\n\t\t\t\t<Empty.Title>Get alerted for anomalies</Empty.Title>\n\t\t\t\t<Empty.Description>\n\t\t\t\t\tAutomatically monitor your projects for anomalies and get notified.\n\t\t\t\t</Empty.Description>\n\t\t\t</Empty.Header>\n\t\t\t<Empty.Content>\n\t\t\t\t<Button>Upgrade to Observability Plus</Button>\n\t\t\t</Empty.Content>\n\t\t</Empty.Root>\n\t</Card.Content>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/preview/cards/assign-issue.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Avatar from \"$lib/registry/ui/avatar/index.js\";\n\timport * as Tooltip from \"$lib/registry/ui/tooltip/index.js\";\n\timport * as Popover from \"$lib/registry/ui/popover/index.js\";\n\timport * as Command from \"$lib/registry/ui/command/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport { Badge } from \"$lib/registry/ui/badge/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tconst users = [\n\t\t\"shadcn\",\n\t\t\"maxleiter\",\n\t\t\"evilrabbit\",\n\t\t\"pranathip\",\n\t\t\"jorgezreik\",\n\t\t\"shuding\",\n\t\t\"rauchg\",\n\t];\n\tlet open = $state(false);\n\tlet selected = $state<string[]>([\"shadcn\"]);\n\n\tfunction toggleUser(username: string) {\n\t\tselected = selected.includes(username)\n\t\t\t? selected.filter((u) => u !== username)\n\t\t\t: [...selected, username];\n\t}\n\n\tfunction removeUser(e: MouseEvent, username: string) {\n\t\te.stopPropagation();\n\t\tselected = selected.filter((u) => u !== username);\n\t}\n</script>\n\n<Card.Root class=\"w-full max-w-sm\" size=\"sm\">\n\t<Card.Header class=\"border-b\">\n\t\t<Card.Title class=\"text-sm\">Assign Issue</Card.Title>\n\t\t<Card.Description class=\"text-sm\">Select users to assign to this issue.</Card.Description>\n\t\t<Card.Action>\n\t\t\t<Tooltip.Root>\n\t\t\t\t<Tooltip.Trigger>\n\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t<Button variant=\"outline\" size=\"icon-xs\" {...props}>\n\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\tlucide=\"PlusIcon\"\n\t\t\t\t\t\t\t\ttabler=\"IconPlus\"\n\t\t\t\t\t\t\t\thugeicons=\"PlusSignIcon\"\n\t\t\t\t\t\t\t\tphosphor=\"PlusIcon\"\n\t\t\t\t\t\t\t\tremixicon=\"RiAddLine\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t{/snippet}\n\t\t\t\t</Tooltip.Trigger>\n\t\t\t\t<Tooltip.Content>Add user</Tooltip.Content>\n\t\t\t</Tooltip.Root>\n\t\t</Card.Action>\n\t</Card.Header>\n\t<Card.Content>\n\t\t<Popover.Root bind:open>\n\t\t\t<Popover.Trigger>\n\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t<div\n\t\t\t\t\t\t{...props}\n\t\t\t\t\t\trole=\"combobox\"\n\t\t\t\t\t\taria-expanded={open}\n\t\t\t\t\t\tclass=\"flex min-h-9 min-w-0 cursor-pointer flex-wrap items-center gap-1.5 rounded-md border px-2.5 py-1.5 text-sm transition-colors focus-within:ring-2 focus-within:ring-offset-2\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{#each selected as username (username)}\n\t\t\t\t\t\t\t<Badge\n\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\tclass=\"gap-1 pr-0.5\"\n\t\t\t\t\t\t\t\tonclick={(e) => removeUser(e, username)}\n\t\t\t\t\t\t\t\tonkeydown={(e) =>\n\t\t\t\t\t\t\t\t\te.key === \"Enter\" &&\n\t\t\t\t\t\t\t\t\tremoveUser(e as unknown as MouseEvent, username)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<Avatar.Root class=\"size-4\">\n\t\t\t\t\t\t\t\t\t<Avatar.Image\n\t\t\t\t\t\t\t\t\t\tsrc=\"https://github.com/{username}.png\"\n\t\t\t\t\t\t\t\t\t\talt={username}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<Avatar.Fallback>{username.charAt(0)}</Avatar.Fallback>\n\t\t\t\t\t\t\t\t</Avatar.Root>\n\t\t\t\t\t\t\t\t{username}\n\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\tlucide=\"XIcon\"\n\t\t\t\t\t\t\t\t\ttabler=\"IconX\"\n\t\t\t\t\t\t\t\t\thugeicons=\"Cancel01Icon\"\n\t\t\t\t\t\t\t\t\tphosphor=\"XIcon\"\n\t\t\t\t\t\t\t\t\tremixicon=\"RiCloseLine\"\n\t\t\t\t\t\t\t\t\tclass=\"size-3\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t<span class=\"text-muted-foreground flex-1 py-1 text-sm\">\n\t\t\t\t\t\t\t{selected.length > 0 ? \"Select users...\" : \"Select a user...\"}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</div>\n\t\t\t\t{/snippet}\n\t\t\t</Popover.Trigger>\n\t\t\t<Popover.Content class=\"w-[--radix-popover-trigger-width] p-0\" align=\"start\">\n\t\t\t\t<Command.Root>\n\t\t\t\t\t<Command.Input placeholder=\"Search users...\" />\n\t\t\t\t\t<Command.List>\n\t\t\t\t\t\t<Command.Empty>No users found.</Command.Empty>\n\t\t\t\t\t\t<Command.Group value=\"users\">\n\t\t\t\t\t\t\t{#each users as username (username)}\n\t\t\t\t\t\t\t\t<Command.Item\n\t\t\t\t\t\t\t\t\tvalue={username}\n\t\t\t\t\t\t\t\t\tonSelect={() => toggleUser(username)}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\tlucide=\"CheckIcon\"\n\t\t\t\t\t\t\t\t\t\ttabler=\"IconCheck\"\n\t\t\t\t\t\t\t\t\t\thugeicons=\"Tick02Icon\"\n\t\t\t\t\t\t\t\t\t\tphosphor=\"CheckIcon\"\n\t\t\t\t\t\t\t\t\t\tremixicon=\"RiCheckLine\"\n\t\t\t\t\t\t\t\t\t\tclass={cn(\n\t\t\t\t\t\t\t\t\t\t\t!selected.includes(username) && \"text-transparent\"\n\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<Avatar.Root class=\"size-5\">\n\t\t\t\t\t\t\t\t\t\t<Avatar.Image\n\t\t\t\t\t\t\t\t\t\t\tsrc=\"https://github.com/{username}.png\"\n\t\t\t\t\t\t\t\t\t\t\talt={username}\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t<Avatar.Fallback>{username.charAt(0)}</Avatar.Fallback>\n\t\t\t\t\t\t\t\t\t</Avatar.Root>\n\t\t\t\t\t\t\t\t\t{username}\n\t\t\t\t\t\t\t\t</Command.Item>\n\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t</Command.Group>\n\t\t\t\t\t</Command.List>\n\t\t\t\t</Command.Root>\n\t\t\t</Popover.Content>\n\t\t</Popover.Root>\n\t</Card.Content>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/preview/cards/bar-chart-card.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport * as ToggleGroup from \"$lib/registry/ui/toggle-group/index.js\";\n\timport { scaleBand } from \"d3-scale\";\n\timport { BarChart } from \"layerchart\";\n\n\tconst barChartData = [\n\t\t{ month: \"January\", desktop: 186, mobile: 80 },\n\t\t{ month: \"February\", desktop: 305, mobile: 200 },\n\t\t{ month: \"March\", desktop: 237, mobile: 120 },\n\t\t{ month: \"April\", desktop: 73, mobile: 190 },\n\t\t{ month: \"May\", desktop: 209, mobile: 130 },\n\t\t{ month: \"June\", desktop: 214, mobile: 140 },\n\t];\n\n\tconst barChartConfig = {\n\t\tdesktop: {\n\t\t\tlabel: \"Desktop\",\n\t\t\tcolor: \"var(--chart-1)\",\n\t\t},\n\t\tmobile: {\n\t\t\tlabel: \"Mobile\",\n\t\t\tcolor: \"var(--chart-2)\",\n\t\t},\n\t} satisfies Chart.ChartConfig;\n\n\tconst desktopTotal = barChartData.reduce((sum, item) => sum + item.desktop, 0);\n\tconst mobileTotal = barChartData.reduce((sum, item) => sum + item.mobile, 0);\n\tconst desktopDelta = Math.round(((desktopTotal - mobileTotal) / mobileTotal) * 100);\n\tconst desktopDeltaPrefix = desktopDelta > 0 ? \"+\" : \"\";\n</script>\n\n<Card.Root>\n\t<Card.Header>\n\t\t<Card.Title>Traffic Channels</Card.Title>\n\t\t<Card.Description>Desktop vs mobile over the last 6 months</Card.Description>\n\t\t<Card.Action>\n\t\t\t<ToggleGroup.Root\n\t\t\t\taria-label=\"Time range\"\n\t\t\t\ttype=\"single\"\n\t\t\t\tvalue=\"6m\"\n\t\t\t\tvariant=\"outline\"\n\t\t\t\tsize=\"sm\"\n\t\t\t>\n\t\t\t\t<ToggleGroup.Item value=\"6m\">6M</ToggleGroup.Item>\n\t\t\t\t<ToggleGroup.Item value=\"12m\">12M</ToggleGroup.Item>\n\t\t\t</ToggleGroup.Root>\n\t\t</Card.Action>\n\t</Card.Header>\n\t<Card.Content class=\"pt-0\">\n\t\t<Chart.Container config={barChartConfig} class=\"max-h-[180px] w-full\">\n\t\t\t<BarChart\n\t\t\t\tdata={barChartData}\n\t\t\t\txScale={scaleBand().padding(0.25)}\n\t\t\t\tx=\"month\"\n\t\t\t\taxis=\"x\"\n\t\t\t\tx1Scale={scaleBand().paddingInner(0.2)}\n\t\t\t\tseriesLayout=\"group\"\n\t\t\t\trule={false}\n\t\t\t\tprops={{\n\t\t\t\t\tbars: {\n\t\t\t\t\t\tstroke: \"none\",\n\t\t\t\t\t\trounded: \"all\",\n\t\t\t\t\t},\n\t\t\t\t\txAxis: {\n\t\t\t\t\t\tformat: (d: string) => d.slice(0, 3),\n\t\t\t\t\t\ttickLength: 0,\n\t\t\t\t\t},\n\t\t\t\t}}\n\t\t\t\tseries={[\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"desktop\",\n\t\t\t\t\t\tlabel: barChartConfig.desktop.label,\n\t\t\t\t\t\tcolor: barChartConfig.desktop.color,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"mobile\",\n\t\t\t\t\t\tlabel: barChartConfig.mobile.label,\n\t\t\t\t\t\tcolor: barChartConfig.mobile.color,\n\t\t\t\t\t},\n\t\t\t\t]}\n\t\t\t>\n\t\t\t\t{#snippet tooltip()}\n\t\t\t\t\t<Chart.Tooltip indicator=\"dashed\" />\n\t\t\t\t{/snippet}\n\t\t\t</BarChart>\n\t\t</Chart.Container>\n\t</Card.Content>\n\t<Card.Footer>\n\t\t<div class=\"divide-border/60 grid w-full grid-cols-3 divide-x\">\n\t\t\t<div class=\"px-2 text-center\">\n\t\t\t\t<div class=\"text-muted-foreground text-[0.65rem] uppercase\">Desktop</div>\n\t\t\t\t<div class=\"text-sm font-medium tabular-nums\">\n\t\t\t\t\t{desktopTotal.toLocaleString()}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class=\"px-2 text-center\">\n\t\t\t\t<div class=\"text-muted-foreground text-[0.65rem] uppercase\">Mobile</div>\n\t\t\t\t<div class=\"text-sm font-medium tabular-nums\">\n\t\t\t\t\t{mobileTotal.toLocaleString()}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div class=\"px-2 text-center\">\n\t\t\t\t<div class=\"text-muted-foreground text-[0.65rem] uppercase\">Mix Delta</div>\n\t\t\t\t<div class=\"text-sm font-medium tabular-nums\">\n\t\t\t\t\t{desktopDeltaPrefix}{desktopDelta}%\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/preview/cards/bar-visualizer-card.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport BarVisualizer, { type AgentState } from \"../../elevenlabs/bar-visualizer.svelte\";\n\n\tlet agentState: AgentState = $state(\"speaking\");\n</script>\n\n<Card.Root>\n\t<Card.Header>\n\t\t<Card.Title>Audio Frequency Visualizer</Card.Title>\n\t\t<Card.Description>\n\t\t\tReal-time frequency band visualization with animated state transitions\n\t\t</Card.Description>\n\t</Card.Header>\n\t<Card.Content>\n\t\t<BarVisualizer\n\t\t\t{agentState}\n\t\t\tdemo={true}\n\t\t\tbarCount={20}\n\t\t\tminHeight={15}\n\t\t\tmaxHeight={90}\n\t\t\tclass=\"h-40 max-w-full\"\n\t\t/>\n\t</Card.Content>\n\t<Card.Footer class=\"gap-2\">\n\t\t<Button\n\t\t\tsize=\"sm\"\n\t\t\tvariant={agentState === \"connecting\" ? \"default\" : \"outline\"}\n\t\t\tonclick={() => (agentState = \"connecting\")}\n\t\t>\n\t\t\tConnecting\n\t\t</Button>\n\t\t<Button\n\t\t\tsize=\"sm\"\n\t\t\tvariant={agentState === \"listening\" ? \"default\" : \"outline\"}\n\t\t\tonclick={() => (agentState = \"listening\")}\n\t\t>\n\t\t\tListening\n\t\t</Button>\n\t\t<Button\n\t\t\tsize=\"sm\"\n\t\t\tvariant={agentState === \"speaking\" ? \"default\" : \"outline\"}\n\t\t\tonclick={() => (agentState = \"speaking\")}\n\t\t>\n\t\t\tSpeaking\n\t\t</Button>\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/preview/cards/book-appointment.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Alert from \"$lib/registry/ui/alert/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport * as ToggleGroup from \"$lib/registry/ui/toggle-group/index.js\";\n</script>\n\n<Card.Root>\n\t<Card.Header>\n\t\t<Card.Title>Book Appointment</Card.Title>\n\t\t<Card.Description>Dr. Sarah Chen · Cardiology</Card.Description>\n\t</Card.Header>\n\t<Card.Content class=\"flex flex-col gap-4\">\n\t\t<Field.Group>\n\t\t\t<Field.Field>\n\t\t\t\t<Field.Label>Available on March 18, 2026</Field.Label>\n\t\t\t\t<ToggleGroup.Root\n\t\t\t\t\ttype=\"multiple\"\n\t\t\t\t\tvalue={[\"slot-0\"]}\n\t\t\t\t\tclass=\"flex flex-wrap gap-2\"\n\t\t\t\t\tspacing={2}\n\t\t\t\t>\n\t\t\t\t\t<ToggleGroup.Item value=\"slot-0\">9:00 AM</ToggleGroup.Item>\n\t\t\t\t\t<ToggleGroup.Item value=\"slot-1\">10:30 AM</ToggleGroup.Item>\n\t\t\t\t\t<ToggleGroup.Item value=\"slot-2\">11:00 AM</ToggleGroup.Item>\n\t\t\t\t\t<ToggleGroup.Item value=\"slot-3\">1:30 PM</ToggleGroup.Item>\n\t\t\t\t</ToggleGroup.Root>\n\t\t\t</Field.Field>\n\t\t</Field.Group>\n\t\t<Alert.Root>\n\t\t\t<Alert.Title>New patient?</Alert.Title>\n\t\t\t<Alert.Description>Please arrive 15 minutes early.</Alert.Description>\n\t\t</Alert.Root>\n\t</Card.Content>\n\t<Card.Footer>\n\t\t<Button class=\"w-full\">Book Appointment</Button>\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/preview/cards/codespaces-card.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\timport * as Empty from \"$lib/registry/ui/empty/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport * as InputGroup from \"$lib/registry/ui/input-group/index.js\";\n\timport * as Item from \"$lib/registry/ui/item/index.js\";\n\timport * as Tabs from \"$lib/registry/ui/tabs/index.js\";\n\timport { Separator } from \"$lib/registry/ui/separator/index.js\";\n\timport { Spinner } from \"$lib/registry/ui/spinner/index.js\";\n\timport * as Tooltip from \"$lib/registry/ui/tooltip/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\n\tlet isCreatingCodespace = $state(false);\n</script>\n\n<Card.Root>\n\t<Card.Content>\n\t\t<Tabs.Root value=\"codespaces\">\n\t\t\t<Tabs.List class=\"w-full\">\n\t\t\t\t<Tabs.Trigger value=\"codespaces\">Codespaces</Tabs.Trigger>\n\t\t\t\t<Tabs.Trigger value=\"local\">Local</Tabs.Trigger>\n\t\t\t</Tabs.List>\n\t\t\t<Tabs.Content value=\"codespaces\">\n\t\t\t\t<Item.Root size=\"sm\" class=\"px-1 pt-2\">\n\t\t\t\t\t<Item.Content>\n\t\t\t\t\t\t<Item.Title>Codespaces</Item.Title>\n\t\t\t\t\t\t<Item.Description>Your workspaces in the cloud</Item.Description>\n\t\t\t\t\t</Item.Content>\n\t\t\t\t\t<Item.Actions>\n\t\t\t\t\t\t<Tooltip.Root>\n\t\t\t\t\t\t\t<Tooltip.Trigger>\n\t\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t\t<Button variant=\"ghost\" size=\"icon-sm\" {...props}>\n\t\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\t\tlucide=\"PlusIcon\"\n\t\t\t\t\t\t\t\t\t\t\ttabler=\"IconPlus\"\n\t\t\t\t\t\t\t\t\t\t\thugeicons=\"PlusSignIcon\"\n\t\t\t\t\t\t\t\t\t\t\tphosphor=\"PlusIcon\"\n\t\t\t\t\t\t\t\t\t\t\tremixicon=\"RiAddLine\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t\t</Tooltip.Trigger>\n\t\t\t\t\t\t\t<Tooltip.Content side=\"bottom\">\n\t\t\t\t\t\t\t\tCreate a codespace on main\n\t\t\t\t\t\t\t</Tooltip.Content>\n\t\t\t\t\t\t</Tooltip.Root>\n\t\t\t\t\t\t<DropdownMenu.Root>\n\t\t\t\t\t\t\t<DropdownMenu.Trigger>\n\t\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t\t<Button variant=\"ghost\" size=\"icon-sm\" {...props}>\n\t\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\t\tlucide=\"MoreHorizontalIcon\"\n\t\t\t\t\t\t\t\t\t\t\ttabler=\"IconDots\"\n\t\t\t\t\t\t\t\t\t\t\thugeicons=\"MoreHorizontalCircle01Icon\"\n\t\t\t\t\t\t\t\t\t\t\tphosphor=\"DotsThreeOutlineIcon\"\n\t\t\t\t\t\t\t\t\t\t\tremixicon=\"RiMoreLine\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t\t</DropdownMenu.Trigger>\n\t\t\t\t\t\t\t<DropdownMenu.Content align=\"end\" class=\"w-56\">\n\t\t\t\t\t\t\t\t<DropdownMenu.Group>\n\t\t\t\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\t\tlucide=\"PlusIcon\"\n\t\t\t\t\t\t\t\t\t\t\ttabler=\"IconPlus\"\n\t\t\t\t\t\t\t\t\t\t\thugeicons=\"PlusSignIcon\"\n\t\t\t\t\t\t\t\t\t\t\tphosphor=\"PlusIcon\"\n\t\t\t\t\t\t\t\t\t\t\tremixicon=\"RiAddLine\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\tNew with options...\n\t\t\t\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\t\tlucide=\"ContainerIcon\"\n\t\t\t\t\t\t\t\t\t\t\ttabler=\"IconBox\"\n\t\t\t\t\t\t\t\t\t\t\thugeicons=\"CubeIcon\"\n\t\t\t\t\t\t\t\t\t\t\tphosphor=\"CubeIcon\"\n\t\t\t\t\t\t\t\t\t\t\tremixicon=\"RiBox1Line\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\tConfigure dev container\n\t\t\t\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\t\tlucide=\"ZapIcon\"\n\t\t\t\t\t\t\t\t\t\t\ttabler=\"IconBolt\"\n\t\t\t\t\t\t\t\t\t\t\thugeicons=\"ZapIcon\"\n\t\t\t\t\t\t\t\t\t\t\tphosphor=\"LightningIcon\"\n\t\t\t\t\t\t\t\t\t\t\tremixicon=\"RiFlashlightLine\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\tSet up prebuilds\n\t\t\t\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t\t\t</DropdownMenu.Group>\n\t\t\t\t\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t\t\t\t\t<DropdownMenu.Group>\n\t\t\t\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\t\tlucide=\"ServerIcon\"\n\t\t\t\t\t\t\t\t\t\t\ttabler=\"IconServer\"\n\t\t\t\t\t\t\t\t\t\t\thugeicons=\"ServerStackIcon\"\n\t\t\t\t\t\t\t\t\t\t\tphosphor=\"HardDrivesIcon\"\n\t\t\t\t\t\t\t\t\t\t\tremixicon=\"RiHardDriveLine\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\tManage codespaces\n\t\t\t\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\t\tlucide=\"ShareIcon\"\n\t\t\t\t\t\t\t\t\t\t\ttabler=\"IconShare2\"\n\t\t\t\t\t\t\t\t\t\t\thugeicons=\"Share03Icon\"\n\t\t\t\t\t\t\t\t\t\t\tphosphor=\"ShareIcon\"\n\t\t\t\t\t\t\t\t\t\t\tremixicon=\"RiShareLine\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\tShare deep link\n\t\t\t\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\t\tlucide=\"InfoIcon\"\n\t\t\t\t\t\t\t\t\t\t\ttabler=\"IconInfoCircle\"\n\t\t\t\t\t\t\t\t\t\t\thugeicons=\"AlertCircleIcon\"\n\t\t\t\t\t\t\t\t\t\t\tphosphor=\"InfoIcon\"\n\t\t\t\t\t\t\t\t\t\t\tremixicon=\"RiInformationLine\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\tWhat are codespaces?\n\t\t\t\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t\t\t</DropdownMenu.Group>\n\t\t\t\t\t\t\t</DropdownMenu.Content>\n\t\t\t\t\t\t</DropdownMenu.Root>\n\t\t\t\t\t</Item.Actions>\n\t\t\t\t</Item.Root>\n\t\t\t\t<Separator class=\"-mx-2 my-2 w-auto!\" />\n\t\t\t\t<Empty.Root class=\"p-4\">\n\t\t\t\t\t<Empty.Header>\n\t\t\t\t\t\t<Empty.Media variant=\"icon\">\n\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\tlucide=\"ServerIcon\"\n\t\t\t\t\t\t\t\ttabler=\"IconServer\"\n\t\t\t\t\t\t\t\thugeicons=\"ServerStackIcon\"\n\t\t\t\t\t\t\t\tphosphor=\"HardDrivesIcon\"\n\t\t\t\t\t\t\t\tremixicon=\"RiHardDriveLine\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</Empty.Media>\n\t\t\t\t\t\t<Empty.Title>No codespaces</Empty.Title>\n\t\t\t\t\t\t<Empty.Description>\n\t\t\t\t\t\t\tYou don't have any codespaces with this repository checked out\n\t\t\t\t\t\t</Empty.Description>\n\t\t\t\t\t</Empty.Header>\n\t\t\t\t\t<Empty.Content>\n\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\tdisabled={isCreatingCodespace}\n\t\t\t\t\t\t\tonclick={() => {\n\t\t\t\t\t\t\t\tisCreatingCodespace = true;\n\t\t\t\t\t\t\t\tsetTimeout(() => (isCreatingCodespace = false), 2000);\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{#if isCreatingCodespace}\n\t\t\t\t\t\t\t\t<Spinner data-icon=\"inline-start\" />\n\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\tCreate Codespace\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t<a\n\t\t\t\t\t\t\thref=\"#learn-more\"\n\t\t\t\t\t\t\tclass=\"text-muted-foreground text-xs underline underline-offset-4\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tLearn more about codespaces\n\t\t\t\t\t\t</a>\n\t\t\t\t\t</Empty.Content>\n\t\t\t\t</Empty.Root>\n\t\t\t\t<Separator class=\"-mx-2 my-2 w-auto!\" />\n\t\t\t\t<div class=\"text-muted-foreground p-1.5 text-xs\">\n\t\t\t\t\tCodespace usage for this repository is paid for by\n\t\t\t\t\t<span class=\"font-medium\">shadcn</span>.\n\t\t\t\t</div>\n\t\t\t</Tabs.Content>\n\t\t\t<Tabs.Content value=\"local\">\n\t\t\t\t<Item.Root size=\"sm\" class=\"hidden p-0\">\n\t\t\t\t\t<Item.Content>\n\t\t\t\t\t\t<Item.Title class=\"gap-2\">\n\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\tlucide=\"TerminalIcon\"\n\t\t\t\t\t\t\t\ttabler=\"IconTerminal\"\n\t\t\t\t\t\t\t\thugeicons=\"ComputerTerminal01Icon\"\n\t\t\t\t\t\t\t\tphosphor=\"TerminalIcon\"\n\t\t\t\t\t\t\t\tremixicon=\"RiTerminalBoxLine\"\n\t\t\t\t\t\t\t\tclass=\"size-4\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\tClone\n\t\t\t\t\t\t</Item.Title>\n\t\t\t\t\t</Item.Content>\n\t\t\t\t\t<Item.Actions>\n\t\t\t\t\t\t<Tooltip.Root>\n\t\t\t\t\t\t\t<Tooltip.Trigger>\n\t\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t\t<Button variant=\"ghost\" size=\"icon\" {...props}>\n\t\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\t\tlucide=\"InfoIcon\"\n\t\t\t\t\t\t\t\t\t\t\ttabler=\"IconInfoCircle\"\n\t\t\t\t\t\t\t\t\t\t\thugeicons=\"AlertCircleIcon\"\n\t\t\t\t\t\t\t\t\t\t\tphosphor=\"InfoIcon\"\n\t\t\t\t\t\t\t\t\t\t\tremixicon=\"RiInformationLine\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t\t</Tooltip.Trigger>\n\t\t\t\t\t\t\t<Tooltip.Content side=\"left\">\n\t\t\t\t\t\t\t\tWhich remote URL should I use?\n\t\t\t\t\t\t\t</Tooltip.Content>\n\t\t\t\t\t\t</Tooltip.Root>\n\t\t\t\t\t</Item.Actions>\n\t\t\t\t</Item.Root>\n\t\t\t\t<Tabs.Root value=\"https\">\n\t\t\t\t\t<Tabs.List\n\t\t\t\t\t\tvariant=\"line\"\n\t\t\t\t\t\tclass=\"w-full justify-start border-b *:[button]:flex-0\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<Tabs.Trigger value=\"https\">HTTPS</Tabs.Trigger>\n\t\t\t\t\t\t<Tabs.Trigger value=\"ssh\">SSH</Tabs.Trigger>\n\t\t\t\t\t\t<Tabs.Trigger value=\"cli\">GitHub CLI</Tabs.Trigger>\n\t\t\t\t\t</Tabs.List>\n\t\t\t\t\t<div class=\"bg-muted/30 rounded-md border p-2\">\n\t\t\t\t\t\t<Tabs.Content value=\"https\">\n\t\t\t\t\t\t\t<Field.Field class=\"gap-2\">\n\t\t\t\t\t\t\t\t<Field.Label for=\"https-url\" class=\"sr-only\">HTTPS URL</Field.Label>\n\t\t\t\t\t\t\t\t<InputGroup.Root>\n\t\t\t\t\t\t\t\t\t<InputGroup.Addon align=\"inline-end\">\n\t\t\t\t\t\t\t\t\t\t<InputGroup.Button variant=\"ghost\" size=\"icon-xs\">\n\t\t\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\t\t\tlucide=\"CopyIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\ttabler=\"IconCopy\"\n\t\t\t\t\t\t\t\t\t\t\t\thugeicons=\"Copy01Icon\"\n\t\t\t\t\t\t\t\t\t\t\t\tphosphor=\"CopyIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\tremixicon=\"RiFileCopyLine\"\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t</InputGroup.Button>\n\t\t\t\t\t\t\t\t\t</InputGroup.Addon>\n\t\t\t\t\t\t\t\t\t<InputGroup.Input\n\t\t\t\t\t\t\t\t\t\tid=\"https-url\"\n\t\t\t\t\t\t\t\t\t\tvalue=\"https://github.com/shadcn-ui/ui.git\"\n\t\t\t\t\t\t\t\t\t\treadonly\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</InputGroup.Root>\n\t\t\t\t\t\t\t\t<Field.Description>Clone using the web URL.</Field.Description>\n\t\t\t\t\t\t\t</Field.Field>\n\t\t\t\t\t\t</Tabs.Content>\n\t\t\t\t\t\t<Tabs.Content value=\"ssh\">\n\t\t\t\t\t\t\t<Field.Field class=\"gap-2\">\n\t\t\t\t\t\t\t\t<Field.Label for=\"ssh-url\" class=\"sr-only\">SSH URL</Field.Label>\n\t\t\t\t\t\t\t\t<InputGroup.Root>\n\t\t\t\t\t\t\t\t\t<InputGroup.Addon align=\"inline-end\">\n\t\t\t\t\t\t\t\t\t\t<InputGroup.Button variant=\"ghost\" size=\"icon-xs\">\n\t\t\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\t\t\tlucide=\"CopyIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\ttabler=\"IconCopy\"\n\t\t\t\t\t\t\t\t\t\t\t\thugeicons=\"Copy01Icon\"\n\t\t\t\t\t\t\t\t\t\t\t\tphosphor=\"CopyIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\tremixicon=\"RiFileCopyLine\"\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t</InputGroup.Button>\n\t\t\t\t\t\t\t\t\t</InputGroup.Addon>\n\t\t\t\t\t\t\t\t\t<InputGroup.Input\n\t\t\t\t\t\t\t\t\t\tid=\"ssh-url\"\n\t\t\t\t\t\t\t\t\t\tvalue=\"git@github.com:shadcn-ui/ui.git\"\n\t\t\t\t\t\t\t\t\t\treadonly\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</InputGroup.Root>\n\t\t\t\t\t\t\t\t<Field.Description>\n\t\t\t\t\t\t\t\t\tUse a password-protected SSH key.\n\t\t\t\t\t\t\t\t</Field.Description>\n\t\t\t\t\t\t\t</Field.Field>\n\t\t\t\t\t\t</Tabs.Content>\n\t\t\t\t\t\t<Tabs.Content value=\"cli\">\n\t\t\t\t\t\t\t<Field.Field class=\"gap-2\">\n\t\t\t\t\t\t\t\t<Field.Label for=\"cli-command\" class=\"sr-only\">\n\t\t\t\t\t\t\t\t\tCLI Command\n\t\t\t\t\t\t\t\t</Field.Label>\n\t\t\t\t\t\t\t\t<InputGroup.Root>\n\t\t\t\t\t\t\t\t\t<InputGroup.Addon align=\"inline-end\">\n\t\t\t\t\t\t\t\t\t\t<InputGroup.Button variant=\"ghost\" size=\"icon-xs\">\n\t\t\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\t\t\tlucide=\"CopyIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\ttabler=\"IconCopy\"\n\t\t\t\t\t\t\t\t\t\t\t\thugeicons=\"Copy01Icon\"\n\t\t\t\t\t\t\t\t\t\t\t\tphosphor=\"CopyIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\tremixicon=\"RiFileCopyLine\"\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t</InputGroup.Button>\n\t\t\t\t\t\t\t\t\t</InputGroup.Addon>\n\t\t\t\t\t\t\t\t\t<InputGroup.Input\n\t\t\t\t\t\t\t\t\t\tid=\"cli-command\"\n\t\t\t\t\t\t\t\t\t\tvalue=\"gh repo clone shadcn-ui/ui\"\n\t\t\t\t\t\t\t\t\t\treadonly\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</InputGroup.Root>\n\t\t\t\t\t\t\t\t<Field.Description>\n\t\t\t\t\t\t\t\t\tWork fast with our official CLI.\n\t\t\t\t\t\t\t\t\t<a href=\"https://cli.github.com\">Learn more</a>\n\t\t\t\t\t\t\t\t</Field.Description>\n\t\t\t\t\t\t\t</Field.Field>\n\t\t\t\t\t\t</Tabs.Content>\n\t\t\t\t\t</div>\n\t\t\t\t</Tabs.Root>\n\t\t\t\t<Separator class=\"-mx-2 my-2 w-auto!\" />\n\t\t\t\t<div class=\"flex flex-col\">\n\t\t\t\t\t<Button variant=\"ghost\" size=\"sm\" class=\"justify-start gap-1.5\">\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"MonitorIcon\"\n\t\t\t\t\t\t\ttabler=\"IconDeviceDesktop\"\n\t\t\t\t\t\t\thugeicons=\"ComputerIcon\"\n\t\t\t\t\t\t\tphosphor=\"MonitorIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiComputerLine\"\n\t\t\t\t\t\t\tdata-icon=\"inline-start\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\tOpen with GitHub Desktop\n\t\t\t\t\t</Button>\n\t\t\t\t\t<Button variant=\"ghost\" size=\"sm\" class=\"justify-start gap-1.5\">\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"DownloadIcon\"\n\t\t\t\t\t\t\ttabler=\"IconDownload\"\n\t\t\t\t\t\t\thugeicons=\"DownloadIcon\"\n\t\t\t\t\t\t\tphosphor=\"DownloadIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiDownloadLine\"\n\t\t\t\t\t\t\tdata-icon=\"inline-start\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\tDownload ZIP\n\t\t\t\t\t</Button>\n\t\t\t\t</div>\n\t\t\t</Tabs.Content>\n\t\t</Tabs.Root>\n\t</Card.Content>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/preview/cards/contributions-activity.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport { Checkbox } from \"$lib/registry/ui/checkbox/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n</script>\n\n<Card.Root>\n\t<Card.Header>\n\t\t<Card.Title>Contributions & Activity</Card.Title>\n\t\t<Card.Description>Manage your contributions and activity visibility.</Card.Description>\n\t</Card.Header>\n\t<Card.Content>\n\t\t<form id=\"contributions-activity\">\n\t\t\t<Field.Group>\n\t\t\t\t<Field.Set>\n\t\t\t\t\t<Field.Legend class=\"sr-only\">Contributions & activity</Field.Legend>\n\t\t\t\t\t<Field.Group>\n\t\t\t\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t\t\t\t<Checkbox id=\"activity-private-profile\" />\n\t\t\t\t\t\t\t<Field.Content>\n\t\t\t\t\t\t\t\t<Field.Label for=\"activity-private-profile\">\n\t\t\t\t\t\t\t\t\tMake profile private and hide activity\n\t\t\t\t\t\t\t\t</Field.Label>\n\t\t\t\t\t\t\t\t<Field.Description>\n\t\t\t\t\t\t\t\t\tEnabling this will hide your contributions and activity from\n\t\t\t\t\t\t\t\t\tyour GitHub profile and from social features like followers,\n\t\t\t\t\t\t\t\t\tstars, feeds, leaderboards and releases.\n\t\t\t\t\t\t\t\t</Field.Description>\n\t\t\t\t\t\t\t</Field.Content>\n\t\t\t\t\t\t</Field.Field>\n\t\t\t\t\t</Field.Group>\n\t\t\t\t</Field.Set>\n\t\t\t</Field.Group>\n\t\t</form>\n\t</Card.Content>\n\t<Card.Footer>\n\t\t<Button form=\"contributions-activity\">Save Changes</Button>\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/preview/cards/contributors.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Avatar from \"$lib/registry/ui/avatar/index.js\";\n\timport { Badge } from \"$lib/registry/ui/badge/index.js\";\n\n\tconst usernames = [\n\t\t\"shadcn\",\n\t\t\"vercel\",\n\t\t\"nextjs\",\n\t\t\"tailwindlabs\",\n\t\t\"typescript-lang\",\n\t\t\"eslint\",\n\t\t\"prettier\",\n\t\t\"babel\",\n\t\t\"webpack\",\n\t\t\"rollup\",\n\t\t\"parcel\",\n\t\t\"vite\",\n\t\t\"react\",\n\t\t\"vue\",\n\t\t\"angular\",\n\t\t\"solid\",\n\t] as const;\n</script>\n\n<Card.Root class=\"max-w-sm\">\n\t<Card.Header>\n\t\t<Card.Title>\n\t\t\tContributors <Badge variant=\"secondary\">312</Badge>\n\t\t</Card.Title>\n\t</Card.Header>\n\t<Card.Content>\n\t\t<div class=\"flex flex-wrap gap-2\">\n\t\t\t{#each usernames as username (username)}\n\t\t\t\t<Avatar.Root>\n\t\t\t\t\t<Avatar.Image src=\"https://github.com/{username}.png\" alt={username} />\n\t\t\t\t\t<Avatar.Fallback>{username.charAt(0)}</Avatar.Fallback>\n\t\t\t\t</Avatar.Root>\n\t\t\t{/each}\n\t\t</div>\n\t</Card.Content>\n\t<Card.Footer>\n\t\t<a\n\t\t\thref=\"https://github.com/huntabyte/shadcn-svelte/graphs/contributors\"\n\t\t\tclass=\"text-sm underline underline-offset-4\"\n\t\t>\n\t\t\t+ 810 contributors\n\t\t</a>\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/preview/cards/environment-variables.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\n\tconst envVars = [\n\t\t{ key: \"DATABASE_URL\", masked: true },\n\t\t{ key: \"NEXT_PUBLIC_API\", masked: false },\n\t\t{ key: \"STRIPE_SECRET\", masked: true },\n\t];\n</script>\n\n<Card.Root>\n\t<Card.Header>\n\t\t<Card.Title>Environment Variables</Card.Title>\n\t\t<Card.Description>Production · 8 variables</Card.Description>\n\t</Card.Header>\n\t<Card.Content class=\"flex flex-col gap-2\">\n\t\t{#each envVars as env, index (index)}\n\t\t\t<div\n\t\t\t\tclass=\"ring-border flex items-center gap-2 rounded-md px-2.5 py-2 font-mono text-xs ring\"\n\t\t\t>\n\t\t\t\t<span class=\"font-medium\">{env.key}</span>\n\t\t\t\t<span class=\"text-muted-foreground ml-auto\">\n\t\t\t\t\t{env.masked ? \"••••••••\" : \"https://api.example.com\"}\n\t\t\t\t</span>\n\t\t\t</div>\n\t\t{/each}\n\t</Card.Content>\n\t<Card.Footer>\n\t\t<Button variant=\"outline\">Edit</Button>\n\t\t<Button class=\"ml-auto\">Deploy</Button>\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/preview/cards/feedback-form.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as NativeSelect from \"$lib/registry/ui/native-select/index.js\";\n\timport { Textarea } from \"$lib/registry/ui/textarea/index.js\";\n</script>\n\n<Card.Root>\n\t<Card.Content>\n\t\t<form id=\"feedback-form\">\n\t\t\t<Field.Group>\n\t\t\t\t<Field.Field>\n\t\t\t\t\t<Field.Label for=\"topic\">Topic</Field.Label>\n\t\t\t\t\t<NativeSelect.Root id=\"topic\">\n\t\t\t\t\t\t<NativeSelect.Option value=\"\">Select a topic</NativeSelect.Option>\n\t\t\t\t\t\t<NativeSelect.Option value=\"ai\">AI</NativeSelect.Option>\n\t\t\t\t\t\t<NativeSelect.Option value=\"billing\">Billing</NativeSelect.Option>\n\t\t\t\t\t\t<NativeSelect.Option value=\"dashboard-interface\">\n\t\t\t\t\t\t\tDashboard Interface\n\t\t\t\t\t\t</NativeSelect.Option>\n\t\t\t\t\t</NativeSelect.Root>\n\t\t\t\t</Field.Field>\n\t\t\t\t<Field.Field>\n\t\t\t\t\t<Field.Label for=\"feedback\">Feedback</Field.Label>\n\t\t\t\t\t<Textarea id=\"feedback\" placeholder=\"Your feedback helps us improve...\" />\n\t\t\t\t</Field.Field>\n\t\t\t</Field.Group>\n\t\t</form>\n\t</Card.Content>\n\t<Card.Footer>\n\t\t<Button type=\"submit\" form=\"feedback-form\">Submit</Button>\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/preview/cards/file-upload.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Empty from \"$lib/registry/ui/empty/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Card.Root>\n\t<Card.Header>\n\t\t<Card.Title>File Upload</Card.Title>\n\t\t<Card.Description>Drag and drop or browse</Card.Description>\n\t</Card.Header>\n\t<Card.Content>\n\t\t<Empty.Root class=\"border\">\n\t\t\t<Empty.Header>\n\t\t\t\t<Empty.Media variant=\"icon\">\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"UploadCloudIcon\"\n\t\t\t\t\t\ttabler=\"IconCloudUpload\"\n\t\t\t\t\t\thugeicons=\"CloudUploadIcon\"\n\t\t\t\t\t\tphosphor=\"CloudArrowUpIcon\"\n\t\t\t\t\t\tremixicon=\"RiUploadCloudLine\"\n\t\t\t\t\t/>\n\t\t\t\t</Empty.Media>\n\t\t\t\t<Empty.Title>Upload files</Empty.Title>\n\t\t\t\t<Empty.Description>PNG, JPG, PDF up to 10MB</Empty.Description>\n\t\t\t</Empty.Header>\n\t\t\t<Empty.Content>\n\t\t\t\t<Button>Browse Files</Button>\n\t\t\t</Empty.Content>\n\t\t</Empty.Root>\n\t</Card.Content>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/preview/cards/github-profile.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport { Input } from \"$lib/registry/ui/input/index.js\";\n\timport * as NativeSelect from \"$lib/registry/ui/native-select/index.js\";\n\timport { Textarea } from \"$lib/registry/ui/textarea/index.js\";\n</script>\n\n<Card.Root class=\"mx-auto w-full max-w-md\">\n\t<Card.Header>\n\t\t<Card.Title>Profile</Card.Title>\n\t\t<Card.Description>Manage your profile information.</Card.Description>\n\t</Card.Header>\n\t<Card.Content>\n\t\t<form id=\"profile\">\n\t\t\t<Field.Group>\n\t\t\t\t<Field.Field>\n\t\t\t\t\t<Field.Label for=\"name\">Name</Field.Label>\n\t\t\t\t\t<Input id=\"name\" placeholder=\"shadcn\" />\n\t\t\t\t\t<Field.Description>\n\t\t\t\t\t\tYour name may appear around GitHub where you contribute or are mentioned.\n\t\t\t\t\t\tYou can remove it at any time.\n\t\t\t\t\t</Field.Description>\n\t\t\t\t</Field.Field>\n\t\t\t\t<Field.Field>\n\t\t\t\t\t<Field.Label for=\"email\">Public Email</Field.Label>\n\t\t\t\t\t<NativeSelect.Root id=\"email\">\n\t\t\t\t\t\t<NativeSelect.Option value=\"m@shadcn.com\">m@shadcn.com</NativeSelect.Option>\n\t\t\t\t\t\t<NativeSelect.Option value=\"m@gmail.com\">m@gmail.com</NativeSelect.Option>\n\t\t\t\t\t</NativeSelect.Root>\n\t\t\t\t\t<Field.Description>\n\t\t\t\t\t\tYou can manage verified email addresses in your\n\t\t\t\t\t\t<a href=\"https://github.com/settings/emails\" class=\"underline\"\n\t\t\t\t\t\t\t>email settings</a\n\t\t\t\t\t\t>.\n\t\t\t\t\t</Field.Description>\n\t\t\t\t</Field.Field>\n\t\t\t\t<Field.Field>\n\t\t\t\t\t<Field.Label for=\"bio\">Bio</Field.Label>\n\t\t\t\t\t<Textarea id=\"bio\" placeholder=\"Tell us a little bit about yourself\" />\n\t\t\t\t\t<Field.Description>\n\t\t\t\t\t\tYou can <span>@mention</span> other users and organizations to link to them.\n\t\t\t\t\t</Field.Description>\n\t\t\t\t</Field.Field>\n\t\t\t</Field.Group>\n\t\t</form>\n\t</Card.Content>\n\t<Card.Footer>\n\t\t<Button form=\"profile\">Save Profile</Button>\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/preview/cards/icon-preview-grid.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\n\tconst PREVIEW_ICONS = [\n\t\t{\n\t\t\tlucide: \"CopyIcon\",\n\t\t\ttabler: \"IconCopy\",\n\t\t\thugeicons: \"Copy01Icon\",\n\t\t\tphosphor: \"CopyIcon\",\n\t\t\tremixicon: \"RiFileCopyLine\",\n\t\t},\n\t\t{\n\t\t\tlucide: \"CircleAlertIcon\",\n\t\t\ttabler: \"IconExclamationCircle\",\n\t\t\thugeicons: \"AlertCircleIcon\",\n\t\t\tphosphor: \"WarningCircleIcon\",\n\t\t\tremixicon: \"RiErrorWarningLine\",\n\t\t},\n\t\t{\n\t\t\tlucide: \"TrashIcon\",\n\t\t\ttabler: \"IconTrash\",\n\t\t\thugeicons: \"Delete02Icon\",\n\t\t\tphosphor: \"TrashIcon\",\n\t\t\tremixicon: \"RiDeleteBinLine\",\n\t\t},\n\t\t{\n\t\t\tlucide: \"ShareIcon\",\n\t\t\ttabler: \"IconShare\",\n\t\t\thugeicons: \"Share03Icon\",\n\t\t\tphosphor: \"ShareIcon\",\n\t\t\tremixicon: \"RiShareLine\",\n\t\t},\n\t\t{\n\t\t\tlucide: \"ShoppingBagIcon\",\n\t\t\ttabler: \"IconShoppingBag\",\n\t\t\thugeicons: \"ShoppingBag01Icon\",\n\t\t\tphosphor: \"BagIcon\",\n\t\t\tremixicon: \"RiShoppingBagLine\",\n\t\t},\n\t\t{\n\t\t\tlucide: \"MoreHorizontalIcon\",\n\t\t\ttabler: \"IconDots\",\n\t\t\thugeicons: \"MoreHorizontalCircle01Icon\",\n\t\t\tphosphor: \"DotsThreeIcon\",\n\t\t\tremixicon: \"RiMoreLine\",\n\t\t},\n\t\t{\n\t\t\tlucide: \"Loader2Icon\",\n\t\t\ttabler: \"IconLoader\",\n\t\t\thugeicons: \"Loading03Icon\",\n\t\t\tphosphor: \"SpinnerIcon\",\n\t\t\tremixicon: \"RiLoaderLine\",\n\t\t},\n\t\t{\n\t\t\tlucide: \"PlusIcon\",\n\t\t\ttabler: \"IconPlus\",\n\t\t\thugeicons: \"PlusSignIcon\",\n\t\t\tphosphor: \"PlusIcon\",\n\t\t\tremixicon: \"RiAddLine\",\n\t\t},\n\t\t{\n\t\t\tlucide: \"MinusIcon\",\n\t\t\ttabler: \"IconMinus\",\n\t\t\thugeicons: \"MinusSignIcon\",\n\t\t\tphosphor: \"MinusIcon\",\n\t\t\tremixicon: \"RiSubtractLine\",\n\t\t},\n\t\t{\n\t\t\tlucide: \"ArrowLeftIcon\",\n\t\t\ttabler: \"IconArrowLeft\",\n\t\t\thugeicons: \"ArrowLeft02Icon\",\n\t\t\tphosphor: \"ArrowLeftIcon\",\n\t\t\tremixicon: \"RiArrowLeftLine\",\n\t\t},\n\t\t{\n\t\t\tlucide: \"ArrowRightIcon\",\n\t\t\ttabler: \"IconArrowRight\",\n\t\t\thugeicons: \"ArrowRight02Icon\",\n\t\t\tphosphor: \"ArrowRightIcon\",\n\t\t\tremixicon: \"RiArrowRightLine\",\n\t\t},\n\t\t{\n\t\t\tlucide: \"CheckIcon\",\n\t\t\ttabler: \"IconCheck\",\n\t\t\thugeicons: \"Tick02Icon\",\n\t\t\tphosphor: \"CheckIcon\",\n\t\t\tremixicon: \"RiCheckLine\",\n\t\t},\n\t\t{\n\t\t\tlucide: \"ChevronDownIcon\",\n\t\t\ttabler: \"IconChevronDown\",\n\t\t\thugeicons: \"ArrowDown01Icon\",\n\t\t\tphosphor: \"CaretDownIcon\",\n\t\t\tremixicon: \"RiArrowDownSLine\",\n\t\t},\n\t\t{\n\t\t\tlucide: \"ChevronRightIcon\",\n\t\t\ttabler: \"IconChevronRight\",\n\t\t\thugeicons: \"ArrowRight01Icon\",\n\t\t\tphosphor: \"CaretRightIcon\",\n\t\t\tremixicon: \"RiArrowRightSLine\",\n\t\t},\n\t\t{\n\t\t\tlucide: \"SearchIcon\",\n\t\t\ttabler: \"IconSearch\",\n\t\t\thugeicons: \"Search01Icon\",\n\t\t\tphosphor: \"MagnifyingGlassIcon\",\n\t\t\tremixicon: \"RiSearchLine\",\n\t\t},\n\t\t{\n\t\t\tlucide: \"SettingsIcon\",\n\t\t\ttabler: \"IconSettings\",\n\t\t\thugeicons: \"Settings01Icon\",\n\t\t\tphosphor: \"GearIcon\",\n\t\t\tremixicon: \"RiSettingsLine\",\n\t\t},\n\t] as const;\n</script>\n\n<Card.Root>\n\t<Card.Content>\n\t\t<div class=\"grid grid-cols-8 place-items-center gap-4\">\n\t\t\t{#each PREVIEW_ICONS as icon, index (index)}\n\t\t\t\t<Card.Root\n\t\t\t\t\tclass=\"ring-border flex size-8 items-center justify-center rounded-md p-0 ring *:[svg]:size-4\"\n\t\t\t\t>\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide={icon.lucide}\n\t\t\t\t\t\ttabler={icon.tabler}\n\t\t\t\t\t\thugeicons={icon.hugeicons}\n\t\t\t\t\t\tphosphor={icon.phosphor}\n\t\t\t\t\t\tremixicon={icon.remixicon}\n\t\t\t\t\t/>\n\t\t\t\t</Card.Root>\n\t\t\t{/each}\n\t\t</div>\n\t</Card.Content>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/preview/cards/invite-team.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport * as InputGroup from \"$lib/registry/ui/input-group/index.js\";\n\timport * as Select from \"$lib/registry/ui/select/index.js\";\n\timport { Separator } from \"$lib/registry/ui/separator/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\n\tconst roles = [\n\t\t{ value: \"admin\", label: \"Admin\" },\n\t\t{ value: \"editor\", label: \"Editor\" },\n\t\t{ value: \"viewer\", label: \"Viewer\" },\n\t];\n\n\tlet role1 = $state(\"editor\");\n\tlet role2 = $state(\"viewer\");\n</script>\n\n<Card.Root>\n\t<Card.Header>\n\t\t<Card.Title>Invite Team</Card.Title>\n\t\t<Card.Description>Add members to your workspace</Card.Description>\n\t</Card.Header>\n\t<Card.Content class=\"flex flex-col gap-4\">\n\t\t<div class=\"flex flex-col gap-3\">\n\t\t\t<div class=\"flex items-center gap-2\">\n\t\t\t\t<InputGroup.Root class=\"flex-1\">\n\t\t\t\t\t<InputGroup.Input value=\"alex@example.com\" readonly />\n\t\t\t\t</InputGroup.Root>\n\t\t\t\t<Select.Root type=\"single\" bind:value={role1}>\n\t\t\t\t\t<Select.Trigger class=\"w-24\">\n\t\t\t\t\t\t{roles.find((role) => role.value === role1)?.label}\n\t\t\t\t\t</Select.Trigger>\n\t\t\t\t\t<Select.Content>\n\t\t\t\t\t\t{#each roles as role (role.value)}\n\t\t\t\t\t\t\t<Select.Item value={role.value}>{role.label}</Select.Item>\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</Select.Content>\n\t\t\t\t</Select.Root>\n\t\t\t</div>\n\t\t\t<div class=\"flex items-center gap-2\">\n\t\t\t\t<InputGroup.Root class=\"flex-1\">\n\t\t\t\t\t<InputGroup.Input value=\"sam@example.com\" readonly />\n\t\t\t\t</InputGroup.Root>\n\t\t\t\t<Select.Root type=\"single\" bind:value={role2}>\n\t\t\t\t\t<Select.Trigger class=\"w-24\">\n\t\t\t\t\t\t{roles.find((role) => role.value === role2)?.label}\n\t\t\t\t\t</Select.Trigger>\n\t\t\t\t\t<Select.Content>\n\t\t\t\t\t\t{#each roles as role (role.value)}\n\t\t\t\t\t\t\t<Select.Item value={role.value}>{role.label}</Select.Item>\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</Select.Content>\n\t\t\t\t</Select.Root>\n\t\t\t</div>\n\t\t</div>\n\t\t<Button variant=\"outline\">\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"PlusIcon\"\n\t\t\t\ttabler=\"IconPlus\"\n\t\t\t\thugeicons=\"PlusSignIcon\"\n\t\t\t\tphosphor=\"PlusIcon\"\n\t\t\t\tremixicon=\"RiAddLine\"\n\t\t\t\tdata-icon=\"inline-start\"\n\t\t\t/>\n\t\t\tAdd another\n\t\t</Button>\n\t\t<Separator />\n\t\t<Field.Field>\n\t\t\t<Field.Label for=\"invite-link\">Or share invite link</Field.Label>\n\t\t\t<InputGroup.Root>\n\t\t\t\t<InputGroup.Input id=\"invite-link\" value=\"https://app.co/invite/x8f2k\" readonly />\n\t\t\t\t<InputGroup.Addon align=\"inline-end\">\n\t\t\t\t\t<InputGroup.Button size=\"icon-xs\" aria-label=\"Copy link\">\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"CopyIcon\"\n\t\t\t\t\t\t\ttabler=\"IconCopy\"\n\t\t\t\t\t\t\thugeicons=\"Copy01Icon\"\n\t\t\t\t\t\t\tphosphor=\"CopyIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiFileCopyLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</InputGroup.Button>\n\t\t\t\t</InputGroup.Addon>\n\t\t\t</InputGroup.Root>\n\t\t</Field.Field>\n\t</Card.Content>\n\t<Card.Footer>\n\t\t<Button class=\"w-full\">Send Invites</Button>\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/preview/cards/invoice.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport { Badge } from \"$lib/registry/ui/badge/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Table from \"$lib/registry/ui/table/index.js\";\n\n\tconst INVOICE_ITEMS = [\n\t\t{ item: \"Design System License\", qty: 1, unitPrice: 499 },\n\t\t{ item: \"Priority Support\", qty: 12, unitPrice: 99 },\n\t\t{ item: \"Custom Components\", qty: 3, unitPrice: 250 },\n\t];\n\n\tconst subtotal = INVOICE_ITEMS.reduce((sum, row) => sum + row.qty * row.unitPrice, 0);\n\tconst tax = 0;\n\tconst totalDue = subtotal + tax;\n\n\tfunction formatCurrency(value: number) {\n\t\treturn new Intl.NumberFormat(\"en-US\", {\n\t\t\tstyle: \"currency\",\n\t\t\tcurrency: \"USD\",\n\t\t\tmaximumFractionDigits: 2,\n\t\t}).format(value);\n\t}\n</script>\n\n<Card.Root>\n\t<Card.Header>\n\t\t<Card.Title>Invoice #INV-2847</Card.Title>\n\t\t<Card.Description>Due March 30, 2026</Card.Description>\n\t\t<Card.Action>\n\t\t\t<Badge variant=\"secondary\">Pending</Badge>\n\t\t</Card.Action>\n\t</Card.Header>\n\t<Card.Content>\n\t\t<Table.Root>\n\t\t\t<Table.Header>\n\t\t\t\t<Table.Row>\n\t\t\t\t\t<Table.Head>Item</Table.Head>\n\t\t\t\t\t<Table.Head class=\"text-right\">Qty</Table.Head>\n\t\t\t\t\t<Table.Head class=\"text-right\">Rate</Table.Head>\n\t\t\t\t\t<Table.Head class=\"text-right\">Amount</Table.Head>\n\t\t\t\t</Table.Row>\n\t\t\t</Table.Header>\n\t\t\t<Table.Body>\n\t\t\t\t{#each INVOICE_ITEMS as row, index (index)}\n\t\t\t\t\t<Table.Row>\n\t\t\t\t\t\t<Table.Cell class=\"text-sm\">{row.item}</Table.Cell>\n\t\t\t\t\t\t<Table.Cell class=\"text-right tabular-nums\">{row.qty}</Table.Cell>\n\t\t\t\t\t\t<Table.Cell class=\"text-right tabular-nums\">\n\t\t\t\t\t\t\t{formatCurrency(row.unitPrice)}\n\t\t\t\t\t\t</Table.Cell>\n\t\t\t\t\t\t<Table.Cell class=\"text-right tabular-nums\">\n\t\t\t\t\t\t\t{formatCurrency(row.qty * row.unitPrice)}\n\t\t\t\t\t\t</Table.Cell>\n\t\t\t\t\t</Table.Row>\n\t\t\t\t{/each}\n\t\t\t\t<Table.Row>\n\t\t\t\t\t<Table.Cell colspan={3} class=\"text-right\">Subtotal</Table.Cell>\n\t\t\t\t\t<Table.Cell class=\"text-right tabular-nums\">\n\t\t\t\t\t\t{formatCurrency(subtotal)}\n\t\t\t\t\t</Table.Cell>\n\t\t\t\t</Table.Row>\n\t\t\t\t<Table.Row>\n\t\t\t\t\t<Table.Cell colspan={3} class=\"text-right\">Tax</Table.Cell>\n\t\t\t\t\t<Table.Cell class=\"text-right tabular-nums\">$0.00</Table.Cell>\n\t\t\t\t</Table.Row>\n\t\t\t\t<Table.Row>\n\t\t\t\t\t<Table.Cell colspan={3} class=\"text-right\">Total Due</Table.Cell>\n\t\t\t\t\t<Table.Cell class=\"text-right tabular-nums\">\n\t\t\t\t\t\t{formatCurrency(totalDue)}\n\t\t\t\t\t</Table.Cell>\n\t\t\t\t</Table.Row>\n\t\t\t</Table.Body>\n\t\t</Table.Root>\n\t</Card.Content>\n\t<Card.Footer>\n\t\t<Button variant=\"outline\" size=\"sm\">Download PDF</Button>\n\t\t<Button size=\"sm\" class=\"ml-auto\">Pay Now</Button>\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/preview/cards/live-waveform.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport LiveWaveform from \"../../elevenlabs/live-waveform.svelte\";\n\n\tlet active = $state(false);\n\tlet processing = $state(true);\n\tlet mode = $state<\"static\" | \"scrolling\">(\"static\");\n\n\tfunction handleToggleActive() {\n\t\tactive = !active;\n\t\tif (active) {\n\t\t\tprocessing = false;\n\t\t}\n\t}\n\n\tfunction handleToggleProcessing() {\n\t\tprocessing = !processing;\n\t\tif (processing) {\n\t\t\tactive = false;\n\t\t}\n\t}\n</script>\n\n<Card.Root>\n\t<Card.Header>\n\t\t<Card.Title>Live Audio Waveform</Card.Title>\n\t\t<Card.Description>\n\t\t\tReal-time microphone input visualization with audio reactivity\n\t\t</Card.Description>\n\t</Card.Header>\n\t<Card.Content>\n\t\t<LiveWaveform\n\t\t\t{active}\n\t\t\t{processing}\n\t\t\theight={80}\n\t\t\tbarWidth={3}\n\t\t\tbarGap={2}\n\t\t\t{mode}\n\t\t\tfadeEdges={true}\n\t\t\tbarColor=\"gray\"\n\t\t\thistorySize={120}\n\t\t/>\n\t</Card.Content>\n\t<Card.Footer class=\"gap-2\">\n\t\t<Button size=\"sm\" variant={active ? \"default\" : \"outline\"} onclick={handleToggleActive}>\n\t\t\t{active ? \"Stop\" : \"Start\"} Listening\n\t\t</Button>\n\t\t<Button\n\t\t\tsize=\"sm\"\n\t\t\tvariant={processing ? \"default\" : \"outline\"}\n\t\t\tonclick={handleToggleProcessing}\n\t\t>\n\t\t\t{processing ? \"Stop\" : \"Start\"} Processing\n\t\t</Button>\n\t\t<Button\n\t\t\tsize=\"sm\"\n\t\t\tvariant=\"outline\"\n\t\t\tonclick={() => (mode = mode === \"static\" ? \"scrolling\" : \"static\")}\n\t\t>\n\t\t\t{mode === \"static\" ? \"Static\" : \"Scrolling\"}\n\t\t</Button>\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/preview/cards/no-team-members.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Avatar from \"$lib/registry/ui/avatar/index.js\";\n\timport * as Empty from \"$lib/registry/ui/empty/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n</script>\n\n<Card.Root>\n\t<Card.Content>\n\t\t<Empty.Root class=\"h-56 border\">\n\t\t\t<Empty.Header>\n\t\t\t\t<Empty.Media>\n\t\t\t\t\t<Avatar.Group class=\"grayscale\">\n\t\t\t\t\t\t<Avatar.Root size=\"lg\">\n\t\t\t\t\t\t\t<Avatar.Image src=\"https://github.com/shadcn.png\" alt=\"@shadcn\" />\n\t\t\t\t\t\t\t<Avatar.Fallback>CN</Avatar.Fallback>\n\t\t\t\t\t\t</Avatar.Root>\n\t\t\t\t\t\t<Avatar.Root size=\"lg\">\n\t\t\t\t\t\t\t<Avatar.Image src=\"https://github.com/maxleiter.png\" alt=\"@maxleiter\" />\n\t\t\t\t\t\t\t<Avatar.Fallback>LR</Avatar.Fallback>\n\t\t\t\t\t\t</Avatar.Root>\n\t\t\t\t\t\t<Avatar.Root size=\"lg\">\n\t\t\t\t\t\t\t<Avatar.Image\n\t\t\t\t\t\t\t\tsrc=\"https://github.com/evilrabbit.png\"\n\t\t\t\t\t\t\t\talt=\"@evilrabbit\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<Avatar.Fallback>ER</Avatar.Fallback>\n\t\t\t\t\t\t</Avatar.Root>\n\t\t\t\t\t</Avatar.Group>\n\t\t\t\t</Empty.Media>\n\t\t\t\t<Empty.Title>No Team Members</Empty.Title>\n\t\t\t\t<Empty.Description>\n\t\t\t\t\tInvite your team to collaborate on this project.\n\t\t\t\t</Empty.Description>\n\t\t\t</Empty.Header>\n\t\t\t<Empty.Content>\n\t\t\t\t<Button size=\"sm\">Invite Members</Button>\n\t\t\t</Empty.Content>\n\t\t</Empty.Root>\n\t</Card.Content>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/preview/cards/not-found.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Empty from \"$lib/registry/ui/empty/index.js\";\n\timport * as InputGroup from \"$lib/registry/ui/input-group/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport { Kbd } from \"$lib/registry/ui/kbd/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Card.Root>\n\t<Card.Content>\n\t\t<Empty.Root class=\"h-72\">\n\t\t\t<Empty.Header>\n\t\t\t\t<Empty.Title>404 - Not Found</Empty.Title>\n\t\t\t\t<Empty.Description>\n\t\t\t\t\tThe page you're looking for doesn't exist. Try searching for what you need\n\t\t\t\t\tbelow.\n\t\t\t\t</Empty.Description>\n\t\t\t</Empty.Header>\n\t\t\t<Empty.Content>\n\t\t\t\t<InputGroup.Root class=\"w-3/4\">\n\t\t\t\t\t<InputGroup.Input placeholder=\"Try searching for pages...\" />\n\t\t\t\t\t<InputGroup.Addon>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"SearchIcon\"\n\t\t\t\t\t\t\ttabler=\"IconSearch\"\n\t\t\t\t\t\t\thugeicons=\"Search01Icon\"\n\t\t\t\t\t\t\tphosphor=\"MagnifyingGlassIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiSearchLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</InputGroup.Addon>\n\t\t\t\t\t<InputGroup.Addon align=\"inline-end\">\n\t\t\t\t\t\t<Kbd>/</Kbd>\n\t\t\t\t\t</InputGroup.Addon>\n\t\t\t\t</InputGroup.Root>\n\t\t\t\t<Button variant=\"link\">Go to homepage</Button>\n\t\t\t</Empty.Content>\n\t\t</Empty.Root>\n\t</Card.Content>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/preview/cards/observability-card.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport { Badge } from \"$lib/registry/ui/badge/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Card.Root class=\"relative w-full max-w-md overflow-hidden pt-0\">\n\t<div class=\"bg-primary absolute inset-0 z-30 aspect-video opacity-50 mix-blend-color\"></div>\n\t<img\n\t\tsrc=\"https://images.unsplash.com/photo-1604076850742-4c7221f3101b?q=80&w=1887&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D\"\n\t\talt=\"\"\n\t\ttitle=\"Photo by mymind on Unsplash\"\n\t\tclass=\"relative z-20 aspect-video w-full object-cover brightness-60 grayscale\"\n\t/>\n\t<Card.Header>\n\t\t<Card.Title>Observability Plus is replacing Monitoring</Card.Title>\n\t\t<Card.Description>\n\t\t\tSwitch to the improved way to explore your data, with natural language. Monitoring will\n\t\t\tno longer be available on the Pro plan in November, 2025\n\t\t</Card.Description>\n\t</Card.Header>\n\t<Card.Footer>\n\t\t<Button>\n\t\t\tCreate Query\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"PlusIcon\"\n\t\t\t\ttabler=\"IconPlus\"\n\t\t\t\thugeicons=\"PlusSignIcon\"\n\t\t\t\tphosphor=\"PlusIcon\"\n\t\t\t\tremixicon=\"RiAddLine\"\n\t\t\t\tdata-icon=\"inline-end\"\n\t\t\t/>\n\t\t</Button>\n\t\t<Badge variant=\"secondary\" class=\"ml-auto\">Warning</Badge>\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/preview/cards/pie-chart-card.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport { Progress } from \"$lib/registry/ui/progress/index.js\";\n\timport { Badge } from \"$lib/registry/ui/badge/index.js\";\n\timport { PieChart, Text } from \"layerchart\";\n\n\tconst pieChartData = [\n\t\t{ browser: \"Chrome\", visitors: 275, color: \"var(--color-Chrome)\" },\n\t\t{ browser: \"Safari\", visitors: 200, color: \"var(--color-Safari)\" },\n\t\t{ browser: \"Firefox\", visitors: 287, color: \"var(--color-Firefox)\" },\n\t\t{ browser: \"Edge\", visitors: 173, color: \"var(--color-Edge)\" },\n\t\t{ browser: \"Other\", visitors: 190, color: \"var(--color-Other)\" },\n\t];\n\n\tconst pieChartConfig = {\n\t\tVisitors: { label: \"Visitors\" },\n\t\tChrome: { label: \"Chrome\", color: \"var(--chart-1)\" },\n\t\tSafari: { label: \"Safari\", color: \"var(--chart-2)\" },\n\t\tFirefox: { label: \"Firefox\", color: \"var(--chart-3)\" },\n\t\tEdge: { label: \"Edge\", color: \"var(--chart-4)\" },\n\t\tOther: { label: \"Other\", color: \"var(--chart-5)\" },\n\t} satisfies Chart.ChartConfig;\n\n\tconst totalVisitors = $derived(pieChartData.reduce((sum, item) => sum + item.visitors, 0));\n\tconst topBrowser = $derived(\n\t\tpieChartData.reduce((max, item) => (item.visitors > max.visitors ? item : max))\n\t);\n\tconst topBrowserShare = $derived(Math.round((topBrowser.visitors / totalVisitors) * 100));\n\tconst topBrowserLabel = $derived(\n\t\tpieChartConfig[topBrowser.browser as keyof typeof pieChartConfig]?.label ?? \"Top\"\n\t);\n</script>\n\n<Card.Root>\n\t<Card.Header class=\"pb-0\">\n\t\t<Card.Title>Browser Share</Card.Title>\n\t\t<Card.Description>January - June 2026</Card.Description>\n\t\t<Card.Action>\n\t\t\t<Badge variant=\"outline\">{topBrowserLabel}</Badge>\n\t\t</Card.Action>\n\t</Card.Header>\n\t<Card.Content class=\"pt-0\">\n\t\t<Chart.Container config={pieChartConfig} class=\"mx-auto aspect-square max-h-[190px]\">\n\t\t\t<PieChart\n\t\t\t\tdata={pieChartData}\n\t\t\t\tkey=\"browser\"\n\t\t\t\tvalue=\"visitors\"\n\t\t\t\tc=\"color\"\n\t\t\t\tinnerRadius={50}\n\t\t\t\tpadding={28}\n\t\t\t\tlegend\n\t\t\t\tprops={{ pie: { motion: \"tween\" } }}\n\t\t\t>\n\t\t\t\t{#snippet aboveMarks()}\n\t\t\t\t\t<Text\n\t\t\t\t\t\tvalue={totalVisitors.toLocaleString()}\n\t\t\t\t\t\ttextAnchor=\"middle\"\n\t\t\t\t\t\tverticalAnchor=\"middle\"\n\t\t\t\t\t\tclass=\"fill-foreground text-2xl font-bold\"\n\t\t\t\t\t\tdy={3}\n\t\t\t\t\t/>\n\t\t\t\t\t<Text\n\t\t\t\t\t\tvalue=\"Visitors\"\n\t\t\t\t\t\ttextAnchor=\"middle\"\n\t\t\t\t\t\tverticalAnchor=\"middle\"\n\t\t\t\t\t\tclass=\"fill-muted-foreground text-xs\"\n\t\t\t\t\t\tdy={22}\n\t\t\t\t\t/>\n\t\t\t\t{/snippet}\n\t\t\t\t{#snippet tooltip()}\n\t\t\t\t\t<Chart.Tooltip hideLabel />\n\t\t\t\t{/snippet}\n\t\t\t</PieChart>\n\t\t</Chart.Container>\n\t</Card.Content>\n\t<Card.Footer class=\"flex-col items-stretch gap-2\">\n\t\t<div class=\"flex items-center text-xs\">\n\t\t\t<span class=\"font-medium\">{topBrowserLabel}</span>\n\t\t\t<span class=\"text-muted-foreground ml-auto tabular-nums\">\n\t\t\t\t{topBrowserShare}%\n\t\t\t</span>\n\t\t</div>\n\t\t<Progress value={topBrowserShare} class=\"**:data-[slot=progress-indicator]:bg-chart-3\" />\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/preview/cards/report-bug.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport { Input } from \"$lib/registry/ui/input/index.js\";\n\timport * as Select from \"$lib/registry/ui/select/index.js\";\n\timport { Textarea } from \"$lib/registry/ui/textarea/index.js\";\n\n\tconst severities = [\n\t\t{ value: \"critical\", label: \"Critical\" },\n\t\t{ value: \"high\", label: \"High\" },\n\t\t{ value: \"medium\", label: \"Medium\" },\n\t\t{ value: \"low\", label: \"Low\" },\n\t];\n\n\tconst components = [\n\t\t{ value: \"dashboard\", label: \"Dashboard\" },\n\t\t{ value: \"auth\", label: \"Auth\" },\n\t\t{ value: \"api\", label: \"API\" },\n\t\t{ value: \"billing\", label: \"Billing\" },\n\t];\n\n\tlet severity = $state(severities[2].value);\n\tlet component = $state(components[0].value);\n</script>\n\n<Card.Root>\n\t<Card.Header>\n\t\t<Card.Title>Report Bug</Card.Title>\n\t\t<Card.Description>Help us fix issues faster.</Card.Description>\n\t</Card.Header>\n\t<Card.Content>\n\t\t<Field.Group>\n\t\t\t<Field.Field>\n\t\t\t\t<Field.Label for=\"bug-title\">Title</Field.Label>\n\t\t\t\t<Input id=\"bug-title\" placeholder=\"Brief description of the issue\" />\n\t\t\t</Field.Field>\n\t\t\t<div class=\"grid grid-cols-2 gap-3\">\n\t\t\t\t<Field.Field>\n\t\t\t\t\t<Field.Label for=\"bug-severity\">Severity</Field.Label>\n\t\t\t\t\t<Select.Root type=\"single\" bind:value={severity}>\n\t\t\t\t\t\t<Select.Trigger id=\"bug-severity\" class=\"w-full\">\n\t\t\t\t\t\t\t{severities.find((s) => s.value === severity)?.label ??\n\t\t\t\t\t\t\t\t\"Select Severity\"}\n\t\t\t\t\t\t</Select.Trigger>\n\t\t\t\t\t\t<Select.Content>\n\t\t\t\t\t\t\t{#each severities as severity (severity.value)}\n\t\t\t\t\t\t\t\t<Select.Item value={severity.value}>{severity.label}</Select.Item>\n\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t</Select.Content>\n\t\t\t\t\t</Select.Root>\n\t\t\t\t</Field.Field>\n\t\t\t\t<Field.Field>\n\t\t\t\t\t<Field.Label for=\"bug-component\">Component</Field.Label>\n\t\t\t\t\t<Select.Root type=\"single\" bind:value={component}>\n\t\t\t\t\t\t<Select.Trigger id=\"bug-component\" class=\"w-full\">\n\t\t\t\t\t\t\t{components.find((c) => c.value === component)?.label ??\n\t\t\t\t\t\t\t\t\"Select Component\"}\n\t\t\t\t\t\t</Select.Trigger>\n\t\t\t\t\t\t<Select.Content>\n\t\t\t\t\t\t\t{#each components as component (component.value)}\n\t\t\t\t\t\t\t\t<Select.Item value={component.value}>{component.label}</Select.Item>\n\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t</Select.Content>\n\t\t\t\t\t</Select.Root>\n\t\t\t\t</Field.Field>\n\t\t\t</div>\n\t\t\t<Field.Field>\n\t\t\t\t<Field.Label for=\"bug-steps\">Steps to reproduce</Field.Label>\n\t\t\t\t<Textarea\n\t\t\t\t\tid=\"bug-steps\"\n\t\t\t\t\tplaceholder=\"1. Go to&#10;2. Click on&#10;3. Observe...\"\n\t\t\t\t\tclass=\"min-h-24 resize-none\"\n\t\t\t\t/>\n\t\t\t</Field.Field>\n\t\t</Field.Group>\n\t</Card.Content>\n\t<Card.Footer>\n\t\t<Field.Field orientation=\"horizontal\" class=\"justify-end\">\n\t\t\t<Button variant=\"outline\">Attach File</Button>\n\t\t\t<Button>Submit Bug</Button>\n\t\t</Field.Field>\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/preview/cards/shipping-address.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport { Checkbox } from \"$lib/registry/ui/checkbox/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport { Input } from \"$lib/registry/ui/input/index.js\";\n\timport * as Select from \"$lib/registry/ui/select/index.js\";\n\n\tconst states = [\n\t\t{ value: \"CA\", label: \"California\" },\n\t\t{ value: \"NY\", label: \"New York\" },\n\t\t{ value: \"TX\", label: \"Texas\" },\n\t];\n\n\tconst countries = [\n\t\t{ value: \"US\", label: \"United States\" },\n\t\t{ value: \"CA\", label: \"Canada\" },\n\t\t{ value: \"UK\", label: \"United Kingdom\" },\n\t];\n\n\tlet selectedState = $state(states[0].value);\n\tlet selectedCountry = $state(countries[0].value);\n\tlet saveDefault = $state(true);\n</script>\n\n<Card.Root>\n\t<Card.Header>\n\t\t<Card.Title>Shipping Address</Card.Title>\n\t\t<Card.Description>Where should we deliver?</Card.Description>\n\t</Card.Header>\n\t<Card.Content>\n\t\t<Field.Group>\n\t\t\t<Field.Field>\n\t\t\t\t<Field.Label for=\"shipping-street\">Street address</Field.Label>\n\t\t\t\t<Input id=\"shipping-street\" placeholder=\"123 Main Street\" />\n\t\t\t</Field.Field>\n\t\t\t<Field.Field>\n\t\t\t\t<Field.Label for=\"shipping-apt\">Apt / Suite</Field.Label>\n\t\t\t\t<Input id=\"shipping-apt\" placeholder=\"Apt 4B\" />\n\t\t\t</Field.Field>\n\t\t\t<Field.Group class=\"grid grid-cols-2\">\n\t\t\t\t<Field.Field>\n\t\t\t\t\t<Field.Label for=\"shipping-city\">City</Field.Label>\n\t\t\t\t\t<Input id=\"shipping-city\" placeholder=\"San Francisco\" />\n\t\t\t\t</Field.Field>\n\t\t\t\t<Field.Field>\n\t\t\t\t\t<Field.Label for=\"shipping-state\">State</Field.Label>\n\t\t\t\t\t<Select.Root type=\"single\" bind:value={selectedState}>\n\t\t\t\t\t\t<Select.Trigger id=\"shipping-state\" class=\"w-full\">\n\t\t\t\t\t\t\t{states.find((s) => s.value === selectedState)?.label ?? \"Select State\"}\n\t\t\t\t\t\t</Select.Trigger>\n\t\t\t\t\t\t<Select.Content>\n\t\t\t\t\t\t\t{#each states as state (state.value)}\n\t\t\t\t\t\t\t\t<Select.Item value={state.value}>{state.label}</Select.Item>\n\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t</Select.Content>\n\t\t\t\t\t</Select.Root>\n\t\t\t\t</Field.Field>\n\t\t\t</Field.Group>\n\t\t\t<Field.Group class=\"grid grid-cols-2\">\n\t\t\t\t<Field.Field>\n\t\t\t\t\t<Field.Label for=\"shipping-zip\">ZIP Code</Field.Label>\n\t\t\t\t\t<Input id=\"shipping-zip\" placeholder=\"94102\" />\n\t\t\t\t</Field.Field>\n\t\t\t\t<Field.Field>\n\t\t\t\t\t<Field.Label for=\"shipping-country\">Country</Field.Label>\n\t\t\t\t\t<Select.Root type=\"single\" bind:value={selectedCountry}>\n\t\t\t\t\t\t<Select.Trigger id=\"shipping-country\" class=\"w-full\">\n\t\t\t\t\t\t\t{countries.find((c) => c.value === selectedCountry)?.label ??\n\t\t\t\t\t\t\t\t\"Select Country\"}\n\t\t\t\t\t\t</Select.Trigger>\n\t\t\t\t\t\t<Select.Content>\n\t\t\t\t\t\t\t{#each countries as country (country.value)}\n\t\t\t\t\t\t\t\t<Select.Item value={country.value}>{country.label}</Select.Item>\n\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t</Select.Content>\n\t\t\t\t\t</Select.Root>\n\t\t\t\t</Field.Field>\n\t\t\t</Field.Group>\n\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t<Checkbox id=\"shipping-save\" bind:checked={saveDefault} />\n\t\t\t\t<Field.Label for=\"shipping-save\" class=\"font-normal\">\n\t\t\t\t\tSave as default address\n\t\t\t\t</Field.Label>\n\t\t\t</Field.Field>\n\t\t</Field.Group>\n\t</Card.Content>\n\t<Card.Footer>\n\t\t<Button variant=\"outline\" size=\"sm\">Cancel</Button>\n\t\t<Button size=\"sm\" class=\"ml-auto\">Save Address</Button>\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/preview/cards/shortcuts.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport { Kbd } from \"$lib/registry/ui/kbd/index.js\";\n\timport { Separator } from \"$lib/registry/ui/separator/index.js\";\n</script>\n\n<Card.Root>\n\t<Card.Content>\n\t\t<div class=\"flex flex-col gap-3\">\n\t\t\t<div class=\"text-sm font-medium\">Shortcuts</div>\n\t\t\t<div class=\"flex flex-col gap-2\">\n\t\t\t\t<div class=\"text-muted-foreground flex items-center justify-between text-sm\">\n\t\t\t\t\t<span>Search</span>\n\t\t\t\t\t<div class=\"flex gap-1\">\n\t\t\t\t\t\t<Kbd>⌘</Kbd>\n\t\t\t\t\t\t<Kbd>K</Kbd>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<Separator />\n\t\t\t\t<div class=\"text-muted-foreground flex items-center justify-between text-sm\">\n\t\t\t\t\t<span>Quick Actions</span>\n\t\t\t\t\t<div class=\"flex gap-1\">\n\t\t\t\t\t\t<Kbd>⌘</Kbd>\n\t\t\t\t\t\t<Kbd>J</Kbd>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<Separator />\n\t\t\t\t<div class=\"text-muted-foreground flex items-center justify-between text-sm\">\n\t\t\t\t\t<span>New File</span>\n\t\t\t\t\t<div class=\"flex gap-1\">\n\t\t\t\t\t\t<Kbd>⌘</Kbd>\n\t\t\t\t\t\t<Kbd>N</Kbd>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<Separator />\n\t\t\t\t<div class=\"text-muted-foreground flex items-center justify-between text-sm\">\n\t\t\t\t\t<span>Save</span>\n\t\t\t\t\t<div class=\"flex gap-1\">\n\t\t\t\t\t\t<Kbd>⌘</Kbd>\n\t\t\t\t\t\t<Kbd>S</Kbd>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<Separator />\n\t\t\t\t<div class=\"text-muted-foreground flex items-center justify-between text-sm\">\n\t\t\t\t\t<span>Toggle Sidebar</span>\n\t\t\t\t\t<div class=\"flex gap-1\">\n\t\t\t\t\t\t<Kbd>⌘</Kbd>\n\t\t\t\t\t\t<Kbd>B</Kbd>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</Card.Content>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/preview/cards/skeleton-loading.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport { Skeleton } from \"$lib/registry/ui/skeleton/index.js\";\n</script>\n\n<Card.Root>\n\t<Card.Content class=\"flex flex-col gap-4\">\n\t\t<div class=\"flex items-center gap-3\">\n\t\t\t<Skeleton class=\"size-10 rounded-full\" />\n\t\t\t<div class=\"flex flex-1 flex-col gap-2\">\n\t\t\t\t<Skeleton class=\"h-4 w-3/4\" />\n\t\t\t\t<Skeleton class=\"h-3 w-1/2\" />\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"flex flex-col gap-2\">\n\t\t\t<Skeleton class=\"h-3 w-full\" />\n\t\t\t<Skeleton class=\"h-3 w-full\" />\n\t\t\t<Skeleton class=\"h-3 w-4/5\" />\n\t\t</div>\n\t\t<div class=\"flex gap-2\">\n\t\t\t<Skeleton class=\"h-8 w-20\" />\n\t\t\t<Skeleton class=\"h-8 w-20\" />\n\t\t</div>\n\t</Card.Content>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/preview/cards/sleep-report.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport { Badge } from \"$lib/registry/ui/badge/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport { scaleBand } from \"d3-scale\";\n\timport { BarChart } from \"layerchart\";\n\n\tconst sleepChartData = [\n\t\t{ hour: \"10pm\", deep: 0, light: 30, rem: 0 },\n\t\t{ hour: \"11pm\", deep: 20, light: 10, rem: 0 },\n\t\t{ hour: \"12am\", deep: 40, light: 0, rem: 10 },\n\t\t{ hour: \"1am\", deep: 30, light: 5, rem: 15 },\n\t\t{ hour: \"2am\", deep: 10, light: 20, rem: 30 },\n\t\t{ hour: \"3am\", deep: 25, light: 10, rem: 20 },\n\t\t{ hour: \"4am\", deep: 15, light: 25, rem: 10 },\n\t\t{ hour: \"5am\", deep: 5, light: 35, rem: 15 },\n\t\t{ hour: \"6am\", deep: 0, light: 20, rem: 25 },\n\t];\n\n\tconst sleepChartConfig = {\n\t\tdeep: {\n\t\t\tlabel: \"Deep\",\n\t\t\tcolor: \"var(--chart-1)\",\n\t\t},\n\t\tlight: {\n\t\t\tlabel: \"Light\",\n\t\t\tcolor: \"var(--chart-2)\",\n\t\t},\n\t\trem: {\n\t\t\tlabel: \"REM\",\n\t\t\tcolor: \"var(--chart-3)\",\n\t\t},\n\t} satisfies Chart.ChartConfig;\n\n\tconst stats = [\n\t\t{ label: \"Deep\", value: \"2h 10m\" },\n\t\t{ label: \"Light\", value: \"3h 48m\" },\n\t\t{ label: \"REM\", value: \"1h 26m\" },\n\t\t{ label: \"Score\", value: \"84\" },\n\t];\n</script>\n\n<Card.Root>\n\t<Card.Header>\n\t\t<Card.Title>Sleep Report</Card.Title>\n\t\t<Card.Description>Last night · 7h 24m</Card.Description>\n\t</Card.Header>\n\t<Card.Content class=\"flex flex-col gap-3\">\n\t\t<Chart.Container config={sleepChartConfig} class=\"h-32 w-full\">\n\t\t\t<BarChart\n\t\t\t\tdata={sleepChartData}\n\t\t\t\txScale={scaleBand().padding(0.4)}\n\t\t\t\tx=\"hour\"\n\t\t\t\trule={false}\n\t\t\t\tseries={[\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"deep\",\n\t\t\t\t\t\tlabel: \"Deep\",\n\t\t\t\t\t\tcolor: sleepChartConfig.deep.color,\n\t\t\t\t\t\tprops: { rounded: \"none\" },\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"light\",\n\t\t\t\t\t\tlabel: \"Light\",\n\t\t\t\t\t\tcolor: sleepChartConfig.light.color,\n\t\t\t\t\t\tprops: { rounded: \"none\" },\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"rem\",\n\t\t\t\t\t\tlabel: \"REM\",\n\t\t\t\t\t\tcolor: sleepChartConfig.rem.color,\n\t\t\t\t\t\tprops: { rounded: \"top\" },\n\t\t\t\t\t},\n\t\t\t\t]}\n\t\t\t\tseriesLayout=\"stack\"\n\t\t\t\tprops={{\n\t\t\t\t\tbars: { stroke: \"none\" },\n\t\t\t\t}}\n\t\t\t\taxis={false}\n\t\t\t\ttooltip={false}\n\t\t\t/>\n\t\t</Chart.Container>\n\t\t<div class=\"grid grid-cols-4 gap-2\">\n\t\t\t{#each stats as { label, value } (label)}\n\t\t\t\t<div class=\"text-center\">\n\t\t\t\t\t<div class=\"text-sm font-medium tabular-nums\">{value}</div>\n\t\t\t\t\t<div class=\"text-muted-foreground text-xs\">{label}</div>\n\t\t\t\t</div>\n\t\t\t{/each}\n\t\t</div>\n\t</Card.Content>\n\t<Card.Footer>\n\t\t<Badge variant=\"outline\">Good</Badge>\n\t\t<Button variant=\"outline\" size=\"sm\" class=\"ml-auto\">Details</Button>\n\t</Card.Footer>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/preview/cards/style-overview.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport { useDesignSystem } from \"$lib/features/design-system/index.js\";\n\timport { getFont, getStyle } from \"$lib/registry/config.js\";\n\n\tconst designSystem = useDesignSystem();\n\tconst currentFont = $derived(getFont(designSystem.font));\n\tconst currentStyle = $derived(getStyle(designSystem.style));\n\n\tconst colorVariants = [\n\t\t\"--background\",\n\t\t\"--foreground\",\n\t\t\"--primary\",\n\t\t\"--secondary\",\n\t\t\"--muted\",\n\t\t\"--accent\",\n\t\t\"--destructive\",\n\t\t\"--chart-1\",\n\t\t\"--chart-2\",\n\t\t\"--chart-3\",\n\t\t\"--chart-4\",\n\t\t\"--chart-5\",\n\t];\n</script>\n\n<Card.Root>\n\t<Card.Content class=\"flex flex-col gap-6\">\n\t\t<div class=\"flex flex-col gap-1\">\n\t\t\t<div class=\"text-2xl font-medium\">\n\t\t\t\t{currentStyle?.title ?? \"Vega\"} - {currentFont?.title ?? \"Inter\"}\n\t\t\t</div>\n\t\t\t<div class=\"text-muted-foreground line-clamp-2 text-base\">\n\t\t\t\tDesigners love packing quirky glyphs into test phrases. This is a preview of the\n\t\t\t\ttypography styles.\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"grid grid-cols-6 gap-3\">\n\t\t\t{#each colorVariants as variant (variant)}\n\t\t\t\t<div\n\t\t\t\t\tclass=\"flex flex-col flex-wrap items-center gap-2\"\n\t\t\t\t\tstyle=\"--color: var({variant})\"\n\t\t\t\t>\n\t\t\t\t\t<div\n\t\t\t\t\t\tclass=\"after:border-border relative aspect-square w-full rounded-lg bg-(--color) after:absolute after:inset-0 after:rounded-lg after:border after:mix-blend-darken dark:after:mix-blend-lighten\"\n\t\t\t\t\t></div>\n\t\t\t\t\t<div class=\"hidden max-w-14 truncate font-mono text-[0.60rem] md:block\">\n\t\t\t\t\t\t{variant}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t{/each}\n\t\t</div>\n\t</Card.Content>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/preview/cards/ui-elements.svelte",
    "content": "<script lang=\"ts\">\n\timport * as AlertDialog from \"$lib/registry/ui/alert-dialog/index.js\";\n\timport { Badge } from \"$lib/registry/ui/badge/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as ButtonGroup from \"$lib/registry/ui/button-group/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport { Checkbox } from \"$lib/registry/ui/checkbox/index.js\";\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport * as InputGroup from \"$lib/registry/ui/input-group/index.js\";\n\timport * as Item from \"$lib/registry/ui/item/index.js\";\n\timport * as RadioGroup from \"$lib/registry/ui/radio-group/index.js\";\n\timport { Slider } from \"$lib/registry/ui/slider/index.js\";\n\timport { Switch } from \"$lib/registry/ui/switch/index.js\";\n\timport { Textarea } from \"$lib/registry/ui/textarea/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\n\tlet sliderValue = $state(500);\n\tlet radioValue = $state(\"apple\");\n\tlet switchChecked = $state(true);\n\tlet checkbox1Checked = $state(true);\n\tlet checkbox2Checked = $state(false);\n</script>\n\n<Card.Root class=\"w-full\">\n\t<Card.Content class=\"flex flex-col gap-6\">\n\t\t<div class=\"flex flex-col gap-4\">\n\t\t\t<div class=\"flex flex-wrap gap-2\">\n\t\t\t\t<Button>Button</Button>\n\t\t\t\t<Button variant=\"secondary\">Secondary</Button>\n\t\t\t\t<Button variant=\"outline\">Outline</Button>\n\t\t\t\t<Button variant=\"destructive\">Delete</Button>\n\t\t\t</div>\n\t\t\t<Item.Root variant=\"outline\">\n\t\t\t\t<Item.Content>\n\t\t\t\t\t<Item.Title>Two-factor authentication</Item.Title>\n\t\t\t\t\t<Item.Description class=\"text-pretty xl:hidden 2xl:block\">\n\t\t\t\t\t\tVerify via email or phone number.\n\t\t\t\t\t</Item.Description>\n\t\t\t\t</Item.Content>\n\t\t\t\t<Item.Actions class=\"hidden md:flex\">\n\t\t\t\t\t<Button size=\"sm\" variant=\"secondary\">Enable</Button>\n\t\t\t\t</Item.Actions>\n\t\t\t</Item.Root>\n\t\t</div>\n\t\t<Slider\n\t\t\ttype=\"single\"\n\t\t\tbind:value={sliderValue}\n\t\t\tmax={1000}\n\t\t\tmin={0}\n\t\t\tstep={10}\n\t\t\tclass=\"flex-1\"\n\t\t\taria-label=\"Slider\"\n\t\t/>\n\t\t<Field.Group>\n\t\t\t<Field.Field>\n\t\t\t\t<InputGroup.Root>\n\t\t\t\t\t<InputGroup.Input placeholder=\"Name\" />\n\t\t\t\t\t<InputGroup.Addon align=\"inline-end\">\n\t\t\t\t\t\t<InputGroup.Text>\n\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\tlucide=\"SearchIcon\"\n\t\t\t\t\t\t\t\ttabler=\"IconSearch\"\n\t\t\t\t\t\t\t\thugeicons=\"Search01Icon\"\n\t\t\t\t\t\t\t\tphosphor=\"MagnifyingGlassIcon\"\n\t\t\t\t\t\t\t\tremixicon=\"RiSearchLine\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</InputGroup.Text>\n\t\t\t\t\t</InputGroup.Addon>\n\t\t\t\t</InputGroup.Root>\n\t\t\t</Field.Field>\n\t\t\t<Field.Field class=\"flex-1\">\n\t\t\t\t<Textarea placeholder=\"Message\" class=\"resize-none\" />\n\t\t\t</Field.Field>\n\t\t</Field.Group>\n\t\t<div class=\"flex items-center gap-2\">\n\t\t\t<div class=\"flex gap-2\">\n\t\t\t\t<Badge>Badge</Badge>\n\t\t\t\t<Badge variant=\"secondary\">Secondary</Badge>\n\t\t\t\t<Badge variant=\"outline\">Outline</Badge>\n\t\t\t</div>\n\t\t\t<RadioGroup.Root bind:value={radioValue} class=\"ml-auto flex w-fit gap-3\">\n\t\t\t\t<RadioGroup.Item value=\"apple\" />\n\t\t\t\t<RadioGroup.Item value=\"banana\" />\n\t\t\t</RadioGroup.Root>\n\t\t\t<div class=\"flex gap-3\">\n\t\t\t\t<Checkbox bind:checked={checkbox1Checked} />\n\t\t\t\t<Checkbox bind:checked={checkbox2Checked} />\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"flex items-center gap-4\">\n\t\t\t<AlertDialog.Root>\n\t\t\t\t<AlertDialog.Trigger>\n\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t<Button variant=\"outline\" {...props}>\n\t\t\t\t\t\t\t<span class=\"hidden md:block\">Alert Dialog</span>\n\t\t\t\t\t\t\t<span class=\"block md:hidden\">Dialog</span>\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t{/snippet}\n\t\t\t\t</AlertDialog.Trigger>\n\t\t\t\t<AlertDialog.Content size=\"sm\">\n\t\t\t\t\t<AlertDialog.Header>\n\t\t\t\t\t\t<AlertDialog.Title>Allow accessory to connect?</AlertDialog.Title>\n\t\t\t\t\t\t<AlertDialog.Description>\n\t\t\t\t\t\t\tDo you want to allow the USB accessory to connect to this device and\n\t\t\t\t\t\t\tyour data?\n\t\t\t\t\t\t</AlertDialog.Description>\n\t\t\t\t\t</AlertDialog.Header>\n\t\t\t\t\t<AlertDialog.Footer>\n\t\t\t\t\t\t<AlertDialog.Cancel>Don't allow</AlertDialog.Cancel>\n\t\t\t\t\t\t<AlertDialog.Action>Allow</AlertDialog.Action>\n\t\t\t\t\t</AlertDialog.Footer>\n\t\t\t\t</AlertDialog.Content>\n\t\t\t</AlertDialog.Root>\n\t\t\t<ButtonGroup.Root>\n\t\t\t\t<Button variant=\"outline\">Button Group</Button>\n\t\t\t\t<DropdownMenu.Root>\n\t\t\t\t\t<DropdownMenu.Trigger>\n\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t<Button variant=\"outline\" size=\"icon\" {...props}>\n\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\tlucide=\"ChevronUpIcon\"\n\t\t\t\t\t\t\t\t\ttabler=\"IconChevronUp\"\n\t\t\t\t\t\t\t\t\thugeicons=\"ArrowUp01Icon\"\n\t\t\t\t\t\t\t\t\tphosphor=\"CaretUpIcon\"\n\t\t\t\t\t\t\t\t\tremixicon=\"RiArrowUpSLine\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t</DropdownMenu.Trigger>\n\t\t\t\t\t<DropdownMenu.Content align=\"end\" side=\"top\" class=\"w-40\">\n\t\t\t\t\t\t<DropdownMenu.Group>\n\t\t\t\t\t\t\t<DropdownMenu.Label>Quick Actions</DropdownMenu.Label>\n\t\t\t\t\t\t\t<DropdownMenu.Item>Mute Conversation</DropdownMenu.Item>\n\t\t\t\t\t\t\t<DropdownMenu.Item>Mark as Read</DropdownMenu.Item>\n\t\t\t\t\t\t\t<DropdownMenu.Item>Block User</DropdownMenu.Item>\n\t\t\t\t\t\t</DropdownMenu.Group>\n\t\t\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t\t\t<DropdownMenu.Group>\n\t\t\t\t\t\t\t<DropdownMenu.Label>Conversation</DropdownMenu.Label>\n\t\t\t\t\t\t\t<DropdownMenu.Item>Share Conversation</DropdownMenu.Item>\n\t\t\t\t\t\t\t<DropdownMenu.Item>Copy Conversation</DropdownMenu.Item>\n\t\t\t\t\t\t\t<DropdownMenu.Item>Report Conversation</DropdownMenu.Item>\n\t\t\t\t\t\t</DropdownMenu.Group>\n\t\t\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t\t\t<DropdownMenu.Group>\n\t\t\t\t\t\t\t<DropdownMenu.Item variant=\"destructive\">\n\t\t\t\t\t\t\t\tDelete Conversation\n\t\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t</DropdownMenu.Group>\n\t\t\t\t\t</DropdownMenu.Content>\n\t\t\t\t</DropdownMenu.Root>\n\t\t\t</ButtonGroup.Root>\n\t\t\t<Switch bind:checked={switchChecked} class=\"ml-auto\" />\n\t\t</div>\n\t</Card.Content>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/preview/cards/usage-card.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Item from \"$lib/registry/ui/item/index.js\";\n\timport CircularGauge from \"../../vercel/circular-gauge.svelte\";\n\n\tconst items = [\n\t\t{ name: \"Edge Requests\", value: \"$1.83K\", percentage: 67.34 },\n\t\t{ name: \"Fast Data Transfer\", percentage: 52.18, value: \"$952.51\" },\n\t\t{ name: \"Monitoring data points\", percentage: 89.42, value: \"$901.20\" },\n\t\t{ name: \"Web Analytics Events\", percentage: 45.67, value: \"$603.71\" },\n\t\t{ name: \"ISR Writes\", percentage: 26.23, value: \"524.52K / 2M\" },\n\t\t{ name: \"Function Duration\", percentage: 5.11, value: \"5.11 GB Hrs / 1K GB Hrs\" },\n\t];\n</script>\n\n<Card.Root class=\"w-full max-w-sm gap-4\">\n\t<Card.Header>\n\t\t<Card.Title class=\"px-1 text-sm\">5 days remaining in cycle</Card.Title>\n\t</Card.Header>\n\t<Card.Content>\n\t\t<Item.Group class=\"gap-0\">\n\t\t\t{#each items as item (item.name)}\n\t\t\t\t<Item.Root size=\"xs\" class=\"px-0 group-hover/item-group:bg-transparent\">\n\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t<a href=\"#/\" {...props}>\n\t\t\t\t\t\t\t<Item.Media variant=\"icon\" class=\"text-primary\">\n\t\t\t\t\t\t\t\t<CircularGauge percentage={item.percentage} />\n\t\t\t\t\t\t\t</Item.Media>\n\t\t\t\t\t\t\t<Item.Content class=\"inline-block truncate\">\n\t\t\t\t\t\t\t\t<Item.Title class=\"inline\">{item.name}</Item.Title>\n\t\t\t\t\t\t\t</Item.Content>\n\t\t\t\t\t\t\t<Item.Actions>\n\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\tclass=\"text-muted-foreground font-mono text-xs font-medium tabular-nums\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{item.value}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</Item.Actions>\n\t\t\t\t\t\t</a>\n\t\t\t\t\t{/snippet}\n\t\t\t\t</Item.Root>\n\t\t\t{/each}\n\t\t</Item.Group>\n\t</Card.Content>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/preview/cards/visitors.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport { Badge } from \"$lib/registry/ui/badge/index.js\";\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport { AreaChart } from \"layerchart\";\n\timport { curveNatural } from \"d3-shape\";\n\timport { scaleBand } from \"d3-scale\";\n\n\tconst areaChartData = [\n\t\t{ month: \"January\", desktop: 186 },\n\t\t{ month: \"February\", desktop: 305 },\n\t\t{ month: \"March\", desktop: 237 },\n\t\t{ month: \"April\", desktop: 73 },\n\t\t{ month: \"May\", desktop: 209 },\n\t\t{ month: \"June\", desktop: 214 },\n\t];\n\n\tconst areaChartConfig = {\n\t\tdesktop: {\n\t\t\tlabel: \"Desktop\",\n\t\t\tcolor: \"var(--chart-1)\",\n\t\t},\n\t} satisfies Chart.ChartConfig;\n\n\tconst latestVisitors = areaChartData[areaChartData.length - 1]?.desktop ?? 0;\n\tconst previousVisitors = areaChartData[areaChartData.length - 2]?.desktop ?? latestVisitors;\n\tconst trendPercent =\n\t\tpreviousVisitors === 0\n\t\t\t? 0\n\t\t\t: Math.round(((latestVisitors - previousVisitors) / previousVisitors) * 100);\n\tconst trendPrefix = trendPercent > 0 ? \"+\" : \"\";\n</script>\n\n<Card.Root class=\"pb-0\">\n\t<Card.Header>\n\t\t<Card.Title>Visitors</Card.Title>\n\t\t<Card.Description>Last 6 months</Card.Description>\n\t\t<Card.Action>\n\t\t\t<Badge variant={trendPercent >= 0 ? \"secondary\" : \"destructive\"}>\n\t\t\t\t{trendPrefix}{trendPercent}% vs last month\n\t\t\t</Badge>\n\t\t</Card.Action>\n\t</Card.Header>\n\t<Card.Content class=\"px-0\">\n\t\t<Chart.Container config={areaChartConfig} class=\"h-48 w-full\">\n\t\t\t<AreaChart\n\t\t\t\tdata={areaChartData}\n\t\t\t\tx=\"month\"\n\t\t\t\txScale={scaleBand()}\n\t\t\t\taxis=\"x\"\n\t\t\t\tseries={[\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"desktop\",\n\t\t\t\t\t\tlabel: \"Desktop\",\n\t\t\t\t\t\tcolor: areaChartConfig.desktop.color,\n\t\t\t\t\t},\n\t\t\t\t]}\n\t\t\t\tprops={{\n\t\t\t\t\tarea: {\n\t\t\t\t\t\tcurve: curveNatural,\n\t\t\t\t\t\t\"fill-opacity\": 0.15,\n\t\t\t\t\t\tmotion: \"tween\",\n\t\t\t\t\t},\n\t\t\t\t\txAxis: {\n\t\t\t\t\t\tformat: (d: string) => d.slice(0, 3),\n\t\t\t\t\t\ttickLength: 0,\n\t\t\t\t\t},\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{#snippet tooltip()}\n\t\t\t\t\t<Chart.Tooltip indicator=\"line\" hideLabel />\n\t\t\t\t{/snippet}\n\t\t\t</AreaChart>\n\t\t</Chart.Container>\n\t</Card.Content>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/preview/cards/weekly-fitness-summary.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\n\tconst FITNESS_WEEKLY_LOAD = [\n\t\t{ day: \"M\", load: 84 },\n\t\t{ day: \"T\", load: 52 },\n\t\t{ day: \"W\", load: 73 },\n\t\t{ day: \"T\", load: 66 },\n\t\t{ day: \"F\", load: 91 },\n\t\t{ day: \"S\", load: 48 },\n\t\t{ day: \"S\", load: 61 },\n\t];\n</script>\n\n<Card.Root>\n\t<Card.Header>\n\t\t<Card.Title>Weekly Fitness Summary</Card.Title>\n\t\t<Card.Description>Calories and workout load by day</Card.Description>\n\t</Card.Header>\n\t<Card.Content class=\"flex flex-col gap-4\">\n\t\t<div class=\"grid grid-cols-7 gap-1.5\">\n\t\t\t{#each FITNESS_WEEKLY_LOAD as { day, load }, index (index)}\n\t\t\t\t<div class=\"ring-border rounded-md p-1.5 text-center ring\">\n\t\t\t\t\t<div class=\"text-muted-foreground text-sm\">{day}</div>\n\t\t\t\t\t<div class=\"bg-muted relative mt-1 h-16 overflow-hidden rounded-sm\">\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclass=\"bg-chart-3 absolute inset-x-0 bottom-0 rounded-sm\"\n\t\t\t\t\t\t\tstyle=\"height: {load}%\"\n\t\t\t\t\t\t></div>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t{/each}\n\t\t</div>\n\t</Card.Content>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/preview/preview.svelte",
    "content": "<script lang=\"ts\">\n\timport ActivateAgentDialog from \"./cards/activate-agent-dialog.svelte\";\n\timport AnalyticsCard from \"./cards/analytics-card.svelte\";\n\timport AnomalyAlert from \"./cards/anomaly-alert.svelte\";\n\timport AssignIssue from \"./cards/assign-issue.svelte\";\n\timport BarChartCard from \"./cards/bar-chart-card.svelte\";\n\timport BarVisualizerCard from \"./cards/bar-visualizer-card.svelte\";\n\timport BookAppointment from \"./cards/book-appointment.svelte\";\n\timport CodespacesCard from \"./cards/codespaces-card.svelte\";\n\timport ContributionsActivity from \"./cards/contributions-activity.svelte\";\n\timport Contributors from \"./cards/contributors.svelte\";\n\timport EnvironmentVariables from \"./cards/environment-variables.svelte\";\n\timport FeedbackForm from \"./cards/feedback-form.svelte\";\n\timport FileUpload from \"./cards/file-upload.svelte\";\n\timport GithubProfile from \"./cards/github-profile.svelte\";\n\timport IconPreviewGrid from \"./cards/icon-preview-grid.svelte\";\n\timport InviteTeam from \"./cards/invite-team.svelte\";\n\timport Invoice from \"./cards/invoice.svelte\";\n\timport LiveWaveformCard from \"./cards/live-waveform.svelte\";\n\timport NoTeamMembers from \"./cards/no-team-members.svelte\";\n\timport NotFound from \"./cards/not-found.svelte\";\n\timport ObservabilityCard from \"./cards/observability-card.svelte\";\n\timport PieChartCard from \"./cards/pie-chart-card.svelte\";\n\timport ReportBug from \"./cards/report-bug.svelte\";\n\timport ShippingAddress from \"./cards/shipping-address.svelte\";\n\timport Shortcuts from \"./cards/shortcuts.svelte\";\n\timport SkeletonLoading from \"./cards/skeleton-loading.svelte\";\n\timport SleepReport from \"./cards/sleep-report.svelte\";\n\timport StyleOverview from \"./cards/style-overview.svelte\";\n\timport UIElements from \"./cards/ui-elements.svelte\";\n\timport UsageCard from \"./cards/usage-card.svelte\";\n\timport Visitors from \"./cards/visitors.svelte\";\n\timport WeeklyFitnessSummary from \"./cards/weekly-fitness-summary.svelte\";\n</script>\n\n<div\n\tclass=\"3xl:[--gap:--spacing(12)] overflow-x-auto overflow-y-hidden contain-[paint] [--gap:--spacing(4)] md:[--gap:--spacing(10)]\"\n>\n\t<div\n\t\tclass=\"bg-muted dark:bg-background grid w-[2400px] grid-cols-7 items-start gap-(--gap) p-(--gap) md:w-[3000px] *:[div]:gap-(--gap)\"\n\t\tdata-slot=\"capture-target\"\n\t>\n\t\t<div\n\t\t\tclass=\"flex flex-col p-px [contain-intrinsic-size:380px_1200px] [content-visibility:auto]\"\n\t\t>\n\t\t\t<StyleOverview />\n\t\t\t<div class=\"md:hidden\">\n\t\t\t\t<UIElements />\n\t\t\t</div>\n\t\t\t<CodespacesCard />\n\t\t\t<BarVisualizerCard />\n\t\t\t<Invoice />\n\t\t</div>\n\t\t<div\n\t\t\tclass=\"flex flex-col p-px [contain-intrinsic-size:380px_1200px] [content-visibility:auto]\"\n\t\t>\n\t\t\t<IconPreviewGrid />\n\t\t\t<div class=\"hidden w-full md:flex\">\n\t\t\t\t<UIElements />\n\t\t\t</div>\n\t\t\t<ObservabilityCard />\n\t\t\t<Visitors />\n\t\t\t<Shortcuts />\n\t\t</div>\n\t\t<div\n\t\t\tclass=\"flex flex-col p-px [contain-intrinsic-size:380px_1200px] [content-visibility:auto]\"\n\t\t>\n\t\t\t<EnvironmentVariables />\n\t\t\t<BarChartCard />\n\t\t\t<InviteTeam />\n\t\t\t<ActivateAgentDialog />\n\t\t</div>\n\t\t<div\n\t\t\tclass=\"flex flex-col p-px [contain-intrinsic-size:380px_1200px] [content-visibility:auto]\"\n\t\t>\n\t\t\t<SkeletonLoading />\n\t\t\t<PieChartCard />\n\t\t\t<NoTeamMembers />\n\t\t\t<ReportBug />\n\t\t\t<Contributors />\n\t\t</div>\n\t\t<div\n\t\t\tclass=\"flex flex-col p-px [contain-intrinsic-size:380px_1200px] [content-visibility:auto]\"\n\t\t>\n\t\t\t<FeedbackForm />\n\t\t\t<BookAppointment />\n\t\t\t<SleepReport />\n\t\t\t<GithubProfile />\n\t\t</div>\n\t\t<div\n\t\t\tclass=\"flex flex-col p-px [contain-intrinsic-size:380px_1200px] [content-visibility:auto]\"\n\t\t>\n\t\t\t<AssignIssue />\n\t\t\t<WeeklyFitnessSummary />\n\t\t\t<FileUpload />\n\t\t\t<AnalyticsCard />\n\t\t\t<UsageCard />\n\t\t\t<ContributionsActivity />\n\t\t</div>\n\t\t<div\n\t\t\tclass=\"flex flex-col p-px [contain-intrinsic-size:380px_1200px] [content-visibility:auto]\"\n\t\t>\n\t\t\t<AnomalyAlert />\n\t\t\t<LiveWaveformCard />\n\t\t\t<ShippingAddress />\n\t\t\t<NotFound />\n\t\t</div>\n\t</div>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/progress/progress-bar.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Progress } from \"$lib/registry/ui/progress/index.js\";\n</script>\n\n<Example title=\"Progress Bar\">\n\t<div class=\"flex w-full flex-col gap-4\">\n\t\t<Progress value={0} />\n\t\t<Progress value={25} class=\"w-full\" />\n\t\t<Progress value={50} />\n\t\t<Progress value={75} />\n\t\t<Progress value={100} />\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/progress/progress-controlled.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Progress } from \"$lib/registry/ui/progress/index.js\";\n\timport { Slider } from \"$lib/registry/ui/slider/index.js\";\n\n\tlet value = $state(50);\n</script>\n\n<Example title=\"Controlled\">\n\t<div class=\"flex w-full flex-col gap-4\">\n\t\t<Progress {value} class=\"w-full\" />\n\t\t<Slider type=\"single\" bind:value min={0} max={100} step={1} />\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/progress/progress-file-upload-list.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Item from \"$lib/registry/ui/item/index.js\";\n\timport { Progress } from \"$lib/registry/ui/progress/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\n\tconst files = [\n\t\t{\n\t\t\tid: \"1\",\n\t\t\tname: \"document.pdf\",\n\t\t\tprogress: 45,\n\t\t\ttimeRemaining: \"2m 30s\",\n\t\t},\n\t\t{\n\t\t\tid: \"2\",\n\t\t\tname: \"presentation.pptx\",\n\t\t\tprogress: 78,\n\t\t\ttimeRemaining: \"45s\",\n\t\t},\n\t\t{\n\t\t\tid: \"3\",\n\t\t\tname: \"spreadsheet.xlsx\",\n\t\t\tprogress: 12,\n\t\t\ttimeRemaining: \"5m 12s\",\n\t\t},\n\t\t{\n\t\t\tid: \"4\",\n\t\t\tname: \"image.jpg\",\n\t\t\tprogress: 100,\n\t\t\ttimeRemaining: \"Complete\",\n\t\t},\n\t];\n</script>\n\n<Example title=\"File Upload List\">\n\t<Item.Group>\n\t\t{#each files as file (file.id)}\n\t\t\t<Item.Root size=\"xs\" class=\"px-0\">\n\t\t\t\t<Item.Media variant=\"icon\">\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"FileIcon\"\n\t\t\t\t\t\ttabler=\"IconFile\"\n\t\t\t\t\t\thugeicons=\"FileIcon\"\n\t\t\t\t\t\tphosphor=\"FileIcon\"\n\t\t\t\t\t\tremixicon=\"RiFileLine\"\n\t\t\t\t\t\tclass=\"size-5\"\n\t\t\t\t\t/>\n\t\t\t\t</Item.Media>\n\t\t\t\t<Item.Content class=\"inline-block truncate\">\n\t\t\t\t\t<Item.Title class=\"inline\">{file.name}</Item.Title>\n\t\t\t\t</Item.Content>\n\t\t\t\t<Item.Content>\n\t\t\t\t\t<Progress value={file.progress} class=\"w-32\" />\n\t\t\t\t</Item.Content>\n\t\t\t\t<Item.Actions class=\"w-16 justify-end\">\n\t\t\t\t\t<span class=\"text-muted-foreground text-sm\">{file.timeRemaining}</span>\n\t\t\t\t</Item.Actions>\n\t\t\t</Item.Root>\n\t\t{/each}\n\t</Item.Group>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/progress/progress-with-label.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport { Progress } from \"$lib/registry/ui/progress/index.js\";\n</script>\n\n<Example title=\"With Label\">\n\t<Field.Field>\n\t\t<Field.Label for=\"progress-upload\">\n\t\t\t<span>Upload progress</span>\n\t\t\t<span class=\"ml-auto\">66%</span>\n\t\t</Field.Label>\n\t\t<Progress value={66} class=\"w-full\" id=\"progress-upload\" />\n\t</Field.Field>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/progress/progress.svelte",
    "content": "<script lang=\"ts\">\n\timport ExampleWrapper from \"../../../../../routes/(app)/(layout)/(create)/components/example-wrapper.svelte\";\n\timport ProgressBar from \"./progress-bar.svelte\";\n\timport ProgressWithLabel from \"./progress-with-label.svelte\";\n\timport ProgressControlled from \"./progress-controlled.svelte\";\n\timport ProgressFileUploadList from \"./progress-file-upload-list.svelte\";\n</script>\n\n<ExampleWrapper>\n\t<ProgressBar />\n\t<ProgressWithLabel />\n\t<ProgressControlled />\n\t<ProgressFileUploadList />\n</ExampleWrapper>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/radio-group/radio-group-basic.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as RadioGroup from \"$lib/registry/ui/radio-group/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n</script>\n\n<Example title=\"Basic\">\n\t<RadioGroup.Root value=\"comfortable\">\n\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t<RadioGroup.Item value=\"default\" id=\"r1\" />\n\t\t\t<Field.Label for=\"r1\" class=\"font-normal\">Default</Field.Label>\n\t\t</Field.Field>\n\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t<RadioGroup.Item value=\"comfortable\" id=\"r2\" />\n\t\t\t<Field.Label for=\"r2\" class=\"font-normal\">Comfortable</Field.Label>\n\t\t</Field.Field>\n\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t<RadioGroup.Item value=\"compact\" id=\"r3\" />\n\t\t\t<Field.Label for=\"r3\" class=\"font-normal\">Compact</Field.Label>\n\t\t</Field.Field>\n\t</RadioGroup.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/radio-group/radio-group-disabled.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as RadioGroup from \"$lib/registry/ui/radio-group/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n</script>\n\n<Example title=\"Disabled\">\n\t<RadioGroup.Root value=\"option2\" disabled>\n\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t<RadioGroup.Item value=\"option1\" id=\"disabled-1\" />\n\t\t\t<Field.Label for=\"disabled-1\" class=\"font-normal\">Option 1</Field.Label>\n\t\t</Field.Field>\n\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t<RadioGroup.Item value=\"option2\" id=\"disabled-2\" />\n\t\t\t<Field.Label for=\"disabled-2\" class=\"font-normal\">Option 2</Field.Label>\n\t\t</Field.Field>\n\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t<RadioGroup.Item value=\"option3\" id=\"disabled-3\" />\n\t\t\t<Field.Label for=\"disabled-3\" class=\"font-normal\">Option 3</Field.Label>\n\t\t</Field.Field>\n\t</RadioGroup.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/radio-group/radio-group-grid.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as RadioGroup from \"$lib/registry/ui/radio-group/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n</script>\n\n<Example title=\"Grid Layout\">\n\t<RadioGroup.Root value=\"medium\" class=\"grid grid-cols-2 gap-2\">\n\t\t<Field.Label for=\"size-small\">\n\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t<RadioGroup.Item value=\"small\" id=\"size-small\" />\n\t\t\t\t<div class=\"font-medium\">Small</div>\n\t\t\t</Field.Field>\n\t\t</Field.Label>\n\t\t<Field.Label for=\"size-medium\">\n\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t<RadioGroup.Item value=\"medium\" id=\"size-medium\" />\n\t\t\t\t<div class=\"font-medium\">Medium</div>\n\t\t\t</Field.Field>\n\t\t</Field.Label>\n\t\t<Field.Label for=\"size-large\">\n\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t<RadioGroup.Item value=\"large\" id=\"size-large\" />\n\t\t\t\t<div class=\"font-medium\">Large</div>\n\t\t\t</Field.Field>\n\t\t</Field.Label>\n\t\t<Field.Label for=\"size-xlarge\">\n\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t<RadioGroup.Item value=\"xlarge\" id=\"size-xlarge\" />\n\t\t\t\t<div class=\"font-medium\">X-Large</div>\n\t\t\t</Field.Field>\n\t\t</Field.Label>\n\t</RadioGroup.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/radio-group/radio-group-invalid.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as RadioGroup from \"$lib/registry/ui/radio-group/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n</script>\n\n<Example title=\"Invalid\">\n\t<Field.Set>\n\t\t<Field.Legend>Notification Preferences</Field.Legend>\n\t\t<Field.Description>Choose how you want to receive notifications.</Field.Description>\n\t\t<RadioGroup.Root value=\"email\">\n\t\t\t<Field.Field orientation=\"horizontal\" data-invalid>\n\t\t\t\t<RadioGroup.Item value=\"email\" id=\"invalid-email\" aria-invalid />\n\t\t\t\t<Field.Label for=\"invalid-email\" class=\"font-normal\">Email only</Field.Label>\n\t\t\t</Field.Field>\n\t\t\t<Field.Field orientation=\"horizontal\" data-invalid>\n\t\t\t\t<RadioGroup.Item value=\"sms\" id=\"invalid-sms\" aria-invalid />\n\t\t\t\t<Field.Label for=\"invalid-sms\" class=\"font-normal\">SMS only</Field.Label>\n\t\t\t</Field.Field>\n\t\t\t<Field.Field orientation=\"horizontal\" data-invalid>\n\t\t\t\t<RadioGroup.Item value=\"both\" id=\"invalid-both\" aria-invalid />\n\t\t\t\t<Field.Label for=\"invalid-both\" class=\"font-normal\">Both Email & SMS</Field.Label>\n\t\t\t</Field.Field>\n\t\t</RadioGroup.Root>\n\t</Field.Set>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/radio-group/radio-group-with-descriptions.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as RadioGroup from \"$lib/registry/ui/radio-group/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n</script>\n\n<Example title=\"With Descriptions\">\n\t<RadioGroup.Root value=\"plus\">\n\t\t<Field.Label for=\"plus-plan\">\n\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t<Field.Content>\n\t\t\t\t\t<div class=\"font-medium\">Plus</div>\n\t\t\t\t\t<Field.Description>For individuals and small teams</Field.Description>\n\t\t\t\t</Field.Content>\n\t\t\t\t<RadioGroup.Item value=\"plus\" id=\"plus-plan\" />\n\t\t\t</Field.Field>\n\t\t</Field.Label>\n\t\t<Field.Label for=\"pro-plan\">\n\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t<Field.Content>\n\t\t\t\t\t<div class=\"font-medium\">Pro</div>\n\t\t\t\t\t<Field.Description>For growing businesses</Field.Description>\n\t\t\t\t</Field.Content>\n\t\t\t\t<RadioGroup.Item value=\"pro\" id=\"pro-plan\" />\n\t\t\t</Field.Field>\n\t\t</Field.Label>\n\t\t<Field.Label for=\"enterprise-plan\">\n\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t<Field.Content>\n\t\t\t\t\t<div class=\"font-medium\">Enterprise</div>\n\t\t\t\t\t<Field.Description>For large teams and enterprises</Field.Description>\n\t\t\t\t</Field.Content>\n\t\t\t\t<RadioGroup.Item value=\"enterprise\" id=\"enterprise-plan\" />\n\t\t\t</Field.Field>\n\t\t</Field.Label>\n\t</RadioGroup.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/radio-group/radio-group-with-field-set.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as RadioGroup from \"$lib/registry/ui/radio-group/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n</script>\n\n<Example title=\"With FieldSet\">\n\t<Field.Set>\n\t\t<Field.Legend>Battery Level</Field.Legend>\n\t\t<Field.Description>Choose your preferred battery level.</Field.Description>\n\t\t<RadioGroup.Root value=\"medium\">\n\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t<RadioGroup.Item value=\"high\" id=\"battery-high\" />\n\t\t\t\t<Field.Label for=\"battery-high\" class=\"font-normal\">High</Field.Label>\n\t\t\t</Field.Field>\n\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t<RadioGroup.Item value=\"medium\" id=\"battery-medium\" />\n\t\t\t\t<Field.Label for=\"battery-medium\" class=\"font-normal\">Medium</Field.Label>\n\t\t\t</Field.Field>\n\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t<RadioGroup.Item value=\"low\" id=\"battery-low\" />\n\t\t\t\t<Field.Label for=\"battery-low\" class=\"font-normal\">Low</Field.Label>\n\t\t\t</Field.Field>\n\t\t</RadioGroup.Root>\n\t</Field.Set>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/radio-group/radio-group.svelte",
    "content": "<script lang=\"ts\">\n\timport ExampleWrapper from \"../../../../../routes/(app)/(layout)/(create)/components/example-wrapper.svelte\";\n\timport RadioGroupBasic from \"./radio-group-basic.svelte\";\n\timport RadioGroupWithDescriptions from \"./radio-group-with-descriptions.svelte\";\n\timport RadioGroupWithFieldSet from \"./radio-group-with-field-set.svelte\";\n\timport RadioGroupGrid from \"./radio-group-grid.svelte\";\n\timport RadioGroupDisabled from \"./radio-group-disabled.svelte\";\n\timport RadioGroupInvalid from \"./radio-group-invalid.svelte\";\n</script>\n\n<ExampleWrapper>\n\t<RadioGroupBasic />\n\t<RadioGroupWithDescriptions />\n\t<RadioGroupWithFieldSet />\n\t<RadioGroupGrid />\n\t<RadioGroupDisabled />\n\t<RadioGroupInvalid />\n</ExampleWrapper>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/resizable/resizable-controlled.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Resizable from \"$lib/registry/ui/resizable/index.js\";\n\n\tlet sizes = $state([30, 70]);\n</script>\n\n<Example title=\"Controlled\">\n\t<Resizable.PaneGroup\n\t\tdirection=\"horizontal\"\n\t\tclass=\"min-h-[200px] rounded-lg border\"\n\t\tonLayoutChange={(newSizes) => {\n\t\t\tsizes = newSizes;\n\t\t}}\n\t>\n\t\t<Resizable.Pane defaultSize={30} minSize={20}>\n\t\t\t<div class=\"flex h-full flex-col items-center justify-center gap-2 p-6\">\n\t\t\t\t<span class=\"font-semibold\">{Math.round(sizes[0] ?? 30)}%</span>\n\t\t\t</div>\n\t\t</Resizable.Pane>\n\t\t<Resizable.Handle />\n\t\t<Resizable.Pane defaultSize={70} minSize={30}>\n\t\t\t<div class=\"flex h-full flex-col items-center justify-center gap-2 p-6\">\n\t\t\t\t<span class=\"font-semibold\">{Math.round(sizes[1] ?? 70)}%</span>\n\t\t\t</div>\n\t\t</Resizable.Pane>\n\t</Resizable.PaneGroup>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/resizable/resizable-horizontal.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Resizable from \"$lib/registry/ui/resizable/index.js\";\n</script>\n\n<Example title=\"Horizontal\">\n\t<Resizable.PaneGroup direction=\"horizontal\" class=\"min-h-[200px] rounded-lg border\">\n\t\t<Resizable.Pane defaultSize={25}>\n\t\t\t<div class=\"flex h-full items-center justify-center p-6\">\n\t\t\t\t<span class=\"font-semibold\">Sidebar</span>\n\t\t\t</div>\n\t\t</Resizable.Pane>\n\t\t<Resizable.Handle />\n\t\t<Resizable.Pane defaultSize={75}>\n\t\t\t<div class=\"flex h-full items-center justify-center p-6\">\n\t\t\t\t<span class=\"font-semibold\">Content</span>\n\t\t\t</div>\n\t\t</Resizable.Pane>\n\t</Resizable.PaneGroup>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/resizable/resizable-nested.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Resizable from \"$lib/registry/ui/resizable/index.js\";\n</script>\n\n<Example title=\"Nested\">\n\t<Resizable.PaneGroup direction=\"horizontal\" class=\"rounded-lg border\">\n\t\t<Resizable.Pane defaultSize={50}>\n\t\t\t<div class=\"flex h-[200px] items-center justify-center p-6\">\n\t\t\t\t<span class=\"font-semibold\">One</span>\n\t\t\t</div>\n\t\t</Resizable.Pane>\n\t\t<Resizable.Handle />\n\t\t<Resizable.Pane defaultSize={50}>\n\t\t\t<Resizable.PaneGroup direction=\"vertical\">\n\t\t\t\t<Resizable.Pane defaultSize={25}>\n\t\t\t\t\t<div class=\"flex h-full items-center justify-center p-6\">\n\t\t\t\t\t\t<span class=\"font-semibold\">Two</span>\n\t\t\t\t\t</div>\n\t\t\t\t</Resizable.Pane>\n\t\t\t\t<Resizable.Handle />\n\t\t\t\t<Resizable.Pane defaultSize={75}>\n\t\t\t\t\t<div class=\"flex h-full items-center justify-center p-6\">\n\t\t\t\t\t\t<span class=\"font-semibold\">Three</span>\n\t\t\t\t\t</div>\n\t\t\t\t</Resizable.Pane>\n\t\t\t</Resizable.PaneGroup>\n\t\t</Resizable.Pane>\n\t</Resizable.PaneGroup>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/resizable/resizable-vertical.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Resizable from \"$lib/registry/ui/resizable/index.js\";\n</script>\n\n<Example title=\"Vertical\">\n\t<Resizable.PaneGroup direction=\"vertical\" class=\"min-h-[200px] rounded-lg border\">\n\t\t<Resizable.Pane defaultSize={25}>\n\t\t\t<div class=\"flex h-full items-center justify-center p-6\">\n\t\t\t\t<span class=\"font-semibold\">Header</span>\n\t\t\t</div>\n\t\t</Resizable.Pane>\n\t\t<Resizable.Handle />\n\t\t<Resizable.Pane defaultSize={75}>\n\t\t\t<div class=\"flex h-full items-center justify-center p-6\">\n\t\t\t\t<span class=\"font-semibold\">Content</span>\n\t\t\t</div>\n\t\t</Resizable.Pane>\n\t</Resizable.PaneGroup>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/resizable/resizable-with-handle.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Resizable from \"$lib/registry/ui/resizable/index.js\";\n</script>\n\n<Example title=\"With Handle\">\n\t<Resizable.PaneGroup direction=\"horizontal\" class=\"min-h-[200px] rounded-lg border\">\n\t\t<Resizable.Pane defaultSize={25}>\n\t\t\t<div class=\"flex h-full items-center justify-center p-6\">\n\t\t\t\t<span class=\"font-semibold\">Sidebar</span>\n\t\t\t</div>\n\t\t</Resizable.Pane>\n\t\t<Resizable.Handle withHandle />\n\t\t<Resizable.Pane defaultSize={75}>\n\t\t\t<div class=\"flex h-full items-center justify-center p-6\">\n\t\t\t\t<span class=\"font-semibold\">Content</span>\n\t\t\t</div>\n\t\t</Resizable.Pane>\n\t</Resizable.PaneGroup>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/resizable/resizable.svelte",
    "content": "<script lang=\"ts\">\n\timport ExampleWrapper from \"../../../../../routes/(app)/(layout)/(create)/components/example-wrapper.svelte\";\n\timport ResizableHorizontal from \"./resizable-horizontal.svelte\";\n\timport ResizableVertical from \"./resizable-vertical.svelte\";\n\timport ResizableWithHandle from \"./resizable-with-handle.svelte\";\n\timport ResizableNested from \"./resizable-nested.svelte\";\n\timport ResizableControlled from \"./resizable-controlled.svelte\";\n</script>\n\n<ExampleWrapper>\n\t<ResizableHorizontal />\n\t<ResizableVertical />\n\t<ResizableWithHandle />\n\t<ResizableNested />\n\t<ResizableControlled />\n</ExampleWrapper>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/scroll-area/scroll-area-horizontal.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as ScrollArea from \"$lib/registry/ui/scroll-area/index.js\";\n\n\tconst works = [\n\t\t{\n\t\t\tartist: \"Ornella Binni\",\n\t\t\tart: \"https://images.unsplash.com/photo-1465869185982-5a1a7522cbcb?auto=format&fit=crop&w=300&q=80\",\n\t\t},\n\t\t{\n\t\t\tartist: \"Tom Byrom\",\n\t\t\tart: \"https://images.unsplash.com/photo-1548516173-3cabfa4607e9?auto=format&fit=crop&w=300&q=80\",\n\t\t},\n\t\t{\n\t\t\tartist: \"Vladimir Malyav\",\n\t\t\tart: \"https://images.unsplash.com/photo-1494337480532-3725c85fd2ab?auto=format&fit=crop&w=300&q=80\",\n\t\t},\n\t] as const;\n</script>\n\n<Example title=\"Horizontal\">\n\t<ScrollArea.Root orientation=\"horizontal\" class=\"mx-auto w-full max-w-96 rounded-md border p-4\">\n\t\t<div class=\"flex gap-4\">\n\t\t\t{#each works as artwork (artwork.artist)}\n\t\t\t\t<figure class=\"shrink-0\">\n\t\t\t\t\t<div class=\"overflow-hidden rounded-md\">\n\t\t\t\t\t\t<img\n\t\t\t\t\t\t\tsrc={artwork.art}\n\t\t\t\t\t\t\talt=\"by {artwork.artist}\"\n\t\t\t\t\t\t\tclass=\"aspect-[3/4] h-fit w-fit object-cover\"\n\t\t\t\t\t\t\twidth={300}\n\t\t\t\t\t\t\theight={400}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t\t<figcaption class=\"text-muted-foreground pt-2 text-xs\">\n\t\t\t\t\t\tPhoto by <span class=\"text-foreground font-semibold\">{artwork.artist}</span>\n\t\t\t\t\t</figcaption>\n\t\t\t\t</figure>\n\t\t\t{/each}\n\t\t</div>\n\t</ScrollArea.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/scroll-area/scroll-area-vertical.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { ScrollArea } from \"$lib/registry/ui/scroll-area/index.js\";\n\timport { Separator } from \"$lib/registry/ui/separator/index.js\";\n\n\tconst tags = Array.from({ length: 50 }).map((_, i, a) => `v1.2.0-beta.${a.length - i}`);\n</script>\n\n<Example title=\"Vertical\">\n\t<ScrollArea class=\"mx-auto h-72 w-48 rounded-md border\">\n\t\t<div class=\"p-4\">\n\t\t\t<h4 class=\"mb-4 text-sm leading-none font-medium\">Tags</h4>\n\t\t\t{#each tags as tag (tag)}\n\t\t\t\t<div class=\"text-sm\">{tag}</div>\n\t\t\t\t<Separator class=\"my-2\" />\n\t\t\t{/each}\n\t\t</div>\n\t</ScrollArea>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/scroll-area/scroll-area.svelte",
    "content": "<script lang=\"ts\">\n\timport ExampleWrapper from \"../../../../../routes/(app)/(layout)/(create)/components/example-wrapper.svelte\";\n\timport ScrollAreaVertical from \"./scroll-area-vertical.svelte\";\n\timport ScrollAreaHorizontal from \"./scroll-area-horizontal.svelte\";\n</script>\n\n<ExampleWrapper>\n\t<ScrollAreaVertical />\n\t<ScrollAreaHorizontal />\n</ExampleWrapper>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/select/select-basic.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Select from \"$lib/registry/ui/select/index.js\";\n\n\tconst items = [\n\t\t{ label: \"Apple\", value: \"apple\" },\n\t\t{ label: \"Banana\", value: \"banana\" },\n\t\t{ label: \"Blueberry\", value: \"blueberry\" },\n\t\t{ label: \"Grapes\", value: \"grapes\", disabled: true },\n\t\t{ label: \"Pineapple\", value: \"pineapple\" },\n\t];\n\n\tlet selectedValue = $state<string | undefined>(undefined);\n\tconst selectedLabel = $derived(\n\t\titems.find((item) => item.value === selectedValue)?.label ?? \"Select a fruit\"\n\t);\n</script>\n\n<Example title=\"Basic\">\n\t<Select.Root type=\"single\" bind:value={selectedValue}>\n\t\t<Select.Trigger>\n\t\t\t{selectedLabel}\n\t\t</Select.Trigger>\n\t\t<Select.Content>\n\t\t\t<Select.Group>\n\t\t\t\t{#each items as item (item.value)}\n\t\t\t\t\t<Select.Item value={item.value} disabled={item.disabled}\n\t\t\t\t\t\t>{item.label}</Select.Item\n\t\t\t\t\t>\n\t\t\t\t{/each}\n\t\t\t</Select.Group>\n\t\t</Select.Content>\n\t</Select.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/select/select-disabled.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Select from \"$lib/registry/ui/select/index.js\";\n\n\tconst items = [\n\t\t{ label: \"Apple\", value: \"apple\" },\n\t\t{ label: \"Banana\", value: \"banana\" },\n\t\t{ label: \"Blueberry\", value: \"blueberry\" },\n\t\t{ label: \"Grapes\", value: \"grapes\", disabled: true },\n\t\t{ label: \"Pineapple\", value: \"pineapple\" },\n\t];\n\n\tlet selectedValue = $state<string | undefined>(undefined);\n\tconst selectedLabel = $derived(\n\t\titems.find((item) => item.value === selectedValue)?.label ?? \"Select a fruit\"\n\t);\n</script>\n\n<Example title=\"Disabled\">\n\t<Select.Root type=\"single\" bind:value={selectedValue} disabled>\n\t\t<Select.Trigger>\n\t\t\t{selectedLabel}\n\t\t</Select.Trigger>\n\t\t<Select.Content>\n\t\t\t<Select.Group>\n\t\t\t\t{#each items as item (item.value)}\n\t\t\t\t\t<Select.Item value={item.value} disabled={item.disabled}>\n\t\t\t\t\t\t{item.label}\n\t\t\t\t\t</Select.Item>\n\t\t\t\t{/each}\n\t\t\t</Select.Group>\n\t\t</Select.Content>\n\t</Select.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/select/select-in-dialog.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Select from \"$lib/registry/ui/select/index.js\";\n\timport * as Dialog from \"$lib/registry/ui/dialog/index.js\";\n\timport * as Button from \"$lib/registry/ui/button/index.js\";\n\n\tconst items = [\n\t\t{ label: \"Apple\", value: \"apple\" },\n\t\t{ label: \"Banana\", value: \"banana\" },\n\t\t{ label: \"Blueberry\", value: \"blueberry\" },\n\t\t{ label: \"Grapes\", value: \"grapes\" },\n\t\t{ label: \"Pineapple\", value: \"pineapple\" },\n\t];\n\n\tlet selectedValue = $state<string | undefined>(undefined);\n\tconst selectedLabel = $derived(\n\t\titems.find((item) => item.value === selectedValue)?.label ?? \"Select a fruit\"\n\t);\n</script>\n\n<Example title=\"In Dialog\">\n\t<Dialog.Root>\n\t\t<Dialog.Trigger>\n\t\t\t{#snippet child({ props })}\n\t\t\t\t<Button.Root variant=\"outline\" {...props}>Open Dialog</Button.Root>\n\t\t\t{/snippet}\n\t\t</Dialog.Trigger>\n\t\t<Dialog.Content>\n\t\t\t<Dialog.Header>\n\t\t\t\t<Dialog.Title>Select Example</Dialog.Title>\n\t\t\t\t<Dialog.Description>Use the select below to choose a fruit.</Dialog.Description>\n\t\t\t</Dialog.Header>\n\t\t\t<Select.Root type=\"single\" bind:value={selectedValue}>\n\t\t\t\t<Select.Trigger>\n\t\t\t\t\t{selectedLabel}\n\t\t\t\t</Select.Trigger>\n\t\t\t\t<Select.Content>\n\t\t\t\t\t<Select.Group>\n\t\t\t\t\t\t{#each items as item (item.value)}\n\t\t\t\t\t\t\t<Select.Item value={item.value}>{item.label}</Select.Item>\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</Select.Group>\n\t\t\t\t</Select.Content>\n\t\t\t</Select.Root>\n\t\t</Dialog.Content>\n\t</Dialog.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/select/select-inline.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Select from \"$lib/registry/ui/select/index.js\";\n\timport * as Input from \"$lib/registry/ui/input/index.js\";\n\timport * as NativeSelect from \"$lib/registry/ui/native-select/index.js\";\n\n\tconst items = [\n\t\t{ label: \"All\", value: \"all\" },\n\t\t{ label: \"Active\", value: \"active\" },\n\t\t{ label: \"Inactive\", value: \"inactive\" },\n\t];\n\n\tlet selectedValue = $state<string | undefined>(undefined);\n\tconst selectedLabel = $derived(\n\t\titems.find((item) => item.value === selectedValue)?.label ?? \"Filter\"\n\t);\n</script>\n\n<Example title=\"Inline with Input & NativeSelect\">\n\t<div class=\"flex items-center gap-2\">\n\t\t<Input.Root placeholder=\"Search...\" class=\"flex-1\" />\n\t\t<Select.Root type=\"single\" bind:value={selectedValue}>\n\t\t\t<Select.Trigger class=\"w-[140px]\">\n\t\t\t\t{selectedLabel}\n\t\t\t</Select.Trigger>\n\t\t\t<Select.Content>\n\t\t\t\t<Select.Group>\n\t\t\t\t\t{#each items as item (item.value)}\n\t\t\t\t\t\t<Select.Item value={item.value}>{item.label}</Select.Item>\n\t\t\t\t\t{/each}\n\t\t\t\t</Select.Group>\n\t\t\t</Select.Content>\n\t\t</Select.Root>\n\t\t<NativeSelect.Root class=\"w-[140px]\">\n\t\t\t<NativeSelect.Option value=\"\">Sort by</NativeSelect.Option>\n\t\t\t<NativeSelect.Option value=\"name\">Name</NativeSelect.Option>\n\t\t\t<NativeSelect.Option value=\"date\">Date</NativeSelect.Option>\n\t\t\t<NativeSelect.Option value=\"status\">Status</NativeSelect.Option>\n\t\t</NativeSelect.Root>\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/select/select-invalid.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Select from \"$lib/registry/ui/select/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\n\tconst items = [\n\t\t{ label: \"Apple\", value: \"apple\" },\n\t\t{ label: \"Banana\", value: \"banana\" },\n\t\t{ label: \"Blueberry\", value: \"blueberry\" },\n\t\t{ label: \"Grapes\", value: \"grapes\" },\n\t\t{ label: \"Pineapple\", value: \"pineapple\" },\n\t];\n\n\tlet selectedValue = $state<string | undefined>(undefined);\n\tlet selectedValueInvalid = $state<string | undefined>(undefined);\n\tconst selectedLabel = $derived(\n\t\titems.find((item) => item.value === selectedValue)?.label ?? \"Select a fruit\"\n\t);\n\tconst selectedLabelInvalid = $derived(\n\t\titems.find((item) => item.value === selectedValueInvalid)?.label ?? \"Select a fruit\"\n\t);\n</script>\n\n<Example title=\"Invalid\">\n\t<div class=\"flex flex-col gap-4\">\n\t\t<Select.Root type=\"single\" bind:value={selectedValue}>\n\t\t\t<Select.Trigger aria-invalid=\"true\">\n\t\t\t\t{selectedLabel}\n\t\t\t</Select.Trigger>\n\t\t\t<Select.Content>\n\t\t\t\t<Select.Group>\n\t\t\t\t\t{#each items as item (item.value)}\n\t\t\t\t\t\t<Select.Item value={item.value}>{item.label}</Select.Item>\n\t\t\t\t\t{/each}\n\t\t\t\t</Select.Group>\n\t\t\t</Select.Content>\n\t\t</Select.Root>\n\t\t<Field.Field data-invalid>\n\t\t\t<Field.Label for=\"select-fruit-invalid\">Favorite Fruit</Field.Label>\n\t\t\t<Select.Root type=\"single\" bind:value={selectedValueInvalid}>\n\t\t\t\t<Select.Trigger id=\"select-fruit-invalid\" aria-invalid>\n\t\t\t\t\t{selectedLabelInvalid}\n\t\t\t\t</Select.Trigger>\n\t\t\t\t<Select.Content>\n\t\t\t\t\t<Select.Group>\n\t\t\t\t\t\t{#each items as item (item.value)}\n\t\t\t\t\t\t\t<Select.Item value={item.value}>{item.label}</Select.Item>\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</Select.Group>\n\t\t\t\t</Select.Content>\n\t\t\t</Select.Root>\n\t\t\t<Field.Error errors={[{ message: \"Please select a valid fruit.\" }]} />\n\t\t</Field.Field>\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/select/select-item-aligned.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Select from \"$lib/registry/ui/select/index.js\";\n\n\tconst items = [\n\t\t{ label: \"Apple\", value: \"apple\" },\n\t\t{ label: \"Banana\", value: \"banana\" },\n\t\t{ label: \"Blueberry\", value: \"blueberry\" },\n\t\t{ label: \"Grapes\", value: \"grapes\", disabled: true },\n\t\t{ label: \"Pineapple\", value: \"pineapple\" },\n\t];\n\n\tlet selectedValue = $state<string | undefined>(undefined);\n\tconst selectedLabel = $derived(\n\t\titems.find((item) => item.value === selectedValue)?.label ?? \"Select a fruit\"\n\t);\n</script>\n\n<Example title=\"Popper\">\n\t<Select.Root type=\"single\" bind:value={selectedValue}>\n\t\t<Select.Trigger>\n\t\t\t{selectedLabel}\n\t\t</Select.Trigger>\n\t\t<Select.Content>\n\t\t\t<Select.Group>\n\t\t\t\t{#each items as item (item.value)}\n\t\t\t\t\t<Select.Item value={item.value} disabled={item.disabled}>\n\t\t\t\t\t\t{item.label}\n\t\t\t\t\t</Select.Item>\n\t\t\t\t{/each}\n\t\t\t</Select.Group>\n\t\t</Select.Content>\n\t</Select.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/select/select-large-list.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Select from \"$lib/registry/ui/select/index.js\";\n\n\tconst items = [\n\t\t...Array.from({ length: 100 }).map((_, i) => ({\n\t\t\tlabel: `Item ${i}`,\n\t\t\tvalue: `item-${i}`,\n\t\t})),\n\t];\n\n\tlet selectedValue = $state<string | undefined>(undefined);\n\tconst selectedLabel = $derived(\n\t\titems.find((item) => item.value === selectedValue)?.label ?? \"Select an item\"\n\t);\n</script>\n\n<Example title=\"Large List\">\n\t<Select.Root type=\"single\" bind:value={selectedValue}>\n\t\t<Select.Trigger>\n\t\t\t{selectedLabel}\n\t\t</Select.Trigger>\n\t\t<Select.Content>\n\t\t\t<Select.Group>\n\t\t\t\t{#each items as item (item.value)}\n\t\t\t\t\t<Select.Item value={item.value}>{item.label}</Select.Item>\n\t\t\t\t{/each}\n\t\t\t</Select.Group>\n\t\t</Select.Content>\n\t</Select.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/select/select-multiple.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Select from \"$lib/registry/ui/select/index.js\";\n\n\tconst items = [\n\t\t{ label: \"Apple\", value: \"apple\" },\n\t\t{ label: \"Banana\", value: \"banana\" },\n\t\t{ label: \"Blueberry\", value: \"blueberry\" },\n\t\t{ label: \"Grapes\", value: \"grapes\" },\n\t\t{ label: \"Pineapple\", value: \"pineapple\" },\n\t\t{ label: \"Strawberry\", value: \"strawberry\" },\n\t\t{ label: \"Watermelon\", value: \"watermelon\" },\n\t];\n\n\tlet selectedValues = $state<string[]>([]);\n\tconst selectedLabel = $derived.by(() => {\n\t\tif (selectedValues.length === 0) {\n\t\t\treturn \"Select fruits\";\n\t\t}\n\t\tif (selectedValues.length === 1) {\n\t\t\treturn items.find((item) => item.value === selectedValues[0])?.label;\n\t\t}\n\t\treturn `${selectedValues.length} fruits selected`;\n\t});\n</script>\n\n<Example title=\"Multiple Selection\">\n\t<Select.Root type=\"multiple\" bind:value={selectedValues}>\n\t\t<Select.Trigger class=\"w-72\">\n\t\t\t{selectedLabel}\n\t\t</Select.Trigger>\n\t\t<Select.Content>\n\t\t\t<Select.Group>\n\t\t\t\t{#each items as item (item.value)}\n\t\t\t\t\t<Select.Item value={item.value}>{item.label}</Select.Item>\n\t\t\t\t{/each}\n\t\t\t</Select.Group>\n\t\t</Select.Content>\n\t</Select.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/select/select-plan.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Select from \"$lib/registry/ui/select/index.js\";\n\timport * as Item from \"$lib/registry/ui/item/index.js\";\n\n\tconst plans = [\n\t\t{\n\t\t\tname: \"Starter\",\n\t\t\tdescription: \"Perfect for individuals getting started.\",\n\t\t},\n\t\t{\n\t\t\tname: \"Professional\",\n\t\t\tdescription: \"Ideal for growing teams and businesses.\",\n\t\t},\n\t\t{\n\t\t\tname: \"Enterprise\",\n\t\t\tdescription: \"Advanced features for large organizations.\",\n\t\t},\n\t];\n\n\tlet plan = $state<(typeof plans)[number][\"name\"] | undefined>(plans[0].name);\n\tconst selectedPlan = $derived(plans.find((p) => p.name === plan));\n</script>\n\n<Example title=\"Subscription Plan\">\n\t<Select.Root type=\"single\" bind:value={plan}>\n\t\t<Select.Trigger class=\"h-auto! w-72\">\n\t\t\t<Item.Root size=\"xs\" class=\"w-full p-0\">\n\t\t\t\t<Item.Content class=\"gap-0\">\n\t\t\t\t\t<Item.Title>{selectedPlan?.name}</Item.Title>\n\t\t\t\t\t<Item.Description class=\"text-xs\">\n\t\t\t\t\t\t{selectedPlan?.description ?? \"\"}\n\t\t\t\t\t</Item.Description>\n\t\t\t\t</Item.Content>\n\t\t\t</Item.Root>\n\t\t</Select.Trigger>\n\t\t<Select.Content>\n\t\t\t<Select.Group>\n\t\t\t\t{#each plans as p (p.name)}\n\t\t\t\t\t<Select.Item value={p.name}>\n\t\t\t\t\t\t<Item.Root size=\"xs\" class=\"w-full p-0\">\n\t\t\t\t\t\t\t<Item.Content class=\"gap-0\">\n\t\t\t\t\t\t\t\t<Item.Title>{p.name}</Item.Title>\n\t\t\t\t\t\t\t\t<Item.Description class=\"text-xs\">\n\t\t\t\t\t\t\t\t\t{p.description}\n\t\t\t\t\t\t\t\t</Item.Description>\n\t\t\t\t\t\t\t</Item.Content>\n\t\t\t\t\t\t</Item.Root>\n\t\t\t\t\t</Select.Item>\n\t\t\t\t{/each}\n\t\t\t</Select.Group>\n\t\t</Select.Content>\n\t</Select.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/select/select-sizes.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Select from \"$lib/registry/ui/select/index.js\";\n\n\tconst items = [\n\t\t{ label: \"Apple\", value: \"apple\" },\n\t\t{ label: \"Banana\", value: \"banana\" },\n\t\t{ label: \"Blueberry\", value: \"blueberry\" },\n\t];\n\n\tlet selectedValueSm = $state<string | undefined>(undefined);\n\tlet selectedValueDefault = $state<string | undefined>(undefined);\n\tconst selectedLabelSm = $derived(\n\t\titems.find((item) => item.value === selectedValueSm)?.label ?? \"Small size\"\n\t);\n\tconst selectedLabelDefault = $derived(\n\t\titems.find((item) => item.value === selectedValueDefault)?.label ?? \"Default size\"\n\t);\n</script>\n\n<Example title=\"Sizes\">\n\t<div class=\"flex flex-col gap-4\">\n\t\t<Select.Root type=\"single\" bind:value={selectedValueSm}>\n\t\t\t<Select.Trigger size=\"sm\">\n\t\t\t\t{selectedLabelSm}\n\t\t\t</Select.Trigger>\n\t\t\t<Select.Content>\n\t\t\t\t<Select.Group>\n\t\t\t\t\t{#each items as item (item.value)}\n\t\t\t\t\t\t<Select.Item value={item.value}>{item.label}</Select.Item>\n\t\t\t\t\t{/each}\n\t\t\t\t</Select.Group>\n\t\t\t</Select.Content>\n\t\t</Select.Root>\n\t\t<Select.Root type=\"single\" bind:value={selectedValueDefault}>\n\t\t\t<Select.Trigger size=\"default\">\n\t\t\t\t{selectedLabelDefault}\n\t\t\t</Select.Trigger>\n\t\t\t<Select.Content>\n\t\t\t\t<Select.Group>\n\t\t\t\t\t{#each items as item (item.value)}\n\t\t\t\t\t\t<Select.Item value={item.value}>{item.label}</Select.Item>\n\t\t\t\t\t{/each}\n\t\t\t\t</Select.Group>\n\t\t\t</Select.Content>\n\t\t</Select.Root>\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/select/select-with-button.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Select from \"$lib/registry/ui/select/index.js\";\n\timport * as Button from \"$lib/registry/ui/button/index.js\";\n\n\tconst items = [\n\t\t{ label: \"Apple\", value: \"apple\" },\n\t\t{ label: \"Banana\", value: \"banana\" },\n\t\t{ label: \"Blueberry\", value: \"blueberry\" },\n\t];\n\n\tlet selectedValueSm = $state<string | undefined>(undefined);\n\tlet selectedValueDefault = $state<string | undefined>(undefined);\n\tconst selectedLabelSm = $derived(\n\t\titems.find((item) => item.value === selectedValueSm)?.label ?? \"Small\"\n\t);\n\tconst selectedLabelDefault = $derived(\n\t\titems.find((item) => item.value === selectedValueDefault)?.label ?? \"Default\"\n\t);\n</script>\n\n<Example title=\"With Button\">\n\t<div class=\"flex flex-col gap-4\">\n\t\t<div class=\"flex items-center gap-2\">\n\t\t\t<Select.Root type=\"single\" bind:value={selectedValueSm}>\n\t\t\t\t<Select.Trigger size=\"sm\">\n\t\t\t\t\t{selectedLabelSm}\n\t\t\t\t</Select.Trigger>\n\t\t\t\t<Select.Content>\n\t\t\t\t\t<Select.Group>\n\t\t\t\t\t\t{#each items as item (item.value)}\n\t\t\t\t\t\t\t<Select.Item value={item.value}>{item.label}</Select.Item>\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</Select.Group>\n\t\t\t\t</Select.Content>\n\t\t\t</Select.Root>\n\t\t\t<Button.Root variant=\"outline\" size=\"sm\">Submit</Button.Root>\n\t\t</div>\n\t\t<div class=\"flex items-center gap-2\">\n\t\t\t<Select.Root type=\"single\" bind:value={selectedValueDefault}>\n\t\t\t\t<Select.Trigger>\n\t\t\t\t\t{selectedLabelDefault}\n\t\t\t\t</Select.Trigger>\n\t\t\t\t<Select.Content>\n\t\t\t\t\t<Select.Group>\n\t\t\t\t\t\t{#each items as item (item.value)}\n\t\t\t\t\t\t\t<Select.Item value={item.value}>{item.label}</Select.Item>\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</Select.Group>\n\t\t\t\t</Select.Content>\n\t\t\t</Select.Root>\n\t\t\t<Button.Root variant=\"outline\">Submit</Button.Root>\n\t\t</div>\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/select/select-with-field.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Select from \"$lib/registry/ui/select/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\n\tconst items = [\n\t\t{ label: \"Apple\", value: \"apple\" },\n\t\t{ label: \"Banana\", value: \"banana\" },\n\t\t{ label: \"Blueberry\", value: \"blueberry\" },\n\t\t{ label: \"Grapes\", value: \"grapes\" },\n\t\t{ label: \"Pineapple\", value: \"pineapple\" },\n\t];\n\n\tlet selectedValue = $state<string | undefined>(undefined);\n\tconst selectedLabel = $derived(\n\t\titems.find((item) => item.value === selectedValue)?.label ?? \"Select a fruit\"\n\t);\n</script>\n\n<Example title=\"With Field\">\n\t<Field.Field>\n\t\t<Field.Label for=\"select-fruit\">Favorite Fruit</Field.Label>\n\t\t<Select.Root type=\"single\" bind:value={selectedValue}>\n\t\t\t<Select.Trigger id=\"select-fruit\">\n\t\t\t\t{selectedLabel}\n\t\t\t</Select.Trigger>\n\t\t\t<Select.Content>\n\t\t\t\t<Select.Group>\n\t\t\t\t\t{#each items as item (item.value)}\n\t\t\t\t\t\t<Select.Item value={item.value}>{item.label}</Select.Item>\n\t\t\t\t\t{/each}\n\t\t\t\t</Select.Group>\n\t\t\t</Select.Content>\n\t\t</Select.Root>\n\t\t<Field.Description>Choose your favorite fruit from the list.</Field.Description>\n\t</Field.Field>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/select/select-with-groups.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Select from \"$lib/registry/ui/select/index.js\";\n\n\tconst fruits = [\n\t\t{ label: \"Apple\", value: \"apple\" },\n\t\t{ label: \"Banana\", value: \"banana\" },\n\t\t{ label: \"Blueberry\", value: \"blueberry\" },\n\t];\n\tconst vegetables = [\n\t\t{ label: \"Carrot\", value: \"carrot\" },\n\t\t{ label: \"Broccoli\", value: \"broccoli\" },\n\t\t{ label: \"Spinach\", value: \"spinach\" },\n\t];\n\tlet selectedValue = $state<string | undefined>(undefined);\n\tconst selectedLabel = $derived(\n\t\t[...fruits, ...vegetables].find((item) => item.value === selectedValue)?.label ??\n\t\t\t\"Select a fruit\"\n\t);\n</script>\n\n<Example title=\"With Groups & Labels\">\n\t<Select.Root type=\"single\" bind:value={selectedValue}>\n\t\t<Select.Trigger>\n\t\t\t{selectedLabel}\n\t\t</Select.Trigger>\n\t\t<Select.Content>\n\t\t\t<Select.Group>\n\t\t\t\t<Select.Label>Fruits</Select.Label>\n\t\t\t\t{#each fruits as item (item.value)}\n\t\t\t\t\t<Select.Item value={item.value}>{item.label}</Select.Item>\n\t\t\t\t{/each}\n\t\t\t</Select.Group>\n\t\t\t<Select.Separator />\n\t\t\t<Select.Group>\n\t\t\t\t<Select.Label>Vegetables</Select.Label>\n\t\t\t\t{#each vegetables as item (item.value)}\n\t\t\t\t\t<Select.Item value={item.value}>{item.label}</Select.Item>\n\t\t\t\t{/each}\n\t\t\t</Select.Group>\n\t\t</Select.Content>\n\t</Select.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/select/select-with-icons.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Select from \"$lib/registry/ui/select/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\n\tconst items = $derived([\n\t\t{ label: \"Line\", value: \"line\", icon: chartLineIcon },\n\t\t{ label: \"Bar\", value: \"bar\", icon: chartBarIcon },\n\t\t{ label: \"Pie\", value: \"pie\", icon: chartPieIcon },\n\t]);\n\n\tlet selectedValueSm = $state<string | undefined>(undefined);\n\tlet selectedValueDefault = $state<string | undefined>(undefined);\n\tconst selectedItemSm = $derived(items.find((item) => item.value === selectedValueSm));\n\tconst selectedItemDefault = $derived(items.find((item) => item.value === selectedValueDefault));\n</script>\n\n<Example title=\"With Icons\">\n\t<div class=\"flex flex-col gap-4\">\n\t\t<Select.Root type=\"single\" bind:value={selectedValueSm}>\n\t\t\t<Select.Trigger size=\"sm\">\n\t\t\t\t{#if selectedItemSm}\n\t\t\t\t\t{@render selectedItemSm.icon()}\n\t\t\t\t{/if}\n\t\t\t\t{selectedItemSm?.label ?? \"Chart Type\"}\n\t\t\t</Select.Trigger>\n\t\t\t<Select.Content>\n\t\t\t\t<Select.Group>\n\t\t\t\t\t{#each items as item (item.value)}\n\t\t\t\t\t\t<Select.Item value={item.value}>\n\t\t\t\t\t\t\t{@render item.icon()}\n\t\t\t\t\t\t\t{item.label}\n\t\t\t\t\t\t</Select.Item>\n\t\t\t\t\t{/each}\n\t\t\t\t</Select.Group>\n\t\t\t</Select.Content>\n\t\t</Select.Root>\n\t\t<Select.Root type=\"single\" bind:value={selectedValueDefault}>\n\t\t\t<Select.Trigger size=\"default\">\n\t\t\t\t{#if selectedItemDefault}\n\t\t\t\t\t{@render selectedItemDefault.icon()}\n\t\t\t\t{/if}\n\t\t\t\t{selectedItemDefault?.label ?? \"Chart Type\"}\n\t\t\t</Select.Trigger>\n\t\t\t<Select.Content>\n\t\t\t\t<Select.Group>\n\t\t\t\t\t{#each items as item (item.value)}\n\t\t\t\t\t\t<Select.Item value={item.value}>\n\t\t\t\t\t\t\t{@render item.icon()}\n\t\t\t\t\t\t\t{item.label}\n\t\t\t\t\t\t</Select.Item>\n\t\t\t\t\t{/each}\n\t\t\t\t</Select.Group>\n\t\t\t</Select.Content>\n\t\t</Select.Root>\n\t</div>\n</Example>\n\n{#snippet chartLineIcon()}\n\t<IconPlaceholder\n\t\tlucide=\"ChartLineIcon\"\n\t\ttabler=\"IconChartLine\"\n\t\thugeicons=\"Chart03Icon\"\n\t\tphosphor=\"ChartLineIcon\"\n\t\tremixicon=\"RiLineChartLine\"\n\t/>\n{/snippet}\n\n{#snippet chartBarIcon()}\n\t<IconPlaceholder\n\t\tlucide=\"ChartBarIcon\"\n\t\ttabler=\"IconChartBar\"\n\t\thugeicons=\"Chart03Icon\"\n\t\tphosphor=\"ChartBarIcon\"\n\t\tremixicon=\"RiBarChartLine\"\n\t/>\n{/snippet}\n\n{#snippet chartPieIcon()}\n\t<IconPlaceholder\n\t\tlucide=\"ChartPieIcon\"\n\t\ttabler=\"IconChartPie\"\n\t\thugeicons=\"Chart03Icon\"\n\t\tphosphor=\"ChartPieIcon\"\n\t\tremixicon=\"RiPieChartLine\"\n\t/>\n{/snippet}\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/select/select.svelte",
    "content": "<script lang=\"ts\">\n\timport ExampleWrapper from \"../../../../../routes/(app)/(layout)/(create)/components/example-wrapper.svelte\";\n\timport SelectBasic from \"./select-basic.svelte\";\n\timport SelectWithIcons from \"./select-with-icons.svelte\";\n\timport SelectWithGroups from \"./select-with-groups.svelte\";\n\timport SelectLargeList from \"./select-large-list.svelte\";\n\timport SelectSizes from \"./select-sizes.svelte\";\n\timport SelectPlan from \"./select-plan.svelte\";\n\timport SelectWithButton from \"./select-with-button.svelte\";\n\timport SelectItemAligned from \"./select-item-aligned.svelte\";\n\timport SelectWithField from \"./select-with-field.svelte\";\n\timport SelectInvalid from \"./select-invalid.svelte\";\n\timport SelectInline from \"./select-inline.svelte\";\n\timport SelectDisabled from \"./select-disabled.svelte\";\n\timport SelectInDialog from \"./select-in-dialog.svelte\";\n</script>\n\n<ExampleWrapper>\n\t<SelectBasic />\n\t<SelectWithIcons />\n\t<SelectWithGroups />\n\t<SelectLargeList />\n\t<SelectSizes />\n\t<SelectPlan />\n\t<SelectWithButton />\n\t<SelectItemAligned />\n\t<SelectWithField />\n\t<SelectInvalid />\n\t<SelectInline />\n\t<SelectDisabled />\n\t<SelectInDialog />\n</ExampleWrapper>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/separator/separator-horizontal.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Separator } from \"$lib/registry/ui/separator/index.js\";\n</script>\n\n<Example title=\"Horizontal\">\n\t<div class=\"style-lyra:text-xs/relaxed flex flex-col gap-4 text-sm\">\n\t\t<div class=\"flex flex-col gap-1\">\n\t\t\t<div class=\"leading-none font-medium\">shadcn/ui</div>\n\t\t\t<div class=\"text-muted-foreground\">The Foundation for your Design System</div>\n\t\t</div>\n\t\t<Separator />\n\t\t<div>\n\t\t\tA set of beautifully designed components that you can customize, extend, and build on.\n\t\t</div>\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/separator/separator-in-list.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Separator } from \"$lib/registry/ui/separator/index.js\";\n</script>\n\n<Example title=\"In List\">\n\t<div class=\"style-lyra:text-xs/relaxed flex flex-col gap-2 text-sm\">\n\t\t<dl class=\"flex items-center justify-between\">\n\t\t\t<dt>Item 1</dt>\n\t\t\t<dd class=\"text-muted-foreground\">Value 1</dd>\n\t\t</dl>\n\t\t<Separator />\n\t\t<dl class=\"flex items-center justify-between\">\n\t\t\t<dt>Item 2</dt>\n\t\t\t<dd class=\"text-muted-foreground\">Value 2</dd>\n\t\t</dl>\n\t\t<Separator />\n\t\t<dl class=\"flex items-center justify-between\">\n\t\t\t<dt>Item 3</dt>\n\t\t\t<dd class=\"text-muted-foreground\">Value 3</dd>\n\t\t</dl>\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/separator/separator-vertical-menu.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Separator } from \"$lib/registry/ui/separator/index.js\";\n</script>\n\n<Example title=\"Vertical Menu\">\n\t<div class=\"style-lyra:text-xs/relaxed flex items-center gap-2 text-sm md:gap-4\">\n\t\t<div class=\"flex flex-col gap-1\">\n\t\t\t<span class=\"font-medium\">Settings</span>\n\t\t\t<span class=\"text-muted-foreground text-xs\"> Manage preferences </span>\n\t\t</div>\n\t\t<Separator orientation=\"vertical\" />\n\t\t<div class=\"flex flex-col gap-1\">\n\t\t\t<span class=\"font-medium\">Account</span>\n\t\t\t<span class=\"text-muted-foreground text-xs\"> Profile & security </span>\n\t\t</div>\n\t\t<Separator orientation=\"vertical\" />\n\t\t<div class=\"flex flex-col gap-1\">\n\t\t\t<span class=\"font-medium\">Help</span>\n\t\t\t<span class=\"text-muted-foreground text-xs\">Support & docs</span>\n\t\t</div>\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/separator/separator-vertical.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Separator } from \"$lib/registry/ui/separator/index.js\";\n</script>\n\n<Example title=\"Vertical\">\n\t<div class=\"style-lyra:text-xs/relaxed flex h-5 items-center gap-4 text-sm\">\n\t\t<div>Blog</div>\n\t\t<Separator orientation=\"vertical\" />\n\t\t<div>Docs</div>\n\t\t<Separator orientation=\"vertical\" />\n\t\t<div>Source</div>\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/separator/separator.svelte",
    "content": "<script lang=\"ts\">\n\timport ExampleWrapper from \"../../../../../routes/(app)/(layout)/(create)/components/example-wrapper.svelte\";\n\timport SeparatorHorizontal from \"./separator-horizontal.svelte\";\n\timport SeparatorVertical from \"./separator-vertical.svelte\";\n\timport SeparatorVerticalMenu from \"./separator-vertical-menu.svelte\";\n\timport SeparatorInList from \"./separator-in-list.svelte\";\n</script>\n\n<ExampleWrapper>\n\t<SeparatorHorizontal />\n\t<SeparatorVertical />\n\t<SeparatorVerticalMenu />\n\t<SeparatorInList />\n</ExampleWrapper>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/sheet/sheet-no-close-button.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Sheet from \"$lib/registry/ui/sheet/index.js\";\n</script>\n\n<Example title=\"No Close Button\">\n\t<Sheet.Root>\n\t\t<Sheet.Trigger>\n\t\t\t{#snippet child({ props })}\n\t\t\t\t<Button variant=\"outline\" {...props}>No Close Button</Button>\n\t\t\t{/snippet}\n\t\t</Sheet.Trigger>\n\t\t<Sheet.Content showCloseButton={false}>\n\t\t\t<Sheet.Header>\n\t\t\t\t<Sheet.Title>No Close Button</Sheet.Title>\n\t\t\t\t<Sheet.Description>\n\t\t\t\t\tThis sheet doesn't have a close button in the top-right corner. You can only\n\t\t\t\t\tclose it using the button below.\n\t\t\t\t</Sheet.Description>\n\t\t\t</Sheet.Header>\n\t\t</Sheet.Content>\n\t</Sheet.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/sheet/sheet-with-form.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Sheet from \"$lib/registry/ui/sheet/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport { Input } from \"$lib/registry/ui/input/index.js\";\n</script>\n\n<Example title=\"With Form\">\n\t<Sheet.Root>\n\t\t<Sheet.Trigger>\n\t\t\t{#snippet child({ props })}\n\t\t\t\t<Button variant=\"outline\" {...props}>Open</Button>\n\t\t\t{/snippet}\n\t\t</Sheet.Trigger>\n\t\t<Sheet.Content>\n\t\t\t<Sheet.Header>\n\t\t\t\t<Sheet.Title>Edit profile</Sheet.Title>\n\t\t\t\t<Sheet.Description>\n\t\t\t\t\tMake changes to your profile here. Click save when you&apos;re done.\n\t\t\t\t</Sheet.Description>\n\t\t\t</Sheet.Header>\n\t\t\t<div\n\t\t\t\tclass=\"style-vega:px-4 style-maia:px-6 style-mira:px-6 style-lyra:px-4 style-nova:px-4\"\n\t\t\t>\n\t\t\t\t<Field.Group>\n\t\t\t\t\t<Field.Field>\n\t\t\t\t\t\t<Field.Label for=\"sheet-demo-name\">Name</Field.Label>\n\t\t\t\t\t\t<Input id=\"sheet-demo-name\" value=\"Pedro Duarte\" />\n\t\t\t\t\t</Field.Field>\n\t\t\t\t\t<Field.Field>\n\t\t\t\t\t\t<Field.Label for=\"sheet-demo-username\">Username</Field.Label>\n\t\t\t\t\t\t<Input id=\"sheet-demo-username\" value=\"@peduarte\" />\n\t\t\t\t\t</Field.Field>\n\t\t\t\t</Field.Group>\n\t\t\t</div>\n\t\t\t<Sheet.Footer>\n\t\t\t\t<Button type=\"submit\">Save changes</Button>\n\t\t\t\t<Sheet.Close>\n\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t<Button variant=\"outline\" {...props}>Close</Button>\n\t\t\t\t\t{/snippet}\n\t\t\t\t</Sheet.Close>\n\t\t\t</Sheet.Footer>\n\t\t</Sheet.Content>\n\t</Sheet.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/sheet/sheet-with-sides.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Sheet from \"$lib/registry/ui/sheet/index.js\";\n</script>\n\n<Example title=\"Sides\">\n\t<div class=\"flex flex-wrap gap-2\">\n\t\t{#each [\"top\", \"right\", \"bottom\", \"left\"] as const as side (side)}\n\t\t\t<Sheet.Root>\n\t\t\t\t<Sheet.Trigger>\n\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t<Button variant=\"outline\" class=\"capitalize\" {...props}>\n\t\t\t\t\t\t\t{side}\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t{/snippet}\n\t\t\t\t</Sheet.Trigger>\n\t\t\t\t<Sheet.Content\n\t\t\t\t\t{side}\n\t\t\t\t\tclass=\"data-[side=bottom]:max-h-[50vh] data-[side=top]:max-h-[50vh]\"\n\t\t\t\t>\n\t\t\t\t\t<Sheet.Header>\n\t\t\t\t\t\t<Sheet.Title>Edit profile</Sheet.Title>\n\t\t\t\t\t\t<Sheet.Description>\n\t\t\t\t\t\t\tMake changes to your profile here. Click save when you&apos;re done.\n\t\t\t\t\t\t</Sheet.Description>\n\t\t\t\t\t</Sheet.Header>\n\t\t\t\t\t<div\n\t\t\t\t\t\tclass=\"no-scrollbar style-vega:px-4 style-maia:px-6 style-mira:px-6 style-lyra:px-4 style-nova:px-4 overflow-y-auto\"\n\t\t\t\t\t>\n\t\t\t\t\t\t{#each Array.from({ length: 10 }) as _, index (index)}\n\t\t\t\t\t\t\t<p\n\t\t\t\t\t\t\t\tclass=\"style-lyra:mb-2 style-lyra:leading-relaxed mb-4 leading-normal\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tLorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do\n\t\t\t\t\t\t\t\teiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim\n\t\t\t\t\t\t\t\tad minim veniam, quis nostrud exercitation ullamco laboris nisi ut\n\t\t\t\t\t\t\t\taliquip ex ea commodo consequat. Duis aute irure dolor in\n\t\t\t\t\t\t\t\treprehenderit in voluptate velit esse cillum dolore eu fugiat nulla\n\t\t\t\t\t\t\t\tpariatur. Excepteur sint occaecat cupidatat non proident, sunt in\n\t\t\t\t\t\t\t\tculpa qui officia deserunt mollit anim id est laborum.\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</div>\n\t\t\t\t\t<Sheet.Footer>\n\t\t\t\t\t\t<Button type=\"submit\">Save changes</Button>\n\t\t\t\t\t\t<Sheet.Close>\n\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t<Button variant=\"outline\" {...props}>Cancel</Button>\n\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t</Sheet.Close>\n\t\t\t\t\t</Sheet.Footer>\n\t\t\t\t</Sheet.Content>\n\t\t\t</Sheet.Root>\n\t\t{/each}\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/sheet/sheet.svelte",
    "content": "<script lang=\"ts\">\n\timport ExampleWrapper from \"../../../../../routes/(app)/(layout)/(create)/components/example-wrapper.svelte\";\n\timport SheetWithForm from \"./sheet-with-form.svelte\";\n\timport SheetNoCloseButton from \"./sheet-no-close-button.svelte\";\n\timport SheetWithSides from \"./sheet-with-sides.svelte\";\n</script>\n\n<ExampleWrapper>\n\t<SheetWithForm />\n\t<SheetNoCloseButton />\n\t<SheetWithSides />\n</ExampleWrapper>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/sidebar/sidebar.svelte",
    "content": "<script lang=\"ts\">\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\timport * as Item from \"$lib/registry/ui/item/index.js\";\n\timport { Label } from \"$lib/registry/ui/label/index.js\";\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\n\tconst data = {\n\t\tversions: [\"1.0.1\", \"1.1.0-alpha\", \"2.0.0-beta1\"],\n\t\tnavMain: [\n\t\t\t{\n\t\t\t\ttitle: \"Getting Started\",\n\t\t\t\turl: \"#\",\n\t\t\t\titems: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Installation\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Project Structure\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"Build Your Application\",\n\t\t\t\turl: \"#\",\n\t\t\t\titems: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Routing\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Data Fetching\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t\tisActive: true,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Rendering\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Caching\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Styling\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Optimizing\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Configuring\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Testing\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Authentication\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Deploying\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Upgrading\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Examples\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"API Reference\",\n\t\t\t\turl: \"#\",\n\t\t\t\titems: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Components\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"File Conventions\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Functions\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"next.config.js Options\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"CLI\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Edge Runtime\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"Architecture\",\n\t\t\t\turl: \"#\",\n\t\t\t\titems: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Accessibility\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Fast Refresh\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Next.js Compiler\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Supported Browsers\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Turbopack\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t};\n\n\tlet selectedVersion = $state(data.versions[0]);\n</script>\n\n<Sidebar.Provider>\n\t<Sidebar.Root>\n\t\t<Sidebar.Header>\n\t\t\t<Sidebar.Menu>\n\t\t\t\t<Sidebar.MenuItem>\n\t\t\t\t\t<DropdownMenu.Root>\n\t\t\t\t\t\t<DropdownMenu.Trigger>\n\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t<Sidebar.MenuButton\n\t\t\t\t\t\t\t\t\tsize=\"lg\"\n\t\t\t\t\t\t\t\t\tclass=\"data-[state=open]:bg-sidebar-accent data-[state=open]:text-sidebar-accent-foreground\"\n\t\t\t\t\t\t\t\t\t{...props}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<Item.Root class=\"p-0\" size=\"xs\">\n\t\t\t\t\t\t\t\t\t\t<Item.Content>\n\t\t\t\t\t\t\t\t\t\t\t<Item.Title class=\"text-sm\">Documentation</Item.Title>\n\t\t\t\t\t\t\t\t\t\t\t<Item.Description>v{selectedVersion}</Item.Description>\n\t\t\t\t\t\t\t\t\t\t</Item.Content>\n\t\t\t\t\t\t\t\t\t\t<Item.Actions>\n\t\t\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\t\t\tlucide=\"ChevronsUpDownIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\ttabler=\"IconSelector\"\n\t\t\t\t\t\t\t\t\t\t\t\thugeicons=\"UnfoldMoreIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\tphosphor=\"CaretUpDownIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\tremixicon=\"RiArrowUpDownLine\"\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t</Item.Actions>\n\t\t\t\t\t\t\t\t\t</Item.Root>\n\t\t\t\t\t\t\t\t</Sidebar.MenuButton>\n\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t</DropdownMenu.Trigger>\n\t\t\t\t\t\t<DropdownMenu.Content>\n\t\t\t\t\t\t\t{#each data.versions as version (version)}\n\t\t\t\t\t\t\t\t<DropdownMenu.Item onSelect={() => (selectedVersion = version)}>\n\t\t\t\t\t\t\t\t\tv{version}\n\t\t\t\t\t\t\t\t\t{#if version === selectedVersion}\n\t\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\t\tlucide=\"CheckIcon\"\n\t\t\t\t\t\t\t\t\t\t\ttabler=\"IconCheck\"\n\t\t\t\t\t\t\t\t\t\t\thugeicons=\"Tick02Icon\"\n\t\t\t\t\t\t\t\t\t\t\tphosphor=\"CheckIcon\"\n\t\t\t\t\t\t\t\t\t\t\tremixicon=\"RiCheckLine\"\n\t\t\t\t\t\t\t\t\t\t\tclass=\"ml-auto\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t</DropdownMenu.Content>\n\t\t\t\t\t</DropdownMenu.Root>\n\t\t\t\t</Sidebar.MenuItem>\n\t\t\t</Sidebar.Menu>\n\t\t\t<form>\n\t\t\t\t<Sidebar.Group class=\"py-0\">\n\t\t\t\t\t<Sidebar.GroupContent class=\"relative\">\n\t\t\t\t\t\t<Label for=\"search\" class=\"sr-only\">Search</Label>\n\t\t\t\t\t\t<Sidebar.Input id=\"search\" placeholder=\"Search the docs...\" class=\"pl-8\" />\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"SearchIcon\"\n\t\t\t\t\t\t\ttabler=\"IconSearch\"\n\t\t\t\t\t\t\thugeicons=\"SearchIcon\"\n\t\t\t\t\t\t\tphosphor=\"MagnifyingGlassIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiSearchLine\"\n\t\t\t\t\t\t\tclass=\"pointer-events-none absolute top-1/2 left-2 size-4 -translate-y-1/2 opacity-50 select-none\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Sidebar.GroupContent>\n\t\t\t\t</Sidebar.Group>\n\t\t\t</form>\n\t\t</Sidebar.Header>\n\t\t<Sidebar.Content>\n\t\t\t{#each data.navMain as item (item.title)}\n\t\t\t\t<Sidebar.Group>\n\t\t\t\t\t<Sidebar.GroupLabel>{item.title}</Sidebar.GroupLabel>\n\t\t\t\t\t<Sidebar.GroupContent>\n\t\t\t\t\t\t<Sidebar.Menu>\n\t\t\t\t\t\t\t{#each item.items as subItem (subItem.title)}\n\t\t\t\t\t\t\t\t<Sidebar.MenuItem>\n\t\t\t\t\t\t\t\t\t<Sidebar.MenuButton isActive={subItem.isActive}>\n\t\t\t\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t\t\t\t<a href={subItem.url} {...props}>{subItem.title}</a>\n\t\t\t\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t\t\t\t</Sidebar.MenuButton>\n\t\t\t\t\t\t\t\t</Sidebar.MenuItem>\n\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t</Sidebar.Menu>\n\t\t\t\t\t</Sidebar.GroupContent>\n\t\t\t\t</Sidebar.Group>\n\t\t\t{/each}\n\t\t</Sidebar.Content>\n\t\t<Sidebar.Rail />\n\t</Sidebar.Root>\n\t<Sidebar.Inset>\n\t\t<header class=\"flex h-16 shrink-0 items-center gap-2 px-4\">\n\t\t\t<Sidebar.Trigger class=\"-ml-1\" />\n\t\t</header>\n\t\t<div class=\"flex flex-1 flex-col gap-4 p-4\">\n\t\t\t<div class=\"grid auto-rows-min gap-4 md:grid-cols-3\">\n\t\t\t\t<div class=\"bg-muted/50 aspect-video rounded-xl\"></div>\n\t\t\t\t<div class=\"bg-muted/50 aspect-video rounded-xl\"></div>\n\t\t\t\t<div class=\"bg-muted/50 aspect-video rounded-xl\"></div>\n\t\t\t</div>\n\t\t\t<div class=\"bg-muted/50 min-h-screen flex-1 rounded-xl md:min-h-min\"></div>\n\t\t</div>\n\t</Sidebar.Inset>\n</Sidebar.Provider>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/sidebar-floating/sidebar-floating.svelte",
    "content": "<script lang=\"ts\">\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport * as Item from \"$lib/registry/ui/item/index.js\";\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\n\tconst data = {\n\t\tnavMain: [\n\t\t\t{\n\t\t\t\ttitle: \"Getting Started\",\n\t\t\t\turl: \"#\",\n\t\t\t\titems: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Installation\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Project Structure\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"Build Your Application\",\n\t\t\t\turl: \"#\",\n\t\t\t\titems: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Routing\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Data Fetching\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t\tisActive: true,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Rendering\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Caching\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Styling\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Optimizing\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Configuring\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Testing\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Authentication\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Deploying\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Upgrading\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Examples\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"API Reference\",\n\t\t\t\turl: \"#\",\n\t\t\t\titems: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Components\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"File Conventions\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Functions\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"next.config.js Options\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"CLI\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Edge Runtime\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"Architecture\",\n\t\t\t\turl: \"#\",\n\t\t\t\titems: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Accessibility\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Fast Refresh\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Next.js Compiler\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Supported Browsers\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Turbopack\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t};\n</script>\n\n<Sidebar.Provider class=\"bg-background\">\n\t<Sidebar.Root variant=\"floating\" class=\"absolute\">\n\t\t<Sidebar.Header>\n\t\t\t<Sidebar.Menu>\n\t\t\t\t<Sidebar.MenuItem>\n\t\t\t\t\t<Sidebar.MenuButton size=\"lg\">\n\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t<a href=\"/\" {...props}>\n\t\t\t\t\t\t\t\t<Item.Root class=\"p-0\" size=\"xs\">\n\t\t\t\t\t\t\t\t\t<Item.Content>\n\t\t\t\t\t\t\t\t\t\t<Item.Title class=\"text-sm\">Documentation</Item.Title>\n\t\t\t\t\t\t\t\t\t\t<Item.Description>v1.0.0</Item.Description>\n\t\t\t\t\t\t\t\t\t</Item.Content>\n\t\t\t\t\t\t\t\t</Item.Root>\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t</Sidebar.MenuButton>\n\t\t\t\t</Sidebar.MenuItem>\n\t\t\t</Sidebar.Menu>\n\t\t</Sidebar.Header>\n\t\t<Sidebar.Content>\n\t\t\t<Sidebar.Group>\n\t\t\t\t<Sidebar.Menu>\n\t\t\t\t\t{#each data.navMain as item (item.title)}\n\t\t\t\t\t\t<DropdownMenu.Root>\n\t\t\t\t\t\t\t<Sidebar.MenuItem>\n\t\t\t\t\t\t\t\t<DropdownMenu.Trigger>\n\t\t\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t\t\t<Sidebar.MenuButton\n\t\t\t\t\t\t\t\t\t\t\tclass=\"data-popup-open:bg-sidebar-accent data-popup-open:text-sidebar-accent-foreground\"\n\t\t\t\t\t\t\t\t\t\t\t{...props}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{item.title}\n\t\t\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\t\t\tlucide=\"MoreHorizontalIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\ttabler=\"IconDots\"\n\t\t\t\t\t\t\t\t\t\t\t\thugeicons=\"MoreHorizontalCircle01Icon\"\n\t\t\t\t\t\t\t\t\t\t\t\tphosphor=\"DotsThreeOutlineIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\tremixicon=\"RiMoreLine\"\n\t\t\t\t\t\t\t\t\t\t\t\tclass=\"ml-auto\"\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t</Sidebar.MenuButton>\n\t\t\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t\t\t</DropdownMenu.Trigger>\n\t\t\t\t\t\t\t\t{#if item.items?.length}\n\t\t\t\t\t\t\t\t\t<DropdownMenu.Content side=\"right\" align=\"start\">\n\t\t\t\t\t\t\t\t\t\t<DropdownMenu.Group>\n\t\t\t\t\t\t\t\t\t\t\t{#each item.items as subItem (subItem.title)}\n\t\t\t\t\t\t\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href={subItem.url} {...props}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t>{subItem.title}</a\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t\t\t\t</DropdownMenu.Group>\n\t\t\t\t\t\t\t\t\t</DropdownMenu.Content>\n\t\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\t</Sidebar.MenuItem>\n\t\t\t\t\t\t</DropdownMenu.Root>\n\t\t\t\t\t{/each}\n\t\t\t\t</Sidebar.Menu>\n\t\t\t</Sidebar.Group>\n\t\t</Sidebar.Content>\n\t\t<Sidebar.Footer>\n\t\t\t<Sidebar.Group>\n\t\t\t\t<Card.Root size=\"sm\" class=\"-mx-2\">\n\t\t\t\t\t<Card.Header>\n\t\t\t\t\t\t<Card.Title class=\"text-sm\">Subscribe to our newsletter</Card.Title>\n\t\t\t\t\t\t<Card.Description>\n\t\t\t\t\t\t\tOpt-in to receive updates and news about the sidebar.\n\t\t\t\t\t\t</Card.Description>\n\t\t\t\t\t</Card.Header>\n\t\t\t\t\t<Card.Content>\n\t\t\t\t\t\t<form>\n\t\t\t\t\t\t\t<Field.Field>\n\t\t\t\t\t\t\t\t<Sidebar.Input type=\"email\" placeholder=\"Email\" />\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\tclass=\"bg-sidebar-primary text-sidebar-primary-foreground w-full\"\n\t\t\t\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\tSubscribe\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t</Field.Field>\n\t\t\t\t\t\t</form>\n\t\t\t\t\t</Card.Content>\n\t\t\t\t</Card.Root>\n\t\t\t</Sidebar.Group>\n\t\t</Sidebar.Footer>\n\t\t<Sidebar.Rail />\n\t</Sidebar.Root>\n\t<Sidebar.Inset>\n\t\t<header class=\"flex h-16 shrink-0 items-center gap-2 px-4\">\n\t\t\t<Sidebar.Trigger class=\"-ml-1\" />\n\t\t</header>\n\t\t<div class=\"flex flex-1 flex-col gap-4 p-4 pt-0\">\n\t\t\t<div class=\"grid auto-rows-min gap-4 md:grid-cols-3\">\n\t\t\t\t<div class=\"bg-muted/50 aspect-video rounded-xl\"></div>\n\t\t\t\t<div class=\"bg-muted/50 aspect-video rounded-xl\"></div>\n\t\t\t\t<div class=\"bg-muted/50 aspect-video rounded-xl\"></div>\n\t\t\t</div>\n\t\t\t<div class=\"bg-muted/50 min-h-screen flex-1 rounded-xl md:min-h-min\"></div>\n\t\t</div>\n\t</Sidebar.Inset>\n</Sidebar.Provider>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/sidebar-icon/sidebar-icon.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Avatar from \"$lib/registry/ui/avatar/index.js\";\n\timport * as Collapsible from \"$lib/registry/ui/collapsible/index.js\";\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\timport * as Item from \"$lib/registry/ui/item/index.js\";\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\timport { buttonVariants } from \"$lib/registry/ui/button/button.svelte\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tconst data = {\n\t\tuser: {\n\t\t\tname: \"shadcn\",\n\t\t\temail: \"m@example.com\",\n\t\t\tavatar: \"/avatars/shadcn.jpg\",\n\t\t},\n\t\tteams: [\n\t\t\t{\n\t\t\t\tname: \"Acme Inc\",\n\t\t\t\tplan: \"Enterprise\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"Acme Corp.\",\n\t\t\t\tplan: \"Startup\",\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"Evil Corp.\",\n\t\t\t\tplan: \"Free\",\n\t\t\t},\n\t\t],\n\t\tnavMain: [\n\t\t\t{\n\t\t\t\ttitle: \"Playground\",\n\t\t\t\turl: \"#\",\n\t\t\t\ticon: iconPlayground,\n\t\t\t\tisActive: true,\n\t\t\t\titems: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"History\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Starred\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Settings\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"Models\",\n\t\t\t\turl: \"#\",\n\t\t\t\ticon: iconModels,\n\t\t\t\titems: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Genesis\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Explorer\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Quantum\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"Documentation\",\n\t\t\t\turl: \"#\",\n\t\t\t\ticon: iconDocumentation,\n\t\t\t\titems: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Introduction\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Get Started\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Tutorials\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Changelog\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"Settings\",\n\t\t\t\turl: \"#\",\n\t\t\t\ticon: iconSettings,\n\t\t\t\titems: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"General\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Team\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Billing\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Limits\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t\tprojects: [\n\t\t\t{\n\t\t\t\tname: \"Design Engineering\",\n\t\t\t\turl: \"#\",\n\t\t\t\ticon: iconDesignEngineering,\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"Sales & Marketing\",\n\t\t\t\turl: \"#\",\n\t\t\t\ticon: iconSalesMarketing,\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"Travel\",\n\t\t\t\turl: \"#\",\n\t\t\t\ticon: iconTravel,\n\t\t\t},\n\t\t],\n\t};\n\n\tlet activeTeam = $state(data.teams[0]);\n</script>\n\n<Sidebar.Provider>\n\t<Sidebar.Root collapsible=\"icon\" class=\"absolute\">\n\t\t<Sidebar.Header>\n\t\t\t<Sidebar.Menu>\n\t\t\t\t<Sidebar.MenuItem>\n\t\t\t\t\t<DropdownMenu.Root>\n\t\t\t\t\t\t<DropdownMenu.Trigger>\n\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t<Sidebar.MenuButton\n\t\t\t\t\t\t\t\t\tsize=\"lg\"\n\t\t\t\t\t\t\t\t\tclass=\"data-[state=open]:bg-sidebar-accent data-[state=open]:text-sidebar-accent-foreground\"\n\t\t\t\t\t\t\t\t\t{...props}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<div class={cn(buttonVariants({ size: \"icon-sm\" }), \"size-8\")}>\n\t\t\t\t\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\t\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\t\t\t\t\t\t\t\t\tviewBox=\"0 0 256 256\"\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t<rect width=\"256\" height=\"256\" fill=\"none\"></rect>\n\t\t\t\t\t\t\t\t\t\t\t<line\n\t\t\t\t\t\t\t\t\t\t\t\tx1=\"208\"\n\t\t\t\t\t\t\t\t\t\t\t\ty1=\"128\"\n\t\t\t\t\t\t\t\t\t\t\t\tx2=\"128\"\n\t\t\t\t\t\t\t\t\t\t\t\ty2=\"208\"\n\t\t\t\t\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\t\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\t\t\t\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t\t\t\t\t\t\t\t\tstroke-width=\"32\"\n\t\t\t\t\t\t\t\t\t\t\t></line>\n\t\t\t\t\t\t\t\t\t\t\t<line\n\t\t\t\t\t\t\t\t\t\t\t\tx1=\"192\"\n\t\t\t\t\t\t\t\t\t\t\t\ty1=\"40\"\n\t\t\t\t\t\t\t\t\t\t\t\tx2=\"40\"\n\t\t\t\t\t\t\t\t\t\t\t\ty2=\"192\"\n\t\t\t\t\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\t\t\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\t\t\t\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t\t\t\t\t\t\t\t\tstroke-width=\"32\"\n\t\t\t\t\t\t\t\t\t\t\t></line>\n\t\t\t\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t<div class=\"grid flex-1 text-left text-sm leading-tight\">\n\t\t\t\t\t\t\t\t\t\t<span class=\"truncate font-medium\">{activeTeam.name}</span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"truncate text-xs\">{activeTeam.plan}</span>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\tlucide=\"ChevronsUpDownIcon\"\n\t\t\t\t\t\t\t\t\t\ttabler=\"IconSelector\"\n\t\t\t\t\t\t\t\t\t\thugeicons=\"UnfoldMoreIcon\"\n\t\t\t\t\t\t\t\t\t\tphosphor=\"CaretUpDownIcon\"\n\t\t\t\t\t\t\t\t\t\tremixicon=\"RiArrowUpDownLine\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</Sidebar.MenuButton>\n\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t</DropdownMenu.Trigger>\n\t\t\t\t\t\t<DropdownMenu.Content>\n\t\t\t\t\t\t\t<DropdownMenu.Group>\n\t\t\t\t\t\t\t\t<DropdownMenu.Label>Teams</DropdownMenu.Label>\n\t\t\t\t\t\t\t</DropdownMenu.Group>\n\t\t\t\t\t\t\t<DropdownMenu.Group>\n\t\t\t\t\t\t\t\t{#each data.teams as team (team.name)}\n\t\t\t\t\t\t\t\t\t<DropdownMenu.Item onclick={() => (activeTeam = team)}>\n\t\t\t\t\t\t\t\t\t\t{team.name}\n\t\t\t\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t</DropdownMenu.Group>\n\t\t\t\t\t\t</DropdownMenu.Content>\n\t\t\t\t\t</DropdownMenu.Root>\n\t\t\t\t</Sidebar.MenuItem>\n\t\t\t</Sidebar.Menu>\n\t\t</Sidebar.Header>\n\t\t<Sidebar.Content>\n\t\t\t<Sidebar.Group>\n\t\t\t\t<Sidebar.GroupLabel>Platform</Sidebar.GroupLabel>\n\t\t\t\t<Sidebar.Menu>\n\t\t\t\t\t{#each data.navMain as item (item.title)}\n\t\t\t\t\t\t<Collapsible.Root open={item.isActive} class=\"group/collapsible\">\n\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t<Sidebar.MenuItem {...props}>\n\t\t\t\t\t\t\t\t\t<Collapsible.Trigger>\n\t\t\t\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t\t\t\t<Sidebar.MenuButton\n\t\t\t\t\t\t\t\t\t\t\t\ttooltipContent={item.title}\n\t\t\t\t\t\t\t\t\t\t\t\t{...props}\n\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t{@render item.icon?.()}\n\t\t\t\t\t\t\t\t\t\t\t\t<span>{item.title}</span>\n\t\t\t\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\t\t\t\tlucide=\"ChevronRightIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\ttabler=\"IconChevronRight\"\n\t\t\t\t\t\t\t\t\t\t\t\t\thugeicons=\"ArrowRight01Icon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tphosphor=\"CaretRightIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tremixicon=\"RiArrowRightSLine\"\n\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"ml-auto transition-transform duration-100 group-data-[state=open]/collapsible:rotate-90\"\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t</Sidebar.MenuButton>\n\t\t\t\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t\t\t\t</Collapsible.Trigger>\n\t\t\t\t\t\t\t\t\t<Collapsible.Content>\n\t\t\t\t\t\t\t\t\t\t<Sidebar.MenuSub>\n\t\t\t\t\t\t\t\t\t\t\t{#each item.items ?? [] as subItem (subItem.title)}\n\t\t\t\t\t\t\t\t\t\t\t\t<Sidebar.MenuSubItem>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Sidebar.MenuSubButton>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href={subItem.url} {...props}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t>{subItem.title}</a\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t\t\t\t\t\t\t\t</Sidebar.MenuSubButton>\n\t\t\t\t\t\t\t\t\t\t\t\t</Sidebar.MenuSubItem>\n\t\t\t\t\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t\t\t\t</Sidebar.MenuSub>\n\t\t\t\t\t\t\t\t\t</Collapsible.Content>\n\t\t\t\t\t\t\t\t</Sidebar.MenuItem>\n\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t</Collapsible.Root>\n\t\t\t\t\t{/each}\n\t\t\t\t</Sidebar.Menu>\n\t\t\t</Sidebar.Group>\n\t\t\t<Sidebar.Group class=\"group-data-[collapsible=icon]:hidden\">\n\t\t\t\t<Sidebar.GroupLabel>Projects</Sidebar.GroupLabel>\n\t\t\t\t<Sidebar.Menu>\n\t\t\t\t\t{#each data.projects as item (item.name)}\n\t\t\t\t\t\t<Sidebar.MenuItem>\n\t\t\t\t\t\t\t<Sidebar.MenuButton>\n\t\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t\t<a href={item.url} {...props}>\n\t\t\t\t\t\t\t\t\t\t{@render item.icon?.()}\n\t\t\t\t\t\t\t\t\t\t{item.name}\n\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t\t</Sidebar.MenuButton>\n\t\t\t\t\t\t</Sidebar.MenuItem>\n\t\t\t\t\t{/each}\n\t\t\t\t</Sidebar.Menu>\n\t\t\t</Sidebar.Group>\n\t\t</Sidebar.Content>\n\t\t<Sidebar.Footer>\n\t\t\t<Sidebar.Menu>\n\t\t\t\t<Sidebar.MenuItem>\n\t\t\t\t\t<DropdownMenu.Root>\n\t\t\t\t\t\t<DropdownMenu.Trigger>\n\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t<Sidebar.MenuButton\n\t\t\t\t\t\t\t\t\tsize=\"lg\"\n\t\t\t\t\t\t\t\t\tclass=\"data-[state=open]:bg-sidebar-accent data-[state=open]:text-sidebar-accent-foreground\"\n\t\t\t\t\t\t\t\t\t{...props}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<Avatar.Root>\n\t\t\t\t\t\t\t\t\t\t<Avatar.Image src={data.user.avatar} alt={data.user.name} />\n\t\t\t\t\t\t\t\t\t\t<Avatar.Fallback class=\"rounded-lg\">CN</Avatar.Fallback>\n\t\t\t\t\t\t\t\t\t</Avatar.Root>\n\t\t\t\t\t\t\t\t\t<div class=\"grid flex-1 text-left text-sm leading-tight\">\n\t\t\t\t\t\t\t\t\t\t<span class=\"truncate font-medium\">{data.user.name}</span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"truncate text-xs\">{data.user.email}</span>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\tlucide=\"ChevronsUpDownIcon\"\n\t\t\t\t\t\t\t\t\t\ttabler=\"IconSelector\"\n\t\t\t\t\t\t\t\t\t\thugeicons=\"UnfoldMoreIcon\"\n\t\t\t\t\t\t\t\t\t\tphosphor=\"CaretUpDownIcon\"\n\t\t\t\t\t\t\t\t\t\tremixicon=\"RiArrowUpDownLine\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</Sidebar.MenuButton>\n\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t</DropdownMenu.Trigger>\n\t\t\t\t\t\t<DropdownMenu.Content>\n\t\t\t\t\t\t\t<DropdownMenu.Group>\n\t\t\t\t\t\t\t\t<DropdownMenu.Label>\n\t\t\t\t\t\t\t\t\t<Item.Root size=\"xs\">\n\t\t\t\t\t\t\t\t\t\t<Item.Media>\n\t\t\t\t\t\t\t\t\t\t\t<Avatar.Root>\n\t\t\t\t\t\t\t\t\t\t\t\t<Avatar.Image\n\t\t\t\t\t\t\t\t\t\t\t\t\tsrc={data.user.avatar}\n\t\t\t\t\t\t\t\t\t\t\t\t\talt={data.user.name}\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t<Avatar.Fallback>CN</Avatar.Fallback>\n\t\t\t\t\t\t\t\t\t\t\t</Avatar.Root>\n\t\t\t\t\t\t\t\t\t\t</Item.Media>\n\t\t\t\t\t\t\t\t\t\t<Item.Content>\n\t\t\t\t\t\t\t\t\t\t\t<Item.Title>{data.user.name}</Item.Title>\n\t\t\t\t\t\t\t\t\t\t\t<Item.Description>{data.user.email}</Item.Description>\n\t\t\t\t\t\t\t\t\t\t</Item.Content>\n\t\t\t\t\t\t\t\t\t</Item.Root>\n\t\t\t\t\t\t\t\t</DropdownMenu.Label>\n\t\t\t\t\t\t\t</DropdownMenu.Group>\n\t\t\t\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t\t\t\t<DropdownMenu.Group>\n\t\t\t\t\t\t\t\t<DropdownMenu.Item>Account</DropdownMenu.Item>\n\t\t\t\t\t\t\t\t<DropdownMenu.Item>Billing</DropdownMenu.Item>\n\t\t\t\t\t\t\t\t<DropdownMenu.Item>Settings</DropdownMenu.Item>\n\t\t\t\t\t\t\t</DropdownMenu.Group>\n\t\t\t\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t\t\t\t<DropdownMenu.Group>\n\t\t\t\t\t\t\t\t<DropdownMenu.Item>Log out</DropdownMenu.Item>\n\t\t\t\t\t\t\t</DropdownMenu.Group>\n\t\t\t\t\t\t</DropdownMenu.Content>\n\t\t\t\t\t</DropdownMenu.Root>\n\t\t\t\t</Sidebar.MenuItem>\n\t\t\t</Sidebar.Menu>\n\t\t</Sidebar.Footer>\n\t\t<Sidebar.Rail />\n\t</Sidebar.Root>\n\t<Sidebar.Inset>\n\t\t<header\n\t\t\tclass=\"flex h-16 shrink-0 items-center gap-2 border-b transition-[width,height] ease-linear group-has-data-[collapsible=icon]/sidebar-wrapper:h-12\"\n\t\t>\n\t\t\t<div class=\"flex items-center gap-2 px-4\">\n\t\t\t\t<Sidebar.Trigger class=\"-ml-1\" />\n\t\t\t</div>\n\t\t</header>\n\t\t<div class=\"flex flex-1 flex-col gap-4 p-4 pt-0\">\n\t\t\t<div class=\"grid auto-rows-min gap-4 md:grid-cols-3\">\n\t\t\t\t<div class=\"bg-muted/50 aspect-video rounded-xl\"></div>\n\t\t\t\t<div class=\"bg-muted/50 aspect-video rounded-xl\"></div>\n\t\t\t\t<div class=\"bg-muted/50 aspect-video rounded-xl\"></div>\n\t\t\t</div>\n\t\t\t<div class=\"bg-muted/50 min-h-screen flex-1 rounded-xl md:min-h-min\"></div>\n\t\t</div>\n\t</Sidebar.Inset>\n</Sidebar.Provider>\n\n{#snippet iconPlayground()}\n\t<IconPlaceholder\n\t\tlucide=\"TerminalSquareIcon\"\n\t\ttabler=\"IconTerminal2\"\n\t\thugeicons=\"ComputerTerminalIcon\"\n\t\tphosphor=\"TerminalIcon\"\n\t\tremixicon=\"RiTerminalBoxLine\"\n\t/>\n{/snippet}\n{#snippet iconModels()}\n\t<IconPlaceholder\n\t\tlucide=\"BotIcon\"\n\t\ttabler=\"IconRobot\"\n\t\thugeicons=\"RoboticIcon\"\n\t\tphosphor=\"RobotIcon\"\n\t\tremixicon=\"RiRobotLine\"\n\t/>\n{/snippet}\n{#snippet iconDocumentation()}\n\t<IconPlaceholder\n\t\tlucide=\"BookOpen\"\n\t\ttabler=\"IconBook\"\n\t\thugeicons=\"BookOpen02Icon\"\n\t\tphosphor=\"BookOpenIcon\"\n\t\tremixicon=\"RiBookOpenLine\"\n\t/>\n{/snippet}\n{#snippet iconSettings()}\n\t<IconPlaceholder\n\t\tlucide=\"Settings2Icon\"\n\t\ttabler=\"IconSettings\"\n\t\thugeicons=\"Settings05Icon\"\n\t\tphosphor=\"GearIcon\"\n\t\tremixicon=\"RiSettingsLine\"\n\t/>\n{/snippet}\n{#snippet iconDesignEngineering()}\n\t<IconPlaceholder\n\t\tlucide=\"FrameIcon\"\n\t\ttabler=\"IconFrame\"\n\t\thugeicons=\"CropIcon\"\n\t\tphosphor=\"CropIcon\"\n\t\tremixicon=\"RiCropLine\"\n\t/>\n{/snippet}\n{#snippet iconSalesMarketing()}\n\t<IconPlaceholder\n\t\tlucide=\"PieChartIcon\"\n\t\ttabler=\"IconChartPie\"\n\t\thugeicons=\"PieChartIcon\"\n\t\tphosphor=\"ChartPieIcon\"\n\t\tremixicon=\"RiPieChartLine\"\n\t/>\n{/snippet}\n{#snippet iconTravel()}\n\t<IconPlaceholder\n\t\tlucide=\"MapIcon\"\n\t\ttabler=\"IconMap\"\n\t\thugeicons=\"MapsIcon\"\n\t\tphosphor=\"MapTrifoldIcon\"\n\t\tremixicon=\"RiMapLine\"\n\t/>\n{/snippet}\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/sidebar-inset/sidebar-inset.svelte",
    "content": "<script lang=\"ts\">\n\t/* eslint-disable @typescript-eslint/no-explicit-any */\n\timport * as Collapsible from \"$lib/registry/ui/collapsible/index.js\";\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\n\tconst data = {\n\t\tnavMain: [\n\t\t\t{\n\t\t\t\ttitle: \"Dashboard\",\n\t\t\t\turl: \"#\",\n\t\t\t\tlucide: \"HomeIcon\",\n\t\t\t\ttabler: \"IconHome\",\n\t\t\t\thugeicons: \"Home01Icon\",\n\t\t\t\tphosphor: \"HouseIcon\",\n\t\t\t\tremixicon: \"RiHomeLine\",\n\t\t\t\tisActive: true,\n\t\t\t\titems: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Overview\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Analytics\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"Analytics\",\n\t\t\t\turl: \"#\",\n\t\t\t\tlucide: \"ChartLineIcon\",\n\t\t\t\ttabler: \"IconChartLine\",\n\t\t\t\thugeicons: \"ChartIcon\",\n\t\t\t\tphosphor: \"ChartLineIcon\",\n\t\t\t\tremixicon: \"RiLineChartLine\",\n\t\t\t\titems: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Reports\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Metrics\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"Orders\",\n\t\t\t\turl: \"#\",\n\t\t\t\tlucide: \"ShoppingBagIcon\",\n\t\t\t\ttabler: \"IconShoppingBag\",\n\t\t\t\thugeicons: \"ShoppingBag01Icon\",\n\t\t\t\tphosphor: \"BagIcon\",\n\t\t\t\tremixicon: \"RiShoppingBagLine\",\n\t\t\t\titems: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"All Orders\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Pending\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Completed\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"Products\",\n\t\t\t\turl: \"#\",\n\t\t\t\tlucide: \"ShoppingCartIcon\",\n\t\t\t\ttabler: \"IconShoppingCart\",\n\t\t\t\thugeicons: \"ShoppingCart01Icon\",\n\t\t\t\tphosphor: \"ShoppingCartIcon\",\n\t\t\t\tremixicon: \"RiShoppingCartLine\",\n\t\t\t\titems: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"All Products\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Categories\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"Invoices\",\n\t\t\t\turl: \"#\",\n\t\t\t\tlucide: \"FileIcon\",\n\t\t\t\ttabler: \"IconFile\",\n\t\t\t\thugeicons: \"File01Icon\",\n\t\t\t\tphosphor: \"FileIcon\",\n\t\t\t\tremixicon: \"RiFileLine\",\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"Customers\",\n\t\t\t\turl: \"#\",\n\t\t\t\tlucide: \"UserIcon\",\n\t\t\t\ttabler: \"IconUser\",\n\t\t\t\thugeicons: \"UserIcon\",\n\t\t\t\tphosphor: \"UserIcon\",\n\t\t\t\tremixicon: \"RiUserLine\",\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"Settings\",\n\t\t\t\turl: \"#\",\n\t\t\t\tlucide: \"Settings2Icon\",\n\t\t\t\ttabler: \"IconSettings\",\n\t\t\t\thugeicons: \"Settings05Icon\",\n\t\t\t\tphosphor: \"GearIcon\",\n\t\t\t\tremixicon: \"RiSettingsLine\",\n\t\t\t},\n\t\t],\n\t\tnavSecondary: [\n\t\t\t{\n\t\t\t\ttitle: \"Support\",\n\t\t\t\turl: \"#\",\n\t\t\t\tlucide: \"LifeBuoy\",\n\t\t\t\ttabler: \"IconLifebuoy\",\n\t\t\t\thugeicons: \"ChartRingIcon\",\n\t\t\t\tphosphor: \"LifebuoyIcon\",\n\t\t\t\tremixicon: \"RiLifebuoyLine\",\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"Feedback\",\n\t\t\t\turl: \"#\",\n\t\t\t\tlucide: \"Send\",\n\t\t\t\ttabler: \"IconSend\",\n\t\t\t\thugeicons: \"SentIcon\",\n\t\t\t\tphosphor: \"PaperPlaneTiltIcon\",\n\t\t\t\tremixicon: \"RiSendPlaneLine\",\n\t\t\t},\n\t\t],\n\t};\n</script>\n\n<Sidebar.Provider>\n\t<Sidebar.Root variant=\"inset\" class=\"absolute\">\n\t\t<Sidebar.Content>\n\t\t\t<Sidebar.Group>\n\t\t\t\t<Sidebar.GroupLabel>Dashboard</Sidebar.GroupLabel>\n\t\t\t\t<Sidebar.Menu>\n\t\t\t\t\t{#each data.navMain as item (item.title)}\n\t\t\t\t\t\t<Collapsible.Root open={item.isActive}>\n\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t<Sidebar.MenuItem {...props}>\n\t\t\t\t\t\t\t\t\t<Sidebar.MenuButton isActive={item.isActive}>\n\t\t\t\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t\t\t\t<a href={item.url} {...props}>\n\t\t\t\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\t\t\t\tlucide={item.lucide as any}\n\t\t\t\t\t\t\t\t\t\t\t\t\ttabler={item.tabler as any}\n\t\t\t\t\t\t\t\t\t\t\t\t\thugeicons={item.hugeicons as any}\n\t\t\t\t\t\t\t\t\t\t\t\t\tphosphor={item.phosphor as any}\n\t\t\t\t\t\t\t\t\t\t\t\t\tremixicon={item.remixicon as any}\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t<span>{item.title}</span>\n\t\t\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t\t\t\t</Sidebar.MenuButton>\n\t\t\t\t\t\t\t\t\t{#if item.items?.length}\n\t\t\t\t\t\t\t\t\t\t<Collapsible.Trigger>\n\t\t\t\t\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t\t\t\t\t<Sidebar.MenuAction\n\t\t\t\t\t\t\t\t\t\t\t\t\tclass=\"data-[state=open]:rotate-90\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t{...props}\n\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tlucide=\"ChevronRightIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\ttabler=\"IconChevronRight\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\thugeicons=\"ArrowRight01Icon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tphosphor=\"CaretRightIcon\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tremixicon=\"RiArrowRightSLine\"\n\t\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"sr-only\">Toggle</span>\n\t\t\t\t\t\t\t\t\t\t\t\t</Sidebar.MenuAction>\n\t\t\t\t\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t\t\t\t\t</Collapsible.Trigger>\n\t\t\t\t\t\t\t\t\t\t<Collapsible.Content>\n\t\t\t\t\t\t\t\t\t\t\t<Sidebar.MenuSub>\n\t\t\t\t\t\t\t\t\t\t\t\t{#each item.items as subItem (subItem.title)}\n\t\t\t\t\t\t\t\t\t\t\t\t\t<Sidebar.MenuSubItem>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t<Sidebar.MenuSubButton>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<a href={subItem.url} {...props}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t>{subItem.title}</a\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t</Sidebar.MenuSubButton>\n\t\t\t\t\t\t\t\t\t\t\t\t\t</Sidebar.MenuSubItem>\n\t\t\t\t\t\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t\t\t\t\t</Sidebar.MenuSub>\n\t\t\t\t\t\t\t\t\t\t</Collapsible.Content>\n\t\t\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\t\t</Sidebar.MenuItem>\n\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t</Collapsible.Root>\n\t\t\t\t\t{/each}\n\t\t\t\t</Sidebar.Menu>\n\t\t\t</Sidebar.Group>\n\t\t\t<Sidebar.Group class=\"mt-auto\">\n\t\t\t\t<Sidebar.GroupContent>\n\t\t\t\t\t<Sidebar.Menu>\n\t\t\t\t\t\t{#each data.navSecondary as item (item.title)}\n\t\t\t\t\t\t\t<Sidebar.MenuItem>\n\t\t\t\t\t\t\t\t<Sidebar.MenuButton size=\"sm\">\n\t\t\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t\t\t<a href={item.url} {...props}>\n\t\t\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\t\t\tlucide={item.lucide as any}\n\t\t\t\t\t\t\t\t\t\t\t\ttabler={item.tabler as any}\n\t\t\t\t\t\t\t\t\t\t\t\thugeicons={item.hugeicons as any}\n\t\t\t\t\t\t\t\t\t\t\t\tphosphor={item.phosphor as any}\n\t\t\t\t\t\t\t\t\t\t\t\tremixicon={item.remixicon as any}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t<span>{item.title}</span>\n\t\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t\t\t</Sidebar.MenuButton>\n\t\t\t\t\t\t\t</Sidebar.MenuItem>\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</Sidebar.Menu>\n\t\t\t\t</Sidebar.GroupContent>\n\t\t\t</Sidebar.Group>\n\t\t</Sidebar.Content>\n\t\t<Sidebar.Rail />\n\t</Sidebar.Root>\n\t<Sidebar.Inset>\n\t\t<header class=\"flex h-16 shrink-0 items-center gap-2 border-b px-4\">\n\t\t\t<Sidebar.Trigger class=\"-ml-1\" />\n\t\t</header>\n\t\t<div class=\"flex flex-1 flex-col gap-4 p-4\">\n\t\t\t<div class=\"grid auto-rows-min gap-4 md:grid-cols-3\">\n\t\t\t\t<div class=\"bg-muted/50 aspect-video rounded-xl\"></div>\n\t\t\t\t<div class=\"bg-muted/50 aspect-video rounded-xl\"></div>\n\t\t\t\t<div class=\"bg-muted/50 aspect-video rounded-xl\"></div>\n\t\t\t</div>\n\t\t\t<div class=\"bg-muted/50 min-h-screen flex-1 rounded-xl md:min-h-min\"></div>\n\t\t</div>\n\t</Sidebar.Inset>\n</Sidebar.Provider>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/skeleton/skeleton-avatar.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Skeleton } from \"$lib/registry/ui/skeleton/index.js\";\n</script>\n\n<Example title=\"Avatar\">\n\t<div class=\"flex w-full items-center gap-4\">\n\t\t<Skeleton class=\"size-10 shrink-0 rounded-full\" />\n\t\t<div class=\"grid gap-2\">\n\t\t\t<Skeleton class=\"h-4 w-[150px]\" />\n\t\t\t<Skeleton class=\"h-4 w-[100px]\" />\n\t\t</div>\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/skeleton/skeleton-card.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport { Skeleton } from \"$lib/registry/ui/skeleton/index.js\";\n</script>\n\n<Example title=\"Card\">\n\t<Card.Root class=\"w-full\">\n\t\t<Card.Header>\n\t\t\t<Skeleton class=\"h-4 w-2/3\" />\n\t\t\t<Skeleton class=\"h-4 w-1/2\" />\n\t\t</Card.Header>\n\t\t<Card.Content>\n\t\t\t<Skeleton class=\"aspect-square w-full\" />\n\t\t</Card.Content>\n\t</Card.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/skeleton/skeleton-form.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Skeleton } from \"$lib/registry/ui/skeleton/index.js\";\n</script>\n\n<Example title=\"Form\">\n\t<div class=\"flex w-full flex-col gap-7\">\n\t\t<div class=\"flex flex-col gap-3\">\n\t\t\t<Skeleton class=\"h-4 w-20\" />\n\t\t\t<Skeleton class=\"h-10 w-full\" />\n\t\t</div>\n\t\t<div class=\"flex flex-col gap-3\">\n\t\t\t<Skeleton class=\"h-4 w-24\" />\n\t\t\t<Skeleton class=\"h-10 w-full\" />\n\t\t</div>\n\t\t<Skeleton class=\"h-9 w-24\" />\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/skeleton/skeleton-table.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Skeleton } from \"$lib/registry/ui/skeleton/index.js\";\n</script>\n\n<Example title=\"Table\">\n\t<div class=\"flex w-full flex-col gap-2\">\n\t\t<div class=\"flex gap-4\">\n\t\t\t<Skeleton class=\"h-4 flex-1\" />\n\t\t\t<Skeleton class=\"h-4 w-24\" />\n\t\t\t<Skeleton class=\"h-4 w-20\" />\n\t\t</div>\n\t\t<div class=\"flex gap-4\">\n\t\t\t<Skeleton class=\"h-4 flex-1\" />\n\t\t\t<Skeleton class=\"h-4 w-24\" />\n\t\t\t<Skeleton class=\"h-4 w-20\" />\n\t\t</div>\n\t\t<div class=\"flex gap-4\">\n\t\t\t<Skeleton class=\"h-4 flex-1\" />\n\t\t\t<Skeleton class=\"h-4 w-24\" />\n\t\t\t<Skeleton class=\"h-4 w-20\" />\n\t\t</div>\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/skeleton/skeleton-text.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Skeleton } from \"$lib/registry/ui/skeleton/index.js\";\n</script>\n\n<Example title=\"Text\">\n\t<div class=\"flex w-full flex-col gap-2\">\n\t\t<Skeleton class=\"h-4 w-full\" />\n\t\t<Skeleton class=\"h-4 w-full\" />\n\t\t<Skeleton class=\"h-4 w-3/4\" />\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/skeleton/skeleton.svelte",
    "content": "<script lang=\"ts\">\n\timport ExampleWrapper from \"../../../../../routes/(app)/(layout)/(create)/components/example-wrapper.svelte\";\n\timport SkeletonAvatar from \"./skeleton-avatar.svelte\";\n\timport SkeletonCard from \"./skeleton-card.svelte\";\n\timport SkeletonText from \"./skeleton-text.svelte\";\n\timport SkeletonForm from \"./skeleton-form.svelte\";\n\timport SkeletonTable from \"./skeleton-table.svelte\";\n</script>\n\n<ExampleWrapper>\n\t<SkeletonAvatar />\n\t<SkeletonCard />\n\t<SkeletonText />\n\t<SkeletonForm />\n\t<SkeletonTable />\n</ExampleWrapper>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/slider/slider-basic.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Slider } from \"$lib/registry/ui/slider/index.js\";\n</script>\n\n<Example title=\"Basic\">\n\t<Slider type=\"single\" value={50} max={100} step={1} />\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/slider/slider-controlled.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Label } from \"$lib/registry/ui/label/index.js\";\n\timport { Slider } from \"$lib/registry/ui/slider/index.js\";\n\n\tlet value = $state([0.3, 0.7]);\n</script>\n\n<Example title=\"Controlled\">\n\t<div class=\"grid w-full gap-3\">\n\t\t<div class=\"flex items-center justify-between gap-2\">\n\t\t\t<Label for=\"slider-demo-temperature\">Temperature</Label>\n\t\t\t<span class=\"text-muted-foreground text-sm\">\n\t\t\t\t{value.join(\", \")}\n\t\t\t</span>\n\t\t</div>\n\t\t<Slider\n\t\t\tid=\"slider-demo-temperature\"\n\t\t\ttype=\"multiple\"\n\t\t\tbind:value\n\t\t\tmin={0}\n\t\t\tmax={1}\n\t\t\tstep={0.1}\n\t\t/>\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/slider/slider-disabled.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Slider } from \"$lib/registry/ui/slider/index.js\";\n</script>\n\n<Example title=\"Disabled\">\n\t<Slider type=\"single\" value={50} max={100} step={1} disabled />\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/slider/slider-multiple.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Slider } from \"$lib/registry/ui/slider/index.js\";\n</script>\n\n<Example title=\"Multiple Thumbs\">\n\t<Slider type=\"multiple\" value={[10, 20, 70]} max={100} step={10} />\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/slider/slider-range.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Slider } from \"$lib/registry/ui/slider/index.js\";\n</script>\n\n<Example title=\"Range\">\n\t<Slider type=\"multiple\" value={[25, 50]} max={100} step={5} />\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/slider/slider-vertical.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Slider } from \"$lib/registry/ui/slider/index.js\";\n</script>\n\n<Example title=\"Vertical\">\n\t<div class=\"flex items-center gap-6\">\n\t\t<Slider type=\"single\" value={50} max={100} step={1} orientation=\"vertical\" class=\"h-40\" />\n\t\t<Slider type=\"single\" value={25} max={100} step={1} orientation=\"vertical\" class=\"h-40\" />\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/slider/slider.svelte",
    "content": "<script lang=\"ts\">\n\timport ExampleWrapper from \"../../../../../routes/(app)/(layout)/(create)/components/example-wrapper.svelte\";\n\timport SliderBasic from \"./slider-basic.svelte\";\n\timport SliderRange from \"./slider-range.svelte\";\n\timport SliderMultiple from \"./slider-multiple.svelte\";\n\timport SliderVertical from \"./slider-vertical.svelte\";\n\timport SliderControlled from \"./slider-controlled.svelte\";\n\timport SliderDisabled from \"./slider-disabled.svelte\";\n</script>\n\n<ExampleWrapper>\n\t<SliderBasic />\n\t<SliderRange />\n\t<SliderMultiple />\n\t<SliderVertical />\n\t<SliderControlled />\n\t<SliderDisabled />\n</ExampleWrapper>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/sonner/sonner-basic.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { toast } from \"svelte-sonner\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n</script>\n\n<Example title=\"Basic\" class=\"items-center justify-center\">\n\t<Button onclick={() => toast(\"Event has been created\")} variant=\"outline\" class=\"w-fit\">\n\t\tShow Toast\n\t</Button>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/sonner/sonner-with-description.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { toast } from \"svelte-sonner\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n</script>\n\n<Example title=\"With Description\" class=\"items-center justify-center\">\n\t<Button\n\t\tonclick={() =>\n\t\t\ttoast(\"Event has been created\", {\n\t\t\t\tdescription: \"Monday, January 3rd at 6:00pm\",\n\t\t\t})}\n\t\tvariant=\"outline\"\n\t\tclass=\"w-fit\"\n\t>\n\t\tShow Toast\n\t</Button>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/sonner/sonner.svelte",
    "content": "<script lang=\"ts\">\n\timport ExampleWrapper from \"../../../../../routes/(app)/(layout)/(create)/components/example-wrapper.svelte\";\n\timport SonnerBasic from \"./sonner-basic.svelte\";\n\timport SonnerWithDescription from \"./sonner-with-description.svelte\";\n</script>\n\n<ExampleWrapper>\n\t<SonnerBasic />\n\t<SonnerWithDescription />\n</ExampleWrapper>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/spinner/spinner-basic.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Spinner } from \"$lib/registry/ui/spinner/index.js\";\n</script>\n\n<Example title=\"Basic\">\n\t<div class=\"flex items-center gap-6\">\n\t\t<Spinner />\n\t\t<Spinner class=\"size-6\" />\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/spinner/spinner-in-badges.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Badge } from \"$lib/registry/ui/badge/index.js\";\n\timport { Spinner } from \"$lib/registry/ui/spinner/index.js\";\n</script>\n\n<Example title=\"In Badges\" class=\"items-center justify-center\">\n\t<div class=\"flex flex-wrap items-center justify-center gap-4\">\n\t\t<Badge>\n\t\t\t<Spinner data-icon=\"inline-start\" />\n\t\t\tBadge\n\t\t</Badge>\n\t\t<Badge variant=\"secondary\">\n\t\t\t<Spinner data-icon=\"inline-start\" />\n\t\t\tBadge\n\t\t</Badge>\n\t\t<Badge variant=\"destructive\">\n\t\t\t<Spinner data-icon=\"inline-start\" />\n\t\t\tBadge\n\t\t</Badge>\n\t\t<Badge variant=\"outline\">\n\t\t\t<Spinner data-icon=\"inline-start\" />\n\t\t\tBadge\n\t\t</Badge>\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/spinner/spinner-in-buttons.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport { Spinner } from \"$lib/registry/ui/spinner/index.js\";\n</script>\n\n<Example title=\"In Buttons\">\n\t<div class=\"flex flex-wrap items-center gap-4\">\n\t\t<Button>\n\t\t\t<Spinner data-icon=\"inline-start\" /> Submit\n\t\t</Button>\n\t\t<Button disabled>\n\t\t\t<Spinner data-icon=\"inline-start\" /> Disabled\n\t\t</Button>\n\t\t<Button variant=\"outline\" disabled>\n\t\t\t<Spinner data-icon=\"inline-start\" /> Outline\n\t\t</Button>\n\t\t<Button variant=\"outline\" size=\"icon\" disabled>\n\t\t\t<Spinner data-icon=\"inline-start\" />\n\t\t\t<span class=\"sr-only\">Loading...</span>\n\t\t</Button>\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/spinner/spinner-in-empty.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Empty from \"$lib/registry/ui/empty/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport { Spinner } from \"$lib/registry/ui/spinner/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Example title=\"In Empty State\" containerClass=\"lg:col-span-full\">\n\t<Empty.Root class=\"min-h-[300px]\">\n\t\t<Empty.Header>\n\t\t\t<Empty.Media variant=\"icon\">\n\t\t\t\t<Spinner />\n\t\t\t</Empty.Media>\n\t\t\t<Empty.Title>No projects yet</Empty.Title>\n\t\t\t<Empty.Description>\n\t\t\t\tYou haven&apos;t created any projects yet. Get started by creating your first\n\t\t\t\tproject.\n\t\t\t</Empty.Description>\n\t\t</Empty.Header>\n\t\t<Empty.Content>\n\t\t\t<div class=\"flex gap-2\">\n\t\t\t\t<Button href=\"#/\">Create project</Button>\n\t\t\t\t<Button variant=\"outline\">Import project</Button>\n\t\t\t</div>\n\t\t\t<Button variant=\"link\" href=\"#/\" class=\"text-muted-foreground\">\n\t\t\t\tLearn more\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"ArrowRightIcon\"\n\t\t\t\t\ttabler=\"IconArrowRight\"\n\t\t\t\t\thugeicons=\"ArrowRight02Icon\"\n\t\t\t\t\tphosphor=\"ArrowRightIcon\"\n\t\t\t\t\tremixicon=\"RiArrowRightLine\"\n\t\t\t\t/>\n\t\t\t</Button>\n\t\t</Empty.Content>\n\t</Empty.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/spinner/spinner-in-input-group.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport * as InputGroup from \"$lib/registry/ui/input-group/index.js\";\n\timport { Spinner } from \"$lib/registry/ui/spinner/index.js\";\n</script>\n\n<Example title=\"In Input Group\">\n\t<Field.Field>\n\t\t<Field.Label for=\"input-group-spinner\">Input Group</Field.Label>\n\t\t<InputGroup.Root>\n\t\t\t<InputGroup.Input id=\"input-group-spinner\" />\n\t\t\t<InputGroup.Addon>\n\t\t\t\t<Spinner />\n\t\t\t</InputGroup.Addon>\n\t\t</InputGroup.Root>\n\t</Field.Field>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/spinner/spinner.svelte",
    "content": "<script lang=\"ts\">\n\timport ExampleWrapper from \"../../../../../routes/(app)/(layout)/(create)/components/example-wrapper.svelte\";\n\timport SpinnerBasic from \"./spinner-basic.svelte\";\n\timport SpinnerInButtons from \"./spinner-in-buttons.svelte\";\n\timport SpinnerInBadges from \"./spinner-in-badges.svelte\";\n\timport SpinnerInInputGroup from \"./spinner-in-input-group.svelte\";\n\timport SpinnerInEmpty from \"./spinner-in-empty.svelte\";\n</script>\n\n<ExampleWrapper>\n\t<SpinnerBasic />\n\t<SpinnerInButtons />\n\t<SpinnerInBadges />\n\t<SpinnerInInputGroup />\n\t<SpinnerInEmpty />\n</ExampleWrapper>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/switch/switch-basic.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport { Switch } from \"$lib/registry/ui/switch/index.js\";\n</script>\n\n<Example title=\"Basic\">\n\t<Field.Field orientation=\"horizontal\">\n\t\t<Switch id=\"switch-basic\" />\n\t\t<Field.Label for=\"switch-basic\">Airplane Mode</Field.Label>\n\t</Field.Field>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/switch/switch-disabled.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Label } from \"$lib/registry/ui/label/index.js\";\n\timport { Switch } from \"$lib/registry/ui/switch/index.js\";\n</script>\n\n<Example title=\"Disabled\">\n\t<div class=\"flex flex-col gap-12\">\n\t\t<div class=\"flex items-center gap-2\">\n\t\t\t<Switch id=\"switch-disabled-unchecked\" disabled />\n\t\t\t<Label for=\"switch-disabled-unchecked\">Disabled (Unchecked)</Label>\n\t\t</div>\n\t\t<div class=\"flex items-center gap-2\">\n\t\t\t<Switch id=\"switch-disabled-checked\" checked disabled />\n\t\t\t<Label for=\"switch-disabled-checked\">Disabled (Checked)</Label>\n\t\t</div>\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/switch/switch-sizes.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Label } from \"$lib/registry/ui/label/index.js\";\n\timport { Switch } from \"$lib/registry/ui/switch/index.js\";\n</script>\n\n<Example title=\"Sizes\">\n\t<div class=\"flex flex-col gap-12\">\n\t\t<div class=\"flex items-center gap-2\">\n\t\t\t<Switch id=\"switch-size-sm\" size=\"sm\" />\n\t\t\t<Label for=\"switch-size-sm\">Small</Label>\n\t\t</div>\n\t\t<div class=\"flex items-center gap-2\">\n\t\t\t<Switch id=\"switch-size-default\" size=\"default\" />\n\t\t\t<Label for=\"switch-size-default\">Default</Label>\n\t\t</div>\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/switch/switch-with-description.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport { Switch } from \"$lib/registry/ui/switch/index.js\";\n</script>\n\n<Example title=\"With Description\">\n\t<Field.Label for=\"switch-focus-mode\">\n\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t<Field.Content>\n\t\t\t\t<Field.Title>Share across devices</Field.Title>\n\t\t\t\t<Field.Description>\n\t\t\t\t\tFocus is shared across devices, and turns off when you leave the app.\n\t\t\t\t</Field.Description>\n\t\t\t</Field.Content>\n\t\t\t<Switch id=\"switch-focus-mode\" />\n\t\t</Field.Field>\n\t</Field.Label>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/switch/switch.svelte",
    "content": "<script lang=\"ts\">\n\timport ExampleWrapper from \"../../../../../routes/(app)/(layout)/(create)/components/example-wrapper.svelte\";\n\timport SwitchBasic from \"./switch-basic.svelte\";\n\timport SwitchWithDescription from \"./switch-with-description.svelte\";\n\timport SwitchDisabled from \"./switch-disabled.svelte\";\n\timport SwitchSizes from \"./switch-sizes.svelte\";\n</script>\n\n<ExampleWrapper>\n\t<SwitchBasic />\n\t<SwitchWithDescription />\n\t<SwitchDisabled />\n\t<SwitchSizes />\n</ExampleWrapper>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/table/table-basic.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Table from \"$lib/registry/ui/table/index.js\";\n\n\tconst invoices = [\n\t\t{\n\t\t\tinvoice: \"INV001\",\n\t\t\tpaymentStatus: \"Paid\",\n\t\t\ttotalAmount: \"$250.00\",\n\t\t\tpaymentMethod: \"Credit Card\",\n\t\t},\n\t\t{\n\t\t\tinvoice: \"INV002\",\n\t\t\tpaymentStatus: \"Pending\",\n\t\t\ttotalAmount: \"$150.00\",\n\t\t\tpaymentMethod: \"PayPal\",\n\t\t},\n\t\t{\n\t\t\tinvoice: \"INV003\",\n\t\t\tpaymentStatus: \"Unpaid\",\n\t\t\ttotalAmount: \"$350.00\",\n\t\t\tpaymentMethod: \"Bank Transfer\",\n\t\t},\n\t];\n</script>\n\n<Example title=\"Basic\">\n\t<Table.Root>\n\t\t<Table.Caption>A list of your recent invoices.</Table.Caption>\n\t\t<Table.Header>\n\t\t\t<Table.Row>\n\t\t\t\t<Table.Head class=\"w-[100px]\">Invoice</Table.Head>\n\t\t\t\t<Table.Head>Status</Table.Head>\n\t\t\t\t<Table.Head>Method</Table.Head>\n\t\t\t\t<Table.Head class=\"text-right\">Amount</Table.Head>\n\t\t\t</Table.Row>\n\t\t</Table.Header>\n\t\t<Table.Body>\n\t\t\t{#each invoices as invoice (invoice.invoice)}\n\t\t\t\t<Table.Row>\n\t\t\t\t\t<Table.Cell class=\"font-medium\">{invoice.invoice}</Table.Cell>\n\t\t\t\t\t<Table.Cell>{invoice.paymentStatus}</Table.Cell>\n\t\t\t\t\t<Table.Cell>{invoice.paymentMethod}</Table.Cell>\n\t\t\t\t\t<Table.Cell class=\"text-right\">{invoice.totalAmount}</Table.Cell>\n\t\t\t\t</Table.Row>\n\t\t\t{/each}\n\t\t</Table.Body>\n\t</Table.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/table/table-simple.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Table from \"$lib/registry/ui/table/index.js\";\n</script>\n\n<Example title=\"Simple\">\n\t<Table.Root>\n\t\t<Table.Header>\n\t\t\t<Table.Row>\n\t\t\t\t<Table.Head>Name</Table.Head>\n\t\t\t\t<Table.Head>Email</Table.Head>\n\t\t\t\t<Table.Head class=\"text-right\">Role</Table.Head>\n\t\t\t</Table.Row>\n\t\t</Table.Header>\n\t\t<Table.Body>\n\t\t\t<Table.Row>\n\t\t\t\t<Table.Cell class=\"font-medium\">Sarah Chen</Table.Cell>\n\t\t\t\t<Table.Cell>sarah.chen@acme.com</Table.Cell>\n\t\t\t\t<Table.Cell class=\"text-right\">Admin</Table.Cell>\n\t\t\t</Table.Row>\n\t\t\t<Table.Row>\n\t\t\t\t<Table.Cell class=\"font-medium\">Marc Rodriguez</Table.Cell>\n\t\t\t\t<Table.Cell>marcus.rodriguez@acme.com</Table.Cell>\n\t\t\t\t<Table.Cell class=\"text-right\">User</Table.Cell>\n\t\t\t</Table.Row>\n\t\t\t<Table.Row>\n\t\t\t\t<Table.Cell class=\"font-medium\">Emily Watson</Table.Cell>\n\t\t\t\t<Table.Cell>emily.watson@acme.com</Table.Cell>\n\t\t\t\t<Table.Cell class=\"text-right\">User</Table.Cell>\n\t\t\t</Table.Row>\n\t\t</Table.Body>\n\t</Table.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/table/table-with-actions.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Table from \"$lib/registry/ui/table/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Example title=\"With Actions\">\n\t<Table.Root>\n\t\t<Table.Header>\n\t\t\t<Table.Row>\n\t\t\t\t<Table.Head>Product</Table.Head>\n\t\t\t\t<Table.Head>Price</Table.Head>\n\t\t\t\t<Table.Head class=\"text-right\">Actions</Table.Head>\n\t\t\t</Table.Row>\n\t\t</Table.Header>\n\t\t<Table.Body>\n\t\t\t<Table.Row>\n\t\t\t\t<Table.Cell class=\"font-medium\">Wireless Mouse</Table.Cell>\n\t\t\t\t<Table.Cell>$29.99</Table.Cell>\n\t\t\t\t<Table.Cell class=\"text-right\">\n\t\t\t\t\t<DropdownMenu.Root>\n\t\t\t\t\t\t<DropdownMenu.Trigger>\n\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t<Button variant=\"ghost\" size=\"icon\" class=\"size-8\" {...props}>\n\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\tlucide=\"MoreHorizontalIcon\"\n\t\t\t\t\t\t\t\t\t\ttabler=\"IconDots\"\n\t\t\t\t\t\t\t\t\t\thugeicons=\"MoreHorizontalCircle01Icon\"\n\t\t\t\t\t\t\t\t\t\tphosphor=\"DotsThreeOutlineIcon\"\n\t\t\t\t\t\t\t\t\t\tremixicon=\"RiMoreLine\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<span class=\"sr-only\">Open menu</span>\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t</DropdownMenu.Trigger>\n\t\t\t\t\t\t<DropdownMenu.Content align=\"end\">\n\t\t\t\t\t\t\t<DropdownMenu.Item>Edit</DropdownMenu.Item>\n\t\t\t\t\t\t\t<DropdownMenu.Item>Duplicate</DropdownMenu.Item>\n\t\t\t\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t\t\t\t<DropdownMenu.Item variant=\"destructive\">Delete</DropdownMenu.Item>\n\t\t\t\t\t\t</DropdownMenu.Content>\n\t\t\t\t\t</DropdownMenu.Root>\n\t\t\t\t</Table.Cell>\n\t\t\t</Table.Row>\n\t\t\t<Table.Row>\n\t\t\t\t<Table.Cell class=\"font-medium\">Mechanical Keyboard</Table.Cell>\n\t\t\t\t<Table.Cell>$129.99</Table.Cell>\n\t\t\t\t<Table.Cell class=\"text-right\">\n\t\t\t\t\t<DropdownMenu.Root>\n\t\t\t\t\t\t<DropdownMenu.Trigger>\n\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t<Button variant=\"ghost\" size=\"icon\" class=\"size-8\" {...props}>\n\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\tlucide=\"MoreHorizontalIcon\"\n\t\t\t\t\t\t\t\t\t\ttabler=\"IconDots\"\n\t\t\t\t\t\t\t\t\t\thugeicons=\"MoreHorizontalCircle01Icon\"\n\t\t\t\t\t\t\t\t\t\tphosphor=\"DotsThreeOutlineIcon\"\n\t\t\t\t\t\t\t\t\t\tremixicon=\"RiMoreLine\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<span class=\"sr-only\">Open menu</span>\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t</DropdownMenu.Trigger>\n\t\t\t\t\t\t<DropdownMenu.Content align=\"end\">\n\t\t\t\t\t\t\t<DropdownMenu.Item>Edit</DropdownMenu.Item>\n\t\t\t\t\t\t\t<DropdownMenu.Item>Duplicate</DropdownMenu.Item>\n\t\t\t\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t\t\t\t<DropdownMenu.Item variant=\"destructive\">Delete</DropdownMenu.Item>\n\t\t\t\t\t\t</DropdownMenu.Content>\n\t\t\t\t\t</DropdownMenu.Root>\n\t\t\t\t</Table.Cell>\n\t\t\t</Table.Row>\n\t\t\t<Table.Row>\n\t\t\t\t<Table.Cell class=\"font-medium\">USB-C Hub</Table.Cell>\n\t\t\t\t<Table.Cell>$49.99</Table.Cell>\n\t\t\t\t<Table.Cell class=\"text-right\">\n\t\t\t\t\t<DropdownMenu.Root>\n\t\t\t\t\t\t<DropdownMenu.Trigger>\n\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t<Button variant=\"ghost\" size=\"icon\" class=\"size-8\" {...props}>\n\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\tlucide=\"MoreHorizontalIcon\"\n\t\t\t\t\t\t\t\t\t\ttabler=\"IconDots\"\n\t\t\t\t\t\t\t\t\t\thugeicons=\"MoreHorizontalCircle01Icon\"\n\t\t\t\t\t\t\t\t\t\tphosphor=\"DotsThreeOutlineIcon\"\n\t\t\t\t\t\t\t\t\t\tremixicon=\"RiMoreLine\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<span class=\"sr-only\">Open menu</span>\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t</DropdownMenu.Trigger>\n\t\t\t\t\t\t<DropdownMenu.Content align=\"end\">\n\t\t\t\t\t\t\t<DropdownMenu.Item>Edit</DropdownMenu.Item>\n\t\t\t\t\t\t\t<DropdownMenu.Item>Duplicate</DropdownMenu.Item>\n\t\t\t\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t\t\t\t<DropdownMenu.Item variant=\"destructive\">Delete</DropdownMenu.Item>\n\t\t\t\t\t\t</DropdownMenu.Content>\n\t\t\t\t\t</DropdownMenu.Root>\n\t\t\t\t</Table.Cell>\n\t\t\t</Table.Row>\n\t\t</Table.Body>\n\t</Table.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/table/table-with-badges.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Table from \"$lib/registry/ui/table/index.js\";\n</script>\n\n<Example title=\"With Badges\">\n\t<Table.Root>\n\t\t<Table.Header>\n\t\t\t<Table.Row>\n\t\t\t\t<Table.Head>Task</Table.Head>\n\t\t\t\t<Table.Head>Status</Table.Head>\n\t\t\t\t<Table.Head class=\"text-right\">Priority</Table.Head>\n\t\t\t</Table.Row>\n\t\t</Table.Header>\n\t\t<Table.Body>\n\t\t\t<Table.Row>\n\t\t\t\t<Table.Cell class=\"font-medium\">Design homepage</Table.Cell>\n\t\t\t\t<Table.Cell>\n\t\t\t\t\t<span\n\t\t\t\t\t\tclass=\"inline-flex items-center rounded-full bg-green-500/10 px-2 py-1 text-xs font-medium text-green-700 dark:text-green-400\"\n\t\t\t\t\t>\n\t\t\t\t\t\tCompleted\n\t\t\t\t\t</span>\n\t\t\t\t</Table.Cell>\n\t\t\t\t<Table.Cell class=\"text-right\">\n\t\t\t\t\t<span\n\t\t\t\t\t\tclass=\"inline-flex items-center rounded-full bg-blue-500/10 px-2 py-1 text-xs font-medium text-blue-700 dark:text-blue-400\"\n\t\t\t\t\t>\n\t\t\t\t\t\tHigh\n\t\t\t\t\t</span>\n\t\t\t\t</Table.Cell>\n\t\t\t</Table.Row>\n\t\t\t<Table.Row>\n\t\t\t\t<Table.Cell class=\"font-medium\">Implement API</Table.Cell>\n\t\t\t\t<Table.Cell>\n\t\t\t\t\t<span\n\t\t\t\t\t\tclass=\"inline-flex items-center rounded-full bg-yellow-500/10 px-2 py-1 text-xs font-medium text-yellow-700 dark:text-yellow-400\"\n\t\t\t\t\t>\n\t\t\t\t\t\tIn Progress\n\t\t\t\t\t</span>\n\t\t\t\t</Table.Cell>\n\t\t\t\t<Table.Cell class=\"text-right\">\n\t\t\t\t\t<span\n\t\t\t\t\t\tclass=\"inline-flex items-center rounded-full bg-gray-500/10 px-2 py-1 text-xs font-medium text-gray-700 dark:text-gray-400\"\n\t\t\t\t\t>\n\t\t\t\t\t\tMedium\n\t\t\t\t\t</span>\n\t\t\t\t</Table.Cell>\n\t\t\t</Table.Row>\n\t\t\t<Table.Row>\n\t\t\t\t<Table.Cell class=\"font-medium\">Write tests</Table.Cell>\n\t\t\t\t<Table.Cell>\n\t\t\t\t\t<span\n\t\t\t\t\t\tclass=\"inline-flex items-center rounded-full bg-gray-500/10 px-2 py-1 text-xs font-medium text-gray-700 dark:text-gray-400\"\n\t\t\t\t\t>\n\t\t\t\t\t\tPending\n\t\t\t\t\t</span>\n\t\t\t\t</Table.Cell>\n\t\t\t\t<Table.Cell class=\"text-right\">\n\t\t\t\t\t<span\n\t\t\t\t\t\tclass=\"inline-flex items-center rounded-full bg-gray-500/10 px-2 py-1 text-xs font-medium text-gray-700 dark:text-gray-400\"\n\t\t\t\t\t>\n\t\t\t\t\t\tLow\n\t\t\t\t\t</span>\n\t\t\t\t</Table.Cell>\n\t\t\t</Table.Row>\n\t\t</Table.Body>\n\t</Table.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/table/table-with-footer.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Table from \"$lib/registry/ui/table/index.js\";\n\n\tconst invoices = [\n\t\t{\n\t\t\tinvoice: \"INV001\",\n\t\t\tpaymentStatus: \"Paid\",\n\t\t\ttotalAmount: \"$250.00\",\n\t\t\tpaymentMethod: \"Credit Card\",\n\t\t},\n\t\t{\n\t\t\tinvoice: \"INV002\",\n\t\t\tpaymentStatus: \"Pending\",\n\t\t\ttotalAmount: \"$150.00\",\n\t\t\tpaymentMethod: \"PayPal\",\n\t\t},\n\t\t{\n\t\t\tinvoice: \"INV003\",\n\t\t\tpaymentStatus: \"Unpaid\",\n\t\t\ttotalAmount: \"$350.00\",\n\t\t\tpaymentMethod: \"Bank Transfer\",\n\t\t},\n\t];\n</script>\n\n<Example title=\"With Footer\">\n\t<Table.Root>\n\t\t<Table.Caption>A list of your recent invoices.</Table.Caption>\n\t\t<Table.Header>\n\t\t\t<Table.Row>\n\t\t\t\t<Table.Head class=\"w-[100px]\">Invoice</Table.Head>\n\t\t\t\t<Table.Head>Status</Table.Head>\n\t\t\t\t<Table.Head>Method</Table.Head>\n\t\t\t\t<Table.Head class=\"text-right\">Amount</Table.Head>\n\t\t\t</Table.Row>\n\t\t</Table.Header>\n\t\t<Table.Body>\n\t\t\t{#each invoices as invoice (invoice.invoice)}\n\t\t\t\t<Table.Row>\n\t\t\t\t\t<Table.Cell class=\"font-medium\">{invoice.invoice}</Table.Cell>\n\t\t\t\t\t<Table.Cell>{invoice.paymentStatus}</Table.Cell>\n\t\t\t\t\t<Table.Cell>{invoice.paymentMethod}</Table.Cell>\n\t\t\t\t\t<Table.Cell class=\"text-right\">{invoice.totalAmount}</Table.Cell>\n\t\t\t\t</Table.Row>\n\t\t\t{/each}\n\t\t</Table.Body>\n\t\t<Table.Footer>\n\t\t\t<Table.Row>\n\t\t\t\t<Table.Cell colspan={3}>Total</Table.Cell>\n\t\t\t\t<Table.Cell class=\"text-right\">$2,500.00</Table.Cell>\n\t\t\t</Table.Row>\n\t\t</Table.Footer>\n\t</Table.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/table/table-with-input.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Table from \"$lib/registry/ui/table/index.js\";\n\timport { Input } from \"$lib/registry/ui/input/index.js\";\n</script>\n\n<Example title=\"With Input\">\n\t<Table.Root>\n\t\t<Table.Header>\n\t\t\t<Table.Row>\n\t\t\t\t<Table.Head>Product</Table.Head>\n\t\t\t\t<Table.Head>Quantity</Table.Head>\n\t\t\t\t<Table.Head>Price</Table.Head>\n\t\t\t</Table.Row>\n\t\t</Table.Header>\n\t\t<Table.Body>\n\t\t\t<Table.Row>\n\t\t\t\t<Table.Cell class=\"font-medium\">Wireless Mouse</Table.Cell>\n\t\t\t\t<Table.Cell>\n\t\t\t\t\t<Input type=\"number\" value=\"1\" class=\"h-8 w-20\" min=\"0\" />\n\t\t\t\t</Table.Cell>\n\t\t\t\t<Table.Cell>$29.99</Table.Cell>\n\t\t\t</Table.Row>\n\t\t\t<Table.Row>\n\t\t\t\t<Table.Cell class=\"font-medium\">Mechanical Keyboard</Table.Cell>\n\t\t\t\t<Table.Cell>\n\t\t\t\t\t<Input type=\"number\" value=\"2\" class=\"h-8 w-20\" min=\"0\" />\n\t\t\t\t</Table.Cell>\n\t\t\t\t<Table.Cell>$129.99</Table.Cell>\n\t\t\t</Table.Row>\n\t\t\t<Table.Row>\n\t\t\t\t<Table.Cell class=\"font-medium\">USB-C Hub</Table.Cell>\n\t\t\t\t<Table.Cell>\n\t\t\t\t\t<Input type=\"number\" value=\"1\" class=\"h-8 w-20\" min=\"0\" />\n\t\t\t\t</Table.Cell>\n\t\t\t\t<Table.Cell>$49.99</Table.Cell>\n\t\t\t</Table.Row>\n\t\t</Table.Body>\n\t</Table.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/table/table-with-select.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Table from \"$lib/registry/ui/table/index.js\";\n\timport * as Select from \"$lib/registry/ui/select/index.js\";\n\n\tconst people = [\n\t\t{ value: \"sarah\", label: \"Sarah Chen\" },\n\t\t{ value: \"marcus\", label: \"Marc Rodriguez\" },\n\t\t{ value: \"emily\", label: \"Emily Watson\" },\n\t\t{ value: \"david\", label: \"David Kim\" },\n\t];\n\n\tconst tasks = [\n\t\t{\n\t\t\ttask: \"Design homepage\",\n\t\t\tassignee: \"sarah\",\n\t\t\tstatus: \"In Progress\",\n\t\t},\n\t\t{\n\t\t\ttask: \"Implement API\",\n\t\t\tassignee: \"marcus\",\n\t\t\tstatus: \"Pending\",\n\t\t},\n\t\t{\n\t\t\ttask: \"Write tests\",\n\t\t\tassignee: \"emily\",\n\t\t\tstatus: \"Not Started\",\n\t\t},\n\t];\n</script>\n\n<Example title=\"With Select\">\n\t<Table.Root>\n\t\t<Table.Header>\n\t\t\t<Table.Row>\n\t\t\t\t<Table.Head>Task</Table.Head>\n\t\t\t\t<Table.Head>Assignee</Table.Head>\n\t\t\t\t<Table.Head>Status</Table.Head>\n\t\t\t</Table.Row>\n\t\t</Table.Header>\n\t\t<Table.Body>\n\t\t\t{#each tasks as item (item.task)}\n\t\t\t\t{@const assigneePerson = people.find((person) => person.value === item.assignee)}\n\t\t\t\t{@const assigneeLabel = assigneePerson?.label ?? \"\"}\n\t\t\t\t<Table.Row>\n\t\t\t\t\t<Table.Cell class=\"font-medium\">{item.task}</Table.Cell>\n\t\t\t\t\t<Table.Cell>\n\t\t\t\t\t\t<Select.Root type=\"single\" value={item.assignee}>\n\t\t\t\t\t\t\t<Select.Trigger class=\"w-40\" size=\"sm\">\n\t\t\t\t\t\t\t\t{assigneeLabel}\n\t\t\t\t\t\t\t</Select.Trigger>\n\t\t\t\t\t\t\t<Select.Content>\n\t\t\t\t\t\t\t\t<Select.Group>\n\t\t\t\t\t\t\t\t\t{#each people as person (person.value)}\n\t\t\t\t\t\t\t\t\t\t<Select.Item value={person.value}\n\t\t\t\t\t\t\t\t\t\t\t>{person.label}</Select.Item\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t\t</Select.Group>\n\t\t\t\t\t\t\t</Select.Content>\n\t\t\t\t\t\t</Select.Root>\n\t\t\t\t\t</Table.Cell>\n\t\t\t\t\t<Table.Cell>{item.status}</Table.Cell>\n\t\t\t\t</Table.Row>\n\t\t\t{/each}\n\t\t</Table.Body>\n\t</Table.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/table/table.svelte",
    "content": "<script lang=\"ts\">\n\timport ExampleWrapper from \"../../../../../routes/(app)/(layout)/(create)/components/example-wrapper.svelte\";\n\timport TableBasic from \"./table-basic.svelte\";\n\timport TableWithFooter from \"./table-with-footer.svelte\";\n\timport TableSimple from \"./table-simple.svelte\";\n\timport TableWithBadges from \"./table-with-badges.svelte\";\n\timport TableWithActions from \"./table-with-actions.svelte\";\n\timport TableWithSelect from \"./table-with-select.svelte\";\n\timport TableWithInput from \"./table-with-input.svelte\";\n</script>\n\n<ExampleWrapper>\n\t<TableBasic />\n\t<TableWithFooter />\n\t<TableSimple />\n\t<TableWithBadges />\n\t<TableWithActions />\n\t<TableWithSelect />\n\t<TableWithInput />\n</ExampleWrapper>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/tabs/tabs-basic.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Tabs from \"$lib/registry/ui/tabs/index.js\";\n</script>\n\n<Example title=\"Basic\">\n\t<Tabs.Root value=\"home\">\n\t\t<Tabs.List>\n\t\t\t<Tabs.Trigger value=\"home\">Home</Tabs.Trigger>\n\t\t\t<Tabs.Trigger value=\"settings\">Settings</Tabs.Trigger>\n\t\t</Tabs.List>\n\t</Tabs.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/tabs/tabs-disabled.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Tabs from \"$lib/registry/ui/tabs/index.js\";\n</script>\n\n<Example title=\"Disabled\">\n\t<Tabs.Root value=\"home\">\n\t\t<Tabs.List>\n\t\t\t<Tabs.Trigger value=\"home\">Home</Tabs.Trigger>\n\t\t\t<Tabs.Trigger value=\"settings\" disabled>Disabled</Tabs.Trigger>\n\t\t</Tabs.List>\n\t</Tabs.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/tabs/tabs-icon-only.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Tabs from \"$lib/registry/ui/tabs/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Example title=\"Icon Only\">\n\t<Tabs.Root value=\"home\">\n\t\t<Tabs.List>\n\t\t\t<Tabs.Trigger value=\"home\">\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"HomeIcon\"\n\t\t\t\t\ttabler=\"IconHome\"\n\t\t\t\t\thugeicons=\"HomeIcon\"\n\t\t\t\t\tphosphor=\"HouseIcon\"\n\t\t\t\t\tremixicon=\"RiHomeLine\"\n\t\t\t\t/>\n\t\t\t</Tabs.Trigger>\n\t\t\t<Tabs.Trigger value=\"search\">\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"SearchIcon\"\n\t\t\t\t\ttabler=\"IconSearch\"\n\t\t\t\t\thugeicons=\"SearchIcon\"\n\t\t\t\t\tphosphor=\"MagnifyingGlassIcon\"\n\t\t\t\t\tremixicon=\"RiSearchLine\"\n\t\t\t\t/>\n\t\t\t</Tabs.Trigger>\n\t\t\t<Tabs.Trigger value=\"settings\">\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"SettingsIcon\"\n\t\t\t\t\ttabler=\"IconSettings\"\n\t\t\t\t\thugeicons=\"SettingsIcon\"\n\t\t\t\t\tphosphor=\"GearIcon\"\n\t\t\t\t\tremixicon=\"RiSettingsLine\"\n\t\t\t\t/>\n\t\t\t</Tabs.Trigger>\n\t\t</Tabs.List>\n\t</Tabs.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/tabs/tabs-line-disabled.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Tabs from \"$lib/registry/ui/tabs/index.js\";\n</script>\n\n<Example title=\"Line Disabled\">\n\t<Tabs.Root value=\"overview\">\n\t\t<Tabs.List variant=\"line\">\n\t\t\t<Tabs.Trigger value=\"overview\">Overview</Tabs.Trigger>\n\t\t\t<Tabs.Trigger value=\"analytics\">Analytics</Tabs.Trigger>\n\t\t\t<Tabs.Trigger value=\"reports\" disabled>Reports</Tabs.Trigger>\n\t\t</Tabs.List>\n\t</Tabs.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/tabs/tabs-line-with-content.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Tabs from \"$lib/registry/ui/tabs/index.js\";\n</script>\n\n<Example title=\"Line With Content\">\n\t<Tabs.Root value=\"account\">\n\t\t<Tabs.List variant=\"line\">\n\t\t\t<Tabs.Trigger value=\"account\">Account</Tabs.Trigger>\n\t\t\t<Tabs.Trigger value=\"password\">Password</Tabs.Trigger>\n\t\t\t<Tabs.Trigger value=\"notifications\">Notifications</Tabs.Trigger>\n\t\t</Tabs.List>\n\t\t<div class=\"rounded-lg border p-4\">\n\t\t\t<Tabs.Content value=\"account\">\n\t\t\t\tManage your account preferences and profile information.\n\t\t\t</Tabs.Content>\n\t\t\t<Tabs.Content value=\"password\">\n\t\t\t\tUpdate your password to keep your account secure.\n\t\t\t</Tabs.Content>\n\t\t\t<Tabs.Content value=\"notifications\">\n\t\t\t\tConfigure how you receive notifications and alerts.\n\t\t\t</Tabs.Content>\n\t\t</div>\n\t</Tabs.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/tabs/tabs-line.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Tabs from \"$lib/registry/ui/tabs/index.js\";\n</script>\n\n<Example title=\"Line\">\n\t<Tabs.Root value=\"overview\">\n\t\t<Tabs.List variant=\"line\">\n\t\t\t<Tabs.Trigger value=\"overview\">Overview</Tabs.Trigger>\n\t\t\t<Tabs.Trigger value=\"analytics\">Analytics</Tabs.Trigger>\n\t\t\t<Tabs.Trigger value=\"reports\">Reports</Tabs.Trigger>\n\t\t</Tabs.List>\n\t</Tabs.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/tabs/tabs-multiple.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Tabs from \"$lib/registry/ui/tabs/index.js\";\n</script>\n\n<Example title=\"Multiple\">\n\t<Tabs.Root value=\"overview\">\n\t\t<Tabs.List>\n\t\t\t<Tabs.Trigger value=\"overview\">Overview</Tabs.Trigger>\n\t\t\t<Tabs.Trigger value=\"analytics\">Analytics</Tabs.Trigger>\n\t\t\t<Tabs.Trigger value=\"reports\">Reports</Tabs.Trigger>\n\t\t\t<Tabs.Trigger value=\"settings\">Settings</Tabs.Trigger>\n\t\t</Tabs.List>\n\t</Tabs.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/tabs/tabs-variants-comparison.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Tabs from \"$lib/registry/ui/tabs/index.js\";\n</script>\n\n<Example title=\"Variants Alignment\">\n\t<div class=\"flex gap-4\">\n\t\t<Tabs.Root value=\"overview\">\n\t\t\t<Tabs.List>\n\t\t\t\t<Tabs.Trigger value=\"overview\">Overview</Tabs.Trigger>\n\t\t\t\t<Tabs.Trigger value=\"analytics\">Analytics</Tabs.Trigger>\n\t\t\t</Tabs.List>\n\t\t</Tabs.Root>\n\t\t<Tabs.Root value=\"overview\">\n\t\t\t<Tabs.List variant=\"line\">\n\t\t\t\t<Tabs.Trigger value=\"overview\">Overview</Tabs.Trigger>\n\t\t\t\t<Tabs.Trigger value=\"analytics\">Analytics</Tabs.Trigger>\n\t\t\t</Tabs.List>\n\t\t</Tabs.Root>\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/tabs/tabs-vertical.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Tabs from \"$lib/registry/ui/tabs/index.js\";\n</script>\n\n<Example title=\"Vertical\">\n\t<Tabs.Root value=\"account\" orientation=\"vertical\">\n\t\t<Tabs.List>\n\t\t\t<Tabs.Trigger value=\"account\">Account</Tabs.Trigger>\n\t\t\t<Tabs.Trigger value=\"password\">Password</Tabs.Trigger>\n\t\t\t<Tabs.Trigger value=\"notifications\">Notifications</Tabs.Trigger>\n\t\t</Tabs.List>\n\t\t<div class=\"rounded-lg border p-4\">\n\t\t\t<Tabs.Content value=\"account\">\n\t\t\t\tManage your account preferences and profile information.\n\t\t\t</Tabs.Content>\n\t\t\t<Tabs.Content value=\"password\">\n\t\t\t\tUpdate your password to keep your account secure. Use a strong password with a mix\n\t\t\t\tof letters, numbers, and symbols.\n\t\t\t</Tabs.Content>\n\t\t\t<Tabs.Content value=\"notifications\">\n\t\t\t\tConfigure how you receive notifications and alerts. Choose which types of\n\t\t\t\tnotifications you want to receive and how you want to receive them.\n\t\t\t</Tabs.Content>\n\t\t</div>\n\t</Tabs.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/tabs/tabs-with-content.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Tabs from \"$lib/registry/ui/tabs/index.js\";\n</script>\n\n<Example title=\"With Content\">\n\t<Tabs.Root value=\"account\">\n\t\t<Tabs.List>\n\t\t\t<Tabs.Trigger value=\"account\">Account</Tabs.Trigger>\n\t\t\t<Tabs.Trigger value=\"password\">Password</Tabs.Trigger>\n\t\t\t<Tabs.Trigger value=\"notifications\">Notifications</Tabs.Trigger>\n\t\t</Tabs.List>\n\t\t<div class=\"rounded-lg border p-4\">\n\t\t\t<Tabs.Content value=\"account\">\n\t\t\t\tManage your account preferences and profile information.\n\t\t\t</Tabs.Content>\n\t\t\t<Tabs.Content value=\"password\">\n\t\t\t\tUpdate your password to keep your account secure.\n\t\t\t</Tabs.Content>\n\t\t\t<Tabs.Content value=\"notifications\">\n\t\t\t\tConfigure how you receive notifications and alerts.\n\t\t\t</Tabs.Content>\n\t\t</div>\n\t</Tabs.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/tabs/tabs-with-dropdown.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Tabs from \"$lib/registry/ui/tabs/index.js\";\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Example title=\"With Dropdown\">\n\t<Tabs.Root value=\"overview\">\n\t\t<div class=\"flex items-center justify-between\">\n\t\t\t<Tabs.List>\n\t\t\t\t<Tabs.Trigger value=\"overview\">Overview</Tabs.Trigger>\n\t\t\t\t<Tabs.Trigger value=\"analytics\">Analytics</Tabs.Trigger>\n\t\t\t\t<Tabs.Trigger value=\"reports\">Reports</Tabs.Trigger>\n\t\t\t</Tabs.List>\n\t\t\t<DropdownMenu.Root>\n\t\t\t\t<DropdownMenu.Trigger>\n\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t<Button variant=\"ghost\" size=\"icon\" class=\"size-8\" {...props}>\n\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\tlucide=\"MoreHorizontalIcon\"\n\t\t\t\t\t\t\t\ttabler=\"IconDots\"\n\t\t\t\t\t\t\t\thugeicons=\"MoreHorizontalCircle01Icon\"\n\t\t\t\t\t\t\t\tphosphor=\"DotsThreeOutlineIcon\"\n\t\t\t\t\t\t\t\tremixicon=\"RiMoreLine\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<span class=\"sr-only\">More options</span>\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t{/snippet}\n\t\t\t\t</DropdownMenu.Trigger>\n\t\t\t\t<DropdownMenu.Content align=\"end\">\n\t\t\t\t\t<DropdownMenu.Item>Settings</DropdownMenu.Item>\n\t\t\t\t\t<DropdownMenu.Item>Export</DropdownMenu.Item>\n\t\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t\t<DropdownMenu.Item>Archive</DropdownMenu.Item>\n\t\t\t\t</DropdownMenu.Content>\n\t\t\t</DropdownMenu.Root>\n\t\t</div>\n\n\t\t<div class=\"rounded-lg border p-4\">\n\t\t\t<Tabs.Content value=\"overview\">\n\t\t\t\tView your dashboard metrics and key performance indicators.\n\t\t\t</Tabs.Content>\n\t\t\t<Tabs.Content value=\"analytics\">\n\t\t\t\tDetailed analytics and insights about your data.\n\t\t\t</Tabs.Content>\n\t\t\t<Tabs.Content value=\"reports\">Generate and view custom reports.</Tabs.Content>\n\t\t</div>\n\t</Tabs.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/tabs/tabs-with-icons.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Tabs from \"$lib/registry/ui/tabs/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Example title=\"With Icons\">\n\t<Tabs.Root value=\"preview\">\n\t\t<Tabs.List>\n\t\t\t<Tabs.Trigger value=\"preview\">\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"AppWindowIcon\"\n\t\t\t\t\ttabler=\"IconAppWindow\"\n\t\t\t\t\thugeicons=\"CursorInWindowIcon\"\n\t\t\t\t\tphosphor=\"AppWindowIcon\"\n\t\t\t\t\tremixicon=\"RiWindowLine\"\n\t\t\t\t/>\n\t\t\t\tPreview\n\t\t\t</Tabs.Trigger>\n\t\t\t<Tabs.Trigger value=\"code\">\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"CodeIcon\"\n\t\t\t\t\ttabler=\"IconCode\"\n\t\t\t\t\thugeicons=\"CodeIcon\"\n\t\t\t\t\tphosphor=\"CodeIcon\"\n\t\t\t\t\tremixicon=\"RiCodeLine\"\n\t\t\t\t/>\n\t\t\t\tCode\n\t\t\t</Tabs.Trigger>\n\t\t</Tabs.List>\n\t</Tabs.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/tabs/tabs-with-input-and-button.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Tabs from \"$lib/registry/ui/tabs/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport { Input } from \"$lib/registry/ui/input/index.js\";\n</script>\n\n<Example title=\"With Input and Button\" containerClass=\"col-span-full\">\n\t<Tabs.Root value=\"overview\" class=\"mx-auto w-full max-w-lg\">\n\t\t<div class=\"flex items-center gap-4\">\n\t\t\t<Tabs.List>\n\t\t\t\t<Tabs.Trigger value=\"overview\">Overview</Tabs.Trigger>\n\t\t\t\t<Tabs.Trigger value=\"analytics\">Analytics</Tabs.Trigger>\n\t\t\t</Tabs.List>\n\t\t\t<div class=\"ml-auto flex items-center gap-2\">\n\t\t\t\t<Input placeholder=\"Search...\" class=\"w-44\" />\n\t\t\t\t<Button>Action</Button>\n\t\t\t</div>\n\t\t</div>\n\t\t<div class=\"rounded-lg border p-4\">\n\t\t\t<Tabs.Content value=\"overview\">\n\t\t\t\tView your dashboard metrics and key performance indicators.\n\t\t\t</Tabs.Content>\n\t\t\t<Tabs.Content value=\"analytics\">\n\t\t\t\tDetailed analytics and insights about your data.\n\t\t\t</Tabs.Content>\n\t\t\t<Tabs.Content value=\"reports\">Generate and view custom reports.</Tabs.Content>\n\t\t</div>\n\t</Tabs.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/tabs/tabs.svelte",
    "content": "<script lang=\"ts\">\n\timport ExampleWrapper from \"../../../../../routes/(app)/(layout)/(create)/components/example-wrapper.svelte\";\n\timport TabsBasic from \"./tabs-basic.svelte\";\n\timport TabsLine from \"./tabs-line.svelte\";\n\timport TabsVariantsComparison from \"./tabs-variants-comparison.svelte\";\n\timport TabsDisabled from \"./tabs-disabled.svelte\";\n\timport TabsWithIcons from \"./tabs-with-icons.svelte\";\n\timport TabsIconOnly from \"./tabs-icon-only.svelte\";\n\timport TabsMultiple from \"./tabs-multiple.svelte\";\n\timport TabsWithContent from \"./tabs-with-content.svelte\";\n\timport TabsLineWithContent from \"./tabs-line-with-content.svelte\";\n\timport TabsLineDisabled from \"./tabs-line-disabled.svelte\";\n\timport TabsWithDropdown from \"./tabs-with-dropdown.svelte\";\n\timport TabsVertical from \"./tabs-vertical.svelte\";\n\timport TabsWithInputAndButton from \"./tabs-with-input-and-button.svelte\";\n</script>\n\n<ExampleWrapper>\n\t<TabsBasic />\n\t<TabsLine />\n\t<TabsVariantsComparison />\n\t<TabsDisabled />\n\t<TabsWithIcons />\n\t<TabsIconOnly />\n\t<TabsMultiple />\n\t<TabsWithContent />\n\t<TabsLineWithContent />\n\t<TabsLineDisabled />\n\t<TabsWithDropdown />\n\t<TabsVertical />\n\t<TabsWithInputAndButton />\n</ExampleWrapper>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/textarea/textarea-basic.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Textarea } from \"$lib/registry/ui/textarea/index.js\";\n</script>\n\n<Example title=\"Basic\">\n\t<Textarea placeholder=\"Type your message here.\" />\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/textarea/textarea-disabled.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport { Textarea } from \"$lib/registry/ui/textarea/index.js\";\n</script>\n\n<Example title=\"Disabled\">\n\t<Field.Field>\n\t\t<Field.Label for=\"textarea-demo-disabled\">Message</Field.Label>\n\t\t<Textarea id=\"textarea-demo-disabled\" placeholder=\"Type your message here.\" disabled />\n\t</Field.Field>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/textarea/textarea-invalid.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Textarea } from \"$lib/registry/ui/textarea/index.js\";\n</script>\n\n<Example title=\"Invalid\">\n\t<Textarea placeholder=\"Type your message here.\" aria-invalid=\"true\" />\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/textarea/textarea-with-description.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport { Textarea } from \"$lib/registry/ui/textarea/index.js\";\n</script>\n\n<Example title=\"With Description\">\n\t<Field.Field>\n\t\t<Field.Label for=\"textarea-demo-message-2\">Message</Field.Label>\n\t\t<Textarea id=\"textarea-demo-message-2\" placeholder=\"Type your message here.\" rows={6} />\n\t\t<Field.Description>Type your message and press enter to send.</Field.Description>\n\t</Field.Field>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/textarea/textarea-with-label.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport { Textarea } from \"$lib/registry/ui/textarea/index.js\";\n</script>\n\n<Example title=\"With Label\">\n\t<Field.Field>\n\t\t<Field.Label for=\"textarea-demo-message\">Message</Field.Label>\n\t\t<Textarea id=\"textarea-demo-message\" placeholder=\"Type your message here.\" rows={6} />\n\t</Field.Field>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/textarea/textarea.svelte",
    "content": "<script lang=\"ts\">\n\timport ExampleWrapper from \"../../../../../routes/(app)/(layout)/(create)/components/example-wrapper.svelte\";\n\timport TextareaBasic from \"./textarea-basic.svelte\";\n\timport TextareaInvalid from \"./textarea-invalid.svelte\";\n\timport TextareaWithLabel from \"./textarea-with-label.svelte\";\n\timport TextareaWithDescription from \"./textarea-with-description.svelte\";\n\timport TextareaDisabled from \"./textarea-disabled.svelte\";\n</script>\n\n<ExampleWrapper>\n\t<TextareaBasic />\n\t<TextareaInvalid />\n\t<TextareaWithLabel />\n\t<TextareaWithDescription />\n\t<TextareaDisabled />\n</ExampleWrapper>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/toggle/toggle-basic.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Toggle } from \"$lib/registry/ui/toggle/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Example title=\"Basic\">\n\t<div class=\"flex flex-wrap items-center gap-2\">\n\t\t<Toggle aria-label=\"Toggle bold\" pressed>\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"BoldIcon\"\n\t\t\t\ttabler=\"IconBold\"\n\t\t\t\thugeicons=\"TextBoldIcon\"\n\t\t\t\tphosphor=\"TextBIcon\"\n\t\t\t\tremixicon=\"RiBold\"\n\t\t\t/>\n\t\t</Toggle>\n\t\t<Toggle aria-label=\"Toggle italic\">\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ItalicIcon\"\n\t\t\t\ttabler=\"IconItalic\"\n\t\t\t\thugeicons=\"TextItalicIcon\"\n\t\t\t\tphosphor=\"TextItalicIcon\"\n\t\t\t\tremixicon=\"RiItalic\"\n\t\t\t/>\n\t\t</Toggle>\n\t\t<Toggle aria-label=\"Toggle underline\">\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"UnderlineIcon\"\n\t\t\t\ttabler=\"IconUnderline\"\n\t\t\t\thugeicons=\"TextUnderlineIcon\"\n\t\t\t\tphosphor=\"TextUnderlineIcon\"\n\t\t\t\tremixicon=\"RiUnderline\"\n\t\t\t/>\n\t\t</Toggle>\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/toggle/toggle-disabled.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Toggle } from \"$lib/registry/ui/toggle/index.js\";\n</script>\n\n<Example title=\"Disabled\">\n\t<div class=\"flex flex-wrap items-center gap-2\">\n\t\t<Toggle aria-label=\"Toggle disabled\" disabled>Disabled</Toggle>\n\t\t<Toggle variant=\"outline\" aria-label=\"Toggle disabled outline\" disabled>Disabled</Toggle>\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/toggle/toggle-outline.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Toggle } from \"$lib/registry/ui/toggle/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Example title=\"Outline\">\n\t<div class=\"flex flex-wrap items-center gap-2\">\n\t\t<Toggle variant=\"outline\" aria-label=\"Toggle italic\">\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ItalicIcon\"\n\t\t\t\ttabler=\"IconItalic\"\n\t\t\t\thugeicons=\"TextItalicIcon\"\n\t\t\t\tphosphor=\"TextItalicIcon\"\n\t\t\t\tremixicon=\"RiItalic\"\n\t\t\t/>\n\t\t\tItalic\n\t\t</Toggle>\n\t\t<Toggle variant=\"outline\" aria-label=\"Toggle bold\">\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"BoldIcon\"\n\t\t\t\ttabler=\"IconBold\"\n\t\t\t\thugeicons=\"TextBoldIcon\"\n\t\t\t\tphosphor=\"TextBIcon\"\n\t\t\t\tremixicon=\"RiBold\"\n\t\t\t/>\n\t\t\tBold\n\t\t</Toggle>\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/toggle/toggle-sizes.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Toggle } from \"$lib/registry/ui/toggle/index.js\";\n</script>\n\n<Example title=\"Sizes\">\n\t<div class=\"flex flex-wrap items-center gap-2\">\n\t\t<Toggle variant=\"outline\" aria-label=\"Toggle small\" size=\"sm\">Small</Toggle>\n\t\t<Toggle variant=\"outline\" aria-label=\"Toggle default\" size=\"default\">Default</Toggle>\n\t\t<Toggle variant=\"outline\" aria-label=\"Toggle large\" size=\"lg\">Large</Toggle>\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/toggle/toggle-with-button-icon-text.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport { Toggle } from \"$lib/registry/ui/toggle/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Example title=\"With Button Icon + Text\">\n\t<div class=\"flex flex-col gap-4\">\n\t\t<div class=\"flex items-center gap-2\">\n\t\t\t<Button size=\"sm\" variant=\"outline\">\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"BoldIcon\"\n\t\t\t\t\ttabler=\"IconBold\"\n\t\t\t\t\thugeicons=\"TextBoldIcon\"\n\t\t\t\t\tphosphor=\"TextBIcon\"\n\t\t\t\t\tremixicon=\"RiBold\"\n\t\t\t\t\tdata-icon=\"inline-start\"\n\t\t\t\t/>\n\t\t\t\tButton\n\t\t\t</Button>\n\t\t\t<Toggle variant=\"outline\" aria-label=\"Toggle sm icon text\" size=\"sm\">\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"BoldIcon\"\n\t\t\t\t\ttabler=\"IconBold\"\n\t\t\t\t\thugeicons=\"TextBoldIcon\"\n\t\t\t\t\tphosphor=\"TextBIcon\"\n\t\t\t\t\tremixicon=\"RiBold\"\n\t\t\t\t/>\n\t\t\t\tToggle\n\t\t\t</Toggle>\n\t\t</div>\n\t\t<div class=\"flex items-center gap-2\">\n\t\t\t<Button size=\"default\" variant=\"outline\">\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"ItalicIcon\"\n\t\t\t\t\ttabler=\"IconItalic\"\n\t\t\t\t\thugeicons=\"TextItalicIcon\"\n\t\t\t\t\tphosphor=\"TextItalicIcon\"\n\t\t\t\t\tremixicon=\"RiItalic\"\n\t\t\t\t\tdata-icon=\"inline-start\"\n\t\t\t\t/>\n\t\t\t\tButton\n\t\t\t</Button>\n\t\t\t<Toggle variant=\"outline\" aria-label=\"Toggle default icon text\" size=\"default\">\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"ItalicIcon\"\n\t\t\t\t\ttabler=\"IconItalic\"\n\t\t\t\t\thugeicons=\"TextItalicIcon\"\n\t\t\t\t\tphosphor=\"TextItalicIcon\"\n\t\t\t\t\tremixicon=\"RiItalic\"\n\t\t\t\t/>\n\t\t\t\tToggle\n\t\t\t</Toggle>\n\t\t</div>\n\t\t<div class=\"flex items-center gap-2\">\n\t\t\t<Button size=\"lg\" variant=\"outline\">\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"UnderlineIcon\"\n\t\t\t\t\ttabler=\"IconUnderline\"\n\t\t\t\t\thugeicons=\"TextUnderlineIcon\"\n\t\t\t\t\tphosphor=\"TextUnderlineIcon\"\n\t\t\t\t\tremixicon=\"RiUnderline\"\n\t\t\t\t\tdata-icon=\"inline-start\"\n\t\t\t\t/>\n\t\t\t\tButton\n\t\t\t</Button>\n\t\t\t<Toggle variant=\"outline\" aria-label=\"Toggle lg icon text\" size=\"lg\">\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"UnderlineIcon\"\n\t\t\t\t\ttabler=\"IconUnderline\"\n\t\t\t\t\thugeicons=\"TextUnderlineIcon\"\n\t\t\t\t\tphosphor=\"TextUnderlineIcon\"\n\t\t\t\t\tremixicon=\"RiUnderline\"\n\t\t\t\t/>\n\t\t\t\tToggle\n\t\t\t</Toggle>\n\t\t</div>\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/toggle/toggle-with-button-icon.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport { Toggle } from \"$lib/registry/ui/toggle/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Example title=\"With Button Icon\">\n\t<div class=\"flex flex-col gap-4\">\n\t\t<div class=\"flex items-center gap-2\">\n\t\t\t<Button variant=\"outline\" size=\"icon-sm\">\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"BoldIcon\"\n\t\t\t\t\ttabler=\"IconBold\"\n\t\t\t\t\thugeicons=\"TextBoldIcon\"\n\t\t\t\t\tphosphor=\"TextBIcon\"\n\t\t\t\t\tremixicon=\"RiBold\"\n\t\t\t\t/>\n\t\t\t</Button>\n\t\t\t<Toggle variant=\"outline\" aria-label=\"Toggle sm icon\" size=\"sm\">\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"BoldIcon\"\n\t\t\t\t\ttabler=\"IconBold\"\n\t\t\t\t\thugeicons=\"TextBoldIcon\"\n\t\t\t\t\tphosphor=\"TextBIcon\"\n\t\t\t\t\tremixicon=\"RiBold\"\n\t\t\t\t/>\n\t\t\t</Toggle>\n\t\t</div>\n\t\t<div class=\"flex items-center gap-2\">\n\t\t\t<Button variant=\"outline\" size=\"icon\">\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"ItalicIcon\"\n\t\t\t\t\ttabler=\"IconItalic\"\n\t\t\t\t\thugeicons=\"TextItalicIcon\"\n\t\t\t\t\tphosphor=\"TextItalicIcon\"\n\t\t\t\t\tremixicon=\"RiItalic\"\n\t\t\t\t/>\n\t\t\t</Button>\n\t\t\t<Toggle variant=\"outline\" aria-label=\"Toggle default icon\" size=\"default\">\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"ItalicIcon\"\n\t\t\t\t\ttabler=\"IconItalic\"\n\t\t\t\t\thugeicons=\"TextItalicIcon\"\n\t\t\t\t\tphosphor=\"TextItalicIcon\"\n\t\t\t\t\tremixicon=\"RiItalic\"\n\t\t\t\t/>\n\t\t\t</Toggle>\n\t\t</div>\n\t\t<div class=\"flex items-center gap-2\">\n\t\t\t<Button variant=\"outline\" size=\"icon-lg\">\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"UnderlineIcon\"\n\t\t\t\t\ttabler=\"IconUnderline\"\n\t\t\t\t\thugeicons=\"TextUnderlineIcon\"\n\t\t\t\t\tphosphor=\"TextUnderlineIcon\"\n\t\t\t\t\tremixicon=\"RiUnderline\"\n\t\t\t\t/>\n\t\t\t</Button>\n\t\t\t<Toggle variant=\"outline\" aria-label=\"Toggle lg icon\" size=\"lg\">\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"UnderlineIcon\"\n\t\t\t\t\ttabler=\"IconUnderline\"\n\t\t\t\t\thugeicons=\"TextUnderlineIcon\"\n\t\t\t\t\tphosphor=\"TextUnderlineIcon\"\n\t\t\t\t\tremixicon=\"RiUnderline\"\n\t\t\t\t/>\n\t\t\t</Toggle>\n\t\t</div>\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/toggle/toggle-with-button-text.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport { Toggle } from \"$lib/registry/ui/toggle/index.js\";\n</script>\n\n<Example title=\"With Button Text\">\n\t<div class=\"flex flex-col gap-4\">\n\t\t<div class=\"flex items-center gap-2\">\n\t\t\t<Button size=\"sm\" variant=\"outline\">Button</Button>\n\t\t\t<Toggle variant=\"outline\" aria-label=\"Toggle sm\" size=\"sm\">Toggle</Toggle>\n\t\t</div>\n\t\t<div class=\"flex items-center gap-2\">\n\t\t\t<Button size=\"default\" variant=\"outline\">Button</Button>\n\t\t\t<Toggle variant=\"outline\" aria-label=\"Toggle default\" size=\"default\">Toggle</Toggle>\n\t\t</div>\n\t\t<div class=\"flex items-center gap-2\">\n\t\t\t<Button size=\"lg\" variant=\"outline\">Button</Button>\n\t\t\t<Toggle variant=\"outline\" aria-label=\"Toggle lg\" size=\"lg\">Toggle</Toggle>\n\t\t</div>\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/toggle/toggle-with-icon.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Toggle } from \"$lib/registry/ui/toggle/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Example title=\"With Icon\">\n\t<div class=\"flex flex-wrap items-center gap-2\">\n\t\t<Toggle aria-label=\"Toggle bookmark\" pressed>\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"BookmarkIcon\"\n\t\t\t\ttabler=\"IconBookmark\"\n\t\t\t\thugeicons=\"BookmarkIcon\"\n\t\t\t\tphosphor=\"BookmarkIcon\"\n\t\t\t\tremixicon=\"RiBookmarkLine\"\n\t\t\t\tclass=\"group-data-[state=on]/toggle:fill-accent-foreground\"\n\t\t\t/>\n\t\t</Toggle>\n\t\t<Toggle variant=\"outline\" aria-label=\"Toggle bookmark outline\">\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"BookmarkIcon\"\n\t\t\t\ttabler=\"IconBookmark\"\n\t\t\t\thugeicons=\"BookmarkIcon\"\n\t\t\t\tphosphor=\"BookmarkIcon\"\n\t\t\t\tremixicon=\"RiBookmarkLine\"\n\t\t\t\tclass=\"group-data-[state=on]/toggle:fill-accent-foreground\"\n\t\t\t/>\n\t\t\tBookmark\n\t\t</Toggle>\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/toggle/toggle.svelte",
    "content": "<script lang=\"ts\">\n\timport ExampleWrapper from \"../../../../../routes/(app)/(layout)/(create)/components/example-wrapper.svelte\";\n\timport ToggleBasic from \"./toggle-basic.svelte\";\n\timport ToggleOutline from \"./toggle-outline.svelte\";\n\timport ToggleSizes from \"./toggle-sizes.svelte\";\n\timport ToggleWithButtonText from \"./toggle-with-button-text.svelte\";\n\timport ToggleWithButtonIcon from \"./toggle-with-button-icon.svelte\";\n\timport ToggleWithButtonIconText from \"./toggle-with-button-icon-text.svelte\";\n\timport ToggleDisabled from \"./toggle-disabled.svelte\";\n\timport ToggleWithIcon from \"./toggle-with-icon.svelte\";\n</script>\n\n<ExampleWrapper>\n\t<ToggleBasic />\n\t<ToggleOutline />\n\t<ToggleSizes />\n\t<ToggleWithButtonText />\n\t<ToggleWithButtonIcon />\n\t<ToggleWithButtonIconText />\n\t<ToggleDisabled />\n\t<ToggleWithIcon />\n</ExampleWrapper>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/toggle-group/toggle-group-basic.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as ToggleGroup from \"$lib/registry/ui/toggle-group/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Example title=\"Basic\">\n\t<ToggleGroup.Root type=\"multiple\" spacing={1}>\n\t\t<ToggleGroup.Item value=\"bold\" aria-label=\"Toggle bold\">\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"BoldIcon\"\n\t\t\t\ttabler=\"IconBold\"\n\t\t\t\thugeicons=\"TextBoldIcon\"\n\t\t\t\tphosphor=\"TextBIcon\"\n\t\t\t\tremixicon=\"RiBold\"\n\t\t\t/>\n\t\t</ToggleGroup.Item>\n\t\t<ToggleGroup.Item value=\"italic\" aria-label=\"Toggle italic\">\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ItalicIcon\"\n\t\t\t\ttabler=\"IconItalic\"\n\t\t\t\thugeicons=\"TextItalicIcon\"\n\t\t\t\tphosphor=\"TextItalicIcon\"\n\t\t\t\tremixicon=\"RiItalic\"\n\t\t\t/>\n\t\t</ToggleGroup.Item>\n\t\t<ToggleGroup.Item value=\"underline\" aria-label=\"Toggle underline\">\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"UnderlineIcon\"\n\t\t\t\ttabler=\"IconUnderline\"\n\t\t\t\thugeicons=\"TextUnderlineIcon\"\n\t\t\t\tphosphor=\"TextUnderlineIcon\"\n\t\t\t\tremixicon=\"RiUnderline\"\n\t\t\t/>\n\t\t</ToggleGroup.Item>\n\t</ToggleGroup.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/toggle-group/toggle-group-date-range.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as ToggleGroup from \"$lib/registry/ui/toggle-group/index.js\";\n\n\tlet value = $state(\"today\");\n</script>\n\n<Example title=\"Date Range\">\n\t<ToggleGroup.Root type=\"single\" bind:value variant=\"outline\" size=\"sm\" spacing={2}>\n\t\t<ToggleGroup.Item value=\"today\" aria-label=\"Today\">Today</ToggleGroup.Item>\n\t\t<ToggleGroup.Item value=\"week\" aria-label=\"This Week\">This Week</ToggleGroup.Item>\n\t\t<ToggleGroup.Item value=\"month\" aria-label=\"This Month\">This Month</ToggleGroup.Item>\n\t\t<ToggleGroup.Item value=\"year\" aria-label=\"This Year\">This Year</ToggleGroup.Item>\n\t</ToggleGroup.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/toggle-group/toggle-group-filter.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as ToggleGroup from \"$lib/registry/ui/toggle-group/index.js\";\n\n\tlet value = $state(\"all\");\n</script>\n\n<Example title=\"Filter\">\n\t<ToggleGroup.Root type=\"single\" bind:value variant=\"outline\" size=\"sm\">\n\t\t<ToggleGroup.Item value=\"all\" aria-label=\"All\">All</ToggleGroup.Item>\n\t\t<ToggleGroup.Item value=\"active\" aria-label=\"Active\">Active</ToggleGroup.Item>\n\t\t<ToggleGroup.Item value=\"completed\" aria-label=\"Completed\">Completed</ToggleGroup.Item>\n\t\t<ToggleGroup.Item value=\"archived\" aria-label=\"Archived\">Archived</ToggleGroup.Item>\n\t</ToggleGroup.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/toggle-group/toggle-group-font-weight-selector.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport * as ToggleGroup from \"$lib/registry/ui/toggle-group/index.js\";\n\n\tlet fontWeight = $state(\"normal\");\n</script>\n\n<Example title=\"Font Weight Selector\">\n\t<Field.Field>\n\t\t<Field.Label>Font Weight</Field.Label>\n\t\t<ToggleGroup.Root\n\t\t\ttype=\"single\"\n\t\t\tbind:value={fontWeight}\n\t\t\tvariant=\"outline\"\n\t\t\tspacing={2}\n\t\t\tsize=\"lg\"\n\t\t>\n\t\t\t<ToggleGroup.Item\n\t\t\t\tvalue=\"light\"\n\t\t\t\taria-label=\"Light\"\n\t\t\t\tclass=\"flex size-16 flex-col items-center justify-center rounded-xl\"\n\t\t\t>\n\t\t\t\t<span class=\"text-2xl leading-none font-light\">Aa</span>\n\t\t\t\t<span class=\"text-muted-foreground text-xs\">Light</span>\n\t\t\t</ToggleGroup.Item>\n\t\t\t<ToggleGroup.Item\n\t\t\t\tvalue=\"normal\"\n\t\t\t\taria-label=\"Normal\"\n\t\t\t\tclass=\"flex size-16 flex-col items-center justify-center rounded-xl\"\n\t\t\t>\n\t\t\t\t<span class=\"text-2xl leading-none font-normal\">Aa</span>\n\t\t\t\t<span class=\"text-muted-foreground text-xs\">Normal</span>\n\t\t\t</ToggleGroup.Item>\n\t\t\t<ToggleGroup.Item\n\t\t\t\tvalue=\"medium\"\n\t\t\t\taria-label=\"Medium\"\n\t\t\t\tclass=\"flex size-16 flex-col items-center justify-center rounded-xl\"\n\t\t\t>\n\t\t\t\t<span class=\"text-2xl leading-none font-medium\">Aa</span>\n\t\t\t\t<span class=\"text-muted-foreground text-xs\">Medium</span>\n\t\t\t</ToggleGroup.Item>\n\t\t\t<ToggleGroup.Item\n\t\t\t\tvalue=\"bold\"\n\t\t\t\taria-label=\"Bold\"\n\t\t\t\tclass=\"flex size-16 flex-col items-center justify-center rounded-xl\"\n\t\t\t>\n\t\t\t\t<span class=\"text-2xl leading-none font-bold\">Aa</span>\n\t\t\t\t<span class=\"text-muted-foreground text-xs\">Bold</span>\n\t\t\t</ToggleGroup.Item>\n\t\t</ToggleGroup.Root>\n\t\t<Field.Description>\n\t\t\tUse\n\t\t\t<code class=\"bg-muted rounded-md px-1 py-0.5 font-mono\">font-{fontWeight}</code>\n\t\t\tto set the font weight.\n\t\t</Field.Description>\n\t</Field.Field>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/toggle-group/toggle-group-outline-with-icons.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as ToggleGroup from \"$lib/registry/ui/toggle-group/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Example title=\"Outline With Icons\">\n\t<ToggleGroup.Root variant=\"outline\" type=\"multiple\" size=\"sm\">\n\t\t<ToggleGroup.Item value=\"bold\" aria-label=\"Toggle bold\">\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"BoldIcon\"\n\t\t\t\ttabler=\"IconBold\"\n\t\t\t\thugeicons=\"TextBoldIcon\"\n\t\t\t\tphosphor=\"TextBIcon\"\n\t\t\t\tremixicon=\"RiBold\"\n\t\t\t/>\n\t\t</ToggleGroup.Item>\n\t\t<ToggleGroup.Item value=\"italic\" aria-label=\"Toggle italic\">\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ItalicIcon\"\n\t\t\t\ttabler=\"IconItalic\"\n\t\t\t\thugeicons=\"TextItalicIcon\"\n\t\t\t\tphosphor=\"TextItalicIcon\"\n\t\t\t\tremixicon=\"RiItalic\"\n\t\t\t/>\n\t\t</ToggleGroup.Item>\n\t\t<ToggleGroup.Item value=\"underline\" aria-label=\"Toggle underline\">\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"UnderlineIcon\"\n\t\t\t\ttabler=\"IconUnderline\"\n\t\t\t\thugeicons=\"TextUnderlineIcon\"\n\t\t\t\tphosphor=\"TextUnderlineIcon\"\n\t\t\t\tremixicon=\"RiUnderline\"\n\t\t\t/>\n\t\t</ToggleGroup.Item>\n\t</ToggleGroup.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/toggle-group/toggle-group-outline.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as ToggleGroup from \"$lib/registry/ui/toggle-group/index.js\";\n\n\tlet value = $state(\"all\");\n</script>\n\n<Example title=\"Outline\">\n\t<ToggleGroup.Root variant=\"outline\" type=\"single\" bind:value>\n\t\t<ToggleGroup.Item value=\"all\" aria-label=\"Toggle all\">All</ToggleGroup.Item>\n\t\t<ToggleGroup.Item value=\"missed\" aria-label=\"Toggle missed\">Missed</ToggleGroup.Item>\n\t</ToggleGroup.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/toggle-group/toggle-group-sizes.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as ToggleGroup from \"$lib/registry/ui/toggle-group/index.js\";\n\n\tlet value1 = $state(\"top\");\n\tlet value2 = $state(\"top\");\n</script>\n\n<Example title=\"Sizes\">\n\t<div class=\"flex flex-col gap-4\">\n\t\t<ToggleGroup.Root size=\"sm\" type=\"single\" bind:value={value1} variant=\"outline\">\n\t\t\t<ToggleGroup.Item value=\"top\" aria-label=\"Toggle top\">Top</ToggleGroup.Item>\n\t\t\t<ToggleGroup.Item value=\"bottom\" aria-label=\"Toggle bottom\">Bottom</ToggleGroup.Item>\n\t\t\t<ToggleGroup.Item value=\"left\" aria-label=\"Toggle left\">Left</ToggleGroup.Item>\n\t\t\t<ToggleGroup.Item value=\"right\" aria-label=\"Toggle right\">Right</ToggleGroup.Item>\n\t\t</ToggleGroup.Root>\n\t\t<ToggleGroup.Root type=\"single\" bind:value={value2} variant=\"outline\">\n\t\t\t<ToggleGroup.Item value=\"top\" aria-label=\"Toggle top\">Top</ToggleGroup.Item>\n\t\t\t<ToggleGroup.Item value=\"bottom\" aria-label=\"Toggle bottom\">Bottom</ToggleGroup.Item>\n\t\t\t<ToggleGroup.Item value=\"left\" aria-label=\"Toggle left\">Left</ToggleGroup.Item>\n\t\t\t<ToggleGroup.Item value=\"right\" aria-label=\"Toggle right\">Right</ToggleGroup.Item>\n\t\t</ToggleGroup.Root>\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/toggle-group/toggle-group-sort.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as ToggleGroup from \"$lib/registry/ui/toggle-group/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\n\tlet value = $state(\"newest\");\n</script>\n\n<Example title=\"Sort\">\n\t<ToggleGroup.Root type=\"single\" bind:value variant=\"outline\" size=\"sm\">\n\t\t<ToggleGroup.Item value=\"newest\" aria-label=\"Newest\">\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowDownIcon\"\n\t\t\t\ttabler=\"IconArrowDown\"\n\t\t\t\thugeicons=\"ArrowDownIcon\"\n\t\t\t\tphosphor=\"ArrowDownIcon\"\n\t\t\t\tremixicon=\"RiArrowDownLine\"\n\t\t\t/>\n\t\t\tNewest\n\t\t</ToggleGroup.Item>\n\t\t<ToggleGroup.Item value=\"oldest\" aria-label=\"Oldest\">\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ArrowUpIcon\"\n\t\t\t\ttabler=\"IconArrowUp\"\n\t\t\t\thugeicons=\"ArrowUpIcon\"\n\t\t\t\tphosphor=\"ArrowUpIcon\"\n\t\t\t\tremixicon=\"RiArrowUpLine\"\n\t\t\t/>\n\t\t\tOldest\n\t\t</ToggleGroup.Item>\n\t\t<ToggleGroup.Item value=\"popular\" aria-label=\"Popular\">\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"TrendingUpIcon\"\n\t\t\t\ttabler=\"IconTrendingUp\"\n\t\t\t\thugeicons=\"TradeUpIcon\"\n\t\t\t\tphosphor=\"TrendUpIcon\"\n\t\t\t\tremixicon=\"RiLineChartLine\"\n\t\t\t/>\n\t\t\tPopular\n\t\t</ToggleGroup.Item>\n\t</ToggleGroup.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/toggle-group/toggle-group-spacing.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as ToggleGroup from \"$lib/registry/ui/toggle-group/index.js\";\n\n\tlet value = $state(\"top\");\n</script>\n\n<Example title=\"With Spacing\">\n\t<ToggleGroup.Root size=\"sm\" type=\"single\" bind:value variant=\"outline\" spacing={2}>\n\t\t<ToggleGroup.Item value=\"top\" aria-label=\"Toggle top\">Top</ToggleGroup.Item>\n\t\t<ToggleGroup.Item value=\"bottom\" aria-label=\"Toggle bottom\">Bottom</ToggleGroup.Item>\n\t\t<ToggleGroup.Item value=\"left\" aria-label=\"Toggle left\">Left</ToggleGroup.Item>\n\t\t<ToggleGroup.Item value=\"right\" aria-label=\"Toggle right\">Right</ToggleGroup.Item>\n\t</ToggleGroup.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/toggle-group/toggle-group-vertical-outline-with-icons.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as ToggleGroup from \"$lib/registry/ui/toggle-group/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Example title=\"Vertical Outline With Icons\">\n\t<ToggleGroup.Root variant=\"outline\" type=\"multiple\" orientation=\"vertical\" size=\"sm\">\n\t\t<ToggleGroup.Item value=\"bold\" aria-label=\"Toggle bold\">\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"BoldIcon\"\n\t\t\t\ttabler=\"IconBold\"\n\t\t\t\thugeicons=\"TextBoldIcon\"\n\t\t\t\tphosphor=\"TextBIcon\"\n\t\t\t\tremixicon=\"RiBold\"\n\t\t\t/>\n\t\t</ToggleGroup.Item>\n\t\t<ToggleGroup.Item value=\"italic\" aria-label=\"Toggle italic\">\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ItalicIcon\"\n\t\t\t\ttabler=\"IconItalic\"\n\t\t\t\thugeicons=\"TextItalicIcon\"\n\t\t\t\tphosphor=\"TextItalicIcon\"\n\t\t\t\tremixicon=\"RiItalic\"\n\t\t\t/>\n\t\t</ToggleGroup.Item>\n\t\t<ToggleGroup.Item value=\"underline\" aria-label=\"Toggle underline\">\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"UnderlineIcon\"\n\t\t\t\ttabler=\"IconUnderline\"\n\t\t\t\thugeicons=\"TextUnderlineIcon\"\n\t\t\t\tphosphor=\"TextUnderlineIcon\"\n\t\t\t\tremixicon=\"RiUnderline\"\n\t\t\t/>\n\t\t</ToggleGroup.Item>\n\t</ToggleGroup.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/toggle-group/toggle-group-vertical-outline.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as ToggleGroup from \"$lib/registry/ui/toggle-group/index.js\";\n\n\tlet value = $state(\"all\");\n</script>\n\n<Example title=\"Vertical Outline\">\n\t<ToggleGroup.Root variant=\"outline\" type=\"single\" bind:value orientation=\"vertical\" size=\"sm\">\n\t\t<ToggleGroup.Item value=\"all\" aria-label=\"Toggle all\">All</ToggleGroup.Item>\n\t\t<ToggleGroup.Item value=\"active\" aria-label=\"Toggle active\">Active</ToggleGroup.Item>\n\t\t<ToggleGroup.Item value=\"completed\" aria-label=\"Toggle completed\">\n\t\t\tCompleted\n\t\t</ToggleGroup.Item>\n\t\t<ToggleGroup.Item value=\"archived\" aria-label=\"Toggle archived\">Archived</ToggleGroup.Item>\n\t</ToggleGroup.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/toggle-group/toggle-group-vertical-with-spacing.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as ToggleGroup from \"$lib/registry/ui/toggle-group/index.js\";\n\n\tlet value = $state(\"top\");\n</script>\n\n<Example title=\"Vertical With Spacing\">\n\t<ToggleGroup.Root\n\t\tsize=\"sm\"\n\t\ttype=\"single\"\n\t\tbind:value\n\t\tvariant=\"outline\"\n\t\torientation=\"vertical\"\n\t\tspacing={1}\n\t>\n\t\t<ToggleGroup.Item value=\"top\" aria-label=\"Toggle top\">Top</ToggleGroup.Item>\n\t\t<ToggleGroup.Item value=\"bottom\" aria-label=\"Toggle bottom\">Bottom</ToggleGroup.Item>\n\t\t<ToggleGroup.Item value=\"left\" aria-label=\"Toggle left\">Left</ToggleGroup.Item>\n\t\t<ToggleGroup.Item value=\"right\" aria-label=\"Toggle right\">Right</ToggleGroup.Item>\n\t</ToggleGroup.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/toggle-group/toggle-group-vertical.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as ToggleGroup from \"$lib/registry/ui/toggle-group/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Example title=\"Vertical\">\n\t<ToggleGroup.Root type=\"multiple\" orientation=\"vertical\" spacing={1}>\n\t\t<ToggleGroup.Item value=\"bold\" aria-label=\"Toggle bold\">\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"BoldIcon\"\n\t\t\t\ttabler=\"IconBold\"\n\t\t\t\thugeicons=\"TextBoldIcon\"\n\t\t\t\tphosphor=\"TextBIcon\"\n\t\t\t\tremixicon=\"RiBold\"\n\t\t\t/>\n\t\t</ToggleGroup.Item>\n\t\t<ToggleGroup.Item value=\"italic\" aria-label=\"Toggle italic\">\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"ItalicIcon\"\n\t\t\t\ttabler=\"IconItalic\"\n\t\t\t\thugeicons=\"TextItalicIcon\"\n\t\t\t\tphosphor=\"TextItalicIcon\"\n\t\t\t\tremixicon=\"RiItalic\"\n\t\t\t/>\n\t\t</ToggleGroup.Item>\n\t\t<ToggleGroup.Item value=\"underline\" aria-label=\"Toggle underline\">\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"UnderlineIcon\"\n\t\t\t\ttabler=\"IconUnderline\"\n\t\t\t\thugeicons=\"TextUnderlineIcon\"\n\t\t\t\tphosphor=\"TextUnderlineIcon\"\n\t\t\t\tremixicon=\"RiUnderline\"\n\t\t\t/>\n\t\t</ToggleGroup.Item>\n\t</ToggleGroup.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/toggle-group/toggle-group-with-icons.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as ToggleGroup from \"$lib/registry/ui/toggle-group/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Example title=\"With Icons\">\n\t<ToggleGroup.Root type=\"multiple\" variant=\"outline\" spacing={2} size=\"sm\">\n\t\t<ToggleGroup.Item\n\t\t\tvalue=\"star\"\n\t\t\taria-label=\"Toggle star\"\n\t\t\tclass=\"data-[state=on]:*:[svg]:fill-foreground data-[state=on]:*:[svg]:stroke-foreground data-[state=on]:bg-transparent\"\n\t\t>\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"StarIcon\"\n\t\t\t\ttabler=\"IconStar\"\n\t\t\t\thugeicons=\"StarIcon\"\n\t\t\t\tphosphor=\"StarIcon\"\n\t\t\t\tremixicon=\"RiStarLine\"\n\t\t\t/>\n\t\t\tStar\n\t\t</ToggleGroup.Item>\n\t\t<ToggleGroup.Item\n\t\t\tvalue=\"heart\"\n\t\t\taria-label=\"Toggle heart\"\n\t\t\tclass=\"data-[state=on]:*:[svg]:fill-foreground data-[state=on]:*:[svg]:stroke-foreground data-[state=on]:bg-transparent\"\n\t\t>\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"HeartIcon\"\n\t\t\t\ttabler=\"IconHeart\"\n\t\t\t\thugeicons=\"FavouriteIcon\"\n\t\t\t\tphosphor=\"HeartIcon\"\n\t\t\t\tremixicon=\"RiHeartLine\"\n\t\t\t/>\n\t\t\tHeart\n\t\t</ToggleGroup.Item>\n\t\t<ToggleGroup.Item\n\t\t\tvalue=\"bookmark\"\n\t\t\taria-label=\"Toggle bookmark\"\n\t\t\tclass=\"data-[state=on]:*:[svg]:fill-foreground data-[state=on]:*:[svg]:stroke-foreground data-[state=on]:bg-transparent\"\n\t\t>\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"BookmarkIcon\"\n\t\t\t\ttabler=\"IconBookmark\"\n\t\t\t\thugeicons=\"BookmarkIcon\"\n\t\t\t\tphosphor=\"BookmarkIcon\"\n\t\t\t\tremixicon=\"RiBookmarkLine\"\n\t\t\t/>\n\t\t\tBookmark\n\t\t</ToggleGroup.Item>\n\t</ToggleGroup.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/toggle-group/toggle-group-with-input-and-select.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as ToggleGroup from \"$lib/registry/ui/toggle-group/index.js\";\n\timport * as Select from \"$lib/registry/ui/select/index.js\";\n\timport { Input } from \"$lib/registry/ui/input/index.js\";\n\n\tconst items = [\n\t\t{ label: \"All\", value: \"all\" },\n\t\t{ label: \"Active\", value: \"active\" },\n\t\t{ label: \"Archived\", value: \"archived\" },\n\t];\n\n\tlet selectedValue = $state(items[0].value);\n\tconst selectedLabel = $derived(\n\t\titems.find((item) => item.value === selectedValue)?.label ?? \"All\"\n\t);\n\tlet toggleValue = $state(\"grid\");\n</script>\n\n<Example title=\"With Input and Select\">\n\t<div class=\"flex items-center gap-2\">\n\t\t<Input type=\"search\" placeholder=\"Search...\" class=\"flex-1\" />\n\t\t<Select.Root type=\"single\" bind:value={selectedValue}>\n\t\t\t<Select.Trigger class=\"w-32\">\n\t\t\t\t{selectedLabel}\n\t\t\t</Select.Trigger>\n\t\t\t<Select.Content>\n\t\t\t\t<Select.Group>\n\t\t\t\t\t{#each items as item (item.value)}\n\t\t\t\t\t\t<Select.Item value={item.value} label={item.label}>\n\t\t\t\t\t\t\t{item.label}\n\t\t\t\t\t\t</Select.Item>\n\t\t\t\t\t{/each}\n\t\t\t\t</Select.Group>\n\t\t\t</Select.Content>\n\t\t</Select.Root>\n\t\t<ToggleGroup.Root type=\"single\" bind:value={toggleValue} variant=\"outline\">\n\t\t\t<ToggleGroup.Item value=\"grid\" aria-label=\"Grid view\">Grid</ToggleGroup.Item>\n\t\t\t<ToggleGroup.Item value=\"list\" aria-label=\"List view\">List</ToggleGroup.Item>\n\t\t</ToggleGroup.Root>\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/toggle-group/toggle-group.svelte",
    "content": "<script lang=\"ts\">\n\timport ExampleWrapper from \"../../../../../routes/(app)/(layout)/(create)/components/example-wrapper.svelte\";\n\timport ToggleGroupBasic from \"./toggle-group-basic.svelte\";\n\timport ToggleGroupOutline from \"./toggle-group-outline.svelte\";\n\timport ToggleGroupOutlineWithIcons from \"./toggle-group-outline-with-icons.svelte\";\n\timport ToggleGroupSizes from \"./toggle-group-sizes.svelte\";\n\timport ToggleGroupSpacing from \"./toggle-group-spacing.svelte\";\n\timport ToggleGroupWithIcons from \"./toggle-group-with-icons.svelte\";\n\timport ToggleGroupFilter from \"./toggle-group-filter.svelte\";\n\timport ToggleGroupDateRange from \"./toggle-group-date-range.svelte\";\n\timport ToggleGroupSort from \"./toggle-group-sort.svelte\";\n\timport ToggleGroupWithInputAndSelect from \"./toggle-group-with-input-and-select.svelte\";\n\timport ToggleGroupVertical from \"./toggle-group-vertical.svelte\";\n\timport ToggleGroupVerticalOutline from \"./toggle-group-vertical-outline.svelte\";\n\timport ToggleGroupVerticalOutlineWithIcons from \"./toggle-group-vertical-outline-with-icons.svelte\";\n\timport ToggleGroupVerticalWithSpacing from \"./toggle-group-vertical-with-spacing.svelte\";\n\timport ToggleGroupFontWeightSelector from \"./toggle-group-font-weight-selector.svelte\";\n</script>\n\n<ExampleWrapper>\n\t<ToggleGroupBasic />\n\t<ToggleGroupOutline />\n\t<ToggleGroupOutlineWithIcons />\n\t<ToggleGroupSizes />\n\t<ToggleGroupSpacing />\n\t<ToggleGroupWithIcons />\n\t<ToggleGroupFilter />\n\t<ToggleGroupDateRange />\n\t<ToggleGroupSort />\n\t<ToggleGroupWithInputAndSelect />\n\t<ToggleGroupVertical />\n\t<ToggleGroupVerticalOutline />\n\t<ToggleGroupVerticalOutlineWithIcons />\n\t<ToggleGroupVerticalWithSpacing />\n\t<ToggleGroupFontWeightSelector />\n</ExampleWrapper>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/tooltip/tooltip-basic.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Tooltip from \"$lib/registry/ui/tooltip/index.js\";\n</script>\n\n<Example title=\"Basic\">\n\t<Tooltip.Root>\n\t\t<Tooltip.Trigger>\n\t\t\t{#snippet child({ props })}\n\t\t\t\t<Button variant=\"outline\" class=\"w-fit\" {...props}>Show Tooltip</Button>\n\t\t\t{/snippet}\n\t\t</Tooltip.Trigger>\n\t\t<Tooltip.Content>\n\t\t\t<p>Add to library</p>\n\t\t</Tooltip.Content>\n\t</Tooltip.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/tooltip/tooltip-disabled.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Tooltip from \"$lib/registry/ui/tooltip/index.js\";\n</script>\n\n<Example title=\"Disabled\">\n\t<Tooltip.Root>\n\t\t<Tooltip.Trigger>\n\t\t\t{#snippet child({ props })}\n\t\t\t\t<span class=\"inline-block w-fit\" {...props}>\n\t\t\t\t\t<Button variant=\"outline\" disabled>Disabled</Button>\n\t\t\t\t</span>\n\t\t\t{/snippet}\n\t\t</Tooltip.Trigger>\n\t\t<Tooltip.Content>\n\t\t\t<p>This feature is currently unavailable</p>\n\t\t</Tooltip.Content>\n\t</Tooltip.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/tooltip/tooltip-formatted.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Tooltip from \"$lib/registry/ui/tooltip/index.js\";\n</script>\n\n<Example title=\"Formatted Content\">\n\t<Tooltip.Root>\n\t\t<Tooltip.Trigger>\n\t\t\t{#snippet child({ props })}\n\t\t\t\t<Button variant=\"outline\" class=\"w-fit\" {...props}>Status</Button>\n\t\t\t{/snippet}\n\t\t</Tooltip.Trigger>\n\t\t<Tooltip.Content>\n\t\t\t<div class=\"flex flex-col gap-1\">\n\t\t\t\t<p class=\"font-semibold\">Active</p>\n\t\t\t\t<p class=\"text-xs opacity-80\">Last updated 2 hours ago</p>\n\t\t\t</div>\n\t\t</Tooltip.Content>\n\t</Tooltip.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/tooltip/tooltip-long-content.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Tooltip from \"$lib/registry/ui/tooltip/index.js\";\n</script>\n\n<Example title=\"Long Content\">\n\t<Tooltip.Root>\n\t\t<Tooltip.Trigger>\n\t\t\t{#snippet child({ props })}\n\t\t\t\t<Button variant=\"outline\" class=\"w-fit\" {...props}>Show Tooltip</Button>\n\t\t\t{/snippet}\n\t\t</Tooltip.Trigger>\n\t\t<Tooltip.Content>\n\t\t\tTo learn more about how this works, check out the docs. If you have any questions,\n\t\t\tplease reach out to us.\n\t\t</Tooltip.Content>\n\t</Tooltip.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/tooltip/tooltip-on-link.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Tooltip from \"$lib/registry/ui/tooltip/index.js\";\n</script>\n\n<Example title=\"On Link\">\n\t<Tooltip.Root>\n\t\t<Tooltip.Trigger>\n\t\t\t{#snippet child({ props })}\n\t\t\t\t<a\n\t\t\t\t\thref=\"/\"\n\t\t\t\t\tclass=\"text-primary w-fit text-sm underline-offset-4 hover:underline\"\n\t\t\t\t\tonclick={(e) => e.preventDefault()}\n\t\t\t\t\t{...props}\n\t\t\t\t>\n\t\t\t\t\tLearn more\n\t\t\t\t</a>\n\t\t\t{/snippet}\n\t\t</Tooltip.Trigger>\n\t\t<Tooltip.Content>\n\t\t\t<p>Click to read the documentation</p>\n\t\t</Tooltip.Content>\n\t</Tooltip.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/tooltip/tooltip-sides.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Tooltip from \"$lib/registry/ui/tooltip/index.js\";\n</script>\n\n<Example title=\"Sides\">\n\t<div class=\"flex flex-wrap gap-2\">\n\t\t{#each [\"top\", \"right\", \"bottom\", \"left\"] as const as side (side)}\n\t\t\t<Tooltip.Root>\n\t\t\t\t<Tooltip.Trigger>\n\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t<Button variant=\"outline\" class=\"w-fit capitalize\" {...props}>{side}</Button\n\t\t\t\t\t\t>\n\t\t\t\t\t{/snippet}\n\t\t\t\t</Tooltip.Trigger>\n\t\t\t\t<Tooltip.Content {side}>\n\t\t\t\t\t<p>Add to library</p>\n\t\t\t\t</Tooltip.Content>\n\t\t\t</Tooltip.Root>\n\t\t{/each}\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/tooltip/tooltip-with-icon.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Tooltip from \"$lib/registry/ui/tooltip/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Example title=\"With Icon\">\n\t<Tooltip.Root>\n\t\t<Tooltip.Trigger>\n\t\t\t{#snippet child({ props })}\n\t\t\t\t<Button variant=\"ghost\" size=\"icon\" {...props}>\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"InfoIcon\"\n\t\t\t\t\t\ttabler=\"IconInfoCircle\"\n\t\t\t\t\t\thugeicons=\"AlertCircleIcon\"\n\t\t\t\t\t\tphosphor=\"InfoIcon\"\n\t\t\t\t\t\tremixicon=\"RiInformationLine\"\n\t\t\t\t\t/>\n\t\t\t\t\t<span class=\"sr-only\">Info</span>\n\t\t\t\t</Button>\n\t\t\t{/snippet}\n\t\t</Tooltip.Trigger>\n\t\t<Tooltip.Content>\n\t\t\t<p>Additional information</p>\n\t\t</Tooltip.Content>\n\t</Tooltip.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/tooltip/tooltip-with-keyboard.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Tooltip from \"$lib/registry/ui/tooltip/index.js\";\n\timport * as Kbd from \"$lib/registry/ui/kbd/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Example title=\"With Keyboard Shortcut\">\n\t<Tooltip.Root>\n\t\t<Tooltip.Trigger>\n\t\t\t{#snippet child({ props })}\n\t\t\t\t<Button variant=\"outline\" size=\"icon-sm\" {...props}>\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"SaveIcon\"\n\t\t\t\t\t\ttabler=\"IconDeviceFloppy\"\n\t\t\t\t\t\thugeicons=\"FloppyDiskIcon\"\n\t\t\t\t\t\tphosphor=\"FloppyDiskIcon\"\n\t\t\t\t\t\tremixicon=\"RiSaveLine\"\n\t\t\t\t\t/>\n\t\t\t\t</Button>\n\t\t\t{/snippet}\n\t\t</Tooltip.Trigger>\n\t\t<Tooltip.Content class=\"pr-1.5\">\n\t\t\t<div class=\"flex items-center gap-2\">\n\t\t\t\tSave Changes <Kbd.Root>S</Kbd.Root>\n\t\t\t</div>\n\t\t</Tooltip.Content>\n\t</Tooltip.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/tooltip/tooltip.svelte",
    "content": "<script lang=\"ts\">\n\timport ExampleWrapper from \"../../../../../routes/(app)/(layout)/(create)/components/example-wrapper.svelte\";\n\timport TooltipBasic from \"./tooltip-basic.svelte\";\n\timport TooltipSides from \"./tooltip-sides.svelte\";\n\timport TooltipWithIcon from \"./tooltip-with-icon.svelte\";\n\timport TooltipLongContent from \"./tooltip-long-content.svelte\";\n\timport TooltipDisabled from \"./tooltip-disabled.svelte\";\n\timport TooltipWithKeyboard from \"./tooltip-with-keyboard.svelte\";\n\timport TooltipOnLink from \"./tooltip-on-link.svelte\";\n\timport TooltipFormatted from \"./tooltip-formatted.svelte\";\n</script>\n\n<ExampleWrapper>\n\t<TooltipBasic />\n\t<TooltipSides />\n\t<TooltipWithIcon />\n\t<TooltipLongContent />\n\t<TooltipDisabled />\n\t<TooltipWithKeyboard />\n\t<TooltipOnLink />\n\t<TooltipFormatted />\n</ExampleWrapper>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/vercel/activate-agent-dialog.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Dialog from \"$lib/registry/ui/dialog/index.js\";\n\timport * as Item from \"$lib/registry/ui/item/index.js\";\n\timport * as Alert from \"$lib/registry/ui/alert/index.js\";\n\timport { Badge } from \"$lib/registry/ui/badge/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\n\tconst agentFeatures = [\n\t\t{\n\t\t\tid: \"code-reviews\",\n\t\t\ttitle: \"Code reviews\",\n\t\t\tdescription: \"with full codebase context to catch\",\n\t\t\thighlight: \"hard-to-find\",\n\t\t\tendText: \"bugs.\",\n\t\t},\n\t\t{\n\t\t\tid: \"code-suggestions\",\n\t\t\ttitle: \"Code suggestions\",\n\t\t\tdescription: \"validated in sandboxes before you merge.\",\n\t\t},\n\t\t{\n\t\t\tid: \"root-cause\",\n\t\t\ttitle: \"Root-cause analysis\",\n\t\t\tdescription: \"for production issues with deployment context.\",\n\t\t\thasBadge: true,\n\t\t},\n\t];\n</script>\n\n<Example title=\"Activate Agent\" class=\"items-center justify-center\">\n\t<Dialog.Root>\n\t\t<Dialog.Trigger>\n\t\t\t{#snippet child({ props })}\n\t\t\t\t<Button variant=\"outline\" {...props}>Activate Agent</Button>\n\t\t\t{/snippet}\n\t\t</Dialog.Trigger>\n\t\t<Dialog.Content showCloseButton={false}>\n\t\t\t<Dialog.Header>\n\t\t\t\t<Dialog.Title>Ship faster & safer with Vercel Agent</Dialog.Title>\n\t\t\t\t<Dialog.Description>\n\t\t\t\t\tYour use is subject to Vercel's\n\t\t\t\t\t<a href=\"#/\">Public Beta Agreement</a> and\n\t\t\t\t\t<a href=\"#/\">AI Product Terms</a>.\n\t\t\t\t</Dialog.Description>\n\t\t\t</Dialog.Header>\n\t\t\t<div class=\"no-scrollbar flex max-h-[50vh] flex-col gap-4 overflow-y-auto\">\n\t\t\t\t<Item.Group class=\"gap-0 pr-2\">\n\t\t\t\t\t{#each agentFeatures as feature (feature.id)}\n\t\t\t\t\t\t<Item.Root size=\"xs\" class=\"px-0\">\n\t\t\t\t\t\t\t<Item.Media variant=\"icon\" class=\"self-start\">\n\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\tlucide=\"CheckCircle2Icon\"\n\t\t\t\t\t\t\t\t\ttabler=\"IconCircleCheckFilled\"\n\t\t\t\t\t\t\t\t\thugeicons=\"CheckmarkCircle02Icon\"\n\t\t\t\t\t\t\t\t\tphosphor=\"CheckCircleIcon\"\n\t\t\t\t\t\t\t\t\tremixicon=\"RiCheckboxCircleLine\"\n\t\t\t\t\t\t\t\t\tclass=\"fill-primary text-primary-foreground size-5\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</Item.Media>\n\t\t\t\t\t\t\t<Item.Content>\n\t\t\t\t\t\t\t\t<Item.Title\n\t\t\t\t\t\t\t\t\tclass=\"text-muted-foreground *:[strong]:text-foreground inline leading-relaxed font-normal *:[strong]:font-medium\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<strong>{feature.title}</strong>\n\t\t\t\t\t\t\t\t\t{feature.description}\n\t\t\t\t\t\t\t\t\t{#if feature.highlight}\n\t\t\t\t\t\t\t\t\t\t<strong>{feature.highlight}</strong> {feature.endText}\n\t\t\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\t\t\t{#if feature.hasBadge}\n\t\t\t\t\t\t\t\t\t\t<Badge\n\t\t\t\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\t\t\t\tclass=\"bg-blue-100 text-blue-700 hover:bg-blue-100\"\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\tRequires Observability Plus\n\t\t\t\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\t\t</Item.Title>\n\t\t\t\t\t\t\t</Item.Content>\n\t\t\t\t\t\t</Item.Root>\n\t\t\t\t\t{/each}\n\t\t\t\t</Item.Group>\n\t\t\t\t<Alert.Root class=\"hidden sm:grid\">\n\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\tlucide=\"CircleDollarSignIcon\"\n\t\t\t\t\t\thugeicons=\"DollarCircleIcon\"\n\t\t\t\t\t\ttabler=\"IconCoin\"\n\t\t\t\t\t\tphosphor=\"CurrencyCircleDollarIcon\"\n\t\t\t\t\t\tremixicon=\"RiMoneyDollarCircleLine\"\n\t\t\t\t\t/>\n\t\t\t\t\t<Alert.Description>\n\t\t\t\t\t\tPro teams get $100 in Vercel Agent trial credit for 2 weeks.\n\t\t\t\t\t</Alert.Description>\n\t\t\t\t</Alert.Root>\n\t\t\t</div>\n\t\t\t<Dialog.Footer>\n\t\t\t\t<Dialog.Close>\n\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t<Button variant=\"outline\" {...props}>Cancel</Button>\n\t\t\t\t\t{/snippet}\n\t\t\t\t</Dialog.Close>\n\t\t\t\t<Button>Enable with $100 credits</Button>\n\t\t\t</Dialog.Footer>\n\t\t</Dialog.Content>\n\t</Dialog.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/vercel/analytics-card.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport { Badge } from \"$lib/registry/ui/badge/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport { AreaChart, Area } from \"layerchart\";\n\timport { curveLinear } from \"d3-shape\";\n\n\tconst chartData = [\n\t\t{ month: \"January\", visitors: 186 },\n\t\t{ month: \"February\", visitors: 305 },\n\t\t{ month: \"March\", visitors: 237 },\n\t\t{ month: \"April\", visitors: 73 },\n\t\t{ month: \"May\", visitors: 209 },\n\t\t{ month: \"June\", visitors: 214 },\n\t];\n\n\tconst chartConfig = {\n\t\tvisitors: {\n\t\t\tlabel: \"Visitors\",\n\t\t\tcolor: \"var(--chart-1)\",\n\t\t},\n\t} satisfies Chart.ChartConfig;\n</script>\n\n<Example title=\"Analytics Card\" class=\"justify-center\">\n\t<Card.Root class=\"mx-auto w-full max-w-sm data-[size=sm]:pb-0\" size=\"sm\">\n\t\t<Card.Header>\n\t\t\t<Card.Title>Analytics</Card.Title>\n\t\t\t<Card.Description>\n\t\t\t\t418.2K Visitors <Badge>+10%</Badge>\n\t\t\t</Card.Description>\n\t\t\t<Card.Action>\n\t\t\t\t<Button variant=\"outline\" size=\"sm\">View Analytics</Button>\n\t\t\t</Card.Action>\n\t\t</Card.Header>\n\t\t<Chart.Container config={chartConfig} class=\"aspect-[1/0.35]\">\n\t\t\t<AreaChart\n\t\t\t\tdata={chartData}\n\t\t\t\tx=\"month\"\n\t\t\t\tseries={[\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"visitors\",\n\t\t\t\t\t\tlabel: \"Visitors\",\n\t\t\t\t\t\tcolor: chartConfig.visitors.color,\n\t\t\t\t\t},\n\t\t\t\t]}\n\t\t\t\tprops={{\n\t\t\t\t\tarea: {\n\t\t\t\t\t\tcurve: curveLinear,\n\t\t\t\t\t\t\"fill-opacity\": 0.4,\n\t\t\t\t\t\tline: { class: \"stroke-1\" },\n\t\t\t\t\t},\n\t\t\t\t\txAxis: { format: () => \"\" },\n\t\t\t\t\tyAxis: { format: () => \"\" },\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{#snippet tooltip()}\n\t\t\t\t\t<Chart.Tooltip indicator=\"line\" hideLabel />\n\t\t\t\t{/snippet}\n\t\t\t\t{#snippet marks({ series, getAreaProps })}\n\t\t\t\t\t{#each series as s, i (i)}\n\t\t\t\t\t\t<Area {...getAreaProps(s, i)} />\n\t\t\t\t\t{/each}\n\t\t\t\t{/snippet}\n\t\t\t</AreaChart>\n\t\t</Chart.Container>\n\t</Card.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/vercel/anomaly-alert.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Empty from \"$lib/registry/ui/empty/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n</script>\n\n<Example title=\"Anomaly Alert\" class=\"items-center justify-center\">\n\t<Card.Root class=\"w-full max-w-xs\">\n\t\t<Card.Content class=\"p-6\">\n\t\t\t<Empty.Root class=\"mx-auto p-0\">\n\t\t\t\t<Empty.Header>\n\t\t\t\t\t<Empty.Title>Get alerted for anomalies</Empty.Title>\n\t\t\t\t\t<Empty.Description>\n\t\t\t\t\t\tAutomatically monitor your projects for anomalies and get notified.\n\t\t\t\t\t</Empty.Description>\n\t\t\t\t</Empty.Header>\n\t\t\t\t<Empty.Content>\n\t\t\t\t\t<Button>Upgrade to Observability Plus</Button>\n\t\t\t\t</Empty.Content>\n\t\t\t</Empty.Root>\n\t\t</Card.Content>\n\t</Card.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/vercel/billing-list.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Item from \"$lib/registry/ui/item/index.js\";\n\timport { Badge } from \"$lib/registry/ui/badge/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\timport { CalendarDate, DateFormatter, getLocalTimeZone } from \"@internationalized/date\";\n\n\tconst billingItems = [\n\t\t{\n\t\t\tmonth: \"November 2025\",\n\t\t\tinvoiceDate: new CalendarDate(2025, 11, 5),\n\t\t\tamount: \"$10.00\",\n\t\t\tstatus: \"Paid\" as const,\n\t\t},\n\t\t{\n\t\t\tmonth: \"October 2025\",\n\t\t\tinvoiceDate: new CalendarDate(2025, 10, 4),\n\t\t\tamount: \"$10.00\",\n\t\t\tstatus: \"Paid\" as const,\n\t\t},\n\t\t{\n\t\t\tmonth: \"September 2025\",\n\t\t\tinvoiceDate: new CalendarDate(2025, 9, 4),\n\t\t\tamount: \"$10.00\",\n\t\t\tstatus: \"Paid\" as const,\n\t\t},\n\t];\n\n\tconst dateFormatter = new DateFormatter(\"en-US\", {\n\t\tday: \"numeric\",\n\t\tmonth: \"short\",\n\t\tyear: \"numeric\",\n\t});\n</script>\n\n<Example title=\"Billing\" class=\"items-center lg:p-16\" containerClass=\"col-span-full\">\n\t<Item.Group class=\"max-w-7xl gap-0 rounded-lg border\">\n\t\t{#each billingItems as item, index (item.month)}\n\t\t\t<Item.Root class=\"grid grid-cols-[1fr_auto] lg:grid-cols-[2fr_1fr_1fr_auto]\">\n\t\t\t\t<Item.Content>\n\t\t\t\t\t<Item.Title>\n\t\t\t\t\t\t{item.month}\n\t\t\t\t\t\t<Badge\n\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\tclass=\"bg-green-100 text-green-700 hover:bg-green-100\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{item.status}\n\t\t\t\t\t\t</Badge>\n\t\t\t\t\t</Item.Title>\n\t\t\t\t\t<Item.Description>Infrastructure usage & Vercel platform</Item.Description>\n\t\t\t\t</Item.Content>\n\t\t\t\t<Item.Content class=\"hidden lg:flex\">\n\t\t\t\t\t<Item.Title>Total Due</Item.Title>\n\t\t\t\t\t<Item.Description>{item.amount}</Item.Description>\n\t\t\t\t</Item.Content>\n\t\t\t\t<Item.Content class=\"hidden lg:flex\">\n\t\t\t\t\t<Item.Description>\n\t\t\t\t\t\tInvoiced {dateFormatter.format(item.invoiceDate.toDate(getLocalTimeZone()))}\n\t\t\t\t\t</Item.Description>\n\t\t\t\t</Item.Content>\n\t\t\t\t<Item.Actions>\n\t\t\t\t\t<DropdownMenu.Root>\n\t\t\t\t\t\t<DropdownMenu.Trigger>\n\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t<Button variant=\"ghost\" size=\"icon\" {...props}>\n\t\t\t\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\t\t\t\tlucide=\"MoreHorizontalIcon\"\n\t\t\t\t\t\t\t\t\t\ttabler=\"IconDots\"\n\t\t\t\t\t\t\t\t\t\thugeicons=\"MoreHorizontalCircle01Icon\"\n\t\t\t\t\t\t\t\t\t\tphosphor=\"DotsThreeOutlineIcon\"\n\t\t\t\t\t\t\t\t\t\tremixicon=\"RiMoreLine\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<span class=\"sr-only\">More options</span>\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t</DropdownMenu.Trigger>\n\t\t\t\t\t\t<DropdownMenu.Content align=\"end\">\n\t\t\t\t\t\t\t<DropdownMenu.Item>View invoice</DropdownMenu.Item>\n\t\t\t\t\t\t\t<DropdownMenu.Item>Download PDF</DropdownMenu.Item>\n\t\t\t\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t\t\t\t<DropdownMenu.Item>Contact support</DropdownMenu.Item>\n\t\t\t\t\t\t</DropdownMenu.Content>\n\t\t\t\t\t</DropdownMenu.Root>\n\t\t\t\t</Item.Actions>\n\t\t\t\t<Item.Footer class=\"col-span-full w-full border-t pt-4 lg:hidden\">\n\t\t\t\t\t<Item.Content>\n\t\t\t\t\t\t<Item.Title>Total Due</Item.Title>\n\t\t\t\t\t\t<Item.Description>{item.amount}</Item.Description>\n\t\t\t\t\t</Item.Content>\n\t\t\t\t\t<Item.Content>\n\t\t\t\t\t\t<Item.Description>\n\t\t\t\t\t\t\tInvoiced {dateFormatter.format(\n\t\t\t\t\t\t\t\titem.invoiceDate.toDate(getLocalTimeZone())\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t</Item.Description>\n\t\t\t\t\t</Item.Content>\n\t\t\t\t</Item.Footer>\n\t\t\t</Item.Root>\n\t\t\t{#if index !== billingItems.length - 1}\n\t\t\t\t<Item.Separator class=\"my-0\" />\n\t\t\t{/if}\n\t\t{/each}\n\t</Item.Group>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/vercel/circular-gauge.svelte",
    "content": "<script lang=\"ts\">\n\tlet { percentage }: { percentage: number } = $props();\n\n\tconst normalizedPercentage = $derived(Math.min(Math.max(percentage, 0), 100));\n\tconst circumference = $derived(2 * Math.PI * 42.5);\n\tconst strokePercent = $derived((normalizedPercentage / 100) * circumference);\n</script>\n\n<svg\n\taria-hidden=\"true\"\n\tfill=\"none\"\n\theight=\"16\"\n\twidth=\"16\"\n\tstroke-width=\"2\"\n\tviewBox=\"0 0 100 100\"\n\tclass=\"-rotate-90\"\n>\n\t<circle\n\t\tcx=\"50\"\n\t\tcy=\"50\"\n\t\tr=\"42.5\"\n\t\tstroke-width=\"12\"\n\t\tstroke-dashoffset=\"0\"\n\t\tstroke-linecap=\"round\"\n\t\tstroke-linejoin=\"round\"\n\t\tclass=\"opacity-20\"\n\t\tstroke=\"currentColor\"\n\t\tstyle=\"stroke-dasharray: {circumference} {circumference};\"\n\t/>\n\t<circle\n\t\tcx=\"50\"\n\t\tcy=\"50\"\n\t\tr=\"42.5\"\n\t\tstroke-width=\"12\"\n\t\tstroke-dashoffset=\"0\"\n\t\tstroke-linecap=\"round\"\n\t\tstroke-linejoin=\"round\"\n\t\tstroke=\"currentColor\"\n\t\tclass=\"transition-all duration-300\"\n\t\tstyle=\"stroke-dasharray: {strokePercent} {circumference};\"\n\t/>\n</svg>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/vercel/deployment-filter.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport { RangeCalendar } from \"$lib/registry/ui/range-calendar/index.js\";\n\timport * as Popover from \"$lib/registry/ui/popover/index.js\";\n\timport * as InputGroup from \"$lib/registry/ui/input-group/index.js\";\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\timport { DateFormatter, getLocalTimeZone } from \"@internationalized/date\";\n\timport { SvelteSet } from \"svelte/reactivity\";\n\timport type { DateRange } from \"bits-ui\";\n\n\tconst environments = [\n\t\t\"All Environments\",\n\t\t\"Production\",\n\t\t\"Preview\",\n\t\t\"Development\",\n\t\t\"Staging\",\n\t\t\"Test\",\n\t\t\"Other\",\n\t];\n\n\tconst statuses = [\n\t\t{ name: \"Ready\", color: \"oklch(0.72 0.19 150)\" },\n\t\t{ name: \"Error\", color: \"oklch(0.64 0.21 25)\" },\n\t\t{ name: \"Building\", color: \"oklch(0.77 0.16 70)\" },\n\t\t{ name: \"Queued\", color: \"oklch(0.72 0.00 0)\" },\n\t\t{ name: \"Provisioning\", color: \"oklch(0.72 0.00 0)\" },\n\t\t{ name: \"Canceled\", color: \"oklch(0.72 0.00 0)\" },\n\t];\n\n\tconst dateFormatter = new DateFormatter(\"en-US\", {\n\t\tmonth: \"short\",\n\t\tday: \"2-digit\",\n\t\tyear: \"numeric\",\n\t});\n\n\tlet selectedEnvironment = $state(environments[0]);\n\tlet selectedStatuses = $state<Set<string>>(new Set(statuses.slice(0, 5).map((s) => s.name)));\n\tlet dateRange = $state<DateRange | undefined>(undefined);\n\n\tfunction toggleStatus(statusName: string) {\n\t\tconst next = new SvelteSet(selectedStatuses);\n\t\tif (next.has(statusName)) {\n\t\t\tnext.delete(statusName);\n\t\t} else {\n\t\t\tnext.add(statusName);\n\t\t}\n\t\tselectedStatuses = next;\n\t}\n</script>\n\n<Example title=\"Deployment Filter\" containerClass=\"col-span-full\">\n\t<div class=\"flex w-full flex-wrap items-center gap-2 *:w-full lg:*:w-auto\">\n\t\t<Popover.Root>\n\t\t\t<Popover.Trigger>\n\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t<Button variant=\"outline\" class=\"justify-start\" {...props}>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"CalendarIcon\"\n\t\t\t\t\t\t\ttabler=\"IconCalendar\"\n\t\t\t\t\t\t\thugeicons=\"Calendar01Icon\"\n\t\t\t\t\t\t\tphosphor=\"CalendarIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiCalendarLine\"\n\t\t\t\t\t\t\tdata-icon=\"inline-start\"\n\t\t\t\t\t\t\tclass=\"text-muted-foreground\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t{#if dateRange?.start}\n\t\t\t\t\t\t\t{#if dateRange?.end}\n\t\t\t\t\t\t\t\t{dateFormatter.format(dateRange?.start.toDate(getLocalTimeZone()))}\n\t\t\t\t\t\t\t\t-\n\t\t\t\t\t\t\t\t{dateFormatter.format(dateRange?.end.toDate(getLocalTimeZone()))}\n\t\t\t\t\t\t\t{:else}\n\t\t\t\t\t\t\t\t{dateFormatter.format(dateRange?.start.toDate(getLocalTimeZone()))}\n\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t{:else}\n\t\t\t\t\t\t\tSelect Date Range\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t</Button>\n\t\t\t\t{/snippet}\n\t\t\t</Popover.Trigger>\n\t\t\t<Popover.Content class=\"w-auto p-0\" align=\"start\">\n\t\t\t\t<RangeCalendar bind:value={dateRange} numberOfMonths={2} />\n\t\t\t</Popover.Content>\n\t\t</Popover.Root>\n\t\t<InputGroup.Root class=\"lg:ml-auto lg:max-w-72\">\n\t\t\t<InputGroup.Addon>\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"Search\"\n\t\t\t\t\ttabler=\"IconSearch\"\n\t\t\t\t\thugeicons=\"Search01Icon\"\n\t\t\t\t\tphosphor=\"MagnifyingGlassIcon\"\n\t\t\t\t\tremixicon=\"RiSearchLine\"\n\t\t\t\t/>\n\t\t\t</InputGroup.Addon>\n\t\t\t<InputGroup.Input placeholder=\"All Authors...\" />\n\t\t\t<InputGroup.Addon align=\"inline-end\">\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"ChevronDownIcon\"\n\t\t\t\t\ttabler=\"IconChevronDown\"\n\t\t\t\t\thugeicons=\"ArrowDown01Icon\"\n\t\t\t\t\tphosphor=\"CaretDownIcon\"\n\t\t\t\t\tremixicon=\"RiArrowDownSLine\"\n\t\t\t\t\tclass=\"text-muted-foreground\"\n\t\t\t\t/>\n\t\t\t</InputGroup.Addon>\n\t\t</InputGroup.Root>\n\t\t<DropdownMenu.Root>\n\t\t\t<DropdownMenu.Trigger>\n\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t<Button variant=\"outline\" class=\"justify-between\" {...props}>\n\t\t\t\t\t\t{selectedEnvironment}\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"ChevronDownIcon\"\n\t\t\t\t\t\t\ttabler=\"IconChevronDown\"\n\t\t\t\t\t\t\thugeicons=\"ArrowDown01Icon\"\n\t\t\t\t\t\t\tphosphor=\"CaretDownIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiArrowDownSLine\"\n\t\t\t\t\t\t\tdata-icon=\"inline-end\"\n\t\t\t\t\t\t\tclass=\"text-muted-foreground\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Button>\n\t\t\t\t{/snippet}\n\t\t\t</DropdownMenu.Trigger>\n\t\t\t<DropdownMenu.Content class=\"w-56\" align=\"end\">\n\t\t\t\t{#each environments as environment (environment)}\n\t\t\t\t\t<DropdownMenu.Item\n\t\t\t\t\t\tonSelect={() => (selectedEnvironment = environment)}\n\t\t\t\t\t\tdata-active={selectedEnvironment === environment}\n\t\t\t\t\t>\n\t\t\t\t\t\t{environment}\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"CheckIcon\"\n\t\t\t\t\t\t\ttabler=\"IconCheck\"\n\t\t\t\t\t\t\thugeicons=\"Tick02Icon\"\n\t\t\t\t\t\t\tphosphor=\"CheckIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiCheckLine\"\n\t\t\t\t\t\t\tclass=\"ml-auto opacity-0 group-data-[active=true]/dropdown-menu-item:opacity-100\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t{/each}\n\t\t\t</DropdownMenu.Content>\n\t\t</DropdownMenu.Root>\n\t\t<DropdownMenu.Root>\n\t\t\t<DropdownMenu.Trigger>\n\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t<Button variant=\"outline\" class=\"justify-between\" {...props}>\n\t\t\t\t\t\t<div class=\"flex items-center -space-x-0.5\">\n\t\t\t\t\t\t\t{#each statuses as status (status.name)}\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tstyle=\"--color: {status.color};\"\n\t\t\t\t\t\t\t\t\tclass=\"size-2.5 shrink-0 rounded-full border grayscale transition-all data-[active=true]:border-(--color) data-[active=true]:bg-(--color) data-[active=true]:grayscale-0\"\n\t\t\t\t\t\t\t\t\tdata-active={selectedStatuses.has(status.name)}\n\t\t\t\t\t\t\t\t></div>\n\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\tStatus {selectedStatuses.size}/{statuses.length}\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"ChevronDownIcon\"\n\t\t\t\t\t\t\ttabler=\"IconChevronDown\"\n\t\t\t\t\t\t\thugeicons=\"ArrowDown01Icon\"\n\t\t\t\t\t\t\tphosphor=\"CaretDownIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiArrowDownSLine\"\n\t\t\t\t\t\t\tdata-icon=\"inline-end\"\n\t\t\t\t\t\t\tclass=\"text-muted-foreground ml-auto\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Button>\n\t\t\t\t{/snippet}\n\t\t\t</DropdownMenu.Trigger>\n\t\t\t<DropdownMenu.Content class=\"w-56\" align=\"end\">\n\t\t\t\t{#each statuses as status (status.name)}\n\t\t\t\t\t{@const isSelected = selectedStatuses.has(status.name)}\n\t\t\t\t\t<DropdownMenu.Item\n\t\t\t\t\t\tonSelect={() => toggleStatus(status.name)}\n\t\t\t\t\t\tdata-active={isSelected}\n\t\t\t\t\t\tstyle=\"--color: {status.color};\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<div class=\"flex items-center gap-2\">\n\t\t\t\t\t\t\t<div class=\"size-2 rounded-full bg-(--color)\"></div>\n\t\t\t\t\t\t\t{status.name}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"CheckIcon\"\n\t\t\t\t\t\t\ttabler=\"IconCheck\"\n\t\t\t\t\t\t\thugeicons=\"Tick02Icon\"\n\t\t\t\t\t\t\tphosphor=\"CheckIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiCheckLine\"\n\t\t\t\t\t\t\tclass=\"ml-auto opacity-0 group-data-[active=true]/dropdown-menu-item:opacity-100\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t{/each}\n\t\t\t</DropdownMenu.Content>\n\t\t</DropdownMenu.Root>\n\t</div>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/vercel/feedback-form.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport * as NativeSelect from \"$lib/registry/ui/native-select/index.js\";\n\timport { Textarea } from \"$lib/registry/ui/textarea/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n</script>\n\n<Example title=\"Feedback Form\" class=\"items-center justify-center\">\n\t<Card.Root class=\"w-full max-w-sm\" size=\"sm\">\n\t\t<Card.Content>\n\t\t\t<form id=\"feedback-form\">\n\t\t\t\t<Field.Group>\n\t\t\t\t\t<Field.Field>\n\t\t\t\t\t\t<Field.Label for=\"topic\">Topic</Field.Label>\n\t\t\t\t\t\t<NativeSelect.Root id=\"topic\">\n\t\t\t\t\t\t\t<NativeSelect.Option value=\"\">Select a topic</NativeSelect.Option>\n\t\t\t\t\t\t\t<NativeSelect.Option value=\"ai\">AI</NativeSelect.Option>\n\t\t\t\t\t\t\t<NativeSelect.Option value=\"accounts-and-access-controls\">\n\t\t\t\t\t\t\t\tAccounts and Access Controls\n\t\t\t\t\t\t\t</NativeSelect.Option>\n\t\t\t\t\t\t\t<NativeSelect.Option value=\"billing\">Billing</NativeSelect.Option>\n\t\t\t\t\t\t\t<NativeSelect.Option value=\"cdn\">\n\t\t\t\t\t\t\t\tCDN (Firewall, Caching)\n\t\t\t\t\t\t\t</NativeSelect.Option>\n\t\t\t\t\t\t\t<NativeSelect.Option value=\"ci-cd\">\n\t\t\t\t\t\t\t\tCI/CD (Builds, Deployments, Environment Variables)\n\t\t\t\t\t\t\t</NativeSelect.Option>\n\t\t\t\t\t\t\t<NativeSelect.Option value=\"dashboard-interface\">\n\t\t\t\t\t\t\t\tDashboard Interface (Navigation, UI Issues)\n\t\t\t\t\t\t\t</NativeSelect.Option>\n\t\t\t\t\t\t\t<NativeSelect.Option value=\"domains\">Domains</NativeSelect.Option>\n\t\t\t\t\t\t\t<NativeSelect.Option value=\"frameworks\">Frameworks</NativeSelect.Option>\n\t\t\t\t\t\t\t<NativeSelect.Option value=\"marketplace-and-integrations\">\n\t\t\t\t\t\t\t\tMarketplace and Integrations\n\t\t\t\t\t\t\t</NativeSelect.Option>\n\t\t\t\t\t\t\t<NativeSelect.Option value=\"observability\">\n\t\t\t\t\t\t\t\tObservability (Observability, Logs, Monitoring)\n\t\t\t\t\t\t\t</NativeSelect.Option>\n\t\t\t\t\t\t\t<NativeSelect.Option value=\"storage\">Storage</NativeSelect.Option>\n\t\t\t\t\t\t</NativeSelect.Root>\n\t\t\t\t\t</Field.Field>\n\t\t\t\t\t<Field.Field>\n\t\t\t\t\t\t<Field.Label for=\"feedback\">Feedback</Field.Label>\n\t\t\t\t\t\t<Textarea id=\"feedback\" placeholder=\"Your feedback helps us improve...\" />\n\t\t\t\t\t</Field.Field>\n\t\t\t\t</Field.Group>\n\t\t\t</form>\n\t\t</Card.Content>\n\t\t<Card.Footer>\n\t\t\t<Button type=\"submit\" form=\"feedback-form\">Submit</Button>\n\t\t</Card.Footer>\n\t</Card.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/vercel/observability-card.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport { Badge } from \"$lib/registry/ui/badge/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<Example title=\"Observability\" class=\"items-center justify-center\">\n\t<Card.Root class=\"relative w-full max-w-md overflow-hidden pt-0\">\n\t\t<div class=\"bg-primary absolute inset-0 z-30 aspect-video opacity-50 mix-blend-color\"></div>\n\t\t<img\n\t\t\tsrc=\"https://images.unsplash.com/photo-1604076850742-4c7221f3101b?q=80&w=1887&auto=format&fit=crop&ixlib=rb-4.1.0&ixid=M3wxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8fA%3D%3D\"\n\t\t\talt=\"by mymind on Unsplash\"\n\t\t\ttitle=\"Photo by mymind on Unsplash\"\n\t\t\tclass=\"relative z-20 aspect-video w-full object-cover brightness-60 grayscale\"\n\t\t/>\n\t\t<Card.Header>\n\t\t\t<Card.Title>Observability Plus is replacing Monitoring</Card.Title>\n\t\t\t<Card.Description>\n\t\t\t\tSwitch to the improved way to explore your data, with natural language. Monitoring\n\t\t\t\twill no longer be available on the Pro plan in November, 2025\n\t\t\t</Card.Description>\n\t\t</Card.Header>\n\t\t<Card.Footer>\n\t\t\t<Button>\n\t\t\t\tCreate Query\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"PlusIcon\"\n\t\t\t\t\ttabler=\"IconPlus\"\n\t\t\t\t\thugeicons=\"PlusSignIcon\"\n\t\t\t\t\tphosphor=\"PlusIcon\"\n\t\t\t\t\tremixicon=\"RiAddLine\"\n\t\t\t\t\tdata-icon=\"inline-end\"\n\t\t\t\t/>\n\t\t\t</Button>\n\t\t\t<Badge variant=\"secondary\" class=\"ml-auto\">Warning</Badge>\n\t\t</Card.Footer>\n\t</Card.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/vercel/usage-card.svelte",
    "content": "<script lang=\"ts\">\n\timport Example from \"../../../../../routes/(app)/(layout)/(create)/components/example.svelte\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Item from \"$lib/registry/ui/item/index.js\";\n\timport CircularGauge from \"./circular-gauge.svelte\";\n\n\tconst items = [\n\t\t{\n\t\t\tname: \"Edge Requests\",\n\t\t\tvalue: \"$1.83K\",\n\t\t\tpercentage: 67.34,\n\t\t},\n\t\t{\n\t\t\tname: \"Fast Data Transfer\",\n\t\t\tpercentage: 52.18,\n\t\t\tvalue: \"$952.51\",\n\t\t},\n\t\t{\n\t\t\tname: \"Monitoring data points\",\n\t\t\tpercentage: 89.42,\n\t\t\tvalue: \"$901.20\",\n\t\t},\n\t\t{\n\t\t\tname: \"Web Analytics Events\",\n\t\t\tpercentage: 45.67,\n\t\t\tvalue: \"$603.71\",\n\t\t},\n\t\t{\n\t\t\tname: \"Edge Request CPU Duration\",\n\t\t\tpercentage: 23.91,\n\t\t\tvalue: \"$4.65\",\n\t\t},\n\t\t{\n\t\t\tname: \"Fast Origin Transfer\",\n\t\t\tpercentage: 38.75,\n\t\t\tvalue: \"$3.85\",\n\t\t},\n\t\t{\n\t\t\tname: \"ISR Reads\",\n\t\t\tpercentage: 71.24,\n\t\t\tvalue: \"$2.86\",\n\t\t},\n\t\t{\n\t\t\tname: \"Function Invocations\",\n\t\t\tpercentage: 15.83,\n\t\t\tvalue: \"$0.60\",\n\t\t},\n\t\t{\n\t\t\tname: \"ISR Writes\",\n\t\t\tpercentage: 26.23,\n\t\t\tvalue: \"524.52K / 2M\",\n\t\t},\n\t\t{\n\t\t\tname: \"Function Duration\",\n\t\t\tpercentage: 5.11,\n\t\t\tvalue: \"5.11 GB Hrs / 1K GB Hrs\",\n\t\t},\n\t];\n</script>\n\n<Example title=\"Usage\" class=\"items-center\">\n\t<Card.Root class=\"w-full max-w-sm gap-4\">\n\t\t<Card.Header>\n\t\t\t<Card.Title class=\"px-1 text-sm\">5 days remaining in cycle</Card.Title>\n\t\t</Card.Header>\n\t\t<Card.Content>\n\t\t\t<Item.Group class=\"gap-0\">\n\t\t\t\t{#each items as item (item.name)}\n\t\t\t\t\t<Item.Root size=\"xs\" class=\"px-0 group-hover/item-group:bg-transparent\">\n\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t<a href=\"#/\" {...props}>\n\t\t\t\t\t\t\t\t<Item.Media variant=\"icon\" class=\"text-primary\">\n\t\t\t\t\t\t\t\t\t<CircularGauge percentage={item.percentage} />\n\t\t\t\t\t\t\t\t</Item.Media>\n\t\t\t\t\t\t\t\t<Item.Content class=\"inline-block truncate\">\n\t\t\t\t\t\t\t\t\t<Item.Title class=\"inline\">{item.name}</Item.Title>\n\t\t\t\t\t\t\t\t</Item.Content>\n\t\t\t\t\t\t\t\t<Item.Actions>\n\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\tclass=\"text-muted-foreground font-mono text-xs font-medium tabular-nums\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{item.value}\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t</Item.Actions>\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t</Item.Root>\n\t\t\t\t{/each}\n\t\t\t</Item.Group>\n\t\t</Card.Content>\n\t</Card.Root>\n</Example>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/create/vercel/vercel.svelte",
    "content": "<script lang=\"ts\">\n\timport ExampleWrapper from \"../../../../../routes/(app)/(layout)/(create)/components/example-wrapper.svelte\";\n\timport DeploymentFilter from \"./deployment-filter.svelte\";\n\timport UsageCard from \"./usage-card.svelte\";\n\timport ObservabilityCard from \"./observability-card.svelte\";\n\timport BillingList from \"./billing-list.svelte\";\n\timport AnomalyAlert from \"./anomaly-alert.svelte\";\n\timport ActivateAgentDialog from \"./activate-agent-dialog.svelte\";\n\timport FeedbackForm from \"./feedback-form.svelte\";\n\timport AnalyticsCard from \"./analytics-card.svelte\";\n</script>\n\n<ExampleWrapper>\n\t<DeploymentFilter />\n\t<UsageCard />\n\t<ObservabilityCard />\n\t<BillingList />\n\t<AnomalyAlert />\n\t<ActivateAgentDialog />\n\t<FeedbackForm />\n\t<AnalyticsCard />\n</ExampleWrapper>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/dark-mode-dropdown-menu.svelte",
    "content": "<script lang=\"ts\">\n\timport SunIcon from \"@lucide/svelte/icons/sun\";\n\timport MoonIcon from \"@lucide/svelte/icons/moon\";\n\n\timport { resetMode, setMode } from \"mode-watcher\";\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\timport { buttonVariants } from \"$lib/registry/ui/button/index.js\";\n</script>\n\n<DropdownMenu.Root>\n\t<DropdownMenu.Trigger class={buttonVariants({ variant: \"outline\", size: \"icon\" })}>\n\t\t<SunIcon\n\t\t\tclass=\"h-[1.2rem] w-[1.2rem] scale-100 rotate-0 !transition-all dark:scale-0 dark:-rotate-90\"\n\t\t/>\n\t\t<MoonIcon\n\t\t\tclass=\"absolute h-[1.2rem] w-[1.2rem] scale-0 rotate-90 !transition-all dark:scale-100 dark:rotate-0\"\n\t\t/>\n\t\t<span class=\"sr-only\">Toggle theme</span>\n\t</DropdownMenu.Trigger>\n\t<DropdownMenu.Content align=\"end\">\n\t\t<DropdownMenu.Item onclick={() => setMode(\"light\")}>Light</DropdownMenu.Item>\n\t\t<DropdownMenu.Item onclick={() => setMode(\"dark\")}>Dark</DropdownMenu.Item>\n\t\t<DropdownMenu.Item onclick={() => resetMode()}>System</DropdownMenu.Item>\n\t</DropdownMenu.Content>\n</DropdownMenu.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/dark-mode-light-switch.svelte",
    "content": "<script lang=\"ts\">\n\timport SunIcon from \"@lucide/svelte/icons/sun\";\n\timport MoonIcon from \"@lucide/svelte/icons/moon\";\n\n\timport { toggleMode } from \"mode-watcher\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n</script>\n\n<Button onclick={toggleMode} variant=\"outline\" size=\"icon\">\n\t<SunIcon\n\t\tclass=\"h-[1.2rem] w-[1.2rem] scale-100 rotate-0 !transition-all dark:scale-0 dark:-rotate-90\"\n\t/>\n\t<MoonIcon\n\t\tclass=\"absolute h-[1.2rem] w-[1.2rem] scale-0 rotate-90 !transition-all dark:scale-100 dark:rotate-0\"\n\t/>\n\t<span class=\"sr-only\">Toggle theme</span>\n</Button>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/data-table/data-table-actions.svelte",
    "content": "<script lang=\"ts\">\n\timport EllipsisIcon from \"@lucide/svelte/icons/ellipsis\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\n\tlet { id }: { id: string } = $props();\n</script>\n\n<DropdownMenu.Root>\n\t<DropdownMenu.Trigger>\n\t\t{#snippet child({ props })}\n\t\t\t<Button {...props} variant=\"ghost\" size=\"icon\" class=\"relative size-8 p-0\">\n\t\t\t\t<span class=\"sr-only\">Open menu</span>\n\t\t\t\t<EllipsisIcon />\n\t\t\t</Button>\n\t\t{/snippet}\n\t</DropdownMenu.Trigger>\n\t<DropdownMenu.Content>\n\t\t<DropdownMenu.Group>\n\t\t\t<DropdownMenu.Label>Actions</DropdownMenu.Label>\n\t\t\t<DropdownMenu.Item onclick={() => navigator.clipboard.writeText(id)}>\n\t\t\t\tCopy payment ID\n\t\t\t</DropdownMenu.Item>\n\t\t</DropdownMenu.Group>\n\t\t<DropdownMenu.Separator />\n\t\t<DropdownMenu.Item>View customer</DropdownMenu.Item>\n\t\t<DropdownMenu.Item>View payment details</DropdownMenu.Item>\n\t</DropdownMenu.Content>\n</DropdownMenu.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/data-table/data-table-checkbox.svelte",
    "content": "<script lang=\"ts\">\n\timport type { ComponentProps } from \"svelte\";\n\timport { Checkbox } from \"$lib/registry/ui/checkbox/index.js\";\n\n\tlet {\n\t\tchecked = false,\n\t\tonCheckedChange = (v) => (checked = v),\n\t\t...restProps\n\t}: ComponentProps<typeof Checkbox> = $props();\n</script>\n\n<Checkbox bind:checked={() => checked, onCheckedChange} {...restProps} />\n"
  },
  {
    "path": "docs/src/lib/registry/examples/data-table/data-table-email-button.svelte",
    "content": "<script lang=\"ts\">\n\timport type { ComponentProps } from \"svelte\";\n\timport ArrowUpDownIcon from \"@lucide/svelte/icons/arrow-up-down\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\n\tlet { variant = \"ghost\", ...restProps }: ComponentProps<typeof Button> = $props();\n</script>\n\n<Button {variant} {...restProps}>\n\tEmail\n\t<ArrowUpDownIcon class=\"ms-2 size-4\" />\n</Button>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/data-table-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport ChevronDownIcon from \"@lucide/svelte/icons/chevron-down\";\n\timport {\n\t\ttype ColumnDef,\n\t\ttype ColumnFiltersState,\n\t\ttype PaginationState,\n\t\ttype RowSelectionState,\n\t\ttype SortingState,\n\t\ttype VisibilityState,\n\t\tgetCoreRowModel,\n\t\tgetFilteredRowModel,\n\t\tgetPaginationRowModel,\n\t\tgetSortedRowModel,\n\t} from \"@tanstack/table-core\";\n\timport { createRawSnippet } from \"svelte\";\n\timport DataTableCheckbox from \"./data-table/data-table-checkbox.svelte\";\n\timport DataTableEmailButton from \"./data-table/data-table-email-button.svelte\";\n\timport DataTableActions from \"./data-table/data-table-actions.svelte\";\n\timport * as Table from \"$lib/registry/ui/table/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\timport { Input } from \"$lib/registry/ui/input/index.js\";\n\timport {\n\t\tFlexRender,\n\t\tcreateSvelteTable,\n\t\trenderComponent,\n\t\trenderSnippet,\n\t} from \"$lib/registry/ui/data-table/index.js\";\n\n\ttype Payment = {\n\t\tid: string;\n\t\tamount: number;\n\t\tstatus: \"Pending\" | \"Processing\" | \"Success\" | \"Failed\";\n\t\temail: string;\n\t};\n\n\tconst data: Payment[] = [\n\t\t{\n\t\t\tid: \"m5gr84i9\",\n\t\t\tamount: 316,\n\t\t\tstatus: \"Success\",\n\t\t\temail: \"ken99@yahoo.com\",\n\t\t},\n\t\t{\n\t\t\tid: \"3u1reuv4\",\n\t\t\tamount: 242,\n\t\t\tstatus: \"Success\",\n\t\t\temail: \"Abe45@gmail.com\",\n\t\t},\n\t\t{\n\t\t\tid: \"derv1ws0\",\n\t\t\tamount: 837,\n\t\t\tstatus: \"Processing\",\n\t\t\temail: \"Monserrat44@gmail.com\",\n\t\t},\n\t\t{\n\t\t\tid: \"5kma53ae\",\n\t\t\tamount: 874,\n\t\t\tstatus: \"Success\",\n\t\t\temail: \"Silas22@gmail.com\",\n\t\t},\n\t\t{\n\t\t\tid: \"bhqecj4p\",\n\t\t\tamount: 721,\n\t\t\tstatus: \"Failed\",\n\t\t\temail: \"carmella@hotmail.com\",\n\t\t},\n\t];\n\n\tconst columns: ColumnDef<Payment>[] = [\n\t\t{\n\t\t\tid: \"select\",\n\t\t\theader: ({ table }) =>\n\t\t\t\trenderComponent(DataTableCheckbox, {\n\t\t\t\t\tchecked: table.getIsAllPageRowsSelected(),\n\t\t\t\t\tindeterminate:\n\t\t\t\t\t\ttable.getIsSomePageRowsSelected() && !table.getIsAllPageRowsSelected(),\n\t\t\t\t\tonCheckedChange: (value) => table.toggleAllPageRowsSelected(!!value),\n\t\t\t\t\t\"aria-label\": \"Select all\",\n\t\t\t\t}),\n\t\t\tcell: ({ row }) =>\n\t\t\t\trenderComponent(DataTableCheckbox, {\n\t\t\t\t\tchecked: row.getIsSelected(),\n\t\t\t\t\tonCheckedChange: (value) => row.toggleSelected(!!value),\n\t\t\t\t\t\"aria-label\": \"Select row\",\n\t\t\t\t}),\n\t\t\tenableSorting: false,\n\t\t\tenableHiding: false,\n\t\t},\n\t\t{\n\t\t\taccessorKey: \"status\",\n\t\t\theader: \"Status\",\n\t\t\tcell: ({ row }) => {\n\t\t\t\tconst statusSnippet = createRawSnippet<[{ status: string }]>((getStatus) => {\n\t\t\t\t\tconst { status } = getStatus();\n\t\t\t\t\treturn {\n\t\t\t\t\t\trender: () => `<div class=\"capitalize\">${status}</div>`,\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t\treturn renderSnippet(statusSnippet, {\n\t\t\t\t\tstatus: row.original.status,\n\t\t\t\t});\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\taccessorKey: \"email\",\n\t\t\theader: ({ column }) =>\n\t\t\t\trenderComponent(DataTableEmailButton, {\n\t\t\t\t\tonclick: column.getToggleSortingHandler(),\n\t\t\t\t}),\n\t\t\tcell: ({ row }) => {\n\t\t\t\tconst emailSnippet = createRawSnippet<[{ email: string }]>((getEmail) => {\n\t\t\t\t\tconst { email } = getEmail();\n\t\t\t\t\treturn {\n\t\t\t\t\t\trender: () => `<div class=\"lowercase\">${email}</div>`,\n\t\t\t\t\t};\n\t\t\t\t});\n\n\t\t\t\treturn renderSnippet(emailSnippet, {\n\t\t\t\t\temail: row.original.email,\n\t\t\t\t});\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\taccessorKey: \"amount\",\n\t\t\theader: () => {\n\t\t\t\tconst amountHeaderSnippet = createRawSnippet(() => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\trender: () => `<div class=\"text-end\">Amount</div>`,\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t\treturn renderSnippet(amountHeaderSnippet);\n\t\t\t},\n\t\t\tcell: ({ row }) => {\n\t\t\t\tconst formatter = new Intl.NumberFormat(\"en-US\", {\n\t\t\t\t\tstyle: \"currency\",\n\t\t\t\t\tcurrency: \"USD\",\n\t\t\t\t});\n\n\t\t\t\tconst amountCellSnippet = createRawSnippet<[{ amount: number }]>((getAmount) => {\n\t\t\t\t\tconst { amount } = getAmount();\n\t\t\t\t\tconst formatted = formatter.format(amount);\n\t\t\t\t\treturn {\n\t\t\t\t\t\trender: () => `<div class=\"text-end font-medium\">${formatted}</div>`,\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t\treturn renderSnippet(amountCellSnippet, {\n\t\t\t\t\tamount: row.original.amount,\n\t\t\t\t});\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tid: \"actions\",\n\t\t\tenableHiding: false,\n\t\t\tcell: ({ row }) => renderComponent(DataTableActions, { id: row.original.id }),\n\t\t},\n\t];\n\n\tlet pagination = $state<PaginationState>({ pageIndex: 0, pageSize: 10 });\n\tlet sorting = $state<SortingState>([]);\n\tlet columnFilters = $state<ColumnFiltersState>([]);\n\tlet rowSelection = $state<RowSelectionState>({});\n\tlet columnVisibility = $state<VisibilityState>({});\n\n\tconst table = createSvelteTable({\n\t\tget data() {\n\t\t\treturn data;\n\t\t},\n\t\tcolumns,\n\t\tstate: {\n\t\t\tget pagination() {\n\t\t\t\treturn pagination;\n\t\t\t},\n\t\t\tget sorting() {\n\t\t\t\treturn sorting;\n\t\t\t},\n\t\t\tget columnVisibility() {\n\t\t\t\treturn columnVisibility;\n\t\t\t},\n\t\t\tget rowSelection() {\n\t\t\t\treturn rowSelection;\n\t\t\t},\n\t\t\tget columnFilters() {\n\t\t\t\treturn columnFilters;\n\t\t\t},\n\t\t},\n\t\tgetCoreRowModel: getCoreRowModel(),\n\t\tgetPaginationRowModel: getPaginationRowModel(),\n\t\tgetSortedRowModel: getSortedRowModel(),\n\t\tgetFilteredRowModel: getFilteredRowModel(),\n\t\tonPaginationChange: (updater) => {\n\t\t\tif (typeof updater === \"function\") {\n\t\t\t\tpagination = updater(pagination);\n\t\t\t} else {\n\t\t\t\tpagination = updater;\n\t\t\t}\n\t\t},\n\t\tonSortingChange: (updater) => {\n\t\t\tif (typeof updater === \"function\") {\n\t\t\t\tsorting = updater(sorting);\n\t\t\t} else {\n\t\t\t\tsorting = updater;\n\t\t\t}\n\t\t},\n\t\tonColumnFiltersChange: (updater) => {\n\t\t\tif (typeof updater === \"function\") {\n\t\t\t\tcolumnFilters = updater(columnFilters);\n\t\t\t} else {\n\t\t\t\tcolumnFilters = updater;\n\t\t\t}\n\t\t},\n\t\tonColumnVisibilityChange: (updater) => {\n\t\t\tif (typeof updater === \"function\") {\n\t\t\t\tcolumnVisibility = updater(columnVisibility);\n\t\t\t} else {\n\t\t\t\tcolumnVisibility = updater;\n\t\t\t}\n\t\t},\n\t\tonRowSelectionChange: (updater) => {\n\t\t\tif (typeof updater === \"function\") {\n\t\t\t\trowSelection = updater(rowSelection);\n\t\t\t} else {\n\t\t\t\trowSelection = updater;\n\t\t\t}\n\t\t},\n\t});\n</script>\n\n<div class=\"-mb-8 w-full\">\n\t<div class=\"flex items-center py-4\">\n\t\t<Input\n\t\t\tplaceholder=\"Filter emails...\"\n\t\t\tvalue={(table.getColumn(\"email\")?.getFilterValue() as string) ?? \"\"}\n\t\t\toninput={(e) => table.getColumn(\"email\")?.setFilterValue(e.currentTarget.value)}\n\t\t\tonchange={(e) => {\n\t\t\t\ttable.getColumn(\"email\")?.setFilterValue(e.currentTarget.value);\n\t\t\t}}\n\t\t\tclass=\"max-w-sm\"\n\t\t/>\n\t\t<DropdownMenu.Root>\n\t\t\t<DropdownMenu.Trigger>\n\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t<Button {...props} variant=\"outline\" class=\"ms-auto\">\n\t\t\t\t\t\tColumns <ChevronDownIcon class=\"ms-2 size-4\" />\n\t\t\t\t\t</Button>\n\t\t\t\t{/snippet}\n\t\t\t</DropdownMenu.Trigger>\n\t\t\t<DropdownMenu.Content align=\"end\">\n\t\t\t\t{#each table.getAllColumns().filter((col) => col.getCanHide()) as column (column)}\n\t\t\t\t\t<DropdownMenu.CheckboxItem\n\t\t\t\t\t\tclass=\"capitalize\"\n\t\t\t\t\t\tbind:checked={\n\t\t\t\t\t\t\t() => column.getIsVisible(), (v) => column.toggleVisibility(!!v)\n\t\t\t\t\t\t}\n\t\t\t\t\t>\n\t\t\t\t\t\t{column.id}\n\t\t\t\t\t</DropdownMenu.CheckboxItem>\n\t\t\t\t{/each}\n\t\t\t</DropdownMenu.Content>\n\t\t</DropdownMenu.Root>\n\t</div>\n\t<div class=\"rounded-md border\">\n\t\t<Table.Root>\n\t\t\t<Table.Header>\n\t\t\t\t{#each table.getHeaderGroups() as headerGroup (headerGroup.id)}\n\t\t\t\t\t<Table.Row>\n\t\t\t\t\t\t{#each headerGroup.headers as header (header.id)}\n\t\t\t\t\t\t\t<Table.Head class=\"[&:has([role=checkbox])]:ps-3\">\n\t\t\t\t\t\t\t\t{#if !header.isPlaceholder}\n\t\t\t\t\t\t\t\t\t<FlexRender\n\t\t\t\t\t\t\t\t\t\tcontent={header.column.columnDef.header}\n\t\t\t\t\t\t\t\t\t\tcontext={header.getContext()}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\t</Table.Head>\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</Table.Row>\n\t\t\t\t{/each}\n\t\t\t</Table.Header>\n\t\t\t<Table.Body>\n\t\t\t\t{#each table.getRowModel().rows as row (row.id)}\n\t\t\t\t\t<Table.Row data-state={row.getIsSelected() && \"selected\"}>\n\t\t\t\t\t\t{#each row.getVisibleCells() as cell (cell.id)}\n\t\t\t\t\t\t\t<Table.Cell class=\"[&:has([role=checkbox])]:ps-3\">\n\t\t\t\t\t\t\t\t<FlexRender\n\t\t\t\t\t\t\t\t\tcontent={cell.column.columnDef.cell}\n\t\t\t\t\t\t\t\t\tcontext={cell.getContext()}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</Table.Cell>\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</Table.Row>\n\t\t\t\t{:else}\n\t\t\t\t\t<Table.Row>\n\t\t\t\t\t\t<Table.Cell colspan={columns.length} class=\"h-24 text-center\">\n\t\t\t\t\t\t\tNo results.\n\t\t\t\t\t\t</Table.Cell>\n\t\t\t\t\t</Table.Row>\n\t\t\t\t{/each}\n\t\t\t</Table.Body>\n\t\t</Table.Root>\n\t</div>\n\t<div class=\"flex items-center justify-end space-x-2 pt-4\">\n\t\t<div class=\"text-muted-foreground flex-1 text-sm\">\n\t\t\t{table.getFilteredSelectedRowModel().rows.length} of\n\t\t\t{table.getFilteredRowModel().rows.length} row(s) selected.\n\t\t</div>\n\t\t<div class=\"space-x-2\">\n\t\t\t<Button\n\t\t\t\tvariant=\"outline\"\n\t\t\t\tsize=\"sm\"\n\t\t\t\tonclick={() => table.previousPage()}\n\t\t\t\tdisabled={!table.getCanPreviousPage()}\n\t\t\t>\n\t\t\t\tPrevious\n\t\t\t</Button>\n\t\t\t<Button\n\t\t\t\tvariant=\"outline\"\n\t\t\t\tsize=\"sm\"\n\t\t\t\tonclick={() => table.nextPage()}\n\t\t\t\tdisabled={!table.getCanNextPage()}\n\t\t\t>\n\t\t\t\tNext\n\t\t\t</Button>\n\t\t</div>\n\t</div>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/date-picker-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport CalendarIcon from \"@lucide/svelte/icons/calendar\";\n\timport { DateFormatter, type DateValue, getLocalTimeZone } from \"@internationalized/date\";\n\timport { cn } from \"$lib/utils.js\";\n\timport { buttonVariants } from \"$lib/registry/ui/button/index.js\";\n\timport { Calendar } from \"$lib/registry/ui/calendar/index.js\";\n\timport * as Popover from \"$lib/registry/ui/popover/index.js\";\n\n\tconst df = new DateFormatter(\"en-US\", {\n\t\tdateStyle: \"long\",\n\t});\n\n\tlet value = $state<DateValue | undefined>();\n\tlet contentRef = $state<HTMLElement | null>(null);\n</script>\n\n<Popover.Root>\n\t<Popover.Trigger\n\t\tclass={cn(\n\t\t\tbuttonVariants({\n\t\t\t\tvariant: \"outline\",\n\t\t\t\tclass: \"w-[280px] justify-start text-start font-normal\",\n\t\t\t}),\n\t\t\t!value && \"text-muted-foreground\"\n\t\t)}\n\t>\n\t\t<CalendarIcon />\n\t\t{value ? df.format(value.toDate(getLocalTimeZone())) : \"Pick a date\"}\n\t</Popover.Trigger>\n\t<Popover.Content bind:ref={contentRef} class=\"w-auto p-0\">\n\t\t<Calendar type=\"single\" bind:value captionLayout=\"dropdown\" />\n\t</Popover.Content>\n</Popover.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/date-picker-form.svelte",
    "content": "<script lang=\"ts\" module>\n\timport { z } from \"zod\";\n\n\tconst formSchema = z.object({\n\t\tdob: z.string().refine((v) => v, { message: \"A date of birth is required.\" }),\n\t});\n</script>\n\n<script lang=\"ts\">\n\timport CalendarIcon from \"@lucide/svelte/icons/calendar\";\n\timport {\n\t\tCalendarDate,\n\t\tDateFormatter,\n\t\ttype DateValue,\n\t\tgetLocalTimeZone,\n\t\tparseDate,\n\t\ttoday,\n\t} from \"@internationalized/date\";\n\timport { defaults, superForm } from \"sveltekit-superforms\";\n\timport { zod4 } from \"sveltekit-superforms/adapters\";\n\timport { toast } from \"svelte-sonner\";\n\timport { cn } from \"$lib/utils.js\";\n\timport { Button, buttonVariants } from \"$lib/registry/ui/button/index.js\";\n\timport { Calendar } from \"$lib/registry/ui/calendar/index.js\";\n\timport * as Popover from \"$lib/registry/ui/popover/index.js\";\n\timport * as Form from \"$lib/registry/ui/form/index.js\";\n\n\tconst form = superForm(defaults(zod4(formSchema)), {\n\t\tvalidators: zod4(formSchema),\n\t\tSPA: true,\n\t\tonUpdate: ({ form: f }) => {\n\t\t\tif (f.valid) {\n\t\t\t\ttoast.success(`You submitted ${JSON.stringify(f.data, null, 2)}`);\n\t\t\t} else {\n\t\t\t\ttoast.error(\"Please fix the errors in the form.\");\n\t\t\t}\n\t\t},\n\t});\n\n\tconst { form: formData, enhance } = form;\n\n\tconst df = new DateFormatter(\"en-US\", {\n\t\tdateStyle: \"long\",\n\t});\n\n\tlet value = $derived($formData.dob ? parseDate($formData.dob) : undefined);\n\n\tlet placeholder = $state<DateValue>(today(getLocalTimeZone()));\n</script>\n\n<form method=\"POST\" class=\"space-y-8\" use:enhance>\n\t<Form.Field {form} name=\"dob\" class=\"flex flex-col\">\n\t\t<Form.Control>\n\t\t\t{#snippet children({ props })}\n\t\t\t\t<Form.Label>Date of birth</Form.Label>\n\t\t\t\t<Popover.Root>\n\t\t\t\t\t<Popover.Trigger\n\t\t\t\t\t\t{...props}\n\t\t\t\t\t\tclass={cn(\n\t\t\t\t\t\t\tbuttonVariants({ variant: \"outline\" }),\n\t\t\t\t\t\t\t\"w-[280px] justify-start ps-4 text-start font-normal\",\n\t\t\t\t\t\t\t!value && \"text-muted-foreground\"\n\t\t\t\t\t\t)}\n\t\t\t\t\t>\n\t\t\t\t\t\t{value ? df.format(value.toDate(getLocalTimeZone())) : \"Pick a date\"}\n\t\t\t\t\t\t<CalendarIcon class=\"ms-auto size-4 opacity-50\" />\n\t\t\t\t\t</Popover.Trigger>\n\t\t\t\t\t<Popover.Content class=\"w-auto p-0\" side=\"top\">\n\t\t\t\t\t\t<Calendar\n\t\t\t\t\t\t\ttype=\"single\"\n\t\t\t\t\t\t\tvalue={value as DateValue}\n\t\t\t\t\t\t\tbind:placeholder\n\t\t\t\t\t\t\tcaptionLayout=\"dropdown\"\n\t\t\t\t\t\t\tminValue={new CalendarDate(1900, 1, 1)}\n\t\t\t\t\t\t\tmaxValue={today(getLocalTimeZone())}\n\t\t\t\t\t\t\tcalendarLabel=\"Date of birth\"\n\t\t\t\t\t\t\tonValueChange={(v) => {\n\t\t\t\t\t\t\t\tif (v) {\n\t\t\t\t\t\t\t\t\t$formData.dob = v.toString();\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t$formData.dob = \"\";\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Popover.Content>\n\t\t\t\t</Popover.Root>\n\t\t\t\t<Form.Description>Your date of birth is used to calculate your age</Form.Description\n\t\t\t\t>\n\t\t\t\t<Form.FieldErrors />\n\t\t\t\t<input hidden value={$formData.dob} name={props.name} />\n\t\t\t{/snippet}\n\t\t</Form.Control>\n\t</Form.Field>\n\t<Button type=\"submit\">Submit</Button>\n</form>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/date-picker-with-presets.svelte",
    "content": "<script lang=\"ts\">\n\timport CalendarIcon from \"@lucide/svelte/icons/calendar\";\n\timport {\n\t\tDateFormatter,\n\t\ttype DateValue,\n\t\tgetLocalTimeZone,\n\t\ttoday,\n\t} from \"@internationalized/date\";\n\timport { cn } from \"$lib/utils.js\";\n\timport { buttonVariants } from \"$lib/registry/ui/button/index.js\";\n\timport { Calendar } from \"$lib/registry/ui/calendar/index.js\";\n\timport * as Popover from \"$lib/registry/ui/popover/index.js\";\n\timport * as Select from \"$lib/registry/ui/select/index.js\";\n\n\tconst df = new DateFormatter(\"en-US\", {\n\t\tdateStyle: \"long\",\n\t});\n\n\tlet value: DateValue | undefined = $state();\n\tconst valueString = $derived(value ? df.format(value.toDate(getLocalTimeZone())) : \"\");\n\n\tconst items = [\n\t\t{ value: 0, label: \"Today\" },\n\t\t{ value: 1, label: \"Tomorrow\" },\n\t\t{ value: 3, label: \"In 3 days\" },\n\t\t{ value: 7, label: \"In a week\" },\n\t];\n</script>\n\n<Popover.Root>\n\t<Popover.Trigger\n\t\tclass={cn(\n\t\t\tbuttonVariants({\n\t\t\t\tvariant: \"outline\",\n\t\t\t\tclass: \"w-[280px] justify-start text-start font-normal\",\n\t\t\t}),\n\t\t\t!value && \"text-muted-foreground\"\n\t\t)}\n\t>\n\t\t<CalendarIcon class=\"me-2 size-4\" />\n\t\t{value ? df.format(value.toDate(getLocalTimeZone())) : \"Pick a date\"}\n\t</Popover.Trigger>\n\t<Popover.Content class=\"flex w-auto flex-col space-y-2 p-2\">\n\t\t<Select.Root\n\t\t\ttype=\"single\"\n\t\t\tbind:value={\n\t\t\t\t() => valueString,\n\t\t\t\t(v) => {\n\t\t\t\t\tif (!v) return;\n\t\t\t\t\tvalue = today(getLocalTimeZone()).add({ days: Number.parseInt(v) });\n\t\t\t\t}\n\t\t\t}\n\t\t>\n\t\t\t<Select.Trigger>\n\t\t\t\t{valueString}\n\t\t\t</Select.Trigger>\n\t\t\t<Select.Content>\n\t\t\t\t{#each items as item (item.value)}\n\t\t\t\t\t<Select.Item value={`${item.value}`}>{item.label}</Select.Item>\n\t\t\t\t{/each}\n\t\t\t</Select.Content>\n\t\t</Select.Root>\n\t\t<div class=\"rounded-md border\">\n\t\t\t<Calendar type=\"single\" bind:value />\n\t\t</div>\n\t</Popover.Content>\n</Popover.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/date-picker-with-range.svelte",
    "content": "<script lang=\"ts\">\n\timport CalendarIcon from \"@lucide/svelte/icons/calendar\";\n\timport type { DateRange } from \"bits-ui\";\n\timport {\n\t\tCalendarDate,\n\t\tDateFormatter,\n\t\ttype DateValue,\n\t\tgetLocalTimeZone,\n\t} from \"@internationalized/date\";\n\timport { cn } from \"$lib/utils.js\";\n\timport { buttonVariants } from \"$lib/registry/ui/button/index.js\";\n\timport { RangeCalendar } from \"$lib/registry/ui/range-calendar/index.js\";\n\timport * as Popover from \"$lib/registry/ui/popover/index.js\";\n\n\tconst df = new DateFormatter(\"en-US\", {\n\t\tdateStyle: \"medium\",\n\t});\n\n\tlet value: DateRange = $state({\n\t\tstart: new CalendarDate(2022, 1, 20),\n\t\tend: new CalendarDate(2022, 1, 20).add({ days: 20 }),\n\t});\n\n\tlet startValue: DateValue | undefined = $state(undefined);\n</script>\n\n<div class=\"grid gap-2\">\n\t<Popover.Root>\n\t\t<Popover.Trigger\n\t\t\tclass={cn(buttonVariants({ variant: \"outline\" }), !value && \"text-muted-foreground\")}\n\t\t>\n\t\t\t<CalendarIcon class=\"me-2 size-4\" />\n\t\t\t{#if value && value.start}\n\t\t\t\t{#if value.end}\n\t\t\t\t\t{df.format(value.start.toDate(getLocalTimeZone()))} - {df.format(\n\t\t\t\t\t\tvalue.end.toDate(getLocalTimeZone())\n\t\t\t\t\t)}\n\t\t\t\t{:else}\n\t\t\t\t\t{df.format(value.start.toDate(getLocalTimeZone()))}\n\t\t\t\t{/if}\n\t\t\t{:else if startValue}\n\t\t\t\t{df.format(startValue.toDate(getLocalTimeZone()))}\n\t\t\t{:else}\n\t\t\t\tPick a date\n\t\t\t{/if}\n\t\t</Popover.Trigger>\n\t\t<Popover.Content class=\"w-auto p-0\" align=\"start\">\n\t\t\t<RangeCalendar\n\t\t\t\tbind:value\n\t\t\t\tonStartValueChange={(v) => {\n\t\t\t\t\tstartValue = v;\n\t\t\t\t}}\n\t\t\t\tnumberOfMonths={2}\n\t\t\t/>\n\t\t</Popover.Content>\n\t</Popover.Root>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/dialog-close-button.svelte",
    "content": "<script lang=\"ts\">\n\timport { buttonVariants } from \"$lib/registry/ui/button/index.js\";\n\timport * as Dialog from \"$lib/registry/ui/dialog/index.js\";\n\timport { Input } from \"$lib/registry/ui/input/index.js\";\n\timport { Label } from \"$lib/registry/ui/label/index.js\";\n</script>\n\n<Dialog.Root>\n\t<Dialog.Trigger class={buttonVariants({ variant: \"outline\" })}>Share</Dialog.Trigger>\n\t<Dialog.Content class=\"sm:max-w-md\">\n\t\t<Dialog.Header>\n\t\t\t<Dialog.Title>Share link</Dialog.Title>\n\t\t\t<Dialog.Description>\n\t\t\t\tAnyone who has this link will be able to view this.\n\t\t\t</Dialog.Description>\n\t\t</Dialog.Header>\n\t\t<div class=\"flex items-center gap-2\">\n\t\t\t<div class=\"grid flex-1 gap-2\">\n\t\t\t\t<Label for=\"link\" class=\"sr-only\">Link</Label>\n\t\t\t\t<Input id=\"link\" defaultValue=\"https://shadcn-svelte.com/docs/installation\" />\n\t\t\t</div>\n\t\t</div>\n\t\t<Dialog.Footer class=\"sm:justify-start\">\n\t\t\t<Dialog.Close class={buttonVariants({ variant: \"secondary\" })}>Close</Dialog.Close>\n\t\t</Dialog.Footer>\n\t</Dialog.Content>\n</Dialog.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/dialog-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport { Button, buttonVariants } from \"$lib/registry/ui/button/index.js\";\n\timport * as Dialog from \"$lib/registry/ui/dialog/index.js\";\n\timport { Input } from \"$lib/registry/ui/input/index.js\";\n\timport { Label } from \"$lib/registry/ui/label/index.js\";\n</script>\n\n<Dialog.Root>\n\t<form>\n\t\t<Dialog.Trigger type=\"button\" class={buttonVariants({ variant: \"outline\" })}>\n\t\t\tOpen Dialog\n\t\t</Dialog.Trigger>\n\t\t<Dialog.Content class=\"sm:max-w-[425px]\">\n\t\t\t<Dialog.Header>\n\t\t\t\t<Dialog.Title>Edit profile</Dialog.Title>\n\t\t\t\t<Dialog.Description>\n\t\t\t\t\tMake changes to your profile here. Click save when you&apos;re done.\n\t\t\t\t</Dialog.Description>\n\t\t\t</Dialog.Header>\n\t\t\t<div class=\"grid gap-4\">\n\t\t\t\t<div class=\"grid gap-3\">\n\t\t\t\t\t<Label for=\"name-1\">Name</Label>\n\t\t\t\t\t<Input id=\"name-1\" name=\"name\" defaultValue=\"Pedro Duarte\" />\n\t\t\t\t</div>\n\t\t\t\t<div class=\"grid gap-3\">\n\t\t\t\t\t<Label for=\"username-1\">Username</Label>\n\t\t\t\t\t<Input id=\"username-1\" name=\"username\" defaultValue=\"@peduarte\" />\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<Dialog.Footer>\n\t\t\t\t<Dialog.Close type=\"button\" class={buttonVariants({ variant: \"outline\" })}>\n\t\t\t\t\tCancel\n\t\t\t\t</Dialog.Close>\n\t\t\t\t<Button type=\"submit\">Save changes</Button>\n\t\t\t</Dialog.Footer>\n\t\t</Dialog.Content>\n\t</form>\n</Dialog.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/drawer-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport MinusIcon from \"@lucide/svelte/icons/minus\";\n\timport PlusIcon from \"@lucide/svelte/icons/plus\";\n\timport * as Drawer from \"$lib/registry/ui/drawer/index.js\";\n\timport { Button, buttonVariants } from \"$lib/registry/ui/button/index.js\";\n\timport { BarChart, type ChartContextValue } from \"layerchart\";\n\timport { scaleBand } from \"d3-scale\";\n\timport { cubicInOut } from \"svelte/easing\";\n\n\tconst data = [\n\t\t{\n\t\t\tgoal: 400,\n\t\t},\n\t\t{\n\t\t\tgoal: 300,\n\t\t},\n\t\t{\n\t\t\tgoal: 200,\n\t\t},\n\t\t{\n\t\t\tgoal: 300,\n\t\t},\n\t\t{\n\t\t\tgoal: 200,\n\t\t},\n\t\t{\n\t\t\tgoal: 278,\n\t\t},\n\t\t{\n\t\t\tgoal: 189,\n\t\t},\n\t\t{\n\t\t\tgoal: 239,\n\t\t},\n\t\t{\n\t\t\tgoal: 300,\n\t\t},\n\t\t{\n\t\t\tgoal: 200,\n\t\t},\n\t\t{\n\t\t\tgoal: 278,\n\t\t},\n\t\t{\n\t\t\tgoal: 189,\n\t\t},\n\t\t{\n\t\t\tgoal: 349,\n\t\t},\n\t];\n\n\tlet goal = $state(350);\n\n\tfunction handleClick(adjustment: number) {\n\t\tgoal = Math.max(200, Math.min(400, goal + adjustment));\n\t}\n\n\tlet context = $state<ChartContextValue>();\n</script>\n\n<Drawer.Root>\n\t<Drawer.Trigger class={buttonVariants({ variant: \"outline\" })}>Open Drawer</Drawer.Trigger>\n\t<Drawer.Content>\n\t\t<div class=\"mx-auto w-full max-w-sm\">\n\t\t\t<Drawer.Header>\n\t\t\t\t<Drawer.Title>Move Goal</Drawer.Title>\n\t\t\t\t<Drawer.Description>Set your daily activity goal.</Drawer.Description>\n\t\t\t</Drawer.Header>\n\t\t\t<div class=\"p-4 pb-0\">\n\t\t\t\t<div class=\"flex items-center justify-center space-x-2\">\n\t\t\t\t\t<Button\n\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\tsize=\"icon\"\n\t\t\t\t\t\tclass=\"size-8 shrink-0 rounded-full\"\n\t\t\t\t\t\tonclick={() => handleClick(-10)}\n\t\t\t\t\t\tdisabled={goal <= 200}\n\t\t\t\t\t>\n\t\t\t\t\t\t<MinusIcon />\n\t\t\t\t\t\t<span class=\"sr-only\">Decrease</span>\n\t\t\t\t\t</Button>\n\t\t\t\t\t<div class=\"flex-1 text-center\">\n\t\t\t\t\t\t<div class=\"text-7xl font-bold tracking-tighter\">\n\t\t\t\t\t\t\t{goal}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"text-muted-foreground text-[0.70rem] uppercase\">\n\t\t\t\t\t\t\tCalories/day\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t<Button\n\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\tsize=\"icon\"\n\t\t\t\t\t\tclass=\"size-8 shrink-0 rounded-full\"\n\t\t\t\t\t\tonclick={() => handleClick(10)}\n\t\t\t\t\t\tdisabled={goal >= 400}\n\t\t\t\t\t>\n\t\t\t\t\t\t<PlusIcon />\n\t\t\t\t\t\t<span class=\"sr-only\">Increase</span>\n\t\t\t\t\t</Button>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"mt-3 h-[120px]\">\n\t\t\t\t\t<div class=\"h-full w-full\">\n\t\t\t\t\t\t<BarChart\n\t\t\t\t\t\t\tbind:context\n\t\t\t\t\t\t\tdata={data.map((d, i) => ({ goal: d.goal, index: i }))}\n\t\t\t\t\t\t\ty=\"goal\"\n\t\t\t\t\t\t\tx=\"index\"\n\t\t\t\t\t\t\txScale={scaleBand().padding(0.25)}\n\t\t\t\t\t\t\taxis={false}\n\t\t\t\t\t\t\ttooltip={false}\n\t\t\t\t\t\t\tprops={{\n\t\t\t\t\t\t\t\tbars: {\n\t\t\t\t\t\t\t\t\tstroke: \"none\",\n\t\t\t\t\t\t\t\t\trounded: \"all\",\n\t\t\t\t\t\t\t\t\tradius: 4,\n\t\t\t\t\t\t\t\t\t// use the height of the chart to animate the bars\n\t\t\t\t\t\t\t\t\tinitialY: context?.height,\n\t\t\t\t\t\t\t\t\tinitialHeight: 0,\n\t\t\t\t\t\t\t\t\tmotion: {\n\t\t\t\t\t\t\t\t\t\tx: { type: \"tween\", duration: 500, easing: cubicInOut },\n\t\t\t\t\t\t\t\t\t\twidth: { type: \"tween\", duration: 500, easing: cubicInOut },\n\t\t\t\t\t\t\t\t\t\theight: {\n\t\t\t\t\t\t\t\t\t\t\ttype: \"tween\",\n\t\t\t\t\t\t\t\t\t\t\tduration: 500,\n\t\t\t\t\t\t\t\t\t\t\teasing: cubicInOut,\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\ty: { type: \"tween\", duration: 500, easing: cubicInOut },\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\tfill: \"var(--color-foreground)\",\n\t\t\t\t\t\t\t\t\tfillOpacity: 0.9,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\thighlight: { area: { fill: \"none\" } },\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<Drawer.Footer>\n\t\t\t\t<Button>Submit</Button>\n\t\t\t\t<Drawer.Close class={buttonVariants({ variant: \"outline\" })}>Cancel</Drawer.Close>\n\t\t\t</Drawer.Footer>\n\t\t</div>\n\t</Drawer.Content>\n</Drawer.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/drawer-dialog.svelte",
    "content": "<script lang=\"ts\">\n\timport { MediaQuery } from \"svelte/reactivity\";\n\timport * as Dialog from \"$lib/registry/ui/dialog/index.js\";\n\timport * as Drawer from \"$lib/registry/ui/drawer/index.js\";\n\timport { Input } from \"$lib/registry/ui/input/index.js\";\n\timport { Label } from \"$lib/registry/ui/label/index.js\";\n\timport { Button, buttonVariants } from \"$lib/registry/ui/button/index.js\";\n\n\tlet open = $state(false);\n\tconst isDesktop = new MediaQuery(\"(min-width: 768px)\");\n\n\tconst id = $props.id();\n</script>\n\n{#if isDesktop.current}\n\t<Dialog.Root bind:open>\n\t\t<Dialog.Trigger class={buttonVariants({ variant: \"outline\" })}>Edit Profile</Dialog.Trigger>\n\t\t<Dialog.Content class=\"sm:max-w-[425px]\">\n\t\t\t<Dialog.Header>\n\t\t\t\t<Dialog.Title>Edit profile</Dialog.Title>\n\t\t\t\t<Dialog.Description>\n\t\t\t\t\tMake changes to your profile here. Click save when you're done.\n\t\t\t\t</Dialog.Description>\n\t\t\t</Dialog.Header>\n\t\t\t<form class=\"grid items-start gap-4\">\n\t\t\t\t<div class=\"grid gap-2\">\n\t\t\t\t\t<Label for=\"email-{id}\">Email</Label>\n\t\t\t\t\t<Input type=\"email\" id=\"email-{id}\" value=\"shadcn@example.com\" />\n\t\t\t\t</div>\n\t\t\t\t<div class=\"grid gap-2\">\n\t\t\t\t\t<Label for=\"username-{id}\">Username</Label>\n\t\t\t\t\t<Input id=\"username-{id}\" value=\"@shadcn\" />\n\t\t\t\t</div>\n\t\t\t\t<Button type=\"submit\">Save changes</Button>\n\t\t\t</form>\n\t\t</Dialog.Content>\n\t</Dialog.Root>\n{:else}\n\t<Drawer.Root bind:open>\n\t\t<Drawer.Trigger class={buttonVariants({ variant: \"outline\" })}>Edit Profile</Drawer.Trigger>\n\t\t<Drawer.Content>\n\t\t\t<Drawer.Header class=\"text-start\">\n\t\t\t\t<Drawer.Title>Edit profile</Drawer.Title>\n\t\t\t\t<Drawer.Description>\n\t\t\t\t\tMake changes to your profile here. Click save when you're done.\n\t\t\t\t</Drawer.Description>\n\t\t\t</Drawer.Header>\n\t\t\t<form class=\"grid items-start gap-4 px-4\">\n\t\t\t\t<div class=\"grid gap-2\">\n\t\t\t\t\t<Label for=\"email-{id}\">Email</Label>\n\t\t\t\t\t<Input type=\"email\" id=\"email-{id}\" value=\"shadcn@example.com\" />\n\t\t\t\t</div>\n\t\t\t\t<div class=\"grid gap-2\">\n\t\t\t\t\t<Label for=\"username-{id}\">Username</Label>\n\t\t\t\t\t<Input id=\"username-{id}\" value=\"@shadcn\" />\n\t\t\t\t</div>\n\t\t\t\t<Button type=\"submit\">Save changes</Button>\n\t\t\t</form>\n\t\t\t<Drawer.Footer class=\"pt-2\">\n\t\t\t\t<Drawer.Close class={buttonVariants({ variant: \"outline\" })}>Cancel</Drawer.Close>\n\t\t\t</Drawer.Footer>\n\t\t</Drawer.Content>\n\t</Drawer.Root>\n{/if}\n"
  },
  {
    "path": "docs/src/lib/registry/examples/dropdown-menu-checkboxes.svelte",
    "content": "<script lang=\"ts\">\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\n\tlet showStatusBar = $state(true);\n\tlet showActivityBar = $state(false);\n\tlet showPanel = $state(false);\n</script>\n\n<DropdownMenu.Root>\n\t<DropdownMenu.Trigger>\n\t\t{#snippet child({ props })}\n\t\t\t<Button {...props} variant=\"outline\">Open</Button>\n\t\t{/snippet}\n\t</DropdownMenu.Trigger>\n\t<DropdownMenu.Content class=\"w-56\">\n\t\t<DropdownMenu.Group>\n\t\t\t<DropdownMenu.Label>Appearance</DropdownMenu.Label>\n\t\t\t<DropdownMenu.Separator />\n\t\t\t<DropdownMenu.CheckboxItem bind:checked={showStatusBar}>\n\t\t\t\tStatus Bar\n\t\t\t</DropdownMenu.CheckboxItem>\n\t\t\t<DropdownMenu.CheckboxItem bind:checked={showActivityBar} disabled>\n\t\t\t\tActivity Bar\n\t\t\t</DropdownMenu.CheckboxItem>\n\t\t\t<DropdownMenu.CheckboxItem bind:checked={showPanel}>Panel</DropdownMenu.CheckboxItem>\n\t\t</DropdownMenu.Group>\n\t</DropdownMenu.Content>\n</DropdownMenu.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/dropdown-menu-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n</script>\n\n<DropdownMenu.Root>\n\t<DropdownMenu.Trigger>\n\t\t{#snippet child({ props })}\n\t\t\t<Button {...props} variant=\"outline\">Open</Button>\n\t\t{/snippet}\n\t</DropdownMenu.Trigger>\n\t<DropdownMenu.Content class=\"w-56\" align=\"start\">\n\t\t<DropdownMenu.Label>My Account</DropdownMenu.Label>\n\t\t<DropdownMenu.Group>\n\t\t\t<DropdownMenu.Item>\n\t\t\t\tProfile\n\t\t\t\t<DropdownMenu.Shortcut>⇧⌘P</DropdownMenu.Shortcut>\n\t\t\t</DropdownMenu.Item>\n\t\t\t<DropdownMenu.Item>\n\t\t\t\tBilling\n\t\t\t\t<DropdownMenu.Shortcut>⌘B</DropdownMenu.Shortcut>\n\t\t\t</DropdownMenu.Item>\n\t\t\t<DropdownMenu.Item>\n\t\t\t\tSettings\n\t\t\t\t<DropdownMenu.Shortcut>⌘S</DropdownMenu.Shortcut>\n\t\t\t</DropdownMenu.Item>\n\t\t\t<DropdownMenu.Item>\n\t\t\t\tKeyboard shortcuts\n\t\t\t\t<DropdownMenu.Shortcut>⌘K</DropdownMenu.Shortcut>\n\t\t\t</DropdownMenu.Item>\n\t\t</DropdownMenu.Group>\n\t\t<DropdownMenu.Separator />\n\t\t<DropdownMenu.Group>\n\t\t\t<DropdownMenu.Item>Team</DropdownMenu.Item>\n\t\t\t<DropdownMenu.Sub>\n\t\t\t\t<DropdownMenu.SubTrigger>Invite users</DropdownMenu.SubTrigger>\n\t\t\t\t<DropdownMenu.SubContent>\n\t\t\t\t\t<DropdownMenu.Item>Email</DropdownMenu.Item>\n\t\t\t\t\t<DropdownMenu.Item>Message</DropdownMenu.Item>\n\t\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t\t<DropdownMenu.Item>More...</DropdownMenu.Item>\n\t\t\t\t</DropdownMenu.SubContent>\n\t\t\t</DropdownMenu.Sub>\n\t\t\t<DropdownMenu.Item>\n\t\t\t\tNew Team\n\t\t\t\t<DropdownMenu.Shortcut>⌘+T</DropdownMenu.Shortcut>\n\t\t\t</DropdownMenu.Item>\n\t\t</DropdownMenu.Group>\n\t\t<DropdownMenu.Separator />\n\t\t<DropdownMenu.Item>GitHub</DropdownMenu.Item>\n\t\t<DropdownMenu.Item>Support</DropdownMenu.Item>\n\t\t<DropdownMenu.Item disabled>API</DropdownMenu.Item>\n\t\t<DropdownMenu.Separator />\n\t\t<DropdownMenu.Item>\n\t\t\tLog out\n\t\t\t<DropdownMenu.Shortcut>⇧⌘Q</DropdownMenu.Shortcut>\n\t\t</DropdownMenu.Item>\n\t</DropdownMenu.Content>\n</DropdownMenu.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/dropdown-menu-dialog.svelte",
    "content": "<script lang=\"ts\">\n\timport MoreHorizontal from \"@lucide/svelte/icons/more-horizontal\";\n\n\timport { Button, buttonVariants } from \"$lib/registry/ui/button/index.js\";\n\timport * as Dialog from \"$lib/registry/ui/dialog/index.js\";\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\timport { Input } from \"$lib/registry/ui/input/index.js\";\n\timport { Label } from \"$lib/registry/ui/label/index.js\";\n\timport { Textarea } from \"$lib/registry/ui/textarea/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\n\tlet showNewDialog = $state(false);\n\tlet showShareDialog = $state(false);\n</script>\n\n<DropdownMenu.Root>\n\t<DropdownMenu.Trigger class={buttonVariants({ variant: \"outline\", size: \"icon-sm\" })}>\n\t\t<MoreHorizontal />\n\t</DropdownMenu.Trigger>\n\t<DropdownMenu.Content class=\"w-40\" align=\"end\">\n\t\t<DropdownMenu.Label>File Actions</DropdownMenu.Label>\n\t\t<DropdownMenu.Group>\n\t\t\t<DropdownMenu.Item onSelect={() => (showNewDialog = true)}>\n\t\t\t\tNew File...\n\t\t\t</DropdownMenu.Item>\n\t\t\t<DropdownMenu.Item onSelect={() => (showShareDialog = true)}>\n\t\t\t\tShare...\n\t\t\t</DropdownMenu.Item>\n\t\t\t<DropdownMenu.Item disabled>Download</DropdownMenu.Item>\n\t\t</DropdownMenu.Group>\n\t</DropdownMenu.Content>\n</DropdownMenu.Root>\n\n<Dialog.Root bind:open={showNewDialog}>\n\t<Dialog.Content class=\"sm:max-w-[425px]\">\n\t\t<Dialog.Header>\n\t\t\t<Dialog.Title>Create New File</Dialog.Title>\n\t\t\t<Dialog.Description>\n\t\t\t\tProvide a name for your new file. Click create when you&apos;re done.\n\t\t\t</Dialog.Description>\n\t\t</Dialog.Header>\n\t\t<Field.Group class=\"pb-3\">\n\t\t\t<Field.Field>\n\t\t\t\t<Field.Label for=\"filename\">File Name</Field.Label>\n\t\t\t\t<Input id=\"filename\" name=\"filename\" placeholder=\"document.txt\" />\n\t\t\t</Field.Field>\n\t\t</Field.Group>\n\t\t<Dialog.Footer>\n\t\t\t<Dialog.Close class={buttonVariants({ variant: \"outline\" })}>Cancel</Dialog.Close>\n\t\t\t<Button type=\"submit\">Create</Button>\n\t\t</Dialog.Footer>\n\t</Dialog.Content>\n</Dialog.Root>\n\n<Dialog.Root bind:open={showShareDialog}>\n\t<Dialog.Content class=\"sm:max-w-[425px]\">\n\t\t<Dialog.Header>\n\t\t\t<Dialog.Title>Share File</Dialog.Title>\n\t\t\t<Dialog.Description>\n\t\t\t\tAnyone with the link will be able to view this file.\n\t\t\t</Dialog.Description>\n\t\t</Dialog.Header>\n\t\t<Field.Group class=\"py-3\">\n\t\t\t<Field.Field>\n\t\t\t\t<Label for=\"email\">Email Address</Label>\n\t\t\t\t<Input id=\"email\" name=\"email\" type=\"email\" placeholder=\"shadcn@vercel.com\" />\n\t\t\t</Field.Field>\n\t\t\t<Field.Field>\n\t\t\t\t<Field.Label for=\"message\">Message (Optional)</Field.Label>\n\t\t\t\t<Textarea id=\"message\" name=\"message\" placeholder=\"Check out this file\" />\n\t\t\t</Field.Field>\n\t\t</Field.Group>\n\t\t<Dialog.Footer>\n\t\t\t<Dialog.Close class={buttonVariants({ variant: \"outline\" })}>Cancel</Dialog.Close>\n\t\t\t<Button type=\"submit\">Send Invite</Button>\n\t\t</Dialog.Footer>\n\t</Dialog.Content>\n</Dialog.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/dropdown-menu-radio-group.svelte",
    "content": "<script lang=\"ts\">\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\n\tlet position = $state(\"bottom\");\n</script>\n\n<DropdownMenu.Root>\n\t<DropdownMenu.Trigger>\n\t\t{#snippet child({ props })}\n\t\t\t<Button {...props} variant=\"outline\">Open</Button>\n\t\t{/snippet}\n\t</DropdownMenu.Trigger>\n\t<DropdownMenu.Content class=\"w-56\">\n\t\t<DropdownMenu.Group>\n\t\t\t<DropdownMenu.Label>Panel Position</DropdownMenu.Label>\n\t\t\t<DropdownMenu.Separator />\n\t\t\t<DropdownMenu.RadioGroup bind:value={position}>\n\t\t\t\t<DropdownMenu.RadioItem value=\"top\">Top</DropdownMenu.RadioItem>\n\t\t\t\t<DropdownMenu.RadioItem value=\"bottom\">Bottom</DropdownMenu.RadioItem>\n\t\t\t\t<DropdownMenu.RadioItem value=\"right\">Right</DropdownMenu.RadioItem>\n\t\t\t</DropdownMenu.RadioGroup>\n\t\t</DropdownMenu.Group>\n\t</DropdownMenu.Content>\n</DropdownMenu.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/empty-avatar-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Empty from \"$lib/registry/ui/empty/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Avatar from \"$lib/registry/ui/avatar/index.js\";\n</script>\n\n<Empty.Root>\n\t<Empty.Header>\n\t\t<Empty.Media variant=\"default\">\n\t\t\t<Avatar.Root class=\"size-12\">\n\t\t\t\t<Avatar.Image src=\"https://github.com/shadcn.png\" class=\"grayscale\" />\n\t\t\t\t<Avatar.Fallback>LR</Avatar.Fallback>\n\t\t\t</Avatar.Root>\n\t\t</Empty.Media>\n\t\t<Empty.Title>User Offline</Empty.Title>\n\t\t<Empty.Description>\n\t\t\tThis user is currently offline. You can leave a message to notify them or try again\n\t\t\tlater.\n\t\t</Empty.Description>\n\t</Empty.Header>\n\t<Empty.Content>\n\t\t<Button size=\"sm\">Leave Message</Button>\n\t</Empty.Content>\n</Empty.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/empty-avatar-group-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Empty from \"$lib/registry/ui/empty/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Avatar from \"$lib/registry/ui/avatar/index.js\";\n\timport PlusIcon from \"@lucide/svelte/icons/plus\";\n</script>\n\n<Empty.Root class=\"flex-none border\">\n\t<Empty.Header>\n\t\t<Empty.Media>\n\t\t\t<Avatar.Group class=\"grayscale\">\n\t\t\t\t<Avatar.Root>\n\t\t\t\t\t<Avatar.Image src=\"https://github.com/shadcn.png\" alt=\"@shadcn\" />\n\t\t\t\t\t<Avatar.Fallback>CN</Avatar.Fallback>\n\t\t\t\t</Avatar.Root>\n\t\t\t\t<Avatar.Root>\n\t\t\t\t\t<Avatar.Image src=\"https://github.com/maxleiter.png\" alt=\"@maxleiter\" />\n\t\t\t\t\t<Avatar.Fallback>LR</Avatar.Fallback>\n\t\t\t\t</Avatar.Root>\n\t\t\t\t<Avatar.Root>\n\t\t\t\t\t<Avatar.Image src=\"https://github.com/evilrabbit.png\" alt=\"@evilrabbit\" />\n\t\t\t\t\t<Avatar.Fallback>ER</Avatar.Fallback>\n\t\t\t\t</Avatar.Root>\n\t\t\t</Avatar.Group>\n\t\t</Empty.Media>\n\t\t<Empty.Title>No Team Members</Empty.Title>\n\t\t<Empty.Description>Invite your team to collaborate on this project.</Empty.Description>\n\t</Empty.Header>\n\t<Empty.Content>\n\t\t<Button size=\"sm\">\n\t\t\t<PlusIcon />\n\t\t\tInvite Members\n\t\t</Button>\n\t</Empty.Content>\n</Empty.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/empty-background-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Empty from \"$lib/registry/ui/empty/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport BellIcon from \"@tabler/icons-svelte/icons/bell\";\n\timport RefreshCcwIcon from \"@lucide/svelte/icons/refresh-ccw\";\n</script>\n\n<Empty.Root class=\"from-muted/50 to-background h-full bg-gradient-to-b from-30%\">\n\t<Empty.Header>\n\t\t<Empty.Media variant=\"icon\">\n\t\t\t<BellIcon />\n\t\t</Empty.Media>\n\t\t<Empty.Title>No Notifications</Empty.Title>\n\t\t<Empty.Description>\n\t\t\tYou're all caught up. New notifications will appear here.\n\t\t</Empty.Description>\n\t</Empty.Header>\n\t<Empty.Content>\n\t\t<Button variant=\"outline\" size=\"sm\">\n\t\t\t<RefreshCcwIcon />\n\t\t\tRefresh\n\t\t</Button>\n\t</Empty.Content>\n</Empty.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/empty-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Empty from \"$lib/registry/ui/empty/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport FolderCodeIcon from \"@tabler/icons-svelte/icons/folder-code\";\n\timport ArrowUpRightIcon from \"@lucide/svelte/icons/arrow-up-right\";\n</script>\n\n<Empty.Root>\n\t<Empty.Header>\n\t\t<Empty.Media variant=\"icon\">\n\t\t\t<FolderCodeIcon />\n\t\t</Empty.Media>\n\t\t<Empty.Title>No Projects Yet</Empty.Title>\n\t\t<Empty.Description>\n\t\t\tYou haven't created any projects yet. Get started by creating your first project.\n\t\t</Empty.Description>\n\t</Empty.Header>\n\t<Empty.Content>\n\t\t<div class=\"flex gap-2\">\n\t\t\t<Button>Create Project</Button>\n\t\t\t<Button variant=\"outline\">Import Project</Button>\n\t\t</div>\n\t</Empty.Content>\n\t<Button variant=\"link\" class=\"text-muted-foreground\" size=\"sm\">\n\t\t<a href=\"#/\">\n\t\t\tLearn More <ArrowUpRightIcon class=\"inline\" />\n\t\t</a>\n\t</Button>\n</Empty.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/empty-input-group-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Empty from \"$lib/registry/ui/empty/index.js\";\n\timport * as InputGroup from \"$lib/registry/ui/input-group/index.js\";\n\timport * as Kbd from \"$lib/registry/ui/kbd/index.js\";\n\timport SearchIcon from \"@lucide/svelte/icons/search\";\n</script>\n\n<Empty.Root>\n\t<Empty.Header>\n\t\t<Empty.Title>404 - Not Found</Empty.Title>\n\t\t<Empty.Description>\n\t\t\tThe page you're looking for doesn't exist. Try searching for what you need below.\n\t\t</Empty.Description>\n\t</Empty.Header>\n\t<Empty.Content>\n\t\t<InputGroup.Root class=\"sm:w-3/4\">\n\t\t\t<InputGroup.Input placeholder=\"Try searching for pages...\" />\n\t\t\t<InputGroup.Addon>\n\t\t\t\t<SearchIcon />\n\t\t\t</InputGroup.Addon>\n\t\t\t<InputGroup.Addon align=\"inline-end\">\n\t\t\t\t<Kbd.Root>/</Kbd.Root>\n\t\t\t</InputGroup.Addon>\n\t\t</InputGroup.Root>\n\t\t<Empty.Description>\n\t\t\tNeed help? <a href=\"#/\">Contact support</a>\n\t\t</Empty.Description>\n\t</Empty.Content>\n</Empty.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/empty-outline-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Empty from \"$lib/registry/ui/empty/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport CloudIcon from \"@tabler/icons-svelte/icons/cloud\";\n</script>\n\n<Empty.Root class=\"border border-dashed\">\n\t<Empty.Header>\n\t\t<Empty.Media variant=\"icon\">\n\t\t\t<CloudIcon />\n\t\t</Empty.Media>\n\t\t<Empty.Title>Cloud Storage Empty</Empty.Title>\n\t\t<Empty.Description>\n\t\t\tUpload files to your cloud storage to access them anywhere.\n\t\t</Empty.Description>\n\t</Empty.Header>\n\t<Empty.Content>\n\t\t<Button variant=\"outline\" size=\"sm\">Upload Files</Button>\n\t</Empty.Content>\n</Empty.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/field-checkbox-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport { Checkbox } from \"$lib/registry/ui/checkbox/index.js\";\n</script>\n\n<div class=\"w-full max-w-md\">\n\t<Field.Group>\n\t\t<Field.Set>\n\t\t\t<Field.Legend variant=\"label\">Show these items on the desktop</Field.Legend>\n\t\t\t<Field.Description>Select the items you want to show on the desktop.</Field.Description>\n\t\t\t<Field.Group class=\"gap-3\">\n\t\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t\t<Checkbox id=\"finder-pref-9k2-hard-disks-ljj\" checked />\n\t\t\t\t\t<Field.Label for=\"finder-pref-9k2-hard-disks-ljj\" class=\"font-normal\">\n\t\t\t\t\t\tHard disks\n\t\t\t\t\t</Field.Label>\n\t\t\t\t</Field.Field>\n\t\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t\t<Checkbox id=\"finder-pref-9k2-external-disks-1yg\" />\n\t\t\t\t\t<Field.Label for=\"finder-pref-9k2-external-disks-1yg\" class=\"font-normal\">\n\t\t\t\t\t\tExternal disks\n\t\t\t\t\t</Field.Label>\n\t\t\t\t</Field.Field>\n\t\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t\t<Checkbox id=\"finder-pref-9k2-cds-dvds-fzt\" />\n\t\t\t\t\t<Field.Label for=\"finder-pref-9k2-cds-dvds-fzt\" class=\"font-normal\">\n\t\t\t\t\t\tCDs, DVDs, and iPods\n\t\t\t\t\t</Field.Label>\n\t\t\t\t</Field.Field>\n\t\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t\t<Checkbox id=\"finder-pref-9k2-connected-servers-6l2\" />\n\t\t\t\t\t<Field.Label for=\"finder-pref-9k2-connected-servers-6l2\" class=\"font-normal\">\n\t\t\t\t\t\tConnected servers\n\t\t\t\t\t</Field.Label>\n\t\t\t\t</Field.Field>\n\t\t\t</Field.Group>\n\t\t</Field.Set>\n\t\t<Field.Separator />\n\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t<Checkbox id=\"finder-pref-9k2-sync-folders-nep\" checked />\n\t\t\t<Field.Content>\n\t\t\t\t<Field.Label for=\"finder-pref-9k2-sync-folders-nep\">\n\t\t\t\t\tSync Desktop & Documents folders\n\t\t\t\t</Field.Label>\n\t\t\t\t<Field.Description>\n\t\t\t\t\tYour Desktop & Documents folders are being synced with iCloud Drive. You can\n\t\t\t\t\taccess them from other devices.\n\t\t\t\t</Field.Description>\n\t\t\t</Field.Content>\n\t\t</Field.Field>\n\t</Field.Group>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/field-checkbox.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport { Checkbox } from \"$lib/registry/ui/checkbox/index.js\";\n</script>\n\n<div class=\"w-full max-w-md\">\n\t<Field.Group>\n\t\t<Field.Set>\n\t\t\t<Field.Legend variant=\"label\">Show these items on the desktop</Field.Legend>\n\t\t\t<Field.Description>Select the items you want to show on the desktop.</Field.Description>\n\t\t\t<Field.Group class=\"gap-3\">\n\t\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t\t<Checkbox id=\"finder-pref-9k2-hard-disks-ljj\" checked />\n\t\t\t\t\t<Field.Label for=\"finder-pref-9k2-hard-disks-ljj\" class=\"font-normal\">\n\t\t\t\t\t\tHard disks\n\t\t\t\t\t</Field.Label>\n\t\t\t\t</Field.Field>\n\t\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t\t<Checkbox id=\"finder-pref-9k2-external-disks-1yg\" />\n\t\t\t\t\t<Field.Label for=\"finder-pref-9k2-external-disks-1yg\" class=\"font-normal\">\n\t\t\t\t\t\tExternal disks\n\t\t\t\t\t</Field.Label>\n\t\t\t\t</Field.Field>\n\t\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t\t<Checkbox id=\"finder-pref-9k2-cds-dvds-fzt\" />\n\t\t\t\t\t<Field.Label for=\"finder-pref-9k2-cds-dvds-fzt\" class=\"font-normal\">\n\t\t\t\t\t\tCDs, DVDs, and iPods\n\t\t\t\t\t</Field.Label>\n\t\t\t\t</Field.Field>\n\t\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t\t<Checkbox id=\"finder-pref-9k2-connected-servers-6l2\" />\n\t\t\t\t\t<Field.Label for=\"finder-pref-9k2-connected-servers-6l2\" class=\"font-normal\">\n\t\t\t\t\t\tConnected servers\n\t\t\t\t\t</Field.Label>\n\t\t\t\t</Field.Field>\n\t\t\t</Field.Group>\n\t\t</Field.Set>\n\t\t<Field.Separator />\n\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t<Checkbox id=\"finder-pref-9k2-sync-folders-nep\" checked />\n\t\t\t<Field.Content>\n\t\t\t\t<Field.Label for=\"finder-pref-9k2-sync-folders-nep\">\n\t\t\t\t\tSync Desktop & Documents folders\n\t\t\t\t</Field.Label>\n\t\t\t\t<Field.Description>\n\t\t\t\t\tYour Desktop & Documents folders are being synced with iCloud Drive. You can\n\t\t\t\t\taccess them from other devices.\n\t\t\t\t</Field.Description>\n\t\t\t</Field.Content>\n\t\t</Field.Field>\n\t</Field.Group>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/field-choice-card.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport * as RadioGroup from \"$lib/registry/ui/radio-group/index.js\";\n\n\tlet computeEnvironment = $state(\"kubernetes\");\n</script>\n\n<div class=\"w-full max-w-md\">\n\t<Field.Group>\n\t\t<Field.Set>\n\t\t\t<Field.Label for=\"compute-environment-p8w\">Compute Environment</Field.Label>\n\t\t\t<Field.Description>Select the compute environment for your cluster.</Field.Description>\n\t\t\t<RadioGroup.Root bind:value={computeEnvironment}>\n\t\t\t\t<Field.Label for=\"kubernetes-r2h\">\n\t\t\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t\t\t<Field.Content>\n\t\t\t\t\t\t\t<Field.Title>Kubernetes</Field.Title>\n\t\t\t\t\t\t\t<Field.Description>\n\t\t\t\t\t\t\t\tRun GPU workloads on a K8s configured cluster.\n\t\t\t\t\t\t\t</Field.Description>\n\t\t\t\t\t\t</Field.Content>\n\t\t\t\t\t\t<RadioGroup.Item value=\"kubernetes\" id=\"kubernetes-r2h\" />\n\t\t\t\t\t</Field.Field>\n\t\t\t\t</Field.Label>\n\t\t\t\t<Field.Label for=\"vm-z4k\">\n\t\t\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t\t\t<Field.Content>\n\t\t\t\t\t\t\t<Field.Title>Virtual Machine</Field.Title>\n\t\t\t\t\t\t\t<Field.Description>\n\t\t\t\t\t\t\t\tAccess a VM configured cluster to run GPU workloads.\n\t\t\t\t\t\t\t</Field.Description>\n\t\t\t\t\t\t</Field.Content>\n\t\t\t\t\t\t<RadioGroup.Item value=\"vm\" id=\"vm-z4k\" />\n\t\t\t\t\t</Field.Field>\n\t\t\t\t</Field.Label>\n\t\t\t</RadioGroup.Root>\n\t\t</Field.Set>\n\t</Field.Group>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/field-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport { Checkbox } from \"$lib/registry/ui/checkbox/index.js\";\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport { Input } from \"$lib/registry/ui/input/index.js\";\n\timport * as Select from \"$lib/registry/ui/select/index.js\";\n\timport { Textarea } from \"$lib/registry/ui/textarea/index.js\";\n\n\tlet month = $state<string>();\n\tlet year = $state<string>();\n</script>\n\n<div class=\"w-full max-w-md\">\n\t<form>\n\t\t<Field.Group>\n\t\t\t<Field.Set>\n\t\t\t\t<Field.Legend>Payment Method</Field.Legend>\n\t\t\t\t<Field.Description>All transactions are secure and encrypted</Field.Description>\n\t\t\t\t<Field.Group>\n\t\t\t\t\t<Field.Field>\n\t\t\t\t\t\t<Field.Label for=\"checkout-7j9-card-name-43j\">Name on Card</Field.Label>\n\t\t\t\t\t\t<Input id=\"checkout-7j9-card-name-43j\" placeholder=\"John Doe\" required />\n\t\t\t\t\t</Field.Field>\n\t\t\t\t\t<div class=\"grid grid-cols-3 gap-4\">\n\t\t\t\t\t\t<Field.Field class=\"col-span-2\">\n\t\t\t\t\t\t\t<Field.Label for=\"checkout-7j9-card-number-uw1\">\n\t\t\t\t\t\t\t\tCard Number\n\t\t\t\t\t\t\t</Field.Label>\n\t\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\t\tid=\"checkout-7j9-card-number-uw1\"\n\t\t\t\t\t\t\t\tplaceholder=\"1234 5678 9012 3456\"\n\t\t\t\t\t\t\t\trequired\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<Field.Description>Enter your 16-digit number.</Field.Description>\n\t\t\t\t\t\t</Field.Field>\n\t\t\t\t\t\t<Field.Field class=\"col-span-1\">\n\t\t\t\t\t\t\t<Field.Label for=\"checkout-7j9-cvv\">CVV</Field.Label>\n\t\t\t\t\t\t\t<Input id=\"checkout-7j9-cvv\" placeholder=\"123\" required />\n\t\t\t\t\t\t</Field.Field>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"grid grid-cols-2 gap-4\">\n\t\t\t\t\t\t<Field.Field>\n\t\t\t\t\t\t\t<Field.Label for=\"checkout-7j9-exp-month-ts6\">Month</Field.Label>\n\t\t\t\t\t\t\t<Select.Root type=\"single\" bind:value={month}>\n\t\t\t\t\t\t\t\t<Select.Trigger id=\"checkout-7j9-exp-month-ts6\">\n\t\t\t\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t\t\t\t{month || \"MM\"}\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t</Select.Trigger>\n\t\t\t\t\t\t\t\t<Select.Content>\n\t\t\t\t\t\t\t\t\t<Select.Item value=\"01\">01</Select.Item>\n\t\t\t\t\t\t\t\t\t<Select.Item value=\"02\">02</Select.Item>\n\t\t\t\t\t\t\t\t\t<Select.Item value=\"03\">03</Select.Item>\n\t\t\t\t\t\t\t\t\t<Select.Item value=\"04\">04</Select.Item>\n\t\t\t\t\t\t\t\t\t<Select.Item value=\"05\">05</Select.Item>\n\t\t\t\t\t\t\t\t\t<Select.Item value=\"06\">06</Select.Item>\n\t\t\t\t\t\t\t\t\t<Select.Item value=\"07\">07</Select.Item>\n\t\t\t\t\t\t\t\t\t<Select.Item value=\"08\">08</Select.Item>\n\t\t\t\t\t\t\t\t\t<Select.Item value=\"09\">09</Select.Item>\n\t\t\t\t\t\t\t\t\t<Select.Item value=\"10\">10</Select.Item>\n\t\t\t\t\t\t\t\t\t<Select.Item value=\"11\">11</Select.Item>\n\t\t\t\t\t\t\t\t\t<Select.Item value=\"12\">12</Select.Item>\n\t\t\t\t\t\t\t\t</Select.Content>\n\t\t\t\t\t\t\t</Select.Root>\n\t\t\t\t\t\t</Field.Field>\n\t\t\t\t\t\t<Field.Field>\n\t\t\t\t\t\t\t<Field.Label for=\"checkout-7j9-exp-year-f59\">Year</Field.Label>\n\t\t\t\t\t\t\t<Select.Root type=\"single\" bind:value={year}>\n\t\t\t\t\t\t\t\t<Select.Trigger id=\"checkout-7j9-exp-year-f59\">\n\t\t\t\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t\t\t\t{year || \"YYYY\"}\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t</Select.Trigger>\n\t\t\t\t\t\t\t\t<Select.Content>\n\t\t\t\t\t\t\t\t\t<Select.Item value=\"2024\">2024</Select.Item>\n\t\t\t\t\t\t\t\t\t<Select.Item value=\"2025\">2025</Select.Item>\n\t\t\t\t\t\t\t\t\t<Select.Item value=\"2026\">2026</Select.Item>\n\t\t\t\t\t\t\t\t\t<Select.Item value=\"2027\">2027</Select.Item>\n\t\t\t\t\t\t\t\t\t<Select.Item value=\"2028\">2028</Select.Item>\n\t\t\t\t\t\t\t\t\t<Select.Item value=\"2029\">2029</Select.Item>\n\t\t\t\t\t\t\t\t</Select.Content>\n\t\t\t\t\t\t\t</Select.Root>\n\t\t\t\t\t\t</Field.Field>\n\t\t\t\t\t</div>\n\t\t\t\t</Field.Group>\n\t\t\t</Field.Set>\n\t\t\t<Field.Separator />\n\t\t\t<Field.Set>\n\t\t\t\t<Field.Legend>Billing Address</Field.Legend>\n\t\t\t\t<Field.Description>\n\t\t\t\t\tThe billing address associated with your payment method\n\t\t\t\t</Field.Description>\n\t\t\t\t<Field.Group>\n\t\t\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t\t\t<Checkbox id=\"checkout-7j9-same-as-shipping-wgm\" checked={true} />\n\t\t\t\t\t\t<Field.Label for=\"checkout-7j9-same-as-shipping-wgm\" class=\"font-normal\">\n\t\t\t\t\t\t\tSame as shipping address\n\t\t\t\t\t\t</Field.Label>\n\t\t\t\t\t</Field.Field>\n\t\t\t\t</Field.Group>\n\t\t\t</Field.Set>\n\t\t\t<Field.Separator />\n\t\t\t<Field.Set>\n\t\t\t\t<Field.Group>\n\t\t\t\t\t<Field.Field>\n\t\t\t\t\t\t<Field.Label for=\"checkout-7j9-optional-comments\">Comments</Field.Label>\n\t\t\t\t\t\t<Textarea\n\t\t\t\t\t\t\tid=\"checkout-7j9-optional-comments\"\n\t\t\t\t\t\t\tplaceholder=\"Add any additional comments\"\n\t\t\t\t\t\t\tclass=\"resize-none\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Field.Field>\n\t\t\t\t</Field.Group>\n\t\t\t</Field.Set>\n\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t<Button type=\"submit\">Submit</Button>\n\t\t\t\t<Button variant=\"outline\" type=\"button\">Cancel</Button>\n\t\t\t</Field.Field>\n\t\t</Field.Group>\n\t</form>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/field-field-group-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport { Checkbox } from \"$lib/registry/ui/checkbox/index.js\";\n</script>\n\n<div class=\"w-full max-w-md\">\n\t<Field.Group>\n\t\t<Field.Set>\n\t\t\t<Field.Label>Responses</Field.Label>\n\t\t\t<Field.Description>\n\t\t\t\tGet notified when ChatGPT responds to requests that take time, like research or\n\t\t\t\timage generation.\n\t\t\t</Field.Description>\n\t\t\t<Field.Group data-slot=\"checkbox-group\">\n\t\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t\t<Checkbox id=\"push\" checked disabled />\n\t\t\t\t\t<Field.Label for=\"push\" class=\"font-normal\">Push notifications</Field.Label>\n\t\t\t\t</Field.Field>\n\t\t\t</Field.Group>\n\t\t</Field.Set>\n\t\t<Field.Separator />\n\t\t<Field.Set>\n\t\t\t<Field.Label>Tasks</Field.Label>\n\t\t\t<Field.Description>\n\t\t\t\tGet notified when tasks you've created have updates.\n\t\t\t\t<a href=\"#/\">Manage tasks</a>\n\t\t\t</Field.Description>\n\t\t\t<Field.Group data-slot=\"checkbox-group\">\n\t\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t\t<Checkbox id=\"push-tasks\" />\n\t\t\t\t\t<Field.Label for=\"push-tasks\" class=\"font-normal\">\n\t\t\t\t\t\tPush notifications\n\t\t\t\t\t</Field.Label>\n\t\t\t\t</Field.Field>\n\t\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t\t<Checkbox id=\"email-tasks\" />\n\t\t\t\t\t<Field.Label for=\"email-tasks\" class=\"font-normal\">\n\t\t\t\t\t\tEmail notifications\n\t\t\t\t\t</Field.Label>\n\t\t\t\t</Field.Field>\n\t\t\t</Field.Group>\n\t\t</Field.Set>\n\t</Field.Group>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/field-field-set-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport { Input } from \"$lib/registry/ui/input/index.js\";\n</script>\n\n<div class=\"w-full max-w-md space-y-6\">\n\t<Field.Set>\n\t\t<Field.Legend>Address Information</Field.Legend>\n\t\t<Field.Description>We need your address to deliver your order.</Field.Description>\n\t\t<Field.Group>\n\t\t\t<Field.Field>\n\t\t\t\t<Field.Label for=\"street\">Street Address</Field.Label>\n\t\t\t\t<Input id=\"street\" type=\"text\" placeholder=\"123 Main St\" />\n\t\t\t</Field.Field>\n\t\t\t<div class=\"grid grid-cols-2 gap-4\">\n\t\t\t\t<Field.Field>\n\t\t\t\t\t<Field.Label for=\"city\">City</Field.Label>\n\t\t\t\t\t<Input id=\"city\" type=\"text\" placeholder=\"New York\" />\n\t\t\t\t</Field.Field>\n\t\t\t\t<Field.Field>\n\t\t\t\t\t<Field.Label for=\"zip\">Postal Code</Field.Label>\n\t\t\t\t\t<Input id=\"zip\" type=\"text\" placeholder=\"90502\" />\n\t\t\t\t</Field.Field>\n\t\t\t</div>\n\t\t</Field.Group>\n\t</Field.Set>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/field-input-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport { Input } from \"$lib/registry/ui/input/index.js\";\n</script>\n\n<div class=\"w-full max-w-md\">\n\t<Field.Set>\n\t\t<Field.Group>\n\t\t\t<Field.Field>\n\t\t\t\t<Field.Label for=\"username\">Username</Field.Label>\n\t\t\t\t<Input id=\"username\" type=\"text\" placeholder=\"Max Leiter\" />\n\t\t\t\t<Field.Description>Choose a unique username for your account.</Field.Description>\n\t\t\t</Field.Field>\n\t\t\t<Field.Field>\n\t\t\t\t<Field.Label for=\"password\">Password</Field.Label>\n\t\t\t\t<Field.Description>Must be at least 8 characters long.</Field.Description>\n\t\t\t\t<Input id=\"password\" type=\"password\" placeholder=\"********\" />\n\t\t\t</Field.Field>\n\t\t</Field.Group>\n\t</Field.Set>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/field-input.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport { Input } from \"$lib/registry/ui/input/index.js\";\n</script>\n\n<div class=\"w-full max-w-md\">\n\t<Field.Set>\n\t\t<Field.Group>\n\t\t\t<Field.Field>\n\t\t\t\t<Field.Label for=\"username\">Username</Field.Label>\n\t\t\t\t<Input id=\"username\" type=\"text\" placeholder=\"Max Leiter\" />\n\t\t\t\t<Field.Description>Choose a unique username for your account.</Field.Description>\n\t\t\t</Field.Field>\n\t\t\t<Field.Field>\n\t\t\t\t<Field.Label for=\"password\">Password</Field.Label>\n\t\t\t\t<Field.Description>Must be at least 8 characters long.</Field.Description>\n\t\t\t\t<Input id=\"password\" type=\"password\" placeholder=\"••••••••\" />\n\t\t\t</Field.Field>\n\t\t</Field.Group>\n\t</Field.Set>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/field-radio-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport * as RadioGroup from \"$lib/registry/ui/radio-group/index.js\";\n\n\tlet plan = $state(\"monthly\");\n</script>\n\n<div class=\"w-full max-w-md\">\n\t<Field.Set>\n\t\t<Field.Label>Subscription Plan</Field.Label>\n\t\t<Field.Description>Yearly and lifetime plans offer significant savings.</Field.Description>\n\t\t<RadioGroup.Root bind:value={plan}>\n\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t<RadioGroup.Item value=\"monthly\" id=\"plan-monthly\" />\n\t\t\t\t<Field.Label for=\"plan-monthly\" class=\"font-normal\">\n\t\t\t\t\tMonthly ($9.99/month)\n\t\t\t\t</Field.Label>\n\t\t\t</Field.Field>\n\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t<RadioGroup.Item value=\"yearly\" id=\"plan-yearly\" />\n\t\t\t\t<Field.Label for=\"plan-yearly\" class=\"font-normal\">\n\t\t\t\t\tYearly ($99.99/year)\n\t\t\t\t</Field.Label>\n\t\t\t</Field.Field>\n\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t<RadioGroup.Item value=\"lifetime\" id=\"plan-lifetime\" />\n\t\t\t\t<Field.Label for=\"plan-lifetime\" class=\"font-normal\">\n\t\t\t\t\tLifetime ($299.99)\n\t\t\t\t</Field.Label>\n\t\t\t</Field.Field>\n\t\t</RadioGroup.Root>\n\t</Field.Set>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/field-radio.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport * as RadioGroup from \"$lib/registry/ui/radio-group/index.js\";\n\n\tlet plan = $state(\"monthly\");\n</script>\n\n<div class=\"w-full max-w-md\">\n\t<Field.Set>\n\t\t<Field.Label>Subscription Plan</Field.Label>\n\t\t<Field.Description>Yearly and lifetime plans offer significant savings.</Field.Description>\n\t\t<RadioGroup.Root bind:value={plan}>\n\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t<RadioGroup.Item value=\"monthly\" id=\"plan-monthly\" />\n\t\t\t\t<Field.Label for=\"plan-monthly\" class=\"font-normal\">\n\t\t\t\t\tMonthly ($9.99/month)\n\t\t\t\t</Field.Label>\n\t\t\t</Field.Field>\n\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t<RadioGroup.Item value=\"yearly\" id=\"plan-yearly\" />\n\t\t\t\t<Field.Label for=\"plan-yearly\" class=\"font-normal\">\n\t\t\t\t\tYearly ($99.99/year)\n\t\t\t\t</Field.Label>\n\t\t\t</Field.Field>\n\t\t\t<Field.Field orientation=\"horizontal\">\n\t\t\t\t<RadioGroup.Item value=\"lifetime\" id=\"plan-lifetime\" />\n\t\t\t\t<Field.Label for=\"plan-lifetime\" class=\"font-normal\">\n\t\t\t\t\tLifetime ($299.99)\n\t\t\t\t</Field.Label>\n\t\t\t</Field.Field>\n\t\t</RadioGroup.Root>\n\t</Field.Set>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/field-responsive-layout-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport { Input } from \"$lib/registry/ui/input/index.js\";\n\timport { Textarea } from \"$lib/registry/ui/textarea/index.js\";\n</script>\n\n<div class=\"w-full max-w-4xl\">\n\t<form>\n\t\t<Field.Set>\n\t\t\t<Field.Legend>Profile</Field.Legend>\n\t\t\t<Field.Description>Fill in your profile information.</Field.Description>\n\t\t\t<Field.Separator />\n\t\t\t<Field.Group>\n\t\t\t\t<Field.Field orientation=\"responsive\">\n\t\t\t\t\t<Field.Content>\n\t\t\t\t\t\t<Field.Label for=\"name\">Name</Field.Label>\n\t\t\t\t\t\t<Field.Description>\n\t\t\t\t\t\t\tProvide your full name for identification\n\t\t\t\t\t\t</Field.Description>\n\t\t\t\t\t</Field.Content>\n\t\t\t\t\t<Input id=\"name\" placeholder=\"Evil Rabbit\" required />\n\t\t\t\t</Field.Field>\n\t\t\t\t<Field.Separator />\n\t\t\t\t<Field.Field orientation=\"responsive\">\n\t\t\t\t\t<Field.Content>\n\t\t\t\t\t\t<Field.Label for=\"message\">Message</Field.Label>\n\t\t\t\t\t\t<Field.Description>\n\t\t\t\t\t\t\tYou can write your message here. Keep it short, preferably under 100\n\t\t\t\t\t\t\tcharacters.\n\t\t\t\t\t\t</Field.Description>\n\t\t\t\t\t</Field.Content>\n\t\t\t\t\t<Textarea\n\t\t\t\t\t\tid=\"message\"\n\t\t\t\t\t\tplaceholder=\"Hello, world!\"\n\t\t\t\t\t\trequired\n\t\t\t\t\t\tclass=\"min-h-[100px] resize-none sm:min-w-[300px]\"\n\t\t\t\t\t/>\n\t\t\t\t</Field.Field>\n\t\t\t\t<Field.Separator />\n\t\t\t\t<Field.Field orientation=\"responsive\">\n\t\t\t\t\t<Button type=\"submit\">Submit</Button>\n\t\t\t\t\t<Button type=\"button\" variant=\"outline\">Cancel</Button>\n\t\t\t\t</Field.Field>\n\t\t\t</Field.Group>\n\t\t</Field.Set>\n\t</form>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/field-select-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport * as Select from \"$lib/registry/ui/select/index.js\";\n\n\tlet department = $state<string>();\n\n\tconst departments = [\n\t\t{ value: \"engineering\", label: \"Engineering\" },\n\t\t{ value: \"design\", label: \"Design\" },\n\t\t{ value: \"marketing\", label: \"Marketing\" },\n\t\t{ value: \"sales\", label: \"Sales\" },\n\t\t{ value: \"support\", label: \"Customer Support\" },\n\t\t{ value: \"hr\", label: \"Human Resources\" },\n\t\t{ value: \"finance\", label: \"Finance\" },\n\t\t{ value: \"operations\", label: \"Operations\" },\n\t];\n\n\tconst departmentLabel = $derived(\n\t\tdepartments.find((d) => d.value === department)?.label ?? \"Choose department\"\n\t);\n</script>\n\n<div class=\"w-full max-w-md\">\n\t<Field.Field>\n\t\t<Field.Label for=\"department\">Department</Field.Label>\n\t\t<Select.Root type=\"single\" bind:value={department}>\n\t\t\t<Select.Trigger id=\"department\">\n\t\t\t\t{departmentLabel}\n\t\t\t</Select.Trigger>\n\t\t\t<Select.Content>\n\t\t\t\t{#each departments as department (department.value)}\n\t\t\t\t\t<Select.Item {...department} />\n\t\t\t\t{/each}\n\t\t\t</Select.Content>\n\t\t</Select.Root>\n\t\t<Field.Description>Select your department or area of work.</Field.Description>\n\t</Field.Field>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/field-select.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport * as Select from \"$lib/registry/ui/select/index.js\";\n\n\tlet department = $state<string>();\n\n\tconst departments = [\n\t\t{ value: \"engineering\", label: \"Engineering\" },\n\t\t{ value: \"design\", label: \"Design\" },\n\t\t{ value: \"marketing\", label: \"Marketing\" },\n\t\t{ value: \"sales\", label: \"Sales\" },\n\t\t{ value: \"support\", label: \"Customer Support\" },\n\t\t{ value: \"hr\", label: \"Human Resources\" },\n\t\t{ value: \"finance\", label: \"Finance\" },\n\t\t{ value: \"operations\", label: \"Operations\" },\n\t];\n\n\tconst departmentLabel = $derived(\n\t\tdepartments.find((d) => d.value === department)?.label ?? \"Choose department\"\n\t);\n</script>\n\n<div class=\"w-full max-w-md\">\n\t<Field.Field>\n\t\t<Field.Label for=\"department\">Department</Field.Label>\n\t\t<Select.Root type=\"single\" bind:value={department}>\n\t\t\t<Select.Trigger id=\"department\">\n\t\t\t\t{departmentLabel}\n\t\t\t</Select.Trigger>\n\t\t\t<Select.Content>\n\t\t\t\t{#each departments as department (department.value)}\n\t\t\t\t\t<Select.Item {...department} />\n\t\t\t\t{/each}\n\t\t\t</Select.Content>\n\t\t</Select.Root>\n\t\t<Field.Description>Select your department or area of work.</Field.Description>\n\t</Field.Field>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/field-slider-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport { Slider } from \"$lib/registry/ui/slider/index.js\";\n\n\tlet value = $state([200, 800]);\n</script>\n\n<div class=\"w-full max-w-md\">\n\t<Field.Field>\n\t\t<Field.Label>Price Range</Field.Label>\n\t\t<Field.Description>\n\t\t\tSet your budget range ($<span class=\"font-medium tabular-nums\">{value[0]}</span> -\n\t\t\t<span class=\"font-medium tabular-nums\">{value[1]}</span>).\n\t\t</Field.Description>\n\t\t<Slider\n\t\t\ttype=\"multiple\"\n\t\t\tbind:value\n\t\t\tmax={1000}\n\t\t\tmin={0}\n\t\t\tstep={10}\n\t\t\tclass=\"mt-2 w-full\"\n\t\t\taria-label=\"Price Range\"\n\t\t/>\n\t</Field.Field>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/field-slider.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport { Slider } from \"$lib/registry/ui/slider/index.js\";\n\n\tlet value = $state([200, 800]);\n</script>\n\n<div class=\"w-full max-w-md\">\n\t<Field.Field>\n\t\t<Field.Label>Price Range</Field.Label>\n\t\t<Field.Description>\n\t\t\tSet your budget range ($<span class=\"font-medium tabular-nums\">{value[0]}</span> -\n\t\t\t<span class=\"font-medium tabular-nums\">{value[1]}</span>).\n\t\t</Field.Description>\n\t\t<Slider\n\t\t\ttype=\"multiple\"\n\t\t\tbind:value\n\t\t\tmax={1000}\n\t\t\tmin={0}\n\t\t\tstep={10}\n\t\t\tclass=\"mt-2 w-full\"\n\t\t\taria-label=\"Price Range\"\n\t\t/>\n\t</Field.Field>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/field-switch-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport { Switch } from \"$lib/registry/ui/switch/index.js\";\n</script>\n\n<div class=\"w-full max-w-md\">\n\t<Field.Field orientation=\"horizontal\">\n\t\t<Field.Content>\n\t\t\t<Field.Label for=\"2fa\">Multi-factor authentication</Field.Label>\n\t\t\t<Field.Description>\n\t\t\t\tEnable multi-factor authentication. If you do not have a two-factor device, you can\n\t\t\t\tuse a one-time code sent to your email.\n\t\t\t</Field.Description>\n\t\t</Field.Content>\n\t\t<Switch id=\"2fa\" />\n\t</Field.Field>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/field-switch.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport { Switch } from \"$lib/registry/ui/switch/index.js\";\n</script>\n\n<div class=\"w-full max-w-md\">\n\t<Field.Field orientation=\"horizontal\">\n\t\t<Field.Content>\n\t\t\t<Field.Label for=\"2fa\">Multi-factor authentication</Field.Label>\n\t\t\t<Field.Description>\n\t\t\t\tEnable multi-factor authentication. If you do not have a two-factor device, you can\n\t\t\t\tuse a one-time code sent to your email.\n\t\t\t</Field.Description>\n\t\t</Field.Content>\n\t\t<Switch id=\"2fa\" />\n\t</Field.Field>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/field-textarea-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport { Textarea } from \"$lib/registry/ui/textarea/index.js\";\n</script>\n\n<div class=\"w-full max-w-md\">\n\t<Field.Set>\n\t\t<Field.Group>\n\t\t\t<Field.Field>\n\t\t\t\t<Field.Label for=\"feedback\">Feedback</Field.Label>\n\t\t\t\t<Textarea id=\"feedback\" placeholder=\"Your feedback helps us improve...\" rows={4} />\n\t\t\t\t<Field.Description>Share your thoughts about our service.</Field.Description>\n\t\t\t</Field.Field>\n\t\t</Field.Group>\n\t</Field.Set>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/field-textarea.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Field from \"$lib/registry/ui/field/index.js\";\n\timport { Textarea } from \"$lib/registry/ui/textarea/index.js\";\n</script>\n\n<div class=\"w-full max-w-md\">\n\t<Field.Set>\n\t\t<Field.Group>\n\t\t\t<Field.Field>\n\t\t\t\t<Field.Label for=\"feedback\">Feedback</Field.Label>\n\t\t\t\t<Textarea id=\"feedback\" placeholder=\"Your feedback helps us improve...\" rows={4} />\n\t\t\t\t<Field.Description>Share your thoughts about our service.</Field.Description>\n\t\t\t</Field.Field>\n\t\t</Field.Group>\n\t</Field.Set>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/form-demo.svelte",
    "content": "<script lang=\"ts\" module>\n\timport { z } from \"zod\";\n\n\tconst formSchema = z.object({\n\t\tusername: z.string().min(2).max(50),\n\t});\n</script>\n\n<script lang=\"ts\">\n\timport { defaults, superForm } from \"sveltekit-superforms\";\n\timport { zod4 } from \"sveltekit-superforms/adapters\";\n\timport { toast } from \"svelte-sonner\";\n\timport * as Form from \"$lib/registry/ui/form/index.js\";\n\timport { Input } from \"$lib/registry/ui/input/index.js\";\n\n\tconst form = superForm(defaults(zod4(formSchema)), {\n\t\tvalidators: zod4(formSchema),\n\t\tSPA: true,\n\t\tonUpdate: ({ form: f }) => {\n\t\t\tif (f.valid) {\n\t\t\t\ttoast.success(`You submitted ${JSON.stringify(f.data, null, 2)}`);\n\t\t\t} else {\n\t\t\t\ttoast.error(\"Please fix the errors in the form.\");\n\t\t\t}\n\t\t},\n\t});\n\n\tconst { form: formData, enhance } = form;\n</script>\n\n<form method=\"POST\" class=\"w-2/3 space-y-6\" use:enhance>\n\t<Form.Field {form} name=\"username\">\n\t\t<Form.Control>\n\t\t\t{#snippet children({ props })}\n\t\t\t\t<Form.Label>Username</Form.Label>\n\t\t\t\t<Input {...props} bind:value={$formData.username} />\n\t\t\t{/snippet}\n\t\t</Form.Control>\n\t\t<Form.Description>This is your public display name.</Form.Description>\n\t\t<Form.FieldErrors />\n\t</Form.Field>\n\t<Form.Button>Submit</Form.Button>\n</form>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/hover-card-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport CalendarDaysIcon from \"@lucide/svelte/icons/calendar-days\";\n\timport * as Avatar from \"$lib/registry/ui/avatar/index.js\";\n\timport * as HoverCard from \"$lib/registry/ui/hover-card/index.js\";\n</script>\n\n<HoverCard.Root>\n\t<HoverCard.Trigger\n\t\thref=\"https://github.com/sveltejs\"\n\t\ttarget=\"_blank\"\n\t\trel=\"noreferrer noopener\"\n\t\tclass=\"rounded-sm underline-offset-4 hover:underline focus-visible:outline-2 focus-visible:outline-offset-8 focus-visible:outline-black\"\n\t>\n\t\t@sveltejs\n\t</HoverCard.Trigger>\n\t<HoverCard.Content class=\"w-80\">\n\t\t<div class=\"flex justify-between space-x-4\">\n\t\t\t<Avatar.Root>\n\t\t\t\t<Avatar.Image src=\"https://github.com/sveltejs.png\" />\n\t\t\t\t<Avatar.Fallback>SK</Avatar.Fallback>\n\t\t\t</Avatar.Root>\n\t\t\t<div class=\"space-y-1\">\n\t\t\t\t<h4 class=\"text-sm font-semibold\">@sveltejs</h4>\n\t\t\t\t<p class=\"text-sm\">Cybernetically enhanced web apps.</p>\n\t\t\t\t<div class=\"flex items-center pt-2\">\n\t\t\t\t\t<CalendarDaysIcon class=\"me-2 size-4 opacity-70\" />\n\t\t\t\t\t<span class=\"text-muted-foreground text-xs\"> Joined September 2022 </span>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</HoverCard.Content>\n</HoverCard.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/index.ts",
    "content": "export { default as AccordionDemo } from \"./accordion-demo.svelte\";\nexport { default as AlertDemo } from \"./alert-demo.svelte\";\nexport { default as AlertDestructive } from \"./alert-destructive.svelte\";\nexport { default as AlertDialogDemo } from \"./alert-dialog-demo.svelte\";\nexport { default as AspectRatioDemo } from \"./aspect-ratio-demo.svelte\";\nexport { default as AvatarDemo } from \"./avatar-demo.svelte\";\nexport { default as BadgeDemo } from \"./badge-demo.svelte\";\nexport { default as BadgeDestructive } from \"./badge-destructive.svelte\";\nexport { default as BadgeOutline } from \"./badge-outline.svelte\";\nexport { default as BadgeSecondary } from \"./badge-secondary.svelte\";\nexport { default as ButtonDefault } from \"./button-default.svelte\";\nexport { default as ButtonDemo } from \"./button-demo.svelte\";\nexport { default as ButtonDestructive } from \"./button-destructive.svelte\";\nexport { default as ButtonIcon } from \"./button-icon.svelte\";\nexport { default as ButtonGhost } from \"./button-ghost.svelte\";\nexport { default as ButtonLink } from \"./button-link.svelte\";\nexport { default as ButtonLoading } from \"./button-loading.svelte\";\nexport { default as ButtonOutline } from \"./button-outline.svelte\";\nexport { default as ButtonSecondary } from \"./button-secondary.svelte\";\nexport { default as ButtonWithIcon } from \"./button-with-icon.svelte\";\nexport { default as CardDemo } from \"./card-demo.svelte\";\nexport { default as CardWithForm } from \"./card-with-form.svelte\";\nexport { default as CheckboxDemo } from \"./checkbox-demo.svelte\";\nexport { default as CheckboxDisabled } from \"./checkbox-disabled.svelte\";\nexport { default as CheckboxWithText } from \"./checkbox-with-text.svelte\";\nexport { default as CollapsibleDemo } from \"./collapsible-demo.svelte\";\nexport { default as ComboboxResponsive } from \"./combobox-responsive.svelte\";\nexport { default as ContextMenuDemo } from \"./context-menu-demo.svelte\";\nexport { default as DialogDemo } from \"./dialog-demo.svelte\";\nexport { default as DropdownMenuDemo } from \"./dropdown-menu-demo.svelte\";\nexport { default as HoverCardDemo } from \"./hover-card-demo.svelte\";\nexport { default as InputDemo } from \"./input-demo.svelte\";\nexport { default as InputWithButton } from \"./input-with-button.svelte\";\nexport { default as InputDisabled } from \"./input-disabled.svelte\";\nexport { default as InputFile } from \"./input-file.svelte\";\nexport { default as InputInvalid } from \"./input-invalid.svelte\";\nexport { default as InputWithLabel } from \"./input-with-label.svelte\";\nexport { default as InputWithText } from \"./input-with-text.svelte\";\nexport { default as KbdDemo } from \"./kbd-demo.svelte\";\nexport { default as KbdGroupDemo } from \"./kbd-group-demo.svelte\";\nexport { default as KbdButtonDemo } from \"./kbd-button-demo.svelte\";\nexport { default as KbdTooltipDemo } from \"./kbd-tooltip-demo.svelte\";\nexport { default as KbdInputGroupDemo } from \"./kbd-input-group-demo.svelte\";\nexport { default as InputOtpDemo } from \"./input-otp-demo.svelte\";\nexport { default as InputOtpForm } from \"./input-otp-form.svelte\";\nexport { default as InputOtpInvalid } from \"./input-otp-invalid.svelte\";\nexport { default as InputOtpPattern } from \"./input-otp-pattern.svelte\";\nexport { default as InputOtpSeparator } from \"./input-otp-separator.svelte\";\nexport { default as LabelDemo } from \"./label-demo.svelte\";\nexport { default as MenubarDemo } from \"./menubar-demo.svelte\";\nexport { default as NativeSelectDemo } from \"./native-select-demo.svelte\";\nexport { default as NativeSelectGroups } from \"./native-select-groups.svelte\";\nexport { default as NativeSelectDisabled } from \"./native-select-disabled.svelte\";\nexport { default as NativeSelectInvalid } from \"./native-select-invalid.svelte\";\nexport { default as PopoverDemo } from \"./popover-demo.svelte\";\nexport { default as ProgressDemo } from \"./progress-demo.svelte\";\nexport { default as RadioGroupDemo } from \"./radio-group-demo.svelte\";\nexport { default as ResizableDemo } from \"./resizable-demo.svelte\";\nexport { default as ResizableHandle } from \"./resizable-handle.svelte\";\nexport { default as ResizableVertical } from \"./resizable-vertical.svelte\";\nexport { default as SelectDemo } from \"./select-demo.svelte\";\nexport { default as SeparatorDemo } from \"./separator-demo.svelte\";\nexport { default as SheetDemo } from \"./sheet-demo.svelte\";\nexport { default as SheetSide } from \"./sheet-side.svelte\";\nexport { default as SkeletonDemo } from \"./skeleton-demo.svelte\";\nexport { default as SliderDemo } from \"./slider-demo.svelte\";\nexport { default as SliderMultiple } from \"./slider-multiple.svelte\";\nexport { default as SliderVertical } from \"./slider-vertical.svelte\";\nexport { default as SwitchDemo } from \"./switch-demo.svelte\";\nexport { default as TableDemo } from \"./table-demo.svelte\";\nexport { default as TabsDemo } from \"./tabs-demo.svelte\";\nexport { default as TextareaDemo } from \"./textarea-demo.svelte\";\nexport { default as TextareaWithButton } from \"./textarea-with-button.svelte\";\nexport { default as TextareaDisabled } from \"./textarea-disabled.svelte\";\nexport { default as TextareaWithLabel } from \"./textarea-with-label.svelte\";\nexport { default as TextareaWithText } from \"./textarea-with-text.svelte\";\nexport { default as ToggleDemo } from \"./toggle-demo.svelte\";\nexport { default as ToggleDisabled } from \"./toggle-disabled.svelte\";\nexport { default as ToggleLg } from \"./toggle-lg.svelte\";\nexport { default as ToggleOutline } from \"./toggle-outline.svelte\";\nexport { default as ToggleSm } from \"./toggle-sm.svelte\";\nexport { default as ToggleWithText } from \"./toggle-with-text.svelte\";\nexport { default as TooltipDemo } from \"./tooltip-demo.svelte\";\nexport { default as TypographyBlockquote } from \"./typography-blockquote.svelte\";\nexport { default as TypographyH1 } from \"./typography-h1.svelte\";\nexport { default as TypographyH2 } from \"./typography-h2.svelte\";\nexport { default as TypographyH3 } from \"./typography-h3.svelte\";\nexport { default as TypographyH4 } from \"./typography-h4.svelte\";\nexport { default as TypographyInlineCode } from \"./typography-inline-code.svelte\";\nexport { default as TypographyLarge } from \"./typography-large.svelte\";\nexport { default as TypographyLead } from \"./typography-lead.svelte\";\nexport { default as TypographyList } from \"./typography-list.svelte\";\nexport { default as TypographyMuted } from \"./typography-muted.svelte\";\nexport { default as TypographyP } from \"./typography-p.svelte\";\nexport { default as TypographySmall } from \"./typography-small.svelte\";\nexport { default as TypographyTable } from \"./typography-table.svelte\";\nexport { default as TypographyDemo } from \"./typography-demo.svelte\";\nexport { default as SpinnerDemo } from \"./spinner-demo.svelte\";\nexport { default as SpinnerCustomDemo } from \"./spinner-custom-demo.svelte\";\nexport { default as SpinnerSizeDemo } from \"./spinner-size-demo.svelte\";\nexport { default as SpinnerColorDemo } from \"./spinner-color-demo.svelte\";\nexport { default as SpinnerButtonDemo } from \"./spinner-button-demo.svelte\";\nexport { default as SpinnerBadgeDemo } from \"./spinner-badge-demo.svelte\";\nexport { default as SpinnerInputGroupDemo } from \"./spinner-input-group-demo.svelte\";\nexport { default as SpinnerEmptyDemo } from \"./spinner-empty-demo.svelte\";\nexport { default as ItemDemo } from \"./item-demo.svelte\";\nexport { default as ItemVariantsDemo } from \"./item-variants-demo.svelte\";\nexport { default as ItemSizeDemo } from \"./item-size-demo.svelte\";\nexport { default as ItemIconDemo } from \"./item-icon-demo.svelte\";\nexport { default as ItemAvatarDemo } from \"./item-avatar-demo.svelte\";\nexport { default as ItemImageDemo } from \"./item-image-demo.svelte\";\nexport { default as ItemGroupDemo } from \"./item-group-demo.svelte\";\nexport { default as ItemHeaderDemo } from \"./item-header-demo.svelte\";\nexport { default as ItemLinkDemo } from \"./item-link-demo.svelte\";\nexport { default as ItemDropdownDemo } from \"./item-dropdown-demo.svelte\";\nexport { default as ButtonGroupDemo } from \"./button-group-demo.svelte\";\nexport { default as ButtonGroupOrientationDemo } from \"./button-group-orientation-demo.svelte\";\nexport { default as ButtonGroupSizeDemo } from \"./button-group-size-demo.svelte\";\nexport { default as ButtonGroupNestedDemo } from \"./button-group-nested-demo.svelte\";\nexport { default as ButtonGroupSeparatorDemo } from \"./button-group-separator-demo.svelte\";\nexport { default as ButtonGroupSplitDemo } from \"./button-group-split-demo.svelte\";\nexport { default as ButtonGroupInputDemo } from \"./button-group-input-demo.svelte\";\nexport { default as ButtonGroupInputGroupDemo } from \"./button-group-input-group-demo.svelte\";\nexport { default as ButtonGroupSelectDemo } from \"./button-group-select-demo.svelte\";\nexport { default as ButtonGroupPopoverDemo } from \"./button-group-popover-demo.svelte\";\nexport { default as FieldDemo } from \"./field-demo.svelte\";\nexport { default as FieldInputDemo } from \"./field-input-demo.svelte\";\nexport { default as FieldTextAreaDemo } from \"./field-textarea-demo.svelte\";\nexport { default as FieldSelectDemo } from \"./field-select-demo.svelte\";\nexport { default as FieldSliderDemo } from \"./field-slider-demo.svelte\";\nexport { default as FieldFieldSetDemo } from \"./field-field-set-demo.svelte\";\nexport { default as FieldCheckboxDemo } from \"./field-checkbox-demo.svelte\";\nexport { default as FieldRadioDemo } from \"./field-radio-demo.svelte\";\nexport { default as FieldSwitchDemo } from \"./field-switch-demo.svelte\";\nexport { default as FieldChoiceCard } from \"./field-choice-card.svelte\";\nexport { default as FieldFieldGroupDemo } from \"./field-field-group-demo.svelte\";\nexport { default as FieldResponsiveLayoutDemo } from \"./field-responsive-layout-demo.svelte\";\nexport { default as InputGroupDemo } from \"./input-group-demo.svelte\";\nexport { default as InputGroupIconDemo } from \"./input-group-icon-demo.svelte\";\nexport { default as InputGroupTextDemo } from \"./input-group-text-demo.svelte\";\nexport { default as InputGroupButtonDemo } from \"./input-group-button-demo.svelte\";\nexport { default as InputGroupTooltipDemo } from \"./input-group-tooltip-demo.svelte\";\nexport { default as InputGroupTextareaDemo } from \"./input-group-textarea-demo.svelte\";\nexport { default as InputGroupSpinnerDemo } from \"./input-group-spinner-demo.svelte\";\nexport { default as InputGroupLabelDemo } from \"./input-group-label-demo.svelte\";\nexport { default as InputGroupDropdownDemo } from \"./input-group-dropdown-demo.svelte\";\nexport { default as InputGroupButtonGroupDemo } from \"./input-group-button-group-demo.svelte\";\nexport { default as InputGroupCustomInputDemo } from \"./input-group-custom-input-demo.svelte\";\nexport { default as EmptyDemo } from \"./empty-demo.svelte\";\nexport { default as EmptyOutlineDemo } from \"./empty-outline-demo.svelte\";\nexport { default as EmptyBackgroundDemo } from \"./empty-background-demo.svelte\";\nexport { default as EmptyAvatarDemo } from \"./empty-avatar-demo.svelte\";\nexport { default as EmptyAvatarGroupDemo } from \"./empty-avatar-group-demo.svelte\";\nexport { default as EmptyInputGroupDemo } from \"./empty-input-group-demo.svelte\";\n"
  },
  {
    "path": "docs/src/lib/registry/examples/input-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport { Input } from \"$lib/registry/ui/input/index.js\";\n</script>\n\n<Input type=\"email\" placeholder=\"Email\" class=\"max-w-xs\" />\n"
  },
  {
    "path": "docs/src/lib/registry/examples/input-disabled.svelte",
    "content": "<script lang=\"ts\">\n\timport { Input } from \"$lib/registry/ui/input/index.js\";\n</script>\n\n<Input disabled type=\"email\" placeholder=\"Email\" class=\"max-w-sm\" />\n"
  },
  {
    "path": "docs/src/lib/registry/examples/input-file.svelte",
    "content": "<script lang=\"ts\">\n\timport { Input } from \"$lib/registry/ui/input/index.js\";\n\timport { Label } from \"$lib/registry/ui/label/index.js\";\n</script>\n\n<div class=\"grid w-full max-w-sm items-center gap-1.5\">\n\t<Label for=\"picture\">Picture</Label>\n\t<Input id=\"picture\" type=\"file\" />\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/input-group-button-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport IconCheck from \"@tabler/icons-svelte/icons/check\";\n\timport IconCopy from \"@tabler/icons-svelte/icons/copy\";\n\timport IconInfoCircle from \"@tabler/icons-svelte/icons/info-circle\";\n\timport IconStar from \"@tabler/icons-svelte/icons/star\";\n\n\timport * as InputGroup from \"$lib/registry/ui/input-group/index.js\";\n\timport * as Popover from \"$lib/registry/ui/popover/index.js\";\n\timport { UseClipboard } from \"$lib/hooks/use-clipboard.svelte.js\";\n\n\tlet isFavorite = $state(false);\n\n\tconst clipboard = new UseClipboard();\n</script>\n\n<div class=\"grid w-full max-w-sm gap-6\">\n\t<InputGroup.Root>\n\t\t<InputGroup.Input placeholder=\"https://x.com/shadcn\" readonly />\n\t\t<InputGroup.Addon align=\"inline-end\">\n\t\t\t<InputGroup.Button\n\t\t\t\taria-label=\"Copy\"\n\t\t\t\ttitle=\"Copy\"\n\t\t\t\tsize=\"icon-xs\"\n\t\t\t\tonclick={() => clipboard.copy(\"https://x.com/shadcn\")}\n\t\t\t>\n\t\t\t\t{#if clipboard.copied}\n\t\t\t\t\t<IconCheck />\n\t\t\t\t{:else}\n\t\t\t\t\t<IconCopy />\n\t\t\t\t{/if}\n\t\t\t</InputGroup.Button>\n\t\t</InputGroup.Addon>\n\t</InputGroup.Root>\n\t<InputGroup.Root class=\"[--radius:9999px]\">\n\t\t<Popover.Root>\n\t\t\t<Popover.Trigger>\n\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t<InputGroup.Addon>\n\t\t\t\t\t\t<InputGroup.Button {...props} variant=\"secondary\" size=\"icon-xs\">\n\t\t\t\t\t\t\t<IconInfoCircle />\n\t\t\t\t\t\t</InputGroup.Button>\n\t\t\t\t\t</InputGroup.Addon>\n\t\t\t\t{/snippet}\n\t\t\t</Popover.Trigger>\n\t\t\t<Popover.Content align=\"start\" class=\"flex flex-col gap-1 rounded-xl text-sm\">\n\t\t\t\t<p class=\"font-medium\">Your connection is not secure.</p>\n\t\t\t\t<p>You should not enter any sensitive information on this site.</p>\n\t\t\t</Popover.Content>\n\t\t</Popover.Root>\n\t\t<InputGroup.Addon class=\"text-muted-foreground ps-1.5\">\n\t\t\t<InputGroup.Text>https://</InputGroup.Text>\n\t\t</InputGroup.Addon>\n\t\t<InputGroup.Input />\n\t\t<InputGroup.Addon align=\"inline-end\">\n\t\t\t<InputGroup.Button onclick={() => (isFavorite = !isFavorite)} size=\"icon-xs\">\n\t\t\t\t<IconStar class={isFavorite ? \"fill-blue-600 stroke-blue-600\" : \"\"} />\n\t\t\t</InputGroup.Button>\n\t\t</InputGroup.Addon>\n\t</InputGroup.Root>\n\t<InputGroup.Root>\n\t\t<InputGroup.Input placeholder=\"Type to search...\" />\n\t\t<InputGroup.Addon align=\"inline-end\">\n\t\t\t<InputGroup.Button variant=\"secondary\">Search</InputGroup.Button>\n\t\t</InputGroup.Addon>\n\t</InputGroup.Root>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/input-group-button-group-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport * as ButtonGroup from \"$lib/registry/ui/button-group/index.js\";\n\timport * as InputGroup from \"$lib/registry/ui/input-group/index.js\";\n\timport * as Label from \"$lib/registry/ui/label/index.js\";\n\timport Link2Icon from \"@lucide/svelte/icons/link-2\";\n</script>\n\n<div class=\"grid w-full max-w-sm gap-6\">\n\t<ButtonGroup.Root>\n\t\t<ButtonGroup.Text>\n\t\t\t<Label.Root for=\"url\">https://</Label.Root>\n\t\t</ButtonGroup.Text>\n\t\t<InputGroup.Root>\n\t\t\t<InputGroup.Input id=\"url\" />\n\t\t\t<InputGroup.Addon align=\"inline-end\">\n\t\t\t\t<Link2Icon />\n\t\t\t</InputGroup.Addon>\n\t\t</InputGroup.Root>\n\t\t<ButtonGroup.Text>.com</ButtonGroup.Text>\n\t</ButtonGroup.Root>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/input-group-custom-input-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport * as InputGroup from \"$lib/registry/ui/input-group/index.js\";\n</script>\n\n<div class=\"grid w-full max-w-sm gap-6\">\n\t<InputGroup.Root>\n\t\t<textarea\n\t\t\tdata-slot=\"input-group-control\"\n\t\t\tclass=\"flex field-sizing-content min-h-16 w-full resize-none rounded-md bg-transparent px-3 py-2.5 text-base transition-[color,box-shadow] outline-none md:text-sm\"\n\t\t\tplaceholder=\"Autoresize textarea...\"\n\t\t></textarea>\n\t\t<InputGroup.Addon align=\"block-end\">\n\t\t\t<InputGroup.Button class=\"ms-auto\" size=\"sm\" variant=\"default\">\n\t\t\t\tSubmit\n\t\t\t</InputGroup.Button>\n\t\t</InputGroup.Addon>\n\t</InputGroup.Root>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/input-group-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport IconCheck from \"@tabler/icons-svelte/icons/check\";\n\timport IconInfoCircle from \"@tabler/icons-svelte/icons/info-circle\";\n\timport IconPlus from \"@tabler/icons-svelte/icons/plus\";\n\n\timport * as InputGroup from \"$lib/registry/ui/input-group/index.js\";\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\timport * as Tooltip from \"$lib/registry/ui/tooltip/index.js\";\n\timport { Separator } from \"$lib/registry/ui/separator/index.js\";\n\timport SearchIcon from \"@lucide/svelte/icons/search\";\n\timport ArrowUpIcon from \"@lucide/svelte/icons/arrow-up\";\n</script>\n\n<div class=\"grid w-full max-w-sm gap-6\">\n\t<InputGroup.Root>\n\t\t<InputGroup.Input placeholder=\"Search...\" />\n\t\t<InputGroup.Addon>\n\t\t\t<SearchIcon />\n\t\t</InputGroup.Addon>\n\t\t<InputGroup.Addon align=\"inline-end\">12 results</InputGroup.Addon>\n\t</InputGroup.Root>\n\t<InputGroup.Root>\n\t\t<InputGroup.Input placeholder=\"example.com\" class=\"!ps-1\" />\n\t\t<InputGroup.Addon>\n\t\t\t<InputGroup.Text>https://</InputGroup.Text>\n\t\t</InputGroup.Addon>\n\t\t<InputGroup.Addon align=\"inline-end\">\n\t\t\t<Tooltip.Root>\n\t\t\t\t<Tooltip.Trigger>\n\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t<InputGroup.Button {...props} class=\"rounded-full\" size=\"icon-xs\">\n\t\t\t\t\t\t\t<IconInfoCircle />\n\t\t\t\t\t\t</InputGroup.Button>\n\t\t\t\t\t{/snippet}\n\t\t\t\t</Tooltip.Trigger>\n\t\t\t\t<Tooltip.Content>This is content in a tooltip.</Tooltip.Content>\n\t\t\t</Tooltip.Root>\n\t\t</InputGroup.Addon>\n\t</InputGroup.Root>\n\t<InputGroup.Root>\n\t\t<InputGroup.Textarea placeholder=\"Ask, Search or Chat...\" />\n\t\t<InputGroup.Addon align=\"block-end\">\n\t\t\t<InputGroup.Button variant=\"outline\" class=\"rounded-full\" size=\"icon-xs\">\n\t\t\t\t<IconPlus />\n\t\t\t</InputGroup.Button>\n\t\t\t<DropdownMenu.Root>\n\t\t\t\t<DropdownMenu.Trigger>\n\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t<InputGroup.Button {...props} variant=\"ghost\">Auto</InputGroup.Button>\n\t\t\t\t\t{/snippet}\n\t\t\t\t</DropdownMenu.Trigger>\n\t\t\t\t<DropdownMenu.Content side=\"top\" align=\"start\" class=\"[--radius:0.95rem]\">\n\t\t\t\t\t<DropdownMenu.Item>Auto</DropdownMenu.Item>\n\t\t\t\t\t<DropdownMenu.Item>Agent</DropdownMenu.Item>\n\t\t\t\t\t<DropdownMenu.Item>Manual</DropdownMenu.Item>\n\t\t\t\t</DropdownMenu.Content>\n\t\t\t</DropdownMenu.Root>\n\t\t\t<InputGroup.Text class=\"ms-auto\">52% used</InputGroup.Text>\n\t\t\t<Separator orientation=\"vertical\" class=\"!h-4\" />\n\t\t\t<InputGroup.Button variant=\"default\" class=\"rounded-full\" size=\"icon-xs\" disabled>\n\t\t\t\t<ArrowUpIcon />\n\t\t\t\t<span class=\"sr-only\">Send</span>\n\t\t\t</InputGroup.Button>\n\t\t</InputGroup.Addon>\n\t</InputGroup.Root>\n\t<InputGroup.Root>\n\t\t<InputGroup.Input placeholder=\"@shadcn\" />\n\t\t<InputGroup.Addon align=\"inline-end\">\n\t\t\t<div\n\t\t\t\tclass=\"bg-primary text-primary-foreground flex size-4 items-center justify-center rounded-full\"\n\t\t\t>\n\t\t\t\t<IconCheck class=\"size-3\" />\n\t\t\t</div>\n\t\t</InputGroup.Addon>\n\t</InputGroup.Root>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/input-group-dropdown-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\timport * as InputGroup from \"$lib/registry/ui/input-group/index.js\";\n\timport ChevronDownIcon from \"@lucide/svelte/icons/chevron-down\";\n\timport MoreHorizontalIcon from \"@lucide/svelte/icons/more-horizontal\";\n</script>\n\n<div class=\"grid w-full max-w-sm gap-4\">\n\t<InputGroup.Root>\n\t\t<InputGroup.Input placeholder=\"Enter file name\" />\n\t\t<InputGroup.Addon align=\"inline-end\">\n\t\t\t<DropdownMenu.Root>\n\t\t\t\t<DropdownMenu.Trigger>\n\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t<InputGroup.Button\n\t\t\t\t\t\t\t{...props}\n\t\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\t\taria-label=\"More\"\n\t\t\t\t\t\t\tsize=\"icon-xs\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<MoreHorizontalIcon />\n\t\t\t\t\t\t</InputGroup.Button>\n\t\t\t\t\t{/snippet}\n\t\t\t\t</DropdownMenu.Trigger>\n\t\t\t\t<DropdownMenu.Content align=\"end\">\n\t\t\t\t\t<DropdownMenu.Item>Settings</DropdownMenu.Item>\n\t\t\t\t\t<DropdownMenu.Item>Copy path</DropdownMenu.Item>\n\t\t\t\t\t<DropdownMenu.Item>Open location</DropdownMenu.Item>\n\t\t\t\t</DropdownMenu.Content>\n\t\t\t</DropdownMenu.Root>\n\t\t</InputGroup.Addon>\n\t</InputGroup.Root>\n\t<InputGroup.Root class=\"[--radius:1rem]\">\n\t\t<InputGroup.Input placeholder=\"Enter search query\" />\n\t\t<InputGroup.Addon align=\"inline-end\">\n\t\t\t<DropdownMenu.Root>\n\t\t\t\t<DropdownMenu.Trigger>\n\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t<InputGroup.Button {...props} variant=\"ghost\" class=\"!pe-1.5 text-xs\">\n\t\t\t\t\t\t\tSearch In... <ChevronDownIcon class=\"size-3\" />\n\t\t\t\t\t\t</InputGroup.Button>\n\t\t\t\t\t{/snippet}\n\t\t\t\t</DropdownMenu.Trigger>\n\t\t\t\t<DropdownMenu.Content align=\"end\" class=\"[--radius:0.95rem]\">\n\t\t\t\t\t<DropdownMenu.Item>Documentation</DropdownMenu.Item>\n\t\t\t\t\t<DropdownMenu.Item>Blog Posts</DropdownMenu.Item>\n\t\t\t\t\t<DropdownMenu.Item>Changelog</DropdownMenu.Item>\n\t\t\t\t</DropdownMenu.Content>\n\t\t\t</DropdownMenu.Root>\n\t\t</InputGroup.Addon>\n\t</InputGroup.Root>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/input-group-icon-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport * as InputGroup from \"$lib/registry/ui/input-group/index.js\";\n\timport CheckIcon from \"@lucide/svelte/icons/check\";\n\timport CreditCardIcon from \"@lucide/svelte/icons/credit-card\";\n\timport InfoIcon from \"@lucide/svelte/icons/info\";\n\timport MailIcon from \"@lucide/svelte/icons/mail\";\n\timport SearchIcon from \"@lucide/svelte/icons/search\";\n\timport StarIcon from \"@lucide/svelte/icons/star\";\n</script>\n\n<div class=\"grid w-full max-w-sm gap-6\">\n\t<InputGroup.Root>\n\t\t<InputGroup.Input placeholder=\"Search...\" />\n\t\t<InputGroup.Addon>\n\t\t\t<SearchIcon />\n\t\t</InputGroup.Addon>\n\t</InputGroup.Root>\n\t<InputGroup.Root>\n\t\t<InputGroup.Input type=\"email\" placeholder=\"Enter your email\" />\n\t\t<InputGroup.Addon>\n\t\t\t<MailIcon />\n\t\t</InputGroup.Addon>\n\t</InputGroup.Root>\n\t<InputGroup.Root>\n\t\t<InputGroup.Input placeholder=\"Card number\" />\n\t\t<InputGroup.Addon>\n\t\t\t<CreditCardIcon />\n\t\t</InputGroup.Addon>\n\t\t<InputGroup.Addon align=\"inline-end\">\n\t\t\t<CheckIcon />\n\t\t</InputGroup.Addon>\n\t</InputGroup.Root>\n\t<InputGroup.Root>\n\t\t<InputGroup.Input placeholder=\"Card number\" />\n\t\t<InputGroup.Addon align=\"inline-end\">\n\t\t\t<StarIcon />\n\t\t\t<InfoIcon />\n\t\t</InputGroup.Addon>\n\t</InputGroup.Root>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/input-group-label-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport * as InputGroup from \"$lib/registry/ui/input-group/index.js\";\n\timport * as Label from \"$lib/registry/ui/label/index.js\";\n\timport * as Tooltip from \"$lib/registry/ui/tooltip/index.js\";\n\timport InfoIcon from \"@lucide/svelte/icons/info\";\n</script>\n\n<div class=\"grid w-full max-w-sm gap-4\">\n\t<InputGroup.Root>\n\t\t<InputGroup.Input id=\"email\" placeholder=\"shadcn\" />\n\t\t<InputGroup.Addon>\n\t\t\t<Label.Root for=\"email\">@</Label.Root>\n\t\t</InputGroup.Addon>\n\t</InputGroup.Root>\n\t<InputGroup.Root>\n\t\t<InputGroup.Input id=\"email-2\" placeholder=\"shadcn@vercel.com\" />\n\t\t<InputGroup.Addon align=\"block-start\">\n\t\t\t<Label.Root for=\"email-2\" class=\"text-foreground\">Email</Label.Root>\n\t\t\t<Tooltip.Root>\n\t\t\t\t<Tooltip.Trigger>\n\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t<InputGroup.Button\n\t\t\t\t\t\t\t{...props}\n\t\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\t\taria-label=\"Help\"\n\t\t\t\t\t\t\tclass=\"ms-auto rounded-full\"\n\t\t\t\t\t\t\tsize=\"icon-xs\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<InfoIcon />\n\t\t\t\t\t\t</InputGroup.Button>\n\t\t\t\t\t{/snippet}\n\t\t\t\t</Tooltip.Trigger>\n\t\t\t\t<Tooltip.Content>\n\t\t\t\t\t<p>We'll use this to send you notifications</p>\n\t\t\t\t</Tooltip.Content>\n\t\t\t</Tooltip.Root>\n\t\t</InputGroup.Addon>\n\t</InputGroup.Root>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/input-group-spinner-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport * as InputGroup from \"$lib/registry/ui/input-group/index.js\";\n\timport { Spinner } from \"$lib/registry/ui/spinner/index.js\";\n\timport LoaderIcon from \"@lucide/svelte/icons/loader\";\n</script>\n\n<div class=\"grid w-full max-w-sm gap-4\">\n\t<InputGroup.Root data-disabled>\n\t\t<InputGroup.Input placeholder=\"Searching...\" disabled />\n\t\t<InputGroup.Addon align=\"inline-end\">\n\t\t\t<Spinner />\n\t\t</InputGroup.Addon>\n\t</InputGroup.Root>\n\t<InputGroup.Root data-disabled>\n\t\t<InputGroup.Input placeholder=\"Processing...\" disabled />\n\t\t<InputGroup.Addon>\n\t\t\t<Spinner />\n\t\t</InputGroup.Addon>\n\t</InputGroup.Root>\n\t<InputGroup.Root data-disabled>\n\t\t<InputGroup.Input placeholder=\"Saving changes...\" disabled />\n\t\t<InputGroup.Addon align=\"inline-end\">\n\t\t\t<InputGroup.Text>Saving...</InputGroup.Text>\n\t\t\t<Spinner />\n\t\t</InputGroup.Addon>\n\t</InputGroup.Root>\n\t<InputGroup.Root data-disabled>\n\t\t<InputGroup.Input placeholder=\"Refreshing data...\" disabled />\n\t\t<InputGroup.Addon>\n\t\t\t<LoaderIcon class=\"animate-spin\" />\n\t\t</InputGroup.Addon>\n\t\t<InputGroup.Addon align=\"inline-end\">\n\t\t\t<InputGroup.Text class=\"text-muted-foreground\">Please wait...</InputGroup.Text>\n\t\t</InputGroup.Addon>\n\t</InputGroup.Root>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/input-group-text-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport * as InputGroup from \"$lib/registry/ui/input-group/index.js\";\n</script>\n\n<div class=\"grid w-full max-w-sm gap-6\">\n\t<InputGroup.Root>\n\t\t<InputGroup.Addon>\n\t\t\t<InputGroup.Text>$</InputGroup.Text>\n\t\t</InputGroup.Addon>\n\t\t<InputGroup.Input placeholder=\"0.00\" />\n\t\t<InputGroup.Addon align=\"inline-end\">\n\t\t\t<InputGroup.Text>USD</InputGroup.Text>\n\t\t</InputGroup.Addon>\n\t</InputGroup.Root>\n\t<InputGroup.Root>\n\t\t<InputGroup.Addon>\n\t\t\t<InputGroup.Text>https://</InputGroup.Text>\n\t\t</InputGroup.Addon>\n\t\t<InputGroup.Input placeholder=\"example.com\" class=\"!ps-0.5\" />\n\t\t<InputGroup.Addon align=\"inline-end\">\n\t\t\t<InputGroup.Text>.com</InputGroup.Text>\n\t\t</InputGroup.Addon>\n\t</InputGroup.Root>\n\t<InputGroup.Root>\n\t\t<InputGroup.Input placeholder=\"Enter your username\" />\n\t\t<InputGroup.Addon align=\"inline-end\">\n\t\t\t<InputGroup.Text>@company.com</InputGroup.Text>\n\t\t</InputGroup.Addon>\n\t</InputGroup.Root>\n\t<InputGroup.Root>\n\t\t<InputGroup.Textarea placeholder=\"Enter your message\" />\n\t\t<InputGroup.Addon align=\"block-end\">\n\t\t\t<InputGroup.Text class=\"text-muted-foreground text-xs\">\n\t\t\t\t120 characters left\n\t\t\t</InputGroup.Text>\n\t\t</InputGroup.Addon>\n\t</InputGroup.Root>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/input-group-textarea-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport IconBrandJavascript from \"@tabler/icons-svelte/icons/brand-javascript\";\n\timport IconCopy from \"@tabler/icons-svelte/icons/copy\";\n\timport IconCornerDownLeft from \"@tabler/icons-svelte/icons/corner-down-left\";\n\timport IconRefresh from \"@tabler/icons-svelte/icons/refresh\";\n\n\timport * as InputGroup from \"$lib/registry/ui/input-group/index.js\";\n</script>\n\n<div class=\"grid w-full max-w-md gap-4\">\n\t<InputGroup.Root>\n\t\t<InputGroup.Addon align=\"block-start\" class=\"border-b\">\n\t\t\t<InputGroup.Text class=\"font-mono font-medium\">\n\t\t\t\t<IconBrandJavascript />\n\t\t\t\tscript.js\n\t\t\t</InputGroup.Text>\n\t\t\t<InputGroup.Button class=\"ms-auto\" size=\"icon-xs\">\n\t\t\t\t<IconRefresh />\n\t\t\t</InputGroup.Button>\n\t\t\t<InputGroup.Button variant=\"ghost\" size=\"icon-xs\">\n\t\t\t\t<IconCopy />\n\t\t\t</InputGroup.Button>\n\t\t</InputGroup.Addon>\n\t\t<InputGroup.Textarea placeholder=\"console.log('Hello, world!');\" class=\"min-h-[200px]\" />\n\t\t<InputGroup.Addon align=\"block-end\" class=\"border-t\">\n\t\t\t<InputGroup.Text>Line 1, Column 1</InputGroup.Text>\n\t\t\t<InputGroup.Button size=\"sm\" class=\"ms-auto\" variant=\"default\">\n\t\t\t\tRun <IconCornerDownLeft />\n\t\t\t</InputGroup.Button>\n\t\t</InputGroup.Addon>\n\t</InputGroup.Root>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/input-group-tooltip-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport * as InputGroup from \"$lib/registry/ui/input-group/index.js\";\n\timport * as Tooltip from \"$lib/registry/ui/tooltip/index.js\";\n\timport HelpCircleIcon from \"@lucide/svelte/icons/help-circle\";\n\timport InfoIcon from \"@lucide/svelte/icons/info\";\n</script>\n\n<div class=\"grid w-full max-w-sm gap-4\">\n\t<InputGroup.Root>\n\t\t<InputGroup.Input placeholder=\"Enter password\" type=\"password\" />\n\t\t<InputGroup.Addon align=\"inline-end\">\n\t\t\t<Tooltip.Root>\n\t\t\t\t<Tooltip.Trigger>\n\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t<InputGroup.Button\n\t\t\t\t\t\t\t{...props}\n\t\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\t\taria-label=\"Info\"\n\t\t\t\t\t\t\tsize=\"icon-xs\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<InfoIcon />\n\t\t\t\t\t\t</InputGroup.Button>\n\t\t\t\t\t{/snippet}\n\t\t\t\t</Tooltip.Trigger>\n\t\t\t\t<Tooltip.Content>\n\t\t\t\t\t<p>Password must be at least 8 characters</p>\n\t\t\t\t</Tooltip.Content>\n\t\t\t</Tooltip.Root>\n\t\t</InputGroup.Addon>\n\t</InputGroup.Root>\n\t<InputGroup.Root>\n\t\t<InputGroup.Input placeholder=\"Your email address\" />\n\t\t<InputGroup.Addon align=\"inline-end\">\n\t\t\t<Tooltip.Root>\n\t\t\t\t<Tooltip.Trigger>\n\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t<InputGroup.Button\n\t\t\t\t\t\t\t{...props}\n\t\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\t\taria-label=\"Help\"\n\t\t\t\t\t\t\tsize=\"icon-xs\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<HelpCircleIcon />\n\t\t\t\t\t\t</InputGroup.Button>\n\t\t\t\t\t{/snippet}\n\t\t\t\t</Tooltip.Trigger>\n\t\t\t\t<Tooltip.Content>\n\t\t\t\t\t<p>We'll use this to send you notifications</p>\n\t\t\t\t</Tooltip.Content>\n\t\t\t</Tooltip.Root>\n\t\t</InputGroup.Addon>\n\t</InputGroup.Root>\n\t<InputGroup.Root>\n\t\t<InputGroup.Input placeholder=\"Enter API key\" />\n\t\t<Tooltip.Root>\n\t\t\t<Tooltip.Trigger>\n\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t<InputGroup.Addon>\n\t\t\t\t\t\t<InputGroup.Button\n\t\t\t\t\t\t\t{...props}\n\t\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\t\taria-label=\"Help\"\n\t\t\t\t\t\t\tsize=\"icon-xs\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<HelpCircleIcon />\n\t\t\t\t\t\t</InputGroup.Button>\n\t\t\t\t\t</InputGroup.Addon>\n\t\t\t\t{/snippet}\n\t\t\t</Tooltip.Trigger>\n\t\t\t<Tooltip.Content side=\"left\">\n\t\t\t\t<p>Click for help with API keys</p>\n\t\t\t</Tooltip.Content>\n\t\t</Tooltip.Root>\n\t</InputGroup.Root>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/input-invalid.svelte",
    "content": "<script lang=\"ts\">\n\timport { Input } from \"$lib/registry/ui/input/index.js\";\n</script>\n\n<Input aria-invalid type=\"email\" placeholder=\"email\" value=\"shadcn@example\" class=\"max-w-sm\" />\n"
  },
  {
    "path": "docs/src/lib/registry/examples/input-otp-controlled.svelte",
    "content": "<script lang=\"ts\">\n\timport * as InputOTP from \"$lib/registry/ui/input-otp/index.js\";\n\n\tlet value = $state(\"\");\n</script>\n\n<div class=\"space-y-2\">\n\t<InputOTP.Root maxlength={6} bind:value>\n\t\t{#snippet children({ cells })}\n\t\t\t<InputOTP.Group>\n\t\t\t\t{#each cells.slice(0, 6) as cell (cell)}\n\t\t\t\t\t<InputOTP.Slot {cell} />\n\t\t\t\t{/each}\n\t\t\t</InputOTP.Group>\n\t\t{/snippet}\n\t</InputOTP.Root>\n\t<div class=\"text-center text-sm\">\n\t\t{value === \"\" ? \"Enter your one-time password.\" : `You entered: ${value}`}\n\t</div>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/input-otp-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport * as InputOTP from \"$lib/registry/ui/input-otp/index.js\";\n</script>\n\n<InputOTP.Root maxlength={6}>\n\t{#snippet children({ cells })}\n\t\t<InputOTP.Group>\n\t\t\t{#each cells.slice(0, 3) as cell (cell)}\n\t\t\t\t<InputOTP.Slot {cell} />\n\t\t\t{/each}\n\t\t</InputOTP.Group>\n\t\t<InputOTP.Separator />\n\t\t<InputOTP.Group>\n\t\t\t{#each cells.slice(3, 6) as cell (cell)}\n\t\t\t\t<InputOTP.Slot {cell} />\n\t\t\t{/each}\n\t\t</InputOTP.Group>\n\t{/snippet}\n</InputOTP.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/input-otp-form.svelte",
    "content": "<script lang=\"ts\" module>\n\timport { z } from \"zod\";\n\tconst formSchema = z.object({\n\t\tpin: z.string().min(6, {\n\t\t\tmessage: \"Your one-time password must be at least 6 characters.\",\n\t\t}),\n\t});\n</script>\n\n<script lang=\"ts\">\n\timport { defaults, superForm } from \"sveltekit-superforms\";\n\timport { zod4 } from \"sveltekit-superforms/adapters\";\n\timport { toast } from \"svelte-sonner\";\n\timport * as InputOTP from \"$lib/registry/ui/input-otp/index.js\";\n\timport * as Form from \"$lib/registry/ui/form/index.js\";\n\n\tconst form = superForm(defaults(zod4(formSchema)), {\n\t\tvalidators: zod4(formSchema),\n\t\tSPA: true,\n\t\tonUpdate: ({ form: f }) => {\n\t\t\tif (f.valid) {\n\t\t\t\ttoast.success(`You submitted ${JSON.stringify(f.data, null, 2)}`);\n\t\t\t} else {\n\t\t\t\ttoast.error(\"Please fix the errors in the form.\");\n\t\t\t}\n\t\t},\n\t});\n\n\tconst { form: formData, enhance } = form;\n</script>\n\n<form method=\"POST\" class=\"w-2/3 space-y-6\" use:enhance>\n\t<Form.Field {form} name=\"pin\">\n\t\t<Form.Control>\n\t\t\t{#snippet children({ props })}\n\t\t\t\t<Form.Label>One-Time Password</Form.Label>\n\t\t\t\t<InputOTP.Root maxlength={6} {...props} bind:value={$formData.pin}>\n\t\t\t\t\t{#snippet children({ cells })}\n\t\t\t\t\t\t<InputOTP.Group>\n\t\t\t\t\t\t\t{#each cells as cell (cell)}\n\t\t\t\t\t\t\t\t<InputOTP.Slot {cell} />\n\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t</InputOTP.Group>\n\t\t\t\t\t{/snippet}\n\t\t\t\t</InputOTP.Root>\n\t\t\t{/snippet}\n\t\t</Form.Control>\n\t\t<Form.Description>Please enter the one-time password sent to your phone.</Form.Description>\n\t\t<Form.FieldErrors />\n\t</Form.Field>\n\t<Form.Button>Submit</Form.Button>\n</form>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/input-otp-invalid.svelte",
    "content": "<script lang=\"ts\">\n\timport * as InputOTP from \"$lib/registry/ui/input-otp/index.js\";\n</script>\n\n<InputOTP.Root maxlength={6}>\n\t{#snippet children({ cells })}\n\t\t<InputOTP.Group>\n\t\t\t{#each cells.slice(0, 3) as cell (cell)}\n\t\t\t\t<InputOTP.Slot aria-invalid {cell} />\n\t\t\t{/each}\n\t\t</InputOTP.Group>\n\t\t<InputOTP.Separator />\n\t\t<InputOTP.Group>\n\t\t\t{#each cells.slice(3, 6) as cell (cell)}\n\t\t\t\t<InputOTP.Slot aria-invalid {cell} />\n\t\t\t{/each}\n\t\t</InputOTP.Group>\n\t{/snippet}\n</InputOTP.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/input-otp-pattern.svelte",
    "content": "<script lang=\"ts\">\n\timport * as InputOTP from \"$lib/registry/ui/input-otp/index.js\";\n\timport { REGEXP_ONLY_DIGITS_AND_CHARS } from \"bits-ui\";\n</script>\n\n<InputOTP.Root maxlength={6} pattern={REGEXP_ONLY_DIGITS_AND_CHARS}>\n\t{#snippet children({ cells })}\n\t\t<InputOTP.Group>\n\t\t\t{#each cells as cell (cell)}\n\t\t\t\t<InputOTP.Slot {cell} />\n\t\t\t{/each}\n\t\t</InputOTP.Group>\n\t{/snippet}\n</InputOTP.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/input-otp-separator.svelte",
    "content": "<script lang=\"ts\">\n\timport * as InputOTP from \"$lib/registry/ui/input-otp/index.js\";\n</script>\n\n<InputOTP.Root maxlength={6}>\n\t{#snippet children({ cells })}\n\t\t<InputOTP.Group>\n\t\t\t{#each cells.slice(0, 2) as cell (cell)}\n\t\t\t\t<InputOTP.Slot {cell} />\n\t\t\t{/each}\n\t\t</InputOTP.Group>\n\t\t<InputOTP.Separator />\n\t\t<InputOTP.Group>\n\t\t\t{#each cells.slice(2, 4) as cell (cell)}\n\t\t\t\t<InputOTP.Slot {cell} />\n\t\t\t{/each}\n\t\t</InputOTP.Group>\n\t\t<InputOTP.Separator />\n\t\t<InputOTP.Group>\n\t\t\t{#each cells.slice(4, 6) as cell (cell)}\n\t\t\t\t<InputOTP.Slot {cell} />\n\t\t\t{/each}\n\t\t</InputOTP.Group>\n\t{/snippet}\n</InputOTP.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/input-with-button.svelte",
    "content": "<script lang=\"ts\">\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport { Input } from \"$lib/registry/ui/input/index.js\";\n</script>\n\n<div class=\"flex w-full max-w-sm items-center gap-2\">\n\t<Input type=\"email\" placeholder=\"Email\" />\n\t<Button type=\"submit\" variant=\"outline\">Subscribe</Button>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/input-with-label.svelte",
    "content": "<script lang=\"ts\">\n\timport { Input } from \"$lib/registry/ui/input/index.js\";\n\timport { Label } from \"$lib/registry/ui/label/index.js\";\n\n\tconst id = $props.id();\n</script>\n\n<div class=\"flex w-full max-w-sm flex-col gap-1.5\">\n\t<Label for=\"email-{id}\">Email</Label>\n\t<Input type=\"email\" id=\"email-{id}\" placeholder=\"Email\" />\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/input-with-text.svelte",
    "content": "<script lang=\"ts\">\n\timport { Input } from \"$lib/registry/ui/input/index.js\";\n\timport { Label } from \"$lib/registry/ui/label/index.js\";\n</script>\n\n<div class=\"flex w-full max-w-sm flex-col gap-1.5\">\n\t<Label for=\"email-2\">Email</Label>\n\t<Input type=\"email\" id=\"email-2\" placeholder=\"Email\" />\n\t<p class=\"text-muted-foreground text-sm\">Enter your email address.</p>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/item-avatar-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Item from \"$lib/registry/ui/item/index.js\";\n\timport * as Avatar from \"$lib/registry/ui/avatar/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport Plus from \"@lucide/svelte/icons/plus\";\n</script>\n\n<div class=\"flex w-full max-w-lg flex-col gap-6\">\n\t<Item.Root variant=\"outline\">\n\t\t<Item.Media>\n\t\t\t<Avatar.Root class=\"size-10\">\n\t\t\t\t<Avatar.Image src=\"https://github.com/evilrabbit.png\" />\n\t\t\t\t<Avatar.Fallback>ER</Avatar.Fallback>\n\t\t\t</Avatar.Root>\n\t\t</Item.Media>\n\t\t<Item.Content>\n\t\t\t<Item.Title>Evil Rabbit</Item.Title>\n\t\t\t<Item.Description>Last seen 5 months ago</Item.Description>\n\t\t</Item.Content>\n\t\t<Item.Actions>\n\t\t\t<Button size=\"icon\" variant=\"outline\" class=\"rounded-full\" aria-label=\"Invite\">\n\t\t\t\t<Plus />\n\t\t\t</Button>\n\t\t</Item.Actions>\n\t</Item.Root>\n\t<Item.Root variant=\"outline\">\n\t\t<Item.Media>\n\t\t\t<div\n\t\t\t\tclass=\"*:data-[slot=avatar]:ring-background flex -space-x-2 *:data-[slot=avatar]:ring-2 *:data-[slot=avatar]:grayscale\"\n\t\t\t>\n\t\t\t\t<Avatar.Root class=\"hidden sm:flex\">\n\t\t\t\t\t<Avatar.Image src=\"https://github.com/shadcn.png\" alt=\"@shadcn\" />\n\t\t\t\t\t<Avatar.Fallback>CN</Avatar.Fallback>\n\t\t\t\t</Avatar.Root>\n\t\t\t\t<Avatar.Root class=\"hidden sm:flex\">\n\t\t\t\t\t<Avatar.Image src=\"https://github.com/maxleiter.png\" alt=\"@maxleiter\" />\n\t\t\t\t\t<Avatar.Fallback>LR</Avatar.Fallback>\n\t\t\t\t</Avatar.Root>\n\t\t\t\t<Avatar.Root>\n\t\t\t\t\t<Avatar.Image src=\"https://github.com/evilrabbit.png\" alt=\"@evilrabbit\" />\n\t\t\t\t\t<Avatar.Fallback>ER</Avatar.Fallback>\n\t\t\t\t</Avatar.Root>\n\t\t\t</div>\n\t\t</Item.Media>\n\t\t<Item.Content>\n\t\t\t<Item.Title>No Team Members</Item.Title>\n\t\t\t<Item.Description>Invite your team to collaborate on this project.</Item.Description>\n\t\t</Item.Content>\n\t\t<Item.Actions>\n\t\t\t<Button size=\"sm\" variant=\"outline\">Invite</Button>\n\t\t</Item.Actions>\n\t</Item.Root>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/item-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Item from \"$lib/registry/ui/item/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport BadgeCheckIcon from \"@lucide/svelte/icons/badge-check\";\n\timport ChevronRightIcon from \"@lucide/svelte/icons/chevron-right\";\n</script>\n\n<div class=\"flex w-full max-w-md flex-col gap-6\">\n\t<Item.Root variant=\"outline\">\n\t\t<Item.Content>\n\t\t\t<Item.Title>Basic Item</Item.Title>\n\t\t\t<Item.Description>A simple item with title and description.</Item.Description>\n\t\t</Item.Content>\n\t\t<Item.Actions>\n\t\t\t<Button variant=\"outline\" size=\"sm\">Action</Button>\n\t\t</Item.Actions>\n\t</Item.Root>\n\t<Item.Root variant=\"outline\" size=\"sm\">\n\t\t{#snippet child({ props })}\n\t\t\t<a href=\"#/\" {...props}>\n\t\t\t\t<Item.Media>\n\t\t\t\t\t<BadgeCheckIcon class=\"size-5\" />\n\t\t\t\t</Item.Media>\n\t\t\t\t<Item.Content>\n\t\t\t\t\t<Item.Title>Your profile has been verified.</Item.Title>\n\t\t\t\t</Item.Content>\n\t\t\t\t<Item.Actions>\n\t\t\t\t\t<ChevronRightIcon class=\"size-4\" />\n\t\t\t\t</Item.Actions>\n\t\t\t</a>\n\t\t{/snippet}\n\t</Item.Root>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/item-dropdown-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Item from \"$lib/registry/ui/item/index.js\";\n\timport * as Avatar from \"$lib/registry/ui/avatar/index.js\";\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport ChevronDown from \"@lucide/svelte/icons/chevron-down\";\n\n\tconst people = [\n\t\t{\n\t\t\tusername: \"shadcn\",\n\t\t\tavatar: \"https://github.com/shadcn.png\",\n\t\t\temail: \"shadcn@vercel.com\",\n\t\t},\n\t\t{\n\t\t\tusername: \"maxleiter\",\n\t\t\tavatar: \"https://github.com/maxleiter.png\",\n\t\t\temail: \"maxleiter@vercel.com\",\n\t\t},\n\t\t{\n\t\t\tusername: \"evilrabbit\",\n\t\t\tavatar: \"https://github.com/evilrabbit.png\",\n\t\t\temail: \"evilrabbit@vercel.com\",\n\t\t},\n\t];\n</script>\n\n<div class=\"flex min-h-64 w-full max-w-md flex-col items-center gap-6\">\n\t<DropdownMenu.Root>\n\t\t<DropdownMenu.Trigger>\n\t\t\t{#snippet child({ props })}\n\t\t\t\t<Button {...props} variant=\"outline\" size=\"sm\" class=\"w-fit\">\n\t\t\t\t\tSelect <ChevronDown />\n\t\t\t\t</Button>\n\t\t\t{/snippet}\n\t\t</DropdownMenu.Trigger>\n\t\t<DropdownMenu.Content class=\"w-72 [--radius:0.65rem]\" align=\"end\">\n\t\t\t{#each people as person (person.username)}\n\t\t\t\t<DropdownMenu.Item class=\"p-0\">\n\t\t\t\t\t<Item.Root size=\"sm\" class=\"w-full p-2\">\n\t\t\t\t\t\t<Item.Media>\n\t\t\t\t\t\t\t<Avatar.Root class=\"size-8\">\n\t\t\t\t\t\t\t\t<Avatar.Image src={person.avatar} class=\"grayscale\" />\n\t\t\t\t\t\t\t\t<Avatar.Fallback>{person.username.charAt(0)}</Avatar.Fallback>\n\t\t\t\t\t\t\t</Avatar.Root>\n\t\t\t\t\t\t</Item.Media>\n\t\t\t\t\t\t<Item.Content class=\"gap-0.5\">\n\t\t\t\t\t\t\t<Item.Title>{person.username}</Item.Title>\n\t\t\t\t\t\t\t<Item.Description>{person.email}</Item.Description>\n\t\t\t\t\t\t</Item.Content>\n\t\t\t\t\t</Item.Root>\n\t\t\t\t</DropdownMenu.Item>\n\t\t\t{/each}\n\t\t</DropdownMenu.Content>\n\t</DropdownMenu.Root>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/item-group-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Item from \"$lib/registry/ui/item/index.js\";\n\timport * as Avatar from \"$lib/registry/ui/avatar/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport Plus from \"@lucide/svelte/icons/plus\";\n\n\tconst people = [\n\t\t{\n\t\t\tusername: \"shadcn\",\n\t\t\tavatar: \"https://github.com/shadcn.png\",\n\t\t\temail: \"shadcn@vercel.com\",\n\t\t},\n\t\t{\n\t\t\tusername: \"maxleiter\",\n\t\t\tavatar: \"https://github.com/maxleiter.png\",\n\t\t\temail: \"maxleiter@vercel.com\",\n\t\t},\n\t\t{\n\t\t\tusername: \"evilrabbit\",\n\t\t\tavatar: \"https://github.com/evilrabbit.png\",\n\t\t\temail: \"evilrabbit@vercel.com\",\n\t\t},\n\t];\n</script>\n\n<div class=\"flex w-full max-w-md flex-col gap-6\">\n\t<Item.Group>\n\t\t{#each people as person, index (person.username)}\n\t\t\t<Item.Root>\n\t\t\t\t<Item.Media>\n\t\t\t\t\t<Avatar.Root>\n\t\t\t\t\t\t<Avatar.Image src={person.avatar} class=\"grayscale\" />\n\t\t\t\t\t\t<Avatar.Fallback>{person.username.charAt(0)}</Avatar.Fallback>\n\t\t\t\t\t</Avatar.Root>\n\t\t\t\t</Item.Media>\n\t\t\t\t<Item.Content class=\"gap-1\">\n\t\t\t\t\t<Item.Title>{person.username}</Item.Title>\n\t\t\t\t\t<Item.Description>{person.email}</Item.Description>\n\t\t\t\t</Item.Content>\n\t\t\t\t<Item.Actions>\n\t\t\t\t\t<Button variant=\"ghost\" size=\"icon\" class=\"rounded-full\">\n\t\t\t\t\t\t<Plus />\n\t\t\t\t\t</Button>\n\t\t\t\t</Item.Actions>\n\t\t\t</Item.Root>\n\t\t\t{#if index !== people.length - 1}\n\t\t\t\t<Item.Separator />\n\t\t\t{/if}\n\t\t{/each}\n\t</Item.Group>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/item-header-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Item from \"$lib/registry/ui/item/index.js\";\n\n\tconst models = [\n\t\t{\n\t\t\tname: \"v0-1.5-sm\",\n\t\t\tdescription: \"Everyday tasks and UI generation.\",\n\t\t\timage: \"https://images.unsplash.com/photo-1650804068570-7fb2e3dbf888?q=80&w=640&auto=format&fit=crop\",\n\t\t\tcredit: \"Valeria Reverdo on Unsplash\",\n\t\t},\n\t\t{\n\t\t\tname: \"v0-1.5-lg\",\n\t\t\tdescription: \"Advanced thinking or reasoning.\",\n\t\t\timage: \"https://images.unsplash.com/photo-1610280777472-54133d004c8c?q=80&w=640&auto=format&fit=crop\",\n\t\t\tcredit: \"Michael Oeser on Unsplash\",\n\t\t},\n\t\t{\n\t\t\tname: \"v0-2.0-mini\",\n\t\t\tdescription: \"Open Source model for everyone.\",\n\t\t\timage: \"https://images.unsplash.com/photo-1602146057681-08560aee8cde?q=80&w=640&auto=format&fit=crop\",\n\t\t\tcredit: \"Cherry Laithang on Unsplash\",\n\t\t},\n\t];\n</script>\n\n<div class=\"flex w-full max-w-xl flex-col gap-6\">\n\t<Item.Group class=\"grid grid-cols-3 gap-4\">\n\t\t{#each models as model (model.name)}\n\t\t\t<Item.Root variant=\"outline\">\n\t\t\t\t<Item.Header>\n\t\t\t\t\t<img\n\t\t\t\t\t\tsrc={model.image}\n\t\t\t\t\t\talt={model.name}\n\t\t\t\t\t\twidth=\"128\"\n\t\t\t\t\t\theight=\"128\"\n\t\t\t\t\t\tclass=\"aspect-square w-full rounded-sm object-cover\"\n\t\t\t\t\t/>\n\t\t\t\t</Item.Header>\n\t\t\t\t<Item.Content>\n\t\t\t\t\t<Item.Title>{model.name}</Item.Title>\n\t\t\t\t\t<Item.Description>{model.description}</Item.Description>\n\t\t\t\t</Item.Content>\n\t\t\t</Item.Root>\n\t\t{/each}\n\t</Item.Group>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/item-icon-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Item from \"$lib/registry/ui/item/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport ShieldAlertIcon from \"@lucide/svelte/icons/shield-alert\";\n</script>\n\n<div class=\"flex w-full max-w-lg flex-col gap-6\">\n\t<Item.Root variant=\"outline\">\n\t\t<Item.Media variant=\"icon\">\n\t\t\t<ShieldAlertIcon />\n\t\t</Item.Media>\n\t\t<Item.Content>\n\t\t\t<Item.Title>Security Alert</Item.Title>\n\t\t\t<Item.Description>New login detected from unknown device.</Item.Description>\n\t\t</Item.Content>\n\t\t<Item.Actions>\n\t\t\t<Button size=\"sm\" variant=\"outline\">Review</Button>\n\t\t</Item.Actions>\n\t</Item.Root>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/item-image-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Item from \"$lib/registry/ui/item/index.js\";\n\n\tconst music = [\n\t\t{\n\t\t\ttitle: \"Midnight City Lights\",\n\t\t\tartist: \"Neon Dreams\",\n\t\t\talbum: \"Electric Nights\",\n\t\t\tduration: \"3:45\",\n\t\t},\n\t\t{\n\t\t\ttitle: \"Coffee Shop Conversations\",\n\t\t\tartist: \"The Morning Brew\",\n\t\t\talbum: \"Urban Stories\",\n\t\t\tduration: \"4:05\",\n\t\t},\n\t\t{\n\t\t\ttitle: \"Digital Rain\",\n\t\t\tartist: \"Cyber Symphony\",\n\t\t\talbum: \"Binary Beats\",\n\t\t\tduration: \"3:30\",\n\t\t},\n\t];\n</script>\n\n<div class=\"flex w-full max-w-md flex-col gap-6\">\n\t<div class=\"flex w-full max-w-md flex-col gap-4\">\n\t\t{#each music as song (song)}\n\t\t\t<Item.Root variant=\"outline\">\n\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t<a href=\"#/\" {...props}>\n\t\t\t\t\t\t<Item.Media variant=\"image\">\n\t\t\t\t\t\t\t<img\n\t\t\t\t\t\t\t\tsrc={`https://avatar.vercel.sh/${song.title}`}\n\t\t\t\t\t\t\t\talt={song.title}\n\t\t\t\t\t\t\t\twidth=\"32\"\n\t\t\t\t\t\t\t\theight=\"32\"\n\t\t\t\t\t\t\t\tclass=\"size-8 rounded object-cover grayscale\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</Item.Media>\n\t\t\t\t\t\t<Item.Content>\n\t\t\t\t\t\t\t<Item.Title class=\"line-clamp-1\">\n\t\t\t\t\t\t\t\t{song.title} -\n\t\t\t\t\t\t\t\t<span class=\"text-muted-foreground\">{song.album}</span>\n\t\t\t\t\t\t\t</Item.Title>\n\t\t\t\t\t\t\t<Item.Description>{song.artist}</Item.Description>\n\t\t\t\t\t\t</Item.Content>\n\t\t\t\t\t\t<Item.Content class=\"flex-none text-center\">\n\t\t\t\t\t\t\t<Item.Description>{song.duration}</Item.Description>\n\t\t\t\t\t\t</Item.Content>\n\t\t\t\t\t</a>\n\t\t\t\t{/snippet}\n\t\t\t</Item.Root>\n\t\t{/each}\n\t</div>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/item-link-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Item from \"$lib/registry/ui/item/index.js\";\n\timport ChevronRightIcon from \"@lucide/svelte/icons/chevron-right\";\n\timport ExternalLinkIcon from \"@lucide/svelte/icons/external-link\";\n</script>\n\n<div class=\"flex w-full max-w-md flex-col gap-4\">\n\t<Item.Root>\n\t\t{#snippet child({ props })}\n\t\t\t<a href=\"#/\" {...props}>\n\t\t\t\t<Item.Content>\n\t\t\t\t\t<Item.Title>Visit our documentation</Item.Title>\n\t\t\t\t\t<Item.Description>\n\t\t\t\t\t\tLearn how to get started with our components.\n\t\t\t\t\t</Item.Description>\n\t\t\t\t</Item.Content>\n\t\t\t\t<Item.Actions>\n\t\t\t\t\t<ChevronRightIcon class=\"size-4\" />\n\t\t\t\t</Item.Actions>\n\t\t\t</a>\n\t\t{/snippet}\n\t</Item.Root>\n\t<Item.Root variant=\"outline\">\n\t\t{#snippet child({ props })}\n\t\t\t<a href=\"#/\" target=\"_blank\" rel=\"noopener noreferrer\" {...props}>\n\t\t\t\t<Item.Content>\n\t\t\t\t\t<Item.Title>External resource</Item.Title>\n\t\t\t\t\t<Item.Description>\n\t\t\t\t\t\tOpens in a new tab with security attributes.\n\t\t\t\t\t</Item.Description>\n\t\t\t\t</Item.Content>\n\t\t\t\t<Item.Actions>\n\t\t\t\t\t<ExternalLinkIcon class=\"size-4\" />\n\t\t\t\t</Item.Actions>\n\t\t\t</a>\n\t\t{/snippet}\n\t</Item.Root>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/item-size-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Item from \"$lib/registry/ui/item/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport BadgeCheckIcon from \"@lucide/svelte/icons/badge-check\";\n\timport ChevronRightIcon from \"@lucide/svelte/icons/chevron-right\";\n</script>\n\n<div class=\"flex w-full max-w-md flex-col gap-6\">\n\t<Item.Root variant=\"outline\">\n\t\t<Item.Content>\n\t\t\t<Item.Title>Basic Item</Item.Title>\n\t\t\t<Item.Description>A simple item with title and description.</Item.Description>\n\t\t</Item.Content>\n\t\t<Item.Actions>\n\t\t\t<Button variant=\"outline\" size=\"sm\">Action</Button>\n\t\t</Item.Actions>\n\t</Item.Root>\n\t<Item.Root variant=\"outline\" size=\"sm\">\n\t\t{#snippet child({ props })}\n\t\t\t<a href=\"#/\" {...props}>\n\t\t\t\t<Item.Media>\n\t\t\t\t\t<BadgeCheckIcon class=\"size-5\" />\n\t\t\t\t</Item.Media>\n\t\t\t\t<Item.Content>\n\t\t\t\t\t<Item.Title>Your profile has been verified.</Item.Title>\n\t\t\t\t</Item.Content>\n\t\t\t\t<Item.Actions>\n\t\t\t\t\t<ChevronRightIcon class=\"size-4\" />\n\t\t\t\t</Item.Actions>\n\t\t\t</a>\n\t\t{/snippet}\n\t</Item.Root>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/item-variants-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Item from \"$lib/registry/ui/item/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n</script>\n\n<div class=\"flex flex-col gap-6\">\n\t<Item.Root>\n\t\t<Item.Content>\n\t\t\t<Item.Title>Default Variant</Item.Title>\n\t\t\t<Item.Description>\n\t\t\t\tStandard styling with subtle background and borders.\n\t\t\t</Item.Description>\n\t\t</Item.Content>\n\t\t<Item.Actions>\n\t\t\t<Button variant=\"outline\" size=\"sm\">Open</Button>\n\t\t</Item.Actions>\n\t</Item.Root>\n\t<Item.Root variant=\"outline\">\n\t\t<Item.Content>\n\t\t\t<Item.Title>Outline Variant</Item.Title>\n\t\t\t<Item.Description>\n\t\t\t\tOutlined style with clear borders and transparent background.\n\t\t\t</Item.Description>\n\t\t</Item.Content>\n\t\t<Item.Actions>\n\t\t\t<Button variant=\"outline\" size=\"sm\">Open</Button>\n\t\t</Item.Actions>\n\t</Item.Root>\n\t<Item.Root variant=\"muted\">\n\t\t<Item.Content>\n\t\t\t<Item.Title>Muted Variant</Item.Title>\n\t\t\t<Item.Description>\n\t\t\t\tSubdued appearance with muted colors for secondary content.\n\t\t\t</Item.Description>\n\t\t</Item.Content>\n\t\t<Item.Actions>\n\t\t\t<Button variant=\"outline\" size=\"sm\">Open</Button>\n\t\t</Item.Actions>\n\t</Item.Root>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/kbd-button-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Kbd from \"$lib/registry/ui/kbd/index.js\";\n</script>\n\n<div class=\"flex flex-wrap items-center gap-4\">\n\t<Button variant=\"outline\" size=\"sm\" class=\"pe-2\">\n\t\tAccept <Kbd.Root>⏎</Kbd.Root>\n\t</Button>\n\t<Button variant=\"outline\" size=\"sm\" class=\"pe-2\">\n\t\tCancel <Kbd.Root>Esc</Kbd.Root>\n\t</Button>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/kbd-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Kbd from \"$lib/registry/ui/kbd/index.js\";\n</script>\n\n<div class=\"flex flex-col items-center gap-4\">\n\t<Kbd.Group>\n\t\t<Kbd.Root>⌘</Kbd.Root>\n\t\t<Kbd.Root>⇧</Kbd.Root>\n\t\t<Kbd.Root>⌥</Kbd.Root>\n\t\t<Kbd.Root>⌃</Kbd.Root>\n\t</Kbd.Group>\n\t<Kbd.Group>\n\t\t<Kbd.Root>Ctrl</Kbd.Root>\n\t\t<span>+</span>\n\t\t<Kbd.Root>B</Kbd.Root>\n\t</Kbd.Group>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/kbd-group-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Kbd from \"$lib/registry/ui/kbd/index.js\";\n</script>\n\n<div class=\"flex flex-col items-center gap-4\">\n\t<p class=\"text-muted-foreground text-sm\">\n\t\tUse\n\t\t<Kbd.Group>\n\t\t\t<Kbd.Root>Ctrl + B</Kbd.Root>\n\t\t\t<Kbd.Root>Ctrl + K</Kbd.Root>\n\t\t</Kbd.Group>\n\t\tto open the command palette\n\t</p>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/kbd-input-group-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Kbd from \"$lib/registry/ui/kbd/index.js\";\n\timport * as InputGroup from \"$lib/registry/ui/input-group/index.js\";\n\timport SearchIcon from \"@lucide/svelte/icons/search\";\n</script>\n\n<div class=\"flex w-full max-w-xs flex-col gap-6\">\n\t<InputGroup.Root>\n\t\t<InputGroup.Input placeholder=\"Search...\" />\n\t\t<InputGroup.Addon>\n\t\t\t<SearchIcon />\n\t\t</InputGroup.Addon>\n\t\t<InputGroup.Addon align=\"inline-end\">\n\t\t\t<Kbd.Root>⌘</Kbd.Root>\n\t\t\t<Kbd.Root>K</Kbd.Root>\n\t\t</InputGroup.Addon>\n\t</InputGroup.Root>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/kbd-tooltip-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport * as ButtonGroup from \"$lib/registry/ui/button-group/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Kbd from \"$lib/registry/ui/kbd/index.js\";\n\timport * as Tooltip from \"$lib/registry/ui/tooltip/index.js\";\n</script>\n\n<div class=\"flex flex-wrap gap-4\">\n\t<ButtonGroup.Root>\n\t\t<Tooltip.Root>\n\t\t\t<Tooltip.Trigger>\n\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t<Button size=\"sm\" variant=\"outline\" {...props}>Save</Button>\n\t\t\t\t{/snippet}\n\t\t\t</Tooltip.Trigger>\n\t\t\t<Tooltip.Content>\n\t\t\t\t<div class=\"flex items-center gap-2\">\n\t\t\t\t\tSave Changes <Kbd.Root>S</Kbd.Root>\n\t\t\t\t</div>\n\t\t\t</Tooltip.Content>\n\t\t</Tooltip.Root>\n\t\t<Tooltip.Root>\n\t\t\t<Tooltip.Trigger>\n\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t<Button size=\"sm\" variant=\"outline\" {...props}>Print</Button>\n\t\t\t\t{/snippet}\n\t\t\t</Tooltip.Trigger>\n\t\t\t<Tooltip.Content>\n\t\t\t\t<div class=\"flex items-center gap-2\">\n\t\t\t\t\tPrint Document\n\t\t\t\t\t<Kbd.Group>\n\t\t\t\t\t\t<Kbd.Root>Ctrl</Kbd.Root>\n\t\t\t\t\t\t<Kbd.Root>P</Kbd.Root>\n\t\t\t\t\t</Kbd.Group>\n\t\t\t\t</div>\n\t\t\t</Tooltip.Content>\n\t\t</Tooltip.Root>\n\t</ButtonGroup.Root>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/label-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport { Checkbox } from \"$lib/registry/ui/checkbox/index.js\";\n\timport { Label } from \"$lib/registry/ui/label/index.js\";\n</script>\n\n<div>\n\t<div class=\"flex items-center space-x-2\">\n\t\t<Checkbox id=\"terms\" />\n\t\t<Label for=\"terms\">Accept terms and conditions</Label>\n\t</div>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/menubar-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Menubar from \"$lib/registry/ui/menubar/index.js\";\n\n\tlet bookmarks = $state(false);\n\tlet fullUrls = $state(true);\n\tlet profileRadioValue = $state(\"benoit\");\n</script>\n\n<Menubar.Root>\n\t<Menubar.Menu>\n\t\t<Menubar.Trigger>File</Menubar.Trigger>\n\t\t<Menubar.Content>\n\t\t\t<Menubar.Item>\n\t\t\t\tNew Tab <Menubar.Shortcut>⌘T</Menubar.Shortcut>\n\t\t\t</Menubar.Item>\n\t\t\t<Menubar.Item>\n\t\t\t\tNew Window <Menubar.Shortcut>⌘N</Menubar.Shortcut>\n\t\t\t</Menubar.Item>\n\t\t\t<Menubar.Item>New Incognito Window</Menubar.Item>\n\t\t\t<Menubar.Separator />\n\t\t\t<Menubar.Sub>\n\t\t\t\t<Menubar.SubTrigger>Share</Menubar.SubTrigger>\n\t\t\t\t<Menubar.SubContent>\n\t\t\t\t\t<Menubar.Item>Email link</Menubar.Item>\n\t\t\t\t\t<Menubar.Item>Messages</Menubar.Item>\n\t\t\t\t\t<Menubar.Item>Notes</Menubar.Item>\n\t\t\t\t</Menubar.SubContent>\n\t\t\t</Menubar.Sub>\n\t\t\t<Menubar.Separator />\n\t\t\t<Menubar.Item>\n\t\t\t\tPrint... <Menubar.Shortcut>⌘P</Menubar.Shortcut>\n\t\t\t</Menubar.Item>\n\t\t</Menubar.Content>\n\t</Menubar.Menu>\n\t<Menubar.Menu>\n\t\t<Menubar.Trigger>Edit</Menubar.Trigger>\n\t\t<Menubar.Content>\n\t\t\t<Menubar.Item>\n\t\t\t\tUndo <Menubar.Shortcut>⌘Z</Menubar.Shortcut>\n\t\t\t</Menubar.Item>\n\t\t\t<Menubar.Item>\n\t\t\t\tRedo <Menubar.Shortcut>⇧⌘Z</Menubar.Shortcut>\n\t\t\t</Menubar.Item>\n\t\t\t<Menubar.Separator />\n\t\t\t<Menubar.Sub>\n\t\t\t\t<Menubar.SubTrigger>Find</Menubar.SubTrigger>\n\t\t\t\t<Menubar.SubContent>\n\t\t\t\t\t<Menubar.Item>Search the web</Menubar.Item>\n\t\t\t\t\t<Menubar.Separator />\n\t\t\t\t\t<Menubar.Item>Find...</Menubar.Item>\n\t\t\t\t\t<Menubar.Item>Find Next</Menubar.Item>\n\t\t\t\t\t<Menubar.Item>Find Previous</Menubar.Item>\n\t\t\t\t</Menubar.SubContent>\n\t\t\t</Menubar.Sub>\n\t\t\t<Menubar.Separator />\n\t\t\t<Menubar.Item>Cut</Menubar.Item>\n\t\t\t<Menubar.Item>Copy</Menubar.Item>\n\t\t\t<Menubar.Item>Paste</Menubar.Item>\n\t\t</Menubar.Content>\n\t</Menubar.Menu>\n\t<Menubar.Menu>\n\t\t<Menubar.Trigger>View</Menubar.Trigger>\n\t\t<Menubar.Content>\n\t\t\t<Menubar.CheckboxItem bind:checked={bookmarks}\n\t\t\t\t>Always Show Bookmarks Bar</Menubar.CheckboxItem\n\t\t\t>\n\t\t\t<Menubar.CheckboxItem bind:checked={fullUrls}>\n\t\t\t\tAlways Show Full URLs\n\t\t\t</Menubar.CheckboxItem>\n\t\t\t<Menubar.Separator />\n\t\t\t<Menubar.Item inset>\n\t\t\t\tReload <Menubar.Shortcut>⌘R</Menubar.Shortcut>\n\t\t\t</Menubar.Item>\n\t\t\t<Menubar.Item inset>\n\t\t\t\tForce Reload <Menubar.Shortcut>⇧⌘R</Menubar.Shortcut>\n\t\t\t</Menubar.Item>\n\t\t\t<Menubar.Separator />\n\t\t\t<Menubar.Item inset>Toggle Fullscreen</Menubar.Item>\n\t\t\t<Menubar.Separator />\n\t\t\t<Menubar.Item inset>Hide Sidebar</Menubar.Item>\n\t\t</Menubar.Content>\n\t</Menubar.Menu>\n\t<Menubar.Menu>\n\t\t<Menubar.Trigger>Profiles</Menubar.Trigger>\n\t\t<Menubar.Content>\n\t\t\t<Menubar.RadioGroup bind:value={profileRadioValue}>\n\t\t\t\t<Menubar.RadioItem value=\"andy\">Andy</Menubar.RadioItem>\n\t\t\t\t<Menubar.RadioItem value=\"benoit\">Benoit</Menubar.RadioItem>\n\t\t\t\t<Menubar.RadioItem value=\"Luis\">Luis</Menubar.RadioItem>\n\t\t\t</Menubar.RadioGroup>\n\t\t\t<Menubar.Separator />\n\t\t\t<Menubar.Item inset>Edit...</Menubar.Item>\n\t\t\t<Menubar.Separator />\n\t\t\t<Menubar.Item inset>Add Profile...</Menubar.Item>\n\t\t</Menubar.Content>\n\t</Menubar.Menu>\n</Menubar.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/native-select-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport * as NativeSelect from \"$lib/registry/ui/native-select/index.js\";\n</script>\n\n<NativeSelect.Root>\n\t<NativeSelect.Option value=\"\">Select status</NativeSelect.Option>\n\t<NativeSelect.Option value=\"todo\">Todo</NativeSelect.Option>\n\t<NativeSelect.Option value=\"in-progress\">In Progress</NativeSelect.Option>\n\t<NativeSelect.Option value=\"done\">Done</NativeSelect.Option>\n\t<NativeSelect.Option value=\"cancelled\">Cancelled</NativeSelect.Option>\n</NativeSelect.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/native-select-disabled.svelte",
    "content": "<script lang=\"ts\">\n\timport * as NativeSelect from \"$lib/registry/ui/native-select/index.js\";\n</script>\n\n<NativeSelect.Root disabled>\n\t<NativeSelect.Option value=\"\">Select priority</NativeSelect.Option>\n\t<NativeSelect.Option value=\"low\">Low</NativeSelect.Option>\n\t<NativeSelect.Option value=\"medium\">Medium</NativeSelect.Option>\n\t<NativeSelect.Option value=\"high\">High</NativeSelect.Option>\n\t<NativeSelect.Option value=\"critical\">Critical</NativeSelect.Option>\n</NativeSelect.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/native-select-groups.svelte",
    "content": "<script lang=\"ts\">\n\timport * as NativeSelect from \"$lib/registry/ui/native-select/index.js\";\n</script>\n\n<NativeSelect.Root>\n\t<NativeSelect.Option value=\"\">Select department</NativeSelect.Option>\n\t<NativeSelect.OptGroup label=\"Engineering\">\n\t\t<NativeSelect.Option value=\"frontend\">Frontend</NativeSelect.Option>\n\t\t<NativeSelect.Option value=\"backend\">Backend</NativeSelect.Option>\n\t\t<NativeSelect.Option value=\"devops\">DevOps</NativeSelect.Option>\n\t</NativeSelect.OptGroup>\n\t<NativeSelect.OptGroup label=\"Sales\">\n\t\t<NativeSelect.Option value=\"sales-rep\">Sales Rep</NativeSelect.Option>\n\t\t<NativeSelect.Option value=\"account-manager\">Account Manager</NativeSelect.Option>\n\t\t<NativeSelect.Option value=\"sales-director\">Sales Director</NativeSelect.Option>\n\t</NativeSelect.OptGroup>\n\t<NativeSelect.OptGroup label=\"Operations\">\n\t\t<NativeSelect.Option value=\"support\">Customer Support</NativeSelect.Option>\n\t\t<NativeSelect.Option value=\"product-manager\">Product Manager</NativeSelect.Option>\n\t\t<NativeSelect.Option value=\"ops-manager\">Operations Manager</NativeSelect.Option>\n\t</NativeSelect.OptGroup>\n</NativeSelect.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/native-select-invalid.svelte",
    "content": "<script lang=\"ts\">\n\timport * as NativeSelect from \"$lib/registry/ui/native-select/index.js\";\n</script>\n\n<NativeSelect.Root aria-invalid=\"true\">\n\t<NativeSelect.Option value=\"\">Select role</NativeSelect.Option>\n\t<NativeSelect.Option value=\"admin\">Admin</NativeSelect.Option>\n\t<NativeSelect.Option value=\"editor\">Editor</NativeSelect.Option>\n\t<NativeSelect.Option value=\"viewer\">Viewer</NativeSelect.Option>\n\t<NativeSelect.Option value=\"guest\">Guest</NativeSelect.Option>\n</NativeSelect.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/navigation-menu-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport * as NavigationMenu from \"$lib/registry/ui/navigation-menu/index.js\";\n\timport { cn } from \"$lib/utils.js\";\n\timport { navigationMenuTriggerStyle } from \"$lib/registry/ui/navigation-menu/navigation-menu-trigger.svelte\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\timport CircleHelpIcon from \"@lucide/svelte/icons/circle-help\";\n\timport CircleIcon from \"@lucide/svelte/icons/circle\";\n\timport CircleCheckIcon from \"@lucide/svelte/icons/circle-check\";\n\n\timport { IsMobile } from \"$lib/registry/hooks/is-mobile.svelte.js\";\n\n\tconst isMobile = new IsMobile();\n\n\tconst components: { title: string; href: string; description: string }[] = [\n\t\t{\n\t\t\ttitle: \"Alert Dialog\",\n\t\t\thref: \"/docs/components/alert-dialog\",\n\t\t\tdescription:\n\t\t\t\t\"A modal dialog that interrupts the user with important content and expects a response.\",\n\t\t},\n\t\t{\n\t\t\ttitle: \"Hover Card\",\n\t\t\thref: \"/docs/components/hover-card\",\n\t\t\tdescription: \"For sighted users to preview content available behind a link.\",\n\t\t},\n\t\t{\n\t\t\ttitle: \"Progress\",\n\t\t\thref: \"/docs/components/progress\",\n\t\t\tdescription:\n\t\t\t\t\"Displays an indicator showing the completion progress of a task, typically displayed as a progress bar.\",\n\t\t},\n\t\t{\n\t\t\ttitle: \"Scroll-area\",\n\t\t\thref: \"/docs/components/scroll-area\",\n\t\t\tdescription: \"Visually or semantically separates content.\",\n\t\t},\n\t\t{\n\t\t\ttitle: \"Tabs\",\n\t\t\thref: \"/docs/components/tabs\",\n\t\t\tdescription:\n\t\t\t\t\"A set of layered sections of content—known as tab panels—that are displayed one at a time.\",\n\t\t},\n\t\t{\n\t\t\ttitle: \"Tooltip\",\n\t\t\thref: \"/docs/components/tooltip\",\n\t\t\tdescription:\n\t\t\t\t\"A popup that displays information related to an element when the element receives keyboard focus or the mouse hovers over it.\",\n\t\t},\n\t];\n\n\ttype ListItemProps = HTMLAttributes<HTMLAnchorElement> & {\n\t\ttitle: string;\n\t\thref: string;\n\t\tcontent: string;\n\t};\n</script>\n\n{#snippet ListItem({ title, content, href, class: className, ...restProps }: ListItemProps)}\n\t<li>\n\t\t<NavigationMenu.Link>\n\t\t\t{#snippet child()}\n\t\t\t\t<a\n\t\t\t\t\t{href}\n\t\t\t\t\tclass={cn(\n\t\t\t\t\t\t\"hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground block space-y-1 rounded-md p-3 leading-none no-underline transition-colors outline-none select-none\",\n\t\t\t\t\t\tclassName\n\t\t\t\t\t)}\n\t\t\t\t\t{...restProps}\n\t\t\t\t>\n\t\t\t\t\t<div class=\"text-sm leading-none font-medium\">{title}</div>\n\t\t\t\t\t<p class=\"text-muted-foreground line-clamp-2 text-sm leading-snug\">\n\t\t\t\t\t\t{content}\n\t\t\t\t\t</p>\n\t\t\t\t</a>\n\t\t\t{/snippet}\n\t\t</NavigationMenu.Link>\n\t</li>\n{/snippet}\n\n<NavigationMenu.Root viewport={isMobile.current}>\n\t<NavigationMenu.List class=\"flex-wrap\">\n\t\t<NavigationMenu.Item>\n\t\t\t<NavigationMenu.Trigger>Home</NavigationMenu.Trigger>\n\t\t\t<NavigationMenu.Content>\n\t\t\t\t<ul class=\"grid gap-2 p-2 md:w-[400px] lg:w-[500px] lg:grid-cols-[.75fr_1fr]\">\n\t\t\t\t\t<li class=\"row-span-3\">\n\t\t\t\t\t\t<NavigationMenu.Link\n\t\t\t\t\t\t\tclass=\"from-muted/50 to-muted flex h-full w-full flex-col justify-end rounded-md bg-linear-to-b p-4 no-underline outline-hidden select-none focus:shadow-md md:p-6\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t<a {...props} href=\"/\">\n\t\t\t\t\t\t\t\t\t<div class=\"mt-4 mb-2 text-lg font-medium\">shadcn-svelte</div>\n\t\t\t\t\t\t\t\t\t<p class=\"text-muted-foreground text-sm leading-tight\">\n\t\t\t\t\t\t\t\t\t\tBeautifully designed components built with Tailwind CSS.\n\t\t\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t</NavigationMenu.Link>\n\t\t\t\t\t</li>\n\t\t\t\t\t{@render ListItem({\n\t\t\t\t\t\thref: \"/docs\",\n\t\t\t\t\t\ttitle: \"Introduction\",\n\t\t\t\t\t\tcontent: \"Re-usable components built using Bits UI and Tailwind CSS.\",\n\t\t\t\t\t})}\n\t\t\t\t\t{@render ListItem({\n\t\t\t\t\t\thref: \"/docs/installation\",\n\t\t\t\t\t\ttitle: \"Installation\",\n\t\t\t\t\t\tcontent: \"How to install dependencies and structure your app.\",\n\t\t\t\t\t})}\n\t\t\t\t\t{@render ListItem({\n\t\t\t\t\t\thref: \"/docs/components/typography\",\n\t\t\t\t\t\ttitle: \"Typography\",\n\t\t\t\t\t\tcontent: \"Styles for headings, paragraphs, lists...etc\",\n\t\t\t\t\t})}\n\t\t\t\t</ul>\n\t\t\t</NavigationMenu.Content>\n\t\t</NavigationMenu.Item>\n\t\t<NavigationMenu.Item>\n\t\t\t<NavigationMenu.Trigger>Components</NavigationMenu.Trigger>\n\t\t\t<NavigationMenu.Content>\n\t\t\t\t<ul\n\t\t\t\t\tclass=\"grid w-[300px] gap-2 p-2 sm:w-[400px] md:w-[500px] md:grid-cols-2 lg:w-[600px]\"\n\t\t\t\t>\n\t\t\t\t\t{#each components as component, i (i)}\n\t\t\t\t\t\t{@render ListItem({\n\t\t\t\t\t\t\thref: component.href,\n\t\t\t\t\t\t\ttitle: component.title,\n\t\t\t\t\t\t\tcontent: component.description,\n\t\t\t\t\t\t})}\n\t\t\t\t\t{/each}\n\t\t\t\t</ul>\n\t\t\t</NavigationMenu.Content>\n\t\t</NavigationMenu.Item>\n\n\t\t<NavigationMenu.Item>\n\t\t\t<NavigationMenu.Link>\n\t\t\t\t{#snippet child()}\n\t\t\t\t\t<a href=\"/docs\" class={navigationMenuTriggerStyle()}>Docs</a>\n\t\t\t\t{/snippet}\n\t\t\t</NavigationMenu.Link>\n\t\t</NavigationMenu.Item>\n\t\t<NavigationMenu.Item class=\"hidden md:block\">\n\t\t\t<NavigationMenu.Trigger>List</NavigationMenu.Trigger>\n\t\t\t<NavigationMenu.Content>\n\t\t\t\t<ul class=\"grid w-[300px] gap-4 p-2\">\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<NavigationMenu.Link href=\"##\">\n\t\t\t\t\t\t\t<div class=\"font-medium\">Components</div>\n\t\t\t\t\t\t\t<div class=\"text-muted-foreground\">\n\t\t\t\t\t\t\t\tBrowse all components in the library.\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</NavigationMenu.Link>\n\t\t\t\t\t\t<NavigationMenu.Link href=\"##\">\n\t\t\t\t\t\t\t<div class=\"font-medium\">Documentation</div>\n\t\t\t\t\t\t\t<div class=\"text-muted-foreground\">Learn how to use the library.</div>\n\t\t\t\t\t\t</NavigationMenu.Link>\n\t\t\t\t\t\t<NavigationMenu.Link href=\"##\">\n\t\t\t\t\t\t\t<div class=\"font-medium\">Blog</div>\n\t\t\t\t\t\t\t<div class=\"text-muted-foreground\">Read our latest blog posts.</div>\n\t\t\t\t\t\t</NavigationMenu.Link>\n\t\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</NavigationMenu.Content>\n\t\t</NavigationMenu.Item>\n\t\t<NavigationMenu.Item class=\"hidden md:block\">\n\t\t\t<NavigationMenu.Trigger>Simple</NavigationMenu.Trigger>\n\t\t\t<NavigationMenu.Content>\n\t\t\t\t<ul class=\"grid w-[200px] gap-4 p-2\">\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<NavigationMenu.Link href=\"##\">Components</NavigationMenu.Link>\n\t\t\t\t\t\t<NavigationMenu.Link href=\"##\">Documentation</NavigationMenu.Link>\n\t\t\t\t\t\t<NavigationMenu.Link href=\"##\">Blocks</NavigationMenu.Link>\n\t\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</NavigationMenu.Content>\n\t\t</NavigationMenu.Item>\n\t\t<NavigationMenu.Item class=\"hidden md:block\">\n\t\t\t<NavigationMenu.Trigger>With Icon</NavigationMenu.Trigger>\n\n\t\t\t<NavigationMenu.Content>\n\t\t\t\t<ul class=\"grid w-[200px] gap-4 p-2\">\n\t\t\t\t\t<li>\n\t\t\t\t\t\t<NavigationMenu.Link href=\"##\" class=\"flex-row items-center gap-2\">\n\t\t\t\t\t\t\t<CircleHelpIcon />\n\t\t\t\t\t\t\tBacklog\n\t\t\t\t\t\t</NavigationMenu.Link>\n\n\t\t\t\t\t\t<NavigationMenu.Link href=\"##\" class=\"flex-row items-center gap-2\">\n\t\t\t\t\t\t\t<CircleIcon />\n\t\t\t\t\t\t\tTo Do\n\t\t\t\t\t\t</NavigationMenu.Link>\n\n\t\t\t\t\t\t<NavigationMenu.Link href=\"##\" class=\"flex-row items-center gap-2\">\n\t\t\t\t\t\t\t<CircleCheckIcon />\n\t\t\t\t\t\t\tDone\n\t\t\t\t\t\t</NavigationMenu.Link>\n\t\t\t\t\t</li>\n\t\t\t\t</ul>\n\t\t\t</NavigationMenu.Content>\n\t\t</NavigationMenu.Item>\n\t</NavigationMenu.List>\n</NavigationMenu.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/pagination-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Pagination from \"$lib/registry/ui/pagination/index.js\";\n</script>\n\n<Pagination.Root count={30} page={2}>\n\t{#snippet children({ pages, currentPage })}\n\t\t<Pagination.Content>\n\t\t\t<Pagination.Item>\n\t\t\t\t<Pagination.PrevButton />\n\t\t\t</Pagination.Item>\n\t\t\t{#each pages as page (page.key)}\n\t\t\t\t{#if page.type === \"ellipsis\"}\n\t\t\t\t\t<Pagination.Item>\n\t\t\t\t\t\t<Pagination.Ellipsis />\n\t\t\t\t\t</Pagination.Item>\n\t\t\t\t{:else}\n\t\t\t\t\t<Pagination.Item>\n\t\t\t\t\t\t<Pagination.Link {page} isActive={currentPage === page.value}>\n\t\t\t\t\t\t\t{page.value}\n\t\t\t\t\t\t</Pagination.Link>\n\t\t\t\t\t</Pagination.Item>\n\t\t\t\t{/if}\n\t\t\t{/each}\n\t\t\t<Pagination.Item>\n\t\t\t\t<Pagination.Ellipsis />\n\t\t\t</Pagination.Item>\n\t\t\t<Pagination.Item>\n\t\t\t\t<Pagination.NextButton />\n\t\t\t</Pagination.Item>\n\t\t</Pagination.Content>\n\t{/snippet}\n</Pagination.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/popover-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport { buttonVariants } from \"$lib/registry/ui/button/index.js\";\n\timport { Input } from \"$lib/registry/ui/input/index.js\";\n\timport { Label } from \"$lib/registry/ui/label/index.js\";\n\timport * as Popover from \"$lib/registry/ui/popover/index.js\";\n</script>\n\n<Popover.Root>\n\t<Popover.Trigger class={buttonVariants({ variant: \"outline\" })}>Open popover</Popover.Trigger>\n\t<Popover.Content class=\"w-80\">\n\t\t<div class=\"grid gap-4\">\n\t\t\t<div class=\"space-y-2\">\n\t\t\t\t<h4 class=\"leading-none font-medium\">Dimensions</h4>\n\t\t\t\t<p class=\"text-muted-foreground text-sm\">Set the dimensions for the layer.</p>\n\t\t\t</div>\n\t\t\t<div class=\"grid gap-2\">\n\t\t\t\t<div class=\"grid grid-cols-3 items-center gap-4\">\n\t\t\t\t\t<Label for=\"width\">Width</Label>\n\t\t\t\t\t<Input id=\"width\" value=\"100%\" class=\"col-span-2 h-8\" />\n\t\t\t\t</div>\n\t\t\t\t<div class=\"grid grid-cols-3 items-center gap-4\">\n\t\t\t\t\t<Label for=\"maxWidth\">Max. width</Label>\n\t\t\t\t\t<Input id=\"maxWidth\" value=\"300px\" class=\"col-span-2 h-8\" />\n\t\t\t\t</div>\n\t\t\t\t<div class=\"grid grid-cols-3 items-center gap-4\">\n\t\t\t\t\t<Label for=\"height\">Height</Label>\n\t\t\t\t\t<Input id=\"height\" value=\"25px\" class=\"col-span-2 h-8\" />\n\t\t\t\t</div>\n\t\t\t\t<div class=\"grid grid-cols-3 items-center gap-4\">\n\t\t\t\t\t<Label for=\"maxHeight\">Max. height</Label>\n\t\t\t\t\t<Input id=\"maxHeight\" value=\"none\" class=\"col-span-2 h-8\" />\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</Popover.Content>\n</Popover.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/progress-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport { onMount } from \"svelte\";\n\timport { Progress } from \"$lib/registry/ui/progress/index.js\";\n\n\tlet value = $state(13);\n\n\tonMount(() => {\n\t\tconst timer = setTimeout(() => (value = 66), 500);\n\t\treturn () => clearTimeout(timer);\n\t});\n</script>\n\n<Progress {value} max={100} class=\"w-[60%]\" />\n"
  },
  {
    "path": "docs/src/lib/registry/examples/radio-group-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport * as RadioGroup from \"$lib/registry/ui/radio-group/index.js\";\n\timport { Label } from \"$lib/registry/ui/label/index.js\";\n</script>\n\n<RadioGroup.Root value=\"comfortable\">\n\t<div class=\"flex items-center space-x-2\">\n\t\t<RadioGroup.Item value=\"default\" id=\"r1\" />\n\t\t<Label for=\"r1\">Default</Label>\n\t</div>\n\t<div class=\"flex items-center space-x-2\">\n\t\t<RadioGroup.Item value=\"comfortable\" id=\"r2\" />\n\t\t<Label for=\"r2\">Comfortable</Label>\n\t</div>\n\t<div class=\"flex items-center space-x-2\">\n\t\t<RadioGroup.Item value=\"compact\" id=\"r3\" />\n\t\t<Label for=\"r3\">Compact</Label>\n\t</div>\n</RadioGroup.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/radio-group-form.svelte",
    "content": "<script lang=\"ts\" module>\n\timport { z } from \"zod\";\n\n\tconst formSchema = z.object({\n\t\ttype: z.enum([\"all\", \"mentions\", \"none\"]),\n\t});\n</script>\n\n<script lang=\"ts\">\n\timport { defaults, superForm } from \"sveltekit-superforms\";\n\timport { zod4 } from \"sveltekit-superforms/adapters\";\n\timport { toast } from \"svelte-sonner\";\n\timport * as Form from \"$lib/registry/ui/form/index.js\";\n\timport * as RadioGroup from \"$lib/registry/ui/radio-group/index.js\";\n\n\tconst form = superForm(defaults(zod4(formSchema)), {\n\t\tvalidators: zod4(formSchema),\n\t\tSPA: true,\n\t\tonUpdate: ({ form: f }) => {\n\t\t\tif (f.valid) {\n\t\t\t\ttoast.success(`You submitted ${JSON.stringify(f.data, null, 2)}`);\n\t\t\t} else {\n\t\t\t\ttoast.error(\"Please fix the errors in the form.\");\n\t\t\t}\n\t\t},\n\t});\n\n\tconst { form: formData, enhance } = form;\n</script>\n\n<form method=\"POST\" class=\"w-2/3 space-y-6\" use:enhance>\n\t<Form.Fieldset {form} name=\"type\" class=\"space-y-3\">\n\t\t<Form.Legend>Notify me about...</Form.Legend>\n\t\t<RadioGroup.Root bind:value={$formData.type} class=\"flex flex-col space-y-1\" name=\"type\">\n\t\t\t<div class=\"flex items-center space-y-0 space-x-3\">\n\t\t\t\t<Form.Control>\n\t\t\t\t\t{#snippet children({ props })}\n\t\t\t\t\t\t<RadioGroup.Item value=\"all\" {...props} />\n\t\t\t\t\t\t<Form.Label class=\"font-normal\">All new messages</Form.Label>\n\t\t\t\t\t{/snippet}\n\t\t\t\t</Form.Control>\n\t\t\t</div>\n\t\t\t<div class=\"flex items-center space-y-0 space-x-3\">\n\t\t\t\t<Form.Control>\n\t\t\t\t\t{#snippet children({ props })}\n\t\t\t\t\t\t<RadioGroup.Item value=\"mentions\" {...props} />\n\t\t\t\t\t\t<Form.Label class=\"font-normal\">Direction messages and mentions</Form.Label>\n\t\t\t\t\t{/snippet}\n\t\t\t\t</Form.Control>\n\t\t\t</div>\n\t\t\t<div class=\"flex items-center space-y-0 space-x-3\">\n\t\t\t\t<Form.Control>\n\t\t\t\t\t{#snippet children({ props })}\n\t\t\t\t\t\t<RadioGroup.Item value=\"none\" {...props} />\n\t\t\t\t\t\t<Form.Label class=\"font-normal\">Nothing</Form.Label>\n\t\t\t\t\t{/snippet}\n\t\t\t\t</Form.Control>\n\t\t\t</div>\n\t\t</RadioGroup.Root>\n\t\t<Form.FieldErrors />\n\t</Form.Fieldset>\n\t<Form.Button>Submit</Form.Button>\n</form>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/range-calendar-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport { getLocalTimeZone, today } from \"@internationalized/date\";\n\timport { RangeCalendar } from \"$lib/registry/ui/range-calendar/index.js\";\n\n\tconst start = today(getLocalTimeZone());\n\tconst end = start.add({ days: 7 });\n\n\tlet value = $state({\n\t\tstart,\n\t\tend,\n\t});\n</script>\n\n<RangeCalendar bind:value class=\"rounded-md border\" />\n"
  },
  {
    "path": "docs/src/lib/registry/examples/resizable-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Resizable from \"$lib/registry/ui/resizable/index.js\";\n</script>\n\n<Resizable.PaneGroup direction=\"horizontal\" class=\"max-w-md rounded-lg border\">\n\t<Resizable.Pane defaultSize={50}>\n\t\t<div class=\"flex h-[200px] items-center justify-center p-6\">\n\t\t\t<span class=\"font-semibold\">One</span>\n\t\t</div>\n\t</Resizable.Pane>\n\t<Resizable.Handle />\n\t<Resizable.Pane defaultSize={50}>\n\t\t<Resizable.PaneGroup direction=\"vertical\">\n\t\t\t<Resizable.Pane defaultSize={25}>\n\t\t\t\t<div class=\"flex h-full items-center justify-center p-6\">\n\t\t\t\t\t<span class=\"font-semibold\">Two</span>\n\t\t\t\t</div>\n\t\t\t</Resizable.Pane>\n\t\t\t<Resizable.Handle />\n\t\t\t<Resizable.Pane defaultSize={75}>\n\t\t\t\t<div class=\"flex h-full items-center justify-center p-6\">\n\t\t\t\t\t<span class=\"font-semibold\">Three</span>\n\t\t\t\t</div>\n\t\t\t</Resizable.Pane>\n\t\t</Resizable.PaneGroup>\n\t</Resizable.Pane>\n</Resizable.PaneGroup>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/resizable-handle.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Resizable from \"$lib/registry/ui/resizable/index.js\";\n</script>\n\n<Resizable.PaneGroup direction=\"horizontal\" class=\"min-h-[200px] max-w-md rounded-lg border\">\n\t<Resizable.Pane defaultSize={25}>\n\t\t<div class=\"flex h-full items-center justify-center p-6\">\n\t\t\t<span class=\"font-semibold\">Sidebar</span>\n\t\t</div>\n\t</Resizable.Pane>\n\t<Resizable.Handle withHandle />\n\t<Resizable.Pane defaultSize={75}>\n\t\t<div class=\"flex h-full items-center justify-center p-6\">\n\t\t\t<span class=\"font-semibold\">Content</span>\n\t\t</div>\n\t</Resizable.Pane>\n</Resizable.PaneGroup>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/resizable-vertical.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Resizable from \"$lib/registry/ui/resizable/index.js\";\n</script>\n\n<Resizable.PaneGroup direction=\"vertical\" class=\"min-h-[200px] max-w-md rounded-lg border\">\n\t<Resizable.Pane defaultSize={25}>\n\t\t<div class=\"flex h-full items-center justify-center p-6\">\n\t\t\t<span class=\"font-semibold\">Header</span>\n\t\t</div>\n\t</Resizable.Pane>\n\t<Resizable.Handle />\n\t<Resizable.Pane defaultSize={75}>\n\t\t<div class=\"flex h-full items-center justify-center p-6\">\n\t\t\t<span class=\"font-semibold\">Content</span>\n\t\t</div>\n\t</Resizable.Pane>\n</Resizable.PaneGroup>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/scroll-area-both.svelte",
    "content": "<script lang=\"ts\">\n\timport { ScrollArea } from \"$lib/registry/ui/scroll-area/index.js\";\n</script>\n\n<ScrollArea class=\"h-[200px] w-[350px] rounded-md border p-4\" orientation=\"both\">\n\t<div class=\"w-[400px]\">\n\t\tJokester began sneaking into the castle in the middle of the night and leaving jokes all\n\t\tover the place: under the king's pillow, in his soup, even in the royal toilet. The king was\n\t\tfurious, but he couldn't seem to stop Jokester. And then, one day, the people of the kingdom\n\t\tdiscovered that the jokes left by Jokester were so funny that they couldn't help but laugh.\n\t\tAnd once they started laughing, they couldn't stop.\n\t</div>\n</ScrollArea>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/scroll-area-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport { ScrollArea } from \"$lib/registry/ui/scroll-area/index.js\";\n\timport { Separator } from \"$lib/registry/ui/separator/index.js\";\n\n\tconst tags = Array.from({ length: 50 }).map((_, i, a) => `v1.2.0-beta.${a.length - i}`);\n</script>\n\n<ScrollArea class=\"h-72 w-48 rounded-md border\">\n\t<div class=\"p-4\">\n\t\t<h4 class=\"mb-4 text-sm leading-none font-medium\">Tags</h4>\n\t\t{#each tags as tag (tag)}\n\t\t\t<div class=\"text-sm\">\n\t\t\t\t{tag}\n\t\t\t</div>\n\t\t\t<Separator class=\"my-2\" />\n\t\t{/each}\n\t</div>\n</ScrollArea>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/scroll-area-horizontal.svelte",
    "content": "<script lang=\"ts\">\n\timport { ScrollArea } from \"$lib/registry/ui/scroll-area/index.js\";\n\n\ttype Artwork = {\n\t\tartist: string;\n\t\tart: string;\n\t};\n\n\tconst works: Artwork[] = [\n\t\t{\n\t\t\tartist: \"Ornella Binni\",\n\t\t\tart: \"https://images.unsplash.com/photo-1465869185982-5a1a7522cbcb?auto=format&fit=crop&w=300&q=80\",\n\t\t},\n\t\t{\n\t\t\tartist: \"Tom Byrom\",\n\t\t\tart: \"https://images.unsplash.com/photo-1548516173-3cabfa4607e9?auto=format&fit=crop&w=300&q=80\",\n\t\t},\n\t\t{\n\t\t\tartist: \"Vladimir Malyavko\",\n\t\t\tart: \"https://images.unsplash.com/photo-1494337480532-3725c85fd2ab?auto=format&fit=crop&w=300&q=80\",\n\t\t},\n\t];\n</script>\n\n<ScrollArea class=\"w-96 rounded-md border whitespace-nowrap\" orientation=\"horizontal\">\n\t<div class=\"flex w-max space-x-4 p-4\">\n\t\t{#each works as artwork (artwork.artist)}\n\t\t\t<figure class=\"shrink-0\">\n\t\t\t\t<div class=\"overflow-hidden rounded-md\">\n\t\t\t\t\t<img\n\t\t\t\t\t\tsrc={artwork.art}\n\t\t\t\t\t\talt=\"Photo by {artwork.artist}\"\n\t\t\t\t\t\tclass=\"aspect-[3/4] h-fit w-fit object-cover\"\n\t\t\t\t\t\twidth={300}\n\t\t\t\t\t\theight={400}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t\t<figcaption class=\"text-muted-foreground pt-2 text-xs\">\n\t\t\t\t\tPhoto by\n\t\t\t\t\t<span class=\"text-foreground font-semibold\">\n\t\t\t\t\t\t{artwork.artist}\n\t\t\t\t\t</span>\n\t\t\t\t</figcaption>\n\t\t\t</figure>\n\t\t{/each}\n\t</div>\n</ScrollArea>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/select-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Select from \"$lib/registry/ui/select/index.js\";\n\n\tconst fruits = [\n\t\t{ value: \"apple\", label: \"Apple\" },\n\t\t{ value: \"banana\", label: \"Banana\" },\n\t\t{ value: \"blueberry\", label: \"Blueberry\" },\n\t\t{ value: \"grapes\", label: \"Grapes\" },\n\t\t{ value: \"pineapple\", label: \"Pineapple\" },\n\t];\n\n\tlet value = $state(\"\");\n\n\tconst triggerContent = $derived(\n\t\tfruits.find((f) => f.value === value)?.label ?? \"Select a fruit\"\n\t);\n</script>\n\n<Select.Root type=\"single\" name=\"favoriteFruit\" bind:value>\n\t<Select.Trigger class=\"w-[180px]\">\n\t\t{triggerContent}\n\t</Select.Trigger>\n\t<Select.Content>\n\t\t<Select.Group>\n\t\t\t<Select.Label>Fruits</Select.Label>\n\t\t\t{#each fruits as fruit (fruit.value)}\n\t\t\t\t<Select.Item\n\t\t\t\t\tvalue={fruit.value}\n\t\t\t\t\tlabel={fruit.label}\n\t\t\t\t\tdisabled={fruit.value === \"grapes\"}\n\t\t\t\t>\n\t\t\t\t\t{fruit.label}\n\t\t\t\t</Select.Item>\n\t\t\t{/each}\n\t\t</Select.Group>\n\t</Select.Content>\n</Select.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/select-form.svelte",
    "content": "<script lang=\"ts\" module>\n\timport { z } from \"zod\";\n\n\tconst formSchema = z.object({\n\t\temail: z.email({ message: \"Please select an email to display\" }),\n\t});\n</script>\n\n<script lang=\"ts\">\n\timport { defaults, superForm } from \"sveltekit-superforms\";\n\timport { zod4 } from \"sveltekit-superforms/adapters\";\n\timport { toast } from \"svelte-sonner\";\n\timport * as Form from \"$lib/registry/ui/form/index.js\";\n\timport * as Select from \"$lib/registry/ui/select/index.js\";\n\n\tconst form = superForm(defaults(zod4(formSchema)), {\n\t\tvalidators: zod4(formSchema),\n\t\tSPA: true,\n\t\tonUpdate: ({ form: f }) => {\n\t\t\tif (f.valid) {\n\t\t\t\ttoast.success(`You submitted ${JSON.stringify(f.data, null, 2)}`);\n\t\t\t} else {\n\t\t\t\ttoast.error(\"Please fix the errors in the form.\");\n\t\t\t}\n\t\t},\n\t});\n\n\tconst { form: formData, enhance } = form;\n</script>\n\n<form method=\"POST\" class=\"w-2/3 space-y-6\" use:enhance>\n\t<Form.Field {form} name=\"email\">\n\t\t<Form.Control>\n\t\t\t{#snippet children({ props })}\n\t\t\t\t<Form.Label>Email</Form.Label>\n\t\t\t\t<Select.Root type=\"single\" bind:value={$formData.email} name={props.name}>\n\t\t\t\t\t<Select.Trigger {...props}>\n\t\t\t\t\t\t{$formData.email ? $formData.email : \"Select a verified email to display\"}\n\t\t\t\t\t</Select.Trigger>\n\t\t\t\t\t<Select.Content>\n\t\t\t\t\t\t<Select.Item value=\"m@example.com\" label=\"m@example.com\" />\n\t\t\t\t\t\t<Select.Item value=\"m@google.com\" label=\"m@google.com\" />\n\t\t\t\t\t\t<Select.Item value=\"m@support.com\" label=\"m@support.com\" />\n\t\t\t\t\t</Select.Content>\n\t\t\t\t</Select.Root>\n\t\t\t{/snippet}\n\t\t</Form.Control>\n\t\t<Form.Description>\n\t\t\tYou can manage email address in your <a href=\"/examples/forms\">email settings</a>.\n\t\t</Form.Description>\n\t\t<Form.FieldErrors />\n\t</Form.Field>\n\t<Form.Button>Submit</Form.Button>\n</form>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/select-scrollable.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Select from \"$lib/registry/ui/select/index.js\";\n</script>\n\n<Select.Root type=\"single\">\n\t<Select.Trigger class=\"w-[280px]\">Select a timezone</Select.Trigger>\n\t<Select.Content>\n\t\t<Select.Group>\n\t\t\t<Select.Label>North America</Select.Label>\n\t\t\t<Select.Item value=\"est\">Eastern Standard Time (EST)</Select.Item>\n\t\t\t<Select.Item value=\"cst\">Central Standard Time (CST)</Select.Item>\n\t\t\t<Select.Item value=\"mst\">Mountain Standard Time (MST)</Select.Item>\n\t\t\t<Select.Item value=\"pst\">Pacific Standard Time (PST)</Select.Item>\n\t\t\t<Select.Item value=\"akst\">Alaska Standard Time (AKST)</Select.Item>\n\t\t\t<Select.Item value=\"hst\">Hawaii Standard Time (HST)</Select.Item>\n\t\t</Select.Group>\n\t\t<Select.Group>\n\t\t\t<Select.Label>Europe & Africa</Select.Label>\n\t\t\t<Select.Item value=\"gmt\">Greenwich Mean Time (GMT)</Select.Item>\n\t\t\t<Select.Item value=\"cet\">Central European Time (CET)</Select.Item>\n\t\t\t<Select.Item value=\"eet\">Eastern European Time (EET)</Select.Item>\n\t\t\t<Select.Item value=\"west\">Western European Summer Time (WEST)</Select.Item>\n\t\t\t<Select.Item value=\"cat\">Central Africa Time (CAT)</Select.Item>\n\t\t\t<Select.Item value=\"eat\">East Africa Time (EAT)</Select.Item>\n\t\t</Select.Group>\n\t\t<Select.Group>\n\t\t\t<Select.Label>Asia</Select.Label>\n\t\t\t<Select.Item value=\"msk\">Moscow Time (MSK)</Select.Item>\n\t\t\t<Select.Item value=\"ist\">India Standard Time (IST)</Select.Item>\n\t\t\t<Select.Item value=\"cst_china\">China Standard Time (CST)</Select.Item>\n\t\t\t<Select.Item value=\"jst\">Japan Standard Time (JST)</Select.Item>\n\t\t\t<Select.Item value=\"kst\">Korea Standard Time (KST)</Select.Item>\n\t\t\t<Select.Item value=\"ist_indonesia\">Indonesia Central Standard Time (WITA)</Select.Item>\n\t\t</Select.Group>\n\t\t<Select.Group>\n\t\t\t<Select.Label>Australia & Pacific</Select.Label>\n\t\t\t<Select.Item value=\"awst\">Australian Western Standard Time (AWST)</Select.Item>\n\t\t\t<Select.Item value=\"acst\">Australian Central Standard Time (ACST)</Select.Item>\n\t\t\t<Select.Item value=\"aest\">Australian Eastern Standard Time (AEST)</Select.Item>\n\t\t\t<Select.Item value=\"nzst\">New Zealand Standard Time (NZST)</Select.Item>\n\t\t\t<Select.Item value=\"fjt\">Fiji Time (FJT)</Select.Item>\n\t\t</Select.Group>\n\t\t<Select.Group>\n\t\t\t<Select.Label>South America</Select.Label>\n\t\t\t<Select.Item value=\"art\">Argentina Time (ART)</Select.Item>\n\t\t\t<Select.Item value=\"bot\">Bolivia Time (BOT)</Select.Item>\n\t\t\t<Select.Item value=\"brt\">Brasilia Time (BRT)</Select.Item>\n\t\t\t<Select.Item value=\"clt\">Chile Standard Time (CLT)</Select.Item>\n\t\t</Select.Group>\n\t</Select.Content>\n</Select.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/separator-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport { Separator } from \"$lib/registry/ui/separator/index.js\";\n</script>\n\n<div>\n\t<div class=\"space-y-1\">\n\t\t<h4 class=\"text-sm leading-none font-medium\">Bits UI Primitives</h4>\n\t\t<p class=\"text-muted-foreground text-sm\">An open-source UI component library.</p>\n\t</div>\n\t<Separator class=\"my-4\" />\n\t<div class=\"flex h-5 items-center space-x-4 text-sm\">\n\t\t<div>Blog</div>\n\t\t<Separator orientation=\"vertical\" />\n\t\t<div>Docs</div>\n\t\t<Separator orientation=\"vertical\" />\n\t\t<div>Source</div>\n\t</div>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/sheet-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Sheet from \"$lib/registry/ui/sheet/index.js\";\n\timport { buttonVariants } from \"$lib/registry/ui/button/index.js\";\n\timport { Input } from \"$lib/registry/ui/input/index.js\";\n\timport { Label } from \"$lib/registry/ui/label/index.js\";\n</script>\n\n<Sheet.Root>\n\t<Sheet.Trigger class={buttonVariants({ variant: \"outline\" })}>Open</Sheet.Trigger>\n\t<Sheet.Content side=\"right\">\n\t\t<Sheet.Header>\n\t\t\t<Sheet.Title>Edit profile</Sheet.Title>\n\t\t\t<Sheet.Description>\n\t\t\t\tMake changes to your profile here. Click save when you're done.\n\t\t\t</Sheet.Description>\n\t\t</Sheet.Header>\n\t\t<div class=\"grid flex-1 auto-rows-min gap-6 px-4\">\n\t\t\t<div class=\"grid gap-3\">\n\t\t\t\t<Label for=\"name\" class=\"text-end\">Name</Label>\n\t\t\t\t<Input id=\"name\" value=\"Pedro Duarte\" />\n\t\t\t</div>\n\t\t\t<div class=\"grid gap-3\">\n\t\t\t\t<Label for=\"username\" class=\"text-end\">Username</Label>\n\t\t\t\t<Input id=\"username\" value=\"@peduarte\" />\n\t\t\t</div>\n\t\t</div>\n\t\t<Sheet.Footer>\n\t\t\t<Button type=\"submit\">Save changes</Button>\n\t\t\t<Sheet.Close class={buttonVariants({ variant: \"outline\" })}>Close</Sheet.Close>\n\t\t</Sheet.Footer>\n\t</Sheet.Content>\n</Sheet.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/sheet-side.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Sheet from \"$lib/registry/ui/sheet/index.js\";\n\timport { buttonVariants } from \"$lib/registry/ui/button/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\n\tconst SHEET_SIDES = [\"top\", \"right\", \"bottom\", \"left\"] as const;\n</script>\n\n<div class=\"grid grid-cols-2 gap-2\">\n\t{#each SHEET_SIDES as side, _ (side)}\n\t\t<Sheet.Root>\n\t\t\t<Sheet.Trigger>\n\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t<Button variant=\"outline\" {...props} class=\"capitalize\">\n\t\t\t\t\t\t{side}\n\t\t\t\t\t</Button>\n\t\t\t\t{/snippet}\n\t\t\t</Sheet.Trigger>\n\t\t\t<Sheet.Content {side}>\n\t\t\t\t<Sheet.Header>\n\t\t\t\t\t<Sheet.Title>Edit profile</Sheet.Title>\n\t\t\t\t\t<Sheet.Description>\n\t\t\t\t\t\tMake changes to your profile here. Click save when you're done.\n\t\t\t\t\t</Sheet.Description>\n\t\t\t\t</Sheet.Header>\n\t\t\t\t<div class=\"overflow-y-auto px-4 text-sm\">\n\t\t\t\t\t<h4 class=\"mb-4 text-lg leading-none font-medium\">Lorem Ipsum</h4>\n\t\t\t\t\t{#each { length: 10 } as _, index (index)}\n\t\t\t\t\t\t<p class=\"mb-4 leading-normal\">\n\t\t\t\t\t\t\tLorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod\n\t\t\t\t\t\t\ttempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim\n\t\t\t\t\t\t\tveniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea\n\t\t\t\t\t\t\tcommodo consequat. Duis aute irure dolor in reprehenderit in voluptate\n\t\t\t\t\t\t\tvelit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint\n\t\t\t\t\t\t\toccaecat cupidatat non proident, sunt in culpa qui officia deserunt\n\t\t\t\t\t\t\tmollit anim id est laborum.\n\t\t\t\t\t\t</p>\n\t\t\t\t\t{/each}\n\t\t\t\t</div>\n\t\t\t\t<Sheet.Footer>\n\t\t\t\t\t<Sheet.Close class={buttonVariants({ variant: \"outline\" })}>\n\t\t\t\t\t\tSave changes\n\t\t\t\t\t</Sheet.Close>\n\t\t\t\t</Sheet.Footer>\n\t\t\t</Sheet.Content>\n\t\t</Sheet.Root>\n\t{/each}\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/skeleton-card.svelte",
    "content": "<script lang=\"ts\">\n\timport { Skeleton } from \"$lib/registry/ui/skeleton/index.js\";\n</script>\n\n<div class=\"flex flex-col space-y-3\">\n\t<Skeleton class=\"h-[125px] w-[250px] rounded-xl\" />\n\t<div class=\"space-y-2\">\n\t\t<Skeleton class=\"h-4 w-[250px]\" />\n\t\t<Skeleton class=\"h-4 w-[200px]\" />\n\t</div>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/skeleton-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport { Skeleton } from \"$lib/registry/ui/skeleton/index.js\";\n</script>\n\n<div class=\"flex items-center space-x-4\">\n\t<Skeleton class=\"size-12 rounded-full\" />\n\t<div class=\"space-y-2\">\n\t\t<Skeleton class=\"h-4 w-[250px]\" />\n\t\t<Skeleton class=\"h-4 w-[200px]\" />\n\t</div>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/slider-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport { Slider } from \"$lib/registry/ui/slider/index.js\";\n\n\tlet value = $state(50);\n</script>\n\n<Slider type=\"single\" bind:value max={100} step={1} class=\"max-w-[70%]\" />\n"
  },
  {
    "path": "docs/src/lib/registry/examples/slider-multiple.svelte",
    "content": "<script lang=\"ts\">\n\timport { Slider } from \"$lib/registry/ui/slider/index.js\";\n\n\tlet value = $state([25, 75]);\n</script>\n\n<Slider type=\"multiple\" bind:value max={100} step={1} class=\"max-w-[70%]\" />\n"
  },
  {
    "path": "docs/src/lib/registry/examples/slider-vertical.svelte",
    "content": "<script lang=\"ts\">\n\timport { Slider } from \"$lib/registry/ui/slider/index.js\";\n\n\tlet value = $state(50);\n</script>\n\n<Slider type=\"single\" orientation=\"vertical\" bind:value max={100} step={1} />\n"
  },
  {
    "path": "docs/src/lib/registry/examples/sonner-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport { toast } from \"svelte-sonner\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n</script>\n\n<Button\n\tvariant=\"outline\"\n\tonclick={() =>\n\t\ttoast(\"Event has been created\", {\n\t\t\tdescription: \"Sunday, December 03, 2023 at 9:00 AM\",\n\t\t\taction: {\n\t\t\t\tlabel: \"Undo\",\n\t\t\t\tonClick: () => console.info(\"Undo\"),\n\t\t\t},\n\t\t})}\n>\n\tShow Toast\n</Button>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/sonner-types.svelte",
    "content": "<script lang=\"ts\">\n\timport { toast } from \"svelte-sonner\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n</script>\n\n<div class=\"flex flex-wrap gap-2\">\n\t<Button variant=\"outline\" onclick={() => toast(\"Event has been created\")}>Default</Button>\n\t<Button variant=\"outline\" onclick={() => toast.success(\"Event has been created\")}>\n\t\tSuccess\n\t</Button>\n\t<Button\n\t\tvariant=\"outline\"\n\t\tonclick={() => toast.info(\"Be at the area 10 minutes before the event time\")}\n\t>\n\t\tInfo\n\t</Button>\n\t<Button\n\t\tvariant=\"outline\"\n\t\tonclick={() => toast.warning(\"Event start time cannot be earlier than 8am\")}\n\t>\n\t\tWarning\n\t</Button>\n\t<Button variant=\"outline\" onclick={() => toast.error(\"Event has not been created\")}>\n\t\tError\n\t</Button>\n\t<Button\n\t\tvariant=\"outline\"\n\t\tonclick={() => {\n\t\t\ttoast.promise<{ name: string }>(\n\t\t\t\t() => new Promise((resolve) => setTimeout(() => resolve({ name: \"Event\" }), 2000)),\n\t\t\t\t{\n\t\t\t\t\tloading: \"Loading...\",\n\t\t\t\t\tsuccess: (data) => `${data.name} has been created`,\n\t\t\t\t\terror: \"Error\",\n\t\t\t\t}\n\t\t\t);\n\t\t}}\n\t>\n\t\tPromise\n\t</Button>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/spinner-badge-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport { Badge } from \"$lib/registry/ui/badge/index.js\";\n\timport { Spinner } from \"$lib/registry/ui/spinner/index.js\";\n</script>\n\n<div class=\"flex items-center gap-2\">\n\t<Badge>\n\t\t<Spinner />\n\t\tSyncing\n\t</Badge>\n\t<Badge variant=\"secondary\">\n\t\t<Spinner />\n\t\tUpdating\n\t</Badge>\n\t<Badge variant=\"outline\">\n\t\t<Spinner />\n\t\tLoading\n\t</Badge>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/spinner-button-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport { Spinner } from \"$lib/registry/ui/spinner/index.js\";\n</script>\n\n<div class=\"flex flex-col items-center gap-4\">\n\t<Button disabled size=\"sm\">\n\t\t<Spinner />\n\t\tLoading...\n\t</Button>\n\t<Button variant=\"outline\" disabled size=\"sm\">\n\t\t<Spinner />\n\t\tPlease wait\n\t</Button>\n\t<Button variant=\"secondary\" disabled size=\"sm\">\n\t\t<Spinner />\n\t\tProcessing\n\t</Button>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/spinner-color-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport { Spinner } from \"$lib/registry/ui/spinner/index.js\";\n</script>\n\n<div class=\"flex items-center gap-6\">\n\t<Spinner class=\"size-6 text-red-500\" />\n\t<Spinner class=\"size-6 text-green-500\" />\n\t<Spinner class=\"size-6 text-blue-500\" />\n\t<Spinner class=\"size-6 text-yellow-500\" />\n\t<Spinner class=\"size-6 text-purple-500\" />\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/spinner-custom-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn } from \"$lib/utils.js\";\n\timport LoaderIcon from \"@lucide/svelte/icons/loader\";\n\timport type { ComponentProps } from \"svelte\";\n\n\ttype Props = ComponentProps<typeof LoaderIcon>;\n\n\tlet { class: className, ...restProps }: Props = $props();\n</script>\n\n<LoaderIcon\n\trole=\"status\"\n\taria-label=\"Loading\"\n\tclass={cn(\"size-4 animate-spin\", className)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/spinner-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport { Spinner } from \"$lib/registry/ui/spinner/index.js\";\n\timport * as Item from \"$lib/registry/ui/item/index.js\";\n</script>\n\n<div class=\"flex w-full max-w-xs flex-col gap-4 [--radius:1rem]\">\n\t<Item.Root variant=\"muted\">\n\t\t<Item.Media>\n\t\t\t<Spinner />\n\t\t</Item.Media>\n\t\t<Item.Content>\n\t\t\t<Item.Title class=\"line-clamp-1\">Processing payment...</Item.Title>\n\t\t</Item.Content>\n\t\t<Item.Content class=\"flex-none justify-end\">\n\t\t\t<span class=\"text-sm tabular-nums\">$100.00</span>\n\t\t</Item.Content>\n\t</Item.Root>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/spinner-empty-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Empty from \"$lib/registry/ui/empty/index.js\";\n\timport { Spinner } from \"$lib/registry/ui/spinner/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n</script>\n\n<Empty.Root class=\"w-full border md:p-6\">\n\t<Empty.Header>\n\t\t<Empty.Media variant=\"icon\">\n\t\t\t<Spinner />\n\t\t</Empty.Media>\n\t\t<Empty.Title>Processing your request</Empty.Title>\n\t\t<Empty.Description>\n\t\t\tPlease wait while we process your request. Do not refresh the page.\n\t\t</Empty.Description>\n\t</Empty.Header>\n\t<Empty.Content>\n\t\t<Button variant=\"outline\" size=\"sm\">Cancel</Button>\n\t</Empty.Content>\n</Empty.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/spinner-input-group-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport * as InputGroup from \"$lib/registry/ui/input-group/index.js\";\n\timport { Spinner } from \"$lib/registry/ui/spinner/index.js\";\n\timport ArrowUpIcon from \"@lucide/svelte/icons/arrow-up\";\n</script>\n\n<div class=\"flex w-full max-w-md flex-col gap-4\">\n\t<InputGroup.Root>\n\t\t<InputGroup.Input placeholder=\"Send a message...\" disabled />\n\t\t<InputGroup.Addon align=\"inline-end\">\n\t\t\t<Spinner />\n\t\t</InputGroup.Addon>\n\t</InputGroup.Root>\n\t<InputGroup.Root>\n\t\t<InputGroup.Textarea placeholder=\"Send a message...\" disabled />\n\t\t<InputGroup.Addon align=\"block-end\">\n\t\t\t<Spinner /> Validating...\n\t\t\t<InputGroup.Button class=\"ms-auto\" variant=\"default\">\n\t\t\t\t<ArrowUpIcon />\n\t\t\t\t<span class=\"sr-only\">Send</span>\n\t\t\t</InputGroup.Button>\n\t\t</InputGroup.Addon>\n\t</InputGroup.Root>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/spinner-item-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Item from \"$lib/registry/ui/item/index.js\";\n\timport { Spinner } from \"$lib/registry/ui/spinner/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport { Progress } from \"$lib/registry/ui/progress/index.js\";\n</script>\n\n<div class=\"flex w-full max-w-md flex-col gap-4 [--radius:1rem]\">\n\t<Item.Root variant=\"outline\">\n\t\t<Item.Media variant=\"icon\">\n\t\t\t<Spinner />\n\t\t</Item.Media>\n\t\t<Item.Content>\n\t\t\t<Item.Title>Downloading...</Item.Title>\n\t\t\t<Item.Description>129 MB / 1000 MB</Item.Description>\n\t\t</Item.Content>\n\t\t<Item.Actions class=\"hidden sm:flex\">\n\t\t\t<Button variant=\"outline\" size=\"sm\">Cancel</Button>\n\t\t</Item.Actions>\n\t\t<Item.Footer>\n\t\t\t<Progress value={75} />\n\t\t</Item.Footer>\n\t</Item.Root>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/spinner-size-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport { Spinner } from \"$lib/registry/ui/spinner/index.js\";\n</script>\n\n<div class=\"flex items-center gap-6\">\n\t<Spinner class=\"size-3\" />\n\t<Spinner class=\"size-4\" />\n\t<Spinner class=\"size-6\" />\n\t<Spinner class=\"size-8\" />\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/switch-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport { Label } from \"$lib/registry/ui/label/index.js\";\n\timport { Switch } from \"$lib/registry/ui/switch/index.js\";\n</script>\n\n<div class=\"flex items-center space-x-2\">\n\t<Switch id=\"airplane-mode\" />\n\t<Label for=\"airplane-mode\">Airplane Mode</Label>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/switch-form.svelte",
    "content": "<script lang=\"ts\" module>\n\timport { z } from \"zod\";\n\tconst formSchema = z.object({\n\t\tmarketing_emails: z.boolean().default(false),\n\t\tsecurity_emails: z.boolean().default(true),\n\t});\n</script>\n\n<script lang=\"ts\">\n\timport { defaults, superForm } from \"sveltekit-superforms\";\n\timport { zod4 } from \"sveltekit-superforms/adapters\";\n\timport { toast } from \"svelte-sonner\";\n\timport * as Form from \"$lib/registry/ui/form/index.js\";\n\timport { Switch } from \"$lib/registry/ui/switch/index.js\";\n\n\tconst form = superForm(defaults(zod4(formSchema)), {\n\t\tvalidators: zod4(formSchema),\n\t\tSPA: true,\n\t\tonUpdate: ({ form: f }) => {\n\t\t\tif (f.valid) {\n\t\t\t\ttoast.success(`You submitted ${JSON.stringify(f.data, null, 2)}`);\n\t\t\t} else {\n\t\t\t\ttoast.error(\"Please fix the errors in the form.\");\n\t\t\t}\n\t\t},\n\t});\n\n\tconst { form: formData, enhance } = form;\n</script>\n\n<form method=\"POST\" class=\"w-full space-y-6\" use:enhance>\n\t<fieldset>\n\t\t<legend class=\"mb-4 text-lg font-medium\"> Email Notifications </legend>\n\t\t<div class=\"space-y-4\">\n\t\t\t<Form.Field\n\t\t\t\t{form}\n\t\t\t\tname=\"marketing_emails\"\n\t\t\t\tclass=\"flex flex-row items-center justify-between rounded-lg border p-4\"\n\t\t\t>\n\t\t\t\t<Form.Control>\n\t\t\t\t\t{#snippet children({ props })}\n\t\t\t\t\t\t<div class=\"space-y-0.5\">\n\t\t\t\t\t\t\t<Form.Label>Marketing emails</Form.Label>\n\t\t\t\t\t\t\t<Form.Description>\n\t\t\t\t\t\t\t\tReceive emails about new products, features, and more.\n\t\t\t\t\t\t\t</Form.Description>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<Switch {...props} bind:checked={$formData.marketing_emails} />\n\t\t\t\t\t{/snippet}\n\t\t\t\t</Form.Control>\n\t\t\t</Form.Field>\n\t\t\t<Form.Field\n\t\t\t\t{form}\n\t\t\t\tname=\"security_emails\"\n\t\t\t\tclass=\"flex flex-row items-center justify-between rounded-lg border p-4\"\n\t\t\t>\n\t\t\t\t<Form.Control>\n\t\t\t\t\t{#snippet children({ props })}\n\t\t\t\t\t\t<div class=\"space-y-0.5\">\n\t\t\t\t\t\t\t<Form.Label>Security emails</Form.Label>\n\t\t\t\t\t\t\t<Form.Description>\n\t\t\t\t\t\t\t\tReceive emails about your account security.\n\t\t\t\t\t\t\t</Form.Description>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<Switch\n\t\t\t\t\t\t\t{...props}\n\t\t\t\t\t\t\taria-readonly\n\t\t\t\t\t\t\tdisabled\n\t\t\t\t\t\t\tbind:checked={$formData.security_emails}\n\t\t\t\t\t\t/>\n\t\t\t\t\t{/snippet}\n\t\t\t\t</Form.Control>\n\t\t\t</Form.Field>\n\t\t</div>\n\t</fieldset>\n\t<Form.Button>Submit</Form.Button>\n</form>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/table-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Table from \"$lib/registry/ui/table/index.js\";\n\n\tconst invoices = [\n\t\t{\n\t\t\tinvoice: \"INV001\",\n\t\t\tpaymentStatus: \"Paid\",\n\t\t\ttotalAmount: \"$250.00\",\n\t\t\tpaymentMethod: \"Credit Card\",\n\t\t},\n\t\t{\n\t\t\tinvoice: \"INV002\",\n\t\t\tpaymentStatus: \"Pending\",\n\t\t\ttotalAmount: \"$150.00\",\n\t\t\tpaymentMethod: \"PayPal\",\n\t\t},\n\t\t{\n\t\t\tinvoice: \"INV003\",\n\t\t\tpaymentStatus: \"Unpaid\",\n\t\t\ttotalAmount: \"$350.00\",\n\t\t\tpaymentMethod: \"Bank Transfer\",\n\t\t},\n\t\t{\n\t\t\tinvoice: \"INV004\",\n\t\t\tpaymentStatus: \"Paid\",\n\t\t\ttotalAmount: \"$450.00\",\n\t\t\tpaymentMethod: \"Credit Card\",\n\t\t},\n\t\t{\n\t\t\tinvoice: \"INV005\",\n\t\t\tpaymentStatus: \"Paid\",\n\t\t\ttotalAmount: \"$550.00\",\n\t\t\tpaymentMethod: \"PayPal\",\n\t\t},\n\t\t{\n\t\t\tinvoice: \"INV006\",\n\t\t\tpaymentStatus: \"Pending\",\n\t\t\ttotalAmount: \"$200.00\",\n\t\t\tpaymentMethod: \"Bank Transfer\",\n\t\t},\n\t\t{\n\t\t\tinvoice: \"INV007\",\n\t\t\tpaymentStatus: \"Unpaid\",\n\t\t\ttotalAmount: \"$300.00\",\n\t\t\tpaymentMethod: \"Credit Card\",\n\t\t},\n\t];\n</script>\n\n<Table.Root>\n\t<Table.Caption>A list of your recent invoices.</Table.Caption>\n\t<Table.Header>\n\t\t<Table.Row>\n\t\t\t<Table.Head class=\"w-[100px]\">Invoice</Table.Head>\n\t\t\t<Table.Head>Status</Table.Head>\n\t\t\t<Table.Head>Method</Table.Head>\n\t\t\t<Table.Head class=\"text-end\">Amount</Table.Head>\n\t\t</Table.Row>\n\t</Table.Header>\n\t<Table.Body>\n\t\t{#each invoices as invoice (invoice)}\n\t\t\t<Table.Row>\n\t\t\t\t<Table.Cell class=\"font-medium\">{invoice.invoice}</Table.Cell>\n\t\t\t\t<Table.Cell>{invoice.paymentStatus}</Table.Cell>\n\t\t\t\t<Table.Cell>{invoice.paymentMethod}</Table.Cell>\n\t\t\t\t<Table.Cell class=\"text-end\">{invoice.totalAmount}</Table.Cell>\n\t\t\t</Table.Row>\n\t\t{/each}\n\t</Table.Body>\n\t<Table.Footer>\n\t\t<Table.Row>\n\t\t\t<Table.Cell colspan={3}>Total</Table.Cell>\n\t\t\t<Table.Cell class=\"text-end\">$2,500.00</Table.Cell>\n\t\t</Table.Row>\n\t</Table.Footer>\n</Table.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/tabs-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Tabs from \"$lib/registry/ui/tabs/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport { Input } from \"$lib/registry/ui/input/index.js\";\n\timport { Label } from \"$lib/registry/ui/label/index.js\";\n</script>\n\n<div class=\"-mb-4 flex w-full max-w-sm flex-col gap-6\">\n\t<Tabs.Root value=\"account\">\n\t\t<Tabs.List>\n\t\t\t<Tabs.Trigger value=\"account\">Account</Tabs.Trigger>\n\t\t\t<Tabs.Trigger value=\"password\">Password</Tabs.Trigger>\n\t\t</Tabs.List>\n\t\t<Tabs.Content value=\"account\">\n\t\t\t<Card.Root>\n\t\t\t\t<Card.Header>\n\t\t\t\t\t<Card.Title>Account</Card.Title>\n\t\t\t\t\t<Card.Description>\n\t\t\t\t\t\tMake changes to your account here. Click save when you&apos;re done.\n\t\t\t\t\t</Card.Description>\n\t\t\t\t</Card.Header>\n\t\t\t\t<Card.Content class=\"grid gap-6\">\n\t\t\t\t\t<div class=\"grid gap-3\">\n\t\t\t\t\t\t<Label for=\"tabs-demo-name\">Name</Label>\n\t\t\t\t\t\t<Input id=\"tabs-demo-name\" value=\"Pedro Duarte\" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"grid gap-3\">\n\t\t\t\t\t\t<Label for=\"tabs-demo-username\">Username</Label>\n\t\t\t\t\t\t<Input id=\"tabs-demo-username\" value=\"@peduarte\" />\n\t\t\t\t\t</div>\n\t\t\t\t</Card.Content>\n\t\t\t\t<Card.Footer>\n\t\t\t\t\t<Button>Save changes</Button>\n\t\t\t\t</Card.Footer>\n\t\t\t</Card.Root>\n\t\t</Tabs.Content>\n\t\t<Tabs.Content value=\"password\">\n\t\t\t<Card.Root>\n\t\t\t\t<Card.Header>\n\t\t\t\t\t<Card.Title>Password</Card.Title>\n\t\t\t\t\t<Card.Description>\n\t\t\t\t\t\tChange your password here. After saving, you&apos;ll be logged out.\n\t\t\t\t\t</Card.Description>\n\t\t\t\t</Card.Header>\n\t\t\t\t<Card.Content class=\"grid gap-6\">\n\t\t\t\t\t<div class=\"grid gap-3\">\n\t\t\t\t\t\t<Label for=\"tabs-demo-current\">Current password</Label>\n\t\t\t\t\t\t<Input id=\"tabs-demo-current\" type=\"password\" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"grid gap-3\">\n\t\t\t\t\t\t<Label for=\"tabs-demo-new\">New password</Label>\n\t\t\t\t\t\t<Input id=\"tabs-demo-new\" type=\"password\" />\n\t\t\t\t\t</div>\n\t\t\t\t</Card.Content>\n\t\t\t\t<Card.Footer>\n\t\t\t\t\t<Button>Save password</Button>\n\t\t\t\t</Card.Footer>\n\t\t\t</Card.Root>\n\t\t</Tabs.Content>\n\t</Tabs.Root>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/textarea-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport { Textarea } from \"$lib/registry/ui/textarea/index.js\";\n</script>\n\n<Textarea placeholder=\"Type your message here.\" />\n"
  },
  {
    "path": "docs/src/lib/registry/examples/textarea-disabled.svelte",
    "content": "<script lang=\"ts\">\n\timport { Textarea } from \"$lib/registry/ui/textarea/index.js\";\n</script>\n\n<Textarea disabled placeholder=\"Type your message here.\" />\n"
  },
  {
    "path": "docs/src/lib/registry/examples/textarea-form.svelte",
    "content": "<script lang=\"ts\" module>\n\timport { z } from \"zod\";\n\tconst formSchema = z.object({\n\t\tbio: z\n\t\t\t.string()\n\t\t\t.min(10, \"Bio must be at least 10 characters.\")\n\t\t\t.max(160, \"Bio must be at most 160 characters.\"),\n\t});\n</script>\n\n<script lang=\"ts\">\n\timport { defaults, superForm } from \"sveltekit-superforms\";\n\timport { zod4 } from \"sveltekit-superforms/adapters\";\n\timport { toast } from \"svelte-sonner\";\n\timport * as Form from \"$lib/registry/ui/form/index.js\";\n\timport { Textarea } from \"$lib/registry/ui/textarea/index.js\";\n\n\tconst form = superForm(defaults(zod4(formSchema)), {\n\t\tvalidators: zod4(formSchema),\n\t\tSPA: true,\n\t\tonUpdate: ({ form: f }) => {\n\t\t\tif (f.valid) {\n\t\t\t\ttoast.success(`You submitted ${JSON.stringify(f.data, null, 2)}`);\n\t\t\t} else {\n\t\t\t\ttoast.error(\"Please fix the errors in the form.\");\n\t\t\t}\n\t\t},\n\t});\n\n\tconst { form: formData, enhance } = form;\n</script>\n\n<form method=\"POST\" class=\"w-2/3 space-y-6\" use:enhance>\n\t<Form.Field {form} name=\"bio\">\n\t\t<Form.Control>\n\t\t\t{#snippet children({ props })}\n\t\t\t\t<Form.Label>Bio</Form.Label>\n\t\t\t\t<Textarea\n\t\t\t\t\t{...props}\n\t\t\t\t\tplaceholder=\"Tell us a little bit about yourself\"\n\t\t\t\t\tclass=\"resize-none\"\n\t\t\t\t\tbind:value={$formData.bio}\n\t\t\t\t/>\n\t\t\t\t<Form.Description>\n\t\t\t\t\tYou can <span>@mention</span> other users and organizations.\n\t\t\t\t</Form.Description>\n\t\t\t{/snippet}\n\t\t</Form.Control>\n\t\t<Form.FieldErrors />\n\t</Form.Field>\n\t<Form.Button>Submit</Form.Button>\n</form>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/textarea-with-button.svelte",
    "content": "<script lang=\"ts\">\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport { Textarea } from \"$lib/registry/ui/textarea/index.js\";\n</script>\n\n<div class=\"grid w-full gap-2\">\n\t<Textarea placeholder=\"Type your message here.\" />\n\t<Button>Send message</Button>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/textarea-with-label.svelte",
    "content": "<script lang=\"ts\">\n\timport { Label } from \"$lib/registry/ui/label/index.js\";\n\timport { Textarea } from \"$lib/registry/ui/textarea/index.js\";\n</script>\n\n<div class=\"grid w-full gap-1.5\">\n\t<Label for=\"message\">Your message</Label>\n\t<Textarea placeholder=\"Type your message here.\" id=\"message\" />\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/textarea-with-text.svelte",
    "content": "<script lang=\"ts\">\n\timport { Label } from \"$lib/registry/ui/label/index.js\";\n\timport { Textarea } from \"$lib/registry/ui/textarea/index.js\";\n</script>\n\n<div class=\"grid w-full gap-1.5\">\n\t<Label for=\"message-2\">Your Message</Label>\n\t<Textarea placeholder=\"Type your message here.\" id=\"message-2\" />\n\t<p class=\"text-muted-foreground text-sm\">Your message will be copied to the support team.</p>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/toggle-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport BookmarkIcon from \"@lucide/svelte/icons/bookmark\";\n\timport { Toggle } from \"$lib/registry/ui/toggle/index.js\";\n</script>\n\n<Toggle\n\taria-label=\"Toggle bookmark\"\n\tsize=\"sm\"\n\tvariant=\"outline\"\n\tclass=\"data-[state=on]:bg-transparent data-[state=on]:*:[svg]:fill-blue-500 data-[state=on]:*:[svg]:stroke-blue-500\"\n>\n\t<BookmarkIcon />\n\tBookmark\n</Toggle>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/toggle-disabled.svelte",
    "content": "<script lang=\"ts\">\n\timport UnderlineIcon from \"@lucide/svelte/icons/underline\";\n\timport { Toggle } from \"$lib/registry/ui/toggle/index.js\";\n</script>\n\n<Toggle aria-label=\"Toggle underline\" disabled>\n\t<UnderlineIcon class=\"size-4\" />\n</Toggle>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/toggle-group-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport BoldIcon from \"@lucide/svelte/icons/bold\";\n\timport ItalicIcon from \"@lucide/svelte/icons/italic\";\n\timport UnderlineIcon from \"@lucide/svelte/icons/underline\";\n\timport * as ToggleGroup from \"$lib/registry/ui/toggle-group/index.js\";\n</script>\n\n<ToggleGroup.Root variant=\"outline\" type=\"multiple\">\n\t<ToggleGroup.Item value=\"bold\" aria-label=\"Toggle bold\">\n\t\t<BoldIcon class=\"h-4 w-4\" />\n\t</ToggleGroup.Item>\n\t<ToggleGroup.Item value=\"italic\" aria-label=\"Toggle italic\">\n\t\t<ItalicIcon class=\"h-4 w-4\" />\n\t</ToggleGroup.Item>\n\t<ToggleGroup.Item value=\"strikethrough\" aria-label=\"Toggle strikethrough\">\n\t\t<UnderlineIcon class=\"h-4 w-4\" />\n\t</ToggleGroup.Item>\n</ToggleGroup.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/toggle-group-disabled.svelte",
    "content": "<script lang=\"ts\">\n\timport BoldIcon from \"@lucide/svelte/icons/bold\";\n\timport ItalicIcon from \"@lucide/svelte/icons/italic\";\n\timport UnderlineIcon from \"@lucide/svelte/icons/underline\";\n\timport * as ToggleGroup from \"$lib/registry/ui/toggle-group/index.js\";\n</script>\n\n<ToggleGroup.Root disabled type=\"single\">\n\t<ToggleGroup.Item value=\"bold\" aria-label=\"Toggle bold\">\n\t\t<BoldIcon class=\"size-4\" />\n\t</ToggleGroup.Item>\n\t<ToggleGroup.Item value=\"italic\" aria-label=\"Toggle italic\">\n\t\t<ItalicIcon class=\"size-4\" />\n\t</ToggleGroup.Item>\n\t<ToggleGroup.Item value=\"strikethrough\" aria-label=\"Toggle strikethrough\">\n\t\t<UnderlineIcon class=\"size-4\" />\n\t</ToggleGroup.Item>\n</ToggleGroup.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/toggle-group-lg.svelte",
    "content": "<script lang=\"ts\">\n\timport BoldIcon from \"@lucide/svelte/icons/bold\";\n\timport ItalicIcon from \"@lucide/svelte/icons/italic\";\n\timport UnderlineIcon from \"@lucide/svelte/icons/underline\";\n\timport * as ToggleGroup from \"$lib/registry/ui/toggle-group/index.js\";\n</script>\n\n<ToggleGroup.Root size=\"lg\" type=\"multiple\">\n\t<ToggleGroup.Item value=\"bold\" aria-label=\"Toggle bold\">\n\t\t<BoldIcon class=\"size-4\" />\n\t</ToggleGroup.Item>\n\t<ToggleGroup.Item value=\"italic\" aria-label=\"Toggle italic\">\n\t\t<ItalicIcon class=\"size-4\" />\n\t</ToggleGroup.Item>\n\t<ToggleGroup.Item value=\"strikethrough\" aria-label=\"Toggle strikethrough\">\n\t\t<UnderlineIcon class=\"size-4\" />\n\t</ToggleGroup.Item>\n</ToggleGroup.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/toggle-group-outline.svelte",
    "content": "<script lang=\"ts\">\n\timport BoldIcon from \"@lucide/svelte/icons/bold\";\n\timport ItalicIcon from \"@lucide/svelte/icons/italic\";\n\timport UnderlineIcon from \"@lucide/svelte/icons/underline\";\n\timport * as ToggleGroup from \"$lib/registry/ui/toggle-group/index.js\";\n</script>\n\n<ToggleGroup.Root variant=\"outline\" type=\"multiple\">\n\t<ToggleGroup.Item value=\"bold\" aria-label=\"Toggle bold\">\n\t\t<BoldIcon class=\"size-4\" />\n\t</ToggleGroup.Item>\n\t<ToggleGroup.Item value=\"italic\" aria-label=\"Toggle italic\">\n\t\t<ItalicIcon class=\"size-4\" />\n\t</ToggleGroup.Item>\n\t<ToggleGroup.Item value=\"strikethrough\" aria-label=\"Toggle strikethrough\">\n\t\t<UnderlineIcon class=\"size-4\" />\n\t</ToggleGroup.Item>\n</ToggleGroup.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/toggle-group-single.svelte",
    "content": "<script lang=\"ts\">\n\timport BoldIcon from \"@lucide/svelte/icons/bold\";\n\timport ItalicIcon from \"@lucide/svelte/icons/italic\";\n\timport UnderlineIcon from \"@lucide/svelte/icons/underline\";\n\timport * as ToggleGroup from \"$lib/registry/ui/toggle-group/index.js\";\n</script>\n\n<ToggleGroup.Root type=\"single\">\n\t<ToggleGroup.Item value=\"bold\" aria-label=\"Toggle bold\">\n\t\t<BoldIcon class=\"size-4\" />\n\t</ToggleGroup.Item>\n\t<ToggleGroup.Item value=\"italic\" aria-label=\"Toggle italic\">\n\t\t<ItalicIcon class=\"size-4\" />\n\t</ToggleGroup.Item>\n\t<ToggleGroup.Item value=\"strikethrough\" aria-label=\"Toggle strikethrough\">\n\t\t<UnderlineIcon class=\"size-4\" />\n\t</ToggleGroup.Item>\n</ToggleGroup.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/toggle-group-sm.svelte",
    "content": "<script lang=\"ts\">\n\timport BoldIcon from \"@lucide/svelte/icons/bold\";\n\timport ItalicIcon from \"@lucide/svelte/icons/italic\";\n\timport UnderlineIcon from \"@lucide/svelte/icons/underline\";\n\timport * as ToggleGroup from \"$lib/registry/ui/toggle-group/index.js\";\n</script>\n\n<ToggleGroup.Root size=\"sm\" type=\"single\">\n\t<ToggleGroup.Item value=\"bold\" aria-label=\"Toggle bold\">\n\t\t<BoldIcon class=\"size-4\" />\n\t</ToggleGroup.Item>\n\t<ToggleGroup.Item value=\"italic\" aria-label=\"Toggle italic\">\n\t\t<ItalicIcon class=\"size-4\" />\n\t</ToggleGroup.Item>\n\t<ToggleGroup.Item value=\"strikethrough\" aria-label=\"Toggle strikethrough\">\n\t\t<UnderlineIcon class=\"size-4\" />\n\t</ToggleGroup.Item>\n</ToggleGroup.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/toggle-group-spacing.svelte",
    "content": "<script lang=\"ts\">\n\timport * as ToggleGroup from \"$lib/registry/ui/toggle-group/index.js\";\n\timport BookmarkIcon from \"@lucide/svelte/icons/bookmark\";\n\timport HeartIcon from \"@lucide/svelte/icons/heart\";\n\timport StarIcon from \"@lucide/svelte/icons/star\";\n</script>\n\n<ToggleGroup.Root type=\"multiple\" variant=\"outline\" spacing={2} size=\"sm\">\n\t<ToggleGroup.Item\n\t\tvalue=\"star\"\n\t\taria-label=\"Toggle star\"\n\t\tclass=\"data-[state=on]:bg-transparent data-[state=on]:*:[svg]:fill-yellow-500 data-[state=on]:*:[svg]:stroke-yellow-500\"\n\t>\n\t\t<StarIcon />\n\t\tStar\n\t</ToggleGroup.Item>\n\t<ToggleGroup.Item\n\t\tvalue=\"heart\"\n\t\taria-label=\"Toggle heart\"\n\t\tclass=\"data-[state=on]:bg-transparent data-[state=on]:*:[svg]:fill-red-500 data-[state=on]:*:[svg]:stroke-red-500\"\n\t>\n\t\t<HeartIcon />\n\t\tHeart\n\t</ToggleGroup.Item>\n\t<ToggleGroup.Item\n\t\tvalue=\"bookmark\"\n\t\taria-label=\"Toggle bookmark\"\n\t\tclass=\"data-[state=on]:bg-transparent data-[state=on]:*:[svg]:fill-blue-500 data-[state=on]:*:[svg]:stroke-blue-500\"\n\t>\n\t\t<BookmarkIcon />\n\t\tBookmark\n\t</ToggleGroup.Item>\n</ToggleGroup.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/toggle-lg.svelte",
    "content": "<script lang=\"ts\">\n\timport ItalicIcon from \"@lucide/svelte/icons/italic\";\n\timport { Toggle } from \"$lib/registry/ui/toggle/index.js\";\n</script>\n\n<Toggle size=\"lg\" aria-label=\"Toggle italic\">\n\t<ItalicIcon class=\"size-4\" />\n</Toggle>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/toggle-outline.svelte",
    "content": "<script lang=\"ts\">\n\timport ItalicIcon from \"@lucide/svelte/icons/italic\";\n\timport { Toggle } from \"$lib/registry/ui/toggle/index.js\";\n</script>\n\n<Toggle variant=\"outline\" aria-label=\"Toggle italic\">\n\t<ItalicIcon class=\"size-4\" />\n</Toggle>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/toggle-sm.svelte",
    "content": "<script lang=\"ts\">\n\timport ItalicIcon from \"@lucide/svelte/icons/italic\";\n\timport { Toggle } from \"$lib/registry/ui/toggle/index.js\";\n</script>\n\n<Toggle size=\"sm\" aria-label=\"Toggle italic\">\n\t<ItalicIcon class=\"size-4\" />\n</Toggle>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/toggle-with-text.svelte",
    "content": "<script lang=\"ts\">\n\timport ItalicIcon from \"@lucide/svelte/icons/italic\";\n\timport { Toggle } from \"$lib/registry/ui/toggle/index.js\";\n</script>\n\n<Toggle aria-label=\"Toggle italic\">\n\t<ItalicIcon class=\"me-2 size-4\" />\n\tItalic\n</Toggle>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/tooltip-demo.svelte",
    "content": "<script lang=\"ts\">\n\timport { buttonVariants } from \"../ui/button/index.js\";\n\timport * as Tooltip from \"$lib/registry/ui/tooltip/index.js\";\n</script>\n\n<Tooltip.Provider>\n\t<Tooltip.Root>\n\t\t<Tooltip.Trigger class={buttonVariants({ variant: \"outline\" })}>Hover</Tooltip.Trigger>\n\t\t<Tooltip.Content>\n\t\t\t<p>Add to library</p>\n\t\t</Tooltip.Content>\n\t</Tooltip.Root>\n</Tooltip.Provider>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/typography-blockquote.svelte",
    "content": "<blockquote class=\"mt-6 border-s-2 ps-6 italic\">\n\t\"After all,\" he said, \"everyone enjoys a good joke, so it's only fair that they should pay for\n\tthe privilege.\"\n</blockquote>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/typography-demo.svelte",
    "content": "<div>\n\t<h1 class=\"scroll-m-20 text-4xl font-extrabold tracking-tight text-balance\">\n\t\tTaxing Laughter: The Joke Tax Chronicles\n\t</h1>\n\t<p class=\"text-muted-foreground text-xl leading-7 [&:not(:first-child)]:mt-6\">\n\t\tOnce upon a time, in a far-off land, there was a very lazy king who spent all day lounging\n\t\ton his throne. One day, his advisors came to him with a problem: the kingdom was running out\n\t\tof money.\n\t</p>\n\t<h2\n\t\tclass=\"mt-10 scroll-m-20 border-b pb-2 text-3xl font-semibold tracking-tight transition-colors first:mt-0\"\n\t>\n\t\tThe King&apos;s Plan\n\t</h2>\n\t<p class=\"leading-7 [&:not(:first-child)]:mt-6\">\n\t\tThe king thought long and hard, and finally came up with\n\t\t<a href=\"##\" class=\"text-primary font-medium underline underline-offset-4\">\n\t\t\ta brilliant plan\n\t\t</a>\n\t\t: he would tax the jokes in the kingdom.\n\t</p>\n\t<blockquote class=\"mt-6 border-s-2 ps-6 italic\">\n\t\t&quot;After all,&quot; he said, &quot;everyone enjoys a good joke, so it&apos;s only fair\n\t\tthat they should pay for the privilege.&quot;\n\t</blockquote>\n\t<h3 class=\"mt-8 scroll-m-20 text-2xl font-semibold tracking-tight\">The Joke Tax</h3>\n\t<p class=\"leading-7 [&:not(:first-child)]:mt-6\">\n\t\tThe king&apos;s subjects were not amused. They grumbled and complained, but the king was\n\t\tfirm:\n\t</p>\n\t<ul class=\"my-6 ms-6 list-disc [&>li]:mt-2\">\n\t\t<li>1st level of puns: 5 gold coins</li>\n\t\t<li>2nd level of jokes: 10 gold coins</li>\n\t\t<li>3rd level of one-liners : 20 gold coins</li>\n\t</ul>\n\t<p class=\"leading-7 [&:not(:first-child)]:mt-6\">\n\t\tAs a result, people stopped telling jokes, and the kingdom fell into a gloom. But there was\n\t\tone person who refused to let the king&apos;s foolishness get him down: a court jester named\n\t\tJokester.\n\t</p>\n\t<h3 class=\"mt-8 scroll-m-20 text-2xl font-semibold tracking-tight\">Jokester&apos;s Revolt</h3>\n\t<p class=\"leading-7 [&:not(:first-child)]:mt-6\">\n\t\tJokester began sneaking into the castle in the middle of the night and leaving jokes all\n\t\tover the place: under the king&apos;s pillow, in his soup, even in the royal toilet. The\n\t\tking was furious, but he couldn&apos;t seem to stop Jokester.\n\t</p>\n\t<p class=\"leading-7 [&:not(:first-child)]:mt-6\">\n\t\tAnd then, one day, the people of the kingdom discovered that the jokes left by Jokester were\n\t\tso funny that they couldn&apos;t help but laugh. And once they started laughing, they\n\t\tcouldn&apos;t stop.\n\t</p>\n\t<h3 class=\"mt-8 scroll-m-20 text-2xl font-semibold tracking-tight\">\n\t\tThe People&apos;s Rebellion\n\t</h3>\n\t<p class=\"leading-7 [&:not(:first-child)]:mt-6\">\n\t\tThe people of the kingdom, feeling uplifted by the laughter, started to tell jokes and puns\n\t\tagain, and soon the entire kingdom was in on the joke.\n\t</p>\n\t<div class=\"my-6 w-full overflow-y-auto\">\n\t\t<table class=\"w-full\">\n\t\t\t<thead>\n\t\t\t\t<tr class=\"even:bg-muted m-0 border-t p-0\">\n\t\t\t\t\t<th\n\t\t\t\t\t\tclass=\"border px-4 py-2 text-start font-bold [&[align=center]]:text-center [&[align=right]]:text-end\"\n\t\t\t\t\t>\n\t\t\t\t\t\tKing&apos;s Treasury\n\t\t\t\t\t</th>\n\t\t\t\t\t<th\n\t\t\t\t\t\tclass=\"border px-4 py-2 text-start font-bold [&[align=center]]:text-center [&[align=right]]:text-end\"\n\t\t\t\t\t>\n\t\t\t\t\t\tPeople&apos;s happiness\n\t\t\t\t\t</th>\n\t\t\t\t</tr>\n\t\t\t</thead>\n\t\t\t<tbody>\n\t\t\t\t<tr class=\"even:bg-muted m-0 border-t p-0\">\n\t\t\t\t\t<td\n\t\t\t\t\t\tclass=\"border px-4 py-2 text-start [&[align=center]]:text-center [&[align=right]]:text-end\"\n\t\t\t\t\t>\n\t\t\t\t\t\tEmpty\n\t\t\t\t\t</td>\n\t\t\t\t\t<td\n\t\t\t\t\t\tclass=\"border px-4 py-2 text-start [&[align=center]]:text-center [&[align=right]]:text-end\"\n\t\t\t\t\t>\n\t\t\t\t\t\tOverflowing\n\t\t\t\t\t</td>\n\t\t\t\t</tr>\n\t\t\t\t<tr class=\"even:bg-muted m-0 border-t p-0\">\n\t\t\t\t\t<td\n\t\t\t\t\t\tclass=\"border px-4 py-2 text-start [&[align=center]]:text-center [&[align=right]]:text-end\"\n\t\t\t\t\t>\n\t\t\t\t\t\tModest\n\t\t\t\t\t</td>\n\t\t\t\t\t<td\n\t\t\t\t\t\tclass=\"border px-4 py-2 text-start [&[align=center]]:text-center [&[align=right]]:text-end\"\n\t\t\t\t\t>\n\t\t\t\t\t\tSatisfied\n\t\t\t\t\t</td>\n\t\t\t\t</tr>\n\t\t\t\t<tr class=\"even:bg-muted m-0 border-t p-0\">\n\t\t\t\t\t<td\n\t\t\t\t\t\tclass=\"border px-4 py-2 text-start [&[align=center]]:text-center [&[align=right]]:text-end\"\n\t\t\t\t\t>\n\t\t\t\t\t\tFull\n\t\t\t\t\t</td>\n\t\t\t\t\t<td\n\t\t\t\t\t\tclass=\"border px-4 py-2 text-start [&[align=center]]:text-center [&[align=right]]:text-end\"\n\t\t\t\t\t>\n\t\t\t\t\t\tEcstatic\n\t\t\t\t\t</td>\n\t\t\t\t</tr>\n\t\t\t</tbody>\n\t\t</table>\n\t</div>\n\t<p class=\"leading-7 [&:not(:first-child)]:mt-6\">\n\t\tThe king, seeing how much happier his subjects were, realized the error of his ways and\n\t\trepealed the joke tax. Jokester was declared a hero, and the kingdom lived happily ever\n\t\tafter.\n\t</p>\n\t<p class=\"leading-7 [&:not(:first-child)]:mt-6\">\n\t\tThe moral of the story is: never underestimate the power of a good laugh and always be\n\t\tcareful of bad ideas.\n\t</p>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/typography-h1.svelte",
    "content": "<h1 class=\"scroll-m-20 text-4xl font-extrabold tracking-tight lg:text-5xl\">\n\tTaxing Laughter: The Joke Tax Chronicles\n</h1>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/typography-h2.svelte",
    "content": "<h2\n\tclass=\"scroll-m-20 border-b pb-2 text-3xl font-semibold tracking-tight transition-colors first:mt-0\"\n>\n\tThe People of the Kingdom\n</h2>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/typography-h3.svelte",
    "content": "<h3 class=\"scroll-m-20 text-2xl font-semibold tracking-tight\">The Joke Tax</h3>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/typography-h4.svelte",
    "content": "<h4 class=\"scroll-m-20 text-xl font-semibold tracking-tight\">People stopped telling jokes</h4>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/typography-inline-code.svelte",
    "content": "<code class=\"bg-muted relative rounded px-[0.3rem] py-[0.2rem] font-mono text-sm font-semibold\">\n\t@lucide/svelte\n</code>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/typography-large.svelte",
    "content": "<div class=\"text-lg font-semibold\">Are you sure absolutely sure?</div>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/typography-lead.svelte",
    "content": "<p class=\"text-muted-foreground text-xl\">\n\tA modal dialog that interrupts the user with important content and expects a response.\n</p>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/typography-list.svelte",
    "content": "<ul class=\"my-6 ms-6 list-disc [&>li]:mt-2\">\n\t<li>1st level of puns: 5 gold coins</li>\n\t<li>2nd level of jokes: 10 gold coins</li>\n\t<li>3rd level of one-liners : 20 gold coins</li>\n</ul>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/typography-muted.svelte",
    "content": "<p class=\"text-muted-foreground text-sm\">Enter your email address.</p>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/typography-p.svelte",
    "content": "<p class=\"leading-7 [&:not(:first-child)]:mt-6\">\n\tThe king, seeing how much happier his subjects were, realized the error of his ways and repealed\n\tthe joke tax.\n</p>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/typography-small.svelte",
    "content": "<small class=\"text-sm leading-none font-medium\">Email address</small>\n"
  },
  {
    "path": "docs/src/lib/registry/examples/typography-table.svelte",
    "content": "<div class=\"my-6 w-full overflow-y-auto\">\n\t<table class=\"w-full\">\n\t\t<thead>\n\t\t\t<tr class=\"even:bg-muted m-0 border-t p-0\">\n\t\t\t\t<th\n\t\t\t\t\tclass=\"border px-4 py-2 text-start font-bold [&[align=center]]:text-center [&[align=right]]:text-end\"\n\t\t\t\t>\n\t\t\t\t\tKing's Treasury\n\t\t\t\t</th>\n\t\t\t\t<th\n\t\t\t\t\tclass=\"border px-4 py-2 text-start font-bold [&[align=center]]:text-center [&[align=right]]:text-end\"\n\t\t\t\t>\n\t\t\t\t\tPeople's happiness\n\t\t\t\t</th>\n\t\t\t</tr>\n\t\t</thead>\n\t\t<tbody>\n\t\t\t<tr class=\"even:bg-muted m-0 border-t p-0\">\n\t\t\t\t<td\n\t\t\t\t\tclass=\"border px-4 py-2 text-start [&[align=center]]:text-center [&[align=right]]:text-end\"\n\t\t\t\t>\n\t\t\t\t\tEmpty\n\t\t\t\t</td>\n\t\t\t\t<td\n\t\t\t\t\tclass=\"border px-4 py-2 text-start [&[align=center]]:text-center [&[align=right]]:text-end\"\n\t\t\t\t>\n\t\t\t\t\tOverflowing\n\t\t\t\t</td>\n\t\t\t</tr>\n\t\t\t<tr class=\"even:bg-muted m-0 border-t p-0\">\n\t\t\t\t<td\n\t\t\t\t\tclass=\"border px-4 py-2 text-start [&[align=center]]:text-center [&[align=right]]:text-end\"\n\t\t\t\t>\n\t\t\t\t\tModest\n\t\t\t\t</td>\n\t\t\t\t<td\n\t\t\t\t\tclass=\"border px-4 py-2 text-start [&[align=center]]:text-center [&[align=right]]:text-end\"\n\t\t\t\t>\n\t\t\t\t\tSatisfied\n\t\t\t\t</td>\n\t\t\t</tr>\n\t\t\t<tr class=\"even:bg-muted m-0 border-t p-0\">\n\t\t\t\t<td\n\t\t\t\t\tclass=\"border px-4 py-2 text-start [&[align=center]]:text-center [&[align=right]]:text-end\"\n\t\t\t\t>\n\t\t\t\t\tFull\n\t\t\t\t</td>\n\t\t\t\t<td\n\t\t\t\t\tclass=\"border px-4 py-2 text-start [&[align=center]]:text-center [&[align=right]]:text-end\"\n\t\t\t\t>\n\t\t\t\t\tEcstatic\n\t\t\t\t</td>\n\t\t\t</tr>\n\t\t</tbody>\n\t</table>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/fonts.ts",
    "content": "// sync with https://github.com/shadcn-ui/ui/tree/main/apps/v4/registry/fonts.ts\n\nimport { type RegistryItem } from \"shadcn-svelte/schema\";\n\nexport const fonts = [\n\t{\n\t\tname: \"font-geist\",\n\t\ttitle: \"Geist\",\n\t\ttype: \"registry:font\",\n\t\tfont: {\n\t\t\tfamily: \"'Geist Variable', sans-serif\",\n\t\t\tprovider: \"google\",\n\t\t\tvariable: \"--font-sans\",\n\t\t\tsubsets: [\"latin\"],\n\t\t\timport: \"Geist\",\n\t\t\tdependency: \"@fontsource-variable/geist\",\n\t\t},\n\t},\n\t{\n\t\tname: \"font-inter\",\n\t\ttitle: \"Inter\",\n\t\ttype: \"registry:font\",\n\t\tfont: {\n\t\t\tfamily: \"'Inter Variable', sans-serif\",\n\t\t\tprovider: \"google\",\n\t\t\tvariable: \"--font-sans\",\n\t\t\tsubsets: [\"latin\"],\n\t\t\timport: \"Inter\",\n\t\t\tdependency: \"@fontsource-variable/inter\",\n\t\t},\n\t},\n\t{\n\t\tname: \"font-noto-sans\",\n\t\ttitle: \"Noto Sans\",\n\t\ttype: \"registry:font\",\n\t\tfont: {\n\t\t\tfamily: \"'Noto Sans Variable', sans-serif\",\n\t\t\tprovider: \"google\",\n\t\t\tvariable: \"--font-sans\",\n\t\t\timport: \"Noto_Sans\",\n\t\t\tdependency: \"@fontsource-variable/noto-sans\",\n\t\t},\n\t},\n\t{\n\t\tname: \"font-nunito-sans\",\n\t\ttitle: \"Nunito Sans\",\n\t\ttype: \"registry:font\",\n\t\tfont: {\n\t\t\tfamily: \"'Nunito Sans Variable', sans-serif\",\n\t\t\tprovider: \"google\",\n\t\t\tvariable: \"--font-sans\",\n\t\t\timport: \"Nunito_Sans\",\n\t\t\tdependency: \"@fontsource-variable/nunito-sans\",\n\t\t},\n\t},\n\t{\n\t\tname: \"font-figtree\",\n\t\ttitle: \"Figtree\",\n\t\ttype: \"registry:font\",\n\t\tfont: {\n\t\t\tfamily: \"'Figtree Variable', sans-serif\",\n\t\t\tprovider: \"google\",\n\t\t\tvariable: \"--font-sans\",\n\t\t\tsubsets: [\"latin\"],\n\t\t\timport: \"Figtree\",\n\t\t\tdependency: \"@fontsource-variable/figtree\",\n\t\t},\n\t},\n\t{\n\t\tname: \"font-roboto\",\n\t\ttitle: \"Roboto\",\n\t\ttype: \"registry:font\",\n\t\tfont: {\n\t\t\tfamily: \"'Roboto Variable', sans-serif\",\n\t\t\tprovider: \"google\",\n\t\t\tvariable: \"--font-sans\",\n\t\t\tsubsets: [\"latin\"],\n\t\t\timport: \"Roboto\",\n\t\t\tdependency: \"@fontsource-variable/roboto\",\n\t\t},\n\t},\n\t{\n\t\tname: \"font-raleway\",\n\t\ttitle: \"Raleway\",\n\t\ttype: \"registry:font\",\n\t\tfont: {\n\t\t\tfamily: \"'Raleway Variable', sans-serif\",\n\t\t\tprovider: \"google\",\n\t\t\tvariable: \"--font-sans\",\n\t\t\tsubsets: [\"latin\"],\n\t\t\timport: \"Raleway\",\n\t\t\tdependency: \"@fontsource-variable/raleway\",\n\t\t},\n\t},\n\t{\n\t\tname: \"font-dm-sans\",\n\t\ttitle: \"DM Sans\",\n\t\ttype: \"registry:font\",\n\t\tfont: {\n\t\t\tfamily: \"'DM Sans Variable', sans-serif\",\n\t\t\tprovider: \"google\",\n\t\t\tvariable: \"--font-sans\",\n\t\t\tsubsets: [\"latin\"],\n\t\t\timport: \"DM_Sans\",\n\t\t\tdependency: \"@fontsource-variable/dm-sans\",\n\t\t},\n\t},\n\t{\n\t\tname: \"font-public-sans\",\n\t\ttitle: \"Public Sans\",\n\t\ttype: \"registry:font\",\n\t\tfont: {\n\t\t\tfamily: \"'Public Sans Variable', sans-serif\",\n\t\t\tprovider: \"google\",\n\t\t\tvariable: \"--font-sans\",\n\t\t\tsubsets: [\"latin\"],\n\t\t\timport: \"Public_Sans\",\n\t\t\tdependency: \"@fontsource-variable/public-sans\",\n\t\t},\n\t},\n\t{\n\t\tname: \"font-outfit\",\n\t\ttitle: \"Outfit\",\n\t\ttype: \"registry:font\",\n\t\tfont: {\n\t\t\tfamily: \"'Outfit Variable', sans-serif\",\n\t\t\tprovider: \"google\",\n\t\t\tvariable: \"--font-sans\",\n\t\t\tsubsets: [\"latin\"],\n\t\t\timport: \"Outfit\",\n\t\t\tdependency: \"@fontsource-variable/outfit\",\n\t\t},\n\t},\n\t{\n\t\tname: \"font-jetbrains-mono\",\n\t\ttitle: \"JetBrains Mono\",\n\t\ttype: \"registry:font\",\n\t\tfont: {\n\t\t\tfamily: \"'JetBrains Mono Variable', monospace\",\n\t\t\tprovider: \"google\",\n\t\t\tvariable: \"--font-mono\",\n\t\t\tsubsets: [\"latin\"],\n\t\t\timport: \"JetBrains_Mono\",\n\t\t\tdependency: \"@fontsource-variable/jetbrains-mono\",\n\t\t},\n\t},\n\t{\n\t\tname: \"font-geist-mono\",\n\t\ttitle: \"Geist Mono\",\n\t\ttype: \"registry:font\",\n\t\tfont: {\n\t\t\tfamily: \"'Geist Mono Variable', monospace\",\n\t\t\tprovider: \"google\",\n\t\t\tvariable: \"--font-mono\",\n\t\t\tsubsets: [\"latin\"],\n\t\t\timport: \"Geist_Mono\",\n\t\t\tdependency: \"@fontsource-variable/geist-mono\",\n\t\t},\n\t},\n\t{\n\t\tname: \"font-noto-serif\",\n\t\ttitle: \"Noto Serif\",\n\t\ttype: \"registry:font\",\n\t\tfont: {\n\t\t\tfamily: \"'Noto Serif Variable', serif\",\n\t\t\tprovider: \"google\",\n\t\t\tvariable: \"--font-serif\",\n\t\t\tsubsets: [\"latin\"],\n\t\t\timport: \"Noto_Serif\",\n\t\t\tdependency: \"@fontsource-variable/noto-serif\",\n\t\t},\n\t},\n\t{\n\t\tname: \"font-roboto-slab\",\n\t\ttitle: \"Roboto Slab\",\n\t\ttype: \"registry:font\",\n\t\tfont: {\n\t\t\tfamily: \"'Roboto Slab Variable', serif\",\n\t\t\tprovider: \"google\",\n\t\t\tvariable: \"--font-serif\",\n\t\t\tsubsets: [\"latin\"],\n\t\t\timport: \"Roboto_Slab\",\n\t\t\tdependency: \"@fontsource-variable/roboto-slab\",\n\t\t},\n\t},\n\t{\n\t\tname: \"font-merriweather\",\n\t\ttitle: \"Merriweather\",\n\t\ttype: \"registry:font\",\n\t\tfont: {\n\t\t\tfamily: \"'Merriweather Variable', serif\",\n\t\t\tprovider: \"google\",\n\t\t\tvariable: \"--font-serif\",\n\t\t\tsubsets: [\"latin\"],\n\t\t\timport: \"Merriweather\",\n\t\t\tdependency: \"@fontsource-variable/merriweather\",\n\t\t},\n\t},\n\t{\n\t\tname: \"font-lora\",\n\t\ttitle: \"Lora\",\n\t\ttype: \"registry:font\",\n\t\tfont: {\n\t\t\tfamily: \"'Lora Variable', serif\",\n\t\t\tprovider: \"google\",\n\t\t\tvariable: \"--font-serif\",\n\t\t\tsubsets: [\"latin\"],\n\t\t\timport: \"Lora\",\n\t\t\tdependency: \"@fontsource-variable/lora\",\n\t\t},\n\t},\n\t{\n\t\tname: \"font-playfair-display\",\n\t\ttitle: \"Playfair Display\",\n\t\ttype: \"registry:font\",\n\t\tfont: {\n\t\t\tfamily: \"'Playfair Display Variable', serif\",\n\t\t\tprovider: \"google\",\n\t\t\tvariable: \"--font-serif\",\n\t\t\tsubsets: [\"latin\"],\n\t\t\timport: \"Playfair_Display\",\n\t\t\tdependency: \"@fontsource-variable/playfair-display\",\n\t\t},\n\t},\n] satisfies RegistryItem[];\n"
  },
  {
    "path": "docs/src/lib/registry/hooks/is-mobile.svelte.ts",
    "content": "import { MediaQuery } from \"svelte/reactivity\";\n\nconst DEFAULT_MOBILE_BREAKPOINT = 768;\n\nexport class IsMobile extends MediaQuery {\n\tconstructor(breakpoint: number = DEFAULT_MOBILE_BREAKPOINT) {\n\t\tsuper(`max-width: ${breakpoint - 1}px`);\n\t}\n}\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/ActivityIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { ActivityIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/Add01Icon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { Add01Icon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/AddToListIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { AddToListIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/AiCloud01Icon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { AiCloud01Icon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/Alert02Icon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { Alert02Icon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/AlertCircleIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { AlertCircleIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/Archive02Icon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { Archive02Icon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/ArchiveIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { ArchiveIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/ArrowDown01Icon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { ArrowDown01Icon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/ArrowDownIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { ArrowDownIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/ArrowExpandIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { ArrowExpandIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/ArrowLeft01Icon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { ArrowLeft01Icon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/ArrowLeft02Icon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { ArrowLeft02Icon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/ArrowRight01Icon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { ArrowRight01Icon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/ArrowRight02Icon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { ArrowRight02Icon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/ArrowShrinkIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { ArrowShrinkIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/ArrowUp01Icon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { ArrowUp01Icon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/ArrowUp02Icon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { ArrowUp02Icon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/ArrowUpIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { ArrowUpIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/ArrowUpRight01Icon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { ArrowUpRight01Icon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/ArrowUpRightIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { ArrowUpRightIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/AttachmentIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { AttachmentIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/AudioWave01Icon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { AudioWave01Icon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/BankIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { BankIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/BluetoothIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { BluetoothIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/BookIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { BookIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/BookOpen02Icon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { BookOpen02Icon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/BookmarkIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { BookmarkIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/BotIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { BotIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/BulbIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { BulbIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/CalculatorIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { CalculatorIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/Calendar01Icon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { Calendar01Icon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/CalendarAdd01Icon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { CalendarAdd01Icon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/CalendarIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { CalendarIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/Cancel01Icon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { Cancel01Icon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/Chart03Icon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { Chart03Icon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/ChartUpIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { ChartUpIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/CheckmarkBadge02Icon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { CheckmarkBadge02Icon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/CheckmarkBadgeIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { CheckmarkBadgeIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/CheckmarkCircle02Icon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { CheckmarkCircle02Icon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/CircleArrowLeft02Icon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { CircleArrowLeft02Icon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/CircleIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { CircleIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/ClipboardIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { ClipboardIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/Clock03Icon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { Clock03Icon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/ClockIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { ClockIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/CloudUploadIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { CloudUploadIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/CodeIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { CodeIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/ComputerIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { ComputerIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/ComputerTerminal01Icon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { ComputerTerminal01Icon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/ComputerTerminalIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { ComputerTerminalIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/Copy01Icon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { Copy01Icon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/CopyIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { CopyIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/CreditCardIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { CreditCardIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/CropIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { CropIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/CubeIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { CubeIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/Cursor01Icon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { Cursor01Icon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/CursorInWindowIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { CursorInWindowIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/DashedLineCircleIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { DashedLineCircleIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/Delete02Icon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { Delete02Icon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/DeleteIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { DeleteIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/DollarCircleIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { DollarCircleIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/DownloadIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { DownloadIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/EditIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { EditIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/EyeIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { EyeIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/FavouriteIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { FavouriteIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/File01Icon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { File01Icon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/File02Icon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { File02Icon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/FileIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { FileIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/FlipHorizontalIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { FlipHorizontalIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/FlipVerticalIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { FlipVerticalIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/FloppyDiskIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { FloppyDiskIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/Folder01Icon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { Folder01Icon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/FolderAddIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { FolderAddIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/FolderIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { FolderIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/FolderOpenIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { FolderOpenIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/GitBranchIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { GitBranchIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/GlobalIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { GlobalIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/GridIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { GridIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/HelpCircleIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { HelpCircleIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/HomeIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { HomeIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/ImageIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { ImageIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/InboxIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { InboxIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/InformationCircleIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { InformationCircleIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/KeyboardIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { KeyboardIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/LanguageCircleIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { LanguageCircleIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/LayoutIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { LayoutIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/LayoutLeftIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { LayoutLeftIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/LinkIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { LinkIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/LinkSquare02Icon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { LinkSquare02Icon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/Loading03Icon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { Loading03Icon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/LogoutIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { LogoutIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/MagicWand05Icon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { MagicWand05Icon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/MailIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { MailIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/MailValidation01Icon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { MailValidation01Icon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/MapsIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { MapsIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/Menu05Icon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { Menu05Icon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/Menu09Icon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { Menu09Icon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/MessageIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { MessageIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/MinusSignIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { MinusSignIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/MoonIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { MoonIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/MoreHorizontalCircle01Icon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { MoreHorizontalCircle01Icon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/MoreVerticalCircle01Icon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { MoreVerticalCircle01Icon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/MultiplicationSignCircleIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { MultiplicationSignCircleIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/Notification02Icon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { Notification02Icon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/NotificationIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { NotificationIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/PaintBoardIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { PaintBoardIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/PenIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { PenIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/PieChartIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { PieChartIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/PlusSignIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { PlusSignIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/RecordIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { RecordIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/RefreshIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { RefreshIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/RoboticIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { RoboticIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/Rotate01Icon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { Rotate01Icon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/ScissorIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { ScissorIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/Search01Icon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { Search01Icon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/SearchIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { SearchIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/SentIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { SentIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/ServerStackIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { ServerStackIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/Settings01Icon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { Settings01Icon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/Settings05Icon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { Settings05Icon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/SettingsIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { SettingsIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/Share03Icon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { Share03Icon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/ShareIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { ShareIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/ShieldIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { ShieldIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/ShoppingBag01Icon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { ShoppingBag01Icon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/ShoppingBasket01Icon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { ShoppingBasket01Icon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/SidebarLeftIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { SidebarLeftIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/SlidersHorizontalIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { SlidersHorizontalIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/SmileIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { SmileIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/SparklesIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { SparklesIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/StarIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { StarIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/SunIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { SunIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/TableIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { TableIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/TagIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { TagIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/TextBoldIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { TextBoldIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/TextCheckIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { TextCheckIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/TextItalicIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { TextItalicIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/TextUnderlineIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { TextUnderlineIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/Tick02Icon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { Tick02Icon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/TradeUpIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { TradeUpIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/UnfoldMoreIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { UnfoldMoreIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/Upload01Icon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { Upload01Icon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/UserIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { UserIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/UserRemove01Icon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { UserRemove01Icon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/ViewOffIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { ViewOffIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/VoiceIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { VoiceIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/VolumeOffIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { VolumeOffIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/WalletIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { WalletIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/ZapIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { ZapIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/ZoomInAreaIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { ZoomInAreaIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/ZoomOutAreaIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { ZoomOutAreaIcon } from '@hugeicons/core-free-icons';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__hugeicons__/index.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport type HugeIconsIconName = \"ActivityIcon\" | \"Add01Icon\" | \"AddToListIcon\" | \"AiCloud01Icon\" | \"Alert02Icon\" | \"AlertCircleIcon\" | \"Archive02Icon\" | \"ArchiveIcon\" | \"ArrowDown01Icon\" | \"ArrowDownIcon\" | \"ArrowExpandIcon\" | \"ArrowLeft01Icon\" | \"ArrowLeft02Icon\" | \"ArrowRight01Icon\" | \"ArrowRight02Icon\" | \"ArrowShrinkIcon\" | \"ArrowUp01Icon\" | \"ArrowUp02Icon\" | \"ArrowUpIcon\" | \"ArrowUpRight01Icon\" | \"ArrowUpRightIcon\" | \"AttachmentIcon\" | \"AudioWave01Icon\" | \"BankIcon\" | \"BluetoothIcon\" | \"BookIcon\" | \"BookOpen02Icon\" | \"BookmarkIcon\" | \"BotIcon\" | \"BulbIcon\" | \"CalculatorIcon\" | \"Calendar01Icon\" | \"CalendarAdd01Icon\" | \"CalendarIcon\" | \"Cancel01Icon\" | \"Chart03Icon\" | \"ChartUpIcon\" | \"CheckmarkBadge02Icon\" | \"CheckmarkBadgeIcon\" | \"CheckmarkCircle02Icon\" | \"CircleArrowLeft02Icon\" | \"CircleIcon\" | \"ClipboardIcon\" | \"Clock03Icon\" | \"ClockIcon\" | \"CloudUploadIcon\" | \"CodeIcon\" | \"ComputerIcon\" | \"ComputerTerminal01Icon\" | \"ComputerTerminalIcon\" | \"Copy01Icon\" | \"CopyIcon\" | \"CreditCardIcon\" | \"CropIcon\" | \"CubeIcon\" | \"Cursor01Icon\" | \"CursorInWindowIcon\" | \"DashedLineCircleIcon\" | \"Delete02Icon\" | \"DeleteIcon\" | \"DollarCircleIcon\" | \"DownloadIcon\" | \"EditIcon\" | \"EyeIcon\" | \"FavouriteIcon\" | \"File01Icon\" | \"File02Icon\" | \"FileIcon\" | \"FlipHorizontalIcon\" | \"FlipVerticalIcon\" | \"FloppyDiskIcon\" | \"Folder01Icon\" | \"FolderAddIcon\" | \"FolderIcon\" | \"FolderOpenIcon\" | \"GitBranchIcon\" | \"GlobalIcon\" | \"GridIcon\" | \"HelpCircleIcon\" | \"HomeIcon\" | \"ImageIcon\" | \"InboxIcon\" | \"InformationCircleIcon\" | \"KeyboardIcon\" | \"LanguageCircleIcon\" | \"LayoutIcon\" | \"LayoutLeftIcon\" | \"LinkIcon\" | \"LinkSquare02Icon\" | \"Loading03Icon\" | \"LogoutIcon\" | \"MagicWand05Icon\" | \"MailIcon\" | \"MailValidation01Icon\" | \"MapsIcon\" | \"Menu05Icon\" | \"Menu09Icon\" | \"MessageIcon\" | \"MinusSignIcon\" | \"MoonIcon\" | \"MoreHorizontalCircle01Icon\" | \"MoreVerticalCircle01Icon\" | \"MultiplicationSignCircleIcon\" | \"Notification02Icon\" | \"NotificationIcon\" | \"PaintBoardIcon\" | \"PenIcon\" | \"PieChartIcon\" | \"PlusSignIcon\" | \"RecordIcon\" | \"RefreshIcon\" | \"RoboticIcon\" | \"Rotate01Icon\" | \"ScissorIcon\" | \"Search01Icon\" | \"SearchIcon\" | \"SentIcon\" | \"ServerStackIcon\" | \"Settings01Icon\" | \"Settings05Icon\" | \"SettingsIcon\" | \"Share03Icon\" | \"ShareIcon\" | \"ShieldIcon\" | \"ShoppingBag01Icon\" | \"ShoppingBasket01Icon\" | \"SidebarLeftIcon\" | \"SlidersHorizontalIcon\" | \"SmileIcon\" | \"SparklesIcon\" | \"StarIcon\" | \"SunIcon\" | \"TableIcon\" | \"TagIcon\" | \"TextBoldIcon\" | \"TextCheckIcon\" | \"TextItalicIcon\" | \"TextUnderlineIcon\" | \"Tick02Icon\" | \"TradeUpIcon\" | \"UnfoldMoreIcon\" | \"Upload01Icon\" | \"UserIcon\" | \"UserRemove01Icon\" | \"ViewOffIcon\" | \"VoiceIcon\" | \"VolumeOffIcon\" | \"WalletIcon\" | \"ZapIcon\" | \"ZoomInAreaIcon\" | \"ZoomOutAreaIcon\";\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/ActivityIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as ActivityIcon } from '@lucide/svelte/icons/activity';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/AlertTriangleIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as AlertTriangleIcon } from '@lucide/svelte/icons/alert-triangle';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/AppWindowIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as AppWindowIcon } from '@lucide/svelte/icons/app-window';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/ArchiveIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as ArchiveIcon } from '@lucide/svelte/icons/archive';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/ArrowDownIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as ArrowDownIcon } from '@lucide/svelte/icons/arrow-down';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/ArrowLeftCircleIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as ArrowLeftCircleIcon } from '@lucide/svelte/icons/arrow-left-circle';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/ArrowLeftIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as ArrowLeftIcon } from '@lucide/svelte/icons/arrow-left';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/ArrowRightIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as ArrowRightIcon } from '@lucide/svelte/icons/arrow-right';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/ArrowUpIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as ArrowUpIcon } from '@lucide/svelte/icons/arrow-up';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/ArrowUpRightIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as ArrowUpRightIcon } from '@lucide/svelte/icons/arrow-up-right';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/AudioLinesIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as AudioLinesIcon } from '@lucide/svelte/icons/audio-lines';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/BadgeCheck.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as BadgeCheck } from '@lucide/svelte/icons/badge-check';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/BadgeCheckIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as BadgeCheckIcon } from '@lucide/svelte/icons/badge-check';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/BellIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as BellIcon } from '@lucide/svelte/icons/bell';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/BluetoothIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as BluetoothIcon } from '@lucide/svelte/icons/bluetooth';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/BoldIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as BoldIcon } from '@lucide/svelte/icons/bold';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/BookOpen.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as BookOpen } from '@lucide/svelte/icons/book-open';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/BookOpenIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as BookOpenIcon } from '@lucide/svelte/icons/book-open';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/BookmarkIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as BookmarkIcon } from '@lucide/svelte/icons/bookmark';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/BotIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as BotIcon } from '@lucide/svelte/icons/bot';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/Building2Icon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as Building2Icon } from '@lucide/svelte/icons/building-2';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/CalculatorIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as CalculatorIcon } from '@lucide/svelte/icons/calculator';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/CalendarIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as CalendarIcon } from '@lucide/svelte/icons/calendar';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/CalendarPlusIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as CalendarPlusIcon } from '@lucide/svelte/icons/calendar-plus';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/CaptionsIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as CaptionsIcon } from '@lucide/svelte/icons/captions';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/ChartBarIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as ChartBarIcon } from '@lucide/svelte/icons/chart-bar';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/ChartLineIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as ChartLineIcon } from '@lucide/svelte/icons/chart-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/ChartPieIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as ChartPieIcon } from '@lucide/svelte/icons/chart-pie';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/CheckCircle2Icon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as CheckCircle2Icon } from '@lucide/svelte/icons/check-circle-2';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/CheckIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as CheckIcon } from '@lucide/svelte/icons/check';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/ChevronDownIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as ChevronDownIcon } from '@lucide/svelte/icons/chevron-down';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/ChevronLeftIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as ChevronLeftIcon } from '@lucide/svelte/icons/chevron-left';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/ChevronRightIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as ChevronRightIcon } from '@lucide/svelte/icons/chevron-right';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/ChevronUpIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as ChevronUpIcon } from '@lucide/svelte/icons/chevron-up';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/ChevronsUpDownIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as ChevronsUpDownIcon } from '@lucide/svelte/icons/chevrons-up-down';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/CircleAlertIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as CircleAlertIcon } from '@lucide/svelte/icons/circle-alert';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/CircleCheckIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as CircleCheckIcon } from '@lucide/svelte/icons/circle-check';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/CircleDashedIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as CircleDashedIcon } from '@lucide/svelte/icons/circle-dashed';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/CircleDollarSignIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as CircleDollarSignIcon } from '@lucide/svelte/icons/circle-dollar-sign';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/CircleIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as CircleIcon } from '@lucide/svelte/icons/circle';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/ClipboardPasteIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as ClipboardPasteIcon } from '@lucide/svelte/icons/clipboard-paste';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/Clock2Icon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as Clock2Icon } from '@lucide/svelte/icons/clock-2';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/ClockIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as ClockIcon } from '@lucide/svelte/icons/clock';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/CloudCogIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as CloudCogIcon } from '@lucide/svelte/icons/cloud-cog';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/CodeIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as CodeIcon } from '@lucide/svelte/icons/code';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/ContainerIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as ContainerIcon } from '@lucide/svelte/icons/container';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/CopyIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as CopyIcon } from '@lucide/svelte/icons/copy';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/CreditCardIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as CreditCardIcon } from '@lucide/svelte/icons/credit-card';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/DownloadIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as DownloadIcon } from '@lucide/svelte/icons/download';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/ExternalLinkIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as ExternalLinkIcon } from '@lucide/svelte/icons/external-link';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/EyeIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as EyeIcon } from '@lucide/svelte/icons/eye';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/EyeOffIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as EyeOffIcon } from '@lucide/svelte/icons/eye-off';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/FileCodeIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as FileCodeIcon } from '@lucide/svelte/icons/file-code';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/FileIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as FileIcon } from '@lucide/svelte/icons/file';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/FileTextIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as FileTextIcon } from '@lucide/svelte/icons/file-text';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/FlipHorizontalIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as FlipHorizontalIcon } from '@lucide/svelte/icons/flip-horizontal';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/FlipVerticalIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as FlipVerticalIcon } from '@lucide/svelte/icons/flip-vertical';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/FolderIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as FolderIcon } from '@lucide/svelte/icons/folder';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/FolderOpenIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as FolderOpenIcon } from '@lucide/svelte/icons/folder-open';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/FolderPlusIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as FolderPlusIcon } from '@lucide/svelte/icons/folder-plus';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/FolderSearchIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as FolderSearchIcon } from '@lucide/svelte/icons/folder-search';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/FrameIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as FrameIcon } from '@lucide/svelte/icons/frame';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/GitBranchIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as GitBranchIcon } from '@lucide/svelte/icons/git-branch';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/GlobeIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as GlobeIcon } from '@lucide/svelte/icons/globe';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/HeartIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as HeartIcon } from '@lucide/svelte/icons/heart';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/HelpCircleIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as HelpCircleIcon } from '@lucide/svelte/icons/help-circle';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/HomeIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as HomeIcon } from '@lucide/svelte/icons/home';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/ImageIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as ImageIcon } from '@lucide/svelte/icons/image';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/InboxIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as InboxIcon } from '@lucide/svelte/icons/inbox';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/InfoIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as InfoIcon } from '@lucide/svelte/icons/info';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/ItalicIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as ItalicIcon } from '@lucide/svelte/icons/italic';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/KeyboardIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as KeyboardIcon } from '@lucide/svelte/icons/keyboard';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/LanguagesIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as LanguagesIcon } from '@lucide/svelte/icons/languages';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/LayoutGridIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as LayoutGridIcon } from '@lucide/svelte/icons/layout-grid';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/LayoutIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as LayoutIcon } from '@lucide/svelte/icons/layout';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/LightbulbIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as LightbulbIcon } from '@lucide/svelte/icons/lightbulb';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/LinkIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as LinkIcon } from '@lucide/svelte/icons/link';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/ListFilterIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as ListFilterIcon } from '@lucide/svelte/icons/list-filter';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/ListIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as ListIcon } from '@lucide/svelte/icons/list';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/Loader2Icon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as Loader2Icon } from '@lucide/svelte/icons/loader-2';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/LogOutIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as LogOutIcon } from '@lucide/svelte/icons/log-out';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/MailCheckIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as MailCheckIcon } from '@lucide/svelte/icons/mail-check';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/MailIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as MailIcon } from '@lucide/svelte/icons/mail';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/MapIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as MapIcon } from '@lucide/svelte/icons/map';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/MaximizeIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as MaximizeIcon } from '@lucide/svelte/icons/maximize';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/MenuIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as MenuIcon } from '@lucide/svelte/icons/menu';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/MessageSquareIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as MessageSquareIcon } from '@lucide/svelte/icons/message-square';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/MicIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as MicIcon } from '@lucide/svelte/icons/mic';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/MinimizeIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as MinimizeIcon } from '@lucide/svelte/icons/minimize';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/MinusIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as MinusIcon } from '@lucide/svelte/icons/minus';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/MonitorIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as MonitorIcon } from '@lucide/svelte/icons/monitor';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/MoonIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as MoonIcon } from '@lucide/svelte/icons/moon';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/MoreHorizontalIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as MoreHorizontalIcon } from '@lucide/svelte/icons/more-horizontal';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/MoreVerticalIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as MoreVerticalIcon } from '@lucide/svelte/icons/more-vertical';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/MousePointerIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as MousePointerIcon } from '@lucide/svelte/icons/mouse-pointer';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/OctagonXIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as OctagonXIcon } from '@lucide/svelte/icons/octagon-x';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/PaletteIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as PaletteIcon } from '@lucide/svelte/icons/palette';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/PanelLeftIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as PanelLeftIcon } from '@lucide/svelte/icons/panel-left';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/PaperclipIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as PaperclipIcon } from '@lucide/svelte/icons/paperclip';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/PenToolIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as PenToolIcon } from '@lucide/svelte/icons/pen-tool';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/PencilIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as PencilIcon } from '@lucide/svelte/icons/pencil';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/PieChartIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as PieChartIcon } from '@lucide/svelte/icons/pie-chart';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/PlusIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as PlusIcon } from '@lucide/svelte/icons/plus';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/RadioIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RadioIcon } from '@lucide/svelte/icons/radio';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/RefreshCwIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RefreshCwIcon } from '@lucide/svelte/icons/refresh-cw';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/RotateCwIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RotateCwIcon } from '@lucide/svelte/icons/rotate-cw';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/SaveIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as SaveIcon } from '@lucide/svelte/icons/save';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/ScissorsIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as ScissorsIcon } from '@lucide/svelte/icons/scissors';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/Search.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as Search } from '@lucide/svelte/icons/search';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/SearchIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as SearchIcon } from '@lucide/svelte/icons/search';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/SendIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as SendIcon } from '@lucide/svelte/icons/send';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/ServerIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as ServerIcon } from '@lucide/svelte/icons/server';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/Settings2Icon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as Settings2Icon } from '@lucide/svelte/icons/settings-2';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/SettingsIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as SettingsIcon } from '@lucide/svelte/icons/settings';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/ShareIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as ShareIcon } from '@lucide/svelte/icons/share';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/ShieldIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as ShieldIcon } from '@lucide/svelte/icons/shield';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/ShoppingBagIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as ShoppingBagIcon } from '@lucide/svelte/icons/shopping-bag';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/SlidersHorizontalIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as SlidersHorizontalIcon } from '@lucide/svelte/icons/sliders-horizontal';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/SmileIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as SmileIcon } from '@lucide/svelte/icons/smile';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/SparklesIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as SparklesIcon } from '@lucide/svelte/icons/sparkles';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/StarIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as StarIcon } from '@lucide/svelte/icons/star';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/SunIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as SunIcon } from '@lucide/svelte/icons/sun';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/TableIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as TableIcon } from '@lucide/svelte/icons/table';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/TagIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as TagIcon } from '@lucide/svelte/icons/tag';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/TerminalIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as TerminalIcon } from '@lucide/svelte/icons/terminal';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/TerminalSquareIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as TerminalSquareIcon } from '@lucide/svelte/icons/terminal-square';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/Trash2Icon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as Trash2Icon } from '@lucide/svelte/icons/trash-2';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/TrashIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as TrashIcon } from '@lucide/svelte/icons/trash';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/TrendingUpIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as TrendingUpIcon } from '@lucide/svelte/icons/trending-up';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/TriangleAlertIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as TriangleAlertIcon } from '@lucide/svelte/icons/triangle-alert';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/UnderlineIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as UnderlineIcon } from '@lucide/svelte/icons/underline';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/UploadCloudIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as UploadCloudIcon } from '@lucide/svelte/icons/upload-cloud';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/UploadIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as UploadIcon } from '@lucide/svelte/icons/upload';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/UserIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as UserIcon } from '@lucide/svelte/icons/user';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/UserRoundXIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as UserRoundXIcon } from '@lucide/svelte/icons/user-round-x';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/VolumeX.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as VolumeX } from '@lucide/svelte/icons/volume-x';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/WalletIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as WalletIcon } from '@lucide/svelte/icons/wallet';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/WandIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as WandIcon } from '@lucide/svelte/icons/wand';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/XIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as XIcon } from '@lucide/svelte/icons/x';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/ZapIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as ZapIcon } from '@lucide/svelte/icons/zap';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/ZoomInIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as ZoomInIcon } from '@lucide/svelte/icons/zoom-in';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/ZoomOutIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as ZoomOutIcon } from '@lucide/svelte/icons/zoom-out';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__lucide__/index.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport type LucideIconName = \"ActivityIcon\" | \"AlertTriangleIcon\" | \"AppWindowIcon\" | \"ArchiveIcon\" | \"ArrowDownIcon\" | \"ArrowLeftCircleIcon\" | \"ArrowLeftIcon\" | \"ArrowRightIcon\" | \"ArrowUpIcon\" | \"ArrowUpRightIcon\" | \"AudioLinesIcon\" | \"BadgeCheck\" | \"BadgeCheckIcon\" | \"BellIcon\" | \"BluetoothIcon\" | \"BoldIcon\" | \"BookOpen\" | \"BookOpenIcon\" | \"BookmarkIcon\" | \"BotIcon\" | \"Building2Icon\" | \"CalculatorIcon\" | \"CalendarIcon\" | \"CalendarPlusIcon\" | \"CaptionsIcon\" | \"ChartBarIcon\" | \"ChartLineIcon\" | \"ChartPieIcon\" | \"CheckCircle2Icon\" | \"CheckIcon\" | \"ChevronDownIcon\" | \"ChevronLeftIcon\" | \"ChevronRightIcon\" | \"ChevronUpIcon\" | \"ChevronsUpDownIcon\" | \"CircleAlertIcon\" | \"CircleCheckIcon\" | \"CircleDashedIcon\" | \"CircleDollarSignIcon\" | \"CircleIcon\" | \"ClipboardPasteIcon\" | \"Clock2Icon\" | \"ClockIcon\" | \"CloudCogIcon\" | \"CodeIcon\" | \"ContainerIcon\" | \"CopyIcon\" | \"CreditCardIcon\" | \"DownloadIcon\" | \"ExternalLinkIcon\" | \"EyeIcon\" | \"EyeOffIcon\" | \"FileCodeIcon\" | \"FileIcon\" | \"FileTextIcon\" | \"FlipHorizontalIcon\" | \"FlipVerticalIcon\" | \"FolderIcon\" | \"FolderOpenIcon\" | \"FolderPlusIcon\" | \"FolderSearchIcon\" | \"FrameIcon\" | \"GitBranchIcon\" | \"GlobeIcon\" | \"HeartIcon\" | \"HelpCircleIcon\" | \"HomeIcon\" | \"ImageIcon\" | \"InboxIcon\" | \"InfoIcon\" | \"ItalicIcon\" | \"KeyboardIcon\" | \"LanguagesIcon\" | \"LayoutGridIcon\" | \"LayoutIcon\" | \"LightbulbIcon\" | \"LinkIcon\" | \"ListFilterIcon\" | \"ListIcon\" | \"Loader2Icon\" | \"LogOutIcon\" | \"MailCheckIcon\" | \"MailIcon\" | \"MapIcon\" | \"MaximizeIcon\" | \"MenuIcon\" | \"MessageSquareIcon\" | \"MicIcon\" | \"MinimizeIcon\" | \"MinusIcon\" | \"MonitorIcon\" | \"MoonIcon\" | \"MoreHorizontalIcon\" | \"MoreVerticalIcon\" | \"MousePointerIcon\" | \"OctagonXIcon\" | \"PaletteIcon\" | \"PanelLeftIcon\" | \"PaperclipIcon\" | \"PenToolIcon\" | \"PencilIcon\" | \"PieChartIcon\" | \"PlusIcon\" | \"RadioIcon\" | \"RefreshCwIcon\" | \"RotateCwIcon\" | \"SaveIcon\" | \"ScissorsIcon\" | \"Search\" | \"SearchIcon\" | \"SendIcon\" | \"ServerIcon\" | \"Settings2Icon\" | \"SettingsIcon\" | \"ShareIcon\" | \"ShieldIcon\" | \"ShoppingBagIcon\" | \"SlidersHorizontalIcon\" | \"SmileIcon\" | \"SparklesIcon\" | \"StarIcon\" | \"SunIcon\" | \"TableIcon\" | \"TagIcon\" | \"TerminalIcon\" | \"TerminalSquareIcon\" | \"Trash2Icon\" | \"TrashIcon\" | \"TrendingUpIcon\" | \"TriangleAlertIcon\" | \"UnderlineIcon\" | \"UploadCloudIcon\" | \"UploadIcon\" | \"UserIcon\" | \"UserRoundXIcon\" | \"VolumeX\" | \"WalletIcon\" | \"WandIcon\" | \"XIcon\" | \"ZapIcon\" | \"ZoomInIcon\" | \"ZoomOutIcon\";\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/AppWindowIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as AppWindowIcon } from 'phosphor-svelte/lib/AppWindow';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/ArchiveIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as ArchiveIcon } from 'phosphor-svelte/lib/Archive';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/ArrowCircleLeftIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as ArrowCircleLeftIcon } from 'phosphor-svelte/lib/ArrowCircleLeft';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/ArrowClockwiseIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as ArrowClockwiseIcon } from 'phosphor-svelte/lib/ArrowClockwise';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/ArrowDownIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as ArrowDownIcon } from 'phosphor-svelte/lib/ArrowDown';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/ArrowLeftIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as ArrowLeftIcon } from 'phosphor-svelte/lib/ArrowLeft';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/ArrowRightIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as ArrowRightIcon } from 'phosphor-svelte/lib/ArrowRight';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/ArrowSquareOutIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as ArrowSquareOutIcon } from 'phosphor-svelte/lib/ArrowSquareOut';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/ArrowUpIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as ArrowUpIcon } from 'phosphor-svelte/lib/ArrowUp';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/ArrowUpRightIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as ArrowUpRightIcon } from 'phosphor-svelte/lib/ArrowUpRight';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/ArrowsHorizontalIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as ArrowsHorizontalIcon } from 'phosphor-svelte/lib/ArrowsHorizontal';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/ArrowsVerticalIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as ArrowsVerticalIcon } from 'phosphor-svelte/lib/ArrowsVertical';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/BagIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as BagIcon } from 'phosphor-svelte/lib/Bag';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/BankIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as BankIcon } from 'phosphor-svelte/lib/Bank';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/BellIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as BellIcon } from 'phosphor-svelte/lib/Bell';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/BluetoothIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as BluetoothIcon } from 'phosphor-svelte/lib/Bluetooth';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/BookOpenIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as BookOpenIcon } from 'phosphor-svelte/lib/BookOpen';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/BookmarkIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as BookmarkIcon } from 'phosphor-svelte/lib/Bookmark';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/CalculatorIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as CalculatorIcon } from 'phosphor-svelte/lib/Calculator';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/CalendarBlankIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as CalendarBlankIcon } from 'phosphor-svelte/lib/CalendarBlank';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/CalendarIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as CalendarIcon } from 'phosphor-svelte/lib/Calendar';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/CalendarPlusIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as CalendarPlusIcon } from 'phosphor-svelte/lib/CalendarPlus';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/CaretDownIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as CaretDownIcon } from 'phosphor-svelte/lib/CaretDown';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/CaretLeftIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as CaretLeftIcon } from 'phosphor-svelte/lib/CaretLeft';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/CaretRightIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as CaretRightIcon } from 'phosphor-svelte/lib/CaretRight';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/CaretUpDownIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as CaretUpDownIcon } from 'phosphor-svelte/lib/CaretUpDown';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/CaretUpIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as CaretUpIcon } from 'phosphor-svelte/lib/CaretUp';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/ChartBarIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as ChartBarIcon } from 'phosphor-svelte/lib/ChartBar';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/ChartLineIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as ChartLineIcon } from 'phosphor-svelte/lib/ChartLine';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/ChartPieIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as ChartPieIcon } from 'phosphor-svelte/lib/ChartPie';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/ChatCircleIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as ChatCircleIcon } from 'phosphor-svelte/lib/ChatCircle';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/CheckCircleIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as CheckCircleIcon } from 'phosphor-svelte/lib/CheckCircle';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/CheckIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as CheckIcon } from 'phosphor-svelte/lib/Check';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/CircleDashedIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as CircleDashedIcon } from 'phosphor-svelte/lib/CircleDashed';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/CircleIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as CircleIcon } from 'phosphor-svelte/lib/Circle';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/ClipboardIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as ClipboardIcon } from 'phosphor-svelte/lib/Clipboard';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/ClockIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as ClockIcon } from 'phosphor-svelte/lib/Clock';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/CloudArrowUpIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as CloudArrowUpIcon } from 'phosphor-svelte/lib/CloudArrowUp';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/CodeIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as CodeIcon } from 'phosphor-svelte/lib/Code';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/CopyIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as CopyIcon } from 'phosphor-svelte/lib/Copy';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/CornersInIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as CornersInIcon } from 'phosphor-svelte/lib/CornersIn';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/CornersOutIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as CornersOutIcon } from 'phosphor-svelte/lib/CornersOut';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/CreditCardIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as CreditCardIcon } from 'phosphor-svelte/lib/CreditCard';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/CropIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as CropIcon } from 'phosphor-svelte/lib/Crop';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/CubeIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as CubeIcon } from 'phosphor-svelte/lib/Cube';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/CurrencyCircleDollarIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as CurrencyCircleDollarIcon } from 'phosphor-svelte/lib/CurrencyCircleDollar';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/DotsThreeIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as DotsThreeIcon } from 'phosphor-svelte/lib/DotsThree';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/DotsThreeOutlineIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as DotsThreeOutlineIcon } from 'phosphor-svelte/lib/DotsThreeOutline';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/DotsThreeVerticalIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as DotsThreeVerticalIcon } from 'phosphor-svelte/lib/DotsThreeVertical';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/DownloadIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as DownloadIcon } from 'phosphor-svelte/lib/Download';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/EnvelopeIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as EnvelopeIcon } from 'phosphor-svelte/lib/Envelope';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/EyeIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as EyeIcon } from 'phosphor-svelte/lib/Eye';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/EyeSlashIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as EyeSlashIcon } from 'phosphor-svelte/lib/EyeSlash';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/FileCodeIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as FileCodeIcon } from 'phosphor-svelte/lib/FileCode';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/FileIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as FileIcon } from 'phosphor-svelte/lib/File';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/FileTextIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as FileTextIcon } from 'phosphor-svelte/lib/FileText';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/FloppyDiskIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as FloppyDiskIcon } from 'phosphor-svelte/lib/FloppyDisk';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/FolderIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as FolderIcon } from 'phosphor-svelte/lib/Folder';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/FolderOpenIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as FolderOpenIcon } from 'phosphor-svelte/lib/FolderOpen';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/FolderPlusIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as FolderPlusIcon } from 'phosphor-svelte/lib/FolderPlus';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/GearIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as GearIcon } from 'phosphor-svelte/lib/Gear';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/GitBranchIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as GitBranchIcon } from 'phosphor-svelte/lib/GitBranch';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/GlobeIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as GlobeIcon } from 'phosphor-svelte/lib/Globe';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/GridFourIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as GridFourIcon } from 'phosphor-svelte/lib/GridFour';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/HandPointingIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as HandPointingIcon } from 'phosphor-svelte/lib/HandPointing';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/HardDrivesIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as HardDrivesIcon } from 'phosphor-svelte/lib/HardDrives';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/HeartIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as HeartIcon } from 'phosphor-svelte/lib/Heart';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/HouseIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as HouseIcon } from 'phosphor-svelte/lib/House';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/ImageIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as ImageIcon } from 'phosphor-svelte/lib/Image';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/InfoIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as InfoIcon } from 'phosphor-svelte/lib/Info';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/KeyboardIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as KeyboardIcon } from 'phosphor-svelte/lib/Keyboard';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/LayoutIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as LayoutIcon } from 'phosphor-svelte/lib/Layout';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/LightbulbIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as LightbulbIcon } from 'phosphor-svelte/lib/Lightbulb';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/LightningIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as LightningIcon } from 'phosphor-svelte/lib/Lightning';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/LinkIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as LinkIcon } from 'phosphor-svelte/lib/Link';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/ListIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as ListIcon } from 'phosphor-svelte/lib/List';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/ListPlusIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as ListPlusIcon } from 'phosphor-svelte/lib/ListPlus';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/MagicWandIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as MagicWandIcon } from 'phosphor-svelte/lib/MagicWand';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/MagnifyingGlassIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as MagnifyingGlassIcon } from 'phosphor-svelte/lib/MagnifyingGlass';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/MagnifyingGlassMinusIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as MagnifyingGlassMinusIcon } from 'phosphor-svelte/lib/MagnifyingGlassMinus';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/MagnifyingGlassPlusIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as MagnifyingGlassPlusIcon } from 'phosphor-svelte/lib/MagnifyingGlassPlus';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/MapTrifoldIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as MapTrifoldIcon } from 'phosphor-svelte/lib/MapTrifold';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/MicrophoneIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as MicrophoneIcon } from 'phosphor-svelte/lib/Microphone';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/MinusIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as MinusIcon } from 'phosphor-svelte/lib/Minus';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/MonitorIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as MonitorIcon } from 'phosphor-svelte/lib/Monitor';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/MoonIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as MoonIcon } from 'phosphor-svelte/lib/Moon';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/PaletteIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as PaletteIcon } from 'phosphor-svelte/lib/Palette';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/PaperPlaneTiltIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as PaperPlaneTiltIcon } from 'phosphor-svelte/lib/PaperPlaneTilt';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/PaperclipIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as PaperclipIcon } from 'phosphor-svelte/lib/Paperclip';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/PencilIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as PencilIcon } from 'phosphor-svelte/lib/Pencil';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/PlusIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as PlusIcon } from 'phosphor-svelte/lib/Plus';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/PulseIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as PulseIcon } from 'phosphor-svelte/lib/Pulse';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/QuestionIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as QuestionIcon } from 'phosphor-svelte/lib/Question';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/RecordIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RecordIcon } from 'phosphor-svelte/lib/Record';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/RobotIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RobotIcon } from 'phosphor-svelte/lib/Robot';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/ScissorsIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as ScissorsIcon } from 'phosphor-svelte/lib/Scissors';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/ShareIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as ShareIcon } from 'phosphor-svelte/lib/Share';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/ShieldIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as ShieldIcon } from 'phosphor-svelte/lib/Shield';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/SidebarIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as SidebarIcon } from 'phosphor-svelte/lib/Sidebar';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/SignOutIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as SignOutIcon } from 'phosphor-svelte/lib/SignOut';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/SlidersHorizontalIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as SlidersHorizontalIcon } from 'phosphor-svelte/lib/SlidersHorizontal';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/SmileyIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as SmileyIcon } from 'phosphor-svelte/lib/Smiley';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/SparkleIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as SparkleIcon } from 'phosphor-svelte/lib/Sparkle';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/SpeakerSlashIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as SpeakerSlashIcon } from 'phosphor-svelte/lib/SpeakerSlash';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/SpinnerIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as SpinnerIcon } from 'phosphor-svelte/lib/Spinner';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/StarIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as StarIcon } from 'phosphor-svelte/lib/Star';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/SunIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as SunIcon } from 'phosphor-svelte/lib/Sun';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/TableIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as TableIcon } from 'phosphor-svelte/lib/Table';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/TagIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as TagIcon } from 'phosphor-svelte/lib/Tag';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/TerminalIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as TerminalIcon } from 'phosphor-svelte/lib/Terminal';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/TextBIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as TextBIcon } from 'phosphor-svelte/lib/TextB';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/TextItalicIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as TextItalicIcon } from 'phosphor-svelte/lib/TextItalic';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/TextTIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as TextTIcon } from 'phosphor-svelte/lib/TextT';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/TextUnderlineIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as TextUnderlineIcon } from 'phosphor-svelte/lib/TextUnderline';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/TranslateIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as TranslateIcon } from 'phosphor-svelte/lib/Translate';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/TrashIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as TrashIcon } from 'phosphor-svelte/lib/Trash';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/TrayIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as TrayIcon } from 'phosphor-svelte/lib/Tray';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/TrendUpIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as TrendUpIcon } from 'phosphor-svelte/lib/TrendUp';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/UploadIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as UploadIcon } from 'phosphor-svelte/lib/Upload';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/UserIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as UserIcon } from 'phosphor-svelte/lib/User';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/UserMinusIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as UserMinusIcon } from 'phosphor-svelte/lib/UserMinus';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/WalletIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as WalletIcon } from 'phosphor-svelte/lib/Wallet';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/WarningCircleIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as WarningCircleIcon } from 'phosphor-svelte/lib/WarningCircle';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/WarningIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as WarningIcon } from 'phosphor-svelte/lib/Warning';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/XCircleIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as XCircleIcon } from 'phosphor-svelte/lib/XCircle';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/XIcon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as XIcon } from 'phosphor-svelte/lib/X';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__phosphor__/index.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport type PhosphorIconName = \"AppWindowIcon\" | \"ArchiveIcon\" | \"ArrowCircleLeftIcon\" | \"ArrowClockwiseIcon\" | \"ArrowDownIcon\" | \"ArrowLeftIcon\" | \"ArrowRightIcon\" | \"ArrowSquareOutIcon\" | \"ArrowUpIcon\" | \"ArrowUpRightIcon\" | \"ArrowsHorizontalIcon\" | \"ArrowsVerticalIcon\" | \"BagIcon\" | \"BankIcon\" | \"BellIcon\" | \"BluetoothIcon\" | \"BookOpenIcon\" | \"BookmarkIcon\" | \"CalculatorIcon\" | \"CalendarBlankIcon\" | \"CalendarIcon\" | \"CalendarPlusIcon\" | \"CaretDownIcon\" | \"CaretLeftIcon\" | \"CaretRightIcon\" | \"CaretUpDownIcon\" | \"CaretUpIcon\" | \"ChartBarIcon\" | \"ChartLineIcon\" | \"ChartPieIcon\" | \"ChatCircleIcon\" | \"CheckCircleIcon\" | \"CheckIcon\" | \"CircleDashedIcon\" | \"CircleIcon\" | \"ClipboardIcon\" | \"ClockIcon\" | \"CloudArrowUpIcon\" | \"CodeIcon\" | \"CopyIcon\" | \"CornersInIcon\" | \"CornersOutIcon\" | \"CreditCardIcon\" | \"CropIcon\" | \"CubeIcon\" | \"CurrencyCircleDollarIcon\" | \"DotsThreeIcon\" | \"DotsThreeOutlineIcon\" | \"DotsThreeVerticalIcon\" | \"DownloadIcon\" | \"EnvelopeIcon\" | \"EyeIcon\" | \"EyeSlashIcon\" | \"FileCodeIcon\" | \"FileIcon\" | \"FileTextIcon\" | \"FloppyDiskIcon\" | \"FolderIcon\" | \"FolderOpenIcon\" | \"FolderPlusIcon\" | \"GearIcon\" | \"GitBranchIcon\" | \"GlobeIcon\" | \"GridFourIcon\" | \"HandPointingIcon\" | \"HardDrivesIcon\" | \"HeartIcon\" | \"HouseIcon\" | \"ImageIcon\" | \"InfoIcon\" | \"KeyboardIcon\" | \"LayoutIcon\" | \"LightbulbIcon\" | \"LightningIcon\" | \"LinkIcon\" | \"ListIcon\" | \"ListPlusIcon\" | \"MagicWandIcon\" | \"MagnifyingGlassIcon\" | \"MagnifyingGlassMinusIcon\" | \"MagnifyingGlassPlusIcon\" | \"MapTrifoldIcon\" | \"MicrophoneIcon\" | \"MinusIcon\" | \"MonitorIcon\" | \"MoonIcon\" | \"PaletteIcon\" | \"PaperPlaneTiltIcon\" | \"PaperclipIcon\" | \"PencilIcon\" | \"PlusIcon\" | \"PulseIcon\" | \"QuestionIcon\" | \"RecordIcon\" | \"RobotIcon\" | \"ScissorsIcon\" | \"ShareIcon\" | \"ShieldIcon\" | \"SidebarIcon\" | \"SignOutIcon\" | \"SlidersHorizontalIcon\" | \"SmileyIcon\" | \"SparkleIcon\" | \"SpeakerSlashIcon\" | \"SpinnerIcon\" | \"StarIcon\" | \"SunIcon\" | \"TableIcon\" | \"TagIcon\" | \"TerminalIcon\" | \"TextBIcon\" | \"TextItalicIcon\" | \"TextTIcon\" | \"TextUnderlineIcon\" | \"TranslateIcon\" | \"TrashIcon\" | \"TrayIcon\" | \"TrendUpIcon\" | \"UploadIcon\" | \"UserIcon\" | \"UserMinusIcon\" | \"WalletIcon\" | \"WarningCircleIcon\" | \"WarningIcon\" | \"XCircleIcon\" | \"XIcon\";\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiAddBoxLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiAddBoxLine } from 'remixicon-svelte/icons/add-box-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiAddLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiAddLine } from 'remixicon-svelte/icons/add-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiAlertLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiAlertLine } from 'remixicon-svelte/icons/alert-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiArchiveLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiArchiveLine } from 'remixicon-svelte/icons/archive-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiArrowDownLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiArrowDownLine } from 'remixicon-svelte/icons/arrow-down-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiArrowDownSLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiArrowDownSLine } from 'remixicon-svelte/icons/arrow-down-s-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiArrowLeftCircleLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiArrowLeftCircleLine } from 'remixicon-svelte/icons/arrow-left-circle-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiArrowLeftLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiArrowLeftLine } from 'remixicon-svelte/icons/arrow-left-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiArrowLeftSLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiArrowLeftSLine } from 'remixicon-svelte/icons/arrow-left-s-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiArrowRightLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiArrowRightLine } from 'remixicon-svelte/icons/arrow-right-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiArrowRightSLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiArrowRightSLine } from 'remixicon-svelte/icons/arrow-right-s-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiArrowRightUpLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiArrowRightUpLine } from 'remixicon-svelte/icons/arrow-right-up-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiArrowUpDownLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiArrowUpDownLine } from 'remixicon-svelte/icons/arrow-up-down-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiArrowUpLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiArrowUpLine } from 'remixicon-svelte/icons/arrow-up-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiArrowUpSLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiArrowUpSLine } from 'remixicon-svelte/icons/arrow-up-s-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiAttachmentLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiAttachmentLine } from 'remixicon-svelte/icons/attachment-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiBankCardLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiBankCardLine } from 'remixicon-svelte/icons/bank-card-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiBankLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiBankLine } from 'remixicon-svelte/icons/bank-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiBarChartLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiBarChartLine } from 'remixicon-svelte/icons/bar-chart-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiBluetoothLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiBluetoothLine } from 'remixicon-svelte/icons/bluetooth-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiBold.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiBold } from 'remixicon-svelte/icons/bold';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiBookOpenLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiBookOpenLine } from 'remixicon-svelte/icons/book-open-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiBookmarkLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiBookmarkLine } from 'remixicon-svelte/icons/bookmark-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiBox1Line.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiBox1Line } from 'remixicon-svelte/icons/box-1-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiCalculatorLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiCalculatorLine } from 'remixicon-svelte/icons/calculator-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiCalendarCheckLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiCalendarCheckLine } from 'remixicon-svelte/icons/calendar-check-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiCalendarLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiCalendarLine } from 'remixicon-svelte/icons/calendar-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiChat1Line.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiChat1Line } from 'remixicon-svelte/icons/chat-1-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiCheckLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiCheckLine } from 'remixicon-svelte/icons/check-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiCheckboxCircleLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiCheckboxCircleLine } from 'remixicon-svelte/icons/checkbox-circle-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiCircleLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiCircleLine } from 'remixicon-svelte/icons/circle-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiClipboardLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiClipboardLine } from 'remixicon-svelte/icons/clipboard-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiCloseCircleLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiCloseCircleLine } from 'remixicon-svelte/icons/close-circle-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiCloseLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiCloseLine } from 'remixicon-svelte/icons/close-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiClosedCaptioningLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiClosedCaptioningLine } from 'remixicon-svelte/icons/closed-captioning-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiCloudLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiCloudLine } from 'remixicon-svelte/icons/cloud-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiCodeLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiCodeLine } from 'remixicon-svelte/icons/code-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiComputerLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiComputerLine } from 'remixicon-svelte/icons/computer-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiContractUpDownLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiContractUpDownLine } from 'remixicon-svelte/icons/contract-up-down-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiCropLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiCropLine } from 'remixicon-svelte/icons/crop-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiCursorLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiCursorLine } from 'remixicon-svelte/icons/cursor-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiDeleteBinLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiDeleteBinLine } from 'remixicon-svelte/icons/delete-bin-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiDownloadLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiDownloadLine } from 'remixicon-svelte/icons/download-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiEmotionLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiEmotionLine } from 'remixicon-svelte/icons/emotion-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiErrorWarningLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiErrorWarningLine } from 'remixicon-svelte/icons/error-warning-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiExpandDiagonalLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiExpandDiagonalLine } from 'remixicon-svelte/icons/expand-diagonal-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiExpandUpDownLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiExpandUpDownLine } from 'remixicon-svelte/icons/expand-up-down-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiExternalLinkLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiExternalLinkLine } from 'remixicon-svelte/icons/external-link-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiEyeLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiEyeLine } from 'remixicon-svelte/icons/eye-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiEyeOffLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiEyeOffLine } from 'remixicon-svelte/icons/eye-off-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiFileCodeLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiFileCodeLine } from 'remixicon-svelte/icons/file-code-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiFileCopyLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiFileCopyLine } from 'remixicon-svelte/icons/file-copy-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiFileLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiFileLine } from 'remixicon-svelte/icons/file-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiFileTextLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiFileTextLine } from 'remixicon-svelte/icons/file-text-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiFlashlightLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiFlashlightLine } from 'remixicon-svelte/icons/flashlight-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiFlipHorizontalLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiFlipHorizontalLine } from 'remixicon-svelte/icons/flip-horizontal-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiFlipVerticalLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiFlipVerticalLine } from 'remixicon-svelte/icons/flip-vertical-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiFolderAddLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiFolderAddLine } from 'remixicon-svelte/icons/folder-add-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiFolderLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiFolderLine } from 'remixicon-svelte/icons/folder-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiFolderOpenLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiFolderOpenLine } from 'remixicon-svelte/icons/folder-open-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiGitBranchLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiGitBranchLine } from 'remixicon-svelte/icons/git-branch-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiGlobalLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiGlobalLine } from 'remixicon-svelte/icons/global-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiGridLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiGridLine } from 'remixicon-svelte/icons/grid-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiHardDriveLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiHardDriveLine } from 'remixicon-svelte/icons/hard-drive-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiHeartLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiHeartLine } from 'remixicon-svelte/icons/heart-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiHomeLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiHomeLine } from 'remixicon-svelte/icons/home-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiImageLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiImageLine } from 'remixicon-svelte/icons/image-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiInboxLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiInboxLine } from 'remixicon-svelte/icons/inbox-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiInformationLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiInformationLine } from 'remixicon-svelte/icons/information-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiItalic.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiItalic } from 'remixicon-svelte/icons/italic';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiKeyboardLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiKeyboardLine } from 'remixicon-svelte/icons/keyboard-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiLayoutLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiLayoutLine } from 'remixicon-svelte/icons/layout-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiLightbulbLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiLightbulbLine } from 'remixicon-svelte/icons/lightbulb-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiLineChartLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiLineChartLine } from 'remixicon-svelte/icons/line-chart-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiLink.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiLink } from 'remixicon-svelte/icons/link';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiLinksLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiLinksLine } from 'remixicon-svelte/icons/links-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiListUnordered.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiListUnordered } from 'remixicon-svelte/icons/list-unordered';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiLoaderLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiLoaderLine } from 'remixicon-svelte/icons/loader-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiLogoutBoxLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiLogoutBoxLine } from 'remixicon-svelte/icons/logout-box-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiMagicLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiMagicLine } from 'remixicon-svelte/icons/magic-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiMailCheckLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiMailCheckLine } from 'remixicon-svelte/icons/mail-check-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiMailLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiMailLine } from 'remixicon-svelte/icons/mail-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiMapLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiMapLine } from 'remixicon-svelte/icons/map-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiMenuLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiMenuLine } from 'remixicon-svelte/icons/menu-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiMicLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiMicLine } from 'remixicon-svelte/icons/mic-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiMoneyDollarCircleLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiMoneyDollarCircleLine } from 'remixicon-svelte/icons/money-dollar-circle-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiMoonLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiMoonLine } from 'remixicon-svelte/icons/moon-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiMore2Line.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiMore2Line } from 'remixicon-svelte/icons/more-2-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiMoreLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiMoreLine } from 'remixicon-svelte/icons/more-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiNotificationLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiNotificationLine } from 'remixicon-svelte/icons/notification-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiPaletteLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiPaletteLine } from 'remixicon-svelte/icons/palette-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiPencilLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiPencilLine } from 'remixicon-svelte/icons/pencil-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiPieChartLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiPieChartLine } from 'remixicon-svelte/icons/pie-chart-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiPriceTagLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiPriceTagLine } from 'remixicon-svelte/icons/price-tag-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiPulseLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiPulseLine } from 'remixicon-svelte/icons/pulse-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiQuestionLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiQuestionLine } from 'remixicon-svelte/icons/question-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiRecordCircleLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiRecordCircleLine } from 'remixicon-svelte/icons/record-circle-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiRefreshLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiRefreshLine } from 'remixicon-svelte/icons/refresh-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiRobotLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiRobotLine } from 'remixicon-svelte/icons/robot-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiSaveLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiSaveLine } from 'remixicon-svelte/icons/save-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiScissorsLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiScissorsLine } from 'remixicon-svelte/icons/scissors-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiSearchEyeLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiSearchEyeLine } from 'remixicon-svelte/icons/search-eye-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiSearchLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiSearchLine } from 'remixicon-svelte/icons/search-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiSendPlaneLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiSendPlaneLine } from 'remixicon-svelte/icons/send-plane-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiServerLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiServerLine } from 'remixicon-svelte/icons/server-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiSettingsLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiSettingsLine } from 'remixicon-svelte/icons/settings-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiShareLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiShareLine } from 'remixicon-svelte/icons/share-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiShieldLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiShieldLine } from 'remixicon-svelte/icons/shield-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiShoppingBagLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiShoppingBagLine } from 'remixicon-svelte/icons/shopping-bag-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiSideBarLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiSideBarLine } from 'remixicon-svelte/icons/side-bar-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiSparklingLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiSparklingLine } from 'remixicon-svelte/icons/sparkling-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiStarLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiStarLine } from 'remixicon-svelte/icons/star-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiSubtractLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiSubtractLine } from 'remixicon-svelte/icons/subtract-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiSunLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiSunLine } from 'remixicon-svelte/icons/sun-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiTableLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiTableLine } from 'remixicon-svelte/icons/table-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiTerminalBoxLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiTerminalBoxLine } from 'remixicon-svelte/icons/terminal-box-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiTimeLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiTimeLine } from 'remixicon-svelte/icons/time-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiTranslate.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiTranslate } from 'remixicon-svelte/icons/translate';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiUnderline.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiUnderline } from 'remixicon-svelte/icons/underline';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiUploadCloudLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiUploadCloudLine } from 'remixicon-svelte/icons/upload-cloud-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiUploadLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiUploadLine } from 'remixicon-svelte/icons/upload-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiUserLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiUserLine } from 'remixicon-svelte/icons/user-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiUserMinusLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiUserMinusLine } from 'remixicon-svelte/icons/user-minus-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiUserUnfollowLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiUserUnfollowLine } from 'remixicon-svelte/icons/user-unfollow-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiVolumeMuteLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiVolumeMuteLine } from 'remixicon-svelte/icons/volume-mute-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiWalletLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiWalletLine } from 'remixicon-svelte/icons/wallet-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiWindowLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiWindowLine } from 'remixicon-svelte/icons/window-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/RiZoomInLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { default as RiZoomInLine } from 'remixicon-svelte/icons/zoom-in-line';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__remixicon__/index.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport type RemixIconIconName = \"RiAddBoxLine\" | \"RiAddLine\" | \"RiAlertLine\" | \"RiArchiveLine\" | \"RiArrowDownLine\" | \"RiArrowDownSLine\" | \"RiArrowLeftCircleLine\" | \"RiArrowLeftLine\" | \"RiArrowLeftSLine\" | \"RiArrowRightLine\" | \"RiArrowRightSLine\" | \"RiArrowRightUpLine\" | \"RiArrowUpDownLine\" | \"RiArrowUpLine\" | \"RiArrowUpSLine\" | \"RiAttachmentLine\" | \"RiBankCardLine\" | \"RiBankLine\" | \"RiBarChartLine\" | \"RiBluetoothLine\" | \"RiBold\" | \"RiBookOpenLine\" | \"RiBookmarkLine\" | \"RiBox1Line\" | \"RiCalculatorLine\" | \"RiCalendarCheckLine\" | \"RiCalendarLine\" | \"RiChat1Line\" | \"RiCheckLine\" | \"RiCheckboxCircleLine\" | \"RiCircleLine\" | \"RiClipboardLine\" | \"RiCloseCircleLine\" | \"RiCloseLine\" | \"RiClosedCaptioningLine\" | \"RiCloudLine\" | \"RiCodeLine\" | \"RiComputerLine\" | \"RiContractUpDownLine\" | \"RiCropLine\" | \"RiCursorLine\" | \"RiDeleteBinLine\" | \"RiDownloadLine\" | \"RiEmotionLine\" | \"RiErrorWarningLine\" | \"RiExpandDiagonalLine\" | \"RiExpandUpDownLine\" | \"RiExternalLinkLine\" | \"RiEyeLine\" | \"RiEyeOffLine\" | \"RiFileCodeLine\" | \"RiFileCopyLine\" | \"RiFileLine\" | \"RiFileTextLine\" | \"RiFlashlightLine\" | \"RiFlipHorizontalLine\" | \"RiFlipVerticalLine\" | \"RiFolderAddLine\" | \"RiFolderLine\" | \"RiFolderOpenLine\" | \"RiGitBranchLine\" | \"RiGlobalLine\" | \"RiGridLine\" | \"RiHardDriveLine\" | \"RiHeartLine\" | \"RiHomeLine\" | \"RiImageLine\" | \"RiInboxLine\" | \"RiInformationLine\" | \"RiItalic\" | \"RiKeyboardLine\" | \"RiLayoutLine\" | \"RiLightbulbLine\" | \"RiLineChartLine\" | \"RiLink\" | \"RiLinksLine\" | \"RiListUnordered\" | \"RiLoaderLine\" | \"RiLogoutBoxLine\" | \"RiMagicLine\" | \"RiMailCheckLine\" | \"RiMailLine\" | \"RiMapLine\" | \"RiMenuLine\" | \"RiMicLine\" | \"RiMoneyDollarCircleLine\" | \"RiMoonLine\" | \"RiMore2Line\" | \"RiMoreLine\" | \"RiNotificationLine\" | \"RiPaletteLine\" | \"RiPencilLine\" | \"RiPieChartLine\" | \"RiPriceTagLine\" | \"RiPulseLine\" | \"RiQuestionLine\" | \"RiRecordCircleLine\" | \"RiRefreshLine\" | \"RiRobotLine\" | \"RiSaveLine\" | \"RiScissorsLine\" | \"RiSearchEyeLine\" | \"RiSearchLine\" | \"RiSendPlaneLine\" | \"RiServerLine\" | \"RiSettingsLine\" | \"RiShareLine\" | \"RiShieldLine\" | \"RiShoppingBagLine\" | \"RiSideBarLine\" | \"RiSparklingLine\" | \"RiStarLine\" | \"RiSubtractLine\" | \"RiSunLine\" | \"RiTableLine\" | \"RiTerminalBoxLine\" | \"RiTimeLine\" | \"RiTranslate\" | \"RiUnderline\" | \"RiUploadCloudLine\" | \"RiUploadLine\" | \"RiUserLine\" | \"RiUserMinusLine\" | \"RiUserUnfollowLine\" | \"RiVolumeMuteLine\" | \"RiWalletLine\" | \"RiWindowLine\" | \"RiZoomInLine\";\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconActivity.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconActivity } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconAdjustmentsHorizontal.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconAdjustmentsHorizontal } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconAlertOctagon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconAlertOctagon } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconAlertTriangle.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconAlertTriangle } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconAppWindow.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconAppWindow } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconArchive.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconArchive } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconArrowDown.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconArrowDown } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconArrowLeft.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconArrowLeft } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconArrowRight.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconArrowRight } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconArrowUp.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconArrowUp } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconArrowUpRight.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconArrowUpRight } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconBell.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconBell } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconBluetooth.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconBluetooth } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconBold.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconBold } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconBolt.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconBolt } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconBook.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconBook } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconBookmark.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconBookmark } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconBorderCorners.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconBorderCorners } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconBox.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconBox } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconBrandJavascript.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconBrandJavascript } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconBuildingBank.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconBuildingBank } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconBulb.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconBulb } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconCalculator.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconCalculator } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconCalendar.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconCalendar } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconCalendarPlus.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconCalendarPlus } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconChartBar.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconChartBar } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconChartLine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconChartLine } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconChartPie.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconChartPie } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconCheck.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconCheck } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconChevronDown.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconChevronDown } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconChevronLeft.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconChevronLeft } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconChevronRight.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconChevronRight } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconChevronUp.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconChevronUp } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconCircle.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconCircle } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconCircleArrowLeft.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconCircleArrowLeft } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconCircleCheck.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconCircleCheck } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconCircleCheckFilled.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconCircleCheckFilled } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconCircleDashed.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconCircleDashed } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconClipboard.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconClipboard } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconClock.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconClock } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconClockHour2.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconClockHour2 } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconCloudCog.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconCloudCog } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconCloudUpload.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconCloudUpload } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconCode.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconCode } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconCoin.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconCoin } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconCopy.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconCopy } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconCreditCard.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconCreditCard } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconCut.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconCut } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconDeviceDesktop.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconDeviceDesktop } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconDeviceFloppy.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconDeviceFloppy } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconDots.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconDots } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconDotsVertical.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconDotsVertical } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconDownload.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconDownload } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconExclamationCircle.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconExclamationCircle } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconExternalLink.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconExternalLink } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconEye.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconEye } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconEyeClosed.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconEyeClosed } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconFile.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconFile } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconFileCode.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconFileCode } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconFileText.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconFileText } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconFilterPlus.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconFilterPlus } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconFlipHorizontal.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconFlipHorizontal } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconFlipVertical.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconFlipVertical } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconFolder.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconFolder } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconFolderOpen.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconFolderOpen } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconFolderPlus.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconFolderPlus } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconFolderSearch.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconFolderSearch } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconFrame.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconFrame } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconGitBranch.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconGitBranch } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconHeadphones.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconHeadphones } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconHeart.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconHeart } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconHelpCircle.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconHelpCircle } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconHome.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconHome } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconInbox.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconInbox } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconInfoCircle.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconInfoCircle } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconItalic.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconItalic } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconKeyboard.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconKeyboard } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconLanguage.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconLanguage } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconLayout.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconLayout } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconLayoutGrid.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconLayoutGrid } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconLayoutSidebar.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconLayoutSidebar } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconLink.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconLink } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconList.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconList } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconLoader.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconLoader } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconLogout.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconLogout } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconMail.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconMail } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconMailCheck.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconMailCheck } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconMap.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconMap } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconMenu.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconMenu } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconMenu2.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconMenu2 } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconMessage.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconMessage } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconMicrophone.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconMicrophone } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconMinimize.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconMinimize } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconMinus.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconMinus } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconMoodSmile.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconMoodSmile } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconMoon.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconMoon } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconPalette.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconPalette } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconPaperclip.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconPaperclip } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconPencil.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconPencil } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconPhoto.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconPhoto } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconPlayerRecordFilled.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconPlayerRecordFilled } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconPlus.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconPlus } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconPointer.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconPointer } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconRefresh.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconRefresh } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconRobot.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconRobot } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconRosetteDiscountCheck.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconRosetteDiscountCheck } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconRotateClockwise2.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconRotateClockwise2 } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconSearch.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconSearch } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconSelector.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconSelector } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconSend.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconSend } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconServer.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconServer } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconServerSpark.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconServerSpark } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconSettings.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconSettings } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconShare.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconShare } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconShare2.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconShare2 } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconShield.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconShield } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconShoppingBag.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconShoppingBag } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconSparkles.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconSparkles } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconStar.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconStar } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconSun.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconSun } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconTable.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconTable } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconTag.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconTag } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconTerminal.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconTerminal } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconTerminal2.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconTerminal2 } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconTextCaption.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconTextCaption } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconTrash.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconTrash } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconTrendingUp.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconTrendingUp } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconUnderline.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconUnderline } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconUpload.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconUpload } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconUser.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconUser } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconUserX.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconUserX } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconVolume.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconVolume } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconWallet.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconWallet } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconWand.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconWand } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconWaveSine.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconWaveSine } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconWorld.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconWorld } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconX.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconX } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconZoomIn.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconZoomIn } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/IconZoomOut.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport { IconZoomOut } from '@tabler/icons-svelte';\n"
  },
  {
    "path": "docs/src/lib/registry/icons/__tabler__/index.ts",
    "content": "// Auto-generated by scripts/build-icons.ts\nexport type TablerIconName = \"IconActivity\" | \"IconAdjustmentsHorizontal\" | \"IconAlertOctagon\" | \"IconAlertTriangle\" | \"IconAppWindow\" | \"IconArchive\" | \"IconArrowDown\" | \"IconArrowLeft\" | \"IconArrowRight\" | \"IconArrowUp\" | \"IconArrowUpRight\" | \"IconBell\" | \"IconBluetooth\" | \"IconBold\" | \"IconBolt\" | \"IconBook\" | \"IconBookmark\" | \"IconBorderCorners\" | \"IconBox\" | \"IconBrandJavascript\" | \"IconBuildingBank\" | \"IconBulb\" | \"IconCalculator\" | \"IconCalendar\" | \"IconCalendarPlus\" | \"IconChartBar\" | \"IconChartLine\" | \"IconChartPie\" | \"IconCheck\" | \"IconChevronDown\" | \"IconChevronLeft\" | \"IconChevronRight\" | \"IconChevronUp\" | \"IconCircle\" | \"IconCircleArrowLeft\" | \"IconCircleCheck\" | \"IconCircleCheckFilled\" | \"IconCircleDashed\" | \"IconClipboard\" | \"IconClock\" | \"IconClockHour2\" | \"IconCloudCog\" | \"IconCloudUpload\" | \"IconCode\" | \"IconCoin\" | \"IconCopy\" | \"IconCreditCard\" | \"IconCut\" | \"IconDeviceDesktop\" | \"IconDeviceFloppy\" | \"IconDots\" | \"IconDotsVertical\" | \"IconDownload\" | \"IconExclamationCircle\" | \"IconExternalLink\" | \"IconEye\" | \"IconEyeClosed\" | \"IconFile\" | \"IconFileCode\" | \"IconFileText\" | \"IconFilterPlus\" | \"IconFlipHorizontal\" | \"IconFlipVertical\" | \"IconFolder\" | \"IconFolderOpen\" | \"IconFolderPlus\" | \"IconFolderSearch\" | \"IconFrame\" | \"IconGitBranch\" | \"IconHeadphones\" | \"IconHeart\" | \"IconHelpCircle\" | \"IconHome\" | \"IconInbox\" | \"IconInfoCircle\" | \"IconItalic\" | \"IconKeyboard\" | \"IconLanguage\" | \"IconLayout\" | \"IconLayoutGrid\" | \"IconLayoutSidebar\" | \"IconLink\" | \"IconList\" | \"IconLoader\" | \"IconLogout\" | \"IconMail\" | \"IconMailCheck\" | \"IconMap\" | \"IconMenu\" | \"IconMenu2\" | \"IconMessage\" | \"IconMicrophone\" | \"IconMinimize\" | \"IconMinus\" | \"IconMoodSmile\" | \"IconMoon\" | \"IconPalette\" | \"IconPaperclip\" | \"IconPencil\" | \"IconPhoto\" | \"IconPlayerRecordFilled\" | \"IconPlus\" | \"IconPointer\" | \"IconRefresh\" | \"IconRobot\" | \"IconRosetteDiscountCheck\" | \"IconRotateClockwise2\" | \"IconSearch\" | \"IconSelector\" | \"IconSend\" | \"IconServer\" | \"IconServerSpark\" | \"IconSettings\" | \"IconShare\" | \"IconShare2\" | \"IconShield\" | \"IconShoppingBag\" | \"IconSparkles\" | \"IconStar\" | \"IconSun\" | \"IconTable\" | \"IconTag\" | \"IconTerminal\" | \"IconTerminal2\" | \"IconTextCaption\" | \"IconTrash\" | \"IconTrendingUp\" | \"IconUnderline\" | \"IconUpload\" | \"IconUser\" | \"IconUserX\" | \"IconVolume\" | \"IconWallet\" | \"IconWand\" | \"IconWaveSine\" | \"IconWorld\" | \"IconX\" | \"IconZoomIn\" | \"IconZoomOut\";\n"
  },
  {
    "path": "docs/src/lib/registry/icons/logos/hugeicons.svelte",
    "content": "<script lang=\"ts\">\n\timport type { SVGAttributes } from \"svelte/elements\";\n\n\tlet { ...restProps }: SVGAttributes<SVGSVGElement> = $props();\n</script>\n\n<svg\n\txmlns=\"http://www.w3.org/2000/svg\"\n\twidth=\"128\"\n\theight=\"128\"\n\tviewBox=\"0 0 24 24\"\n\tfill=\"none\"\n\tstroke=\"currentColor\"\n\tstroke-linecap=\"round\"\n\tstroke-linejoin=\"round\"\n\tstroke-width=\"2\"\n\trole=\"img\"\n\tcolor=\"currentColor\"\n\t{...restProps}\n>\n\t<path d=\"M2 9.5H22\" stroke=\"currentColor\" />\n\t<path\n\t\td=\"M20.5 9.5H3.5L4.23353 15.3682C4.59849 18.2879 4.78097 19.7477 5.77343 20.6239C6.76589 21.5 8.23708 21.5 11.1795 21.5H12.8205C15.7629 21.5 17.2341 21.5 18.2266 20.6239C19.219 19.7477 19.4015 18.2879 19.7665 15.3682L20.5 9.5Z\"\n\t\tstroke=\"currentColor\"\n\t/>\n\t<path d=\"M5 9C5 5.41015 8.13401 2.5 12 2.5C15.866 2.5 19 5.41015 19 9\" stroke=\"currentColor\" />\n</svg>\n"
  },
  {
    "path": "docs/src/lib/registry/icons/logos/lucide.svelte",
    "content": "<script lang=\"ts\">\n\timport type { SVGAttributes } from \"svelte/elements\";\n\n\tlet { ...restProps }: SVGAttributes<SVGSVGElement> = $props();\n</script>\n\n<svg\n\txmlns=\"http://www.w3.org/2000/svg\"\n\twidth=\"24\"\n\theight=\"24\"\n\tfill=\"none\"\n\tstroke=\"currentColor\"\n\tstroke-linecap=\"round\"\n\tstroke-linejoin=\"round\"\n\tstroke-width=\"2\"\n\tviewBox=\"0 0 24 24\"\n\trole=\"img\"\n\tcolor=\"currentColor\"\n\t{...restProps}\n>\n\t<path stroke=\"currentColor\" d=\"M14 12a4 4 0 0 0-8 0 8 8 0 1 0 16 0 11.97 11.97 0 0 0-4-8.944\" />\n\t<path stroke=\"currentColor\" d=\"M10 12a4 4 0 0 0 8 0 8 8 0 1 0-16 0 11.97 11.97 0 0 0 4.063 9\" />\n</svg>\n"
  },
  {
    "path": "docs/src/lib/registry/icons/logos/phosphor.svelte",
    "content": "<script lang=\"ts\">\n\timport type { SVGAttributes } from \"svelte/elements\";\n\n\tlet { ...restProps }: SVGAttributes<SVGSVGElement> = $props();\n</script>\n\n<svg\n\txmlns=\"http://www.w3.org/2000/svg\"\n\tviewBox=\"0 0 32 32\"\n\twidth=\"32\"\n\theight=\"32\"\n\trole=\"img\"\n\tcolor=\"currentColor\"\n\t{...restProps}\n>\n\t<path fill=\"none\" d=\"M0 0h32v32H0z\" />\n\t<path\n\t\tfill=\"none\"\n\t\tstroke=\"currentColor\"\n\t\tstroke-linecap=\"round\"\n\t\tstroke-linejoin=\"round\"\n\t\tstroke-width=\"2\"\n\t\td=\"M9 5h9v16H9zm9 16v9a9 9 0 0 1-9-9M9 5l9 16m0 0h1a8 8 0 0 0 0-16h-1\"\n\t/>\n</svg>\n"
  },
  {
    "path": "docs/src/lib/registry/icons/logos/remixicon.svelte",
    "content": "<script lang=\"ts\">\n\timport type { SVGAttributes } from \"svelte/elements\";\n\n\tlet { ...restProps }: SVGAttributes<SVGSVGElement> = $props();\n</script>\n\n<svg\n\txmlns=\"http://www.w3.org/2000/svg\"\n\tviewBox=\"0 0 24 24\"\n\twidth=\"24\"\n\theight=\"24\"\n\tfill=\"currentColor\"\n\t{...restProps}\n>\n\t<path\n\t\td=\"M12 2C17.5228 2 22 6.47715 22 12C22 15.3137 19.3137 18 16 18C12.6863 18 10 15.3137 10 12C10 11.4477 9.55228 11 9 11C8.44772 11 8 11.4477 8 12C8 16.4183 11.5817 20 16 20C16.8708 20 17.7084 19.8588 18.4932 19.6016C16.7458 21.0956 14.4792 22 12 22C6.6689 22 2.3127 17.8283 2.0166 12.5713C2.23647 9.45772 4.83048 7 8 7C11.3137 7 14 9.68629 14 13C14 13.5523 14.4477 14 15 14C15.5523 14 16 13.5523 16 13C16 8.58172 12.4183 5 8 5C6.50513 5 5.1062 5.41032 3.90918 6.12402C5.72712 3.62515 8.67334 2 12 2Z\"\n\t/>\n</svg>\n"
  },
  {
    "path": "docs/src/lib/registry/icons/logos/tabler.svelte",
    "content": "<script lang=\"ts\">\n\timport type { SVGAttributes } from \"svelte/elements\";\n\n\tlet { ...restProps }: SVGAttributes<SVGSVGElement> = $props();\n</script>\n\n<svg\n\txmlns=\"http://www.w3.org/2000/svg\"\n\twidth=\"32\"\n\theight=\"32\"\n\tfill=\"none\"\n\tviewBox=\"0 0 32 32\"\n\trole=\"img\"\n\tcolor=\"currentColor\"\n\t{...restProps}\n>\n\t<path\n\t\tfill=\"currentColor\"\n\t\td=\"M31.288 7.107A8.83 8.83 0 0 0 24.893.712a55.9 55.9 0 0 0-17.786 0A8.83 8.83 0 0 0 .712 7.107a55.9 55.9 0 0 0 0 17.786 8.83 8.83 0 0 0 6.395 6.395c5.895.95 11.89.95 17.786 0a8.83 8.83 0 0 0 6.395-6.395c.95-5.895.95-11.89 0-17.786\"\n\t/>\n\t<path\n\t\tfill=\"#fff\"\n\t\td=\"m17.884 9.076 1.5-2.488 6.97 6.977-2.492 1.494zm-7.96 3.127 7.814-.909 3.91 3.66-.974 7.287-9.582 2.159a3.06 3.06 0 0 1-2.17-.329l5.244-4.897c.91.407 2.003.142 2.587-.626.584-.77.488-1.818-.226-2.484s-1.84-.755-2.664-.21c-.823.543-1.107 1.562-.67 2.412l-5.245 4.89a2.53 2.53 0 0 1-.339-2.017z\"\n\t/>\n</svg>\n"
  },
  {
    "path": "docs/src/lib/registry/index.ts",
    "content": "export * from \"./colors.js\";\nexport * from \"./themes.js\";\nexport * from \"./schema.js\";\n"
  },
  {
    "path": "docs/src/lib/registry/lib/casing.ts",
    "content": "export function pascalToKebab(str: string): string {\n\treturn str\n\t\t.replace(/([A-Z]+)([A-Z][a-z])/g, \"$1-$2\")\n\t\t.replace(/([a-z])([A-Z])/g, \"$1-$2\")\n\t\t.replace(/([a-zA-Z])(\\d)/g, \"$1-$2\")\n\t\t.replace(/(\\d)([a-zA-Z])/g, \"$1-$2\")\n\t\t.toLowerCase();\n}\n"
  },
  {
    "path": "docs/src/lib/registry/lib/utils.ts",
    "content": "import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n\treturn twMerge(clsx(inputs));\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type WithoutChild<T> = T extends { child?: any } ? Omit<T, \"child\"> : T;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type WithoutChildren<T> = T extends { children?: any } ? Omit<T, \"children\"> : T;\nexport type WithoutChildrenOrChild<T> = WithoutChildren<WithoutChild<T>>;\nexport type WithElementRef<T, U extends HTMLElement = HTMLElement> = T & { ref?: U | null };\n"
  },
  {
    "path": "docs/src/lib/registry/registry-base-colors.ts",
    "content": "export const baseColors = [\n\t{\n\t\tname: \"zinc\",\n\t\tlabel: \"Zinc\",\n\t\tactiveColor: {\n\t\t\tlight: \"240 5.9% 10%\",\n\t\t\tdark: \"240 5.2% 33.9%\",\n\t\t},\n\t\tcssVars: {\n\t\t\tlight: {\n\t\t\t\tbackground: \"0 0% 100%\",\n\t\t\t\tforeground: \"240 10% 3.9%\",\n\t\t\t\tcard: \"0 0% 100%\",\n\t\t\t\t\"card-foreground\": \"240 10% 3.9%\",\n\t\t\t\tpopover: \"0 0% 100%\",\n\t\t\t\t\"popover-foreground\": \"240 10% 3.9%\",\n\t\t\t\tprimary: \"240 5.9% 10%\",\n\t\t\t\t\"primary-foreground\": \"0 0% 98%\",\n\t\t\t\tsecondary: \"240 4.8% 95.9%\",\n\t\t\t\t\"secondary-foreground\": \"240 5.9% 10%\",\n\t\t\t\tmuted: \"240 4.8% 95.9%\",\n\t\t\t\t\"muted-foreground\": \"240 3.8% 46.1%\",\n\t\t\t\taccent: \"240 4.8% 95.9%\",\n\t\t\t\t\"accent-foreground\": \"240 5.9% 10%\",\n\t\t\t\tdestructive: \"0 84.2% 60.2%\",\n\t\t\t\t\"destructive-foreground\": \"0 0% 98%\",\n\t\t\t\tborder: \"240 5.9% 90%\",\n\t\t\t\tinput: \"240 5.9% 90%\",\n\t\t\t\tring: \"240 5.9% 10%\",\n\t\t\t\tradius: \"0.5rem\",\n\t\t\t\t\"chart-1\": \"12 76% 61%\",\n\t\t\t\t\"chart-2\": \"173 58% 39%\",\n\t\t\t\t\"chart-3\": \"197 37% 24%\",\n\t\t\t\t\"chart-4\": \"43 74% 66%\",\n\t\t\t\t\"chart-5\": \"27 87% 67%\",\n\t\t\t},\n\t\t\tdark: {\n\t\t\t\tbackground: \"240 10% 3.9%\",\n\t\t\t\tforeground: \"0 0% 98%\",\n\t\t\t\tcard: \"240 10% 3.9%\",\n\t\t\t\t\"card-foreground\": \"0 0% 98%\",\n\t\t\t\tpopover: \"240 10% 3.9%\",\n\t\t\t\t\"popover-foreground\": \"0 0% 98%\",\n\t\t\t\tprimary: \"0 0% 98%\",\n\t\t\t\t\"primary-foreground\": \"240 5.9% 10%\",\n\t\t\t\tsecondary: \"240 3.7% 15.9%\",\n\t\t\t\t\"secondary-foreground\": \"0 0% 98%\",\n\t\t\t\tmuted: \"240 3.7% 15.9%\",\n\t\t\t\t\"muted-foreground\": \"240 5% 64.9%\",\n\t\t\t\taccent: \"240 3.7% 15.9%\",\n\t\t\t\t\"accent-foreground\": \"0 0% 98%\",\n\t\t\t\tdestructive: \"0 62.8% 30.6%\",\n\t\t\t\t\"destructive-foreground\": \"0 0% 98%\",\n\t\t\t\tborder: \"240 3.7% 15.9%\",\n\t\t\t\tinput: \"240 3.7% 15.9%\",\n\t\t\t\tring: \"240 4.9% 83.9%\",\n\t\t\t\t\"chart-1\": \"220 70% 50%\",\n\t\t\t\t\"chart-2\": \"160 60% 45%\",\n\t\t\t\t\"chart-3\": \"30 80% 55%\",\n\t\t\t\t\"chart-4\": \"280 65% 60%\",\n\t\t\t\t\"chart-5\": \"340 75% 55%\",\n\t\t\t},\n\t\t},\n\t},\n\t{\n\t\tname: \"slate\",\n\t\tlabel: \"Slate\",\n\t\tactiveColor: {\n\t\t\tlight: \"215.4 16.3% 46.9%\",\n\t\t\tdark: \"215.3 19.3% 34.5%\",\n\t\t},\n\t\tcssVars: {\n\t\t\tlight: {\n\t\t\t\tbackground: \"0 0% 100%\",\n\t\t\t\tforeground: \"222.2 84% 4.9%\",\n\t\t\t\tcard: \"0 0% 100%\",\n\t\t\t\t\"card-foreground\": \"222.2 84% 4.9%\",\n\t\t\t\tpopover: \"0 0% 100%\",\n\t\t\t\t\"popover-foreground\": \"222.2 84% 4.9%\",\n\t\t\t\tprimary: \"222.2 47.4% 11.2%\",\n\t\t\t\t\"primary-foreground\": \"210 40% 98%\",\n\t\t\t\tsecondary: \"210 40% 96.1%\",\n\t\t\t\t\"secondary-foreground\": \"222.2 47.4% 11.2%\",\n\t\t\t\tmuted: \"210 40% 96.1%\",\n\t\t\t\t\"muted-foreground\": \"215.4 16.3% 46.9%\",\n\t\t\t\taccent: \"210 40% 96.1%\",\n\t\t\t\t\"accent-foreground\": \"222.2 47.4% 11.2%\",\n\t\t\t\tdestructive: \"0 84.2% 60.2%\",\n\t\t\t\t\"destructive-foreground\": \"210 40% 98%\",\n\t\t\t\tborder: \"214.3 31.8% 91.4%\",\n\t\t\t\tinput: \"214.3 31.8% 91.4%\",\n\t\t\t\tring: \"222.2 84% 4.9%\",\n\t\t\t\tradius: \"0.5rem\",\n\t\t\t\t\"chart-1\": \"12 76% 61%\",\n\t\t\t\t\"chart-2\": \"173 58% 39%\",\n\t\t\t\t\"chart-3\": \"197 37% 24%\",\n\t\t\t\t\"chart-4\": \"43 74% 66%\",\n\t\t\t\t\"chart-5\": \"27 87% 67%\",\n\t\t\t},\n\t\t\tdark: {\n\t\t\t\tbackground: \"222.2 84% 4.9%\",\n\t\t\t\tforeground: \"210 40% 98%\",\n\t\t\t\tcard: \"222.2 84% 4.9%\",\n\t\t\t\t\"card-foreground\": \"210 40% 98%\",\n\t\t\t\tpopover: \"222.2 84% 4.9%\",\n\t\t\t\t\"popover-foreground\": \"210 40% 98%\",\n\t\t\t\tprimary: \"210 40% 98%\",\n\t\t\t\t\"primary-foreground\": \"222.2 47.4% 11.2%\",\n\t\t\t\tsecondary: \"217.2 32.6% 17.5%\",\n\t\t\t\t\"secondary-foreground\": \"210 40% 98%\",\n\t\t\t\tmuted: \"217.2 32.6% 17.5%\",\n\t\t\t\t\"muted-foreground\": \"215 20.2% 65.1%\",\n\t\t\t\taccent: \"217.2 32.6% 17.5%\",\n\t\t\t\t\"accent-foreground\": \"210 40% 98%\",\n\t\t\t\tdestructive: \"0 62.8% 30.6%\",\n\t\t\t\t\"destructive-foreground\": \"210 40% 98%\",\n\t\t\t\tborder: \"217.2 32.6% 17.5%\",\n\t\t\t\tinput: \"217.2 32.6% 17.5%\",\n\t\t\t\tring: \"212.7 26.8% 83.9\",\n\t\t\t\t\"chart-1\": \"220 70% 50%\",\n\t\t\t\t\"chart-2\": \"160 60% 45%\",\n\t\t\t\t\"chart-3\": \"30 80% 55%\",\n\t\t\t\t\"chart-4\": \"280 65% 60%\",\n\t\t\t\t\"chart-5\": \"340 75% 55%\",\n\t\t\t},\n\t\t},\n\t},\n\t{\n\t\tname: \"stone\",\n\t\tlabel: \"Stone\",\n\t\tactiveColor: {\n\t\t\tlight: \"25 5.3% 44.7%\",\n\t\t\tdark: \"33.3 5.5% 32.4%\",\n\t\t},\n\t\tcssVars: {\n\t\t\tlight: {\n\t\t\t\tbackground: \"0 0% 100%\",\n\t\t\t\tforeground: \"20 14.3% 4.1%\",\n\t\t\t\tcard: \"0 0% 100%\",\n\t\t\t\t\"card-foreground\": \"20 14.3% 4.1%\",\n\t\t\t\tpopover: \"0 0% 100%\",\n\t\t\t\t\"popover-foreground\": \"20 14.3% 4.1%\",\n\t\t\t\tprimary: \"24 9.8% 10%\",\n\t\t\t\t\"primary-foreground\": \"60 9.1% 97.8%\",\n\t\t\t\tsecondary: \"60 4.8% 95.9%\",\n\t\t\t\t\"secondary-foreground\": \"24 9.8% 10%\",\n\t\t\t\tmuted: \"60 4.8% 95.9%\",\n\t\t\t\t\"muted-foreground\": \"25 5.3% 44.7%\",\n\t\t\t\taccent: \"60 4.8% 95.9%\",\n\t\t\t\t\"accent-foreground\": \"24 9.8% 10%\",\n\t\t\t\tdestructive: \"0 84.2% 60.2%\",\n\t\t\t\t\"destructive-foreground\": \"60 9.1% 97.8%\",\n\t\t\t\tborder: \"20 5.9% 90%\",\n\t\t\t\tinput: \"20 5.9% 90%\",\n\t\t\t\tring: \"20 14.3% 4.1%\",\n\t\t\t\tradius: \"0.95rem\",\n\t\t\t\t\"chart-1\": \"12 76% 61%\",\n\t\t\t\t\"chart-2\": \"173 58% 39%\",\n\t\t\t\t\"chart-3\": \"197 37% 24%\",\n\t\t\t\t\"chart-4\": \"43 74% 66%\",\n\t\t\t\t\"chart-5\": \"27 87% 67%\",\n\t\t\t},\n\t\t\tdark: {\n\t\t\t\tbackground: \"20 14.3% 4.1%\",\n\t\t\t\tforeground: \"60 9.1% 97.8%\",\n\t\t\t\tcard: \"20 14.3% 4.1%\",\n\t\t\t\t\"card-foreground\": \"60 9.1% 97.8%\",\n\t\t\t\tpopover: \"20 14.3% 4.1%\",\n\t\t\t\t\"popover-foreground\": \"60 9.1% 97.8%\",\n\t\t\t\tprimary: \"60 9.1% 97.8%\",\n\t\t\t\t\"primary-foreground\": \"24 9.8% 10%\",\n\t\t\t\tsecondary: \"12 6.5% 15.1%\",\n\t\t\t\t\"secondary-foreground\": \"60 9.1% 97.8%\",\n\t\t\t\tmuted: \"12 6.5% 15.1%\",\n\t\t\t\t\"muted-foreground\": \"24 5.4% 63.9%\",\n\t\t\t\taccent: \"12 6.5% 15.1%\",\n\t\t\t\t\"accent-foreground\": \"60 9.1% 97.8%\",\n\t\t\t\tdestructive: \"0 62.8% 30.6%\",\n\t\t\t\t\"destructive-foreground\": \"60 9.1% 97.8%\",\n\t\t\t\tborder: \"12 6.5% 15.1%\",\n\t\t\t\tinput: \"12 6.5% 15.1%\",\n\t\t\t\tring: \"24 5.7% 82.9%\",\n\t\t\t\t\"chart-1\": \"220 70% 50%\",\n\t\t\t\t\"chart-2\": \"160 60% 45%\",\n\t\t\t\t\"chart-3\": \"30 80% 55%\",\n\t\t\t\t\"chart-4\": \"280 65% 60%\",\n\t\t\t\t\"chart-5\": \"340 75% 55%\",\n\t\t\t},\n\t\t},\n\t},\n\t{\n\t\tname: \"gray\",\n\t\tlabel: \"Gray\",\n\t\tactiveColor: {\n\t\t\tlight: \"220 8.9% 46.1%\",\n\t\t\tdark: \"215 13.8% 34.1%\",\n\t\t},\n\t\tcssVars: {\n\t\t\tlight: {\n\t\t\t\tbackground: \"0 0% 100%\",\n\t\t\t\tforeground: \"224 71.4% 4.1%\",\n\t\t\t\tcard: \"0 0% 100%\",\n\t\t\t\t\"card-foreground\": \"224 71.4% 4.1%\",\n\t\t\t\tpopover: \"0 0% 100%\",\n\t\t\t\t\"popover-foreground\": \"224 71.4% 4.1%\",\n\t\t\t\tprimary: \"220.9 39.3% 11%\",\n\t\t\t\t\"primary-foreground\": \"210 20% 98%\",\n\t\t\t\tsecondary: \"220 14.3% 95.9%\",\n\t\t\t\t\"secondary-foreground\": \"220.9 39.3% 11%\",\n\t\t\t\tmuted: \"220 14.3% 95.9%\",\n\t\t\t\t\"muted-foreground\": \"220 8.9% 46.1%\",\n\t\t\t\taccent: \"220 14.3% 95.9%\",\n\t\t\t\t\"accent-foreground\": \"220.9 39.3% 11%\",\n\t\t\t\tdestructive: \"0 84.2% 60.2%\",\n\t\t\t\t\"destructive-foreground\": \"210 20% 98%\",\n\t\t\t\tborder: \"220 13% 91%\",\n\t\t\t\tinput: \"220 13% 91%\",\n\t\t\t\tring: \"224 71.4% 4.1%\",\n\t\t\t\tradius: \"0.35rem\",\n\t\t\t\t\"chart-1\": \"12 76% 61%\",\n\t\t\t\t\"chart-2\": \"173 58% 39%\",\n\t\t\t\t\"chart-3\": \"197 37% 24%\",\n\t\t\t\t\"chart-4\": \"43 74% 66%\",\n\t\t\t\t\"chart-5\": \"27 87% 67%\",\n\t\t\t},\n\t\t\tdark: {\n\t\t\t\tbackground: \"224 71.4% 4.1%\",\n\t\t\t\tforeground: \"210 20% 98%\",\n\t\t\t\tcard: \"224 71.4% 4.1%\",\n\t\t\t\t\"card-foreground\": \"210 20% 98%\",\n\t\t\t\tpopover: \"224 71.4% 4.1%\",\n\t\t\t\t\"popover-foreground\": \"210 20% 98%\",\n\t\t\t\tprimary: \"210 20% 98%\",\n\t\t\t\t\"primary-foreground\": \"220.9 39.3% 11%\",\n\t\t\t\tsecondary: \"215 27.9% 16.9%\",\n\t\t\t\t\"secondary-foreground\": \"210 20% 98%\",\n\t\t\t\tmuted: \"215 27.9% 16.9%\",\n\t\t\t\t\"muted-foreground\": \"217.9 10.6% 64.9%\",\n\t\t\t\taccent: \"215 27.9% 16.9%\",\n\t\t\t\t\"accent-foreground\": \"210 20% 98%\",\n\t\t\t\tdestructive: \"0 62.8% 30.6%\",\n\t\t\t\t\"destructive-foreground\": \"210 20% 98%\",\n\t\t\t\tborder: \"215 27.9% 16.9%\",\n\t\t\t\tinput: \"215 27.9% 16.9%\",\n\t\t\t\tring: \"216 12.2% 83.9%\",\n\t\t\t\t\"chart-1\": \"220 70% 50%\",\n\t\t\t\t\"chart-2\": \"160 60% 45%\",\n\t\t\t\t\"chart-3\": \"30 80% 55%\",\n\t\t\t\t\"chart-4\": \"280 65% 60%\",\n\t\t\t\t\"chart-5\": \"340 75% 55%\",\n\t\t\t},\n\t\t},\n\t},\n\t{\n\t\tname: \"neutral\",\n\t\tlabel: \"Neutral\",\n\t\tactiveColor: {\n\t\t\tlight: \"0 0% 45.1%\",\n\t\t\tdark: \"0 0% 32.2%\",\n\t\t},\n\t\tcssVars: {\n\t\t\tlight: {\n\t\t\t\tbackground: \"0 0% 100%\",\n\t\t\t\tforeground: \"0 0% 3.9%\",\n\t\t\t\tcard: \"0 0% 100%\",\n\t\t\t\t\"card-foreground\": \"0 0% 3.9%\",\n\t\t\t\tpopover: \"0 0% 100%\",\n\t\t\t\t\"popover-foreground\": \"0 0% 3.9%\",\n\t\t\t\tprimary: \"0 0% 9%\",\n\t\t\t\t\"primary-foreground\": \"0 0% 98%\",\n\t\t\t\tsecondary: \"0 0% 96.1%\",\n\t\t\t\t\"secondary-foreground\": \"0 0% 9%\",\n\t\t\t\tmuted: \"0 0% 96.1%\",\n\t\t\t\t\"muted-foreground\": \"0 0% 45.1%\",\n\t\t\t\taccent: \"0 0% 96.1%\",\n\t\t\t\t\"accent-foreground\": \"0 0% 9%\",\n\t\t\t\tdestructive: \"0 84.2% 60.2%\",\n\t\t\t\t\"destructive-foreground\": \"0 0% 98%\",\n\t\t\t\tborder: \"0 0% 89.8%\",\n\t\t\t\tinput: \"0 0% 89.8%\",\n\t\t\t\tring: \"0 0% 3.9%\",\n\t\t\t\t\"chart-1\": \"12 76% 61%\",\n\t\t\t\t\"chart-2\": \"173 58% 39%\",\n\t\t\t\t\"chart-3\": \"197 37% 24%\",\n\t\t\t\t\"chart-4\": \"43 74% 66%\",\n\t\t\t\t\"chart-5\": \"27 87% 67%\",\n\t\t\t},\n\t\t\tdark: {\n\t\t\t\tbackground: \"0 0% 3.9%\",\n\t\t\t\tforeground: \"0 0% 98%\",\n\t\t\t\tcard: \"0 0% 3.9%\",\n\t\t\t\t\"card-foreground\": \"0 0% 98%\",\n\t\t\t\tpopover: \"0 0% 3.9%\",\n\t\t\t\t\"popover-foreground\": \"0 0% 98%\",\n\t\t\t\tprimary: \"0 0% 98%\",\n\t\t\t\t\"primary-foreground\": \"0 0% 9%\",\n\t\t\t\tsecondary: \"0 0% 14.9%\",\n\t\t\t\t\"secondary-foreground\": \"0 0% 98%\",\n\t\t\t\tmuted: \"0 0% 14.9%\",\n\t\t\t\t\"muted-foreground\": \"0 0% 63.9%\",\n\t\t\t\taccent: \"0 0% 14.9%\",\n\t\t\t\t\"accent-foreground\": \"0 0% 98%\",\n\t\t\t\tdestructive: \"0 62.8% 30.6%\",\n\t\t\t\t\"destructive-foreground\": \"0 0% 98%\",\n\t\t\t\tborder: \"0 0% 14.9%\",\n\t\t\t\tinput: \"0 0% 14.9%\",\n\t\t\t\tring: \"0 0% 83.1%\",\n\t\t\t\t\"chart-1\": \"220 70% 50%\",\n\t\t\t\t\"chart-2\": \"160 60% 45%\",\n\t\t\t\t\"chart-3\": \"30 80% 55%\",\n\t\t\t\t\"chart-4\": \"280 65% 60%\",\n\t\t\t\t\"chart-5\": \"340 75% 55%\",\n\t\t\t},\n\t\t},\n\t},\n\t{\n\t\tname: \"red\",\n\t\tlabel: \"Red\",\n\t\tactiveColor: {\n\t\t\tlight: \"0 72.2% 50.6%\",\n\t\t\tdark: \"0 72.2% 50.6%\",\n\t\t},\n\t\tcssVars: {\n\t\t\tlight: {\n\t\t\t\tbackground: \"0 0% 100%\",\n\t\t\t\tforeground: \"0 0% 3.9%\",\n\t\t\t\tcard: \"0 0% 100%\",\n\t\t\t\t\"card-foreground\": \"0 0% 3.9%\",\n\t\t\t\tpopover: \"0 0% 100%\",\n\t\t\t\t\"popover-foreground\": \"0 0% 3.9%\",\n\t\t\t\tprimary: \"0 72.2% 50.6%\",\n\t\t\t\t\"primary-foreground\": \"0 85.7% 97.3%\",\n\t\t\t\tsecondary: \"0 0% 96.1%\",\n\t\t\t\t\"secondary-foreground\": \"0 0% 9%\",\n\t\t\t\tmuted: \"0 0% 96.1%\",\n\t\t\t\t\"muted-foreground\": \"0 0% 45.1%\",\n\t\t\t\taccent: \"0 0% 96.1%\",\n\t\t\t\t\"accent-foreground\": \"0 0% 9%\",\n\t\t\t\tdestructive: \"0 84.2% 60.2%\",\n\t\t\t\t\"destructive-foreground\": \"0 0% 98%\",\n\t\t\t\tborder: \"0 0% 89.8%\",\n\t\t\t\tinput: \"0 0% 89.8%\",\n\t\t\t\tring: \"0 72.2% 50.6%\",\n\t\t\t\tradius: \"0.4rem\",\n\t\t\t\t\"chart-1\": \"12 76% 61%\",\n\t\t\t\t\"chart-2\": \"173 58% 39%\",\n\t\t\t\t\"chart-3\": \"197 37% 24%\",\n\t\t\t\t\"chart-4\": \"43 74% 66%\",\n\t\t\t\t\"chart-5\": \"27 87% 67%\",\n\t\t\t},\n\t\t\tdark: {\n\t\t\t\tbackground: \"0 0% 3.9%\",\n\t\t\t\tforeground: \"0 0% 98%\",\n\t\t\t\tcard: \"0 0% 3.9%\",\n\t\t\t\t\"card-foreground\": \"0 0% 98%\",\n\t\t\t\tpopover: \"0 0% 3.9%\",\n\t\t\t\t\"popover-foreground\": \"0 0% 98%\",\n\t\t\t\tprimary: \"0 72.2% 50.6%\",\n\t\t\t\t\"primary-foreground\": \"0 85.7% 97.3%\",\n\t\t\t\tsecondary: \"0 0% 14.9%\",\n\t\t\t\t\"secondary-foreground\": \"0 0% 98%\",\n\t\t\t\tmuted: \"0 0% 14.9%\",\n\t\t\t\t\"muted-foreground\": \"0 0% 63.9%\",\n\t\t\t\taccent: \"0 0% 14.9%\",\n\t\t\t\t\"accent-foreground\": \"0 0% 98%\",\n\t\t\t\tdestructive: \"0 62.8% 30.6%\",\n\t\t\t\t\"destructive-foreground\": \"0 0% 98%\",\n\t\t\t\tborder: \"0 0% 14.9%\",\n\t\t\t\tinput: \"0 0% 14.9%\",\n\t\t\t\tring: \"0 72.2% 50.6%\",\n\t\t\t\t\"chart-1\": \"220 70% 50%\",\n\t\t\t\t\"chart-2\": \"160 60% 45%\",\n\t\t\t\t\"chart-3\": \"30 80% 55%\",\n\t\t\t\t\"chart-4\": \"280 65% 60%\",\n\t\t\t\t\"chart-5\": \"340 75% 55%\",\n\t\t\t},\n\t\t},\n\t},\n\t{\n\t\tname: \"rose\",\n\t\tlabel: \"Rose\",\n\t\tactiveColor: {\n\t\t\tlight: \"346.8 77.2% 49.8%\",\n\t\t\tdark: \"346.8 77.2% 49.8%\",\n\t\t},\n\t\tcssVars: {\n\t\t\tlight: {\n\t\t\t\tbackground: \"0 0% 100%\",\n\t\t\t\tforeground: \"240 10% 3.9%\",\n\t\t\t\tcard: \"0 0% 100%\",\n\t\t\t\t\"card-foreground\": \"240 10% 3.9%\",\n\t\t\t\tpopover: \"0 0% 100%\",\n\t\t\t\t\"popover-foreground\": \"240 10% 3.9%\",\n\t\t\t\tprimary: \"346.8 77.2% 49.8%\",\n\t\t\t\t\"primary-foreground\": \"355.7 100% 97.3%\",\n\t\t\t\tsecondary: \"240 4.8% 95.9%\",\n\t\t\t\t\"secondary-foreground\": \"240 5.9% 10%\",\n\t\t\t\tmuted: \"240 4.8% 95.9%\",\n\t\t\t\t\"muted-foreground\": \"240 3.8% 46.1%\",\n\t\t\t\taccent: \"240 4.8% 95.9%\",\n\t\t\t\t\"accent-foreground\": \"240 5.9% 10%\",\n\t\t\t\tdestructive: \"0 84.2% 60.2%\",\n\t\t\t\t\"destructive-foreground\": \"0 0% 98%\",\n\t\t\t\tborder: \"240 5.9% 90%\",\n\t\t\t\tinput: \"240 5.9% 90%\",\n\t\t\t\tring: \"346.8 77.2% 49.8%\",\n\t\t\t\tradius: \"0.5rem\",\n\t\t\t\t\"chart-1\": \"12 76% 61%\",\n\t\t\t\t\"chart-2\": \"173 58% 39%\",\n\t\t\t\t\"chart-3\": \"197 37% 24%\",\n\t\t\t\t\"chart-4\": \"43 74% 66%\",\n\t\t\t\t\"chart-5\": \"27 87% 67%\",\n\t\t\t},\n\t\t\tdark: {\n\t\t\t\tbackground: \"20 14.3% 4.1%\",\n\t\t\t\tforeground: \"0 0% 95%\",\n\t\t\t\tpopover: \"0 0% 9%\",\n\t\t\t\t\"popover-foreground\": \"0 0% 95%\",\n\t\t\t\tcard: \"24 9.8% 10%\",\n\t\t\t\t\"card-foreground\": \"0 0% 95%\",\n\t\t\t\tprimary: \"346.8 77.2% 49.8%\",\n\t\t\t\t\"primary-foreground\": \"355.7 100% 97.3%\",\n\t\t\t\tsecondary: \"240 3.7% 15.9%\",\n\t\t\t\t\"secondary-foreground\": \"0 0% 98%\",\n\t\t\t\tmuted: \"0 0% 15%\",\n\t\t\t\t\"muted-foreground\": \"240 5% 64.9%\",\n\t\t\t\taccent: \"12 6.5% 15.1%\",\n\t\t\t\t\"accent-foreground\": \"0 0% 98%\",\n\t\t\t\tdestructive: \"0 62.8% 30.6%\",\n\t\t\t\t\"destructive-foreground\": \"0 85.7% 97.3%\",\n\t\t\t\tborder: \"240 3.7% 15.9%\",\n\t\t\t\tinput: \"240 3.7% 15.9%\",\n\t\t\t\tring: \"346.8 77.2% 49.8%\",\n\t\t\t\t\"chart-1\": \"220 70% 50%\",\n\t\t\t\t\"chart-2\": \"160 60% 45%\",\n\t\t\t\t\"chart-3\": \"30 80% 55%\",\n\t\t\t\t\"chart-4\": \"280 65% 60%\",\n\t\t\t\t\"chart-5\": \"340 75% 55%\",\n\t\t\t},\n\t\t},\n\t},\n\t{\n\t\tname: \"orange\",\n\t\tlabel: \"Orange\",\n\t\tactiveColor: {\n\t\t\tlight: \"24.6 95% 53.1%\",\n\t\t\tdark: \"20.5 90.2% 48.2%\",\n\t\t},\n\t\tcssVars: {\n\t\t\tlight: {\n\t\t\t\tbackground: \"0 0% 100%\",\n\t\t\t\tforeground: \"20 14.3% 4.1%\",\n\t\t\t\tcard: \"0 0% 100%\",\n\t\t\t\t\"card-foreground\": \"20 14.3% 4.1%\",\n\t\t\t\tpopover: \"0 0% 100%\",\n\t\t\t\t\"popover-foreground\": \"20 14.3% 4.1%\",\n\t\t\t\tprimary: \"24.6 95% 53.1%\",\n\t\t\t\t\"primary-foreground\": \"60 9.1% 97.8%\",\n\t\t\t\tsecondary: \"60 4.8% 95.9%\",\n\t\t\t\t\"secondary-foreground\": \"24 9.8% 10%\",\n\t\t\t\tmuted: \"60 4.8% 95.9%\",\n\t\t\t\t\"muted-foreground\": \"25 5.3% 44.7%\",\n\t\t\t\taccent: \"60 4.8% 95.9%\",\n\t\t\t\t\"accent-foreground\": \"24 9.8% 10%\",\n\t\t\t\tdestructive: \"0 84.2% 60.2%\",\n\t\t\t\t\"destructive-foreground\": \"60 9.1% 97.8%\",\n\t\t\t\tborder: \"20 5.9% 90%\",\n\t\t\t\tinput: \"20 5.9% 90%\",\n\t\t\t\tring: \"24.6 95% 53.1%\",\n\t\t\t\tradius: \"0.95rem\",\n\t\t\t\t\"chart-1\": \"12 76% 61%\",\n\t\t\t\t\"chart-2\": \"173 58% 39%\",\n\t\t\t\t\"chart-3\": \"197 37% 24%\",\n\t\t\t\t\"chart-4\": \"43 74% 66%\",\n\t\t\t\t\"chart-5\": \"27 87% 67%\",\n\t\t\t},\n\t\t\tdark: {\n\t\t\t\tbackground: \"20 14.3% 4.1%\",\n\t\t\t\tforeground: \"60 9.1% 97.8%\",\n\t\t\t\tcard: \"20 14.3% 4.1%\",\n\t\t\t\t\"card-foreground\": \"60 9.1% 97.8%\",\n\t\t\t\tpopover: \"20 14.3% 4.1%\",\n\t\t\t\t\"popover-foreground\": \"60 9.1% 97.8%\",\n\t\t\t\tprimary: \"20.5 90.2% 48.2%\",\n\t\t\t\t\"primary-foreground\": \"60 9.1% 97.8%\",\n\t\t\t\tsecondary: \"12 6.5% 15.1%\",\n\t\t\t\t\"secondary-foreground\": \"60 9.1% 97.8%\",\n\t\t\t\tmuted: \"12 6.5% 15.1%\",\n\t\t\t\t\"muted-foreground\": \"24 5.4% 63.9%\",\n\t\t\t\taccent: \"12 6.5% 15.1%\",\n\t\t\t\t\"accent-foreground\": \"60 9.1% 97.8%\",\n\t\t\t\tdestructive: \"0 72.2% 50.6%\",\n\t\t\t\t\"destructive-foreground\": \"60 9.1% 97.8%\",\n\t\t\t\tborder: \"12 6.5% 15.1%\",\n\t\t\t\tinput: \"12 6.5% 15.1%\",\n\t\t\t\tring: \"20.5 90.2% 48.2%\",\n\t\t\t\t\"chart-1\": \"220 70% 50%\",\n\t\t\t\t\"chart-2\": \"160 60% 45%\",\n\t\t\t\t\"chart-3\": \"30 80% 55%\",\n\t\t\t\t\"chart-4\": \"280 65% 60%\",\n\t\t\t\t\"chart-5\": \"340 75% 55%\",\n\t\t\t},\n\t\t},\n\t},\n\t{\n\t\tname: \"green\",\n\t\tlabel: \"Green\",\n\t\tactiveColor: {\n\t\t\tlight: \"142.1 76.2% 36.3%\",\n\t\t\tdark: \"142.1 70.6% 45.3%\",\n\t\t},\n\t\tcssVars: {\n\t\t\tlight: {\n\t\t\t\tbackground: \"0 0% 100%\",\n\t\t\t\tforeground: \"240 10% 3.9%\",\n\t\t\t\tcard: \"0 0% 100%\",\n\t\t\t\t\"card-foreground\": \"240 10% 3.9%\",\n\t\t\t\tpopover: \"0 0% 100%\",\n\t\t\t\t\"popover-foreground\": \"240 10% 3.9%\",\n\t\t\t\tprimary: \"142.1 76.2% 36.3%\",\n\t\t\t\t\"primary-foreground\": \"355.7 100% 97.3%\",\n\t\t\t\tsecondary: \"240 4.8% 95.9%\",\n\t\t\t\t\"secondary-foreground\": \"240 5.9% 10%\",\n\t\t\t\tmuted: \"240 4.8% 95.9%\",\n\t\t\t\t\"muted-foreground\": \"240 3.8% 46.1%\",\n\t\t\t\taccent: \"240 4.8% 95.9%\",\n\t\t\t\t\"accent-foreground\": \"240 5.9% 10%\",\n\t\t\t\tdestructive: \"0 84.2% 60.2%\",\n\t\t\t\t\"destructive-foreground\": \"0 0% 98%\",\n\t\t\t\tborder: \"240 5.9% 90%\",\n\t\t\t\tinput: \"240 5.9% 90%\",\n\t\t\t\tring: \"142.1 76.2% 36.3%\",\n\t\t\t\t\"chart-1\": \"12 76% 61%\",\n\t\t\t\t\"chart-2\": \"173 58% 39%\",\n\t\t\t\t\"chart-3\": \"197 37% 24%\",\n\t\t\t\t\"chart-4\": \"43 74% 66%\",\n\t\t\t\t\"chart-5\": \"27 87% 67%\",\n\t\t\t},\n\t\t\tdark: {\n\t\t\t\tbackground: \"20 14.3% 4.1%\",\n\t\t\t\tforeground: \"0 0% 95%\",\n\t\t\t\tpopover: \"0 0% 9%\",\n\t\t\t\t\"popover-foreground\": \"0 0% 95%\",\n\t\t\t\tcard: \"24 9.8% 10%\",\n\t\t\t\t\"card-foreground\": \"0 0% 95%\",\n\t\t\t\tprimary: \"142.1 70.6% 45.3%\",\n\t\t\t\t\"primary-foreground\": \"144.9 80.4% 10%\",\n\t\t\t\tsecondary: \"240 3.7% 15.9%\",\n\t\t\t\t\"secondary-foreground\": \"0 0% 98%\",\n\t\t\t\tmuted: \"0 0% 15%\",\n\t\t\t\t\"muted-foreground\": \"240 5% 64.9%\",\n\t\t\t\taccent: \"12 6.5% 15.1%\",\n\t\t\t\t\"accent-foreground\": \"0 0% 98%\",\n\t\t\t\tdestructive: \"0 62.8% 30.6%\",\n\t\t\t\t\"destructive-foreground\": \"0 85.7% 97.3%\",\n\t\t\t\tborder: \"240 3.7% 15.9%\",\n\t\t\t\tinput: \"240 3.7% 15.9%\",\n\t\t\t\tring: \"142.4 71.8% 29.2%\",\n\t\t\t\t\"chart-1\": \"220 70% 50%\",\n\t\t\t\t\"chart-2\": \"160 60% 45%\",\n\t\t\t\t\"chart-3\": \"30 80% 55%\",\n\t\t\t\t\"chart-4\": \"280 65% 60%\",\n\t\t\t\t\"chart-5\": \"340 75% 55%\",\n\t\t\t},\n\t\t},\n\t},\n\t{\n\t\tname: \"blue\",\n\t\tlabel: \"Blue\",\n\t\tactiveColor: {\n\t\t\tlight: \"221.2 83.2% 53.3%\",\n\t\t\tdark: \"217.2 91.2% 59.8%\",\n\t\t},\n\t\tcssVars: {\n\t\t\tlight: {\n\t\t\t\tbackground: \"0 0% 100%\",\n\t\t\t\tforeground: \"222.2 84% 4.9%\",\n\t\t\t\tcard: \"0 0% 100%\",\n\t\t\t\t\"card-foreground\": \"222.2 84% 4.9%\",\n\t\t\t\tpopover: \"0 0% 100%\",\n\t\t\t\t\"popover-foreground\": \"222.2 84% 4.9%\",\n\t\t\t\tprimary: \"221.2 83.2% 53.3%\",\n\t\t\t\t\"primary-foreground\": \"210 40% 98%\",\n\t\t\t\tsecondary: \"210 40% 96.1%\",\n\t\t\t\t\"secondary-foreground\": \"222.2 47.4% 11.2%\",\n\t\t\t\tmuted: \"210 40% 96.1%\",\n\t\t\t\t\"muted-foreground\": \"215.4 16.3% 46.9%\",\n\t\t\t\taccent: \"210 40% 96.1%\",\n\t\t\t\t\"accent-foreground\": \"222.2 47.4% 11.2%\",\n\t\t\t\tdestructive: \"0 84.2% 60.2%\",\n\t\t\t\t\"destructive-foreground\": \"210 40% 98%\",\n\t\t\t\tborder: \"214.3 31.8% 91.4%\",\n\t\t\t\tinput: \"214.3 31.8% 91.4%\",\n\t\t\t\tring: \"221.2 83.2% 53.3%\",\n\t\t\t\t\"chart-1\": \"12 76% 61%\",\n\t\t\t\t\"chart-2\": \"173 58% 39%\",\n\t\t\t\t\"chart-3\": \"197 37% 24%\",\n\t\t\t\t\"chart-4\": \"43 74% 66%\",\n\t\t\t\t\"chart-5\": \"27 87% 67%\",\n\t\t\t},\n\t\t\tdark: {\n\t\t\t\tbackground: \"222.2 84% 4.9%\",\n\t\t\t\tforeground: \"210 40% 98%\",\n\t\t\t\tcard: \"222.2 84% 4.9%\",\n\t\t\t\t\"card-foreground\": \"210 40% 98%\",\n\t\t\t\tpopover: \"222.2 84% 4.9%\",\n\t\t\t\t\"popover-foreground\": \"210 40% 98%\",\n\t\t\t\tprimary: \"217.2 91.2% 59.8%\",\n\t\t\t\t\"primary-foreground\": \"222.2 47.4% 11.2%\",\n\t\t\t\tsecondary: \"217.2 32.6% 17.5%\",\n\t\t\t\t\"secondary-foreground\": \"210 40% 98%\",\n\t\t\t\tmuted: \"217.2 32.6% 17.5%\",\n\t\t\t\t\"muted-foreground\": \"215 20.2% 65.1%\",\n\t\t\t\taccent: \"217.2 32.6% 17.5%\",\n\t\t\t\t\"accent-foreground\": \"210 40% 98%\",\n\t\t\t\tdestructive: \"0 62.8% 30.6%\",\n\t\t\t\t\"destructive-foreground\": \"210 40% 98%\",\n\t\t\t\tborder: \"217.2 32.6% 17.5%\",\n\t\t\t\tinput: \"217.2 32.6% 17.5%\",\n\t\t\t\tring: \"224.3 76.3% 48%\",\n\t\t\t\t\"chart-1\": \"220 70% 50%\",\n\t\t\t\t\"chart-2\": \"160 60% 45%\",\n\t\t\t\t\"chart-3\": \"30 80% 55%\",\n\t\t\t\t\"chart-4\": \"280 65% 60%\",\n\t\t\t\t\"chart-5\": \"340 75% 55%\",\n\t\t\t},\n\t\t},\n\t},\n\t{\n\t\tname: \"yellow\",\n\t\tlabel: \"Yellow\",\n\t\tactiveColor: {\n\t\t\tlight: \"47.9 95.8% 53.1%\",\n\t\t\tdark: \"47.9 95.8% 53.1%\",\n\t\t},\n\t\tcssVars: {\n\t\t\tlight: {\n\t\t\t\tbackground: \"0 0% 100%\",\n\t\t\t\tforeground: \"20 14.3% 4.1%\",\n\t\t\t\tcard: \"0 0% 100%\",\n\t\t\t\t\"card-foreground\": \"20 14.3% 4.1%\",\n\t\t\t\tpopover: \"0 0% 100%\",\n\t\t\t\t\"popover-foreground\": \"20 14.3% 4.1%\",\n\t\t\t\tprimary: \"47.9 95.8% 53.1%\",\n\t\t\t\t\"primary-foreground\": \"26 83.3% 14.1%\",\n\t\t\t\tsecondary: \"60 4.8% 95.9%\",\n\t\t\t\t\"secondary-foreground\": \"24 9.8% 10%\",\n\t\t\t\tmuted: \"60 4.8% 95.9%\",\n\t\t\t\t\"muted-foreground\": \"25 5.3% 44.7%\",\n\t\t\t\taccent: \"60 4.8% 95.9%\",\n\t\t\t\t\"accent-foreground\": \"24 9.8% 10%\",\n\t\t\t\tdestructive: \"0 84.2% 60.2%\",\n\t\t\t\t\"destructive-foreground\": \"60 9.1% 97.8%\",\n\t\t\t\tborder: \"20 5.9% 90%\",\n\t\t\t\tinput: \"20 5.9% 90%\",\n\t\t\t\tring: \"20 14.3% 4.1%\",\n\t\t\t\tradius: \"0.95rem\",\n\t\t\t\t\"chart-1\": \"12 76% 61%\",\n\t\t\t\t\"chart-2\": \"173 58% 39%\",\n\t\t\t\t\"chart-3\": \"197 37% 24%\",\n\t\t\t\t\"chart-4\": \"43 74% 66%\",\n\t\t\t\t\"chart-5\": \"27 87% 67%\",\n\t\t\t},\n\t\t\tdark: {\n\t\t\t\tbackground: \"20 14.3% 4.1%\",\n\t\t\t\tforeground: \"60 9.1% 97.8%\",\n\t\t\t\tcard: \"20 14.3% 4.1%\",\n\t\t\t\t\"card-foreground\": \"60 9.1% 97.8%\",\n\t\t\t\tpopover: \"20 14.3% 4.1%\",\n\t\t\t\t\"popover-foreground\": \"60 9.1% 97.8%\",\n\t\t\t\tprimary: \"47.9 95.8% 53.1%\",\n\t\t\t\t\"primary-foreground\": \"26 83.3% 14.1%\",\n\t\t\t\tsecondary: \"12 6.5% 15.1%\",\n\t\t\t\t\"secondary-foreground\": \"60 9.1% 97.8%\",\n\t\t\t\tmuted: \"12 6.5% 15.1%\",\n\t\t\t\t\"muted-foreground\": \"24 5.4% 63.9%\",\n\t\t\t\taccent: \"12 6.5% 15.1%\",\n\t\t\t\t\"accent-foreground\": \"60 9.1% 97.8%\",\n\t\t\t\tdestructive: \"0 62.8% 30.6%\",\n\t\t\t\t\"destructive-foreground\": \"60 9.1% 97.8%\",\n\t\t\t\tborder: \"12 6.5% 15.1%\",\n\t\t\t\tinput: \"12 6.5% 15.1%\",\n\t\t\t\tring: \"35.5 91.7% 32.9%\",\n\t\t\t\t\"chart-1\": \"220 70% 50%\",\n\t\t\t\t\"chart-2\": \"160 60% 45%\",\n\t\t\t\t\"chart-3\": \"30 80% 55%\",\n\t\t\t\t\"chart-4\": \"280 65% 60%\",\n\t\t\t\t\"chart-5\": \"340 75% 55%\",\n\t\t\t},\n\t\t},\n\t},\n\t{\n\t\tname: \"violet\",\n\t\tlabel: \"Violet\",\n\t\tactiveColor: {\n\t\t\tlight: \"262.1 83.3% 57.8%\",\n\t\t\tdark: \"263.4 70% 50.4%\",\n\t\t},\n\t\tcssVars: {\n\t\t\tlight: {\n\t\t\t\tbackground: \"0 0% 100%\",\n\t\t\t\tforeground: \"224 71.4% 4.1%\",\n\t\t\t\tcard: \"0 0% 100%\",\n\t\t\t\t\"card-foreground\": \"224 71.4% 4.1%\",\n\t\t\t\tpopover: \"0 0% 100%\",\n\t\t\t\t\"popover-foreground\": \"224 71.4% 4.1%\",\n\t\t\t\tprimary: \"262.1 83.3% 57.8%\",\n\t\t\t\t\"primary-foreground\": \"210 20% 98%\",\n\t\t\t\tsecondary: \"220 14.3% 95.9%\",\n\t\t\t\t\"secondary-foreground\": \"220.9 39.3% 11%\",\n\t\t\t\tmuted: \"220 14.3% 95.9%\",\n\t\t\t\t\"muted-foreground\": \"220 8.9% 46.1%\",\n\t\t\t\taccent: \"220 14.3% 95.9%\",\n\t\t\t\t\"accent-foreground\": \"220.9 39.3% 11%\",\n\t\t\t\tdestructive: \"0 84.2% 60.2%\",\n\t\t\t\t\"destructive-foreground\": \"210 20% 98%\",\n\t\t\t\tborder: \"220 13% 91%\",\n\t\t\t\tinput: \"220 13% 91%\",\n\t\t\t\tring: \"262.1 83.3% 57.8%\",\n\t\t\t\t\"chart-1\": \"12 76% 61%\",\n\t\t\t\t\"chart-2\": \"173 58% 39%\",\n\t\t\t\t\"chart-3\": \"197 37% 24%\",\n\t\t\t\t\"chart-4\": \"43 74% 66%\",\n\t\t\t\t\"chart-5\": \"27 87% 67%\",\n\t\t\t},\n\t\t\tdark: {\n\t\t\t\tbackground: \"224 71.4% 4.1%\",\n\t\t\t\tforeground: \"210 20% 98%\",\n\t\t\t\tcard: \"224 71.4% 4.1%\",\n\t\t\t\t\"card-foreground\": \"210 20% 98%\",\n\t\t\t\tpopover: \"224 71.4% 4.1%\",\n\t\t\t\t\"popover-foreground\": \"210 20% 98%\",\n\t\t\t\tprimary: \"263.4 70% 50.4%\",\n\t\t\t\t\"primary-foreground\": \"210 20% 98%\",\n\t\t\t\tsecondary: \"215 27.9% 16.9%\",\n\t\t\t\t\"secondary-foreground\": \"210 20% 98%\",\n\t\t\t\tmuted: \"215 27.9% 16.9%\",\n\t\t\t\t\"muted-foreground\": \"217.9 10.6% 64.9%\",\n\t\t\t\taccent: \"215 27.9% 16.9%\",\n\t\t\t\t\"accent-foreground\": \"210 20% 98%\",\n\t\t\t\tdestructive: \"0 62.8% 30.6%\",\n\t\t\t\t\"destructive-foreground\": \"210 20% 98%\",\n\t\t\t\tborder: \"215 27.9% 16.9%\",\n\t\t\t\tinput: \"215 27.9% 16.9%\",\n\t\t\t\tring: \"263.4 70% 50.4%\",\n\t\t\t\t\"chart-1\": \"220 70% 50%\",\n\t\t\t\t\"chart-2\": \"160 60% 45%\",\n\t\t\t\t\"chart-3\": \"30 80% 55%\",\n\t\t\t\t\"chart-4\": \"280 65% 60%\",\n\t\t\t\t\"chart-5\": \"340 75% 55%\",\n\t\t\t},\n\t\t},\n\t},\n] as const;\n\nexport type BaseColor = (typeof baseColors)[number];\n\nexport const baseColorsV4 = {\n\tstone: {\n\t\tlight: {\n\t\t\tbackground: \"oklch(1 0 0)\", // --color-white\n\t\t\tforeground: \"oklch(0.147 0.004 49.25)\", // --color-stone-950\n\t\t\tcard: \"oklch(1 0 0)\", // --color-white\n\t\t\t\"card-foreground\": \"oklch(0.147 0.004 49.25)\", // --color-stone-950\n\t\t\tpopover: \"oklch(1 0 0)\", // --color-white\n\t\t\t\"popover-foreground\": \"oklch(0.147 0.004 49.25)\", // --color-stone-950\n\t\t\tprimary: \"oklch(0.216 0.006 56.043)\", // --color-stone-900\n\t\t\t\"primary-foreground\": \"oklch(0.985 0.001 106.423)\", // --color-stone-50\n\t\t\tsecondary: \"oklch(0.97 0.001 106.424)\", // --color-stone-100\n\t\t\t\"secondary-foreground\": \"oklch(0.216 0.006 56.043)\", // --color-stone-900\n\t\t\tmuted: \"oklch(0.97 0.001 106.424)\", // --color-stone-100\n\t\t\t\"muted-foreground\": \"oklch(0.553 0.013 58.071)\", // --color-stone-500\n\t\t\taccent: \"oklch(0.97 0.001 106.424)\", // --color-stone-100\n\t\t\t\"accent-foreground\": \"oklch(0.216 0.006 56.043)\", // --color-stone-900\n\t\t\tdestructive: \"oklch(0.577 0.245 27.325)\", // --color-red-600\n\t\t\tborder: \"oklch(0.923 0.003 48.717)\", // --color-stone-200\n\t\t\tinput: \"oklch(0.923 0.003 48.717)\", // --color-stone-200\n\t\t\tring: \"oklch(0.709 0.01 56.259)\", // --color-stone-400\n\t\t\t\"chart-1\": \"oklch(0.646 0.222 41.116)\", // --color-orange-600\n\t\t\t\"chart-2\": \"oklch(0.6 0.118 184.704)\", // --color-teal-600\n\t\t\t\"chart-3\": \"oklch(0.398 0.07 227.392)\", // --color-cyan-900\n\t\t\t\"chart-4\": \"oklch(0.828 0.189 84.429)\", // --color-amber-400\n\t\t\t\"chart-5\": \"oklch(0.769 0.188 70.08)\", // --color-amber-500\n\t\t\tradius: \"0.625rem\",\n\t\t\tsidebar: \"oklch(0.985 0.001 106.423)\", // --color-stone-50\n\t\t\t\"sidebar-foreground\": \"oklch(0.147 0.004 49.25)\", // --color-stone-950\n\t\t\t\"sidebar-primary\": \"oklch(0.216 0.006 56.043)\", // --color-stone-900\n\t\t\t\"sidebar-primary-foreground\": \"oklch(0.985 0.001 106.423)\", // --color-stone-50\n\t\t\t\"sidebar-accent\": \"oklch(0.97 0.001 106.424)\", // --color-stone-100\n\t\t\t\"sidebar-accent-foreground\": \"oklch(0.216 0.006 56.043)\", // --color-stone-900\n\t\t\t\"sidebar-border\": \"oklch(0.923 0.003 48.717)\", // --color-stone-200\n\t\t\t\"sidebar-ring\": \"oklch(0.709 0.01 56.259)\", // --color-stone-400\n\t\t},\n\t\tdark: {\n\t\t\tbackground: \"oklch(0.147 0.004 49.25)\", // --color-stone-950\n\t\t\tforeground: \"oklch(0.985 0.001 106.423)\", // --color-stone-50\n\t\t\tcard: \"oklch(0.216 0.006 56.043)\", // --color-stone-900\n\t\t\t\"card-foreground\": \"oklch(0.985 0.001 106.423)\", // --color-stone-50\n\t\t\tpopover: \"oklch(0.216 0.006 56.043)\", // --color-stone-900\n\t\t\t\"popover-foreground\": \"oklch(0.985 0.001 106.423)\", // --color-stone-50\n\t\t\tprimary: \"oklch(0.923 0.003 48.717)\", // --color-stone-200\n\t\t\t\"primary-foreground\": \"oklch(0.216 0.006 56.043)\", // --color-stone-900\n\t\t\tsecondary: \"oklch(0.268 0.007 34.298)\", // --color-stone-800\n\t\t\t\"secondary-foreground\": \"oklch(0.985 0.001 106.423)\", // --color-stone-50\n\t\t\tmuted: \"oklch(0.268 0.007 34.298)\", // --color-stone-800\n\t\t\t\"muted-foreground\": \"oklch(0.709 0.01 56.259)\", // --color-stone-400\n\t\t\taccent: \"oklch(0.268 0.007 34.298)\", // --color-stone-800\n\t\t\t\"accent-foreground\": \"oklch(0.985 0.001 106.423)\", // --color-stone-50\n\t\t\tdestructive: \"oklch(0.704 0.191 22.216)\", // --color-red-500\n\t\t\tborder: \"oklch(1 0 0 / 10%)\", // --color-white\n\t\t\tinput: \"oklch(1 0 0 / 15%)\", // --color-white\n\t\t\tring: \"oklch(0.553 0.013 58.071)\", // --color-stone-500\n\t\t\t\"chart-1\": \"oklch(0.488 0.243 264.376)\", // --color-blue-700\n\t\t\t\"chart-2\": \"oklch(0.696 0.17 162.48)\", // --color-emerald-500\n\t\t\t\"chart-3\": \"oklch(0.769 0.188 70.08)\", // --color-amber-500\n\t\t\t\"chart-4\": \"oklch(0.627 0.265 303.9)\", // --color-purple-500\n\t\t\t\"chart-5\": \"oklch(0.645 0.246 16.439)\", // --color-rose-500\n\t\t\tsidebar: \"oklch(0.216 0.006 56.043)\", // --color-stone-900\n\t\t\t\"sidebar-foreground\": \"oklch(0.985 0.001 106.423)\", // --color-stone-50\n\t\t\t\"sidebar-primary\": \"oklch(0.488 0.243 264.376)\", // --color-blue-700\n\t\t\t\"sidebar-primary-foreground\": \"oklch(0.985 0.001 106.423)\", // --color-stone-50\n\t\t\t\"sidebar-accent\": \"oklch(0.268 0.007 34.298)\", // --color-stone-800\n\t\t\t\"sidebar-accent-foreground\": \"oklch(0.985 0.001 106.423)\", // --color-stone-50\n\t\t\t\"sidebar-border\": \"oklch(1 0 0 / 10%)\", // --color-white\n\t\t\t\"sidebar-ring\": \"oklch(0.553 0.013 58.071)\", // --color-stone-500\n\t\t},\n\t},\n\tzinc: {\n\t\tlight: {\n\t\t\tbackground: \"oklch(1 0 0)\", // --color-zinc-50\n\t\t\tforeground: \"oklch(0.141 0.005 285.823)\", // --color-zinc-950\n\t\t\tcard: \"oklch(1 0 0)\", // --color-zinc-50\n\t\t\t\"card-foreground\": \"oklch(0.141 0.005 285.823)\", // --color-zinc-950\n\t\t\tpopover: \"oklch(1 0 0)\", // --color-zinc-50\n\t\t\t\"popover-foreground\": \"oklch(0.141 0.005 285.823)\", // --color-zinc-950\n\t\t\tprimary: \"oklch(0.21 0.006 285.885)\", // --color-zinc-900\n\t\t\t\"primary-foreground\": \"oklch(0.985 0 0)\", // --color-zinc-50\n\t\t\tsecondary: \"oklch(0.967 0.001 286.375)\", // --color-zinc-100\n\t\t\t\"secondary-foreground\": \"oklch(0.21 0.006 285.885)\", // --color-zinc-900\n\t\t\tmuted: \"oklch(0.967 0.001 286.375)\", // --color-zinc-100\n\t\t\t\"muted-foreground\": \"oklch(0.552 0.016 285.938)\", // --color-zinc-500\n\t\t\taccent: \"oklch(0.967 0.001 286.375)\", // --color-zinc-100\n\t\t\t\"accent-foreground\": \"oklch(0.21 0.006 285.885)\", // --color-zinc-900\n\t\t\tdestructive: \"oklch(0.577 0.245 27.325)\", // --color-red-600\n\t\t\tborder: \"oklch(0.92 0.004 286.32)\", // --color-zinc-200\n\t\t\tinput: \"oklch(0.92 0.004 286.32)\", // --color-zinc-200\n\t\t\tring: \"oklch(0.705 0.015 286.067)\", // --color-zinc-400\n\t\t\t\"chart-1\": \"oklch(0.646 0.222 41.116)\", // --color-orange-600\n\t\t\t\"chart-2\": \"oklch(0.6 0.118 184.704)\", // --color-teal-600\n\t\t\t\"chart-3\": \"oklch(0.398 0.07 227.392)\", // --color-cyan-900\n\t\t\t\"chart-4\": \"oklch(0.828 0.189 84.429)\", // --color-amber-400\n\t\t\t\"chart-5\": \"oklch(0.769 0.188 70.08)\", // --color-amber-500\n\t\t\tradius: \"0.625rem\",\n\t\t\tsidebar: \"oklch(0.985 0 0)\", // --color-zinc-50\n\t\t\t\"sidebar-foreground\": \"oklch(0.141 0.005 285.823)\", // --color-zinc-950\n\t\t\t\"sidebar-primary\": \"oklch(0.21 0.006 285.885)\", // --color-zinc-900\n\t\t\t\"sidebar-primary-foreground\": \"oklch(0.985 0 0)\", // --color-zinc-50\n\t\t\t\"sidebar-accent\": \"oklch(0.967 0.001 286.375)\", // --color-zinc-100\n\t\t\t\"sidebar-accent-foreground\": \"oklch(0.21 0.006 285.885)\", // --color-zinc-900\n\t\t\t\"sidebar-border\": \"oklch(0.92 0.004 286.32)\", // --color-zinc-200\n\t\t\t\"sidebar-ring\": \"oklch(0.705 0.015 286.067)\", // --color-zinc-400\n\t\t},\n\t\tdark: {\n\t\t\tbackground: \"oklch(0.141 0.005 285.823)\", // --color-zinc-950\n\t\t\tforeground: \"oklch(0.985 0 0)\", // --color-zinc-50\n\t\t\tcard: \"oklch(0.21 0.006 285.885)\", // --color-zinc-900\n\t\t\t\"card-foreground\": \"oklch(0.985 0 0)\", // --color-zinc-50\n\t\t\tpopover: \"oklch(0.21 0.006 285.885)\", // --color-zinc-900\n\t\t\t\"popover-foreground\": \"oklch(0.985 0 0)\", // --color-zinc-50\n\t\t\tprimary: \"oklch(0.92 0.004 286.32)\", // --color-zinc-200\n\t\t\t\"primary-foreground\": \"oklch(0.21 0.006 285.885)\", // --color-zinc-900\n\t\t\tsecondary: \"oklch(0.274 0.006 286.033)\", // --color-zinc-800\n\t\t\t\"secondary-foreground\": \"oklch(0.985 0 0)\", // --color-zinc-50\n\t\t\tmuted: \"oklch(0.274 0.006 286.033)\", // --color-zinc-800\n\t\t\t\"muted-foreground\": \"oklch(0.705 0.015 286.067)\", // --color-zinc-400\n\t\t\taccent: \"oklch(0.274 0.006 286.033)\", // --color-zinc-800\n\t\t\t\"accent-foreground\": \"oklch(0.985 0 0)\", // --color-zinc-50\n\t\t\tdestructive: \"oklch(0.704 0.191 22.216)\", // --color-red-400\n\t\t\tborder: \"oklch(1 0 0 / 10%)\", // --color-white\n\t\t\tinput: \"oklch(1 0 0 / 15%)\", // --color-white\n\t\t\tring: \"oklch(0.552 0.016 285.938)\", // --color-zinc-500\n\t\t\t\"chart-1\": \"oklch(0.488 0.243 264.376)\", // --color-blue-700\n\t\t\t\"chart-2\": \"oklch(0.696 0.17 162.48)\", // --color-emerald-500\n\t\t\t\"chart-3\": \"oklch(0.769 0.188 70.08)\", // --color-amber-500\n\t\t\t\"chart-4\": \"oklch(0.627 0.265 303.9)\", // --color-purple-500\n\t\t\t\"chart-5\": \"oklch(0.645 0.246 16.439)\", // --color-rose-500\n\t\t\tsidebar: \"oklch(0.21 0.006 285.885)\", // --color-zinc-900\n\t\t\t\"sidebar-foreground\": \"oklch(0.985 0 0)\", // --color-zinc-50\n\t\t\t\"sidebar-primary\": \"oklch(0.488 0.243 264.376)\", // --color-blue-700\n\t\t\t\"sidebar-primary-foreground\": \"oklch(0.985 0 0)\", // --color-zinc-50\n\t\t\t\"sidebar-accent\": \"oklch(0.274 0.006 286.033)\", // --color-zinc-800\n\t\t\t\"sidebar-accent-foreground\": \"oklch(0.985 0 0)\", // --color-zinc-50\n\t\t\t\"sidebar-border\": \"oklch(1 0 0 / 10%)\", // --color-white\n\t\t\t\"sidebar-ring\": \"oklch(0.552 0.016 285.938)\", // --color-zinc-500\n\t\t},\n\t},\n\tneutral: {\n\t\tlight: {\n\t\t\tbackground: \"oklch(1 0 0)\", // --color-neutral-50\n\t\t\tforeground: \"oklch(0.145 0 0)\", // --color-neutral-950\n\t\t\tcard: \"oklch(1 0 0)\", // --color-neutral-50\n\t\t\t\"card-foreground\": \"oklch(0.145 0 0)\", // --color-neutral-950\n\t\t\tpopover: \"oklch(1 0 0)\", // --color-neutral-50\n\t\t\t\"popover-foreground\": \"oklch(0.145 0 0)\", // --color-neutral-950\n\t\t\tprimary: \"oklch(0.205 0 0)\", // --color-neutral-900\n\t\t\t\"primary-foreground\": \"oklch(0.985 0 0)\", // --color-neutral-50\n\t\t\tsecondary: \"oklch(0.97 0 0)\", // --color-neutral-100\n\t\t\t\"secondary-foreground\": \"oklch(0.205 0 0)\", // --color-neutral-900\n\t\t\tmuted: \"oklch(0.97 0 0)\", // --color-neutral-100\n\t\t\t\"muted-foreground\": \"oklch(0.556 0 0)\", // --color-neutral-500\n\t\t\taccent: \"oklch(0.97 0 0)\", // --color-neutral-100\n\t\t\t\"accent-foreground\": \"oklch(0.205 0 0)\", // --color-neutral-900\n\t\t\tdestructive: \"oklch(0.577 0.245 27.325)\", // --color-red-600\n\t\t\tborder: \"oklch(0.922 0 0)\", // --color-neutral-200\n\t\t\tinput: \"oklch(0.922 0 0)\", // --color-neutral-200\n\t\t\tring: \"oklch(0.708 0 0)\", // --color-neutral-400\n\t\t\t\"chart-1\": \"oklch(0.646 0.222 41.116)\", // --color-orange-600\n\t\t\t\"chart-2\": \"oklch(0.6 0.118 184.704)\", // --color-teal-600\n\t\t\t\"chart-3\": \"oklch(0.398 0.07 227.392)\", // --color-cyan-900\n\t\t\t\"chart-4\": \"oklch(0.828 0.189 84.429)\", // --color-amber-400\n\t\t\t\"chart-5\": \"oklch(0.769 0.188 70.08)\", // --color-amber-500\n\t\t\tradius: \"0.625rem\",\n\t\t\tsidebar: \"oklch(0.985 0 0)\", // --color-neutral-50\n\t\t\t\"sidebar-foreground\": \"oklch(0.145 0 0)\", // --color-neutral-950\n\t\t\t\"sidebar-primary\": \"oklch(0.205 0 0)\", // --color-neutral-900\n\t\t\t\"sidebar-primary-foreground\": \"oklch(0.985 0 0)\", // --color-neutral-50\n\t\t\t\"sidebar-accent\": \"oklch(0.97 0 0)\", // --color-neutral-100\n\t\t\t\"sidebar-accent-foreground\": \"oklch(0.205 0 0)\", // --color-neutral-900\n\t\t\t\"sidebar-border\": \"oklch(0.922 0 0)\", // --color-neutral-200\n\t\t\t\"sidebar-ring\": \"oklch(0.708 0 0)\", // --color-neutral-400\n\t\t},\n\t\tdark: {\n\t\t\tbackground: \"oklch(0.145 0 0)\", // --color-neutral-950\n\t\t\tforeground: \"oklch(0.985 0 0)\", // --color-neutral-50\n\t\t\tcard: \"oklch(0.205 0 0)\", // --color-neutral-900\n\t\t\t\"card-foreground\": \"oklch(0.985 0 0)\", // --color-neutral-50\n\t\t\tpopover: \"oklch(0.205 0 0)\", // --color-neutral-900\n\t\t\t\"popover-foreground\": \"oklch(0.985 0 0)\", // --color-neutral-50\n\t\t\tprimary: \"oklch(0.922 0 0)\", // --color-neutral-200\n\t\t\t\"primary-foreground\": \"oklch(0.205 0 0)\", // --color-neutral-900\n\t\t\tsecondary: \"oklch(0.269 0 0)\", // --color-neutral-800\n\t\t\t\"secondary-foreground\": \"oklch(0.985 0 0)\", // --color-neutral-50\n\t\t\tmuted: \"oklch(0.269 0 0)\", // --color-neutral-800\n\t\t\t\"muted-foreground\": \"oklch(0.708 0 0)\", // --color-neutral-400\n\t\t\taccent: \"oklch(0.269 0 0)\", // --color-neutral-800\n\t\t\t\"accent-foreground\": \"oklch(0.985 0 0)\", // --color-neutral-50\n\t\t\tdestructive: \"oklch(0.704 0.191 22.216)\", // --color-red-400\n\t\t\tborder: \"oklch(1 0 0 / 10%)\", // --color-white\n\t\t\tinput: \"oklch(1 0 0 / 15%)\", // --color-white\n\t\t\tring: \"oklch(0.556 0 0)\", // --color-neutral-500\n\t\t\t\"chart-1\": \"oklch(0.488 0.243 264.376)\", // --color-blue-700\n\t\t\t\"chart-2\": \"oklch(0.696 0.17 162.48)\", // --color-emerald-500\n\t\t\t\"chart-3\": \"oklch(0.769 0.188 70.08)\", // --color-amber-500\n\t\t\t\"chart-4\": \"oklch(0.627 0.265 303.9)\", // --color-purple-500\n\t\t\t\"chart-5\": \"oklch(0.645 0.246 16.439)\", // --color-rose-500\n\t\t\tsidebar: \"oklch(0.205 0 0)\", // --color-neutral-900\n\t\t\t\"sidebar-foreground\": \"oklch(0.985 0 0)\", // --color-neutral-50\n\t\t\t\"sidebar-primary\": \"oklch(0.488 0.243 264.376)\", // --color-blue-700\n\t\t\t\"sidebar-primary-foreground\": \"oklch(0.985 0 0)\", // --color-neutral-50\n\t\t\t\"sidebar-accent\": \"oklch(0.269 0 0)\", // --color-neutral-800\n\t\t\t\"sidebar-accent-foreground\": \"oklch(0.985 0 0)\", // --color-neutral-50\n\t\t\t\"sidebar-border\": \"oklch(1 0 0 / 10%)\", // --color-white\n\t\t\t\"sidebar-ring\": \"oklch(0.556 0 0)\", // --color-neutral-500\n\t\t},\n\t},\n\tgray: {\n\t\tlight: {\n\t\t\tbackground: \"oklch(1 0 0)\", // --color-white (closest to gray-50)\n\t\t\tforeground: \"oklch(0.13 0.028 261.692)\", // --color-gray-950\n\t\t\tcard: \"oklch(1 0 0)\", // --color-white (closest to gray-50)\n\t\t\t\"card-foreground\": \"oklch(0.13 0.028 261.692)\", // --color-gray-950\n\t\t\tpopover: \"oklch(1 0 0)\", // --color-white (closest to gray-50)\n\t\t\t\"popover-foreground\": \"oklch(0.13 0.028 261.692)\", // --color-gray-950\n\t\t\tprimary: \"oklch(0.21 0.034 264.665)\", // --color-gray-900\n\t\t\t\"primary-foreground\": \"oklch(0.985 0.002 247.839)\", // --color-gray-50\n\t\t\tsecondary: \"oklch(0.967 0.003 264.542)\", // --color-gray-100\n\t\t\t\"secondary-foreground\": \"oklch(0.21 0.034 264.665)\", // --color-gray-900\n\t\t\tmuted: \"oklch(0.967 0.003 264.542)\", // --color-gray-100\n\t\t\t\"muted-foreground\": \"oklch(0.551 0.027 264.364)\", // --color-gray-500\n\t\t\taccent: \"oklch(0.967 0.003 264.542)\", // --color-gray-100\n\t\t\t\"accent-foreground\": \"oklch(0.21 0.034 264.665)\", // --color-gray-900\n\t\t\tdestructive: \"oklch(0.577 0.245 27.325)\", // --color-red-600\n\t\t\tborder: \"oklch(0.928 0.006 264.531)\", // --color-gray-200\n\t\t\tinput: \"oklch(0.928 0.006 264.531)\", // --color-gray-200\n\t\t\tring: \"oklch(0.707 0.022 261.325)\", // --color-gray-400\n\t\t\t\"chart-1\": \"oklch(0.646 0.222 41.116)\", // --color-orange-600\n\t\t\t\"chart-2\": \"oklch(0.6 0.118 184.704)\", // --color-teal-600\n\t\t\t\"chart-3\": \"oklch(0.398 0.07 227.392)\", // --color-cyan-900\n\t\t\t\"chart-4\": \"oklch(0.828 0.189 84.429)\", // --color-amber-400\n\t\t\t\"chart-5\": \"oklch(0.769 0.188 70.08)\", // --color-amber-500\n\t\t\tradius: \"0.625rem\",\n\t\t\tsidebar: \"oklch(0.985 0.002 247.839)\", // --color-gray-50\n\t\t\t\"sidebar-foreground\": \"oklch(0.13 0.028 261.692)\", // --color-gray-950\n\t\t\t\"sidebar-primary\": \"oklch(0.21 0.034 264.665)\", // --color-gray-900\n\t\t\t\"sidebar-primary-foreground\": \"oklch(0.985 0.002 247.839)\", // --color-gray-50\n\t\t\t\"sidebar-accent\": \"oklch(0.967 0.003 264.542)\", // --color-gray-100\n\t\t\t\"sidebar-accent-foreground\": \"oklch(0.21 0.034 264.665)\", // --color-gray-900\n\t\t\t\"sidebar-border\": \"oklch(0.928 0.006 264.531)\", // --color-gray-200\n\t\t\t\"sidebar-ring\": \"oklch(0.707 0.022 261.325)\", // --color-gray-400\n\t\t},\n\t\tdark: {\n\t\t\tbackground: \"oklch(0.13 0.028 261.692)\", // --color-gray-950\n\t\t\tforeground: \"oklch(0.985 0.002 247.839)\", // --color-gray-50\n\t\t\tcard: \"oklch(0.21 0.034 264.665)\", // --color-gray-900\n\t\t\t\"card-foreground\": \"oklch(0.985 0.002 247.839)\", // --color-gray-50\n\t\t\tpopover: \"oklch(0.21 0.034 264.665)\", // --color-gray-900\n\t\t\t\"popover-foreground\": \"oklch(0.985 0.002 247.839)\", // --color-gray-50\n\t\t\tprimary: \"oklch(0.928 0.006 264.531)\", // --color-gray-200\n\t\t\t\"primary-foreground\": \"oklch(0.21 0.034 264.665)\", // --color-gray-900\n\t\t\tsecondary: \"oklch(0.278 0.033 256.848)\", // --color-gray-800\n\t\t\t\"secondary-foreground\": \"oklch(0.985 0.002 247.839)\", // --color-gray-50\n\t\t\tmuted: \"oklch(0.278 0.033 256.848)\", // --color-gray-800\n\t\t\t\"muted-foreground\": \"oklch(0.707 0.022 261.325)\", // --color-gray-400\n\t\t\taccent: \"oklch(0.278 0.033 256.848)\", // --color-gray-800\n\t\t\t\"accent-foreground\": \"oklch(0.985 0.002 247.839)\", // --color-gray-50\n\t\t\tdestructive: \"oklch(0.704 0.191 22.216)\", // --color-red-400\n\t\t\tborder: \"oklch(1 0 0 / 10%)\", // --color-white\n\t\t\tinput: \"oklch(1 0 0 / 15%)\", // --color-white\n\t\t\tring: \"oklch(0.551 0.027 264.364)\", // --color-gray-500\n\t\t\t\"chart-1\": \"oklch(0.488 0.243 264.376)\", // --color-blue-700\n\t\t\t\"chart-2\": \"oklch(0.696 0.17 162.48)\", // --color-emerald-500\n\t\t\t\"chart-3\": \"oklch(0.769 0.188 70.08)\", // --color-amber-500\n\t\t\t\"chart-4\": \"oklch(0.627 0.265 303.9)\", // --color-purple-500\n\t\t\t\"chart-5\": \"oklch(0.645 0.246 16.439)\", // --color-rose-500\n\t\t\tsidebar: \"oklch(0.21 0.034 264.665)\", // --color-gray-900\n\t\t\t\"sidebar-foreground\": \"oklch(0.985 0.002 247.839)\", // --color-gray-50\n\t\t\t\"sidebar-primary\": \"oklch(0.488 0.243 264.376)\", // --color-blue-700\n\t\t\t\"sidebar-primary-foreground\": \"oklch(0.985 0.002 247.839)\", // --color-gray-50\n\t\t\t\"sidebar-accent\": \"oklch(0.278 0.033 256.848)\", // --color-gray-800\n\t\t\t\"sidebar-accent-foreground\": \"oklch(0.985 0.002 247.839)\", // --color-gray-50\n\t\t\t\"sidebar-border\": \"oklch(1 0 0 / 10%)\", // --color-white\n\t\t\t\"sidebar-ring\": \"oklch(0.551 0.027 264.364)\", // --color-gray-500\n\t\t},\n\t},\n\tslate: {\n\t\tlight: {\n\t\t\tbackground: \"oklch(1 0 0)\", // --color-white (closest to slate-50)\n\t\t\tforeground: \"oklch(0.129 0.042 264.695)\", // --color-slate-950\n\t\t\tcard: \"oklch(1 0 0)\", // --color-white (closest to slate-50)\n\t\t\t\"card-foreground\": \"oklch(0.129 0.042 264.695)\", // --color-slate-950\n\t\t\tpopover: \"oklch(1 0 0)\", // --color-white (closest to slate-50)\n\t\t\t\"popover-foreground\": \"oklch(0.129 0.042 264.695)\", // --color-slate-950\n\t\t\tprimary: \"oklch(0.208 0.042 265.755)\", // --color-slate-900\n\t\t\t\"primary-foreground\": \"oklch(0.984 0.003 247.858)\", // --color-slate-50\n\t\t\tsecondary: \"oklch(0.968 0.007 247.896)\", // --color-slate-100\n\t\t\t\"secondary-foreground\": \"oklch(0.208 0.042 265.755)\", // --color-slate-900\n\t\t\tmuted: \"oklch(0.968 0.007 247.896)\", // --color-slate-100\n\t\t\t\"muted-foreground\": \"oklch(0.554 0.046 257.417)\", // --color-slate-500\n\t\t\taccent: \"oklch(0.968 0.007 247.896)\", // --color-slate-100\n\t\t\t\"accent-foreground\": \"oklch(0.208 0.042 265.755)\", // --color-slate-900\n\t\t\tdestructive: \"oklch(0.577 0.245 27.325)\", // --color-red-600\n\t\t\tborder: \"oklch(0.929 0.013 255.508)\", // --color-slate-200\n\t\t\tinput: \"oklch(0.929 0.013 255.508)\", // --color-slate-200\n\t\t\tring: \"oklch(0.704 0.04 256.788)\", // --color-slate-400\n\t\t\t\"chart-1\": \"oklch(0.646 0.222 41.116)\", // --color-orange-600\n\t\t\t\"chart-2\": \"oklch(0.6 0.118 184.704)\", // --color-teal-600\n\t\t\t\"chart-3\": \"oklch(0.398 0.07 227.392)\", // --color-cyan-900\n\t\t\t\"chart-4\": \"oklch(0.828 0.189 84.429)\", // --color-amber-400\n\t\t\t\"chart-5\": \"oklch(0.769 0.188 70.08)\", // --color-amber-500\n\t\t\tradius: \"0.625rem\",\n\t\t\tsidebar: \"oklch(0.984 0.003 247.858)\", // --color-slate-50\n\t\t\t\"sidebar-foreground\": \"oklch(0.129 0.042 264.695)\", // --color-slate-950\n\t\t\t\"sidebar-primary\": \"oklch(0.208 0.042 265.755)\", // --color-slate-900\n\t\t\t\"sidebar-primary-foreground\": \"oklch(0.984 0.003 247.858)\", // --color-slate-50\n\t\t\t\"sidebar-accent\": \"oklch(0.968 0.007 247.896)\", // --color-slate-100\n\t\t\t\"sidebar-accent-foreground\": \"oklch(0.208 0.042 265.755)\", // --color-slate-900\n\t\t\t\"sidebar-border\": \"oklch(0.929 0.013 255.508)\", // --color-slate-200\n\t\t\t\"sidebar-ring\": \"oklch(0.704 0.04 256.788)\", // --color-slate-400\n\t\t},\n\t\tdark: {\n\t\t\tbackground: \"oklch(0.129 0.042 264.695)\", // --color-slate-950\n\t\t\tforeground: \"oklch(0.984 0.003 247.858)\", // --color-slate-50\n\t\t\tcard: \"oklch(0.208 0.042 265.755)\", // --color-slate-900\n\t\t\t\"card-foreground\": \"oklch(0.984 0.003 247.858)\", // --color-slate-50\n\t\t\tpopover: \"oklch(0.208 0.042 265.755)\", // --color-slate-900\n\t\t\t\"popover-foreground\": \"oklch(0.984 0.003 247.858)\", // --color-slate-50\n\t\t\tprimary: \"oklch(0.929 0.013 255.508)\", // --color-slate-200\n\t\t\t\"primary-foreground\": \"oklch(0.208 0.042 265.755)\", // --color-slate-900\n\t\t\tsecondary: \"oklch(0.279 0.041 260.031)\", // --color-slate-800\n\t\t\t\"secondary-foreground\": \"oklch(0.984 0.003 247.858)\", // --color-slate-50\n\t\t\tmuted: \"oklch(0.279 0.041 260.031)\", // --color-slate-800\n\t\t\t\"muted-foreground\": \"oklch(0.704 0.04 256.788)\", // --color-slate-400\n\t\t\taccent: \"oklch(0.279 0.041 260.031)\", // --color-slate-800\n\t\t\t\"accent-foreground\": \"oklch(0.984 0.003 247.858)\", // --color-slate-50\n\t\t\tdestructive: \"oklch(0.704 0.191 22.216)\", // --color-red-400\n\t\t\tborder: \"oklch(1 0 0 / 10%)\", // --color-white\n\t\t\tinput: \"oklch(1 0 0 / 15%)\", // --color-white\n\t\t\tring: \"oklch(0.551 0.027 264.364)\", // --color-slate-500\n\t\t\t\"chart-1\": \"oklch(0.488 0.243 264.376)\", // --color-blue-700\n\t\t\t\"chart-2\": \"oklch(0.696 0.17 162.48)\", // --color-emerald-500\n\t\t\t\"chart-3\": \"oklch(0.769 0.188 70.08)\", // --color-amber-500\n\t\t\t\"chart-4\": \"oklch(0.627 0.265 303.9)\", // --color-purple-500\n\t\t\t\"chart-5\": \"oklch(0.645 0.246 16.439)\", // --color-rose-500\n\t\t\tsidebar: \"oklch(0.208 0.042 265.755)\", // --color-slate-900\n\t\t\t\"sidebar-foreground\": \"oklch(0.984 0.003 247.858)\", // --color-slate-50\n\t\t\t\"sidebar-primary\": \"oklch(0.488 0.243 264.376)\", // --color-blue-700\n\t\t\t\"sidebar-primary-foreground\": \"oklch(0.984 0.003 247.858)\", // --color-slate-50\n\t\t\t\"sidebar-accent\": \"oklch(0.279 0.041 260.031)\", // --color-slate-800\n\t\t\t\"sidebar-accent-foreground\": \"oklch(0.984 0.003 247.858)\", // --color-slate-50\n\t\t\t\"sidebar-border\": \"oklch(1 0 0 / 10%)\", // --color-white\n\t\t\t\"sidebar-ring\": \"oklch(0.551 0.027 264.364)\", // --color-slate-500\n\t\t},\n\t},\n} as const;\n\nexport const baseColorsOKLCH = {\n\tdefault: {\n\t\tlight: {\n\t\t\tbackground: \"oklch(1 0 0)\", // --color-neutral-50\n\t\t\tforeground: \"oklch(0.145 0 0)\", // --color-neutral-950\n\t\t\tcard: \"oklch(1 0 0)\", // --color-neutral-50\n\t\t\t\"card-foreground\": \"oklch(0.145 0 0)\", // --color-neutral-950\n\t\t\tpopover: \"oklch(1 0 0)\", // --color-neutral-50\n\t\t\t\"popover-foreground\": \"oklch(0.145 0 0)\", // --color-neutral-950\n\t\t\tprimary: \"oklch(0.205 0 0)\", // --color-neutral-900\n\t\t\t\"primary-foreground\": \"oklch(0.985 0 0)\", // --color-neutral-50\n\t\t\tsecondary: \"oklch(0.97 0 0)\", // --color-neutral-100\n\t\t\t\"secondary-foreground\": \"oklch(0.205 0 0)\", // --color-neutral-900\n\t\t\tmuted: \"oklch(0.97 0 0)\", // --color-neutral-100\n\t\t\t\"muted-foreground\": \"oklch(0.556 0 0)\", // --color-neutral-500\n\t\t\taccent: \"oklch(0.97 0 0)\", // --color-neutral-100\n\t\t\t\"accent-foreground\": \"oklch(0.205 0 0)\", // --color-neutral-900\n\t\t\tdestructive: \"oklch(0.577 0.245 27.325)\", // --color-red-600\n\t\t\tborder: \"oklch(0.922 0 0)\", // --color-neutral-200\n\t\t\tinput: \"oklch(0.922 0 0)\", // --color-neutral-200\n\t\t\tring: \"oklch(0.708 0 0)\", // --color-neutral-400\n\t\t\t\"chart-1\": \"oklch(0.646 0.222 41.116)\", // --color-orange-600\n\t\t\t\"chart-2\": \"oklch(0.6 0.118 184.704)\", // --color-teal-600\n\t\t\t\"chart-3\": \"oklch(0.398 0.07 227.392)\", // --color-cyan-900\n\t\t\t\"chart-4\": \"oklch(0.828 0.189 84.429)\", // --color-amber-400\n\t\t\t\"chart-5\": \"oklch(0.769 0.188 70.08)\", // --color-amber-500\n\t\t\tradius: \"0.625rem\",\n\t\t\tsidebar: \"oklch(0.985 0 0)\", // --color-neutral-50\n\t\t\t\"sidebar-foreground\": \"oklch(0.145 0 0)\", // --color-neutral-950\n\t\t\t\"sidebar-primary\": \"oklch(0.205 0 0)\", // --color-neutral-900\n\t\t\t\"sidebar-primary-foreground\": \"oklch(0.985 0 0)\", // --color-neutral-50\n\t\t\t\"sidebar-accent\": \"oklch(0.97 0 0)\", // --color-neutral-100\n\t\t\t\"sidebar-accent-foreground\": \"oklch(0.205 0 0)\", // --color-neutral-900\n\t\t\t\"sidebar-border\": \"oklch(0.922 0 0)\", // --color-neutral-200\n\t\t\t\"sidebar-ring\": \"oklch(0.708 0 0)\", // --color-neutral-400\n\t\t},\n\t\tdark: {\n\t\t\tbackground: \"oklch(0.145 0 0)\", // --color-neutral-950\n\t\t\tforeground: \"oklch(0.985 0 0)\", // --color-neutral-50\n\t\t\tcard: \"oklch(0.205 0 0)\", // --color-neutral-900\n\t\t\t\"card-foreground\": \"oklch(0.985 0 0)\", // --color-neutral-50\n\t\t\tpopover: \"oklch(0.205 0 0)\", // --color-neutral-900\n\t\t\t\"popover-foreground\": \"oklch(0.985 0 0)\", // --color-neutral-50\n\t\t\tprimary: \"oklch(0.922 0 0)\", // --color-neutral-200\n\t\t\t\"primary-foreground\": \"oklch(0.205 0 0)\", // --color-neutral-900\n\t\t\tsecondary: \"oklch(0.269 0 0)\", // --color-neutral-800\n\t\t\t\"secondary-foreground\": \"oklch(0.985 0 0)\", // --color-neutral-50\n\t\t\tmuted: \"oklch(0.269 0 0)\", // --color-neutral-800\n\t\t\t\"muted-foreground\": \"oklch(0.708 0 0)\", // --color-neutral-400\n\t\t\taccent: \"oklch(0.269 0 0)\", // --color-neutral-800\n\t\t\t\"accent-foreground\": \"oklch(0.985 0 0)\", // --color-neutral-50\n\t\t\tdestructive: \"oklch(0.704 0.191 22.216)\", // --color-red-400\n\t\t\tborder: \"oklch(1 0 0 / 10%)\", // --color-white\n\t\t\tinput: \"oklch(1 0 0 / 15%)\", // --color-white\n\t\t\tring: \"oklch(0.556 0 0)\", // --color-neutral-500\n\t\t\t\"chart-1\": \"oklch(0.488 0.243 264.376)\", // --color-blue-700\n\t\t\t\"chart-2\": \"oklch(0.696 0.17 162.48)\", // --color-emerald-500\n\t\t\t\"chart-3\": \"oklch(0.769 0.188 70.08)\", // --color-amber-500\n\t\t\t\"chart-4\": \"oklch(0.627 0.265 303.9)\", // --color-purple-500\n\t\t\t\"chart-5\": \"oklch(0.645 0.246 16.439)\", // --color-rose-500\n\t\t\tsidebar: \"oklch(0.205 0 0)\", // --color-neutral-900\n\t\t\t\"sidebar-foreground\": \"oklch(0.985 0 0)\", // --color-neutral-50\n\t\t\t\"sidebar-primary\": \"oklch(0.488 0.243 264.376)\", // --color-blue-700\n\t\t\t\"sidebar-primary-foreground\": \"oklch(0.985 0 0)\", // --color-neutral-50\n\t\t\t\"sidebar-accent\": \"oklch(0.269 0 0)\", // --color-neutral-800\n\t\t\t\"sidebar-accent-foreground\": \"oklch(0.985 0 0)\", // --color-neutral-50\n\t\t\t\"sidebar-border\": \"oklch(1 0 0 / 10%)\", // --color-white\n\t\t\t\"sidebar-ring\": \"oklch(0.556 0 0)\", // --color-neutral-500\n\t\t},\n\t},\n\tneutral: {\n\t\tlight: {\n\t\t\tbackground: \"oklch(1 0 0)\", // --color-neutral-50\n\t\t\tforeground: \"oklch(0.145 0 0)\", // --color-neutral-950\n\t\t\tcard: \"oklch(1 0 0)\", // --color-neutral-50\n\t\t\t\"card-foreground\": \"oklch(0.145 0 0)\", // --color-neutral-950\n\t\t\tpopover: \"oklch(1 0 0)\", // --color-neutral-50\n\t\t\t\"popover-foreground\": \"oklch(0.145 0 0)\", // --color-neutral-950\n\t\t\tprimary: \"oklch(0.205 0 0)\", // --color-neutral-900\n\t\t\t\"primary-foreground\": \"oklch(0.985 0 0)\", // --color-neutral-50\n\t\t\tsecondary: \"oklch(0.97 0 0)\", // --color-neutral-100\n\t\t\t\"secondary-foreground\": \"oklch(0.205 0 0)\", // --color-neutral-900\n\t\t\tmuted: \"oklch(0.97 0 0)\", // --color-neutral-100\n\t\t\t\"muted-foreground\": \"oklch(0.556 0 0)\", // --color-neutral-500\n\t\t\taccent: \"oklch(0.97 0 0)\", // --color-neutral-100\n\t\t\t\"accent-foreground\": \"oklch(0.205 0 0)\", // --color-neutral-900\n\t\t\tdestructive: \"oklch(0.577 0.245 27.325)\", // --color-red-600\n\t\t\tborder: \"oklch(0.922 0 0)\", // --color-neutral-200\n\t\t\tinput: \"oklch(0.922 0 0)\", // --color-neutral-200\n\t\t\tring: \"oklch(0.708 0 0)\", // --color-neutral-400\n\t\t\t\"chart-1\": \"oklch(0.646 0.222 41.116)\", // --color-orange-600\n\t\t\t\"chart-2\": \"oklch(0.6 0.118 184.704)\", // --color-teal-600\n\t\t\t\"chart-3\": \"oklch(0.398 0.07 227.392)\", // --color-cyan-900\n\t\t\t\"chart-4\": \"oklch(0.828 0.189 84.429)\", // --color-amber-400\n\t\t\t\"chart-5\": \"oklch(0.769 0.188 70.08)\", // --color-amber-500\n\t\t\tradius: \"0.625rem\",\n\t\t\tsidebar: \"oklch(0.985 0 0)\", // --color-neutral-50\n\t\t\t\"sidebar-foreground\": \"oklch(0.145 0 0)\", // --color-neutral-950\n\t\t\t\"sidebar-primary\": \"oklch(0.205 0 0)\", // --color-neutral-900\n\t\t\t\"sidebar-primary-foreground\": \"oklch(0.985 0 0)\", // --color-neutral-50\n\t\t\t\"sidebar-accent\": \"oklch(0.97 0 0)\", // --color-neutral-100\n\t\t\t\"sidebar-accent-foreground\": \"oklch(0.205 0 0)\", // --color-neutral-900\n\t\t\t\"sidebar-border\": \"oklch(0.922 0 0)\", // --color-neutral-200\n\t\t\t\"sidebar-ring\": \"oklch(0.708 0 0)\", // --color-neutral-400\n\t\t},\n\t\tdark: {\n\t\t\tbackground: \"oklch(0.145 0 0)\", // --color-neutral-950\n\t\t\tforeground: \"oklch(0.985 0 0)\", // --color-neutral-50\n\t\t\tcard: \"oklch(0.205 0 0)\", // --color-neutral-900\n\t\t\t\"card-foreground\": \"oklch(0.985 0 0)\", // --color-neutral-50\n\t\t\tpopover: \"oklch(0.205 0 0)\", // --color-neutral-900\n\t\t\t\"popover-foreground\": \"oklch(0.985 0 0)\", // --color-neutral-50\n\t\t\tprimary: \"oklch(0.922 0 0)\", // --color-neutral-200\n\t\t\t\"primary-foreground\": \"oklch(0.205 0 0)\", // --color-neutral-900\n\t\t\tsecondary: \"oklch(0.269 0 0)\", // --color-neutral-800\n\t\t\t\"secondary-foreground\": \"oklch(0.985 0 0)\", // --color-neutral-50\n\t\t\tmuted: \"oklch(0.269 0 0)\", // --color-neutral-800\n\t\t\t\"muted-foreground\": \"oklch(0.708 0 0)\", // --color-neutral-400\n\t\t\taccent: \"oklch(0.269 0 0)\", // --color-neutral-800\n\t\t\t\"accent-foreground\": \"oklch(0.985 0 0)\", // --color-neutral-50\n\t\t\tdestructive: \"oklch(0.704 0.191 22.216)\", // --color-red-400\n\t\t\tborder: \"oklch(1 0 0 / 10%)\", // --color-white\n\t\t\tinput: \"oklch(1 0 0 / 15%)\", // --color-white\n\t\t\tring: \"oklch(0.556 0 0)\", // --color-neutral-500\n\t\t\t\"chart-1\": \"oklch(0.488 0.243 264.376)\", // --color-blue-700\n\t\t\t\"chart-2\": \"oklch(0.696 0.17 162.48)\", // --color-emerald-500\n\t\t\t\"chart-3\": \"oklch(0.769 0.188 70.08)\", // --color-amber-500\n\t\t\t\"chart-4\": \"oklch(0.627 0.265 303.9)\", // --color-purple-500\n\t\t\t\"chart-5\": \"oklch(0.645 0.246 16.439)\", // --color-rose-500\n\t\t\tsidebar: \"oklch(0.205 0 0)\", // --color-neutral-900\n\t\t\t\"sidebar-foreground\": \"oklch(0.985 0 0)\", // --color-neutral-50\n\t\t\t\"sidebar-primary\": \"oklch(0.488 0.243 264.376)\", // --color-blue-700\n\t\t\t\"sidebar-primary-foreground\": \"oklch(0.985 0 0)\", // --color-neutral-50\n\t\t\t\"sidebar-accent\": \"oklch(0.269 0 0)\", // --color-neutral-800\n\t\t\t\"sidebar-accent-foreground\": \"oklch(0.985 0 0)\", // --color-neutral-50\n\t\t\t\"sidebar-border\": \"oklch(1 0 0 / 10%)\", // --color-white\n\t\t\t\"sidebar-ring\": \"oklch(0.556 0 0)\", // --color-neutral-500\n\t\t},\n\t},\n\tzinc: {\n\t\tlight: {\n\t\t\tbackground: \"oklch(1 0 0)\", // --color-zinc-50\n\t\t\tforeground: \"oklch(0.141 0.005 285.823)\", // --color-zinc-950\n\t\t\tcard: \"oklch(1 0 0)\", // --color-zinc-50\n\t\t\t\"card-foreground\": \"oklch(0.141 0.005 285.823)\", // --color-zinc-950\n\t\t\tpopover: \"oklch(1 0 0)\", // --color-zinc-50\n\t\t\t\"popover-foreground\": \"oklch(0.141 0.005 285.823)\", // --color-zinc-950\n\t\t\tprimary: \"oklch(0.21 0.006 285.885)\", // --color-zinc-900\n\t\t\t\"primary-foreground\": \"oklch(0.985 0 0)\", // --color-zinc-50\n\t\t\tsecondary: \"oklch(0.967 0.001 286.375)\", // --color-zinc-100\n\t\t\t\"secondary-foreground\": \"oklch(0.21 0.006 285.885)\", // --color-zinc-900\n\t\t\tmuted: \"oklch(0.967 0.001 286.375)\", // --color-zinc-100\n\t\t\t\"muted-foreground\": \"oklch(0.552 0.016 285.938)\", // --color-zinc-500\n\t\t\taccent: \"oklch(0.967 0.001 286.375)\", // --color-zinc-100\n\t\t\t\"accent-foreground\": \"oklch(0.21 0.006 285.885)\", // --color-zinc-900\n\t\t\tdestructive: \"oklch(0.577 0.245 27.325)\", // --color-red-600\n\t\t\tborder: \"oklch(0.92 0.004 286.32)\", // --color-zinc-200\n\t\t\tinput: \"oklch(0.92 0.004 286.32)\", // --color-zinc-200\n\t\t\tring: \"oklch(0.705 0.015 286.067)\", // --color-zinc-400\n\t\t\t\"chart-1\": \"oklch(0.646 0.222 41.116)\", // --color-orange-600\n\t\t\t\"chart-2\": \"oklch(0.6 0.118 184.704)\", // --color-teal-600\n\t\t\t\"chart-3\": \"oklch(0.398 0.07 227.392)\", // --color-cyan-900\n\t\t\t\"chart-4\": \"oklch(0.828 0.189 84.429)\", // --color-amber-400\n\t\t\t\"chart-5\": \"oklch(0.769 0.188 70.08)\", // --color-amber-500\n\t\t\tsidebar: \"oklch(0.985 0 0)\", // --color-zinc-50\n\t\t\t\"sidebar-foreground\": \"oklch(0.141 0.005 285.823)\", // --color-zinc-950\n\t\t\t\"sidebar-primary\": \"oklch(0.21 0.006 285.885)\", // --color-zinc-900\n\t\t\t\"sidebar-primary-foreground\": \"oklch(0.985 0 0)\", // --color-zinc-50\n\t\t\t\"sidebar-accent\": \"oklch(0.967 0.001 286.375)\", // --color-zinc-100\n\t\t\t\"sidebar-accent-foreground\": \"oklch(0.21 0.006 285.885)\", // --color-zinc-900\n\t\t\t\"sidebar-border\": \"oklch(0.92 0.004 286.32)\", // --color-zinc-200\n\t\t\t\"sidebar-ring\": \"oklch(0.705 0.015 286.067)\", // --color-zinc-400\n\t\t},\n\t\tdark: {\n\t\t\tbackground: \"oklch(0.141 0.005 285.823)\", // --color-zinc-950\n\t\t\tforeground: \"oklch(0.985 0 0)\", // --color-zinc-50\n\t\t\tcard: \"oklch(0.21 0.006 285.885)\", // --color-zinc-900\n\t\t\t\"card-foreground\": \"oklch(0.985 0 0)\", // --color-zinc-50\n\t\t\tpopover: \"oklch(0.21 0.006 285.885)\", // --color-zinc-900\n\t\t\t\"popover-foreground\": \"oklch(0.985 0 0)\", // --color-zinc-50\n\t\t\tprimary: \"oklch(0.92 0.004 286.32)\", // --color-zinc-200\n\t\t\t\"primary-foreground\": \"oklch(0.21 0.006 285.885)\", // --color-zinc-900\n\t\t\tsecondary: \"oklch(0.274 0.006 286.033)\", // --color-zinc-800\n\t\t\t\"secondary-foreground\": \"oklch(0.985 0 0)\", // --color-zinc-50\n\t\t\tmuted: \"oklch(0.274 0.006 286.033)\", // --color-zinc-800\n\t\t\t\"muted-foreground\": \"oklch(0.705 0.015 286.067)\", // --color-zinc-400\n\t\t\taccent: \"oklch(0.274 0.006 286.033)\", // --color-zinc-800\n\t\t\t\"accent-foreground\": \"oklch(0.985 0 0)\", // --color-zinc-50\n\t\t\tdestructive: \"oklch(0.704 0.191 22.216)\", // --color-red-400\n\t\t\tborder: \"oklch(1 0 0 / 10%)\", // --color-white\n\t\t\tinput: \"oklch(1 0 0 / 15%)\", // --color-white\n\t\t\tring: \"oklch(0.552 0.016 285.938)\", // --color-zinc-500\n\t\t\t\"chart-1\": \"oklch(0.488 0.243 264.376)\", // --color-blue-700\n\t\t\t\"chart-2\": \"oklch(0.696 0.17 162.48)\", // --color-emerald-500\n\t\t\t\"chart-3\": \"oklch(0.769 0.188 70.08)\", // --color-amber-500\n\t\t\t\"chart-4\": \"oklch(0.627 0.265 303.9)\", // --color-purple-500\n\t\t\t\"chart-5\": \"oklch(0.645 0.246 16.439)\", // --color-rose-500\n\t\t\tsidebar: \"oklch(0.21 0.006 285.885)\", // --color-zinc-900\n\t\t\t\"sidebar-foreground\": \"oklch(0.985 0 0)\", // --color-zinc-50\n\t\t\t\"sidebar-primary\": \"oklch(0.488 0.243 264.376)\", // --color-blue-700\n\t\t\t\"sidebar-primary-foreground\": \"oklch(0.985 0 0)\", // --color-zinc-50\n\t\t\t\"sidebar-accent\": \"oklch(0.274 0.006 286.033)\", // --color-zinc-800\n\t\t\t\"sidebar-accent-foreground\": \"oklch(0.985 0 0)\", // --color-zinc-50\n\t\t\t\"sidebar-border\": \"oklch(1 0 0 / 10%)\", // --color-white\n\t\t\t\"sidebar-ring\": \"oklch(0.552 0.016 285.938)\", // --color-zinc-500\n\t\t},\n\t},\n\tred: {\n\t\tlight: {\n\t\t\tbackground: \"oklch(1 0 0)\", // --color-zinc-50 (from zinc)\n\t\t\tforeground: \"oklch(0.141 0.005 285.823)\", // --color-zinc-950 (from zinc)\n\t\t\tcard: \"oklch(1 0 0)\", // --color-zinc-50 (from zinc)\n\t\t\t\"card-foreground\": \"oklch(0.141 0.005 285.823)\", // --color-zinc-950 (from zinc)\n\t\t\tpopover: \"oklch(1 0 0)\", // --color-zinc-50 (from zinc)\n\t\t\t\"popover-foreground\": \"oklch(0.141 0.005 285.823)\", // --color-zinc-950 (from zinc)\n\t\t\tprimary: \"oklch(0.637 0.237 25.331)\", // --color-red-500 (approx HSL 0 72.2% 50.6%)\n\t\t\t\"primary-foreground\": \"oklch(0.971 0.013 17.38)\", // --color-red-50 (approx HSL 0 85.7% 97.3%)\n\t\t\tsecondary: \"oklch(0.967 0.001 286.375)\", // --color-zinc-100 (from zinc)\n\t\t\t\"secondary-foreground\": \"oklch(0.21 0.006 285.885)\", // --color-zinc-900 (from zinc)\n\t\t\tmuted: \"oklch(0.967 0.001 286.375)\", // --color-zinc-100 (from zinc)\n\t\t\t\"muted-foreground\": \"oklch(0.552 0.016 285.938)\", // --color-zinc-500 (from zinc)\n\t\t\taccent: \"oklch(0.967 0.001 286.375)\", // --color-zinc-100 (from zinc)\n\t\t\t\"accent-foreground\": \"oklch(0.21 0.006 285.885)\", // --color-zinc-900 (from zinc)\n\t\t\tdestructive: \"oklch(0.577 0.245 27.325)\", // --color-red-600 (from zinc)\n\t\t\tborder: \"oklch(0.92 0.004 286.32)\", // --color-zinc-200 (from zinc)\n\t\t\tinput: \"oklch(0.92 0.004 286.32)\", // --color-zinc-200 (from zinc)\n\t\t\tring: \"oklch(0.637 0.237 25.331)\", // --color-red-500 (approx HSL 0 72.2% 50.6%)\n\t\t\t\"chart-1\": \"oklch(0.646 0.222 41.116)\", // --color-orange-600 (from zinc)\n\t\t\t\"chart-2\": \"oklch(0.6 0.118 184.704)\", // --color-teal-600 (from zinc)\n\t\t\t\"chart-3\": \"oklch(0.398 0.07 227.392)\", // --color-cyan-900 (from zinc)\n\t\t\t\"chart-4\": \"oklch(0.828 0.189 84.429)\", // --color-amber-400 (from zinc)\n\t\t\t\"chart-5\": \"oklch(0.769 0.188 70.08)\", // --color-amber-500 (from zinc)\n\t\t\tsidebar: \"oklch(0.985 0 0)\", // --color-zinc-50 (from zinc)\n\t\t\t\"sidebar-foreground\": \"oklch(0.141 0.005 285.823)\", // --color-zinc-950 (from zinc)\n\t\t\t\"sidebar-primary\": \"oklch(0.637 0.237 25.331)\", // --color-red-500 (approx HSL 0 72.2% 50.6%)\n\t\t\t\"sidebar-primary-foreground\": \"oklch(0.971 0.013 17.38)\", // --color-red-50 (approx HSL 0 85.7% 97.3%)\n\t\t\t\"sidebar-accent\": \"oklch(0.967 0.001 286.375)\", // --color-zinc-100 (from zinc)\n\t\t\t\"sidebar-accent-foreground\": \"oklch(0.21 0.006 285.885)\", // --color-zinc-900 (from zinc)\n\t\t\t\"sidebar-border\": \"oklch(0.92 0.004 286.32)\", // --color-zinc-200 (from zinc)\n\t\t\t\"sidebar-ring\": \"oklch(0.637 0.237 25.331)\", // --color-red-500 (approx HSL 0 72.2% 50.6%)\n\t\t},\n\t\tdark: {\n\t\t\tbackground: \"oklch(0.141 0.005 285.823)\", // --color-zinc-950 (from zinc)\n\t\t\tforeground: \"oklch(0.985 0 0)\", // --color-zinc-50 (from zinc)\n\t\t\tcard: \"oklch(0.21 0.006 285.885)\", // --color-zinc-900 (from zinc)\n\t\t\t\"card-foreground\": \"oklch(0.985 0 0)\", // --color-zinc-50 (from zinc)\n\t\t\tpopover: \"oklch(0.21 0.006 285.885)\", // --color-zinc-900 (from zinc)\n\t\t\t\"popover-foreground\": \"oklch(0.985 0 0)\", // --color-zinc-50 (from zinc)\n\t\t\tprimary: \"oklch(0.637 0.237 25.331)\", // --color-red-500 (approx HSL 0 72.2% 50.6%)\n\t\t\t\"primary-foreground\": \"oklch(0.971 0.013 17.38)\", // --color-red-50 (approx HSL 0 85.7% 97.3%)\n\t\t\tsecondary: \"oklch(0.274 0.006 286.033)\", // --color-zinc-800 (from zinc)\n\t\t\t\"secondary-foreground\": \"oklch(0.985 0 0)\", // --color-zinc-50 (from zinc)\n\t\t\tmuted: \"oklch(0.274 0.006 286.033)\", // --color-zinc-800 (from zinc)\n\t\t\t\"muted-foreground\": \"oklch(0.705 0.015 286.067)\", // --color-zinc-400 (from zinc)\n\t\t\taccent: \"oklch(0.274 0.006 286.033)\", // --color-zinc-800 (from zinc)\n\t\t\t\"accent-foreground\": \"oklch(0.985 0 0)\", // --color-zinc-50 (from zinc)\n\t\t\tdestructive: \"oklch(0.704 0.191 22.216)\", // --color-red-400 (from zinc)\n\t\t\tborder: \"oklch(1 0 0 / 10%)\", // --color-white (from zinc)\n\t\t\tinput: \"oklch(1 0 0 / 15%)\", // --color-white (from zinc)\n\t\t\tring: \"oklch(0.637 0.237 25.331)\", // --color-red-500 (approx HSL 0 72.2% 50.6%)\n\t\t\t\"chart-1\": \"oklch(0.488 0.243 264.376)\", // --color-blue-700 (from zinc)\n\t\t\t\"chart-2\": \"oklch(0.696 0.17 162.48)\", // --color-emerald-500 (from zinc)\n\t\t\t\"chart-3\": \"oklch(0.769 0.188 70.08)\", // --color-amber-500 (from zinc)\n\t\t\t\"chart-4\": \"oklch(0.627 0.265 303.9)\", // --color-purple-500 (from zinc)\n\t\t\t\"chart-5\": \"oklch(0.645 0.246 16.439)\", // --color-rose-500 (from zinc)\n\t\t\tsidebar: \"oklch(0.21 0.006 285.885)\", // --color-zinc-900 (from zinc)\n\t\t\t\"sidebar-foreground\": \"oklch(0.985 0 0)\", // --color-zinc-50 (from zinc)\n\t\t\t\"sidebar-primary\": \"oklch(0.637 0.237 25.331)\", // --color-red-500 (approx HSL 0 72.2% 50.6%)\n\t\t\t\"sidebar-primary-foreground\": \"oklch(0.971 0.013 17.38)\", // --color-red-50 (approx HSL 0 85.7% 97.3%)\n\t\t\t\"sidebar-accent\": \"oklch(0.274 0.006 286.033)\", // --color-zinc-800 (from zinc)\n\t\t\t\"sidebar-accent-foreground\": \"oklch(0.985 0 0)\", // --color-zinc-50 (from zinc)\n\t\t\t\"sidebar-border\": \"oklch(1 0 0 / 10%)\", // --color-white (from zinc)\n\t\t\t\"sidebar-ring\": \"oklch(0.637 0.237 25.331)\", // --color-red-500 (approx HSL 0 72.2% 50.6%)\n\t\t},\n\t},\n\trose: {\n\t\tlight: {\n\t\t\tbackground: \"oklch(1 0 0)\", // --color-zinc-50 (from zinc)\n\t\t\tforeground: \"oklch(0.141 0.005 285.823)\", // --color-zinc-950 (from zinc)\n\t\t\tcard: \"oklch(1 0 0)\", // --color-zinc-50 (from zinc)\n\t\t\t\"card-foreground\": \"oklch(0.141 0.005 285.823)\", // --color-zinc-950 (from zinc)\n\t\t\tpopover: \"oklch(1 0 0)\", // --color-zinc-50 (from zinc)\n\t\t\t\"popover-foreground\": \"oklch(0.141 0.005 285.823)\", // --color-zinc-950 (from zinc)\n\t\t\tprimary: \"oklch(0.645 0.246 16.439)\", // --color-rose-500 (approx HSL 346.8 77.2% 49.8%)\n\t\t\t\"primary-foreground\": \"oklch(0.969 0.015 12.422)\", // --color-rose-50 (approx HSL 355.7 100% 97.3%)\n\t\t\tsecondary: \"oklch(0.967 0.001 286.375)\", // --color-zinc-100 (from zinc)\n\t\t\t\"secondary-foreground\": \"oklch(0.21 0.006 285.885)\", // --color-zinc-900 (from zinc)\n\t\t\tmuted: \"oklch(0.967 0.001 286.375)\", // --color-zinc-100 (from zinc)\n\t\t\t\"muted-foreground\": \"oklch(0.552 0.016 285.938)\", // --color-zinc-500 (from zinc)\n\t\t\taccent: \"oklch(0.967 0.001 286.375)\", // --color-zinc-100 (from zinc)\n\t\t\t\"accent-foreground\": \"oklch(0.21 0.006 285.885)\", // --color-zinc-900 (from zinc)\n\t\t\tdestructive: \"oklch(0.577 0.245 27.325)\", // --color-red-600 (from zinc)\n\t\t\tborder: \"oklch(0.92 0.004 286.32)\", // --color-zinc-200 (from zinc)\n\t\t\tinput: \"oklch(0.92 0.004 286.32)\", // --color-zinc-200 (from zinc)\n\t\t\tring: \"oklch(0.645 0.246 16.439)\", // --color-rose-500 (approx HSL 346.8 77.2% 49.8%)\n\t\t\t\"chart-1\": \"oklch(0.646 0.222 41.116)\", // --color-orange-600 (from zinc)\n\t\t\t\"chart-2\": \"oklch(0.6 0.118 184.704)\", // --color-teal-600 (from zinc)\n\t\t\t\"chart-3\": \"oklch(0.398 0.07 227.392)\", // --color-cyan-900 (from zinc)\n\t\t\t\"chart-4\": \"oklch(0.828 0.189 84.429)\", // --color-amber-400 (from zinc)\n\t\t\t\"chart-5\": \"oklch(0.769 0.188 70.08)\", // --color-amber-500 (from zinc)\n\t\t\tsidebar: \"oklch(0.985 0 0)\", // --color-zinc-50 (from zinc)\n\t\t\t\"sidebar-foreground\": \"oklch(0.141 0.005 285.823)\", // --color-zinc-950 (from zinc)\n\t\t\t\"sidebar-primary\": \"oklch(0.645 0.246 16.439)\", // --color-rose-500 (approx HSL 346.8 77.2% 49.8%)\n\t\t\t\"sidebar-primary-foreground\": \"oklch(0.969 0.015 12.422)\", // --color-rose-50 (approx HSL 355.7 100% 97.3%)\n\t\t\t\"sidebar-accent\": \"oklch(0.967 0.001 286.375)\", // --color-zinc-100 (from zinc)\n\t\t\t\"sidebar-accent-foreground\": \"oklch(0.21 0.006 285.885)\", // --color-zinc-900 (from zinc)\n\t\t\t\"sidebar-border\": \"oklch(0.92 0.004 286.32)\", // --color-zinc-200 (from zinc)\n\t\t\t\"sidebar-ring\": \"oklch(0.645 0.246 16.439)\", // --color-rose-500 (approx HSL 346.8 77.2% 49.8%)\n\t\t},\n\t\tdark: {\n\t\t\tbackground: \"oklch(0.141 0.005 285.823)\", // --color-zinc-950 (from zinc)\n\t\t\tforeground: \"oklch(0.985 0 0)\", // --color-zinc-50 (from zinc)\n\t\t\tcard: \"oklch(0.21 0.006 285.885)\", // --color-zinc-900 (from zinc)\n\t\t\t\"card-foreground\": \"oklch(0.985 0 0)\", // --color-zinc-50 (from zinc)\n\t\t\tpopover: \"oklch(0.21 0.006 285.885)\", // --color-zinc-900 (from zinc)\n\t\t\t\"popover-foreground\": \"oklch(0.985 0 0)\", // --color-zinc-50 (from zinc)\n\t\t\tprimary: \"oklch(0.645 0.246 16.439)\", // --color-rose-500 (approx HSL 346.8 77.2% 49.8%)\n\t\t\t\"primary-foreground\": \"oklch(0.969 0.015 12.422)\", // --color-rose-50 (approx HSL 355.7 100% 97.3%)\n\t\t\tsecondary: \"oklch(0.274 0.006 286.033)\", // --color-zinc-800 (from zinc)\n\t\t\t\"secondary-foreground\": \"oklch(0.985 0 0)\", // --color-zinc-50 (from zinc)\n\t\t\tmuted: \"oklch(0.274 0.006 286.033)\", // --color-zinc-800 (from zinc)\n\t\t\t\"muted-foreground\": \"oklch(0.705 0.015 286.067)\", // --color-zinc-400 (from zinc)\n\t\t\taccent: \"oklch(0.274 0.006 286.033)\", // --color-zinc-800 (from zinc)\n\t\t\t\"accent-foreground\": \"oklch(0.985 0 0)\", // --color-zinc-50 (from zinc)\n\t\t\tdestructive: \"oklch(0.704 0.191 22.216)\", // --color-red-400 (from zinc)\n\t\t\tborder: \"oklch(1 0 0 / 10%)\", // --color-white (from zinc)\n\t\t\tinput: \"oklch(1 0 0 / 15%)\", // --color-white (from zinc)\n\t\t\tring: \"oklch(0.645 0.246 16.439)\", // --color-rose-500 (approx HSL 346.8 77.2% 49.8%)\n\t\t\t\"chart-1\": \"oklch(0.488 0.243 264.376)\", // --color-blue-700 (from zinc)\n\t\t\t\"chart-2\": \"oklch(0.696 0.17 162.48)\", // --color-emerald-500 (from zinc)\n\t\t\t\"chart-3\": \"oklch(0.769 0.188 70.08)\", // --color-amber-500 (from zinc)\n\t\t\t\"chart-4\": \"oklch(0.627 0.265 303.9)\", // --color-purple-500 (from zinc)\n\t\t\t\"chart-5\": \"oklch(0.645 0.246 16.439)\", // --color-rose-500 (from zinc)\n\t\t\tsidebar: \"oklch(0.21 0.006 285.885)\", // --color-zinc-900 (from zinc)\n\t\t\t\"sidebar-foreground\": \"oklch(0.985 0 0)\", // --color-zinc-50 (from zinc)\n\t\t\t\"sidebar-primary\": \"oklch(0.645 0.246 16.439)\", // --color-rose-500 (approx HSL 346.8 77.2% 49.8%)\n\t\t\t\"sidebar-primary-foreground\": \"oklch(0.969 0.015 12.422)\", // --color-rose-50 (approx HSL 355.7 100% 97.3%)\n\t\t\t\"sidebar-accent\": \"oklch(0.274 0.006 286.033)\", // --color-zinc-800 (from zinc)\n\t\t\t\"sidebar-accent-foreground\": \"oklch(0.985 0 0)\", // --color-zinc-50 (from zinc)\n\t\t\t\"sidebar-border\": \"oklch(1 0 0 / 10%)\", // --color-white (from zinc)\n\t\t\t\"sidebar-ring\": \"oklch(0.645 0.246 16.439)\", // --color-rose-500 (approx HSL 346.8 77.2% 49.8%)\n\t\t},\n\t},\n\torange: {\n\t\tlight: {\n\t\t\tbackground: \"oklch(1 0 0)\", // --color-zinc-50 (from zinc)\n\t\t\tforeground: \"oklch(0.141 0.005 285.823)\", // --color-zinc-950 (from zinc)\n\t\t\tcard: \"oklch(1 0 0)\", // --color-zinc-50 (from zinc)\n\t\t\t\"card-foreground\": \"oklch(0.141 0.005 285.823)\", // --color-zinc-950 (from zinc)\n\t\t\tpopover: \"oklch(1 0 0)\", // --color-zinc-50 (from zinc)\n\t\t\t\"popover-foreground\": \"oklch(0.141 0.005 285.823)\", // --color-zinc-950 (from zinc)\n\t\t\tprimary: \"oklch(0.705 0.213 47.604)\", // --color-orange-500 (approx HSL 24.6 95% 53.1%)\n\t\t\t\"primary-foreground\": \"oklch(0.98 0.016 73.684)\", // --color-orange-50 (approx HSL 60 9.1% 97.8%)\n\t\t\tsecondary: \"oklch(0.967 0.001 286.375)\", // --color-zinc-100 (from zinc)\n\t\t\t\"secondary-foreground\": \"oklch(0.21 0.006 285.885)\", // --color-zinc-900 (from zinc)\n\t\t\tmuted: \"oklch(0.967 0.001 286.375)\", // --color-zinc-100 (from zinc)\n\t\t\t\"muted-foreground\": \"oklch(0.552 0.016 285.938)\", // --color-zinc-500 (from zinc)\n\t\t\taccent: \"oklch(0.967 0.001 286.375)\", // --color-zinc-100 (from zinc)\n\t\t\t\"accent-foreground\": \"oklch(0.21 0.006 285.885)\", // --color-zinc-900 (from zinc)\n\t\t\tdestructive: \"oklch(0.577 0.245 27.325)\", // --color-red-600 (from zinc)\n\t\t\tborder: \"oklch(0.92 0.004 286.32)\", // --color-zinc-200 (from zinc)\n\t\t\tinput: \"oklch(0.92 0.004 286.32)\", // --color-zinc-200 (from zinc)\n\t\t\tring: \"oklch(0.705 0.213 47.604)\", // --color-orange-500 (approx HSL 24.6 95% 53.1%)\n\t\t\t\"chart-1\": \"oklch(0.646 0.222 41.116)\", // --color-orange-600 (from zinc)\n\t\t\t\"chart-2\": \"oklch(0.6 0.118 184.704)\", // --color-teal-600 (from zinc)\n\t\t\t\"chart-3\": \"oklch(0.398 0.07 227.392)\", // --color-cyan-900 (from zinc)\n\t\t\t\"chart-4\": \"oklch(0.828 0.189 84.429)\", // --color-amber-400 (from zinc)\n\t\t\t\"chart-5\": \"oklch(0.769 0.188 70.08)\", // --color-amber-500 (from zinc)\n\t\t\tsidebar: \"oklch(0.985 0 0)\", // --color-zinc-50 (from zinc)\n\t\t\t\"sidebar-foreground\": \"oklch(0.141 0.005 285.823)\", // --color-zinc-950 (from zinc)\n\t\t\t\"sidebar-primary\": \"oklch(0.705 0.213 47.604)\", // --color-orange-500 (approx HSL 24.6 95% 53.1%)\n\t\t\t\"sidebar-primary-foreground\": \"oklch(0.98 0.016 73.684)\", // --color-orange-50 (approx HSL 60 9.1% 97.8%)\n\t\t\t\"sidebar-accent\": \"oklch(0.967 0.001 286.375)\", // --color-zinc-100 (from zinc)\n\t\t\t\"sidebar-accent-foreground\": \"oklch(0.21 0.006 285.885)\", // --color-zinc-900 (from zinc)\n\t\t\t\"sidebar-border\": \"oklch(0.92 0.004 286.32)\", // --color-zinc-200 (from zinc)\n\t\t\t\"sidebar-ring\": \"oklch(0.705 0.213 47.604)\", // --color-orange-500 (approx HSL 24.6 95% 53.1%)\n\t\t},\n\t\tdark: {\n\t\t\tbackground: \"oklch(0.141 0.005 285.823)\", // --color-zinc-950 (from zinc)\n\t\t\tforeground: \"oklch(0.985 0 0)\", // --color-zinc-50 (from zinc)\n\t\t\tcard: \"oklch(0.21 0.006 285.885)\", // --color-zinc-900 (from zinc)\n\t\t\t\"card-foreground\": \"oklch(0.985 0 0)\", // --color-zinc-50 (from zinc)\n\t\t\tpopover: \"oklch(0.21 0.006 285.885)\", // --color-zinc-900 (from zinc)\n\t\t\t\"popover-foreground\": \"oklch(0.985 0 0)\", // --color-zinc-50 (from zinc)\n\t\t\tprimary: \"oklch(0.646 0.222 41.116)\", // --color-orange-600 (approx HSL 20.5 90.2% 48.2%)\n\t\t\t\"primary-foreground\": \"oklch(0.98 0.016 73.684)\", // --color-orange-50 (approx HSL 60 9.1% 97.8%)\n\t\t\tsecondary: \"oklch(0.274 0.006 286.033)\", // --color-zinc-800 (from zinc)\n\t\t\t\"secondary-foreground\": \"oklch(0.985 0 0)\", // --color-zinc-50 (from zinc)\n\t\t\tmuted: \"oklch(0.274 0.006 286.033)\", // --color-zinc-800 (from zinc)\n\t\t\t\"muted-foreground\": \"oklch(0.705 0.015 286.067)\", // --color-zinc-400 (from zinc)\n\t\t\taccent: \"oklch(0.274 0.006 286.033)\", // --color-zinc-800 (from zinc)\n\t\t\t\"accent-foreground\": \"oklch(0.985 0 0)\", // --color-zinc-50 (from zinc)\n\t\t\tdestructive: \"oklch(0.704 0.191 22.216)\", // --color-red-400 (from zinc)\n\t\t\tborder: \"oklch(1 0 0 / 10%)\", // --color-white (from zinc)\n\t\t\tinput: \"oklch(1 0 0 / 15%)\", // --color-white (from zinc)\n\t\t\tring: \"oklch(0.646 0.222 41.116)\", // --color-orange-600 (approx HSL 20.5 90.2% 48.2%)\n\t\t\t\"chart-1\": \"oklch(0.488 0.243 264.376)\", // --color-blue-700 (from zinc)\n\t\t\t\"chart-2\": \"oklch(0.696 0.17 162.48)\", // --color-emerald-500 (from zinc)\n\t\t\t\"chart-3\": \"oklch(0.769 0.188 70.08)\", // --color-amber-500 (from zinc)\n\t\t\t\"chart-4\": \"oklch(0.627 0.265 303.9)\", // --color-purple-500 (from zinc)\n\t\t\t\"chart-5\": \"oklch(0.645 0.246 16.439)\", // --color-rose-500 (from zinc)\n\t\t\tsidebar: \"oklch(0.21 0.006 285.885)\", // --color-zinc-900 (from zinc)\n\t\t\t\"sidebar-foreground\": \"oklch(0.985 0 0)\", // --color-zinc-50 (from zinc)\n\t\t\t\"sidebar-primary\": \"oklch(0.646 0.222 41.116)\", // --color-orange-600 (approx HSL 20.5 90.2% 48.2%)\n\t\t\t\"sidebar-primary-foreground\": \"oklch(0.98 0.016 73.684)\", // --color-orange-50 (approx HSL 60 9.1% 97.8%)\n\t\t\t\"sidebar-accent\": \"oklch(0.274 0.006 286.033)\", // --color-zinc-800 (from zinc)\n\t\t\t\"sidebar-accent-foreground\": \"oklch(0.985 0 0)\", // --color-zinc-50 (from zinc)\n\t\t\t\"sidebar-border\": \"oklch(1 0 0 / 10%)\", // --color-white (from zinc)\n\t\t\t\"sidebar-ring\": \"oklch(0.646 0.222 41.116)\", // --color-orange-600 (approx HSL 20.5 90.2% 48.2%)\n\t\t},\n\t},\n\tgreen: {\n\t\tlight: {\n\t\t\tbackground: \"oklch(1 0 0)\", // --color-zinc-50 (from zinc)\n\t\t\tforeground: \"oklch(0.141 0.005 285.823)\", // --color-zinc-950 (from zinc)\n\t\t\tcard: \"oklch(1 0 0)\", // --color-zinc-50 (from zinc)\n\t\t\t\"card-foreground\": \"oklch(0.141 0.005 285.823)\", // --color-zinc-950 (from zinc)\n\t\t\tpopover: \"oklch(1 0 0)\", // --color-zinc-50 (from zinc)\n\t\t\t\"popover-foreground\": \"oklch(0.141 0.005 285.823)\", // --color-zinc-950 (from zinc)\n\t\t\tprimary: \"oklch(0.723 0.219 149.579)\", // --color-green-500 (approx HSL 142.1 76.2% 36.3%)\n\t\t\t\"primary-foreground\": \"oklch(0.982 0.018 155.826)\", // --color-green-50 (approx HSL 355.7 100% 97.3%)\n\t\t\tsecondary: \"oklch(0.967 0.001 286.375)\", // --color-zinc-100 (from zinc)\n\t\t\t\"secondary-foreground\": \"oklch(0.21 0.006 285.885)\", // --color-zinc-900 (from zinc)\n\t\t\tmuted: \"oklch(0.967 0.001 286.375)\", // --color-zinc-100 (from zinc)\n\t\t\t\"muted-foreground\": \"oklch(0.552 0.016 285.938)\", // --color-zinc-500 (from zinc)\n\t\t\taccent: \"oklch(0.967 0.001 286.375)\", // --color-zinc-100 (from zinc)\n\t\t\t\"accent-foreground\": \"oklch(0.21 0.006 285.885)\", // --color-zinc-900 (from zinc)\n\t\t\tdestructive: \"oklch(0.577 0.245 27.325)\", // --color-red-600 (from zinc)\n\t\t\tborder: \"oklch(0.92 0.004 286.32)\", // --color-zinc-200 (from zinc)\n\t\t\tinput: \"oklch(0.92 0.004 286.32)\", // --color-zinc-200 (from zinc)\n\t\t\tring: \"oklch(0.723 0.219 149.579)\", // --color-green-500 (approx HSL 142.1 76.2% 36.3%)\n\t\t\t\"chart-1\": \"oklch(0.646 0.222 41.116)\", // --color-orange-600 (from zinc)\n\t\t\t\"chart-2\": \"oklch(0.6 0.118 184.704)\", // --color-teal-600 (from zinc)\n\t\t\t\"chart-3\": \"oklch(0.398 0.07 227.392)\", // --color-cyan-900 (from zinc)\n\t\t\t\"chart-4\": \"oklch(0.828 0.189 84.429)\", // --color-amber-400 (from zinc)\n\t\t\t\"chart-5\": \"oklch(0.769 0.188 70.08)\", // --color-amber-500 (from zinc)\n\t\t\tsidebar: \"oklch(0.985 0 0)\", // --color-zinc-50 (from zinc)\n\t\t\t\"sidebar-foreground\": \"oklch(0.141 0.005 285.823)\", // --color-zinc-950 (from zinc)\n\t\t\t\"sidebar-primary\": \"oklch(0.723 0.219 149.579)\", // --color-green-500 (approx HSL 142.1 76.2% 36.3%)\n\t\t\t\"sidebar-primary-foreground\": \"oklch(0.982 0.018 155.826)\", // --color-green-50 (approx HSL 355.7 100% 97.3%)\n\t\t\t\"sidebar-accent\": \"oklch(0.967 0.001 286.375)\", // --color-zinc-100 (from zinc)\n\t\t\t\"sidebar-accent-foreground\": \"oklch(0.21 0.006 285.885)\", // --color-zinc-900 (from zinc)\n\t\t\t\"sidebar-border\": \"oklch(0.92 0.004 286.32)\", // --color-zinc-200 (from zinc)\n\t\t\t\"sidebar-ring\": \"oklch(0.723 0.219 149.579)\", // --color-green-500 (approx HSL 142.1 76.2% 36.3%)\n\t\t},\n\t\tdark: {\n\t\t\tbackground: \"oklch(0.141 0.005 285.823)\", // --color-zinc-950 (from zinc)\n\t\t\tforeground: \"oklch(0.985 0 0)\", // --color-zinc-50 (from zinc)\n\t\t\tcard: \"oklch(0.21 0.006 285.885)\", // --color-zinc-900 (from zinc)\n\t\t\t\"card-foreground\": \"oklch(0.985 0 0)\", // --color-zinc-50 (from zinc)\n\t\t\tpopover: \"oklch(0.21 0.006 285.885)\", // --color-zinc-900 (from zinc)\n\t\t\t\"popover-foreground\": \"oklch(0.985 0 0)\", // --color-zinc-50 (from zinc)\n\t\t\tprimary: \"oklch(0.696 0.17 162.48)\", // --color-emerald-500 (approx HSL 142.1 70.6% 45.3%)\n\t\t\t\"primary-foreground\": \"oklch(0.393 0.095 152.535)\", // --color-green-900 (approx HSL 144.9 80.4% 10%)\n\t\t\tsecondary: \"oklch(0.274 0.006 286.033)\", // --color-zinc-800 (from zinc)\n\t\t\t\"secondary-foreground\": \"oklch(0.985 0 0)\", // --color-zinc-50 (from zinc)\n\t\t\tmuted: \"oklch(0.274 0.006 286.033)\", // --color-zinc-800 (from zinc)\n\t\t\t\"muted-foreground\": \"oklch(0.705 0.015 286.067)\", // --color-zinc-400 (from zinc)\n\t\t\taccent: \"oklch(0.274 0.006 286.033)\", // --color-zinc-800 (from zinc)\n\t\t\t\"accent-foreground\": \"oklch(0.985 0 0)\", // --color-zinc-50 (from zinc)\n\t\t\tdestructive: \"oklch(0.704 0.191 22.216)\", // --color-red-400 (from zinc)\n\t\t\tborder: \"oklch(1 0 0 / 10%)\", // --color-white (from zinc)\n\t\t\tinput: \"oklch(1 0 0 / 15%)\", // --color-white (from zinc)\n\t\t\tring: \"oklch(0.527 0.154 150.069)\", // --color-green-700 (approx HSL 142.4 71.8% 29.2%)\n\t\t\t\"chart-1\": \"oklch(0.488 0.243 264.376)\", // --color-blue-700 (from zinc)\n\t\t\t\"chart-2\": \"oklch(0.696 0.17 162.48)\", // --color-emerald-500 (from zinc)\n\t\t\t\"chart-3\": \"oklch(0.769 0.188 70.08)\", // --color-amber-500 (from zinc)\n\t\t\t\"chart-4\": \"oklch(0.627 0.265 303.9)\", // --color-purple-500 (from zinc)\n\t\t\t\"chart-5\": \"oklch(0.645 0.246 16.439)\", // --color-rose-500 (from zinc)\n\t\t\tsidebar: \"oklch(0.21 0.006 285.885)\", // --color-zinc-900 (from zinc)\n\t\t\t\"sidebar-foreground\": \"oklch(0.985 0 0)\", // --color-zinc-50 (from zinc)\n\t\t\t\"sidebar-primary\": \"oklch(0.696 0.17 162.48)\", // --color-emerald-500 (approx HSL 142.1 70.6% 45.3%)\n\t\t\t\"sidebar-primary-foreground\": \"oklch(0.393 0.095 152.535)\", // --color-green-900 (approx HSL 144.9 80.4% 10%)\n\t\t\t\"sidebar-accent\": \"oklch(0.274 0.006 286.033)\", // --color-zinc-800 (from zinc)\n\t\t\t\"sidebar-accent-foreground\": \"oklch(0.985 0 0)\", // --color-zinc-50 (from zinc)\n\t\t\t\"sidebar-border\": \"oklch(1 0 0 / 10%)\", // --color-white (from zinc)\n\t\t\t\"sidebar-ring\": \"oklch(0.527 0.154 150.069)\", // --color-green-700 (approx HSL 142.4 71.8% 29.2%)\n\t\t},\n\t},\n\tblue: {\n\t\tlight: {\n\t\t\tbackground: \"oklch(1 0 0)\", // --color-zinc-50 (from zinc)\n\t\t\tforeground: \"oklch(0.141 0.005 285.823)\", // --color-zinc-950 (from zinc)\n\t\t\tcard: \"oklch(1 0 0)\", // --color-zinc-50 (from zinc)\n\t\t\t\"card-foreground\": \"oklch(0.141 0.005 285.823)\", // --color-zinc-950 (from zinc)\n\t\t\tpopover: \"oklch(1 0 0)\", // --color-zinc-50 (from zinc)\n\t\t\t\"popover-foreground\": \"oklch(0.141 0.005 285.823)\", // --color-zinc-950 (from zinc)\n\t\t\tprimary: \"oklch(0.623 0.214 259.815)\", // --color-blue-500 (approx HSL 221.2 83.2% 53.3%)\n\t\t\t\"primary-foreground\": \"oklch(0.97 0.014 254.604)\", // --color-blue-50 (approx HSL 210 40% 98%)\n\t\t\tsecondary: \"oklch(0.967 0.001 286.375)\", // --color-zinc-100 (from zinc)\n\t\t\t\"secondary-foreground\": \"oklch(0.21 0.006 285.885)\", // --color-zinc-900 (from zinc)\n\t\t\tmuted: \"oklch(0.967 0.001 286.375)\", // --color-zinc-100 (from zinc)\n\t\t\t\"muted-foreground\": \"oklch(0.552 0.016 285.938)\", // --color-zinc-500 (from zinc)\n\t\t\taccent: \"oklch(0.967 0.001 286.375)\", // --color-zinc-100 (from zinc)\n\t\t\t\"accent-foreground\": \"oklch(0.21 0.006 285.885)\", // --color-zinc-900 (from zinc)\n\t\t\tdestructive: \"oklch(0.577 0.245 27.325)\", // --color-red-600 (from zinc)\n\t\t\tborder: \"oklch(0.92 0.004 286.32)\", // --color-zinc-200 (from zinc)\n\t\t\tinput: \"oklch(0.92 0.004 286.32)\", // --color-zinc-200 (from zinc)\n\t\t\tring: \"oklch(0.623 0.214 259.815)\", // --color-blue-500 (approx HSL 221.2 83.2% 53.3%)\n\t\t\t\"chart-1\": \"oklch(0.646 0.222 41.116)\", // --color-orange-600 (from zinc)\n\t\t\t\"chart-2\": \"oklch(0.6 0.118 184.704)\", // --color-teal-600 (from zinc)\n\t\t\t\"chart-3\": \"oklch(0.398 0.07 227.392)\", // --color-cyan-900 (from zinc)\n\t\t\t\"chart-4\": \"oklch(0.828 0.189 84.429)\", // --color-amber-400 (from zinc)\n\t\t\t\"chart-5\": \"oklch(0.769 0.188 70.08)\", // --color-amber-500 (from zinc)\n\t\t\tsidebar: \"oklch(0.985 0 0)\", // --color-zinc-50 (from zinc)\n\t\t\t\"sidebar-foreground\": \"oklch(0.141 0.005 285.823)\", // --color-zinc-950 (from zinc)\n\t\t\t\"sidebar-primary\": \"oklch(0.623 0.214 259.815)\", // --color-blue-500 (approx HSL 221.2 83.2% 53.3%)\n\t\t\t\"sidebar-primary-foreground\": \"oklch(0.97 0.014 254.604)\", // --color-blue-50 (approx HSL 210 40% 98%)\n\t\t\t\"sidebar-accent\": \"oklch(0.967 0.001 286.375)\", // --color-zinc-100 (from zinc)\n\t\t\t\"sidebar-accent-foreground\": \"oklch(0.21 0.006 285.885)\", // --color-zinc-900 (from zinc)\n\t\t\t\"sidebar-border\": \"oklch(0.92 0.004 286.32)\", // --color-zinc-200 (from zinc)\n\t\t\t\"sidebar-ring\": \"oklch(0.623 0.214 259.815)\", // --color-blue-500 (approx HSL 221.2 83.2% 53.3%)\n\t\t},\n\t\tdark: {\n\t\t\tbackground: \"oklch(0.141 0.005 285.823)\", // --color-zinc-950 (from zinc)\n\t\t\tforeground: \"oklch(0.985 0 0)\", // --color-zinc-50 (from zinc)\n\t\t\tcard: \"oklch(0.21 0.006 285.885)\", // --color-zinc-900 (from zinc)\n\t\t\t\"card-foreground\": \"oklch(0.985 0 0)\", // --color-zinc-50 (from zinc)\n\t\t\tpopover: \"oklch(0.21 0.006 285.885)\", // --color-zinc-900 (from zinc)\n\t\t\t\"popover-foreground\": \"oklch(0.985 0 0)\", // --color-zinc-50 (from zinc)\n\t\t\tprimary: \"oklch(0.546 0.245 262.881)\", // --color-blue-600 (approx HSL 217.2 91.2% 59.8%)\n\t\t\t\"primary-foreground\": \"oklch(0.379 0.146 265.522)\", // --color-blue-900 (approx HSL 222.2 47.4% 11.2%)\n\t\t\tsecondary: \"oklch(0.274 0.006 286.033)\", // --color-zinc-800 (from zinc)\n\t\t\t\"secondary-foreground\": \"oklch(0.985 0 0)\", // --color-zinc-50 (from zinc)\n\t\t\tmuted: \"oklch(0.274 0.006 286.033)\", // --color-zinc-800 (from zinc)\n\t\t\t\"muted-foreground\": \"oklch(0.705 0.015 286.067)\", // --color-zinc-400 (from zinc)\n\t\t\taccent: \"oklch(0.274 0.006 286.033)\", // --color-zinc-800 (from zinc)\n\t\t\t\"accent-foreground\": \"oklch(0.985 0 0)\", // --color-zinc-50 (from zinc)\n\t\t\tdestructive: \"oklch(0.704 0.191 22.216)\", // --color-red-400 (from zinc)\n\t\t\tborder: \"oklch(1 0 0 / 10%)\", // --color-white (from zinc)\n\t\t\tinput: \"oklch(1 0 0 / 15%)\", // --color-white (from zinc)\n\t\t\tring: \"oklch(0.488 0.243 264.376)\", // --color-blue-700 (approx HSL 224.3 76.3% 48%)\n\t\t\t\"chart-1\": \"oklch(0.488 0.243 264.376)\", // --color-blue-700 (from zinc)\n\t\t\t\"chart-2\": \"oklch(0.696 0.17 162.48)\", // --color-emerald-500 (from zinc)\n\t\t\t\"chart-3\": \"oklch(0.769 0.188 70.08)\", // --color-amber-500 (from zinc)\n\t\t\t\"chart-4\": \"oklch(0.627 0.265 303.9)\", // --color-purple-500 (from zinc)\n\t\t\t\"chart-5\": \"oklch(0.645 0.246 16.439)\", // --color-rose-500 (from zinc)\n\t\t\tsidebar: \"oklch(0.21 0.006 285.885)\", // --color-zinc-900 (from zinc)\n\t\t\t\"sidebar-foreground\": \"oklch(0.985 0 0)\", // --color-zinc-50 (from zinc)\n\t\t\t\"sidebar-primary\": \"oklch(0.546 0.245 262.881)\", // --color-blue-600 (approx HSL 217.2 91.2% 59.8%)\n\t\t\t\"sidebar-primary-foreground\": \"oklch(0.379 0.146 265.522)\", // --color-blue-900 (approx HSL 222.2 47.4% 11.2%)\n\t\t\t\"sidebar-accent\": \"oklch(0.274 0.006 286.033)\", // --color-zinc-800 (from zinc)\n\t\t\t\"sidebar-accent-foreground\": \"oklch(0.985 0 0)\", // --color-zinc-50 (from zinc)\n\t\t\t\"sidebar-border\": \"oklch(1 0 0 / 10%)\", // --color-white (from zinc)\n\t\t\t\"sidebar-ring\": \"oklch(0.488 0.243 264.376)\", // --color-blue-700 (approx HSL 224.3 76.3% 48%)\n\t\t},\n\t},\n\tyellow: {\n\t\tlight: {\n\t\t\tbackground: \"oklch(1 0 0)\", // --color-zinc-50 (from zinc)\n\t\t\tforeground: \"oklch(0.141 0.005 285.823)\", // --color-zinc-950 (from zinc)\n\t\t\tcard: \"oklch(1 0 0)\", // --color-zinc-50 (from zinc)\n\t\t\t\"card-foreground\": \"oklch(0.141 0.005 285.823)\", // --color-zinc-950 (from zinc)\n\t\t\tpopover: \"oklch(1 0 0)\", // --color-zinc-50 (from zinc)\n\t\t\t\"popover-foreground\": \"oklch(0.141 0.005 285.823)\", // --color-zinc-950 (from zinc)\n\t\t\tprimary: \"oklch(0.795 0.184 86.047)\", // --color-yellow-500 (approx HSL 47.9 95.8% 53.1%)\n\t\t\t\"primary-foreground\": \"oklch(0.421 0.095 57.708)\", // --color-yellow-900 (approx HSL 26 83.3% 14.1%)\n\t\t\tsecondary: \"oklch(0.967 0.001 286.375)\", // --color-zinc-100 (from zinc)\n\t\t\t\"secondary-foreground\": \"oklch(0.21 0.006 285.885)\", // --color-zinc-900 (from zinc)\n\t\t\tmuted: \"oklch(0.967 0.001 286.375)\", // --color-zinc-100 (from zinc)\n\t\t\t\"muted-foreground\": \"oklch(0.552 0.016 285.938)\", // --color-zinc-500 (from zinc)\n\t\t\taccent: \"oklch(0.967 0.001 286.375)\", // --color-zinc-100 (from zinc)\n\t\t\t\"accent-foreground\": \"oklch(0.21 0.006 285.885)\", // --color-zinc-900 (from zinc)\n\t\t\tdestructive: \"oklch(0.577 0.245 27.325)\", // --color-red-600 (from zinc)\n\t\t\tborder: \"oklch(0.92 0.004 286.32)\", // --color-zinc-200 (from zinc)\n\t\t\tinput: \"oklch(0.92 0.004 286.32)\", // --color-zinc-200 (from zinc)\n\t\t\tring: \"oklch(0.795 0.184 86.047)\", // --color-yellow-500 (approx HSL 47.9 95.8% 53.1%)\n\t\t\t\"chart-1\": \"oklch(0.646 0.222 41.116)\", // --color-orange-600 (from zinc)\n\t\t\t\"chart-2\": \"oklch(0.6 0.118 184.704)\", // --color-teal-600 (from zinc)\n\t\t\t\"chart-3\": \"oklch(0.398 0.07 227.392)\", // --color-cyan-900 (from zinc)\n\t\t\t\"chart-4\": \"oklch(0.828 0.189 84.429)\", // --color-amber-400 (from zinc)\n\t\t\t\"chart-5\": \"oklch(0.769 0.188 70.08)\", // --color-amber-500 (from zinc)\n\t\t\tsidebar: \"oklch(0.985 0 0)\", // --color-zinc-50 (from zinc)\n\t\t\t\"sidebar-foreground\": \"oklch(0.141 0.005 285.823)\", // --color-zinc-950 (from zinc)\n\t\t\t\"sidebar-primary\": \"oklch(0.795 0.184 86.047)\", // --color-yellow-500 (approx HSL 47.9 95.8% 53.1%)\n\t\t\t\"sidebar-primary-foreground\": \"oklch(0.421 0.095 57.708)\", // --color-yellow-900 (approx HSL 26 83.3% 14.1%)\n\t\t\t\"sidebar-accent\": \"oklch(0.967 0.001 286.375)\", // --color-zinc-100 (from zinc)\n\t\t\t\"sidebar-accent-foreground\": \"oklch(0.21 0.006 285.885)\", // --color-zinc-900 (from zinc)\n\t\t\t\"sidebar-border\": \"oklch(0.92 0.004 286.32)\", // --color-zinc-200 (from zinc)\n\t\t\t\"sidebar-ring\": \"oklch(0.795 0.184 86.047)\", // --color-yellow-500 (approx HSL 47.9 95.8% 53.1%)\n\t\t},\n\t\tdark: {\n\t\t\tbackground: \"oklch(0.141 0.005 285.823)\", // --color-zinc-950 (from zinc)\n\t\t\tforeground: \"oklch(0.985 0 0)\", // --color-zinc-50 (from zinc)\n\t\t\tcard: \"oklch(0.21 0.006 285.885)\", // --color-zinc-900 (from zinc)\n\t\t\t\"card-foreground\": \"oklch(0.985 0 0)\", // --color-zinc-50 (from zinc)\n\t\t\tpopover: \"oklch(0.21 0.006 285.885)\", // --color-zinc-900 (from zinc)\n\t\t\t\"popover-foreground\": \"oklch(0.985 0 0)\", // --color-zinc-50 (from zinc)\n\t\t\tprimary: \"oklch(0.795 0.184 86.047)\", // --color-yellow-500 (approx HSL 47.9 95.8% 53.1%)\n\t\t\t\"primary-foreground\": \"oklch(0.421 0.095 57.708)\", // --color-yellow-900 (approx HSL 26 83.3% 14.1%)\n\t\t\tsecondary: \"oklch(0.274 0.006 286.033)\", // --color-zinc-800 (from zinc)\n\t\t\t\"secondary-foreground\": \"oklch(0.985 0 0)\", // --color-zinc-50 (from zinc)\n\t\t\tmuted: \"oklch(0.274 0.006 286.033)\", // --color-zinc-800 (from zinc)\n\t\t\t\"muted-foreground\": \"oklch(0.705 0.015 286.067)\", // --color-zinc-400 (from zinc)\n\t\t\taccent: \"oklch(0.274 0.006 286.033)\", // --color-zinc-800 (from zinc)\n\t\t\t\"accent-foreground\": \"oklch(0.985 0 0)\", // --color-zinc-50 (from zinc)\n\t\t\tdestructive: \"oklch(0.704 0.191 22.216)\", // --color-red-400 (from zinc)\n\t\t\tborder: \"oklch(1 0 0 / 10%)\", // --color-white (from zinc)\n\t\t\tinput: \"oklch(1 0 0 / 15%)\", // --color-white (from zinc)\n\t\t\tring: \"oklch(0.554 0.135 66.442)\", // --color-yellow-700 (approx HSL 35.5 91.7% 32.9%)\n\t\t\t\"chart-1\": \"oklch(0.488 0.243 264.376)\", // --color-blue-700 (from zinc)\n\t\t\t\"chart-2\": \"oklch(0.696 0.17 162.48)\", // --color-emerald-500 (from zinc)\n\t\t\t\"chart-3\": \"oklch(0.769 0.188 70.08)\", // --color-amber-500 (from zinc)\n\t\t\t\"chart-4\": \"oklch(0.627 0.265 303.9)\", // --color-purple-500 (from zinc)\n\t\t\t\"chart-5\": \"oklch(0.645 0.246 16.439)\", // --color-rose-500 (from zinc)\n\t\t\tsidebar: \"oklch(0.21 0.006 285.885)\", // --color-zinc-900 (from zinc)\n\t\t\t\"sidebar-foreground\": \"oklch(0.985 0 0)\", // --color-zinc-50 (from zinc)\n\t\t\t\"sidebar-primary\": \"oklch(0.795 0.184 86.047)\", // --color-yellow-500 (approx HSL 47.9 95.8% 53.1%)\n\t\t\t\"sidebar-primary-foreground\": \"oklch(0.421 0.095 57.708)\", // --color-yellow-900 (approx HSL 26 83.3% 14.1%)\n\t\t\t\"sidebar-accent\": \"oklch(0.274 0.006 286.033)\", // --color-zinc-800 (from zinc)\n\t\t\t\"sidebar-accent-foreground\": \"oklch(0.985 0 0)\", // --color-zinc-50 (from zinc)\n\t\t\t\"sidebar-border\": \"oklch(1 0 0 / 10%)\", // --color-white (from zinc)\n\t\t\t\"sidebar-ring\": \"oklch(0.554 0.135 66.442)\", // --color-yellow-700 (approx HSL 35.5 91.7% 32.9%)\n\t\t},\n\t},\n\tviolet: {\n\t\tlight: {\n\t\t\tbackground: \"oklch(1 0 0)\", // --color-zinc-50 (from zinc)\n\t\t\tforeground: \"oklch(0.141 0.005 285.823)\", // --color-zinc-950 (from zinc)\n\t\t\tcard: \"oklch(1 0 0)\", // --color-zinc-50 (from zinc)\n\t\t\t\"card-foreground\": \"oklch(0.141 0.005 285.823)\", // --color-zinc-950 (from zinc)\n\t\t\tpopover: \"oklch(1 0 0)\", // --color-zinc-50 (from zinc)\n\t\t\t\"popover-foreground\": \"oklch(0.141 0.005 285.823)\", // --color-zinc-950 (from zinc)\n\t\t\tprimary: \"oklch(0.606 0.25 292.717)\", // --color-violet-500 (approx HSL 262.1 83.3% 57.8%)\n\t\t\t\"primary-foreground\": \"oklch(0.969 0.016 293.756)\", // --color-violet-50 (approx HSL 210 20% 98%)\n\t\t\tsecondary: \"oklch(0.967 0.001 286.375)\", // --color-zinc-100 (from zinc)\n\t\t\t\"secondary-foreground\": \"oklch(0.21 0.006 285.885)\", // --color-zinc-900 (from zinc)\n\t\t\tmuted: \"oklch(0.967 0.001 286.375)\", // --color-zinc-100 (from zinc)\n\t\t\t\"muted-foreground\": \"oklch(0.552 0.016 285.938)\", // --color-zinc-500 (from zinc)\n\t\t\taccent: \"oklch(0.967 0.001 286.375)\", // --color-zinc-100 (from zinc)\n\t\t\t\"accent-foreground\": \"oklch(0.21 0.006 285.885)\", // --color-zinc-900 (from zinc)\n\t\t\tdestructive: \"oklch(0.577 0.245 27.325)\", // --color-red-600 (from zinc)\n\t\t\tborder: \"oklch(0.92 0.004 286.32)\", // --color-zinc-200 (from zinc)\n\t\t\tinput: \"oklch(0.92 0.004 286.32)\", // --color-zinc-200 (from zinc)\n\t\t\tring: \"oklch(0.606 0.25 292.717)\", // --color-violet-500 (approx HSL 262.1 83.3% 57.8%)\n\t\t\t\"chart-1\": \"oklch(0.646 0.222 41.116)\", // --color-orange-600 (from zinc)\n\t\t\t\"chart-2\": \"oklch(0.6 0.118 184.704)\", // --color-teal-600 (from zinc)\n\t\t\t\"chart-3\": \"oklch(0.398 0.07 227.392)\", // --color-cyan-900 (from zinc)\n\t\t\t\"chart-4\": \"oklch(0.828 0.189 84.429)\", // --color-amber-400 (from zinc)\n\t\t\t\"chart-5\": \"oklch(0.769 0.188 70.08)\", // --color-amber-500 (from zinc)\n\t\t\tsidebar: \"oklch(0.985 0 0)\", // --color-zinc-50 (from zinc)\n\t\t\t\"sidebar-foreground\": \"oklch(0.141 0.005 285.823)\", // --color-zinc-950 (from zinc)\n\t\t\t\"sidebar-primary\": \"oklch(0.606 0.25 292.717)\", // --color-violet-500 (approx HSL 262.1 83.3% 57.8%)\n\t\t\t\"sidebar-primary-foreground\": \"oklch(0.969 0.016 293.756)\", // --color-violet-50 (approx HSL 210 20% 98%)\n\t\t\t\"sidebar-accent\": \"oklch(0.967 0.001 286.375)\", // --color-zinc-100 (from zinc)\n\t\t\t\"sidebar-accent-foreground\": \"oklch(0.21 0.006 285.885)\", // --color-zinc-900 (from zinc)\n\t\t\t\"sidebar-border\": \"oklch(0.92 0.004 286.32)\", // --color-zinc-200 (from zinc)\n\t\t\t\"sidebar-ring\": \"oklch(0.606 0.25 292.717)\", // --color-violet-500 (approx HSL 262.1 83.3% 57.8%)\n\t\t},\n\t\tdark: {\n\t\t\tbackground: \"oklch(0.141 0.005 285.823)\", // --color-zinc-950 (from zinc)\n\t\t\tforeground: \"oklch(0.985 0 0)\", // --color-zinc-50 (from zinc)\n\t\t\tcard: \"oklch(0.21 0.006 285.885)\", // --color-zinc-900 (from zinc)\n\t\t\t\"card-foreground\": \"oklch(0.985 0 0)\", // --color-zinc-50 (from zinc)\n\t\t\tpopover: \"oklch(0.21 0.006 285.885)\", // --color-zinc-900 (from zinc)\n\t\t\t\"popover-foreground\": \"oklch(0.985 0 0)\", // --color-zinc-50 (from zinc)\n\t\t\tprimary: \"oklch(0.541 0.281 293.009)\", // --color-violet-600 (approx HSL 263.4 70% 50.4%)\n\t\t\t\"primary-foreground\": \"oklch(0.969 0.016 293.756)\", // --color-violet-50 (approx HSL 210 20% 98%)\n\t\t\tsecondary: \"oklch(0.274 0.006 286.033)\", // --color-zinc-800 (from zinc)\n\t\t\t\"secondary-foreground\": \"oklch(0.985 0 0)\", // --color-zinc-50 (from zinc)\n\t\t\tmuted: \"oklch(0.274 0.006 286.033)\", // --color-zinc-800 (from zinc)\n\t\t\t\"muted-foreground\": \"oklch(0.705 0.015 286.067)\", // --color-zinc-400 (from zinc)\n\t\t\taccent: \"oklch(0.274 0.006 286.033)\", // --color-zinc-800 (from zinc)\n\t\t\t\"accent-foreground\": \"oklch(0.985 0 0)\", // --color-zinc-50 (from zinc)\n\t\t\tdestructive: \"oklch(0.704 0.191 22.216)\", // --color-red-400 (from zinc)\n\t\t\tborder: \"oklch(1 0 0 / 10%)\", // --color-white (from zinc)\n\t\t\tinput: \"oklch(1 0 0 / 15%)\", // --color-white (from zinc)\n\t\t\tring: \"oklch(0.541 0.281 293.009)\", // --color-violet-600 (approx HSL 263.4 70% 50.4%)\n\t\t\t\"chart-1\": \"oklch(0.488 0.243 264.376)\", // --color-blue-700 (from zinc)\n\t\t\t\"chart-2\": \"oklch(0.696 0.17 162.48)\", // --color-emerald-500 (from zinc)\n\t\t\t\"chart-3\": \"oklch(0.769 0.188 70.08)\", // --color-amber-500 (from zinc)\n\t\t\t\"chart-4\": \"oklch(0.627 0.265 303.9)\", // --color-purple-500 (from zinc)\n\t\t\t\"chart-5\": \"oklch(0.645 0.246 16.439)\", // --color-rose-500 (from zinc)\n\t\t\tsidebar: \"oklch(0.21 0.006 285.885)\", // --color-zinc-900 (from zinc)\n\t\t\t\"sidebar-foreground\": \"oklch(0.985 0 0)\", // --color-zinc-50 (from zinc)\n\t\t\t\"sidebar-primary\": \"oklch(0.541 0.281 293.009)\", // --color-violet-600 (approx HSL 263.4 70% 50.4%)\n\t\t\t\"sidebar-primary-foreground\": \"oklch(0.969 0.016 293.756)\", // --color-violet-50 (approx HSL 210 20% 98%)\n\t\t\t\"sidebar-accent\": \"oklch(0.274 0.006 286.033)\", // --color-zinc-800 (from zinc)\n\t\t\t\"sidebar-accent-foreground\": \"oklch(0.985 0 0)\", // --color-zinc-50 (from zinc)\n\t\t\t\"sidebar-border\": \"oklch(1 0 0 / 10%)\", // --color-white (from zinc)\n\t\t\t\"sidebar-ring\": \"oklch(0.541 0.281 293.009)\", // --color-violet-600 (approx HSL 263.4 70% 50.4%)\n\t\t},\n\t},\n};\n"
  },
  {
    "path": "docs/src/lib/registry/registry-block-meta.ts",
    "content": "import { type BlockName } from \"$lib/blocks.js\";\n\ntype BlockMeta = {\n\tiframeHeight?: string;\n\tclassName?: string;\n\tdescription: string;\n\tmobile?: \"component\";\n};\n\nexport const blockMeta = {\n\t\"sidebar-01\": {\n\t\tdescription: \"A simple sidebar with navigation grouped by section.\",\n\t},\n\t\"sidebar-02\": {\n\t\tdescription: \"A sidebar with collapsible sections.\",\n\t},\n\t\"sidebar-03\": {\n\t\tdescription: \"A sidebar with submenus.\",\n\t},\n\t\"sidebar-04\": {\n\t\tdescription: \"A floating sidebar with submenus.\",\n\t},\n\t\"sidebar-05\": {\n\t\tdescription: \"A sidebar with collapsible submenus.\",\n\t},\n\t\"sidebar-06\": {\n\t\tdescription: \"A sidebar with submenus as dropdowns.\",\n\t},\n\t\"sidebar-07\": {\n\t\tdescription: \"A sidebar that collapses to icons\",\n\t},\n\t\"sidebar-08\": {\n\t\tdescription: \"An inset sidebar with secondary navigation.\",\n\t},\n\t\"sidebar-09\": {\n\t\tdescription: \"Collapsible nested sidebars.\",\n\t},\n\t\"sidebar-10\": {\n\t\tdescription: \"A sidebar in a popover.\",\n\t},\n\t\"sidebar-11\": {\n\t\tdescription: \"A sidebar with a collapsible file tree.\",\n\t},\n\t\"sidebar-12\": {\n\t\tdescription: \"A sidebar with a calendar.\",\n\t},\n\t\"sidebar-13\": {\n\t\tdescription: \"A sidebar in a dialog.\",\n\t},\n\t\"sidebar-14\": {\n\t\tdescription: \"A sidebar on the right.\",\n\t},\n\t\"sidebar-15\": {\n\t\tdescription: \"A left and right sidebar.\",\n\t},\n\t\"sidebar-16\": {\n\t\tdescription: \"A sidebar with a sticky site header.\",\n\t},\n\t\"login-01\": {\n\t\tdescription: \"A simple login form.\",\n\t},\n\t\"login-02\": {\n\t\tdescription: \"A login page with a muted background color.\",\n\t},\n\t\"login-03\": {\n\t\tdescription: \"A login page with a background image.\",\n\t},\n\t\"login-04\": {\n\t\tdescription: \"A login page with form and image.\",\n\t},\n\t\"dashboard-01\": {\n\t\tdescription: \"A dashboard with sidebar, charts and data table.\",\n\t},\n\t\"demo-sidebar\": {\n\t\tdescription: \"Your first sidebar.\",\n\t},\n\t\"demo-sidebar-header\": {\n\t\tdescription: \"A sidebar header with a dropdown menu.\",\n\t},\n\t\"demo-sidebar-footer\": {\n\t\tdescription: \"A sidebar footer with a dropdown menu.\",\n\t},\n\t\"demo-sidebar-group\": {\n\t\tdescription: \"A sidebar group.\",\n\t},\n\t\"demo-sidebar-group-collapsible\": {\n\t\tdescription: \"A sidebar with a collapsible group.\",\n\t},\n\t\"demo-sidebar-group-action\": {\n\t\tdescription: \"A sidebar with a group action.\",\n\t},\n\t\"demo-sidebar-menu\": {\n\t\tdescription: \"A sidebar menu with a list of projects.\",\n\t},\n\t\"demo-sidebar-menu-action\": {\n\t\tdescription: \"A sidebar menu action with a dropdown menu.\",\n\t},\n\t\"demo-sidebar-menu-sub\": {\n\t\tdescription: \"A sidebar menu sub.\",\n\t},\n\t\"demo-sidebar-menu-collapsible\": {\n\t\tdescription: \"A collapsible sidebar menu.\",\n\t},\n\t\"demo-sidebar-menu-badge\": {\n\t\tdescription: \"A sidebar menu badge.\",\n\t},\n\t\"demo-sidebar-controlled\": {\n\t\tdescription: \"A controlled sidebar.\",\n\t},\n\t\"calendar-01\": {\n\t\tdescription: \"A simple calendar.\",\n\t\tiframeHeight: \"600px\",\n\t\tclassName:\n\t\t\t\"w-full bg-surface min-h-svh flex px-4 py-12 items-start md:py-20 justify-center min-w-0\",\n\t\tmobile: \"component\",\n\t},\n\t\"calendar-02\": {\n\t\tdescription: \"Multiple months with single selection.\",\n\t\tiframeHeight: \"600px\",\n\t\tclassName:\n\t\t\t\"w-full bg-surface min-h-svh flex px-4 py-12 items-start md:py-20 justify-center min-w-0\",\n\t\tmobile: \"component\",\n\t},\n\t\"calendar-03\": {\n\t\tdescription: \"Multiple months with multiple selection.\",\n\t\tiframeHeight: \"600px\",\n\t\tclassName:\n\t\t\t\"w-full bg-surface min-h-svh flex px-4 py-12 items-start md:py-20 justify-center min-w-0\",\n\t\tmobile: \"component\",\n\t},\n\t\"calendar-04\": {\n\t\tdescription: \"Single month with range selection\",\n\t\tiframeHeight: \"600px\",\n\t\tclassName:\n\t\t\t\"w-full bg-surface min-h-svh flex px-4 py-12 items-start md:py-20 justify-center min-w-0 xl:pt-28\",\n\t\tmobile: \"component\",\n\t},\n\t\"calendar-05\": {\n\t\tdescription: \"Multiple months with range selection\",\n\t\tiframeHeight: \"600px\",\n\t\tclassName:\n\t\t\t\"w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24\",\n\t\tmobile: \"component\",\n\t},\n\t\"calendar-06\": {\n\t\tdescription: \"Range selection with minimum days\",\n\t\tiframeHeight: \"600px\",\n\t\tclassName:\n\t\t\t\"w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24\",\n\t\tmobile: \"component\",\n\t},\n\t\"calendar-07\": {\n\t\tdescription: \"Range selection with minimum and maximum days\",\n\t\tiframeHeight: \"600px\",\n\t\tclassName:\n\t\t\t\"w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24\",\n\t\tmobile: \"component\",\n\t},\n\t\"calendar-08\": {\n\t\tdescription: \"Calendar with disabled days\",\n\t\tiframeHeight: \"600px\",\n\t\tclassName:\n\t\t\t\"w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24\",\n\t\tmobile: \"component\",\n\t},\n\t\"calendar-09\": {\n\t\tdescription: \"Calendar with disabled weekends\",\n\t\tiframeHeight: \"600px\",\n\t\tclassName:\n\t\t\t\"w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24\",\n\t\tmobile: \"component\",\n\t},\n\t\"calendar-10\": {\n\t\tdescription: \"Today button\",\n\t\tiframeHeight: \"600px\",\n\t\tclassName:\n\t\t\t\"w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24\",\n\t\tmobile: \"component\",\n\t},\n\t\"calendar-11\": {\n\t\tdescription: \"Start and end of month\",\n\t\tiframeHeight: \"600px\",\n\t\tclassName:\n\t\t\t\"w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24\",\n\t\tmobile: \"component\",\n\t},\n\t\"calendar-12\": {\n\t\tdescription: \"Localized calendar\",\n\t\tiframeHeight: \"600px\",\n\t\tclassName:\n\t\t\t\"w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24\",\n\t\tmobile: \"component\",\n\t},\n\t\"calendar-13\": {\n\t\tdescription: \"With Month and Year Dropdown\",\n\t\tiframeHeight: \"600px\",\n\t\tclassName:\n\t\t\t\"w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24\",\n\t\tmobile: \"component\",\n\t},\n\t\"calendar-14\": {\n\t\tdescription: \"With Booked/Unavailable Days\",\n\t\tiframeHeight: \"600px\",\n\t\tclassName:\n\t\t\t\"w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24\",\n\t\tmobile: \"component\",\n\t},\n\t\"calendar-15\": {\n\t\tdescription: \"With Week Numbers\",\n\t\tiframeHeight: \"600px\",\n\t\tclassName:\n\t\t\t\"w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24\",\n\t\tmobile: \"component\",\n\t},\n\t\"calendar-16\": {\n\t\tdescription: \"With time picker\",\n\t\tiframeHeight: \"600px\",\n\t\tclassName: \"w-full bg-surface min-h-svh flex px-6 py-12 items-start justify-center min-w-0\",\n\t\tmobile: \"component\",\n\t},\n\t\"calendar-17\": {\n\t\tdescription: \"With time picker inline\",\n\t\tiframeHeight: \"650px\",\n\t\tclassName:\n\t\t\t\"w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24\",\n\t\tmobile: \"component\",\n\t},\n\t\"calendar-18\": {\n\t\tdescription: \"Variable size\",\n\t\tiframeHeight: \"600px\",\n\t\tclassName:\n\t\t\t\"w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24\",\n\t\tmobile: \"component\",\n\t},\n\t\"calendar-19\": {\n\t\tdescription: \"With presets\",\n\t\tiframeHeight: \"600px\",\n\t\tclassName: \"w-full bg-surface min-h-svh flex px-6 py-12 items-start justify-center min-w-0\",\n\t\tmobile: \"component\",\n\t},\n\t\"calendar-20\": {\n\t\tdescription: \"With time presets\",\n\t\tiframeHeight: \"600px\",\n\t\tclassName: \"w-full bg-surface min-h-svh flex px-6 py-12 items-start justify-center min-w-0\",\n\t\tmobile: \"component\",\n\t},\n\t\"calendar-21\": {\n\t\tdescription: \"Custom days and formatters\",\n\t\tiframeHeight: \"600px\",\n\t\tclassName: \"w-full bg-surface min-h-svh flex px-6 py-12 items-start justify-center min-w-0\",\n\t\tmobile: \"component\",\n\t},\n\t\"calendar-22\": {\n\t\tdescription: \"Date picker\",\n\t\tiframeHeight: \"600px\",\n\t\tclassName:\n\t\t\t\"w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24\",\n\t\tmobile: \"component\",\n\t},\n\t\"calendar-23\": {\n\t\tdescription: \"Date range picker\",\n\t\tiframeHeight: \"600px\",\n\t\tclassName:\n\t\t\t\"w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24\",\n\t\tmobile: \"component\",\n\t},\n\t\"calendar-24\": {\n\t\tdescription: \"Date and Time picker\",\n\t\tiframeHeight: \"600px\",\n\t\tclassName:\n\t\t\t\"w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24\",\n\t\tmobile: \"component\",\n\t},\n\t\"calendar-25\": {\n\t\tdescription: \"Date and Time range picker\",\n\t\tiframeHeight: \"600px\",\n\t\tclassName:\n\t\t\t\"w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24\",\n\t\tmobile: \"component\",\n\t},\n\t\"calendar-26\": {\n\t\tdescription: \"Date range picker with time\",\n\t\tiframeHeight: \"600px\",\n\t\tclassName:\n\t\t\t\"w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24\",\n\t\tmobile: \"component\",\n\t},\n\t\"calendar-27\": {\n\t\tdescription: \"Chart filter\",\n\t\tiframeHeight: \"600px\",\n\t\tclassName: \"w-full bg-surface min-h-svh flex px-6 py-12 items-start justify-center min-w-0\",\n\t\tmobile: \"component\",\n\t},\n\t\"calendar-28\": {\n\t\tdescription: \"Input with date picker\",\n\t\tiframeHeight: \"600px\",\n\t\tclassName:\n\t\t\t\"w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24\",\n\t\tmobile: \"component\",\n\t},\n\t\"calendar-29\": {\n\t\tdescription: \"Natural language date picker\",\n\t\tiframeHeight: \"600px\",\n\t\tclassName:\n\t\t\t\"w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24\",\n\t\tmobile: \"component\",\n\t},\n\t\"calendar-30\": {\n\t\tdescription: \"With little-date\",\n\t\tiframeHeight: \"600px\",\n\t\tclassName:\n\t\t\t\"w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24\",\n\t\tmobile: \"component\",\n\t},\n\t\"calendar-31\": {\n\t\tdescription: \"With event slots\",\n\t\tiframeHeight: \"700px\",\n\t\tclassName:\n\t\t\t\"w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0\",\n\t\tmobile: \"component\",\n\t},\n\t\"calendar-32\": {\n\t\tdescription: \"Date picker in a drawer\",\n\t\tiframeHeight: \"600px\",\n\t\tclassName:\n\t\t\t\"w-full bg-surface min-h-svh flex px-6 py-12 items-start md:pt-20 justify-center min-w-0 xl:py-24\",\n\t\tmobile: \"component\",\n\t},\n} as Record<BlockName, BlockMeta>;\n"
  },
  {
    "path": "docs/src/lib/registry/registry-categories.ts",
    "content": "export const registryCategories = [\n\t{\n\t\tname: \"Sidebar\",\n\t\tslug: \"sidebar\",\n\t\thidden: false,\n\t},\n\t{\n\t\tname: \"Dashboard\",\n\t\tslug: \"dashboard\",\n\t\thidden: true,\n\t},\n\t{\n\t\tname: \"Authentication\",\n\t\tslug: \"authentication\",\n\t\thidden: true,\n\t},\n\t{\n\t\tname: \"Login\",\n\t\tslug: \"login\",\n\t\thidden: false,\n\t},\n\t{\n\t\tname: \"Signup\",\n\t\tslug: \"sign-up\",\n\t\thidden: false,\n\t},\n\t{\n\t\tname: \"OTP\",\n\t\tslug: \"otp\",\n\t\thidden: false,\n\t},\n\t{\n\t\tname: \"Calendar\",\n\t\tslug: \"calendar\",\n\t\thidden: false,\n\t},\n];\n"
  },
  {
    "path": "docs/src/lib/registry/registry-colors.ts",
    "content": "export const baseColors = [\n\t\"slate\",\n\t\"gray\",\n\t\"zinc\",\n\t\"neutral\",\n\t\"stone\",\n\t\"red\",\n\t\"orange\",\n\t\"amber\",\n\t\"yellow\",\n\t\"lime\",\n\t\"green\",\n\t\"emerald\",\n\t\"teal\",\n\t\"cyan\",\n\t\"sky\",\n\t\"blue\",\n\t\"indigo\",\n\t\"violet\",\n\t\"purple\",\n\t\"fuchsia\",\n\t\"pink\",\n\t\"rose\",\n] as const;\n\nexport type BaseColor = (typeof baseColors)[number];\n\nexport const colors = {\n\tinherit: \"inherit\",\n\tcurrent: \"currentColor\",\n\ttransparent: \"transparent\",\n\tblack: {\n\t\thex: \"#000000\",\n\t\trgb: \"rgb(0,0,0)\",\n\t\thsl: \"hsl(0,0%,0%)\",\n\t\toklch: \"oklch(0.00,0.00,0)\",\n\t},\n\twhite: {\n\t\thex: \"#ffffff\",\n\t\trgb: \"rgb(255,255,255)\",\n\t\thsl: \"hsl(0,0%,100%)\",\n\t\toklch: \"oklch(1.00,0.00,0)\",\n\t},\n\tneutral: [\n\t\t{\n\t\t\tscale: 50,\n\t\t\thex: \"#fafafa\",\n\t\t\trgb: \"rgb(250,250,250)\",\n\t\t\thsl: \"hsl(0,0%,98%)\",\n\t\t\toklch: \"oklch(0.99,0.00,0)\",\n\t\t},\n\t\t{\n\t\t\tscale: 100,\n\t\t\thex: \"#f5f5f5\",\n\t\t\trgb: \"rgb(245,245,245)\",\n\t\t\thsl: \"hsl(0,0%,96.1%)\",\n\t\t\toklch: \"oklch(0.97,0.00,0)\",\n\t\t},\n\t\t{\n\t\t\tscale: 200,\n\t\t\thex: \"#e5e5e5\",\n\t\t\trgb: \"rgb(229,229,229)\",\n\t\t\thsl: \"hsl(0,0%,89.8%)\",\n\t\t\toklch: \"oklch(0.92,0.00,0)\",\n\t\t},\n\t\t{\n\t\t\tscale: 300,\n\t\t\thex: \"#d4d4d4\",\n\t\t\trgb: \"rgb(212,212,212)\",\n\t\t\thsl: \"hsl(0,0%,83.1%)\",\n\t\t\toklch: \"oklch(0.87,0.00,0)\",\n\t\t},\n\t\t{\n\t\t\tscale: 400,\n\t\t\thex: \"#a3a3a3\",\n\t\t\trgb: \"rgb(163,163,163)\",\n\t\t\thsl: \"hsl(0,0%,63.9%)\",\n\t\t\toklch: \"oklch(0.72,0.00,0)\",\n\t\t},\n\t\t{\n\t\t\tscale: 500,\n\t\t\thex: \"#737373\",\n\t\t\trgb: \"rgb(115,115,115)\",\n\t\t\thsl: \"hsl(0,0%,45.1%)\",\n\t\t\toklch: \"oklch(0.56,0.00,0)\",\n\t\t},\n\t\t{\n\t\t\tscale: 600,\n\t\t\thex: \"#525252\",\n\t\t\trgb: \"rgb(82,82,82)\",\n\t\t\thsl: \"hsl(0,0%,32.2%)\",\n\t\t\toklch: \"oklch(0.44,0.00,0)\",\n\t\t},\n\t\t{\n\t\t\tscale: 700,\n\t\t\thex: \"#404040\",\n\t\t\trgb: \"rgb(64,64,64)\",\n\t\t\thsl: \"hsl(0,0%,25.1%)\",\n\t\t\toklch: \"oklch(0.37,0.00,0)\",\n\t\t},\n\t\t{\n\t\t\tscale: 800,\n\t\t\thex: \"#262626\",\n\t\t\trgb: \"rgb(38,38,38)\",\n\t\t\thsl: \"hsl(0,0%,14.9%)\",\n\t\t\toklch: \"oklch(0.27,0.00,0)\",\n\t\t},\n\t\t{\n\t\t\tscale: 900,\n\t\t\thex: \"#171717\",\n\t\t\trgb: \"rgb(23,23,23)\",\n\t\t\thsl: \"hsl(0,0%,9%)\",\n\t\t\toklch: \"oklch(0.20,0.00,0)\",\n\t\t},\n\t\t{\n\t\t\tscale: 950,\n\t\t\thex: \"#0a0a0a\",\n\t\t\trgb: \"rgb(10,10,10)\",\n\t\t\thsl: \"hsl(0,0%,3.9%)\",\n\t\t\toklch: \"oklch(0.14,0.00,0)\",\n\t\t},\n\t],\n\tstone: [\n\t\t{\n\t\t\tscale: 50,\n\t\t\thex: \"#fafaf9\",\n\t\t\trgb: \"rgb(250,250,249)\",\n\t\t\thsl: \"hsl(60,9.1%,97.8%)\",\n\t\t\toklch: \"oklch(0.98,0.00,106)\",\n\t\t},\n\t\t{\n\t\t\tscale: 100,\n\t\t\thex: \"#f5f5f4\",\n\t\t\trgb: \"rgb(245,245,244)\",\n\t\t\thsl: \"hsl(60,4.8%,95.9%)\",\n\t\t\toklch: \"oklch(0.97,0.00,106)\",\n\t\t},\n\t\t{\n\t\t\tscale: 200,\n\t\t\thex: \"#e7e5e4\",\n\t\t\trgb: \"rgb(231,229,228)\",\n\t\t\thsl: \"hsl(20,5.9%,90%)\",\n\t\t\toklch: \"oklch(0.92,0.00,49)\",\n\t\t},\n\t\t{\n\t\t\tscale: 300,\n\t\t\thex: \"#d6d3d1\",\n\t\t\trgb: \"rgb(214,211,209)\",\n\t\t\thsl: \"hsl(24,5.7%,82.9%)\",\n\t\t\toklch: \"oklch(0.87,0.00,56)\",\n\t\t},\n\t\t{\n\t\t\tscale: 400,\n\t\t\thex: \"#a8a29e\",\n\t\t\trgb: \"rgb(168,162,158)\",\n\t\t\thsl: \"hsl(24,5.4%,63.9%)\",\n\t\t\toklch: \"oklch(0.72,0.01,56)\",\n\t\t},\n\t\t{\n\t\t\tscale: 500,\n\t\t\thex: \"#78716c\",\n\t\t\trgb: \"rgb(120,113,108)\",\n\t\t\thsl: \"hsl(25,5.3%,44.7%)\",\n\t\t\toklch: \"oklch(0.55,0.01,58)\",\n\t\t},\n\t\t{\n\t\t\tscale: 600,\n\t\t\thex: \"#57534e\",\n\t\t\trgb: \"rgb(87,83,78)\",\n\t\t\thsl: \"hsl(33.3,5.5%,32.4%)\",\n\t\t\toklch: \"oklch(0.44,0.01,74)\",\n\t\t},\n\t\t{\n\t\t\tscale: 700,\n\t\t\thex: \"#44403c\",\n\t\t\trgb: \"rgb(68,64,60)\",\n\t\t\thsl: \"hsl(30,6.3%,25.1%)\",\n\t\t\toklch: \"oklch(0.37,0.01,68)\",\n\t\t},\n\t\t{\n\t\t\tscale: 800,\n\t\t\thex: \"#292524\",\n\t\t\trgb: \"rgb(41,37,36)\",\n\t\t\thsl: \"hsl(12,6.5%,15.1%)\",\n\t\t\toklch: \"oklch(0.27,0.01,34)\",\n\t\t},\n\t\t{\n\t\t\tscale: 900,\n\t\t\thex: \"#1c1917\",\n\t\t\trgb: \"rgb(28,25,23)\",\n\t\t\thsl: \"hsl(24,9.8%,10%)\",\n\t\t\toklch: \"oklch(0.22,0.01,56)\",\n\t\t},\n\t\t{\n\t\t\tscale: 950,\n\t\t\thex: \"#0c0a09\",\n\t\t\trgb: \"rgb(12,10,9)\",\n\t\t\thsl: \"hsl(20,14.3%,4.1%)\",\n\t\t\toklch: \"oklch(0.15,0.00,49)\",\n\t\t},\n\t],\n\tzinc: [\n\t\t{\n\t\t\tscale: 50,\n\t\t\thex: \"#fafafa\",\n\t\t\trgb: \"rgb(250,250,250)\",\n\t\t\thsl: \"hsl(0,0%,98%)\",\n\t\t\toklch: \"oklch(0.99,0.00,0)\",\n\t\t},\n\t\t{\n\t\t\tscale: 100,\n\t\t\thex: \"#f4f4f5\",\n\t\t\trgb: \"rgb(244,244,245)\",\n\t\t\thsl: \"hsl(240,4.8%,95.9%)\",\n\t\t\toklch: \"oklch(0.97,0.00,286)\",\n\t\t},\n\t\t{\n\t\t\tscale: 200,\n\t\t\thex: \"#e4e4e7\",\n\t\t\trgb: \"rgb(228,228,231)\",\n\t\t\thsl: \"hsl(240,5.9%,90%)\",\n\t\t\toklch: \"oklch(0.92,0.00,286)\",\n\t\t},\n\t\t{\n\t\t\tscale: 300,\n\t\t\thex: \"#d4d4d8\",\n\t\t\trgb: \"rgb(212,212,216)\",\n\t\t\thsl: \"hsl(240,4.9%,83.9%)\",\n\t\t\toklch: \"oklch(0.87,0.01,286)\",\n\t\t},\n\t\t{\n\t\t\tscale: 400,\n\t\t\thex: \"#a1a1aa\",\n\t\t\trgb: \"rgb(161,161,170)\",\n\t\t\thsl: \"hsl(240,5%,64.9%)\",\n\t\t\toklch: \"oklch(0.71,0.01,286)\",\n\t\t},\n\t\t{\n\t\t\tscale: 500,\n\t\t\thex: \"#71717a\",\n\t\t\trgb: \"rgb(113,113,122)\",\n\t\t\thsl: \"hsl(240,3.8%,46.1%)\",\n\t\t\toklch: \"oklch(0.55,0.01,286)\",\n\t\t},\n\t\t{\n\t\t\tscale: 600,\n\t\t\thex: \"#52525b\",\n\t\t\trgb: \"rgb(82,82,91)\",\n\t\t\thsl: \"hsl(240,5.2%,33.9%)\",\n\t\t\toklch: \"oklch(0.44,0.01,286)\",\n\t\t},\n\t\t{\n\t\t\tscale: 700,\n\t\t\thex: \"#3f3f46\",\n\t\t\trgb: \"rgb(63,63,70)\",\n\t\t\thsl: \"hsl(240,5.3%,26.1%)\",\n\t\t\toklch: \"oklch(0.37,0.01,286)\",\n\t\t},\n\t\t{\n\t\t\tscale: 800,\n\t\t\thex: \"#27272a\",\n\t\t\trgb: \"rgb(39,39,42)\",\n\t\t\thsl: \"hsl(240,3.7%,15.9%)\",\n\t\t\toklch: \"oklch(0.27,0.01,286)\",\n\t\t},\n\t\t{\n\t\t\tscale: 900,\n\t\t\thex: \"#18181b\",\n\t\t\trgb: \"rgb(24,24,27)\",\n\t\t\thsl: \"hsl(240,5.9%,10%)\",\n\t\t\toklch: \"oklch(0.21,0.01,286)\",\n\t\t},\n\t\t{\n\t\t\tscale: 950,\n\t\t\thex: \"#09090b\",\n\t\t\trgb: \"rgb(9,9,11)\",\n\t\t\thsl: \"hsl(240,10%,3.9%)\",\n\t\t\toklch: \"oklch(0.14,0.00,286)\",\n\t\t},\n\t],\n\tslate: [\n\t\t{\n\t\t\tscale: 50,\n\t\t\thex: \"#f8fafc\",\n\t\t\trgb: \"rgb(248,250,252)\",\n\t\t\thsl: \"hsl(210,40%,98%)\",\n\t\t\toklch: \"oklch(0.98,0.00,248)\",\n\t\t},\n\t\t{\n\t\t\tscale: 100,\n\t\t\thex: \"#f1f5f9\",\n\t\t\trgb: \"rgb(241,245,249)\",\n\t\t\thsl: \"hsl(210,40%,96.1%)\",\n\t\t\toklch: \"oklch(0.97,0.01,248)\",\n\t\t},\n\t\t{\n\t\t\tscale: 200,\n\t\t\thex: \"#e2e8f0\",\n\t\t\trgb: \"rgb(226,232,240)\",\n\t\t\thsl: \"hsl(214.3,31.8%,91.4%)\",\n\t\t\toklch: \"oklch(0.93,0.01,256)\",\n\t\t},\n\t\t{\n\t\t\tscale: 300,\n\t\t\thex: \"#cbd5e1\",\n\t\t\trgb: \"rgb(203,213,225)\",\n\t\t\thsl: \"hsl(212.7,26.8%,83.9%)\",\n\t\t\toklch: \"oklch(0.87,0.02,253)\",\n\t\t},\n\t\t{\n\t\t\tscale: 400,\n\t\t\thex: \"#94a3b8\",\n\t\t\trgb: \"rgb(148,163,184)\",\n\t\t\thsl: \"hsl(215,20.2%,65.1%)\",\n\t\t\toklch: \"oklch(0.71,0.04,257)\",\n\t\t},\n\t\t{\n\t\t\tscale: 500,\n\t\t\thex: \"#64748b\",\n\t\t\trgb: \"rgb(100,116,139)\",\n\t\t\thsl: \"hsl(215.4,16.3%,46.9%)\",\n\t\t\toklch: \"oklch(0.55,0.04,257)\",\n\t\t},\n\t\t{\n\t\t\tscale: 600,\n\t\t\thex: \"#475569\",\n\t\t\trgb: \"rgb(71,85,105)\",\n\t\t\thsl: \"hsl(215.3,19.3%,34.5%)\",\n\t\t\toklch: \"oklch(0.45,0.04,257)\",\n\t\t},\n\t\t{\n\t\t\tscale: 700,\n\t\t\thex: \"#334155\",\n\t\t\trgb: \"rgb(51,65,85)\",\n\t\t\thsl: \"hsl(215.3,25%,26.7%)\",\n\t\t\toklch: \"oklch(0.37,0.04,257)\",\n\t\t},\n\t\t{\n\t\t\tscale: 800,\n\t\t\thex: \"#1e293b\",\n\t\t\trgb: \"rgb(30,41,59)\",\n\t\t\thsl: \"hsl(217.2,32.6%,17.5%)\",\n\t\t\toklch: \"oklch(0.28,0.04,260)\",\n\t\t},\n\t\t{\n\t\t\tscale: 900,\n\t\t\thex: \"#0f172a\",\n\t\t\trgb: \"rgb(15,23,42)\",\n\t\t\thsl: \"hsl(222.2,47.4%,11.2%)\",\n\t\t\toklch: \"oklch(0.21,0.04,266)\",\n\t\t},\n\t\t{\n\t\t\tscale: 950,\n\t\t\thex: \"#020617\",\n\t\t\trgb: \"rgb(2,6,23)\",\n\t\t\thsl: \"hsl(222.2,84%,4.9%)\",\n\t\t\toklch: \"oklch(0.13,0.04,265)\",\n\t\t},\n\t],\n\tgray: [\n\t\t{\n\t\t\tscale: 50,\n\t\t\thex: \"#f9fafb\",\n\t\t\trgb: \"rgb(249,250,251)\",\n\t\t\thsl: \"hsl(210,20%,98%)\",\n\t\t\toklch: \"oklch(0.98,0.00,248)\",\n\t\t},\n\t\t{\n\t\t\tscale: 100,\n\t\t\thex: \"#f3f4f6\",\n\t\t\trgb: \"rgb(243,244,246)\",\n\t\t\thsl: \"hsl(220,14.3%,95.9%)\",\n\t\t\toklch: \"oklch(0.97,0.00,265)\",\n\t\t},\n\t\t{\n\t\t\tscale: 200,\n\t\t\thex: \"#e5e7eb\",\n\t\t\trgb: \"rgb(229,231,235)\",\n\t\t\thsl: \"hsl(220,13%,91%)\",\n\t\t\toklch: \"oklch(0.93,0.01,265)\",\n\t\t},\n\t\t{\n\t\t\tscale: 300,\n\t\t\thex: \"#d1d5db\",\n\t\t\trgb: \"rgb(209,213,219)\",\n\t\t\thsl: \"hsl(216,12.2%,83.9%)\",\n\t\t\toklch: \"oklch(0.87,0.01,258)\",\n\t\t},\n\t\t{\n\t\t\tscale: 400,\n\t\t\thex: \"#9ca3af\",\n\t\t\trgb: \"rgb(156,163,175)\",\n\t\t\thsl: \"hsl(217.9,10.6%,64.9%)\",\n\t\t\toklch: \"oklch(0.71,0.02,261)\",\n\t\t},\n\t\t{\n\t\t\tscale: 500,\n\t\t\thex: \"#6b7280\",\n\t\t\trgb: \"rgb(107,114,128)\",\n\t\t\thsl: \"hsl(220,8.9%,46.1%)\",\n\t\t\toklch: \"oklch(0.55,0.02,264)\",\n\t\t},\n\t\t{\n\t\t\tscale: 600,\n\t\t\thex: \"#4b5563\",\n\t\t\trgb: \"rgb(75,85,99)\",\n\t\t\thsl: \"hsl(215,13.8%,34.1%)\",\n\t\t\toklch: \"oklch(0.45,0.03,257)\",\n\t\t},\n\t\t{\n\t\t\tscale: 700,\n\t\t\thex: \"#374151\",\n\t\t\trgb: \"rgb(55,65,81)\",\n\t\t\thsl: \"hsl(216.9,19.1%,26.7%)\",\n\t\t\toklch: \"oklch(0.37,0.03,260)\",\n\t\t},\n\t\t{\n\t\t\tscale: 800,\n\t\t\thex: \"#1f2937\",\n\t\t\trgb: \"rgb(31,41,55)\",\n\t\t\thsl: \"hsl(215,27.9%,16.9%)\",\n\t\t\toklch: \"oklch(0.28,0.03,257)\",\n\t\t},\n\t\t{\n\t\t\tscale: 900,\n\t\t\thex: \"#111827\",\n\t\t\trgb: \"rgb(17,24,39)\",\n\t\t\thsl: \"hsl(220.9,39.3%,11%)\",\n\t\t\toklch: \"oklch(0.21,0.03,265)\",\n\t\t},\n\t\t{\n\t\t\tscale: 950,\n\t\t\thex: \"#030712\",\n\t\t\trgb: \"rgb(3,7,18)\",\n\t\t\thsl: \"hsl(224,71.4%,4.1%)\",\n\t\t\toklch: \"oklch(0.13,0.03,262)\",\n\t\t},\n\t],\n\tred: [\n\t\t{\n\t\t\tscale: 50,\n\t\t\thex: \"#fef2f2\",\n\t\t\trgb: \"rgb(254,242,242)\",\n\t\t\thsl: \"hsl(0,85.7%,97.3%)\",\n\t\t\toklch: \"oklch(0.97,0.01,17)\",\n\t\t},\n\t\t{\n\t\t\tscale: 100,\n\t\t\thex: \"#fee2e2\",\n\t\t\trgb: \"rgb(254,226,226)\",\n\t\t\thsl: \"hsl(0,93.3%,94.1%)\",\n\t\t\toklch: \"oklch(0.94,0.03,18)\",\n\t\t},\n\t\t{\n\t\t\tscale: 200,\n\t\t\thex: \"#fecaca\",\n\t\t\trgb: \"rgb(254,202,202)\",\n\t\t\thsl: \"hsl(0,96.3%,89.4%)\",\n\t\t\toklch: \"oklch(0.88,0.06,18)\",\n\t\t},\n\t\t{\n\t\t\tscale: 300,\n\t\t\thex: \"#fca5a5\",\n\t\t\trgb: \"rgb(252,165,165)\",\n\t\t\thsl: \"hsl(0,93.5%,81.8%)\",\n\t\t\toklch: \"oklch(0.81,0.10,20)\",\n\t\t},\n\t\t{\n\t\t\tscale: 400,\n\t\t\thex: \"#f87171\",\n\t\t\trgb: \"rgb(248,113,113)\",\n\t\t\thsl: \"hsl(0,90.6%,70.8%)\",\n\t\t\toklch: \"oklch(0.71,0.17,22)\",\n\t\t},\n\t\t{\n\t\t\tscale: 500,\n\t\t\thex: \"#ef4444\",\n\t\t\trgb: \"rgb(239,68,68)\",\n\t\t\thsl: \"hsl(0,84.2%,60.2%)\",\n\t\t\toklch: \"oklch(0.64,0.21,25)\",\n\t\t},\n\t\t{\n\t\t\tscale: 600,\n\t\t\thex: \"#dc2626\",\n\t\t\trgb: \"rgb(220,38,38)\",\n\t\t\thsl: \"hsl(0,72.2%,50.6%)\",\n\t\t\toklch: \"oklch(0.58,0.22,27)\",\n\t\t},\n\t\t{\n\t\t\tscale: 700,\n\t\t\thex: \"#b91c1c\",\n\t\t\trgb: \"rgb(185,28,28)\",\n\t\t\thsl: \"hsl(0,73.7%,41.8%)\",\n\t\t\toklch: \"oklch(0.51,0.19,28)\",\n\t\t},\n\t\t{\n\t\t\tscale: 800,\n\t\t\thex: \"#991b1b\",\n\t\t\trgb: \"rgb(153,27,27)\",\n\t\t\thsl: \"hsl(0,70%,35.3%)\",\n\t\t\toklch: \"oklch(0.44,0.16,27)\",\n\t\t},\n\t\t{\n\t\t\tscale: 900,\n\t\t\thex: \"#7f1d1d\",\n\t\t\trgb: \"rgb(127,29,29)\",\n\t\t\thsl: \"hsl(0,62.8%,30.6%)\",\n\t\t\toklch: \"oklch(0.40,0.13,26)\",\n\t\t},\n\t\t{\n\t\t\tscale: 950,\n\t\t\thex: \"#450a0a\",\n\t\t\trgb: \"rgb(69,10,10)\",\n\t\t\thsl: \"hsl(0,74.7%,15.5%)\",\n\t\t\toklch: \"oklch(0.26,0.09,26)\",\n\t\t},\n\t],\n\torange: [\n\t\t{\n\t\t\tscale: 50,\n\t\t\thex: \"#fff7ed\",\n\t\t\trgb: \"rgb(255,247,237)\",\n\t\t\thsl: \"hsl(33.3,100%,96.5%)\",\n\t\t\toklch: \"oklch(0.98,0.02,74)\",\n\t\t},\n\t\t{\n\t\t\tscale: 100,\n\t\t\thex: \"#ffedd5\",\n\t\t\trgb: \"rgb(255,237,213)\",\n\t\t\thsl: \"hsl(34.3,100%,91.8%)\",\n\t\t\toklch: \"oklch(0.95,0.04,75)\",\n\t\t},\n\t\t{\n\t\t\tscale: 200,\n\t\t\thex: \"#fed7aa\",\n\t\t\trgb: \"rgb(254,215,170)\",\n\t\t\thsl: \"hsl(32.1,97.7%,83.1%)\",\n\t\t\toklch: \"oklch(0.90,0.07,71)\",\n\t\t},\n\t\t{\n\t\t\tscale: 300,\n\t\t\thex: \"#fdba74\",\n\t\t\trgb: \"rgb(253,186,116)\",\n\t\t\thsl: \"hsl(30.7,97.2%,72.4%)\",\n\t\t\toklch: \"oklch(0.84,0.12,66)\",\n\t\t},\n\t\t{\n\t\t\tscale: 400,\n\t\t\thex: \"#fb923c\",\n\t\t\trgb: \"rgb(251,146,60)\",\n\t\t\thsl: \"hsl(27,96%,61%)\",\n\t\t\toklch: \"oklch(0.76,0.16,56)\",\n\t\t},\n\t\t{\n\t\t\tscale: 500,\n\t\t\thex: \"#f97316\",\n\t\t\trgb: \"rgb(249,115,22)\",\n\t\t\thsl: \"hsl(24.6,95%,53.1%)\",\n\t\t\toklch: \"oklch(0.70,0.19,48)\",\n\t\t},\n\t\t{\n\t\t\tscale: 600,\n\t\t\thex: \"#ea580c\",\n\t\t\trgb: \"rgb(234,88,12)\",\n\t\t\thsl: \"hsl(20.5,90.2%,48.2%)\",\n\t\t\toklch: \"oklch(0.65,0.19,41)\",\n\t\t},\n\t\t{\n\t\t\tscale: 700,\n\t\t\thex: \"#c2410c\",\n\t\t\trgb: \"rgb(194,65,12)\",\n\t\t\thsl: \"hsl(17.5,88.3%,40.4%)\",\n\t\t\toklch: \"oklch(0.55,0.17,38)\",\n\t\t},\n\t\t{\n\t\t\tscale: 800,\n\t\t\thex: \"#9a3412\",\n\t\t\trgb: \"rgb(154,52,18)\",\n\t\t\thsl: \"hsl(15,79.1%,33.7%)\",\n\t\t\toklch: \"oklch(0.47,0.14,37)\",\n\t\t},\n\t\t{\n\t\t\tscale: 900,\n\t\t\thex: \"#7c2d12\",\n\t\t\trgb: \"rgb(124,45,18)\",\n\t\t\thsl: \"hsl(15.3,74.6%,27.8%)\",\n\t\t\toklch: \"oklch(0.41,0.12,38)\",\n\t\t},\n\t\t{\n\t\t\tscale: 950,\n\t\t\thex: \"#431407\",\n\t\t\trgb: \"rgb(67,20,7)\",\n\t\t\thsl: \"hsl(13,81.1%,14.5%)\",\n\t\t\toklch: \"oklch(0.27,0.08,36)\",\n\t\t},\n\t],\n\tamber: [\n\t\t{\n\t\t\tscale: 50,\n\t\t\thex: \"#fffbeb\",\n\t\t\trgb: \"rgb(255,251,235)\",\n\t\t\thsl: \"hsl(48,100%,96.1%)\",\n\t\t\toklch: \"oklch(0.99,0.02,95)\",\n\t\t},\n\t\t{\n\t\t\tscale: 100,\n\t\t\thex: \"#fef3c7\",\n\t\t\trgb: \"rgb(254,243,199)\",\n\t\t\thsl: \"hsl(48,96.5%,88.8%)\",\n\t\t\toklch: \"oklch(0.96,0.06,96)\",\n\t\t},\n\t\t{\n\t\t\tscale: 200,\n\t\t\thex: \"#fde68a\",\n\t\t\trgb: \"rgb(253,230,138)\",\n\t\t\thsl: \"hsl(48,96.6%,76.7%)\",\n\t\t\toklch: \"oklch(0.92,0.12,96)\",\n\t\t},\n\t\t{\n\t\t\tscale: 300,\n\t\t\thex: \"#fcd34d\",\n\t\t\trgb: \"rgb(252,211,77)\",\n\t\t\thsl: \"hsl(45.9,96.7%,64.5%)\",\n\t\t\toklch: \"oklch(0.88,0.15,92)\",\n\t\t},\n\t\t{\n\t\t\tscale: 400,\n\t\t\thex: \"#fbbf24\",\n\t\t\trgb: \"rgb(251,191,36)\",\n\t\t\thsl: \"hsl(43.3,96.4%,56.3%)\",\n\t\t\toklch: \"oklch(0.84,0.16,84)\",\n\t\t},\n\t\t{\n\t\t\tscale: 500,\n\t\t\thex: \"#f59e0b\",\n\t\t\trgb: \"rgb(245,158,11)\",\n\t\t\thsl: \"hsl(37.7,92.1%,50.2%)\",\n\t\t\toklch: \"oklch(0.77,0.16,70)\",\n\t\t},\n\t\t{\n\t\t\tscale: 600,\n\t\t\thex: \"#d97706\",\n\t\t\trgb: \"rgb(217,119,6)\",\n\t\t\thsl: \"hsl(32.1,94.6%,43.7%)\",\n\t\t\toklch: \"oklch(0.67,0.16,58)\",\n\t\t},\n\t\t{\n\t\t\tscale: 700,\n\t\t\thex: \"#b45309\",\n\t\t\trgb: \"rgb(180,83,9)\",\n\t\t\thsl: \"hsl(26,90.5%,37.1%)\",\n\t\t\toklch: \"oklch(0.56,0.15,49)\",\n\t\t},\n\t\t{\n\t\t\tscale: 800,\n\t\t\thex: \"#92400e\",\n\t\t\trgb: \"rgb(146,64,14)\",\n\t\t\thsl: \"hsl(22.7,82.5%,31.4%)\",\n\t\t\toklch: \"oklch(0.47,0.12,46)\",\n\t\t},\n\t\t{\n\t\t\tscale: 900,\n\t\t\thex: \"#78350f\",\n\t\t\trgb: \"rgb(120,53,15)\",\n\t\t\thsl: \"hsl(21.7,77.8%,26.5%)\",\n\t\t\toklch: \"oklch(0.41,0.11,46)\",\n\t\t},\n\t\t{\n\t\t\tscale: 950,\n\t\t\thex: \"#451a03\",\n\t\t\trgb: \"rgb(69,26,3)\",\n\t\t\thsl: \"hsl(20.9,91.7%,14.1%)\",\n\t\t\toklch: \"oklch(0.28,0.07,46)\",\n\t\t},\n\t],\n\tyellow: [\n\t\t{\n\t\t\tscale: 50,\n\t\t\thex: \"#fefce8\",\n\t\t\trgb: \"rgb(254,252,232)\",\n\t\t\thsl: \"hsl(54.5,91.7%,95.3%)\",\n\t\t\toklch: \"oklch(0.99,0.03,102)\",\n\t\t},\n\t\t{\n\t\t\tscale: 100,\n\t\t\thex: \"#fef9c3\",\n\t\t\trgb: \"rgb(254,249,195)\",\n\t\t\thsl: \"hsl(54.9,96.7%,88%)\",\n\t\t\toklch: \"oklch(0.97,0.07,103)\",\n\t\t},\n\t\t{\n\t\t\tscale: 200,\n\t\t\thex: \"#fef08a\",\n\t\t\trgb: \"rgb(254,240,138)\",\n\t\t\thsl: \"hsl(52.8,98.3%,76.9%)\",\n\t\t\toklch: \"oklch(0.95,0.12,102)\",\n\t\t},\n\t\t{\n\t\t\tscale: 300,\n\t\t\thex: \"#fde047\",\n\t\t\trgb: \"rgb(253,224,71)\",\n\t\t\thsl: \"hsl(50.4,97.8%,63.5%)\",\n\t\t\toklch: \"oklch(0.91,0.17,98)\",\n\t\t},\n\t\t{\n\t\t\tscale: 400,\n\t\t\thex: \"#facc15\",\n\t\t\trgb: \"rgb(250,204,21)\",\n\t\t\thsl: \"hsl(47.9,95.8%,53.1%)\",\n\t\t\toklch: \"oklch(0.86,0.17,92)\",\n\t\t},\n\t\t{\n\t\t\tscale: 500,\n\t\t\thex: \"#eab308\",\n\t\t\trgb: \"rgb(234,179,8)\",\n\t\t\thsl: \"hsl(45.4,93.4%,47.5%)\",\n\t\t\toklch: \"oklch(0.80,0.16,86)\",\n\t\t},\n\t\t{\n\t\t\tscale: 600,\n\t\t\thex: \"#ca8a04\",\n\t\t\trgb: \"rgb(202,138,4)\",\n\t\t\thsl: \"hsl(40.6,96.1%,40.4%)\",\n\t\t\toklch: \"oklch(0.68,0.14,76)\",\n\t\t},\n\t\t{\n\t\t\tscale: 700,\n\t\t\thex: \"#a16207\",\n\t\t\trgb: \"rgb(161,98,7)\",\n\t\t\thsl: \"hsl(35.5,91.7%,32.9%)\",\n\t\t\toklch: \"oklch(0.55,0.12,66)\",\n\t\t},\n\t\t{\n\t\t\tscale: 800,\n\t\t\thex: \"#854d0e\",\n\t\t\trgb: \"rgb(133,77,14)\",\n\t\t\thsl: \"hsl(31.8,81%,28.8%)\",\n\t\t\toklch: \"oklch(0.48,0.10,62)\",\n\t\t},\n\t\t{\n\t\t\tscale: 900,\n\t\t\thex: \"#713f12\",\n\t\t\trgb: \"rgb(113,63,18)\",\n\t\t\thsl: \"hsl(28.4,72.5%,25.7%)\",\n\t\t\toklch: \"oklch(0.42,0.09,58)\",\n\t\t},\n\t\t{\n\t\t\tscale: 950,\n\t\t\thex: \"#422006\",\n\t\t\trgb: \"rgb(66,32,6)\",\n\t\t\thsl: \"hsl(26,83.3%,14.1%)\",\n\t\t\toklch: \"oklch(0.29,0.06,54)\",\n\t\t},\n\t],\n\tlime: [\n\t\t{\n\t\t\tscale: 50,\n\t\t\thex: \"#f7fee7\",\n\t\t\trgb: \"rgb(247,254,231)\",\n\t\t\thsl: \"hsl(78.3,92%,95.1%)\",\n\t\t\toklch: \"oklch(0.99,0.03,121)\",\n\t\t},\n\t\t{\n\t\t\tscale: 100,\n\t\t\thex: \"#ecfccb\",\n\t\t\trgb: \"rgb(236,252,203)\",\n\t\t\thsl: \"hsl(79.6,89.1%,89.2%)\",\n\t\t\toklch: \"oklch(0.97,0.07,122)\",\n\t\t},\n\t\t{\n\t\t\tscale: 200,\n\t\t\thex: \"#d9f99d\",\n\t\t\trgb: \"rgb(217,249,157)\",\n\t\t\thsl: \"hsl(80.9,88.5%,79.6%)\",\n\t\t\toklch: \"oklch(0.94,0.12,124)\",\n\t\t},\n\t\t{\n\t\t\tscale: 300,\n\t\t\thex: \"#bef264\",\n\t\t\trgb: \"rgb(190,242,100)\",\n\t\t\thsl: \"hsl(82,84.5%,67.1%)\",\n\t\t\toklch: \"oklch(0.90,0.18,127)\",\n\t\t},\n\t\t{\n\t\t\tscale: 400,\n\t\t\thex: \"#a3e635\",\n\t\t\trgb: \"rgb(163,230,53)\",\n\t\t\thsl: \"hsl(82.7,78%,55.5%)\",\n\t\t\toklch: \"oklch(0.85,0.21,129)\",\n\t\t},\n\t\t{\n\t\t\tscale: 500,\n\t\t\thex: \"#84cc16\",\n\t\t\trgb: \"rgb(132,204,22)\",\n\t\t\thsl: \"hsl(83.7,80.5%,44.3%)\",\n\t\t\toklch: \"oklch(0.77,0.20,131)\",\n\t\t},\n\t\t{\n\t\t\tscale: 600,\n\t\t\thex: \"#65a30d\",\n\t\t\trgb: \"rgb(101,163,13)\",\n\t\t\thsl: \"hsl(84.8,85.2%,34.5%)\",\n\t\t\toklch: \"oklch(0.65,0.18,132)\",\n\t\t},\n\t\t{\n\t\t\tscale: 700,\n\t\t\thex: \"#4d7c0f\",\n\t\t\trgb: \"rgb(77,124,15)\",\n\t\t\thsl: \"hsl(85.9,78.4%,27.3%)\",\n\t\t\toklch: \"oklch(0.53,0.14,132)\",\n\t\t},\n\t\t{\n\t\t\tscale: 800,\n\t\t\thex: \"#3f6212\",\n\t\t\trgb: \"rgb(63,98,18)\",\n\t\t\thsl: \"hsl(86.3,69%,22.7%)\",\n\t\t\toklch: \"oklch(0.45,0.11,131)\",\n\t\t},\n\t\t{\n\t\t\tscale: 900,\n\t\t\thex: \"#365314\",\n\t\t\trgb: \"rgb(54,83,20)\",\n\t\t\thsl: \"hsl(87.6,61.2%,20.2%)\",\n\t\t\toklch: \"oklch(0.41,0.10,131)\",\n\t\t},\n\t\t{\n\t\t\tscale: 950,\n\t\t\thex: \"#1a2e05\",\n\t\t\trgb: \"rgb(26,46,5)\",\n\t\t\thsl: \"hsl(89.3,80.4%,10%)\",\n\t\t\toklch: \"oklch(0.27,0.07,132)\",\n\t\t},\n\t],\n\tgreen: [\n\t\t{\n\t\t\tscale: 50,\n\t\t\thex: \"#f0fdf4\",\n\t\t\trgb: \"rgb(240,253,244)\",\n\t\t\thsl: \"hsl(138.5,76.5%,96.7%)\",\n\t\t\toklch: \"oklch(0.98,0.02,156)\",\n\t\t},\n\t\t{\n\t\t\tscale: 100,\n\t\t\thex: \"#dcfce7\",\n\t\t\trgb: \"rgb(220,252,231)\",\n\t\t\thsl: \"hsl(140.6,84.2%,92.5%)\",\n\t\t\toklch: \"oklch(0.96,0.04,157)\",\n\t\t},\n\t\t{\n\t\t\tscale: 200,\n\t\t\thex: \"#bbf7d0\",\n\t\t\trgb: \"rgb(187,247,208)\",\n\t\t\thsl: \"hsl(141,78.9%,85.1%)\",\n\t\t\toklch: \"oklch(0.93,0.08,156)\",\n\t\t},\n\t\t{\n\t\t\tscale: 300,\n\t\t\thex: \"#86efac\",\n\t\t\trgb: \"rgb(134,239,172)\",\n\t\t\thsl: \"hsl(141.7,76.6%,73.1%)\",\n\t\t\toklch: \"oklch(0.87,0.14,154)\",\n\t\t},\n\t\t{\n\t\t\tscale: 400,\n\t\t\thex: \"#4ade80\",\n\t\t\trgb: \"rgb(74,222,128)\",\n\t\t\thsl: \"hsl(141.9,69.2%,58%)\",\n\t\t\toklch: \"oklch(0.80,0.18,152)\",\n\t\t},\n\t\t{\n\t\t\tscale: 500,\n\t\t\thex: \"#22c55e\",\n\t\t\trgb: \"rgb(34,197,94)\",\n\t\t\thsl: \"hsl(142.1,70.6%,45.3%)\",\n\t\t\toklch: \"oklch(0.72,0.19,150)\",\n\t\t},\n\t\t{\n\t\t\tscale: 600,\n\t\t\thex: \"#16a34a\",\n\t\t\trgb: \"rgb(22,163,74)\",\n\t\t\thsl: \"hsl(142.1,76.2%,36.3%)\",\n\t\t\toklch: \"oklch(0.63,0.17,149)\",\n\t\t},\n\t\t{\n\t\t\tscale: 700,\n\t\t\thex: \"#15803d\",\n\t\t\trgb: \"rgb(21,128,61)\",\n\t\t\thsl: \"hsl(142.4,71.8%,29.2%)\",\n\t\t\toklch: \"oklch(0.53,0.14,150)\",\n\t\t},\n\t\t{\n\t\t\tscale: 800,\n\t\t\thex: \"#166534\",\n\t\t\trgb: \"rgb(22,101,52)\",\n\t\t\thsl: \"hsl(142.8,64.2%,24.1%)\",\n\t\t\toklch: \"oklch(0.45,0.11,151)\",\n\t\t},\n\t\t{\n\t\t\tscale: 900,\n\t\t\thex: \"#14532d\",\n\t\t\trgb: \"rgb(20,83,45)\",\n\t\t\thsl: \"hsl(143.8,61.2%,20.2%)\",\n\t\t\toklch: \"oklch(0.39,0.09,153)\",\n\t\t},\n\t\t{\n\t\t\tscale: 950,\n\t\t\thex: \"#052e16\",\n\t\t\trgb: \"rgb(5,46,22)\",\n\t\t\thsl: \"hsl(144.9,80.4%,10%)\",\n\t\t\toklch: \"oklch(0.27,0.06,153)\",\n\t\t},\n\t],\n\temerald: [\n\t\t{\n\t\t\tscale: 50,\n\t\t\thex: \"#ecfdf5\",\n\t\t\trgb: \"rgb(236,253,245)\",\n\t\t\thsl: \"hsl(151.8,81%,95.9%)\",\n\t\t\toklch: \"oklch(0.98,0.02,166)\",\n\t\t},\n\t\t{\n\t\t\tscale: 100,\n\t\t\thex: \"#d1fae5\",\n\t\t\trgb: \"rgb(209,250,229)\",\n\t\t\thsl: \"hsl(149.3,80.4%,90%)\",\n\t\t\toklch: \"oklch(0.95,0.05,163)\",\n\t\t},\n\t\t{\n\t\t\tscale: 200,\n\t\t\thex: \"#a7f3d0\",\n\t\t\trgb: \"rgb(167,243,208)\",\n\t\t\thsl: \"hsl(152.4,76%,80.4%)\",\n\t\t\toklch: \"oklch(0.90,0.09,164)\",\n\t\t},\n\t\t{\n\t\t\tscale: 300,\n\t\t\thex: \"#6ee7b7\",\n\t\t\trgb: \"rgb(110,231,183)\",\n\t\t\thsl: \"hsl(156.2,71.6%,66.9%)\",\n\t\t\toklch: \"oklch(0.85,0.13,165)\",\n\t\t},\n\t\t{\n\t\t\tscale: 400,\n\t\t\thex: \"#34d399\",\n\t\t\trgb: \"rgb(52,211,153)\",\n\t\t\thsl: \"hsl(158.1,64.4%,51.6%)\",\n\t\t\toklch: \"oklch(0.77,0.15,163)\",\n\t\t},\n\t\t{\n\t\t\tscale: 500,\n\t\t\thex: \"#10b981\",\n\t\t\trgb: \"rgb(16,185,129)\",\n\t\t\thsl: \"hsl(160.1,84.1%,39.4%)\",\n\t\t\toklch: \"oklch(0.70,0.15,162)\",\n\t\t},\n\t\t{\n\t\t\tscale: 600,\n\t\t\thex: \"#059669\",\n\t\t\trgb: \"rgb(5,150,105)\",\n\t\t\thsl: \"hsl(161.4,93.5%,30.4%)\",\n\t\t\toklch: \"oklch(0.60,0.13,163)\",\n\t\t},\n\t\t{\n\t\t\tscale: 700,\n\t\t\thex: \"#047857\",\n\t\t\trgb: \"rgb(4,120,87)\",\n\t\t\thsl: \"hsl(162.9,93.5%,24.3%)\",\n\t\t\toklch: \"oklch(0.51,0.10,166)\",\n\t\t},\n\t\t{\n\t\t\tscale: 800,\n\t\t\thex: \"#065f46\",\n\t\t\trgb: \"rgb(6,95,70)\",\n\t\t\thsl: \"hsl(163.1,88.1%,19.8%)\",\n\t\t\toklch: \"oklch(0.43,0.09,167)\",\n\t\t},\n\t\t{\n\t\t\tscale: 900,\n\t\t\thex: \"#064e3b\",\n\t\t\trgb: \"rgb(6,78,59)\",\n\t\t\thsl: \"hsl(164.2,85.7%,16.5%)\",\n\t\t\toklch: \"oklch(0.38,0.07,169)\",\n\t\t},\n\t\t{\n\t\t\tscale: 950,\n\t\t\thex: \"#022c22\",\n\t\t\trgb: \"rgb(2,44,34)\",\n\t\t\thsl: \"hsl(165.7,91.3%,9%)\",\n\t\t\toklch: \"oklch(0.26,0.05,173)\",\n\t\t},\n\t],\n\tteal: [\n\t\t{\n\t\t\tscale: 50,\n\t\t\thex: \"#f0fdfa\",\n\t\t\trgb: \"rgb(240,253,250)\",\n\t\t\thsl: \"hsl(166.2,76.5%,96.7%)\",\n\t\t\toklch: \"oklch(0.98,0.01,181)\",\n\t\t},\n\t\t{\n\t\t\tscale: 100,\n\t\t\thex: \"#ccfbf1\",\n\t\t\trgb: \"rgb(204,251,241)\",\n\t\t\thsl: \"hsl(167.2,85.5%,89.2%)\",\n\t\t\toklch: \"oklch(0.95,0.05,181)\",\n\t\t},\n\t\t{\n\t\t\tscale: 200,\n\t\t\thex: \"#99f6e4\",\n\t\t\trgb: \"rgb(153,246,228)\",\n\t\t\thsl: \"hsl(168.4,83.8%,78.2%)\",\n\t\t\toklch: \"oklch(0.91,0.09,180)\",\n\t\t},\n\t\t{\n\t\t\tscale: 300,\n\t\t\thex: \"#5eead4\",\n\t\t\trgb: \"rgb(94,234,212)\",\n\t\t\thsl: \"hsl(170.6,76.9%,64.3%)\",\n\t\t\toklch: \"oklch(0.85,0.13,181)\",\n\t\t},\n\t\t{\n\t\t\tscale: 400,\n\t\t\thex: \"#2dd4bf\",\n\t\t\trgb: \"rgb(45,212,191)\",\n\t\t\thsl: \"hsl(172.5,66%,50.4%)\",\n\t\t\toklch: \"oklch(0.78,0.13,182)\",\n\t\t},\n\t\t{\n\t\t\tscale: 500,\n\t\t\thex: \"#14b8a6\",\n\t\t\trgb: \"rgb(20,184,166)\",\n\t\t\thsl: \"hsl(173.4,80.4%,40%)\",\n\t\t\toklch: \"oklch(0.70,0.12,183)\",\n\t\t},\n\t\t{\n\t\t\tscale: 600,\n\t\t\thex: \"#0d9488\",\n\t\t\trgb: \"rgb(13,148,136)\",\n\t\t\thsl: \"hsl(174.7,83.9%,31.6%)\",\n\t\t\toklch: \"oklch(0.60,0.10,185)\",\n\t\t},\n\t\t{\n\t\t\tscale: 700,\n\t\t\thex: \"#0f766e\",\n\t\t\trgb: \"rgb(15,118,110)\",\n\t\t\thsl: \"hsl(175.3,77.4%,26.1%)\",\n\t\t\toklch: \"oklch(0.51,0.09,186)\",\n\t\t},\n\t\t{\n\t\t\tscale: 800,\n\t\t\thex: \"#115e59\",\n\t\t\trgb: \"rgb(17,94,89)\",\n\t\t\thsl: \"hsl(176.1,69.4%,21.8%)\",\n\t\t\toklch: \"oklch(0.44,0.07,188)\",\n\t\t},\n\t\t{\n\t\t\tscale: 900,\n\t\t\thex: \"#134e4a\",\n\t\t\trgb: \"rgb(19,78,74)\",\n\t\t\thsl: \"hsl(175.9,60.8%,19%)\",\n\t\t\toklch: \"oklch(0.39,0.06,188)\",\n\t\t},\n\t\t{\n\t\t\tscale: 950,\n\t\t\thex: \"#042f2e\",\n\t\t\trgb: \"rgb(4,47,46)\",\n\t\t\thsl: \"hsl(178.6,84.3%,10%)\",\n\t\t\toklch: \"oklch(0.28,0.04,193)\",\n\t\t},\n\t],\n\tcyan: [\n\t\t{\n\t\t\tscale: 50,\n\t\t\thex: \"#ecfeff\",\n\t\t\trgb: \"rgb(236,254,255)\",\n\t\t\thsl: \"hsl(183.2,100%,96.3%)\",\n\t\t\toklch: \"oklch(0.98,0.02,201)\",\n\t\t},\n\t\t{\n\t\t\tscale: 100,\n\t\t\thex: \"#cffafe\",\n\t\t\trgb: \"rgb(207,250,254)\",\n\t\t\thsl: \"hsl(185.1,95.9%,90.4%)\",\n\t\t\toklch: \"oklch(0.96,0.04,203)\",\n\t\t},\n\t\t{\n\t\t\tscale: 200,\n\t\t\thex: \"#a5f3fc\",\n\t\t\trgb: \"rgb(165,243,252)\",\n\t\t\thsl: \"hsl(186.2,93.5%,81.8%)\",\n\t\t\toklch: \"oklch(0.92,0.08,205)\",\n\t\t},\n\t\t{\n\t\t\tscale: 300,\n\t\t\thex: \"#67e8f9\",\n\t\t\trgb: \"rgb(103,232,249)\",\n\t\t\thsl: \"hsl(187,92.4%,69%)\",\n\t\t\toklch: \"oklch(0.87,0.12,207)\",\n\t\t},\n\t\t{\n\t\t\tscale: 400,\n\t\t\thex: \"#22d3ee\",\n\t\t\trgb: \"rgb(34,211,238)\",\n\t\t\thsl: \"hsl(187.9,85.7%,53.3%)\",\n\t\t\toklch: \"oklch(0.80,0.13,212)\",\n\t\t},\n\t\t{\n\t\t\tscale: 500,\n\t\t\thex: \"#06b6d4\",\n\t\t\trgb: \"rgb(6,182,212)\",\n\t\t\thsl: \"hsl(188.7,94.5%,42.7%)\",\n\t\t\toklch: \"oklch(0.71,0.13,215)\",\n\t\t},\n\t\t{\n\t\t\tscale: 600,\n\t\t\thex: \"#0891b2\",\n\t\t\trgb: \"rgb(8,145,178)\",\n\t\t\thsl: \"hsl(191.6,91.4%,36.5%)\",\n\t\t\toklch: \"oklch(0.61,0.11,222)\",\n\t\t},\n\t\t{\n\t\t\tscale: 700,\n\t\t\thex: \"#0e7490\",\n\t\t\trgb: \"rgb(14,116,144)\",\n\t\t\thsl: \"hsl(192.9,82.3%,31%)\",\n\t\t\toklch: \"oklch(0.52,0.09,223)\",\n\t\t},\n\t\t{\n\t\t\tscale: 800,\n\t\t\thex: \"#155e75\",\n\t\t\trgb: \"rgb(21,94,117)\",\n\t\t\thsl: \"hsl(194.4,69.6%,27.1%)\",\n\t\t\toklch: \"oklch(0.45,0.08,224)\",\n\t\t},\n\t\t{\n\t\t\tscale: 900,\n\t\t\thex: \"#164e63\",\n\t\t\trgb: \"rgb(22,78,99)\",\n\t\t\thsl: \"hsl(196.4,63.6%,23.7%)\",\n\t\t\toklch: \"oklch(0.40,0.07,227)\",\n\t\t},\n\t\t{\n\t\t\tscale: 950,\n\t\t\thex: \"#083344\",\n\t\t\trgb: \"rgb(8,51,68)\",\n\t\t\thsl: \"hsl(197,78.9%,14.9%)\",\n\t\t\toklch: \"oklch(0.30,0.05,230)\",\n\t\t},\n\t],\n\tsky: [\n\t\t{\n\t\t\tscale: 50,\n\t\t\thex: \"#f0f9ff\",\n\t\t\trgb: \"rgb(240,249,255)\",\n\t\t\thsl: \"hsl(204,100%,97.1%)\",\n\t\t\toklch: \"oklch(0.98,0.01,237)\",\n\t\t},\n\t\t{\n\t\t\tscale: 100,\n\t\t\thex: \"#e0f2fe\",\n\t\t\trgb: \"rgb(224,242,254)\",\n\t\t\thsl: \"hsl(204,93.8%,93.7%)\",\n\t\t\toklch: \"oklch(0.95,0.03,237)\",\n\t\t},\n\t\t{\n\t\t\tscale: 200,\n\t\t\thex: \"#bae6fd\",\n\t\t\trgb: \"rgb(186,230,253)\",\n\t\t\thsl: \"hsl(200.6,94.4%,86.1%)\",\n\t\t\toklch: \"oklch(0.90,0.06,231)\",\n\t\t},\n\t\t{\n\t\t\tscale: 300,\n\t\t\thex: \"#7dd3fc\",\n\t\t\trgb: \"rgb(125,211,252)\",\n\t\t\thsl: \"hsl(199.4,95.5%,73.9%)\",\n\t\t\toklch: \"oklch(0.83,0.10,230)\",\n\t\t},\n\t\t{\n\t\t\tscale: 400,\n\t\t\thex: \"#38bdf8\",\n\t\t\trgb: \"rgb(56,189,248)\",\n\t\t\thsl: \"hsl(198.4,93.2%,59.6%)\",\n\t\t\toklch: \"oklch(0.75,0.14,233)\",\n\t\t},\n\t\t{\n\t\t\tscale: 500,\n\t\t\thex: \"#0ea5e9\",\n\t\t\trgb: \"rgb(14,165,233)\",\n\t\t\thsl: \"hsl(198.6,88.7%,48.4%)\",\n\t\t\toklch: \"oklch(0.68,0.15,237)\",\n\t\t},\n\t\t{\n\t\t\tscale: 600,\n\t\t\thex: \"#0284c7\",\n\t\t\trgb: \"rgb(2,132,199)\",\n\t\t\thsl: \"hsl(200.4,98%,39.4%)\",\n\t\t\toklch: \"oklch(0.59,0.14,242)\",\n\t\t},\n\t\t{\n\t\t\tscale: 700,\n\t\t\thex: \"#0369a1\",\n\t\t\trgb: \"rgb(3,105,161)\",\n\t\t\thsl: \"hsl(201.3,96.3%,32.2%)\",\n\t\t\toklch: \"oklch(0.50,0.12,243)\",\n\t\t},\n\t\t{\n\t\t\tscale: 800,\n\t\t\thex: \"#075985\",\n\t\t\trgb: \"rgb(7,89,133)\",\n\t\t\thsl: \"hsl(201,90%,27.5%)\",\n\t\t\toklch: \"oklch(0.44,0.10,241)\",\n\t\t},\n\t\t{\n\t\t\tscale: 900,\n\t\t\thex: \"#0c4a6e\",\n\t\t\trgb: \"rgb(12,74,110)\",\n\t\t\thsl: \"hsl(202,80.3%,23.9%)\",\n\t\t\toklch: \"oklch(0.39,0.08,241)\",\n\t\t},\n\t\t{\n\t\t\tscale: 950,\n\t\t\thex: \"#082f49\",\n\t\t\trgb: \"rgb(8,47,73)\",\n\t\t\thsl: \"hsl(204,80.2%,15.9%)\",\n\t\t\toklch: \"oklch(0.29,0.06,243)\",\n\t\t},\n\t],\n\tblue: [\n\t\t{\n\t\t\tscale: 50,\n\t\t\thex: \"#eff6ff\",\n\t\t\trgb: \"rgb(239,246,255)\",\n\t\t\thsl: \"hsl(213.8,100%,96.9%)\",\n\t\t\toklch: \"oklch(0.97,0.01,255)\",\n\t\t},\n\t\t{\n\t\t\tscale: 100,\n\t\t\thex: \"#dbeafe\",\n\t\t\trgb: \"rgb(219,234,254)\",\n\t\t\thsl: \"hsl(214.3,94.6%,92.7%)\",\n\t\t\toklch: \"oklch(0.93,0.03,256)\",\n\t\t},\n\t\t{\n\t\t\tscale: 200,\n\t\t\thex: \"#bfdbfe\",\n\t\t\trgb: \"rgb(191,219,254)\",\n\t\t\thsl: \"hsl(213.3,96.9%,87.3%)\",\n\t\t\toklch: \"oklch(0.88,0.06,254)\",\n\t\t},\n\t\t{\n\t\t\tscale: 300,\n\t\t\thex: \"#93c5fd\",\n\t\t\trgb: \"rgb(147,197,253)\",\n\t\t\thsl: \"hsl(211.7,96.4%,78.4%)\",\n\t\t\toklch: \"oklch(0.81,0.10,252)\",\n\t\t},\n\t\t{\n\t\t\tscale: 400,\n\t\t\thex: \"#60a5fa\",\n\t\t\trgb: \"rgb(96,165,250)\",\n\t\t\thsl: \"hsl(213.1,93.9%,67.8%)\",\n\t\t\toklch: \"oklch(0.71,0.14,255)\",\n\t\t},\n\t\t{\n\t\t\tscale: 500,\n\t\t\thex: \"#3b82f6\",\n\t\t\trgb: \"rgb(59,130,246)\",\n\t\t\thsl: \"hsl(217.2,91.2%,59.8%)\",\n\t\t\toklch: \"oklch(0.62,0.19,260)\",\n\t\t},\n\t\t{\n\t\t\tscale: 600,\n\t\t\thex: \"#2563eb\",\n\t\t\trgb: \"rgb(37,99,235)\",\n\t\t\thsl: \"hsl(221.2,83.2%,53.3%)\",\n\t\t\toklch: \"oklch(0.55,0.22,263)\",\n\t\t},\n\t\t{\n\t\t\tscale: 700,\n\t\t\thex: \"#1d4ed8\",\n\t\t\trgb: \"rgb(29,78,216)\",\n\t\t\thsl: \"hsl(224.3,76.3%,48%)\",\n\t\t\toklch: \"oklch(0.49,0.22,264)\",\n\t\t},\n\t\t{\n\t\t\tscale: 800,\n\t\t\thex: \"#1e40af\",\n\t\t\trgb: \"rgb(30,64,175)\",\n\t\t\thsl: \"hsl(225.9,70.7%,40.2%)\",\n\t\t\toklch: \"oklch(0.42,0.18,266)\",\n\t\t},\n\t\t{\n\t\t\tscale: 900,\n\t\t\thex: \"#1e3a8a\",\n\t\t\trgb: \"rgb(30,58,138)\",\n\t\t\thsl: \"hsl(224.4,64.3%,32.9%)\",\n\t\t\toklch: \"oklch(0.38,0.14,266)\",\n\t\t},\n\t\t{\n\t\t\tscale: 950,\n\t\t\thex: \"#172554\",\n\t\t\trgb: \"rgb(23,37,84)\",\n\t\t\thsl: \"hsl(226.2,57%,21%)\",\n\t\t\toklch: \"oklch(0.28,0.09,268)\",\n\t\t},\n\t],\n\tindigo: [\n\t\t{\n\t\t\tscale: 50,\n\t\t\thex: \"#eef2ff\",\n\t\t\trgb: \"rgb(238,242,255)\",\n\t\t\thsl: \"hsl(225.9,100%,96.7%)\",\n\t\t\toklch: \"oklch(0.96,0.02,272)\",\n\t\t},\n\t\t{\n\t\t\tscale: 100,\n\t\t\thex: \"#e0e7ff\",\n\t\t\trgb: \"rgb(224,231,255)\",\n\t\t\thsl: \"hsl(226.5,100%,93.9%)\",\n\t\t\toklch: \"oklch(0.93,0.03,273)\",\n\t\t},\n\t\t{\n\t\t\tscale: 200,\n\t\t\thex: \"#c7d2fe\",\n\t\t\trgb: \"rgb(199,210,254)\",\n\t\t\thsl: \"hsl(228,96.5%,88.8%)\",\n\t\t\toklch: \"oklch(0.87,0.06,274)\",\n\t\t},\n\t\t{\n\t\t\tscale: 300,\n\t\t\thex: \"#a5b4fc\",\n\t\t\trgb: \"rgb(165,180,252)\",\n\t\t\thsl: \"hsl(229.7,93.5%,81.8%)\",\n\t\t\toklch: \"oklch(0.79,0.10,275)\",\n\t\t},\n\t\t{\n\t\t\tscale: 400,\n\t\t\thex: \"#818cf8\",\n\t\t\trgb: \"rgb(129,140,248)\",\n\t\t\thsl: \"hsl(234.5,89.5%,73.9%)\",\n\t\t\toklch: \"oklch(0.68,0.16,277)\",\n\t\t},\n\t\t{\n\t\t\tscale: 500,\n\t\t\thex: \"#6366f1\",\n\t\t\trgb: \"rgb(99,102,241)\",\n\t\t\thsl: \"hsl(238.7,83.5%,66.7%)\",\n\t\t\toklch: \"oklch(0.59,0.20,277)\",\n\t\t},\n\t\t{\n\t\t\tscale: 600,\n\t\t\thex: \"#4f46e5\",\n\t\t\trgb: \"rgb(79,70,229)\",\n\t\t\thsl: \"hsl(243.4,75.4%,58.6%)\",\n\t\t\toklch: \"oklch(0.51,0.23,277)\",\n\t\t},\n\t\t{\n\t\t\tscale: 700,\n\t\t\thex: \"#4338ca\",\n\t\t\trgb: \"rgb(67,56,202)\",\n\t\t\thsl: \"hsl(244.5,57.9%,50.6%)\",\n\t\t\toklch: \"oklch(0.46,0.21,277)\",\n\t\t},\n\t\t{\n\t\t\tscale: 800,\n\t\t\thex: \"#3730a3\",\n\t\t\trgb: \"rgb(55,48,163)\",\n\t\t\thsl: \"hsl(243.7,54.5%,41.4%)\",\n\t\t\toklch: \"oklch(0.40,0.18,277)\",\n\t\t},\n\t\t{\n\t\t\tscale: 900,\n\t\t\thex: \"#312e81\",\n\t\t\trgb: \"rgb(49,46,129)\",\n\t\t\thsl: \"hsl(242.2,47.4%,34.3%)\",\n\t\t\toklch: \"oklch(0.36,0.14,279)\",\n\t\t},\n\t\t{\n\t\t\tscale: 950,\n\t\t\thex: \"#1e1b4b\",\n\t\t\trgb: \"rgb(30,27,75)\",\n\t\t\thsl: \"hsl(243.8,47.1%,20%)\",\n\t\t\toklch: \"oklch(0.26,0.09,281)\",\n\t\t},\n\t],\n\tviolet: [\n\t\t{\n\t\t\tscale: 50,\n\t\t\thex: \"#f5f3ff\",\n\t\t\trgb: \"rgb(245,243,255)\",\n\t\t\thsl: \"hsl(250,100%,97.6%)\",\n\t\t\toklch: \"oklch(0.97,0.02,294)\",\n\t\t},\n\t\t{\n\t\t\tscale: 100,\n\t\t\thex: \"#ede9fe\",\n\t\t\trgb: \"rgb(237,233,254)\",\n\t\t\thsl: \"hsl(251.4,91.3%,95.5%)\",\n\t\t\toklch: \"oklch(0.94,0.03,295)\",\n\t\t},\n\t\t{\n\t\t\tscale: 200,\n\t\t\thex: \"#ddd6fe\",\n\t\t\trgb: \"rgb(221,214,254)\",\n\t\t\thsl: \"hsl(250.5,95.2%,91.8%)\",\n\t\t\toklch: \"oklch(0.89,0.05,293)\",\n\t\t},\n\t\t{\n\t\t\tscale: 300,\n\t\t\thex: \"#c4b5fd\",\n\t\t\trgb: \"rgb(196,181,253)\",\n\t\t\thsl: \"hsl(252.5,94.7%,85.1%)\",\n\t\t\toklch: \"oklch(0.81,0.10,294)\",\n\t\t},\n\t\t{\n\t\t\tscale: 400,\n\t\t\thex: \"#a78bfa\",\n\t\t\trgb: \"rgb(167,139,250)\",\n\t\t\thsl: \"hsl(255.1,91.7%,76.3%)\",\n\t\t\toklch: \"oklch(0.71,0.16,294)\",\n\t\t},\n\t\t{\n\t\t\tscale: 500,\n\t\t\thex: \"#8b5cf6\",\n\t\t\trgb: \"rgb(139,92,246)\",\n\t\t\thsl: \"hsl(258.3,89.5%,66.3%)\",\n\t\t\toklch: \"oklch(0.61,0.22,293)\",\n\t\t},\n\t\t{\n\t\t\tscale: 600,\n\t\t\thex: \"#7c3aed\",\n\t\t\trgb: \"rgb(124,58,237)\",\n\t\t\thsl: \"hsl(262.1,83.3%,57.8%)\",\n\t\t\toklch: \"oklch(0.54,0.25,293)\",\n\t\t},\n\t\t{\n\t\t\tscale: 700,\n\t\t\thex: \"#6d28d9\",\n\t\t\trgb: \"rgb(109,40,217)\",\n\t\t\thsl: \"hsl(263.4,70%,50.4%)\",\n\t\t\toklch: \"oklch(0.49,0.24,293)\",\n\t\t},\n\t\t{\n\t\t\tscale: 800,\n\t\t\thex: \"#5b21b6\",\n\t\t\trgb: \"rgb(91,33,182)\",\n\t\t\thsl: \"hsl(263.4,69.3%,42.2%)\",\n\t\t\toklch: \"oklch(0.43,0.21,293)\",\n\t\t},\n\t\t{\n\t\t\tscale: 900,\n\t\t\thex: \"#4c1d95\",\n\t\t\trgb: \"rgb(76,29,149)\",\n\t\t\thsl: \"hsl(263.5,67.4%,34.9%)\",\n\t\t\toklch: \"oklch(0.38,0.18,294)\",\n\t\t},\n\t\t{\n\t\t\tscale: 950,\n\t\t\thex: \"#1e1b4b\",\n\t\t\trgb: \"rgb(46,16,101)\",\n\t\t\thsl: \"hsl(261.2,72.6%,22.9%)\",\n\t\t\toklch: \"oklch(0.28,0.14,291)\",\n\t\t},\n\t],\n\tpurple: [\n\t\t{\n\t\t\tscale: 50,\n\t\t\thex: \"#faf5ff\",\n\t\t\trgb: \"rgb(250,245,255)\",\n\t\t\thsl: \"hsl(270,100%,98%)\",\n\t\t\toklch: \"oklch(0.98,0.01,308)\",\n\t\t},\n\t\t{\n\t\t\tscale: 100,\n\t\t\thex: \"#f3e8ff\",\n\t\t\trgb: \"rgb(243,232,255)\",\n\t\t\thsl: \"hsl(268.7,100%,95.5%)\",\n\t\t\toklch: \"oklch(0.95,0.03,307)\",\n\t\t},\n\t\t{\n\t\t\tscale: 200,\n\t\t\thex: \"#e9d5ff\",\n\t\t\trgb: \"rgb(233,213,255)\",\n\t\t\thsl: \"hsl(268.6,100%,91.8%)\",\n\t\t\toklch: \"oklch(0.90,0.06,307)\",\n\t\t},\n\t\t{\n\t\t\tscale: 300,\n\t\t\thex: \"#d8b4fe\",\n\t\t\trgb: \"rgb(216,180,254)\",\n\t\t\thsl: \"hsl(269.2,97.4%,85.1%)\",\n\t\t\toklch: \"oklch(0.83,0.11,306)\",\n\t\t},\n\t\t{\n\t\t\tscale: 400,\n\t\t\thex: \"#c084fc\",\n\t\t\trgb: \"rgb(192,132,252)\",\n\t\t\thsl: \"hsl(270,95.2%,75.3%)\",\n\t\t\toklch: \"oklch(0.72,0.18,306)\",\n\t\t},\n\t\t{\n\t\t\tscale: 500,\n\t\t\thex: \"#a855f7\",\n\t\t\trgb: \"rgb(168,85,247)\",\n\t\t\thsl: \"hsl(270.7,91%,65.1%)\",\n\t\t\toklch: \"oklch(0.63,0.23,304)\",\n\t\t},\n\t\t{\n\t\t\tscale: 600,\n\t\t\thex: \"#9333ea\",\n\t\t\trgb: \"rgb(147,51,234)\",\n\t\t\thsl: \"hsl(271.5,81.3%,55.9%)\",\n\t\t\toklch: \"oklch(0.56,0.25,302)\",\n\t\t},\n\t\t{\n\t\t\tscale: 700,\n\t\t\thex: \"#7e22ce\",\n\t\t\trgb: \"rgb(126,34,206)\",\n\t\t\thsl: \"hsl(272.1,71.7%,47.1%)\",\n\t\t\toklch: \"oklch(0.50,0.24,302)\",\n\t\t},\n\t\t{\n\t\t\tscale: 800,\n\t\t\thex: \"#6b21a8\",\n\t\t\trgb: \"rgb(107,33,168)\",\n\t\t\thsl: \"hsl(272.9,67.2%,39.4%)\",\n\t\t\toklch: \"oklch(0.44,0.20,304)\",\n\t\t},\n\t\t{\n\t\t\tscale: 900,\n\t\t\thex: \"#581c87\",\n\t\t\trgb: \"rgb(88,28,135)\",\n\t\t\thsl: \"hsl(273.6,65.6%,32%)\",\n\t\t\toklch: \"oklch(0.38,0.17,305)\",\n\t\t},\n\t\t{\n\t\t\tscale: 950,\n\t\t\thex: \"#3b0764\",\n\t\t\trgb: \"rgb(59,7,100)\",\n\t\t\thsl: \"hsl(273.5,86.9%,21%)\",\n\t\t\toklch: \"oklch(0.29,0.14,303)\",\n\t\t},\n\t],\n\tfuchsia: [\n\t\t{\n\t\t\tscale: 50,\n\t\t\thex: \"#fdf4ff\",\n\t\t\trgb: \"rgb(253,244,255)\",\n\t\t\thsl: \"hsl(289.1,100%,97.8%)\",\n\t\t\toklch: \"oklch(0.98,0.02,320)\",\n\t\t},\n\t\t{\n\t\t\tscale: 100,\n\t\t\thex: \"#fae8ff\",\n\t\t\trgb: \"rgb(250,232,255)\",\n\t\t\thsl: \"hsl(287,100%,95.5%)\",\n\t\t\toklch: \"oklch(0.95,0.04,319)\",\n\t\t},\n\t\t{\n\t\t\tscale: 200,\n\t\t\thex: \"#f5d0fe\",\n\t\t\trgb: \"rgb(245,208,254)\",\n\t\t\thsl: \"hsl(288.3,95.8%,90.6%)\",\n\t\t\toklch: \"oklch(0.90,0.07,320)\",\n\t\t},\n\t\t{\n\t\t\tscale: 300,\n\t\t\thex: \"#f0abfc\",\n\t\t\trgb: \"rgb(240,171,252)\",\n\t\t\thsl: \"hsl(291.1,93.1%,82.9%)\",\n\t\t\toklch: \"oklch(0.83,0.13,321)\",\n\t\t},\n\t\t{\n\t\t\tscale: 400,\n\t\t\thex: \"#e879f9\",\n\t\t\trgb: \"rgb(232,121,249)\",\n\t\t\thsl: \"hsl(292,91.4%,72.5%)\",\n\t\t\toklch: \"oklch(0.75,0.21,322)\",\n\t\t},\n\t\t{\n\t\t\tscale: 500,\n\t\t\thex: \"#d946ef\",\n\t\t\trgb: \"rgb(217,70,239)\",\n\t\t\thsl: \"hsl(292.2,84.1%,60.6%)\",\n\t\t\toklch: \"oklch(0.67,0.26,322)\",\n\t\t},\n\t\t{\n\t\t\tscale: 600,\n\t\t\thex: \"#c026d3\",\n\t\t\trgb: \"rgb(192,38,211)\",\n\t\t\thsl: \"hsl(293.4,69.5%,48.8%)\",\n\t\t\toklch: \"oklch(0.59,0.26,323)\",\n\t\t},\n\t\t{\n\t\t\tscale: 700,\n\t\t\thex: \"#a21caf\",\n\t\t\trgb: \"rgb(162,28,175)\",\n\t\t\thsl: \"hsl(294.7,72.4%,39.8%)\",\n\t\t\toklch: \"oklch(0.52,0.23,324)\",\n\t\t},\n\t\t{\n\t\t\tscale: 800,\n\t\t\thex: \"#86198f\",\n\t\t\trgb: \"rgb(134,25,143)\",\n\t\t\thsl: \"hsl(295.4,70.2%,32.9%)\",\n\t\t\toklch: \"oklch(0.45,0.19,325)\",\n\t\t},\n\t\t{\n\t\t\tscale: 900,\n\t\t\thex: \"#701a75\",\n\t\t\trgb: \"rgb(112,26,117)\",\n\t\t\thsl: \"hsl(296.7,63.6%,28%)\",\n\t\t\toklch: \"oklch(0.40,0.16,326)\",\n\t\t},\n\t\t{\n\t\t\tscale: 950,\n\t\t\thex: \"#4a044e\",\n\t\t\trgb: \"rgb(74,4,78)\",\n\t\t\thsl: \"hsl(296.8,90.2%,16.1%)\",\n\t\t\toklch: \"oklch(0.29,0.13,326)\",\n\t\t},\n\t],\n\tpink: [\n\t\t{\n\t\t\tscale: 50,\n\t\t\thex: \"#fdf2f8\",\n\t\t\trgb: \"rgb(253,242,248)\",\n\t\t\thsl: \"hsl(327.3,73.3%,97.1%)\",\n\t\t\toklch: \"oklch(0.97,0.01,343)\",\n\t\t},\n\t\t{\n\t\t\tscale: 100,\n\t\t\thex: \"#fce7f3\",\n\t\t\trgb: \"rgb(252,231,243)\",\n\t\t\thsl: \"hsl(325.7,77.8%,94.7%)\",\n\t\t\toklch: \"oklch(0.95,0.03,342)\",\n\t\t},\n\t\t{\n\t\t\tscale: 200,\n\t\t\thex: \"#fbcfe8\",\n\t\t\trgb: \"rgb(251,207,232)\",\n\t\t\thsl: \"hsl(325.9,84.6%,89.8%)\",\n\t\t\toklch: \"oklch(0.90,0.06,343)\",\n\t\t},\n\t\t{\n\t\t\tscale: 300,\n\t\t\thex: \"#f9a8d4\",\n\t\t\trgb: \"rgb(249,168,212)\",\n\t\t\thsl: \"hsl(327.4,87.1%,81.8%)\",\n\t\t\toklch: \"oklch(0.82,0.11,346)\",\n\t\t},\n\t\t{\n\t\t\tscale: 400,\n\t\t\thex: \"#f472b6\",\n\t\t\trgb: \"rgb(244,114,182)\",\n\t\t\thsl: \"hsl(328.6,85.5%,70.2%)\",\n\t\t\toklch: \"oklch(0.73,0.18,350)\",\n\t\t},\n\t\t{\n\t\t\tscale: 500,\n\t\t\thex: \"#ec4899\",\n\t\t\trgb: \"rgb(236,72,153)\",\n\t\t\thsl: \"hsl(330.4,81.2%,60.4%)\",\n\t\t\toklch: \"oklch(0.66,0.21,354)\",\n\t\t},\n\t\t{\n\t\t\tscale: 600,\n\t\t\thex: \"#db2777\",\n\t\t\trgb: \"rgb(219,39,119)\",\n\t\t\thsl: \"hsl(333.3,71.4%,50.6%)\",\n\t\t\toklch: \"oklch(0.59,0.22,1)\",\n\t\t},\n\t\t{\n\t\t\tscale: 700,\n\t\t\thex: \"#be185d\",\n\t\t\trgb: \"rgb(190,24,93)\",\n\t\t\thsl: \"hsl(335.1,77.6%,42%)\",\n\t\t\toklch: \"oklch(0.52,0.20,4)\",\n\t\t},\n\t\t{\n\t\t\tscale: 800,\n\t\t\thex: \"#9d174d\",\n\t\t\trgb: \"rgb(157,23,77)\",\n\t\t\thsl: \"hsl(335.8,74.4%,35.3%)\",\n\t\t\toklch: \"oklch(0.46,0.17,4)\",\n\t\t},\n\t\t{\n\t\t\tscale: 900,\n\t\t\thex: \"#831843\",\n\t\t\trgb: \"rgb(131,24,67)\",\n\t\t\thsl: \"hsl(335.9,69%,30.4%)\",\n\t\t\toklch: \"oklch(0.41,0.14,2)\",\n\t\t},\n\t\t{\n\t\t\tscale: 950,\n\t\t\thex: \"#500724\",\n\t\t\trgb: \"rgb(80,7,36)\",\n\t\t\thsl: \"hsl(336.2,83.9%,17.1%)\",\n\t\t\toklch: \"oklch(0.28,0.10,4)\",\n\t\t},\n\t],\n\trose: [\n\t\t{\n\t\t\tscale: 50,\n\t\t\thex: \"#fff1f2\",\n\t\t\trgb: \"rgb(255,241,242)\",\n\t\t\thsl: \"hsl(355.7,100%,97.3%)\",\n\t\t\toklch: \"oklch(0.97,0.02,12)\",\n\t\t},\n\t\t{\n\t\t\tscale: 100,\n\t\t\thex: \"#ffe4e6\",\n\t\t\trgb: \"rgb(255,228,230)\",\n\t\t\thsl: \"hsl(355.6,100%,94.7%)\",\n\t\t\toklch: \"oklch(0.94,0.03,13)\",\n\t\t},\n\t\t{\n\t\t\tscale: 200,\n\t\t\thex: \"#fecdd3\",\n\t\t\trgb: \"rgb(254,205,211)\",\n\t\t\thsl: \"hsl(352.7,96.1%,90%)\",\n\t\t\toklch: \"oklch(0.89,0.06,10)\",\n\t\t},\n\t\t{\n\t\t\tscale: 300,\n\t\t\thex: \"#fda4af\",\n\t\t\trgb: \"rgb(253,164,175)\",\n\t\t\thsl: \"hsl(352.6,95.7%,81.8%)\",\n\t\t\toklch: \"oklch(0.81,0.11,12)\",\n\t\t},\n\t\t{\n\t\t\tscale: 400,\n\t\t\thex: \"#fb7185\",\n\t\t\trgb: \"rgb(251,113,133)\",\n\t\t\thsl: \"hsl(351.3,94.5%,71.4%)\",\n\t\t\toklch: \"oklch(0.72,0.17,13)\",\n\t\t},\n\t\t{\n\t\t\tscale: 500,\n\t\t\thex: \"#f43f5e\",\n\t\t\trgb: \"rgb(244,63,94)\",\n\t\t\thsl: \"hsl(349.7,89.2%,60.2%)\",\n\t\t\toklch: \"oklch(0.65,0.22,16)\",\n\t\t},\n\t\t{\n\t\t\tscale: 600,\n\t\t\thex: \"#e11d48\",\n\t\t\trgb: \"rgb(225,29,72)\",\n\t\t\thsl: \"hsl(346.8,77.2%,49.8%)\",\n\t\t\toklch: \"oklch(0.59,0.22,18)\",\n\t\t},\n\t\t{\n\t\t\tscale: 700,\n\t\t\thex: \"#be123c\",\n\t\t\trgb: \"rgb(190,18,60)\",\n\t\t\thsl: \"hsl(345.3,82.7%,40.8%)\",\n\t\t\toklch: \"oklch(0.51,0.20,17)\",\n\t\t},\n\t\t{\n\t\t\tscale: 800,\n\t\t\thex: \"#9f1239\",\n\t\t\trgb: \"rgb(159,18,57)\",\n\t\t\thsl: \"hsl(343.4,79.7%,34.7%)\",\n\t\t\toklch: \"oklch(0.45,0.17,14)\",\n\t\t},\n\t\t{\n\t\t\tscale: 900,\n\t\t\thex: \"#881337\",\n\t\t\trgb: \"rgb(136,19,55)\",\n\t\t\thsl: \"hsl(341.5,75.5%,30.4%)\",\n\t\t\toklch: \"oklch(0.41,0.15,10)\",\n\t\t},\n\t\t{\n\t\t\tscale: 950,\n\t\t\thex: \"#4c0519\",\n\t\t\trgb: \"rgb(76,5,25)\",\n\t\t\thsl: \"hsl(343.1,87.7%,15.9%)\",\n\t\t\toklch: \"oklch(0.27,0.10,12)\",\n\t\t},\n\t],\n};\n\nexport const colorMapping = {\n\tlight: {\n\t\tbackground: \"white\",\n\t\tforeground: \"{{base}}-950\",\n\t\tcard: \"white\",\n\t\t\"card-foreground\": \"{{base}}-950\",\n\t\tpopover: \"white\",\n\t\t\"popover-foreground\": \"{{base}}-950\",\n\t\tprimary: \"{{base}}-900\",\n\t\t\"primary-foreground\": \"{{base}}-50\",\n\t\tsecondary: \"{{base}}-100\",\n\t\t\"secondary-foreground\": \"{{base}}-900\",\n\t\tmuted: \"{{base}}-100\",\n\t\t\"muted-foreground\": \"{{base}}-500\",\n\t\taccent: \"{{base}}-100\",\n\t\t\"accent-foreground\": \"{{base}}-900\",\n\t\tdestructive: \"red-500\",\n\t\t\"destructive-foreground\": \"{{base}}-50\",\n\t\tborder: \"{{base}}-200\",\n\t\tinput: \"{{base}}-200\",\n\t\tring: \"{{base}}-950\",\n\t\t\"chart-1\": \"12 76% 61%\",\n\t\t\"chart-2\": \"173 58% 39%\",\n\t\t\"chart-3\": \"197 37% 24%\",\n\t\t\"chart-4\": \"43 74% 66%\",\n\t\t\"chart-5\": \"27 87% 67%\",\n\t},\n\tdark: {\n\t\tbackground: \"{{base}}-950\",\n\t\tforeground: \"{{base}}-50\",\n\t\tcard: \"{{base}}-950\",\n\t\t\"card-foreground\": \"{{base}}-50\",\n\t\tpopover: \"{{base}}-950\",\n\t\t\"popover-foreground\": \"{{base}}-50\",\n\t\tprimary: \"{{base}}-50\",\n\t\t\"primary-foreground\": \"{{base}}-900\",\n\t\tsecondary: \"{{base}}-800\",\n\t\t\"secondary-foreground\": \"{{base}}-50\",\n\t\tmuted: \"{{base}}-800\",\n\t\t\"muted-foreground\": \"{{base}}-400\",\n\t\taccent: \"{{base}}-800\",\n\t\t\"accent-foreground\": \"{{base}}-50\",\n\t\tdestructive: \"red-900\",\n\t\t\"destructive-foreground\": \"{{base}}-50\",\n\t\tborder: \"{{base}}-800\",\n\t\tinput: \"{{base}}-800\",\n\t\tring: \"{{base}}-300\",\n\t\t\"chart-1\": \"220 70% 50%\",\n\t\t\"chart-2\": \"160 60% 45%\",\n\t\t\"chart-3\": \"30 80% 55%\",\n\t\t\"chart-4\": \"280 65% 60%\",\n\t\t\"chart-5\": \"340 75% 55%\",\n\t},\n} as const;\n"
  },
  {
    "path": "docs/src/lib/registry/registry-utils.ts",
    "content": "import type { RegistryItemFile } from \"shadcn-svelte/schema\";\nimport { transformMenu } from \"shadcn-svelte/transformers/menu\";\nimport { transformIcons } from \"shadcn-svelte/transformers/icons\";\nimport { type IconLibraryName } from \"./config.js\";\nimport type { MenuColorValue, StyleName } from \"./config.js\";\n\nexport type FileTree = {\n\tname: string;\n\tpath?: string;\n\tchildren?: FileTree[];\n};\n\nexport function transformBlockPath(target: string, type: RegistryItemFile[\"type\"]): string {\n\tconst parts = target.split(\"/\");\n\n\tif (type === \"registry:page\" || type === \"registry:file\") {\n\t\treturn `routes/${target}`;\n\t}\n\n\tif (type === \"registry:component\" || type === \"registry:hook\") {\n\t\tconst dir = type === \"registry:component\" ? \"components\" : \"hooks\";\n\t\tconst idx = parts.indexOf(dir);\n\n\t\tconst remainingPath = parts.slice(idx + 1).join(\"/\");\n\t\treturn `${dir}/${remainingPath}`;\n\t}\n\n\treturn target;\n}\n\nexport function createFileTreeForRegistryItemFiles(\n\tfiles: Array<{ target: string; type: RegistryItemFile[\"type\"] }> | undefined\n): FileTree[] {\n\tif (!files || !Array.isArray(files)) {\n\t\treturn [];\n\t}\n\n\tconst root: FileTree[] = [];\n\n\tfor (const file of files) {\n\t\tconst path = file.target;\n\t\tconst parts = path.split(\"/\");\n\t\tlet currentLevel = root;\n\n\t\tfor (let i = 0; i < parts.length; i++) {\n\t\t\tconst part = parts[i];\n\t\t\tconst isFile = i === parts.length - 1;\n\t\t\tconst existingNode = currentLevel.find((node) => node.name === part);\n\n\t\t\tif (existingNode) {\n\t\t\t\tif (isFile) {\n\t\t\t\t\texistingNode.path = path;\n\t\t\t\t} else {\n\t\t\t\t\tcurrentLevel = existingNode.children!;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tconst newNode: FileTree = isFile\n\t\t\t\t\t? { name: part, path }\n\t\t\t\t\t: { name: part, children: [] };\n\n\t\t\t\tcurrentLevel.push(newNode);\n\n\t\t\t\tif (!isFile) {\n\t\t\t\t\tcurrentLevel = newNode.children!;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn root;\n}\n\nexport function transformImportPaths(content: string): string {\n\tconst aliases = {\n\t\tui: \"$lib/components/ui\",\n\t\tutils: \"$lib/utils\",\n\t\tcomponents: \"$lib/components\",\n\t\thooks: \"$lib/hooks\",\n\t\tlib: \"$lib\",\n\t};\n\tfor (const [alias, path] of Object.entries(aliases)) {\n\t\tcontent = content.replaceAll(`$${alias.toUpperCase()}$`, path);\n\t}\n\treturn content;\n}\n\nexport type DesignSystemConfig = {\n\tstyle: StyleName;\n\ticonLibrary: IconLibraryName;\n\tmenuColor?: MenuColorValue;\n};\n\nconst styleCache = new Map<StyleName, Record<string, string>>();\n\nexport async function transformDesignSystem(\n\tcontent: string,\n\tfilePath: string,\n\tdesignSystem: DesignSystemConfig\n): Promise<string> {\n\tlet styles: Record<string, string> | undefined = styleCache.get(designSystem.style);\n\tif (!styles) {\n\t\tconst styleCss = await import(`./styles/style-${designSystem.style}.css?raw`);\n\t\tstyles = parseStyleCss(styleCss.default);\n\t\tstyleCache.set(designSystem.style, styles);\n\t}\n\n\tconst config: TransformConfig = {\n\t\tstyle: designSystem.style,\n\t\ticonLibrary: designSystem.iconLibrary,\n\t\tmenuColor: designSystem.menuColor ?? \"default\",\n\t};\n\n\tconst { content: transformedContent } = await transform({ content, filePath, config }, [\n\t\t// @ts-expect-error - it's fine\n\t\ttransformIcons,\n\t\t// @ts-expect-error - it's fine\n\t\ttransformMenu,\n\t\tcreateTransformInjectStyles(styles),\n\t]);\n\n\treturn transformedContent;\n}\n\n// below here we duplicate some of the functionality from the CLI\n\ntype TransformConfig = {\n\tstyle: StyleName;\n\ticonLibrary: IconLibraryName;\n\tmenuColor: MenuColorValue;\n};\n\ntype TransformOptions = {\n\tcontent: string;\n\tfilePath: string;\n\tconfig: TransformConfig;\n};\n\ntype TransformerResult = {\n\tcontent: string;\n\tfilePath: string;\n};\n\ntype Transformer = (opts: TransformOptions) => Promise<Partial<TransformerResult>>;\n\nasync function transform(\n\topts: TransformOptions,\n\ttransformers: (Transformer | false | undefined)[]\n): Promise<TransformerResult> {\n\tconst result = {\n\t\tcontent: opts.content,\n\t\tfilePath: opts.filePath,\n\t};\n\tfor (const transformer of transformers.filter(\n\t\t(transformer) => transformer !== undefined && transformer !== false\n\t)) {\n\t\tconst { content, filePath } = await transformer({\n\t\t\tconfig: opts.config,\n\t\t\tcontent: result.content,\n\t\t\tfilePath: result.filePath,\n\t\t});\n\t\tresult.content = content ?? result.content;\n\t\tresult.filePath = filePath ?? result.filePath;\n\t}\n\treturn result;\n}\n\nfunction createTransformInjectStyles(styles: Record<string, string>): Transformer {\n\treturn async ({ content }) => {\n\t\tfor (const [className, classes] of Object.entries(styles)) {\n\t\t\tcontent = content.replace(className, classes);\n\t\t}\n\t\treturn { content };\n\t};\n}\n\n/**\n * Duplicate of the parseStyleCss function from the CLI. Albeit a bit more brittle but since this is just for highlighting and not for the actual transformation I think it will work just fine.\n *\n * @param css\n * @returns\n */\nfunction parseStyleCss(css: string): Record<string, string> {\n\tconst styles: Record<string, string> = {};\n\n\t// Match .cn-* class rules and extract their @apply values\n\t// This regex finds: .cn-class-name { ... @apply classes; ... }\n\tconst ruleRegex = /\\.(cn-[\\w-]+)\\s*\\{([^}]*)\\}/g;\n\tconst applyRegex = /@apply\\s+([^;]+);/g;\n\n\tlet ruleMatch;\n\twhile ((ruleMatch = ruleRegex.exec(css)) !== null) {\n\t\tconst className = ruleMatch[1];\n\t\tconst ruleContent = ruleMatch[2];\n\n\t\t// Find all @apply directives within this rule\n\t\tlet applyMatch;\n\t\tconst applyValues: string[] = [];\n\t\twhile ((applyMatch = applyRegex.exec(ruleContent)) !== null) {\n\t\t\tapplyValues.push(applyMatch[1].trim());\n\t\t}\n\t\t// Reset the regex lastIndex for the next rule\n\t\tapplyRegex.lastIndex = 0;\n\n\t\tif (applyValues.length > 0) {\n\t\t\tstyles[className] = applyValues.join(\" \");\n\t\t}\n\t}\n\n\treturn styles;\n}\n"
  },
  {
    "path": "docs/src/lib/registry/schema.ts",
    "content": "// This also defines the order they appear on the blocks page.\nexport const blockNames = [\n\t\"sidebar-01\",\n\t\"sidebar-02\",\n\t\"sidebar-03\",\n\t\"sidebar-04\",\n\t\"sidebar-05\",\n\t\"sidebar-06\",\n\t\"sidebar-07\",\n\t\"sidebar-08\",\n\t\"sidebar-09\",\n\t\"sidebar-10\",\n\t\"sidebar-11\",\n\t\"sidebar-12\",\n\t\"sidebar-13\",\n\t\"sidebar-14\",\n\t\"sidebar-15\",\n\t\"login-01\",\n\t\"demo-sidebar\",\n\t\"demo-sidebar-header\",\n\t\"demo-sidebar-footer\",\n\t\"demo-sidebar-group\",\n\t\"demo-sidebar-group-collapsible\",\n\t\"demo-sidebar-group-action\",\n\t\"demo-sidebar-menu\",\n\t\"demo-sidebar-menu-action\",\n\t\"demo-sidebar-menu-sub\",\n\t\"demo-sidebar-menu-collapsible\",\n\t\"demo-sidebar-menu-badge\",\n\t\"demo-sidebar-controlled\",\n] as const;\n\nexport type BlockName = (typeof blockNames)[number];\nexport function isBlockName(str: string): str is BlockName {\n\treturn blockNames.includes(str as never);\n}\n"
  },
  {
    "path": "docs/src/lib/registry/styles/README.md",
    "content": "# Styles\n\nFrom https://github.com/shadcn-ui/ui/tree/main/apps/v4/registry/styles\n\nWe should be using the exact same styles as the original to make it easier to keep everything in sync. DO NOT EDIT THESE FILES. PRs editing these files should reference a PR to shadcn/ui.\n\nTo pull the latest styles from the upstream repository, run `pnpm pull:styles`.\n"
  },
  {
    "path": "docs/src/lib/registry/styles/icons/lyra.svelte",
    "content": "<script lang=\"ts\">\n\timport type { SVGAttributes } from \"svelte/elements\";\n\n\tlet { ...restProps }: SVGAttributes<SVGSVGElement> = $props();\n</script>\n\n<svg\n\txmlns=\"http://www.w3.org/2000/svg\"\n\twidth=\"128\"\n\theight=\"128\"\n\tviewBox=\"0 0 24 24\"\n\tfill=\"none\"\n\trole=\"img\"\n\tcolor=\"currentColor\"\n\t{...restProps}\n>\n\t<path\n\t\td=\"M7.84308 3.80211C9.8718 2.6007 10.8862 2 12 2C13.1138 2 14.1282 2.6007 16.1569 3.80211L16.8431 4.20846C18.8718 5.40987 19.8862 6.01057 20.4431 7C21 7.98943 21 9.19084 21 11.5937V12.4063C21 14.8092 21 16.0106 20.4431 17C19.8862 17.9894 18.8718 18.5901 16.8431 19.7915L16.1569 20.1979C14.1282 21.3993 13.1138 22 12 22C10.8862 22 9.8718 21.3993 7.84308 20.1979L7.15692 19.7915C5.1282 18.5901 4.11384 17.9894 3.55692 17C3 16.0106 3 14.8092 3 12.4063V11.5937C3 9.19084 3 7.98943 3.55692 7C4.11384 6.01057 5.1282 5.40987 7.15692 4.20846L7.84308 3.80211Z\"\n\t\tstroke=\"currentColor\"\n\t\tstroke-width=\"2\"\n\t></path>\n</svg>\n"
  },
  {
    "path": "docs/src/lib/registry/styles/icons/maia.svelte",
    "content": "<script lang=\"ts\">\n\timport type { SVGAttributes } from \"svelte/elements\";\n\n\tlet { ...restProps }: SVGAttributes<SVGSVGElement> = $props();\n</script>\n\n<svg\n\txmlns=\"http://www.w3.org/2000/svg\"\n\twidth=\"128\"\n\theight=\"128\"\n\tviewBox=\"0 0 24 24\"\n\tfill=\"none\"\n\trole=\"img\"\n\tcolor=\"currentColor\"\n\t{...restProps}\n>\n\t<circle cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linejoin=\"round\"\n\t></circle>\n</svg>\n"
  },
  {
    "path": "docs/src/lib/registry/styles/icons/mira.svelte",
    "content": "<script lang=\"ts\">\n\timport type { SVGAttributes } from \"svelte/elements\";\n\n\tlet { ...restProps }: SVGAttributes<SVGSVGElement> = $props();\n</script>\n\n<svg\n\txmlns=\"http://www.w3.org/2000/svg\"\n\twidth=\"128\"\n\theight=\"128\"\n\tviewBox=\"0 0 24 24\"\n\tfill=\"none\"\n\trole=\"img\"\n\tcolor=\"currentColor\"\n\t{...restProps}\n>\n\t<path\n\t\td=\"M5.92089 5.92089C8.15836 3.68342 9.2771 2.56468 10.5857 2.19562C11.5105 1.93479 12.4895 1.93479 13.4143 2.19562C14.7229 2.56468 15.8416 3.68342 18.0791 5.92089C20.3166 8.15836 21.4353 9.2771 21.8044 10.5857C22.0652 11.5105 22.0652 12.4895 21.8044 13.4143C21.4353 14.7229 20.3166 15.8416 18.0791 18.0791C15.8416 20.3166 14.7229 21.4353 13.4143 21.8044C12.4895 22.0652 11.5105 22.0652 10.5857 21.8044C9.2771 21.4353 8.15836 20.3166 5.92089 18.0791C3.68342 15.8416 2.56468 14.7229 2.19562 13.4143C1.93479 12.4895 1.93479 11.5105 2.19562 10.5857C2.56468 9.2771 3.68342 8.15836 5.92089 5.92089Z\"\n\t\tstroke=\"currentColor\"\n\t\tstroke-width=\"2\"\n\t\tstroke-linejoin=\"round\"\n\t></path>\n</svg>\n"
  },
  {
    "path": "docs/src/lib/registry/styles/icons/nova.svelte",
    "content": "<script lang=\"ts\">\n\timport type { SVGAttributes } from \"svelte/elements\";\n\n\tlet { ...restProps }: SVGAttributes<SVGSVGElement> = $props();\n</script>\n\n<svg\n\txmlns=\"http://www.w3.org/2000/svg\"\n\twidth=\"128\"\n\theight=\"128\"\n\tviewBox=\"0 0 24 24\"\n\tfill=\"none\"\n\trole=\"img\"\n\tcolor=\"currentColor\"\n\t{...restProps}\n>\n\t<path\n\t\td=\"M2 12C2 9.19974 2 7.79961 2.54497 6.73005C3.02433 5.78924 3.78924 5.02433 4.73005 4.54497C5.79961 4 7.19974 4 10 4H14C16.8003 4 18.2004 4 19.27 4.54497C20.2108 5.02433 20.9757 5.78924 21.455 6.73005C22 7.79961 22 9.19974 22 12C22 14.8003 22 16.2004 21.455 17.27C20.9757 18.2108 20.2108 18.9757 19.27 19.455C18.2004 20 16.8003 20 14 20H10C7.19974 20 5.79961 20 4.73005 19.455C3.78924 18.9757 3.02433 18.2108 2.54497 17.27C2 16.2004 2 14.8003 2 12Z\"\n\t\tstroke=\"currentColor\"\n\t\tstroke-width=\"2\"\n\t\tstroke-linejoin=\"round\"\n\t></path>\n</svg>\n"
  },
  {
    "path": "docs/src/lib/registry/styles/icons/vega.svelte",
    "content": "<script lang=\"ts\">\n\timport type { SVGAttributes } from \"svelte/elements\";\n\n\tlet { ...restProps }: SVGAttributes<SVGSVGElement> = $props();\n</script>\n\n<svg\n\txmlns=\"http://www.w3.org/2000/svg\"\n\twidth=\"128\"\n\theight=\"128\"\n\tviewBox=\"0 0 24 24\"\n\tfill=\"none\"\n\trole=\"img\"\n\tcolor=\"currentColor\"\n\t{...restProps}\n>\n\t<path\n\t\td=\"M2.5 12C2.5 7.52166 2.5 5.28249 3.89124 3.89124C5.28249 2.5 7.52166 2.5 12 2.5C16.4783 2.5 18.7175 2.5 20.1088 3.89124C21.5 5.28249 21.5 7.52166 21.5 12C21.5 16.4783 21.5 18.7175 20.1088 20.1088C18.7175 21.5 16.4783 21.5 12 21.5C7.52166 21.5 5.28249 21.5 3.89124 20.1088C2.5 18.7175 2.5 16.4783 2.5 12Z\"\n\t\tstroke=\"currentColor\"\n\t\tstroke-width=\"2\"\n\t></path>\n</svg>\n"
  },
  {
    "path": "docs/src/lib/registry/styles/index.ts",
    "content": "import Vega from \"./icons/vega.svelte\";\nimport Nova from \"./icons/nova.svelte\";\nimport Maia from \"./icons/maia.svelte\";\nimport Lyra from \"./icons/lyra.svelte\";\nimport Mira from \"./icons/mira.svelte\";\n\nexport const STYLES = [\n\t{\n\t\tname: \"vega\",\n\t\ttitle: \"Vega\",\n\t\tdescription: \"The classic shadcn/ui look. Clean, neutral, and familiar.\",\n\t\ticon: Vega,\n\t},\n\t{\n\t\tname: \"nova\",\n\t\ttitle: \"Nova\",\n\t\tdescription: \"Reduced padding and margins for compact layouts.\",\n\t\ticon: Nova,\n\t},\n\t{\n\t\tname: \"maia\",\n\t\ttitle: \"Maia\",\n\t\tdescription: \"Soft and rounded, with generous spacing.\",\n\t\ticon: Maia,\n\t},\n\t{\n\t\tname: \"lyra\",\n\t\ttitle: \"Lyra\",\n\t\tdescription: \"Boxy and sharp. Pairs well with mono fonts.\",\n\t\ticon: Lyra,\n\t},\n\t{\n\t\tname: \"mira\",\n\t\ttitle: \"Mira\",\n\t\tdescription: \"Compact. Made for dense interfaces.\",\n\t\ticon: Mira,\n\t},\n] as const;\n\nexport type Style = (typeof STYLES)[number];\n"
  },
  {
    "path": "docs/src/lib/registry/styles/style-lyra.css",
    "content": ".style-lyra {\n\t/* MARK: Accordion */\n\t.cn-accordion-item {\n\t\t@apply not-last:border-b;\n\t}\n\n\t.cn-accordion-trigger {\n\t\t@apply focus-visible:ring-ring/50 focus-visible:border-ring focus-visible:after:border-ring **:data-[slot=accordion-trigger-icon]:text-muted-foreground rounded-none py-2.5 text-left text-xs font-medium hover:underline focus-visible:ring-1 **:data-[slot=accordion-trigger-icon]:ml-auto **:data-[slot=accordion-trigger-icon]:size-4;\n\t}\n\n\t.cn-accordion-content {\n\t\t@apply data-open:animate-accordion-down data-closed:animate-accordion-up text-xs;\n\t}\n\n\t.cn-accordion-content-inner {\n\t\t@apply pt-0 pb-2.5;\n\t}\n\n\t/* MARK: Alert */\n\t.cn-alert {\n\t\t@apply grid gap-0.5 rounded-none border px-2.5 py-2 text-left text-xs has-data-[slot=alert-action]:relative has-data-[slot=alert-action]:pr-18 has-[>svg]:grid-cols-[auto_1fr] has-[>svg]:gap-x-2 *:[svg]:row-span-2 *:[svg]:translate-y-0 *:[svg]:text-current *:[svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-alert-variant-default {\n\t\t@apply bg-card text-card-foreground;\n\t}\n\n\t.cn-alert-variant-destructive {\n\t\t@apply text-destructive bg-card *:data-[slot=alert-description]:text-destructive/90 *:[svg]:text-current;\n\t}\n\n\t.cn-alert-title {\n\t\t@apply font-medium group-has-[>svg]/alert:col-start-2;\n\t}\n\n\t.cn-alert-description {\n\t\t@apply text-muted-foreground text-xs/relaxed text-balance md:text-pretty [&_p:not(:last-child)]:mb-2;\n\t}\n\n\t.cn-alert-action {\n\t\t@apply absolute top-[calc(--spacing(1.25))] right-[calc(--spacing(1.25))];\n\t}\n\n\t/* MARK: Alert Dialog */\n\t.cn-alert-dialog-overlay {\n\t\t@apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 bg-black/10 duration-100 supports-backdrop-filter:backdrop-blur-xs;\n\t}\n\n\t.cn-alert-dialog-content {\n\t\t@apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 bg-background ring-foreground/10 gap-4 rounded-none p-4 ring-1 duration-100 data-[size=default]:max-w-xs data-[size=sm]:max-w-xs data-[size=default]:sm:max-w-sm;\n\t}\n\n\t.cn-alert-dialog-header {\n\t\t@apply grid grid-rows-[auto_1fr] place-items-center gap-1.5 text-center has-data-[slot=alert-dialog-media]:grid-rows-[auto_auto_1fr] has-data-[slot=alert-dialog-media]:gap-x-4 sm:group-data-[size=default]/alert-dialog-content:place-items-start sm:group-data-[size=default]/alert-dialog-content:text-left sm:group-data-[size=default]/alert-dialog-content:has-data-[slot=alert-dialog-media]:grid-rows-[auto_1fr];\n\t}\n\n\t.cn-alert-dialog-media {\n\t\t@apply bg-muted mb-2 inline-flex size-10 items-center justify-center rounded-none sm:group-data-[size=default]/alert-dialog-content:row-span-2 *:[svg:not([class*='size-'])]:size-6;\n\t}\n\n\t.cn-alert-dialog-title {\n\t\t@apply text-sm font-medium sm:group-data-[size=default]/alert-dialog-content:group-has-data-[slot=alert-dialog-media]/alert-dialog-content:col-start-2;\n\t}\n\n\t.cn-alert-dialog-description {\n\t\t@apply text-muted-foreground *:[a]:hover:text-foreground text-xs/relaxed text-balance md:text-pretty *:[a]:underline *:[a]:underline-offset-3;\n\t}\n\n\t/* MARK: Avatar */\n\t.cn-avatar {\n\t\t@apply size-8 rounded-full after:rounded-full data-[size=lg]:size-10 data-[size=sm]:size-6;\n\t}\n\n\t.cn-avatar-fallback {\n\t\t@apply bg-muted text-muted-foreground rounded-full;\n\t}\n\n\t.cn-avatar-image {\n\t\t@apply rounded-full;\n\t}\n\n\t.cn-avatar-badge {\n\t\t@apply bg-primary text-primary-foreground ring-background;\n\t}\n\n\t.cn-avatar-group-count {\n\t\t@apply bg-muted text-muted-foreground size-8 rounded-full text-xs group-has-data-[size=lg]/avatar-group:size-10 group-has-data-[size=sm]/avatar-group:size-6 [&>svg]:size-4 group-has-data-[size=lg]/avatar-group:[&>svg]:size-5 group-has-data-[size=sm]/avatar-group:[&>svg]:size-3;\n\t}\n\n\t/* MARK: Badge */\n\t.cn-badge {\n\t\t@apply h-5 gap-1 rounded-none border border-transparent px-2 py-0.5 text-xs font-medium transition-all has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&>svg]:size-3!;\n\t}\n\n\t.cn-badge-variant-default {\n\t\t@apply bg-primary text-primary-foreground [a]:hover:bg-primary/80;\n\t}\n\n\t.cn-badge-variant-secondary {\n\t\t@apply bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80;\n\t}\n\n\t.cn-badge-variant-outline {\n\t\t@apply border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground;\n\t}\n\n\t.cn-badge-variant-destructive {\n\t\t@apply bg-destructive/10 [a]:hover:bg-destructive/20 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 text-destructive dark:bg-destructive/20;\n\t}\n\n\t.cn-badge-variant-ghost {\n\t\t@apply hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50;\n\t}\n\n\t.cn-badge-variant-link {\n\t\t@apply text-primary underline-offset-4 hover:underline;\n\t}\n\n\t/* MARK: Breadcrumb */\n\t.cn-breadcrumb-list {\n\t\t@apply text-muted-foreground gap-1.5 text-xs;\n\t}\n\n\t.cn-breadcrumb-item {\n\t\t@apply gap-1;\n\t}\n\n\t.cn-breadcrumb-link {\n\t\t@apply hover:text-foreground transition-colors;\n\t}\n\n\t.cn-breadcrumb-page {\n\t\t@apply text-foreground font-normal;\n\t}\n\n\t.cn-breadcrumb-separator {\n\t\t@apply [&>svg]:size-3.5;\n\t}\n\n\t.cn-breadcrumb-ellipsis {\n\t\t@apply size-5 [&>svg]:size-4;\n\t}\n\n\t/* MARK: Button */\n\t.cn-button {\n\t\t@apply focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 rounded-none border border-transparent bg-clip-padding text-xs font-medium focus-visible:ring-1 active:translate-y-px aria-invalid:ring-1 [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-button-variant-default {\n\t\t@apply bg-primary text-primary-foreground [a]:hover:bg-primary/80;\n\t}\n\n\t.cn-button-variant-outline {\n\t\t@apply border-border bg-background hover:bg-muted hover:text-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 aria-expanded:bg-muted aria-expanded:text-foreground;\n\t}\n\n\t.cn-button-variant-secondary {\n\t\t@apply bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground;\n\t}\n\n\t.cn-button-variant-ghost {\n\t\t@apply hover:bg-muted hover:text-foreground dark:hover:bg-muted/50 aria-expanded:bg-muted aria-expanded:text-foreground;\n\t}\n\n\t.cn-button-variant-destructive {\n\t\t@apply bg-destructive/10 hover:bg-destructive/20 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/20 text-destructive focus-visible:border-destructive/40 dark:hover:bg-destructive/30;\n\t}\n\n\t.cn-button-variant-link {\n\t\t@apply text-primary underline-offset-4 hover:underline;\n\t}\n\n\t.cn-button-size-xs {\n\t\t@apply h-6 gap-1 rounded-none px-2 text-xs has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3;\n\t}\n\n\t.cn-button-size-sm {\n\t\t@apply h-7 gap-1 rounded-none px-2.5 has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5;\n\t}\n\n\t.cn-button-size-default {\n\t\t@apply h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2;\n\t}\n\n\t.cn-button-size-lg {\n\t\t@apply h-9 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3;\n\t}\n\n\t.cn-button-size-icon-xs {\n\t\t@apply size-6 rounded-none [&_svg:not([class*='size-'])]:size-3;\n\t}\n\n\t.cn-button-size-icon-sm {\n\t\t@apply size-7 rounded-none;\n\t}\n\n\t.cn-button-size-icon {\n\t\t@apply size-8;\n\t}\n\n\t.cn-button-size-icon-lg {\n\t\t@apply size-9;\n\t}\n\n\t/* MARK: Button Group */\n\t.cn-button-group {\n\t\t@apply rounded-none has-[>[data-slot=button-group]]:gap-2 has-[select[aria-hidden=true]:last-child]:[&>[data-slot=select-trigger]:last-of-type]:rounded-none;\n\t}\n\n\t.cn-button-group-text {\n\t\t@apply bg-muted gap-2 rounded-none border px-2.5 text-xs font-medium [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-button-group-separator {\n\t\t@apply bg-input;\n\t}\n\n\t/* MARK: Calendar */\n\t.cn-calendar {\n\t\t@apply p-2 [--cell-size:--spacing(7)];\n\t}\n\n\t.cn-calendar-dropdown-root {\n\t\t@apply has-focus:border-ring border-input has-focus:ring-ring/50 rounded-none border has-focus:ring-1;\n\t}\n\n\t.cn-calendar-caption-label {\n\t\t@apply h-6 rounded-none pr-1 pl-1.5;\n\t}\n\n\t/* MARK: Card */\n\t.cn-card {\n\t\t@apply ring-foreground/10 bg-card text-card-foreground gap-4 overflow-hidden rounded-none py-4 text-xs/relaxed ring-1 has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0 data-[size=sm]:gap-2 data-[size=sm]:py-3 data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-none *:[img:last-child]:rounded-none;\n\t}\n\n\t.cn-card-header {\n\t\t@apply gap-1 rounded-none px-4 group-data-[size=sm]/card:px-3 [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3;\n\t}\n\n\t.cn-card-title {\n\t\t@apply text-sm font-medium group-data-[size=sm]/card:text-sm;\n\t}\n\n\t.cn-card-description {\n\t\t@apply text-muted-foreground text-xs/relaxed;\n\t}\n\n\t.cn-card-content {\n\t\t@apply px-4 group-data-[size=sm]/card:px-3;\n\t}\n\n\t.cn-card-footer {\n\t\t@apply rounded-none border-t p-4 group-data-[size=sm]/card:p-3;\n\t}\n\n\t/* MARK: Chart */\n\t.cn-chart-tooltip {\n\t\t@apply border-border/50 bg-background gap-1.5 rounded-none border px-2.5 py-1.5 text-xs shadow-xl;\n\t}\n\n\t/* MARK: Checkbox */\n\t.cn-checkbox {\n\t\t@apply border-input dark:bg-input/30 data-checked:bg-primary data-checked:text-primary-foreground dark:data-checked:bg-primary data-checked:border-primary aria-invalid:aria-checked:border-primary aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 flex size-4 items-center justify-center rounded-none border transition-colors group-has-disabled/field:opacity-50 focus-visible:ring-1 aria-invalid:ring-1;\n\t}\n\n\t.cn-checkbox-indicator {\n\t\t@apply [&>svg]:size-3.5;\n\t}\n\n\t/* MARK: Combobox */\n\t.cn-combobox-content {\n\t\t@apply bg-popover text-popover-foreground data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 *:data-[slot=input-group]:bg-input/30 *:data-[slot=input-group]:border-input/30 max-h-72 min-w-36 overflow-hidden rounded-none shadow-md ring-1 duration-100 *:data-[slot=input-group]:m-1 *:data-[slot=input-group]:mb-0 *:data-[slot=input-group]:h-8 *:data-[slot=input-group]:shadow-none;\n\t}\n\n\t.cn-combobox-content-logical {\n\t\t@apply data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2;\n\t}\n\n\t.cn-combobox-label {\n\t\t@apply text-muted-foreground px-2 py-2 text-xs;\n\t}\n\n\t.cn-combobox-item {\n\t\t@apply data-highlighted:bg-accent data-highlighted:text-accent-foreground not-data-[variant=destructive]:data-highlighted:**:text-accent-foreground gap-2 rounded-none py-2 pr-8 pl-2 text-xs [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-combobox-item-indicator {\n\t\t@apply pointer-events-none absolute right-2 flex size-4 items-center justify-center;\n\t}\n\n\t.cn-combobox-empty {\n\t\t@apply text-muted-foreground hidden w-full justify-center py-2 text-center text-xs group-data-empty/combobox-content:flex;\n\t}\n\n\t.cn-combobox-list {\n\t\t@apply no-scrollbar max-h-[min(calc(--spacing(72)---spacing(9)),calc(var(--available-height)---spacing(9)))] scroll-py-1 overflow-y-auto data-empty:p-0;\n\t}\n\n\t.cn-combobox-item-text {\n\t\t@apply flex flex-1 gap-2;\n\t}\n\n\t.cn-combobox-separator {\n\t\t@apply bg-border -mx-1 h-px;\n\t}\n\n\t.cn-combobox-trigger {\n\t\t@apply [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-combobox-trigger-icon {\n\t\t@apply text-muted-foreground size-4;\n\t}\n\n\t.cn-combobox-chips {\n\t\t@apply dark:bg-input/30 border-input focus-within:border-ring focus-within:ring-ring/50 has-aria-invalid:ring-destructive/20 dark:has-aria-invalid:ring-destructive/40 has-aria-invalid:border-destructive dark:has-aria-invalid:border-destructive/50 flex min-h-8 flex-wrap items-center gap-1 rounded-none border bg-transparent bg-clip-padding px-2.5 py-1 text-xs transition-colors focus-within:ring-1 has-aria-invalid:ring-1 has-data-[slot=combobox-chip]:px-1;\n\t}\n\n\t.cn-combobox-chip {\n\t\t@apply bg-muted text-foreground flex h-[calc(--spacing(5.25))] w-fit items-center justify-center gap-1 rounded-none px-1.5 text-xs font-medium whitespace-nowrap has-data-[slot=combobox-chip-remove]:pr-0;\n\t}\n\n\t.cn-combobox-chip-remove {\n\t\t@apply -ml-1 opacity-50 hover:opacity-100;\n\t}\n\n\t/* MARK: Command */\n\t.cn-command {\n\t\t@apply bg-popover text-popover-foreground rounded-none;\n\t}\n\n\t.cn-command-dialog {\n\t\t@apply rounded-none;\n\t}\n\n\t.cn-command-input-wrapper {\n\t\t@apply border-b pb-0;\n\t}\n\n\t.cn-command-input-group {\n\t\t@apply bg-input/30 border-input/30 h-8 border-none shadow-none! *:data-[slot=input-group-addon]:pl-2!;\n\t}\n\n\t.cn-command-input-icon {\n\t\t@apply size-4 shrink-0 opacity-50;\n\t}\n\n\t.cn-command-input {\n\t\t@apply w-full text-xs;\n\t}\n\n\t.cn-command-list {\n\t\t@apply no-scrollbar max-h-72 scroll-py-0 outline-none;\n\t}\n\n\t.cn-command-empty {\n\t\t@apply py-6 text-center text-xs;\n\t}\n\n\t.cn-command-group {\n\t\t@apply text-foreground **:[[cmdk-group-heading]]:text-muted-foreground overflow-hidden **:[[cmdk-group-heading]]:px-2 **:[[cmdk-group-heading]]:py-1.5 **:[[cmdk-group-heading]]:text-xs;\n\t}\n\n\t.cn-command-separator {\n\t\t@apply bg-border -mx-1 h-px;\n\t}\n\n\t.cn-command-item {\n\t\t@apply data-selected:bg-muted data-selected:text-foreground data-selected:*:[svg]:text-foreground relative flex cursor-default items-center gap-2 rounded-none px-2 py-2 text-xs outline-hidden select-none in-data-[slot=dialog-content]:rounded-none! [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-command-shortcut {\n\t\t@apply text-muted-foreground group-data-selected/command-item:text-foreground ml-auto text-xs tracking-widest;\n\t}\n\n\t/* MARK: Context Menu */\n\t.cn-context-menu-content {\n\t\t@apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 bg-popover text-popover-foreground min-w-36 rounded-none shadow-md ring-1 duration-100;\n\t}\n\n\t.cn-context-menu-content-logical {\n\t\t@apply data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2;\n\t}\n\n\t.cn-context-menu-item {\n\t\t@apply focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:text-destructive focus:*:[svg]:text-accent-foreground gap-2 rounded-none px-2 py-2 text-xs data-inset:pl-7 [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-context-menu-checkbox-item {\n\t\t@apply focus:bg-accent focus:text-accent-foreground gap-2 rounded-none py-2 pr-8 pl-2 text-xs data-inset:pl-7 [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-context-menu-radio-item {\n\t\t@apply focus:bg-accent focus:text-accent-foreground gap-2 rounded-none py-2 pr-8 pl-2 text-xs data-inset:pl-7 [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-context-menu-item-indicator {\n\t\t@apply absolute right-2;\n\t}\n\n\t.cn-context-menu-label {\n\t\t@apply text-muted-foreground px-2 py-2 text-xs data-inset:pl-7;\n\t}\n\n\t.cn-context-menu-separator {\n\t\t@apply bg-border -mx-1 h-px;\n\t}\n\n\t.cn-context-menu-shortcut {\n\t\t@apply text-muted-foreground group-focus/context-menu-item:text-accent-foreground ml-auto text-xs tracking-widest;\n\t}\n\n\t.cn-context-menu-sub-trigger {\n\t\t@apply focus:bg-accent focus:text-accent-foreground data-open:bg-accent data-open:text-accent-foreground gap-2 rounded-none px-2 py-2 text-xs data-inset:pl-7 [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-context-menu-sub-content {\n\t\t@apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 bg-popover text-popover-foreground min-w-32 rounded-none border shadow-lg duration-100;\n\t}\n\n\t.cn-context-menu-subcontent {\n\t\t@apply shadow-lg;\n\t}\n\n\t/* MARK: Dialog */\n\t.cn-dialog-overlay {\n\t\t@apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 bg-black/10 duration-100 supports-backdrop-filter:backdrop-blur-xs;\n\t}\n\n\t.cn-dialog-content {\n\t\t@apply bg-background data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 ring-foreground/10 grid max-w-[calc(100%-2rem)] gap-4 rounded-none p-4 text-xs/relaxed ring-1 duration-100 sm:max-w-sm;\n\t}\n\n\t.cn-dialog-close {\n\t\t@apply absolute top-2 right-2;\n\t}\n\n\t.cn-dialog-header {\n\t\t@apply gap-1 text-left;\n\t}\n\n\t.cn-dialog-title {\n\t\t@apply text-sm font-medium;\n\t}\n\n\t.cn-dialog-description {\n\t\t@apply text-muted-foreground *:[a]:hover:text-foreground text-xs/relaxed *:[a]:underline *:[a]:underline-offset-3;\n\t}\n\n\t/* MARK: Drawer */\n\t.cn-drawer-overlay {\n\t\t@apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 bg-black/10 supports-backdrop-filter:backdrop-blur-xs;\n\t}\n\n\t.cn-drawer-content {\n\t\t@apply bg-background flex h-auto flex-col text-xs/relaxed data-[vaul-drawer-direction=bottom]:inset-x-0 data-[vaul-drawer-direction=bottom]:bottom-0 data-[vaul-drawer-direction=bottom]:mt-24 data-[vaul-drawer-direction=bottom]:max-h-[80vh] data-[vaul-drawer-direction=bottom]:rounded-none data-[vaul-drawer-direction=bottom]:border-t data-[vaul-drawer-direction=left]:inset-y-0 data-[vaul-drawer-direction=left]:left-0 data-[vaul-drawer-direction=left]:w-3/4 data-[vaul-drawer-direction=left]:rounded-none data-[vaul-drawer-direction=left]:border-r data-[vaul-drawer-direction=right]:inset-y-0 data-[vaul-drawer-direction=right]:right-0 data-[vaul-drawer-direction=right]:w-3/4 data-[vaul-drawer-direction=right]:rounded-none data-[vaul-drawer-direction=right]:border-l data-[vaul-drawer-direction=top]:inset-x-0 data-[vaul-drawer-direction=top]:top-0 data-[vaul-drawer-direction=top]:mb-24 data-[vaul-drawer-direction=top]:max-h-[80vh] data-[vaul-drawer-direction=top]:rounded-none data-[vaul-drawer-direction=top]:border-b data-[vaul-drawer-direction=left]:sm:max-w-sm data-[vaul-drawer-direction=right]:sm:max-w-sm;\n\t}\n\n\t.cn-drawer-handle {\n\t\t@apply bg-muted mx-auto mt-4 hidden h-1 w-[100px] shrink-0 rounded-none group-data-[vaul-drawer-direction=bottom]/drawer-content:block;\n\t}\n\n\t.cn-drawer-header {\n\t\t@apply gap-0.5 p-4 group-data-[vaul-drawer-direction=bottom]/drawer-content:text-center group-data-[vaul-drawer-direction=top]/drawer-content:text-center md:gap-0.5 md:text-left;\n\t}\n\n\t.cn-drawer-title {\n\t\t@apply text-foreground text-sm font-medium;\n\t}\n\n\t.cn-drawer-description {\n\t\t@apply text-muted-foreground text-xs/relaxed;\n\t}\n\n\t.cn-drawer-footer {\n\t\t@apply gap-2 p-4;\n\t}\n\n\t/* MARK: Dropdown Menu */\n\t.cn-dropdown-menu-content {\n\t\t@apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 bg-popover text-popover-foreground min-w-32 rounded-none shadow-md ring-1 duration-100;\n\t}\n\n\t.cn-dropdown-menu-content-logical {\n\t\t@apply data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2;\n\t}\n\n\t.cn-dropdown-menu-item {\n\t\t@apply focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:text-destructive not-data-[variant=destructive]:focus:**:text-accent-foreground gap-2 rounded-none px-2 py-2 text-xs data-inset:pl-7 [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-dropdown-menu-checkbox-item {\n\t\t@apply focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground gap-2 rounded-none py-2 pr-8 pl-2 text-xs data-inset:pl-7 [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-dropdown-menu-radio-item {\n\t\t@apply focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground gap-2 rounded-none py-2 pr-8 pl-2 text-xs data-inset:pl-7 [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-dropdown-menu-item-indicator {\n\t\t@apply absolute right-2 flex items-center justify-center;\n\t}\n\n\t.cn-dropdown-menu-label {\n\t\t@apply text-muted-foreground px-2 py-2 text-xs data-inset:pl-7;\n\t}\n\n\t.cn-dropdown-menu-separator {\n\t\t@apply bg-border -mx-1 h-px;\n\t}\n\n\t.cn-dropdown-menu-shortcut {\n\t\t@apply text-muted-foreground group-focus/dropdown-menu-item:text-accent-foreground ml-auto text-xs tracking-widest;\n\t}\n\n\t.cn-dropdown-menu-sub-trigger {\n\t\t@apply focus:bg-accent focus:text-accent-foreground data-open:bg-accent data-open:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground gap-2 rounded-none px-2 py-2 text-xs data-inset:pl-7 [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-dropdown-menu-sub-content {\n\t\t@apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 bg-popover text-popover-foreground min-w-[96px] rounded-none shadow-lg ring-1 duration-100;\n\t}\n\n\t.cn-dropdown-menu-subcontent {\n\t\t@apply shadow-lg;\n\t}\n\n\t/* MARK: Empty */\n\t.cn-empty {\n\t\t@apply gap-4 rounded-none border-dashed p-6;\n\t}\n\n\t.cn-empty-header {\n\t\t@apply gap-2;\n\t}\n\n\t.cn-empty-media {\n\t\t@apply mb-2;\n\t}\n\n\t.cn-empty-media-default {\n\t\t@apply bg-transparent;\n\t}\n\n\t.cn-empty-media-icon {\n\t\t@apply bg-muted text-foreground flex size-8 shrink-0 items-center justify-center rounded-none [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-empty-title {\n\t\t@apply text-sm font-medium;\n\t}\n\n\t.cn-empty-description {\n\t\t@apply text-xs/relaxed;\n\t}\n\n\t.cn-empty-content {\n\t\t@apply gap-2.5 text-xs;\n\t}\n\n\t/* MARK: Field */\n\t.cn-field-set {\n\t\t@apply gap-4 has-[>[data-slot=checkbox-group]]:gap-3 has-[>[data-slot=radio-group]]:gap-3;\n\t}\n\n\t.cn-field-legend {\n\t\t@apply mb-2.5 font-medium data-[variant=label]:text-xs data-[variant=legend]:text-sm;\n\t}\n\n\t.cn-field-group {\n\t\t@apply gap-5 data-[slot=checkbox-group]:gap-3 *:data-[slot=field-group]:gap-4;\n\t}\n\n\t.cn-field {\n\t\t@apply data-[invalid=true]:text-destructive gap-2;\n\t}\n\n\t.cn-field-content {\n\t\t@apply gap-0.5;\n\t}\n\n\t.cn-field-label {\n\t\t@apply has-data-checked:bg-primary/5 has-data-checked:border-primary/30 dark:has-data-checked:border-primary/20 dark:has-data-checked:bg-primary/10 gap-2 group-data-[disabled=true]/field:opacity-50 has-[>[data-slot=field]]:rounded-none has-[>[data-slot=field]]:border *:data-[slot=field]:p-2;\n\t}\n\n\t.cn-field-title {\n\t\t@apply gap-2 text-xs/relaxed group-data-[disabled=true]/field:opacity-50;\n\t}\n\n\t.cn-field-description {\n\t\t@apply text-muted-foreground text-left text-xs/relaxed [[data-variant=legend]+&]:-mt-1.5;\n\t}\n\n\t.cn-field-separator {\n\t\t@apply -my-2 h-5 text-xs group-data-[variant=outline]/field-group:-mb-2;\n\t}\n\n\t.cn-field-separator-content {\n\t\t@apply text-muted-foreground px-2;\n\t}\n\n\t.cn-field-error {\n\t\t@apply text-destructive text-xs;\n\t}\n\n\t/* MARK: Hover Card */\n\t.cn-hover-card-content {\n\t\t@apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 bg-popover text-popover-foreground w-64 rounded-none p-2.5 text-xs/relaxed shadow-md ring-1 duration-100;\n\t}\n\n\t.cn-hover-card-content-logical {\n\t\t@apply data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2;\n\t}\n\n\t/* MARK: Input */\n\t.cn-input {\n\t\t@apply dark:bg-input/30 border-input focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 disabled:bg-input/50 dark:disabled:bg-input/80 h-8 rounded-none border bg-transparent px-2.5 py-1 text-xs transition-colors file:h-6 file:text-xs file:font-medium focus-visible:ring-1 aria-invalid:ring-1 md:text-xs;\n\t}\n\n\t/* MARK: Input OTP */\n\t.cn-input-otp {\n\t\t@apply gap-2;\n\t}\n\n\t.cn-input-otp-group {\n\t\t@apply has-aria-invalid:ring-destructive/20 dark:has-aria-invalid:ring-destructive/40 has-aria-invalid:border-destructive rounded-none has-aria-invalid:ring-1;\n\t}\n\n\t.cn-input-otp-slot {\n\t\t@apply dark:bg-input/30 border-input data-[active=true]:border-ring data-[active=true]:ring-ring/50 data-[active=true]:aria-invalid:ring-destructive/20 dark:data-[active=true]:aria-invalid:ring-destructive/40 aria-invalid:border-destructive data-[active=true]:aria-invalid:border-destructive size-8 border-y border-r text-xs transition-all outline-none first:rounded-none first:border-l last:rounded-none data-[active=true]:ring-1;\n\t}\n\n\t.cn-input-otp-caret-line {\n\t\t@apply animate-caret-blink bg-foreground h-4 w-px duration-1000;\n\t}\n\n\t.cn-input-otp-separator {\n\t\t@apply [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t/* MARK: Item */\n\t.cn-item {\n\t\t@apply [a]:hover:bg-muted rounded-none border text-xs;\n\t}\n\n\t.cn-item-variant-default {\n\t\t@apply border-transparent;\n\t}\n\n\t.cn-item-variant-outline {\n\t\t@apply border-border;\n\t}\n\n\t.cn-item-variant-muted {\n\t\t@apply bg-muted/50 border-transparent;\n\t}\n\n\t.cn-item-size-default {\n\t\t@apply gap-2.5 px-3 py-2.5;\n\t}\n\n\t.cn-item-size-sm {\n\t\t@apply gap-2.5 px-3 py-2.5;\n\t}\n\n\t.cn-item-size-xs {\n\t\t@apply gap-2 px-2.5 py-2 in-data-[slot=dropdown-menu-content]:p-0;\n\t}\n\n\t.cn-item-media {\n\t\t@apply gap-2 group-has-data-[slot=item-description]/item:translate-y-0.5 group-has-data-[slot=item-description]/item:self-start;\n\t}\n\n\t.cn-item-media-variant-default {\n\t\t@apply bg-transparent;\n\t}\n\n\t.cn-item-media-variant-icon {\n\t\t@apply [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-item-media-variant-image {\n\t\t@apply size-10 overflow-hidden rounded-none group-data-[size=sm]/item:size-8 group-data-[size=xs]/item:size-6 [&_img]:size-full [&_img]:object-cover;\n\t}\n\n\t.cn-item-content {\n\t\t@apply gap-1 group-data-[size=xs]/item:gap-0;\n\t}\n\n\t.cn-item-title {\n\t\t@apply gap-2 text-xs font-medium underline-offset-4;\n\t}\n\n\t.cn-item-description {\n\t\t@apply text-muted-foreground text-left text-xs/relaxed group-data-[size=xs]/item:text-xs/relaxed;\n\t}\n\n\t.cn-item-actions {\n\t\t@apply gap-2;\n\t}\n\n\t.cn-item-header {\n\t\t@apply gap-2;\n\t}\n\n\t.cn-item-footer {\n\t\t@apply gap-2;\n\t}\n\n\t.cn-item-group {\n\t\t@apply gap-4 has-data-[size=sm]:gap-2.5 has-data-[size=xs]:gap-2;\n\t}\n\n\t.cn-item-separator {\n\t\t@apply my-2;\n\t}\n\n\t/* MARK: Kbd */\n\t.cn-kbd {\n\t\t@apply bg-muted text-muted-foreground in-data-[slot=tooltip-content]:bg-background/20 in-data-[slot=tooltip-content]:text-background dark:in-data-[slot=tooltip-content]:bg-background/10 h-5 w-fit min-w-5 gap-1 rounded-none px-1 font-sans text-xs font-medium [&_svg:not([class*='size-'])]:size-3;\n\t}\n\n\t.cn-kbd-group {\n\t\t@apply gap-1;\n\t}\n\n\t/* MARK: Label */\n\t.cn-label {\n\t\t@apply gap-2 text-xs leading-none group-data-[disabled=true]:opacity-50 peer-disabled:opacity-50;\n\t}\n\n\t/* MARK: Menubar */\n\t.cn-menubar {\n\t\t@apply h-8 gap-0.5 rounded-none border p-1;\n\t}\n\n\t.cn-menubar-trigger {\n\t\t@apply hover:bg-muted aria-expanded:bg-muted rounded-none px-1.5 py-[calc(--spacing(0.8))] text-xs font-medium;\n\t}\n\n\t.cn-menubar-content {\n\t\t@apply bg-popover text-popover-foreground data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 min-w-36 rounded-none shadow-md ring-1 duration-100;\n\t}\n\n\t.cn-menubar-content-logical {\n\t\t@apply data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2;\n\t}\n\n\t.cn-menubar-item {\n\t\t@apply focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:text-destructive! not-data-[variant=destructive]:focus:**:text-accent-foreground gap-2 rounded-none px-2 py-2 text-xs data-disabled:opacity-50 data-inset:pl-8 [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-menubar-checkbox-item {\n\t\t@apply focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground gap-2 rounded-none py-2 pr-28 pl-8 text-xs data-inset:pl-8;\n\t}\n\n\t.cn-menubar-checkbox-item-indicator {\n\t\t@apply left-1.5 size-4 [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-menubar-radio-item {\n\t\t@apply focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground gap-2 rounded-none py-2 pr-2 pl-8 text-xs data-disabled:opacity-50 data-inset:pl-8 [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-menubar-radio-item-indicator {\n\t\t@apply left-1.5 size-4 [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-menubar-label {\n\t\t@apply px-2 py-2 text-xs data-inset:pl-8;\n\t}\n\n\t.cn-menubar-separator {\n\t\t@apply bg-border;\n\t}\n\n\t.cn-menubar-shortcut {\n\t\t@apply text-muted-foreground group-focus/menubar-item:text-accent-foreground text-xs tracking-widest;\n\t}\n\n\t.cn-menubar-sub-trigger {\n\t\t@apply focus:bg-accent focus:text-accent-foreground data-open:bg-accent data-open:text-accent-foreground gap-2 rounded-none px-2 py-2 text-xs data-inset:pl-8 [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-menubar-sub-content {\n\t\t@apply bg-popover text-popover-foreground data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 min-w-32 rounded-none shadow-lg ring-1 duration-100;\n\t}\n\n\t/* MARK: Navigation Menu */\n\t.cn-navigation-menu {\n\t\t@apply max-w-max;\n\t}\n\n\t.cn-navigation-menu-list {\n\t\t@apply gap-0;\n\t}\n\n\t.cn-navigation-menu-trigger {\n\t\t@apply bg-background hover:bg-muted focus:bg-muted data-open:hover:bg-muted data-open:focus:bg-muted data-open:bg-muted/50 focus-visible:ring-ring/50 data-popup-open:bg-muted/50 data-popup-open:hover:bg-muted rounded-none px-2.5 py-1.5 text-xs font-medium transition-all focus-visible:ring-1 focus-visible:outline-1 disabled:opacity-50;\n\t}\n\n\t.cn-navigation-menu-link {\n\t\t@apply data-active:focus:bg-muted data-active:hover:bg-muted data-active:bg-muted/50 focus-visible:ring-ring/50 hover:bg-muted focus:bg-muted flex items-center gap-2 rounded-none p-2 text-xs transition-all outline-none focus-visible:ring-1 focus-visible:outline-1 in-data-[slot=navigation-menu-content]:rounded-none [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-navigation-menu-trigger-icon {\n\t\t@apply relative top-px ml-1 size-3 transition duration-300 group-data-open/navigation-menu-trigger:rotate-180 group-data-popup-open/navigation-menu-trigger:rotate-180;\n\t}\n\n\t.cn-navigation-menu-content {\n\t\t@apply data-[motion^=from-]:animate-in data-[motion^=to-]:animate-out data-[motion^=from-]:fade-in data-[motion^=to-]:fade-out data-[motion=from-end]:slide-in-from-right-52 data-[motion=from-start]:slide-in-from-left-52 data-[motion=to-end]:slide-out-to-right-52 data-[motion=to-start]:slide-out-to-left-52 group-data-[viewport=false]/navigation-menu:bg-popover group-data-[viewport=false]/navigation-menu:text-popover-foreground group-data-[viewport=false]/navigation-menu:data-open:animate-in group-data-[viewport=false]/navigation-menu:data-closed:animate-out group-data-[viewport=false]/navigation-menu:data-closed:zoom-out-95 group-data-[viewport=false]/navigation-menu:data-open:zoom-in-95 group-data-[viewport=false]/navigation-menu:data-open:fade-in-0 group-data-[viewport=false]/navigation-menu:data-closed:fade-out-0 group-data-[viewport=false]/navigation-menu:ring-foreground/10 p-1 ease-[cubic-bezier(0.22,1,0.36,1)] group-data-[viewport=false]/navigation-menu:rounded-none group-data-[viewport=false]/navigation-menu:shadow group-data-[viewport=false]/navigation-menu:ring-1 group-data-[viewport=false]/navigation-menu:duration-300;\n\t}\n\n\t.cn-navigation-menu-viewport {\n\t\t@apply bg-popover text-popover-foreground data-open:animate-in data-closed:animate-out data-closed:zoom-out-90 data-open:zoom-in-90 ring-foreground/10 rounded-none shadow ring-1 duration-100;\n\t}\n\n\t.cn-navigation-menu-indicator {\n\t\t@apply data-[state=visible]:animate-in data-[state=hidden]:animate-out data-[state=hidden]:fade-out data-[state=visible]:fade-in;\n\t}\n\n\t.cn-navigation-menu-indicator-arrow {\n\t\t@apply bg-border rounded-none shadow-md;\n\t}\n\n\t.cn-navigation-menu-positioner {\n\t\t@apply transition-[top,left,right,bottom] duration-300 ease-[cubic-bezier(0.22,1,0.36,1)] data-[side=bottom]:before:top-[-10px] data-[side=bottom]:before:right-0 data-[side=bottom]:before:left-0;\n\t}\n\n\t.cn-navigation-menu-popup {\n\t\t@apply bg-popover text-popover-foreground ring-foreground/10 rounded-none shadow ring-1 transition-all ease-[cubic-bezier(0.22,1,0.36,1)] outline-none data-ending-style:scale-90 data-ending-style:opacity-0 data-ending-style:duration-150 data-starting-style:scale-90 data-starting-style:opacity-0;\n\t}\n\n\t/* MARK: Native Select */\n\t.cn-native-select {\n\t\t@apply border-input placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 dark:hover:bg-input/50 focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 h-8 w-full min-w-0 appearance-none rounded-none border bg-transparent py-1 pr-8 pl-2.5 text-xs transition-colors select-none focus-visible:ring-1 aria-invalid:ring-1 data-[size=sm]:h-7 data-[size=sm]:rounded-none data-[size=sm]:py-0.5;\n\t}\n\n\t.cn-native-select-icon {\n\t\t@apply text-muted-foreground top-1/2 right-2.5 size-4 -translate-y-1/2;\n\t}\n\n\t/* MARK: Pagination */\n\t.cn-pagination-content {\n\t\t@apply gap-0.5;\n\t}\n\n\t.cn-pagination-ellipsis {\n\t\t@apply size-8 items-center justify-center [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-pagination-previous {\n\t\t@apply pl-1.5!;\n\t}\n\n\t.cn-pagination-next {\n\t\t@apply pr-1.5!;\n\t}\n\n\t/* MARK: Popover */\n\t.cn-popover-content {\n\t\t@apply bg-popover text-popover-foreground data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 flex flex-col gap-2.5 rounded-none p-2.5 text-xs shadow-md ring-1 duration-100;\n\t}\n\n\t.cn-popover-content-logical {\n\t\t@apply data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2;\n\t}\n\n\t.cn-popover-header {\n\t\t@apply flex flex-col gap-1 text-xs;\n\t}\n\n\t.cn-popover-title {\n\t\t@apply text-sm font-medium;\n\t}\n\n\t.cn-popover-description {\n\t\t@apply text-muted-foreground text-xs/relaxed;\n\t}\n\n\t/* MARK: Progress */\n\t.cn-progress {\n\t\t@apply bg-muted h-1 rounded-none;\n\t}\n\n\t.cn-progress-track {\n\t\t@apply bg-muted h-1 rounded-none;\n\t}\n\n\t.cn-progress-indicator {\n\t\t@apply bg-primary;\n\t}\n\n\t.cn-progress-label {\n\t\t@apply text-xs;\n\t}\n\n\t.cn-progress-value {\n\t\t@apply text-muted-foreground ml-auto text-xs tabular-nums;\n\t}\n\n\t/* MARK: Radio Group */\n\t.cn-radio-group {\n\t\t@apply grid gap-2;\n\t}\n\n\t.cn-radio-group-item {\n\t\t@apply border-input dark:bg-input/30 data-checked:bg-primary data-checked:text-primary-foreground dark:data-checked:bg-primary data-checked:border-primary aria-invalid:aria-checked:border-primary aria-invalid:border-destructive focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 dark:aria-invalid:border-destructive/50 flex size-4 rounded-full focus-visible:ring-3 aria-invalid:ring-3;\n\t}\n\n\t.cn-radio-group-indicator {\n\t\t@apply flex size-4 items-center justify-center;\n\t}\n\n\t.cn-radio-group-indicator-icon {\n\t\t@apply bg-primary-foreground absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2 rounded-full;\n\t}\n\n\t/* MARK: Resizable */\n\t.cn-resizable-handle-icon {\n\t\t@apply bg-border h-6 w-1 rounded-none;\n\t}\n\n\t/* MARK: Scroll Area */\n\t.cn-scroll-area-scrollbar {\n\t\t@apply data-horizontal:h-2.5 data-horizontal:flex-col data-horizontal:border-t data-horizontal:border-t-transparent data-vertical:h-full data-vertical:w-2.5 data-vertical:border-l data-vertical:border-l-transparent;\n\t}\n\n\t.cn-scroll-area-thumb {\n\t\t@apply rounded-none;\n\t}\n\n\t/* MARK: Select */\n\t.cn-select-trigger {\n\t\t@apply border-input data-placeholder:text-muted-foreground dark:bg-input/30 dark:hover:bg-input/50 focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 gap-1.5 rounded-none border bg-transparent py-2 pr-2 pl-2.5 text-xs transition-colors select-none focus-visible:ring-1 aria-invalid:ring-1 data-[size=default]:h-8 data-[size=sm]:h-7 data-[size=sm]:rounded-none *:data-[slot=select-value]:flex *:data-[slot=select-value]:gap-1.5 [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-select-value {\n\t\t@apply flex flex-1 text-left;\n\t}\n\n\t.cn-select-trigger-icon {\n\t\t@apply text-muted-foreground size-4;\n\t}\n\n\t.cn-select-content {\n\t\t@apply bg-popover text-popover-foreground data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 min-w-36 rounded-none shadow-md ring-1 duration-100;\n\t}\n\n\t.cn-select-content-logical {\n\t\t@apply data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2;\n\t}\n\n\t.cn-select-label {\n\t\t@apply text-muted-foreground px-2 py-2 text-xs;\n\t}\n\n\t.cn-select-item {\n\t\t@apply focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground gap-2 rounded-none py-2 pr-8 pl-2 text-xs [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2;\n\t}\n\n\t.cn-select-item-indicator {\n\t\t@apply pointer-events-none absolute right-2 flex size-4 items-center justify-center;\n\t}\n\n\t.cn-select-group {\n\t\t@apply scroll-my-1;\n\t}\n\n\t.cn-select-item-text {\n\t\t@apply flex flex-1 gap-2;\n\t}\n\n\t.cn-select-separator {\n\t\t@apply bg-border -mx-1 h-px;\n\t}\n\n\t.cn-select-scroll-up-button {\n\t\t@apply bg-popover z-10 flex cursor-default items-center justify-center py-1 [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-select-scroll-down-button {\n\t\t@apply bg-popover z-10 flex cursor-default items-center justify-center py-1 [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t/* MARK: Separator */\n\t.cn-separator {\n\t\t@apply bg-border shrink-0;\n\t}\n\n\t.cn-separator-horizontal {\n\t\t@apply h-px w-full;\n\t}\n\n\t.cn-separator-vertical {\n\t\t@apply h-full w-px;\n\t}\n\n\t/* MARK: Sheet */\n\t.cn-sheet-overlay {\n\t\t@apply bg-black/10 text-xs/relaxed supports-backdrop-filter:backdrop-blur-xs;\n\t}\n\n\t.cn-sheet-content {\n\t\t@apply bg-background fixed z-50 flex flex-col bg-clip-padding text-xs/relaxed shadow-lg transition duration-200 ease-in-out data-[side=bottom]:inset-x-0 data-[side=bottom]:bottom-0 data-[side=bottom]:h-auto data-[side=bottom]:border-t data-[side=left]:inset-y-0 data-[side=left]:left-0 data-[side=left]:h-full data-[side=left]:w-3/4 data-[side=left]:border-r data-[side=right]:inset-y-0 data-[side=right]:right-0 data-[side=right]:h-full data-[side=right]:w-3/4 data-[side=right]:border-l data-[side=top]:inset-x-0 data-[side=top]:top-0 data-[side=top]:h-auto data-[side=top]:border-b data-[side=left]:sm:max-w-sm data-[side=right]:sm:max-w-sm;\n\t}\n\n\t.cn-sheet-close {\n\t\t@apply absolute top-3 right-3;\n\t}\n\n\t.cn-sheet-header {\n\t\t@apply gap-0.5 p-4;\n\t}\n\n\t.cn-sheet-footer {\n\t\t@apply gap-2 p-4;\n\t}\n\n\t.cn-sheet-title {\n\t\t@apply text-foreground text-sm font-medium;\n\t}\n\n\t.cn-sheet-description {\n\t\t@apply text-muted-foreground text-xs/relaxed;\n\t}\n\n\t/* MARK: Sidebar */\n\t.cn-sidebar-gap {\n\t\t@apply transition-[width] duration-200 ease-linear;\n\t}\n\n\t.cn-sidebar-inner {\n\t\t@apply bg-sidebar group-data-[variant=floating]:ring-sidebar-border group-data-[variant=floating]:rounded-none group-data-[variant=floating]:shadow-sm group-data-[variant=floating]:ring-1;\n\t}\n\n\t.cn-sidebar-rail {\n\t\t@apply hover:after:bg-sidebar-border;\n\t}\n\n\t.cn-sidebar-inset {\n\t\t@apply bg-background md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-none md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2;\n\t}\n\n\t.cn-sidebar-input {\n\t\t@apply bg-background h-8 w-full shadow-none;\n\t}\n\n\t.cn-sidebar-header {\n\t\t@apply gap-2 p-2;\n\t}\n\n\t.cn-sidebar-content {\n\t\t@apply no-scrollbar gap-0;\n\t}\n\n\t.cn-sidebar-footer {\n\t\t@apply gap-2 p-2;\n\t}\n\n\t.cn-sidebar-separator {\n\t\t@apply bg-sidebar-border mx-2;\n\t}\n\n\t.cn-sidebar-group {\n\t\t@apply p-2;\n\t}\n\n\t.cn-sidebar-menu {\n\t\t@apply gap-0;\n\t}\n\n\t.cn-sidebar-group-content {\n\t\t@apply text-xs;\n\t}\n\n\t.cn-sidebar-group-label {\n\t\t@apply text-sidebar-foreground/70 ring-sidebar-ring h-8 rounded-none px-2 text-xs transition-[margin,opacity] duration-200 ease-linear group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0 focus-visible:ring-2 [&>svg]:size-4;\n\t}\n\n\t.cn-sidebar-group-action {\n\t\t@apply text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground absolute top-3.5 right-3 w-5 rounded-none p-0 focus-visible:ring-2 [&>svg]:size-4;\n\t}\n\n\t.cn-sidebar-menu-button {\n\t\t@apply ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground active:bg-sidebar-accent active:text-sidebar-accent-foreground data-active:bg-sidebar-accent data-active:text-sidebar-accent-foreground data-open:hover:bg-sidebar-accent data-open:hover:text-sidebar-accent-foreground gap-2 rounded-none p-2 text-left text-xs transition-[width,height,padding] group-has-data-[sidebar=menu-action]/menu-item:pr-8 group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! focus-visible:ring-2 data-active:font-medium;\n\t}\n\n\t.cn-sidebar-menu-button-variant-default {\n\t\t@apply hover:bg-sidebar-accent hover:text-sidebar-accent-foreground;\n\t}\n\n\t.cn-sidebar-menu-button-variant-outline {\n\t\t@apply bg-background hover:bg-sidebar-accent hover:text-sidebar-accent-foreground shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))];\n\t}\n\n\t.cn-sidebar-menu-button-size-default {\n\t\t@apply h-8 text-xs;\n\t}\n\n\t.cn-sidebar-menu-button-size-sm {\n\t\t@apply h-7 text-xs;\n\t}\n\n\t.cn-sidebar-menu-button-size-lg {\n\t\t@apply h-12 text-xs group-data-[collapsible=icon]:p-0!;\n\t}\n\n\t.cn-sidebar-menu-action {\n\t\t@apply text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground peer-hover/menu-button:text-sidebar-accent-foreground absolute top-1.5 right-1 aspect-square w-5 rounded-none p-0 peer-data-[size=default]/menu-button:top-1.5 peer-data-[size=lg]/menu-button:top-2.5 peer-data-[size=sm]/menu-button:top-1 focus-visible:ring-2 [&>svg]:size-4;\n\t}\n\n\t.cn-sidebar-menu-badge {\n\t\t@apply text-sidebar-foreground peer-hover/menu-button:text-sidebar-accent-foreground peer-data-active/menu-button:text-sidebar-accent-foreground pointer-events-none absolute right-1 flex h-5 min-w-5 rounded-none px-1 text-xs font-medium peer-data-[size=default]/menu-button:top-1.5 peer-data-[size=lg]/menu-button:top-2.5 peer-data-[size=sm]/menu-button:top-1;\n\t}\n\n\t.cn-sidebar-menu-skeleton {\n\t\t@apply h-8 gap-2 rounded-none px-2;\n\t}\n\n\t.cn-sidebar-menu-skeleton-icon {\n\t\t@apply size-4 rounded-none;\n\t}\n\n\t.cn-sidebar-menu-skeleton-text {\n\t\t@apply h-4;\n\t}\n\n\t.cn-sidebar-menu-sub {\n\t\t@apply border-sidebar-border mx-3.5 translate-x-px gap-1 border-l px-2.5 py-0.5 group-data-[collapsible=icon]:hidden;\n\t}\n\n\t.cn-sidebar-menu-sub-button {\n\t\t@apply text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground active:bg-sidebar-accent active:text-sidebar-accent-foreground [&>svg]:text-sidebar-accent-foreground data-active:bg-sidebar-accent data-active:text-sidebar-accent-foreground h-7 gap-2 rounded-none px-2 focus-visible:ring-2 data-[size=md]:text-xs data-[size=sm]:text-xs [&>svg]:size-4;\n\t}\n\n\t/* MARK: Skeleton */\n\t.cn-skeleton {\n\t\t@apply bg-muted rounded-none;\n\t}\n\n\t/* MARK: Slider */\n\t.cn-slider {\n\t\t@apply data-vertical:min-h-40;\n\t}\n\n\t.cn-slider-track {\n\t\t@apply bg-muted rounded-none data-horizontal:h-1 data-horizontal:w-full data-vertical:h-full data-vertical:w-1;\n\t}\n\n\t.cn-slider-range {\n\t\t@apply bg-primary;\n\t}\n\n\t.cn-slider-thumb {\n\t\t@apply border-ring ring-ring/50 relative size-3 rounded-none border bg-white transition-[color,box-shadow] after:absolute after:-inset-2 hover:ring-1 focus-visible:ring-1 focus-visible:outline-hidden active:ring-1;\n\t}\n\n\t/* MARK: Sonner */\n\t.cn-toast {\n\t\t@apply rounded-none;\n\t}\n\n\t/* MARK: Switch */\n\t.cn-switch {\n\t\t@apply data-checked:bg-primary data-unchecked:bg-input focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 dark:data-unchecked:bg-input/80 shrink-0 rounded-full border border-transparent focus-visible:ring-1 aria-invalid:ring-1 data-[size=default]:h-[18.4px] data-[size=default]:w-[32px] data-[size=sm]:h-[14px] data-[size=sm]:w-[24px];\n\t}\n\n\t.cn-switch-thumb {\n\t\t@apply bg-background dark:data-unchecked:bg-foreground dark:data-checked:bg-primary-foreground rounded-full group-data-[size=default]/switch:size-4 group-data-[size=sm]/switch:size-3 group-data-[size=default]/switch:data-checked:translate-x-[calc(100%-2px)] group-data-[size=sm]/switch:data-checked:translate-x-[calc(100%-2px)] group-data-[size=default]/switch:data-unchecked:translate-x-0 group-data-[size=sm]/switch:data-unchecked:translate-x-0;\n\t}\n\n\t/* MARK: Table */\n\t.cn-table-container {\n\t\t@apply relative w-full overflow-x-auto;\n\t}\n\n\t.cn-table {\n\t\t@apply w-full caption-bottom text-xs;\n\t}\n\n\t.cn-table-header {\n\t\t@apply [&_tr]:border-b;\n\t}\n\n\t.cn-table-body {\n\t\t@apply [&_tr:last-child]:border-0;\n\t}\n\n\t.cn-table-footer {\n\t\t@apply bg-muted/50 border-t font-medium [&>tr]:last:border-b-0;\n\t}\n\n\t.cn-table-row {\n\t\t@apply hover:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors;\n\t}\n\n\t.cn-table-head {\n\t\t@apply text-foreground h-10 px-2 text-left align-middle font-medium whitespace-nowrap [&:has([role=checkbox])]:pr-0;\n\t}\n\n\t.cn-table-cell {\n\t\t@apply p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0;\n\t}\n\n\t.cn-table-caption {\n\t\t@apply text-muted-foreground mt-4 text-xs;\n\t}\n\n\t/* MARK: Tabs */\n\t.cn-tabs {\n\t\t@apply gap-2;\n\t}\n\n\t.cn-tabs-list {\n\t\t@apply rounded-none p-[3px] group-data-horizontal/tabs:h-8 data-[variant=line]:rounded-none;\n\t}\n\n\t.cn-tabs-trigger {\n\t\t@apply gap-1.5 rounded-none border border-transparent px-1.5 py-0.5 text-xs font-medium group-data-vertical/tabs:py-[calc(--spacing(1.25))] [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-tabs-content {\n\t\t@apply text-xs/relaxed;\n\t}\n\n\t/* MARK: Textarea */\n\t.cn-textarea {\n\t\t@apply border-input dark:bg-input/30 focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 disabled:bg-input/50 dark:disabled:bg-input/80 rounded-none border bg-transparent px-2.5 py-2 text-xs transition-colors focus-visible:ring-1 aria-invalid:ring-1 md:text-xs;\n\t}\n\n\t/* MARK: Toggle */\n\t.cn-toggle {\n\t\t@apply hover:text-foreground aria-pressed:bg-muted focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive data-[state=on]:bg-muted gap-1 rounded-none text-xs font-medium transition-all [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-toggle-variant-default {\n\t\t@apply bg-transparent;\n\t}\n\n\t.cn-toggle-variant-outline {\n\t\t@apply border-input hover:bg-muted border bg-transparent;\n\t}\n\n\t.cn-toggle-size-default {\n\t\t@apply h-8 min-w-8 px-2;\n\t}\n\n\t.cn-toggle-size-sm {\n\t\t@apply h-7 min-w-7 rounded-none px-1.5;\n\t}\n\n\t.cn-toggle-size-lg {\n\t\t@apply h-9 min-w-9 px-2.5;\n\t}\n\n\t/* MARK: Toggle Group */\n\t.cn-toggle-group {\n\t\t@apply rounded-none data-[size=sm]:rounded-none;\n\t}\n\n\t.cn-toggle-group-item {\n\t\t@apply group-data-[spacing=0]/toggle-group:rounded-none group-data-[spacing=0]/toggle-group:px-2 group-data-horizontal/toggle-group:data-[spacing=0]:first:rounded-none group-data-vertical/toggle-group:data-[spacing=0]:first:rounded-none group-data-horizontal/toggle-group:data-[spacing=0]:last:rounded-none group-data-vertical/toggle-group:data-[spacing=0]:last:rounded-none;\n\t}\n\n\t/* MARK: Tooltip */\n\t.cn-tooltip-content {\n\t\t@apply data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 inline-flex items-center gap-1.5 rounded-none px-3 py-1.5 text-xs has-data-[slot=kbd]:pr-1.5 **:data-[slot=kbd]:relative **:data-[slot=kbd]:isolate **:data-[slot=kbd]:z-50 **:data-[slot=kbd]:rounded-none;\n\t}\n\n\t.cn-tooltip-content-logical {\n\t\t@apply data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2;\n\t}\n\n\t.cn-tooltip-arrow {\n\t\t@apply size-2.5 translate-y-[calc(-50%-2px)] rotate-45 rounded-none;\n\t}\n\n\t.cn-tooltip-arrow-logical {\n\t\t@apply data-[side=inline-end]:top-1/2! data-[side=inline-end]:-left-1 data-[side=inline-end]:-translate-y-1/2 data-[side=inline-start]:top-1/2! data-[side=inline-start]:-right-1 data-[side=inline-start]:-translate-y-1/2;\n\t}\n\n\t/* MARK: Input Group */\n\t.cn-input-group {\n\t\t@apply border-input dark:bg-input/30 has-[[data-slot=input-group-control]:focus-visible]:border-ring has-[[data-slot=input-group-control]:focus-visible]:ring-ring/50 has-[[data-slot][aria-invalid=true]]:ring-destructive/20 has-[[data-slot][aria-invalid=true]]:border-destructive dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40 has-disabled:bg-input/50 dark:has-disabled:bg-input/80 h-8 rounded-none border transition-colors in-data-[slot=combobox-content]:focus-within:border-inherit in-data-[slot=combobox-content]:focus-within:ring-0 has-disabled:opacity-50 has-[[data-slot=input-group-control]:focus-visible]:ring-1 has-[[data-slot][aria-invalid=true]]:ring-1 has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>[data-align=block-end]]:[&>input]:pt-3 has-[>[data-align=block-start]]:[&>input]:pb-3 has-[>[data-align=inline-end]]:[&>input]:pr-1.5 has-[>[data-align=inline-start]]:[&>input]:pl-1.5;\n\t}\n\n\t.cn-input-group-addon {\n\t\t@apply text-muted-foreground h-auto gap-2 py-1.5 text-xs font-medium group-data-[disabled=true]/input-group:opacity-50 [&>kbd]:rounded-none [&>svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-input-group-addon-align-inline-start {\n\t\t@apply pl-2 has-[>button]:ml-[-0.3rem] has-[>kbd]:ml-[-0.15rem];\n\t}\n\n\t.cn-input-group-addon-align-inline-end {\n\t\t@apply pr-2 has-[>button]:mr-[-0.3rem] has-[>kbd]:mr-[-0.15rem];\n\t}\n\n\t.cn-input-group-addon-align-block-start {\n\t\t@apply px-2.5 pt-2 group-has-[>input]/input-group:pt-2 [.border-b]:pb-2;\n\t}\n\n\t.cn-input-group-addon-align-block-end {\n\t\t@apply px-2.5 pb-2 group-has-[>input]/input-group:pb-2 [.border-t]:pt-2;\n\t}\n\n\t.cn-input-group-button {\n\t\t@apply gap-2 text-xs;\n\t}\n\n\t.cn-input-group-button-size-xs {\n\t\t@apply h-6 gap-1 rounded-none px-1.5 [&>svg:not([class*='size-'])]:size-3.5;\n\t}\n\n\t.cn-input-group-button-size-icon-xs {\n\t\t@apply size-6 rounded-none p-0 has-[>svg]:p-0;\n\t}\n\n\t.cn-input-group-button-size-sm {\n\t\t@apply gap-1;\n\t}\n\n\t.cn-input-group-button-size-icon-sm {\n\t\t@apply size-7 p-0 has-[>svg]:p-0;\n\t}\n\n\t.cn-input-group-text {\n\t\t@apply text-muted-foreground gap-2 text-xs [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-input-group-input {\n\t\t@apply rounded-none border-0 bg-transparent shadow-none ring-0 focus-visible:ring-0 disabled:bg-transparent aria-invalid:ring-0 dark:bg-transparent dark:disabled:bg-transparent;\n\t}\n\n\t.cn-input-group-textarea {\n\t\t@apply rounded-none border-0 bg-transparent py-2 shadow-none ring-0 focus-visible:ring-0 disabled:bg-transparent aria-invalid:ring-0 dark:bg-transparent dark:disabled:bg-transparent;\n\t}\n\n\t/* MARK: Menu Translucent */\n\t.cn-menu-translucent {\n\t\t@apply bg-popover/70 **:data-[slot$=-item]:focus:bg-foreground/10 **:data-[slot$=-item]:data-highlighted:bg-foreground/10 **:data-[slot$=-separator]:bg-foreground/5 **:data-[slot$=-trigger]:focus:bg-foreground/10 **:data-[slot$=-trigger]:aria-expanded:bg-foreground/10! **:data-[variant=destructive]:focus:bg-foreground/10! **:data-[variant=destructive]:text-accent-foreground! **:data-[variant=destructive]:**:text-accent-foreground! relative animate-none! before:pointer-events-none before:absolute before:inset-0 before:-z-1 before:rounded-[inherit] before:backdrop-blur-2xl before:backdrop-saturate-150;\n\t}\n}\n"
  },
  {
    "path": "docs/src/lib/registry/styles/style-maia.css",
    "content": ".style-maia {\n\t/* MARK: Accordion */\n\t.cn-accordion {\n\t\t@apply overflow-hidden rounded-2xl border;\n\t}\n\n\t.cn-accordion-item {\n\t\t@apply data-open:bg-muted/50 not-last:border-b;\n\t}\n\n\t.cn-accordion-trigger {\n\t\t@apply **:data-[slot=accordion-trigger-icon]:text-muted-foreground gap-6 p-4 text-left text-sm font-medium hover:underline **:data-[slot=accordion-trigger-icon]:ml-auto **:data-[slot=accordion-trigger-icon]:size-4;\n\t}\n\n\t.cn-accordion-content {\n\t\t@apply data-open:animate-accordion-down data-closed:animate-accordion-up px-4 text-sm;\n\t}\n\n\t.cn-accordion-content-inner {\n\t\t@apply pt-0 pb-4;\n\t}\n\n\t/* MARK: Alert Dialog */\n\t.cn-alert-dialog-overlay {\n\t\t@apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 bg-black/80 duration-100 supports-backdrop-filter:backdrop-blur-xs;\n\t}\n\n\t.cn-alert-dialog-content {\n\t\t@apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 bg-background ring-foreground/5 gap-6 rounded-4xl p-6 ring-1 duration-100 data-[size=default]:max-w-xs data-[size=sm]:max-w-xs data-[size=default]:sm:max-w-md;\n\t}\n\n\t.cn-alert-dialog-header {\n\t\t@apply grid grid-rows-[auto_1fr] place-items-center gap-1.5 text-center has-data-[slot=alert-dialog-media]:grid-rows-[auto_auto_1fr] has-data-[slot=alert-dialog-media]:gap-x-6 sm:group-data-[size=default]/alert-dialog-content:place-items-start sm:group-data-[size=default]/alert-dialog-content:text-left sm:group-data-[size=default]/alert-dialog-content:has-data-[slot=alert-dialog-media]:grid-rows-[auto_1fr];\n\t}\n\n\t.cn-alert-dialog-media {\n\t\t@apply bg-muted mb-2 inline-flex size-16 items-center justify-center rounded-full sm:group-data-[size=default]/alert-dialog-content:row-span-2 *:[svg:not([class*='size-'])]:size-8;\n\t}\n\n\t.cn-alert-dialog-title {\n\t\t@apply text-lg font-medium sm:group-data-[size=default]/alert-dialog-content:group-has-data-[slot=alert-dialog-media]/alert-dialog-content:col-start-2;\n\t}\n\n\t.cn-alert-dialog-description {\n\t\t@apply text-muted-foreground *:[a]:hover:text-foreground text-sm text-balance md:text-pretty *:[a]:underline *:[a]:underline-offset-3;\n\t}\n\n\t/* MARK: Alert */\n\t.cn-alert {\n\t\t@apply grid gap-0.5 rounded-lg border px-4 py-3 text-left text-sm has-data-[slot=alert-action]:relative has-data-[slot=alert-action]:pr-18 has-[>svg]:grid-cols-[auto_1fr] has-[>svg]:gap-x-2.5 *:[svg]:row-span-2 *:[svg]:translate-y-0.5 *:[svg]:text-current *:[svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-alert-variant-default {\n\t\t@apply bg-card text-card-foreground;\n\t}\n\n\t.cn-alert-variant-destructive {\n\t\t@apply text-destructive bg-card *:data-[slot=alert-description]:text-destructive/90 *:[svg]:text-current;\n\t}\n\n\t.cn-alert-title {\n\t\t@apply font-medium group-has-[>svg]/alert:col-start-2;\n\t}\n\n\t.cn-alert-description {\n\t\t@apply text-muted-foreground text-sm text-balance md:text-pretty [&_p:not(:last-child)]:mb-4;\n\t}\n\n\t.cn-alert-action {\n\t\t@apply absolute top-2.5 right-3;\n\t}\n\n\t/* MARK: Avatar */\n\t.cn-avatar {\n\t\t@apply size-8 rounded-full after:rounded-full data-[size=lg]:size-10 data-[size=sm]:size-6;\n\t}\n\n\t.cn-avatar-fallback {\n\t\t@apply bg-muted text-muted-foreground rounded-full;\n\t}\n\n\t.cn-avatar-image {\n\t\t@apply rounded-full;\n\t}\n\n\t.cn-avatar-badge {\n\t\t@apply bg-primary text-primary-foreground ring-background;\n\t}\n\n\t.cn-avatar-group-count {\n\t\t@apply bg-muted text-muted-foreground size-8 rounded-full text-sm group-has-data-[size=lg]/avatar-group:size-10 group-has-data-[size=sm]/avatar-group:size-6 [&>svg]:size-4 group-has-data-[size=lg]/avatar-group:[&>svg]:size-5 group-has-data-[size=sm]/avatar-group:[&>svg]:size-3;\n\t}\n\n\t/* MARK: Badge */\n\t.cn-badge {\n\t\t@apply h-5 gap-1 rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium transition-all has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&>svg]:size-3!;\n\t}\n\n\t.cn-badge-variant-default {\n\t\t@apply bg-primary text-primary-foreground [a]:hover:bg-primary/80;\n\t}\n\n\t.cn-badge-variant-secondary {\n\t\t@apply bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80;\n\t}\n\n\t.cn-badge-variant-outline {\n\t\t@apply border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground bg-input/30;\n\t}\n\n\t.cn-badge-variant-destructive {\n\t\t@apply bg-destructive/10 [a]:hover:bg-destructive/20 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 text-destructive dark:bg-destructive/20;\n\t}\n\n\t.cn-badge-variant-ghost {\n\t\t@apply hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50;\n\t}\n\n\t.cn-badge-variant-link {\n\t\t@apply text-primary underline-offset-4 hover:underline;\n\t}\n\n\t/* MARK: Breadcrumb */\n\t.cn-breadcrumb-list {\n\t\t@apply text-muted-foreground gap-1.5 text-sm sm:gap-2.5;\n\t}\n\n\t.cn-breadcrumb-item {\n\t\t@apply gap-1.5;\n\t}\n\n\t.cn-breadcrumb-link {\n\t\t@apply hover:text-foreground transition-colors;\n\t}\n\n\t.cn-breadcrumb-page {\n\t\t@apply text-foreground font-normal;\n\t}\n\n\t.cn-breadcrumb-separator {\n\t\t@apply [&>svg]:size-3.5;\n\t}\n\n\t.cn-breadcrumb-ellipsis {\n\t\t@apply size-5 [&>svg]:size-4;\n\t}\n\n\t/* MARK: Button */\n\t.cn-button {\n\t\t@apply focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 rounded-4xl border border-transparent bg-clip-padding text-sm font-medium focus-visible:ring-[3px] active:translate-y-px aria-invalid:ring-[3px] [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-button-variant-default {\n\t\t@apply bg-primary text-primary-foreground hover:bg-primary/80;\n\t}\n\n\t.cn-button-variant-outline {\n\t\t@apply border-border bg-input/30 hover:bg-input/50 hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground;\n\t}\n\n\t.cn-button-variant-secondary {\n\t\t@apply bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground;\n\t}\n\n\t.cn-button-variant-ghost {\n\t\t@apply hover:bg-muted hover:text-foreground dark:hover:bg-muted/50 aria-expanded:bg-muted aria-expanded:text-foreground;\n\t}\n\n\t.cn-button-variant-destructive {\n\t\t@apply bg-destructive/10 hover:bg-destructive/20 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/20 text-destructive focus-visible:border-destructive/40 dark:hover:bg-destructive/30;\n\t}\n\n\t.cn-button-variant-link {\n\t\t@apply text-primary underline-offset-4 hover:underline;\n\t}\n\n\t.cn-button-size-xs {\n\t\t@apply h-6 gap-1 px-2.5 text-xs has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2 [&_svg:not([class*='size-'])]:size-3;\n\t}\n\n\t.cn-button-size-sm {\n\t\t@apply h-8 gap-1 px-3 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2;\n\t}\n\n\t.cn-button-size-default {\n\t\t@apply h-9 gap-1.5 px-3 has-data-[icon=inline-end]:pr-2.5 has-data-[icon=inline-start]:pl-2.5;\n\t}\n\n\t.cn-button-size-lg {\n\t\t@apply h-10 gap-1.5 px-4 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3;\n\t}\n\n\t.cn-button-size-icon-xs {\n\t\t@apply size-6 [&_svg:not([class*='size-'])]:size-3;\n\t}\n\n\t.cn-button-size-icon-sm {\n\t\t@apply size-8;\n\t}\n\n\t.cn-button-size-icon {\n\t\t@apply size-9;\n\t}\n\n\t.cn-button-size-icon-lg {\n\t\t@apply size-10;\n\t}\n\n\t/* MARK: Button Group */\n\t.cn-button-group {\n\t\t@apply has-[>[data-slot=button-group]]:gap-2 has-[select[aria-hidden=true]:last-child]:[&>[data-slot=select-trigger]:last-of-type]:rounded-r-4xl;\n\t}\n\n\t.cn-button-group-orientation-horizontal {\n\t\t@apply [&>[data-slot]:not(:has(~[data-slot]))]:rounded-r-4xl!;\n\t}\n\n\t.cn-button-group-orientation-vertical {\n\t\t@apply [&>[data-slot]:not(:has(~[data-slot]))]:rounded-b-4xl!;\n\t}\n\n\t.cn-button-group-text {\n\t\t@apply bg-muted gap-2 rounded-4xl border px-2.5 text-sm font-medium [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-button-group-separator {\n\t\t@apply bg-input;\n\t}\n\n\t/* MARK: Calendar */\n\t.cn-calendar {\n\t\t@apply p-3 [--cell-radius:var(--radius-4xl)] [--cell-size:--spacing(8)];\n\t}\n\n\t.cn-calendar-dropdown-root {\n\t\t@apply has-focus:border-ring border-input has-focus:ring-ring/50 border has-focus:ring-[3px];\n\t}\n\n\t.cn-calendar-caption-label {\n\t\t@apply h-8 pr-2 pl-3;\n\t}\n\n\t/* MARK: Card */\n\t.cn-card {\n\t\t@apply ring-foreground/10 bg-card text-card-foreground gap-6 overflow-hidden rounded-2xl py-6 text-sm ring-1 has-[>img:first-child]:pt-0 data-[size=sm]:gap-4 data-[size=sm]:py-4 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl;\n\t}\n\n\t.cn-card-header {\n\t\t@apply gap-2 rounded-t-xl px-6 group-data-[size=sm]/card:px-4 [.border-b]:pb-6 group-data-[size=sm]/card:[.border-b]:pb-4;\n\t}\n\n\t.cn-card-title {\n\t\t@apply text-base font-medium;\n\t}\n\n\t.cn-card-description {\n\t\t@apply text-muted-foreground text-sm;\n\t}\n\n\t.cn-card-content {\n\t\t@apply px-6 group-data-[size=sm]/card:px-4;\n\t}\n\n\t.cn-card-footer {\n\t\t@apply rounded-b-xl px-6 group-data-[size=sm]/card:px-4 [.border-t]:pt-6 group-data-[size=sm]/card:[.border-t]:pt-4;\n\t}\n\n\t/* MARK: Carousel */\n\t.cn-carousel-previous {\n\t\t@apply rounded-full;\n\t}\n\n\t.cn-carousel-next {\n\t\t@apply rounded-full;\n\t}\n\n\t/* MARK: Chart */\n\t.cn-chart-tooltip {\n\t\t@apply border-border/50 bg-background gap-1.5 rounded-lg border px-2.5 py-1.5 text-xs shadow-xl;\n\t}\n\n\t/* MARK: Checkbox */\n\t.cn-checkbox {\n\t\t@apply border-input dark:bg-input/30 data-checked:bg-primary data-checked:text-primary-foreground dark:data-checked:bg-primary data-checked:border-primary aria-invalid:aria-checked:border-primary aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 flex size-4 items-center justify-center rounded-[6px] border transition-shadow group-has-disabled/field:opacity-50 focus-visible:ring-[3px] aria-invalid:ring-[3px];\n\t}\n\n\t.cn-checkbox-indicator {\n\t\t@apply [&>svg]:size-3.5;\n\t}\n\n\t/* MARK: Combobox */\n\t.cn-combobox-content {\n\t\t@apply bg-popover text-popover-foreground data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/5 *:data-[slot=input-group]:bg-input/30 max-h-72 min-w-36 overflow-hidden rounded-2xl shadow-2xl ring-1 duration-100 *:data-[slot=input-group]:m-1 *:data-[slot=input-group]:mb-0 *:data-[slot=input-group]:h-9 *:data-[slot=input-group]:border-none *:data-[slot=input-group]:shadow-none;\n\t}\n\n\t.cn-combobox-content-logical {\n\t\t@apply data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2;\n\t}\n\n\t.cn-combobox-label {\n\t\t@apply text-muted-foreground px-3.5 py-2.5 text-xs;\n\t}\n\n\t.cn-combobox-item {\n\t\t@apply data-highlighted:bg-accent data-highlighted:text-accent-foreground not-data-[variant=destructive]:data-highlighted:**:text-accent-foreground gap-2.5 rounded-xl py-2 pr-8 pl-3 text-sm [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-combobox-item-indicator {\n\t\t@apply pointer-events-none absolute right-2 flex size-4 items-center justify-center;\n\t}\n\n\t.cn-combobox-empty {\n\t\t@apply text-muted-foreground hidden w-full justify-center py-2 text-center text-sm group-data-empty/combobox-content:flex;\n\t}\n\n\t.cn-combobox-list {\n\t\t@apply no-scrollbar max-h-[min(calc(--spacing(72)---spacing(9)),calc(var(--available-height)---spacing(9)))] scroll-py-1 overflow-y-auto p-1 data-empty:p-0;\n\t}\n\n\t.cn-combobox-item-text {\n\t\t@apply flex flex-1 gap-2;\n\t}\n\n\t.cn-combobox-separator {\n\t\t@apply bg-border/50 -mx-1 my-1 h-px;\n\t}\n\n\t.cn-combobox-trigger {\n\t\t@apply [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-combobox-trigger-icon {\n\t\t@apply text-muted-foreground size-4;\n\t}\n\n\t.cn-combobox-chips {\n\t\t@apply bg-input/30 border-input focus-within:border-ring focus-within:ring-ring/50 has-aria-invalid:ring-destructive/20 dark:has-aria-invalid:ring-destructive/40 has-aria-invalid:border-destructive dark:has-aria-invalid:border-destructive/50 flex min-h-9 flex-wrap items-center gap-1.5 rounded-4xl border bg-clip-padding px-2.5 py-1.5 text-sm transition-colors focus-within:ring-[3px] has-aria-invalid:ring-[3px] has-data-[slot=combobox-chip]:px-1.5;\n\t}\n\n\t.cn-combobox-chip {\n\t\t@apply bg-muted-foreground/10 text-foreground flex h-[calc(--spacing(5.5))] w-fit items-center justify-center gap-1 rounded-4xl px-2 text-xs font-medium whitespace-nowrap has-data-[slot=combobox-chip-remove]:pr-0;\n\t}\n\n\t.cn-combobox-chip-remove {\n\t\t@apply -ml-1 opacity-50 hover:opacity-100;\n\t}\n\n\t/* MARK: Command */\n\t.cn-command {\n\t\t@apply bg-popover text-popover-foreground rounded-4xl p-1;\n\t}\n\n\t.cn-command-dialog {\n\t\t@apply rounded-4xl! p-0;\n\t}\n\n\t.cn-command-input-wrapper {\n\t\t@apply p-1 pb-0;\n\t}\n\n\t.cn-command-input-group {\n\t\t@apply bg-input/30 h-9;\n\t}\n\n\t.cn-command-input-icon {\n\t\t@apply size-4 shrink-0 opacity-50;\n\t}\n\n\t.cn-command-input {\n\t\t@apply w-full text-sm;\n\t}\n\n\t.cn-command-list {\n\t\t@apply no-scrollbar max-h-72 scroll-py-1 outline-none;\n\t}\n\n\t.cn-command-empty {\n\t\t@apply py-6 text-center text-sm;\n\t}\n\n\t.cn-command-group {\n\t\t@apply text-foreground **:[[cmdk-group-heading]]:text-muted-foreground overflow-hidden p-1 **:[[cmdk-group-heading]]:px-3 **:[[cmdk-group-heading]]:py-2 **:[[cmdk-group-heading]]:text-xs **:[[cmdk-group-heading]]:font-medium;\n\t}\n\n\t.cn-command-separator {\n\t\t@apply bg-border/50 my-1 h-px;\n\t}\n\n\t.cn-command-item {\n\t\t@apply data-selected:bg-muted data-selected:text-foreground data-selected:*:[svg]:text-foreground relative flex cursor-default items-center gap-2 rounded-lg px-3 py-2 text-sm outline-hidden select-none in-data-[slot=dialog-content]:rounded-2xl [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-command-shortcut {\n\t\t@apply text-muted-foreground group-data-selected/command-item:text-foreground ml-auto text-xs tracking-widest;\n\t}\n\n\t/* MARK: Context Menu */\n\t.cn-context-menu-content {\n\t\t@apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/5 bg-popover text-popover-foreground min-w-48 rounded-2xl p-1 shadow-2xl ring-1 duration-100;\n\t}\n\n\t.cn-context-menu-content-logical {\n\t\t@apply data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2;\n\t}\n\n\t.cn-context-menu-item {\n\t\t@apply focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:text-destructive focus:*:[svg]:text-accent-foreground gap-2.5 rounded-xl px-3 py-2 text-sm data-inset:pl-9.5 [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-context-menu-checkbox-item {\n\t\t@apply focus:bg-accent focus:text-accent-foreground gap-2 rounded-xl py-2 pr-8 pl-3 text-sm data-inset:pl-9.5 [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-context-menu-radio-item {\n\t\t@apply focus:bg-accent focus:text-accent-foreground gap-2 rounded-xl py-2 pr-8 pl-3 text-sm data-inset:pl-9.5 [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-context-menu-item-indicator {\n\t\t@apply absolute right-2;\n\t}\n\n\t.cn-context-menu-label {\n\t\t@apply text-muted-foreground px-3 py-2.5 text-xs data-inset:pl-9.5;\n\t}\n\n\t.cn-context-menu-separator {\n\t\t@apply bg-border/50 -mx-1 my-1 h-px;\n\t}\n\n\t.cn-context-menu-shortcut {\n\t\t@apply text-muted-foreground group-focus/context-menu-item:text-accent-foreground ml-auto text-xs tracking-widest;\n\t}\n\n\t.cn-context-menu-sub-trigger {\n\t\t@apply focus:bg-accent focus:text-accent-foreground data-open:bg-accent data-open:text-accent-foreground rounded-xl px-3 py-2 text-sm data-inset:pl-9.5 [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-context-menu-sub-content {\n\t\t@apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 bg-popover text-popover-foreground min-w-32 rounded-2xl border p-1 shadow-lg duration-100;\n\t}\n\n\t.cn-context-menu-subcontent {\n\t\t@apply shadow-lg;\n\t}\n\n\t/* MARK: Dialog */\n\t.cn-dialog-overlay {\n\t\t@apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 bg-black/80 duration-100 supports-backdrop-filter:backdrop-blur-xs;\n\t}\n\n\t.cn-dialog-content {\n\t\t@apply bg-background data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 ring-foreground/5 grid max-w-[calc(100%-2rem)] gap-6 rounded-4xl p-6 text-sm ring-1 duration-100 sm:max-w-md;\n\t}\n\n\t.cn-dialog-close {\n\t\t@apply absolute top-4 right-4;\n\t}\n\n\t.cn-dialog-header {\n\t\t@apply gap-2;\n\t}\n\n\t.cn-dialog-footer {\n\t\t@apply gap-2;\n\t}\n\n\t.cn-dialog-title {\n\t\t@apply text-base leading-none font-medium;\n\t}\n\n\t.cn-dialog-description {\n\t\t@apply text-muted-foreground *:[a]:hover:text-foreground text-sm *:[a]:underline *:[a]:underline-offset-3;\n\t}\n\n\t/* MARK: Drawer */\n\t.cn-drawer-overlay {\n\t\t@apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 bg-black/80 supports-backdrop-filter:backdrop-blur-xs;\n\t}\n\n\t.cn-drawer-content {\n\t\t@apply before:bg-background before:border-border relative flex h-auto flex-col bg-transparent p-4 text-sm before:absolute before:inset-2 before:-z-10 before:rounded-4xl before:border data-[vaul-drawer-direction=bottom]:inset-x-0 data-[vaul-drawer-direction=bottom]:bottom-0 data-[vaul-drawer-direction=bottom]:mt-24 data-[vaul-drawer-direction=bottom]:max-h-[80vh] data-[vaul-drawer-direction=left]:inset-y-0 data-[vaul-drawer-direction=left]:left-0 data-[vaul-drawer-direction=left]:w-3/4 data-[vaul-drawer-direction=right]:inset-y-0 data-[vaul-drawer-direction=right]:right-0 data-[vaul-drawer-direction=right]:w-3/4 data-[vaul-drawer-direction=top]:inset-x-0 data-[vaul-drawer-direction=top]:top-0 data-[vaul-drawer-direction=top]:mb-24 data-[vaul-drawer-direction=top]:max-h-[80vh] data-[vaul-drawer-direction=left]:sm:max-w-sm data-[vaul-drawer-direction=right]:sm:max-w-sm;\n\t}\n\n\t.cn-drawer-handle {\n\t\t@apply bg-muted mx-auto mt-4 hidden h-1.5 w-[100px] shrink-0 rounded-full group-data-[vaul-drawer-direction=bottom]/drawer-content:block;\n\t}\n\n\t.cn-drawer-header {\n\t\t@apply gap-0.5 p-4 group-data-[vaul-drawer-direction=bottom]/drawer-content:text-center group-data-[vaul-drawer-direction=top]/drawer-content:text-center md:gap-1.5 md:text-left;\n\t}\n\n\t.cn-drawer-title {\n\t\t@apply text-foreground text-base font-medium;\n\t}\n\n\t.cn-drawer-description {\n\t\t@apply text-muted-foreground text-sm;\n\t}\n\n\t.cn-drawer-footer {\n\t\t@apply gap-2 p-4;\n\t}\n\n\t/* MARK: Dropdown Menu */\n\t.cn-dropdown-menu-content {\n\t\t@apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/5 bg-popover text-popover-foreground dark:ring-foreground/10 min-w-48 rounded-2xl p-1 shadow-2xl ring-1 duration-100;\n\t}\n\n\t.cn-dropdown-menu-content-logical {\n\t\t@apply data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2;\n\t}\n\n\t.cn-dropdown-menu-item {\n\t\t@apply focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:text-destructive not-data-[variant=destructive]:focus:**:text-accent-foreground gap-2.5 rounded-xl px-3 py-2 text-sm data-inset:pl-9.5 [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-dropdown-menu-checkbox-item {\n\t\t@apply focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground gap-2.5 rounded-xl py-2 pr-8 pl-3 text-sm data-inset:pl-9.5 [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-dropdown-menu-radio-item {\n\t\t@apply focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground gap-2.5 rounded-xl py-2 pr-8 pl-3 text-sm data-inset:pl-9.5 [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-dropdown-menu-item-indicator {\n\t\t@apply absolute right-2 flex items-center justify-center;\n\t}\n\n\t.cn-dropdown-menu-label {\n\t\t@apply text-muted-foreground px-3 py-2.5 text-xs data-inset:pl-9.5;\n\t}\n\n\t.cn-dropdown-menu-separator {\n\t\t@apply bg-border/50 -mx-1 my-1 h-px;\n\t}\n\n\t.cn-dropdown-menu-shortcut {\n\t\t@apply text-muted-foreground group-focus/dropdown-menu-item:text-accent-foreground ml-auto text-xs tracking-widest;\n\t}\n\n\t.cn-dropdown-menu-sub-trigger {\n\t\t@apply focus:bg-accent focus:text-accent-foreground data-open:bg-accent data-open:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground gap-2 rounded-xl px-3 py-2 text-sm data-inset:pl-9.5 [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-dropdown-menu-sub-content {\n\t\t@apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/5 bg-popover text-popover-foreground min-w-36 rounded-2xl p-1 shadow-2xl ring-1 duration-100;\n\t}\n\n\t.cn-dropdown-menu-subcontent {\n\t\t@apply shadow-lg;\n\t}\n\n\t/* MARK: Empty */\n\t.cn-empty {\n\t\t@apply gap-4 rounded-lg border-dashed p-12;\n\t}\n\n\t.cn-empty-header {\n\t\t@apply gap-2;\n\t}\n\n\t.cn-empty-media {\n\t\t@apply mb-2;\n\t}\n\n\t.cn-empty-media-default {\n\t\t@apply bg-transparent;\n\t}\n\n\t.cn-empty-media-icon {\n\t\t@apply bg-muted text-foreground flex size-10 shrink-0 items-center justify-center rounded-lg [&_svg:not([class*='size-'])]:size-6;\n\t}\n\n\t.cn-empty-title {\n\t\t@apply text-lg font-medium tracking-tight;\n\t}\n\n\t.cn-empty-description {\n\t\t@apply text-sm/relaxed;\n\t}\n\n\t.cn-empty-content {\n\t\t@apply gap-4 text-sm;\n\t}\n\n\t/* MARK: Field */\n\t.cn-field-set {\n\t\t@apply gap-6 has-[>[data-slot=checkbox-group]]:gap-3 has-[>[data-slot=radio-group]]:gap-3;\n\t}\n\n\t.cn-field-legend {\n\t\t@apply mb-3 font-medium data-[variant=label]:text-sm data-[variant=legend]:text-base;\n\t}\n\n\t.cn-field-group {\n\t\t@apply gap-7 data-[slot=checkbox-group]:gap-3 *:data-[slot=field-group]:gap-4;\n\t}\n\n\t.cn-field {\n\t\t@apply data-[invalid=true]:text-destructive gap-3;\n\t}\n\n\t.cn-field-content {\n\t\t@apply gap-1;\n\t}\n\n\t.cn-field-label {\n\t\t@apply has-data-checked:bg-primary/5 has-data-checked:border-primary/30 dark:has-data-checked:border-primary/20 dark:has-data-checked:bg-primary/10 gap-2 group-data-[disabled=true]/field:opacity-50 has-[>[data-slot=field]]:rounded-xl has-[>[data-slot=field]]:border *:data-[slot=field]:p-4;\n\t}\n\n\t.cn-field-title {\n\t\t@apply gap-2 text-sm font-medium group-data-[disabled=true]/field:opacity-50;\n\t}\n\n\t.cn-field-description {\n\t\t@apply text-muted-foreground text-left text-sm [[data-variant=legend]+&]:-mt-1.5;\n\t}\n\n\t.cn-field-separator {\n\t\t@apply -my-2 h-5 text-sm group-data-[variant=outline]/field-group:-mb-2;\n\t}\n\n\t.cn-field-separator-content {\n\t\t@apply text-muted-foreground px-2;\n\t}\n\n\t.cn-field-error {\n\t\t@apply text-destructive text-sm;\n\t}\n\n\t/* MARK: Hover Card */\n\t.cn-hover-card-content {\n\t\t@apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/5 bg-popover text-popover-foreground w-72 rounded-2xl p-4 text-sm shadow-2xl ring-1 duration-100;\n\t}\n\n\t.cn-hover-card-content-logical {\n\t\t@apply data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2;\n\t}\n\n\t/* MARK: Input */\n\t.cn-input {\n\t\t@apply bg-input/30 border-input focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 h-9 rounded-4xl border px-3 py-1 text-base transition-colors file:h-7 file:text-sm file:font-medium focus-visible:ring-[3px] aria-invalid:ring-[3px] md:text-sm;\n\t}\n\n\t/* MARK: Input OTP */\n\t.cn-input-otp {\n\t\t@apply gap-2;\n\t}\n\n\t.cn-input-otp-group {\n\t\t@apply has-aria-invalid:ring-destructive/20 dark:has-aria-invalid:ring-destructive/40 has-aria-invalid:border-destructive rounded-4xl has-aria-invalid:ring-[3px];\n\t}\n\n\t.cn-input-otp-slot {\n\t\t@apply bg-input/30 border-input data-[active=true]:border-ring data-[active=true]:ring-ring/50 data-[active=true]:aria-invalid:ring-destructive/20 dark:data-[active=true]:aria-invalid:ring-destructive/40 aria-invalid:border-destructive data-[active=true]:aria-invalid:border-destructive size-9 border-y border-r text-sm transition-all outline-none first:rounded-l-4xl first:border-l last:rounded-r-4xl data-[active=true]:ring-[3px];\n\t}\n\n\t.cn-input-otp-caret-line {\n\t\t@apply animate-caret-blink bg-foreground h-4 w-px duration-1000;\n\t}\n\n\t.cn-input-otp-separator {\n\t\t@apply [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t/* MARK: Item */\n\t.cn-item {\n\t\t@apply [a]:hover:bg-muted rounded-2xl border text-sm;\n\t}\n\n\t.cn-item-variant-default {\n\t\t@apply border-transparent;\n\t}\n\n\t.cn-item-variant-outline {\n\t\t@apply border-border;\n\t}\n\n\t.cn-item-variant-muted {\n\t\t@apply bg-muted/50 border-transparent;\n\t}\n\n\t.cn-item-size-default {\n\t\t@apply gap-3.5 px-4 py-3.5;\n\t}\n\n\t.cn-item-size-sm {\n\t\t@apply gap-3.5 px-3.5 py-3;\n\t}\n\n\t.cn-item-size-xs {\n\t\t@apply gap-2.5 px-3 py-2.5 in-data-[slot=dropdown-menu-content]:p-0;\n\t}\n\n\t.cn-item-media {\n\t\t@apply gap-2 group-has-data-[slot=item-description]/item:translate-y-0.5 group-has-data-[slot=item-description]/item:self-start;\n\t}\n\n\t.cn-item-media-variant-default {\n\t\t@apply bg-transparent;\n\t}\n\n\t.cn-item-media-variant-icon {\n\t\t@apply [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-item-media-variant-image {\n\t\t@apply size-10 overflow-hidden rounded-lg group-data-[size=sm]/item:size-8 group-data-[size=xs]/item:size-6 group-data-[size=xs]/item:rounded-md [&_img]:size-full [&_img]:object-cover;\n\t}\n\n\t.cn-item-content {\n\t\t@apply gap-1 group-data-[size=xs]/item:gap-0.5;\n\t}\n\n\t.cn-item-title {\n\t\t@apply gap-2 text-sm leading-snug font-medium underline-offset-4;\n\t}\n\n\t.cn-item-description {\n\t\t@apply text-muted-foreground text-left text-sm;\n\t}\n\n\t.cn-item-actions {\n\t\t@apply gap-2;\n\t}\n\n\t.cn-item-header {\n\t\t@apply gap-2;\n\t}\n\n\t.cn-item-footer {\n\t\t@apply gap-2;\n\t}\n\n\t.cn-item-group {\n\t\t@apply gap-4 has-data-[size=sm]:gap-2.5 has-data-[size=xs]:gap-2;\n\t}\n\n\t.cn-item-separator {\n\t\t@apply my-2;\n\t}\n\n\t/* MARK: Kbd */\n\t.cn-kbd {\n\t\t@apply bg-muted text-muted-foreground in-data-[slot=tooltip-content]:bg-background/20 in-data-[slot=tooltip-content]:text-background dark:in-data-[slot=tooltip-content]:bg-background/10 h-5 w-fit min-w-5 gap-1 rounded-sm px-1 font-sans text-xs font-medium [&_svg:not([class*='size-'])]:size-3;\n\t}\n\n\t.cn-kbd-group {\n\t\t@apply gap-1;\n\t}\n\n\t/* MARK: Label */\n\t.cn-label {\n\t\t@apply gap-2 text-sm leading-none font-medium group-data-[disabled=true]:opacity-50 peer-disabled:opacity-50;\n\t}\n\n\t/* MARK: Menubar */\n\t.cn-menubar {\n\t\t@apply h-9 rounded-4xl border p-1;\n\t}\n\n\t.cn-menubar-trigger {\n\t\t@apply hover:bg-muted aria-expanded:bg-muted rounded-xl px-2 py-0.75 text-sm font-medium;\n\t}\n\n\t.cn-menubar-content {\n\t\t@apply bg-popover text-popover-foreground data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/5 min-w-48 rounded-2xl p-1 shadow-2xl ring-1 duration-100;\n\t}\n\n\t.cn-menubar-content-logical {\n\t\t@apply data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2;\n\t}\n\n\t.cn-menubar-item {\n\t\t@apply focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:text-destructive! not-data-[variant=destructive]:focus:**:text-accent-foreground gap-2.5 rounded-xl px-3 py-2 text-sm data-disabled:opacity-50 data-inset:pl-9.5 [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-menubar-checkbox-item {\n\t\t@apply focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground gap-2.5 rounded-xl py-2 pr-3 pl-9.5 text-sm data-inset:pl-9.5;\n\t}\n\n\t.cn-menubar-checkbox-item-indicator {\n\t\t@apply left-3 size-4 [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-menubar-radio-item {\n\t\t@apply focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground gap-2.5 rounded-xl py-2 pr-3 pl-9.5 text-sm data-disabled:opacity-50 data-inset:pl-9.5 [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-menubar-radio-item-indicator {\n\t\t@apply left-3 size-4 [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-menubar-label {\n\t\t@apply text-muted-foreground px-3.5 py-2.5 text-xs data-inset:pl-9.5;\n\t}\n\n\t.cn-menubar-separator {\n\t\t@apply bg-border/50;\n\t}\n\n\t.cn-menubar-shortcut {\n\t\t@apply text-muted-foreground group-focus/menubar-item:text-accent-foreground text-xs tracking-widest;\n\t}\n\n\t.cn-menubar-sub-trigger {\n\t\t@apply focus:bg-accent focus:text-accent-foreground data-open:bg-accent data-open:text-accent-foreground gap-2 rounded-xl px-3 py-2 text-sm data-inset:pl-9.5 [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-menubar-sub-content {\n\t\t@apply bg-popover text-popover-foreground data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/5 min-w-32 rounded-2xl p-1 shadow-2xl ring-1 duration-100;\n\t}\n\n\t/* MARK: Navigation Menu */\n\t.cn-navigation-menu {\n\t\t@apply max-w-max;\n\t}\n\n\t.cn-navigation-menu-list {\n\t\t@apply gap-0;\n\t}\n\n\t.cn-navigation-menu-trigger {\n\t\t@apply bg-background hover:bg-muted focus:bg-muted data-open:hover:bg-muted data-open:focus:bg-muted data-open:bg-muted/50 focus-visible:ring-ring/50 data-popup-open:bg-muted/50 data-popup-open:hover:bg-muted rounded-2xl px-4.5 py-2.5 text-sm font-medium transition-all focus-visible:ring-[3px] focus-visible:outline-1 disabled:opacity-50;\n\t}\n\n\t.cn-navigation-menu-trigger-icon {\n\t\t@apply relative top-px ml-1 size-3 transition duration-300 group-data-open/navigation-menu-trigger:rotate-180 group-data-popup-open/navigation-menu-trigger:rotate-180;\n\t}\n\n\t.cn-navigation-menu-content {\n\t\t@apply data-[motion^=from-]:animate-in data-[motion^=to-]:animate-out data-[motion^=from-]:fade-in data-[motion^=to-]:fade-out data-[motion=from-end]:slide-in-from-right-52 data-[motion=from-start]:slide-in-from-left-52 data-[motion=to-end]:slide-out-to-right-52 data-[motion=to-start]:slide-out-to-left-52 group-data-[viewport=false]/navigation-menu:bg-popover group-data-[viewport=false]/navigation-menu:text-popover-foreground group-data-[viewport=false]/navigation-menu:data-open:animate-in group-data-[viewport=false]/navigation-menu:data-closed:animate-out group-data-[viewport=false]/navigation-menu:data-closed:zoom-out-95 group-data-[viewport=false]/navigation-menu:data-open:zoom-in-95 group-data-[viewport=false]/navigation-menu:data-open:fade-in-0 group-data-[viewport=false]/navigation-menu:data-closed:fade-out-0 group-data-[viewport=false]/navigation-menu:ring-foreground/5 p-2.5 pr-3 ease-[cubic-bezier(0.22,1,0.36,1)] group-data-[viewport=false]/navigation-menu:rounded-2xl group-data-[viewport=false]/navigation-menu:shadow-2xl group-data-[viewport=false]/navigation-menu:ring-1 group-data-[viewport=false]/navigation-menu:duration-300;\n\t}\n\n\t.cn-navigation-menu-viewport {\n\t\t@apply bg-popover text-popover-foreground data-open:animate-in data-closed:animate-out data-closed:zoom-out-90 data-open:zoom-in-90 ring-foreground/5 rounded-2xl shadow-2xl ring-1 duration-100;\n\t}\n\n\t.cn-navigation-menu-link {\n\t\t@apply data-[active=true]:focus:bg-muted data-[active=true]:hover:bg-muted data-[active=true]:bg-muted/50 focus-visible:ring-ring/50 hover:bg-muted focus:bg-muted flex items-center gap-1.5 rounded-xl p-3 text-sm transition-all outline-none focus-visible:ring-[3px] focus-visible:outline-1 [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-navigation-menu-indicator {\n\t\t@apply data-[state=visible]:animate-in data-[state=hidden]:animate-out data-[state=hidden]:fade-out data-[state=visible]:fade-in;\n\t}\n\n\t.cn-navigation-menu-indicator-arrow {\n\t\t@apply bg-border rounded-tl-sm shadow-md;\n\t}\n\n\t.cn-navigation-menu-positioner {\n\t\t@apply transition-[top,left,right,bottom] duration-300 ease-[cubic-bezier(0.22,1,0.36,1)] data-[side=bottom]:before:top-[-10px] data-[side=bottom]:before:right-0 data-[side=bottom]:before:left-0;\n\t}\n\n\t.cn-navigation-menu-popup {\n\t\t@apply bg-popover text-popover-foreground ring-foreground/5 rounded-2xl shadow ring-1 transition-all ease-[cubic-bezier(0.22,1,0.36,1)] outline-none data-ending-style:scale-90 data-ending-style:opacity-0 data-ending-style:duration-150 data-starting-style:scale-90 data-starting-style:opacity-0;\n\t}\n\n\t/* MARK: Native Select */\n\t.cn-native-select {\n\t\t@apply border-input bg-input/30 placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 dark:hover:bg-input/50 focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 h-9 w-full min-w-0 appearance-none rounded-4xl border py-1 pr-8 pl-3 text-sm transition-colors select-none focus-visible:ring-[3px] aria-invalid:ring-[3px] data-[size=sm]:h-8;\n\t}\n\n\t.cn-native-select-icon {\n\t\t@apply text-muted-foreground top-1/2 right-3.5 size-4 -translate-y-1/2;\n\t}\n\n\t/* MARK: Pagination */\n\t.cn-pagination-content {\n\t\t@apply gap-1;\n\t}\n\n\t.cn-pagination-ellipsis {\n\t\t@apply size-9 items-center justify-center [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-pagination-previous {\n\t\t@apply pl-2!;\n\t}\n\n\t.cn-pagination-next {\n\t\t@apply pr-2!;\n\t}\n\n\t/* MARK: Popover */\n\t.cn-popover-content {\n\t\t@apply bg-popover text-popover-foreground data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/5 flex flex-col gap-4 rounded-2xl p-4 text-sm shadow-2xl ring-1 duration-100;\n\t}\n\n\t.cn-popover-content-logical {\n\t\t@apply data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2;\n\t}\n\n\t.cn-popover-header {\n\t\t@apply flex flex-col gap-1 text-sm;\n\t}\n\n\t.cn-popover-title {\n\t\t@apply text-base font-medium;\n\t}\n\n\t.cn-popover-description {\n\t\t@apply text-muted-foreground;\n\t}\n\n\t/* MARK: Progress */\n\t.cn-progress {\n\t\t@apply bg-muted h-3 rounded-4xl;\n\t}\n\n\t.cn-progress-track {\n\t\t@apply bg-muted h-3 rounded-4xl;\n\t}\n\n\t.cn-progress-indicator {\n\t\t@apply bg-primary;\n\t}\n\n\t.cn-progress-label {\n\t\t@apply text-sm font-medium;\n\t}\n\n\t.cn-progress-value {\n\t\t@apply text-muted-foreground ml-auto text-sm tabular-nums;\n\t}\n\n\t/* MARK: Radio Group */\n\t.cn-radio-group {\n\t\t@apply grid gap-3;\n\t}\n\n\t.cn-radio-group-item {\n\t\t@apply border-input dark:bg-input/30 data-checked:bg-primary data-checked:text-primary-foreground dark:data-checked:bg-primary data-checked:border-primary aria-invalid:aria-checked:border-primary aria-invalid:border-destructive focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 dark:aria-invalid:border-destructive/50 flex size-4 rounded-full focus-visible:ring-3 aria-invalid:ring-3;\n\t}\n\n\t.cn-radio-group-indicator {\n\t\t@apply flex size-4 items-center justify-center;\n\t}\n\n\t.cn-radio-group-indicator-icon {\n\t\t@apply bg-primary-foreground absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2 rounded-full;\n\t}\n\n\t/* MARK: Resizable */\n\t.cn-resizable-handle-icon {\n\t\t@apply bg-border h-6 w-1 rounded-lg;\n\t}\n\n\t/* MARK: Scroll Area */\n\t.cn-scroll-area-scrollbar {\n\t\t@apply data-horizontal:h-2.5 data-horizontal:flex-col data-horizontal:border-t data-horizontal:border-t-transparent data-vertical:h-full data-vertical:w-2.5 data-vertical:border-l data-vertical:border-l-transparent;\n\t}\n\n\t.cn-scroll-area-thumb {\n\t\t@apply rounded-full;\n\t}\n\n\t/* MARK: Select */\n\t.cn-select-trigger {\n\t\t@apply border-input data-placeholder:text-muted-foreground bg-input/30 dark:hover:bg-input/50 focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 gap-1.5 rounded-4xl border px-3 py-2 text-sm transition-colors focus-visible:ring-[3px] aria-invalid:ring-[3px] data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:flex *:data-[slot=select-value]:gap-1.5 [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-select-value {\n\t\t@apply flex flex-1 text-left;\n\t}\n\n\t.cn-select-trigger-icon {\n\t\t@apply text-muted-foreground size-4;\n\t}\n\n\t.cn-select-content {\n\t\t@apply bg-popover text-popover-foreground data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/5 min-w-36 rounded-2xl shadow-2xl ring-1 duration-100;\n\t}\n\n\t.cn-select-content-logical {\n\t\t@apply data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2;\n\t}\n\n\t.cn-select-label {\n\t\t@apply text-muted-foreground px-3 py-2.5 text-xs;\n\t}\n\n\t.cn-select-item {\n\t\t@apply focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground gap-2.5 rounded-xl py-2 pr-8 pl-3 text-sm [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2;\n\t}\n\n\t.cn-select-item-indicator {\n\t\t@apply pointer-events-none absolute right-2 flex size-4 items-center justify-center;\n\t}\n\n\t.cn-select-group {\n\t\t@apply scroll-my-1 p-1;\n\t}\n\n\t.cn-select-item-text {\n\t\t@apply flex flex-1 gap-2;\n\t}\n\n\t.cn-select-separator {\n\t\t@apply bg-border/50 -mx-1 my-1 h-px;\n\t}\n\n\t.cn-select-scroll-up-button {\n\t\t@apply bg-popover z-10 flex cursor-default items-center justify-center py-1 [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-select-scroll-down-button {\n\t\t@apply bg-popover z-10 flex cursor-default items-center justify-center py-1 [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t/* MARK: Separator */\n\t.cn-separator {\n\t\t@apply bg-border shrink-0;\n\t}\n\n\t.cn-separator-horizontal {\n\t\t@apply h-px w-full;\n\t}\n\n\t.cn-separator-vertical {\n\t\t@apply h-full w-px;\n\t}\n\n\t/* MARK: Sheet */\n\t.cn-sheet-overlay {\n\t\t@apply bg-black/80 supports-backdrop-filter:backdrop-blur-xs;\n\t}\n\n\t.cn-sheet-content {\n\t\t@apply bg-background fixed z-50 flex flex-col bg-clip-padding text-sm shadow-lg transition duration-200 ease-in-out data-[side=bottom]:inset-x-0 data-[side=bottom]:bottom-0 data-[side=bottom]:h-auto data-[side=bottom]:border-t data-[side=left]:inset-y-0 data-[side=left]:left-0 data-[side=left]:h-full data-[side=left]:w-3/4 data-[side=left]:border-r data-[side=right]:inset-y-0 data-[side=right]:right-0 data-[side=right]:h-full data-[side=right]:w-3/4 data-[side=right]:border-l data-[side=top]:inset-x-0 data-[side=top]:top-0 data-[side=top]:h-auto data-[side=top]:border-b data-[side=left]:sm:max-w-sm data-[side=right]:sm:max-w-sm;\n\t}\n\n\t.cn-sheet-close {\n\t\t@apply absolute top-4 right-4;\n\t}\n\n\t.cn-sheet-header {\n\t\t@apply gap-1.5 p-6;\n\t}\n\n\t.cn-sheet-footer {\n\t\t@apply gap-2 p-6;\n\t}\n\n\t.cn-sheet-title {\n\t\t@apply text-foreground text-base font-medium;\n\t}\n\n\t.cn-sheet-description {\n\t\t@apply text-muted-foreground text-sm;\n\t}\n\n\t/* MARK: Sidebar */\n\t.cn-sidebar-gap {\n\t\t@apply transition-[width] duration-200 ease-linear;\n\t}\n\n\t.cn-sidebar-inner {\n\t\t@apply bg-sidebar group-data-[variant=floating]:ring-sidebar-border group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:shadow-sm group-data-[variant=floating]:ring-1;\n\t}\n\n\t.cn-sidebar-rail {\n\t\t@apply hover:after:bg-sidebar-border;\n\t}\n\n\t.cn-sidebar-inset {\n\t\t@apply bg-background md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2;\n\t}\n\n\t.cn-sidebar-input {\n\t\t@apply bg-background h-8 w-full shadow-none;\n\t}\n\n\t.cn-sidebar-header {\n\t\t@apply gap-2 p-2 [--radius:var(--radius-xl)];\n\t}\n\n\t.cn-sidebar-content {\n\t\t@apply no-scrollbar gap-2 [--radius:var(--radius-xl)];\n\t}\n\n\t.cn-sidebar-footer {\n\t\t@apply gap-2 p-2;\n\t}\n\n\t.cn-sidebar-separator {\n\t\t@apply bg-sidebar-border mx-2;\n\t}\n\n\t.cn-sidebar-group {\n\t\t@apply p-2;\n\t}\n\n\t.cn-sidebar-menu {\n\t\t@apply gap-1;\n\t}\n\n\t.cn-sidebar-group-content {\n\t\t@apply text-sm;\n\t}\n\n\t.cn-sidebar-group-label {\n\t\t@apply text-sidebar-foreground/70 ring-sidebar-ring h-8 rounded-md px-2 text-xs font-medium transition-[margin,opacity] duration-200 ease-linear group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0 focus-visible:ring-2 [&>svg]:size-4;\n\t}\n\n\t.cn-sidebar-group-action {\n\t\t@apply text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground absolute top-3.5 right-3 w-5 rounded-md p-0 focus-visible:ring-2 [&>svg]:size-4;\n\t}\n\n\t.cn-sidebar-menu-button {\n\t\t@apply ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground active:bg-sidebar-accent active:text-sidebar-accent-foreground data-active:bg-sidebar-accent data-active:text-sidebar-accent-foreground data-open:hover:bg-sidebar-accent data-open:hover:text-sidebar-accent-foreground gap-2 rounded-lg px-3 py-2 text-left text-sm transition-[width,height,padding] group-has-data-[sidebar=menu-action]/menu-item:pr-8 group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! focus-visible:ring-2 data-active:font-medium;\n\t}\n\n\t.cn-sidebar-menu-button-variant-default {\n\t\t@apply hover:bg-sidebar-accent hover:text-sidebar-accent-foreground;\n\t}\n\n\t.cn-sidebar-menu-button-variant-outline {\n\t\t@apply bg-background hover:bg-sidebar-accent hover:text-sidebar-accent-foreground shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))];\n\t}\n\n\t.cn-sidebar-menu-button-size-default {\n\t\t@apply h-9 text-sm;\n\t}\n\n\t.cn-sidebar-menu-button-size-sm {\n\t\t@apply h-8 text-xs;\n\t}\n\n\t.cn-sidebar-menu-button-size-lg {\n\t\t@apply h-14 px-3 text-sm group-data-[collapsible=icon]:p-0!;\n\t}\n\n\t.cn-sidebar-menu-action {\n\t\t@apply text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground peer-hover/menu-button:text-sidebar-accent-foreground absolute top-1.5 right-1 aspect-square w-5 rounded-md p-0 peer-data-[size=default]/menu-button:top-2 peer-data-[size=lg]/menu-button:top-2.5 peer-data-[size=sm]/menu-button:top-1 focus-visible:ring-2 [&>svg]:size-4;\n\t}\n\n\t.cn-sidebar-menu-badge {\n\t\t@apply text-sidebar-foreground peer-hover/menu-button:text-sidebar-accent-foreground peer-data-active/menu-button:text-sidebar-accent-foreground pointer-events-none absolute right-1 flex h-5 min-w-5 rounded-md px-1 text-xs font-medium peer-data-[size=default]/menu-button:top-1.5 peer-data-[size=lg]/menu-button:top-2.5 peer-data-[size=sm]/menu-button:top-1;\n\t}\n\n\t.cn-sidebar-menu-skeleton {\n\t\t@apply h-8 gap-2 rounded-md px-2;\n\t}\n\n\t.cn-sidebar-menu-skeleton-icon {\n\t\t@apply size-4 rounded-md;\n\t}\n\n\t.cn-sidebar-menu-skeleton-text {\n\t\t@apply h-4;\n\t}\n\n\t.cn-sidebar-menu-sub {\n\t\t@apply border-sidebar-border mx-3.5 translate-x-px gap-1 border-l px-2.5 py-0.5 group-data-[collapsible=icon]:hidden;\n\t}\n\n\t.cn-sidebar-menu-sub-button {\n\t\t@apply text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground active:bg-sidebar-accent active:text-sidebar-accent-foreground [&>svg]:text-sidebar-accent-foreground data-active:bg-sidebar-accent data-active:text-sidebar-accent-foreground h-7 gap-2 rounded-md px-2 focus-visible:ring-2 data-[size=md]:text-sm data-[size=sm]:text-xs [&>svg]:size-4;\n\t}\n\n\t/* MARK: Skeleton */\n\t.cn-skeleton {\n\t\t@apply bg-muted rounded-xl;\n\t}\n\n\t/* MARK: Slider */\n\t.cn-slider {\n\t\t@apply data-vertical:min-h-40;\n\t}\n\n\t.cn-slider-track {\n\t\t@apply bg-muted rounded-4xl data-horizontal:h-3 data-horizontal:w-full data-vertical:h-full data-vertical:w-3;\n\t}\n\n\t.cn-slider-range {\n\t\t@apply bg-primary;\n\t}\n\n\t.cn-slider-thumb {\n\t\t@apply border-primary ring-ring/50 size-4 rounded-4xl border bg-white shadow-sm transition-colors hover:ring-4 focus-visible:ring-4 focus-visible:outline-hidden;\n\t}\n\n\t/* MARK: Sonner */\n\t.cn-toast {\n\t\t@apply rounded-2xl;\n\t}\n\n\t/* MARK: Switch */\n\t.cn-switch {\n\t\t@apply data-checked:bg-primary data-unchecked:bg-input focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 dark:data-unchecked:bg-input/80 shrink-0 rounded-full border border-transparent focus-visible:ring-[3px] aria-invalid:ring-[3px] data-[size=default]:h-[18.4px] data-[size=default]:w-[32px] data-[size=sm]:h-[14px] data-[size=sm]:w-[24px];\n\t}\n\n\t.cn-switch-thumb {\n\t\t@apply bg-background dark:data-unchecked:bg-foreground dark:data-checked:bg-primary-foreground rounded-full group-data-[size=default]/switch:size-4 group-data-[size=sm]/switch:size-3 group-data-[size=default]/switch:data-checked:translate-x-[calc(100%-2px)] group-data-[size=sm]/switch:data-checked:translate-x-[calc(100%-2px)] group-data-[size=default]/switch:data-unchecked:translate-x-0 group-data-[size=sm]/switch:data-unchecked:translate-x-0;\n\t}\n\n\t/* MARK: Table */\n\t.cn-table-container {\n\t\t@apply relative w-full overflow-x-auto;\n\t}\n\n\t.cn-table {\n\t\t@apply w-full caption-bottom text-sm;\n\t}\n\n\t.cn-table-header {\n\t\t@apply [&_tr]:border-b;\n\t}\n\n\t.cn-table-body {\n\t\t@apply [&_tr:last-child]:border-0;\n\t}\n\n\t.cn-table-footer {\n\t\t@apply bg-muted/50 border-t font-medium [&>tr]:last:border-b-0;\n\t}\n\n\t.cn-table-row {\n\t\t@apply hover:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors;\n\t}\n\n\t.cn-table-head {\n\t\t@apply text-foreground h-12 px-3 text-left align-middle font-medium whitespace-nowrap [&:has([role=checkbox])]:pr-0;\n\t}\n\n\t.cn-table-cell {\n\t\t@apply p-3 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0;\n\t}\n\n\t.cn-table-caption {\n\t\t@apply text-muted-foreground mt-4 text-sm;\n\t}\n\n\t/* MARK: Tabs */\n\t.cn-tabs {\n\t\t@apply gap-2;\n\t}\n\n\t.cn-tabs-list {\n\t\t@apply rounded-4xl p-[3px] group-data-horizontal/tabs:h-9 group-data-vertical/tabs:rounded-2xl data-[variant=line]:rounded-none;\n\t}\n\n\t.cn-tabs-trigger {\n\t\t@apply gap-1.5 rounded-xl border border-transparent px-2 py-1 text-sm font-medium group-data-vertical/tabs:px-2.5 group-data-vertical/tabs:py-1.5 [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-tabs-content {\n\t\t@apply text-sm;\n\t}\n\n\t/* MARK: Textarea */\n\t.cn-textarea {\n\t\t@apply border-input bg-input/30 focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 resize-none rounded-xl border px-3 py-3 text-base transition-colors focus-visible:ring-[3px] aria-invalid:ring-[3px] md:text-sm;\n\t}\n\n\t/* MARK: Toggle */\n\t.cn-toggle {\n\t\t@apply hover:text-foreground aria-pressed:bg-muted focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive gap-1 rounded-4xl text-sm font-medium transition-colors [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-toggle-variant-default {\n\t\t@apply bg-transparent;\n\t}\n\n\t.cn-toggle-variant-outline {\n\t\t@apply border-input hover:bg-muted border bg-transparent;\n\t}\n\n\t.cn-toggle-size-default {\n\t\t@apply h-9 min-w-9 rounded-[min(var(--radius-2xl),12px)] px-2.5;\n\t}\n\n\t.cn-toggle-size-sm {\n\t\t@apply h-8 min-w-8 px-3;\n\t}\n\n\t.cn-toggle-size-lg {\n\t\t@apply h-10 min-w-10 px-2.5;\n\t}\n\n\t/* MARK: Toggle Group */\n\t.cn-toggle-group {\n\t\t@apply data-[spacing=0]:data-[variant=outline]:rounded-4xl;\n\t}\n\n\t.cn-toggle-group-item {\n\t\t@apply data-[state=on]:bg-muted group-data-[spacing=0]/toggle-group:rounded-none group-data-[spacing=0]/toggle-group:px-3 group-data-[spacing=0]/toggle-group:shadow-none group-data-horizontal/toggle-group:data-[spacing=0]:first:rounded-l-4xl group-data-vertical/toggle-group:data-[spacing=0]:first:rounded-t-xl group-data-horizontal/toggle-group:data-[spacing=0]:last:rounded-r-4xl group-data-vertical/toggle-group:data-[spacing=0]:last:rounded-b-xl;\n\t}\n\n\t/* MARK: Tooltip */\n\t.cn-tooltip-content {\n\t\t@apply data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 inline-flex items-center gap-1.5 rounded-2xl px-3 py-1.5 text-xs has-data-[slot=kbd]:pr-1.5 **:data-[slot=kbd]:relative **:data-[slot=kbd]:isolate **:data-[slot=kbd]:z-50 **:data-[slot=kbd]:rounded-4xl;\n\t}\n\n\t.cn-tooltip-content-logical {\n\t\t@apply data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2;\n\t}\n\n\t.cn-tooltip-arrow {\n\t\t@apply size-2.5 translate-y-[calc(-50%-2px)] rotate-45 rounded-[2px] data-[side=left]:translate-x-[-1.5px] data-[side=right]:translate-x-[1.5px];\n\t}\n\n\t.cn-tooltip-arrow-logical {\n\t\t@apply data-[side=inline-end]:top-1/2! data-[side=inline-end]:-left-1 data-[side=inline-end]:translate-x-[1.5px] data-[side=inline-end]:-translate-y-1/2 data-[side=inline-start]:top-1/2! data-[side=inline-start]:-right-1 data-[side=inline-start]:translate-x-[-1.5px] data-[side=inline-start]:-translate-y-1/2;\n\t}\n\n\t/* MARK: Input Group */\n\t.cn-input-group {\n\t\t@apply border-input bg-input/30 has-[[data-slot=input-group-control]:focus-visible]:border-ring has-[[data-slot=input-group-control]:focus-visible]:ring-ring/50 has-[[data-slot][aria-invalid=true]]:ring-destructive/20 has-[[data-slot][aria-invalid=true]]:border-destructive dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40 h-9 rounded-4xl border transition-colors in-data-[slot=combobox-content]:focus-within:border-inherit in-data-[slot=combobox-content]:focus-within:ring-0 has-data-[align=block-end]:rounded-2xl has-data-[align=block-start]:rounded-2xl has-[[data-slot=input-group-control]:focus-visible]:ring-[3px] has-[[data-slot][aria-invalid=true]]:ring-[3px] has-[textarea]:rounded-xl has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>[data-align=block-end]]:[&>input]:pt-3 has-[>[data-align=block-start]]:[&>input]:pb-3 has-[>[data-align=inline-end]]:[&>input]:pr-1.5 has-[>[data-align=inline-start]]:[&>input]:pl-1.5;\n\t}\n\n\t.cn-input-group-addon {\n\t\t@apply text-muted-foreground **:data-[slot=kbd]:bg-muted-foreground/10 h-auto gap-2 py-2 text-sm font-medium group-data-[disabled=true]/input-group:opacity-50 **:data-[slot=kbd]:rounded-4xl **:data-[slot=kbd]:px-1.5 [&>svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-input-group-addon-align-inline-start {\n\t\t@apply pl-3 has-[>button]:-ml-1 has-[>kbd]:ml-[-0.15rem];\n\t}\n\n\t.cn-input-group-addon-align-inline-end {\n\t\t@apply pr-3 has-[>button]:-mr-1 has-[>kbd]:mr-[-0.15rem];\n\t}\n\n\t.cn-input-group-addon-align-block-start {\n\t\t@apply px-3 pt-3 group-has-[>input]/input-group:pt-3 [.border-b]:pb-3;\n\t}\n\n\t.cn-input-group-addon-align-block-end {\n\t\t@apply px-3 pb-3 group-has-[>input]/input-group:pb-3 [.border-t]:pt-3;\n\t}\n\n\t.cn-input-group-button {\n\t\t@apply gap-2 rounded-4xl text-sm;\n\t}\n\n\t.cn-input-group-button-size-xs {\n\t\t@apply h-6 gap-1 px-1.5 [&>svg:not([class*='size-'])]:size-3.5;\n\t}\n\n\t.cn-input-group-button-size-icon-xs {\n\t\t@apply size-6 p-0 has-[>svg]:p-0;\n\t}\n\n\t.cn-input-group-button-size-icon-sm {\n\t\t@apply size-8 p-0 has-[>svg]:p-0;\n\t}\n\n\t.cn-input-group-text {\n\t\t@apply text-muted-foreground gap-2 text-sm [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-input-group-input {\n\t\t@apply rounded-none border-0 bg-transparent shadow-none ring-0 focus-visible:ring-0 aria-invalid:ring-0 dark:bg-transparent;\n\t}\n\n\t.cn-input-group-textarea {\n\t\t@apply rounded-none border-0 bg-transparent py-2 shadow-none ring-0 focus-visible:ring-0 aria-invalid:ring-0 dark:bg-transparent;\n\t}\n\n\t/* MARK: Menu Translucent */\n\t.cn-menu-translucent {\n\t\t@apply bg-popover/70 **:data-[slot$=-item]:focus:bg-foreground/10 **:data-[slot$=-item]:data-highlighted:bg-foreground/10 **:data-[slot$=-separator]:bg-foreground/5 **:data-[slot$=-trigger]:focus:bg-foreground/10 **:data-[slot$=-trigger]:aria-expanded:bg-foreground/10! **:data-[variant=destructive]:focus:bg-foreground/10! **:data-[variant=destructive]:text-accent-foreground! **:data-[variant=destructive]:**:text-accent-foreground! relative animate-none! before:pointer-events-none before:absolute before:inset-0 before:-z-1 before:rounded-[inherit] before:backdrop-blur-2xl before:backdrop-saturate-150;\n\t}\n}\n"
  },
  {
    "path": "docs/src/lib/registry/styles/style-mira.css",
    "content": ".style-mira {\n\t/* MARK: Accordion */\n\t.cn-accordion {\n\t\t@apply overflow-hidden rounded-md border;\n\t}\n\n\t.cn-accordion-item {\n\t\t@apply data-open:bg-muted/50 not-last:border-b;\n\t}\n\n\t.cn-accordion-trigger {\n\t\t@apply **:data-[slot=accordion-trigger-icon]:text-muted-foreground gap-6 p-2 text-left text-xs/relaxed font-medium hover:underline **:data-[slot=accordion-trigger-icon]:ml-auto **:data-[slot=accordion-trigger-icon]:size-4;\n\t}\n\n\t.cn-accordion-content {\n\t\t@apply data-open:animate-accordion-down data-closed:animate-accordion-up px-2 text-xs/relaxed;\n\t}\n\n\t.cn-accordion-content-inner {\n\t\t@apply pt-0 pb-4;\n\t}\n\n\t/* MARK: Alert Dialog */\n\t.cn-alert-dialog-overlay {\n\t\t@apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 bg-black/80 duration-100 supports-backdrop-filter:backdrop-blur-xs;\n\t}\n\n\t.cn-alert-dialog-content {\n\t\t@apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 bg-background ring-foreground/10 gap-3 rounded-xl p-4 ring-1 duration-100 data-[size=default]:max-w-xs data-[size=sm]:max-w-64 data-[size=default]:sm:max-w-sm;\n\t}\n\n\t.cn-alert-dialog-header {\n\t\t@apply grid grid-rows-[auto_1fr] place-items-center gap-1 text-center has-data-[slot=alert-dialog-media]:grid-rows-[auto_auto_1fr] has-data-[slot=alert-dialog-media]:gap-x-4 sm:group-data-[size=default]/alert-dialog-content:place-items-start sm:group-data-[size=default]/alert-dialog-content:text-left sm:group-data-[size=default]/alert-dialog-content:has-data-[slot=alert-dialog-media]:grid-rows-[auto_1fr];\n\t}\n\n\t.cn-alert-dialog-media {\n\t\t@apply bg-muted mb-2 inline-flex size-8 items-center justify-center rounded-md sm:group-data-[size=default]/alert-dialog-content:row-span-2 *:[svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-alert-dialog-title {\n\t\t@apply text-sm font-medium sm:group-data-[size=default]/alert-dialog-content:group-has-data-[slot=alert-dialog-media]/alert-dialog-content:col-start-2;\n\t}\n\n\t.cn-alert-dialog-description {\n\t\t@apply text-muted-foreground *:[a]:hover:text-foreground text-xs/relaxed text-balance md:text-pretty *:[a]:underline *:[a]:underline-offset-3;\n\t}\n\n\t/* MARK: Alert */\n\t.cn-alert {\n\t\t@apply grid gap-0.5 rounded-lg border px-2 py-1.5 text-left text-xs/relaxed has-data-[slot=alert-action]:relative has-data-[slot=alert-action]:pr-18 has-[>svg]:grid-cols-[auto_1fr] has-[>svg]:gap-x-1.5 *:[svg]:row-span-2 *:[svg]:translate-y-0.5 *:[svg]:text-current *:[svg:not([class*='size-'])]:size-3.5;\n\t}\n\n\t.cn-alert-variant-default {\n\t\t@apply bg-card text-card-foreground;\n\t}\n\n\t.cn-alert-variant-destructive {\n\t\t@apply text-destructive bg-card *:data-[slot=alert-description]:text-destructive/90 *:[svg]:text-current;\n\t}\n\n\t.cn-alert-title {\n\t\t@apply font-medium group-has-[>svg]/alert:col-start-2;\n\t}\n\n\t.cn-alert-description {\n\t\t@apply text-muted-foreground text-xs/relaxed text-balance md:text-pretty [&_p:not(:last-child)]:mb-4;\n\t}\n\n\t.cn-alert-action {\n\t\t@apply absolute top-1.5 right-2;\n\t}\n\n\t/* MARK: Avatar */\n\t.cn-avatar {\n\t\t@apply size-8 rounded-full after:rounded-full data-[size=lg]:size-10 data-[size=sm]:size-6;\n\t}\n\n\t.cn-avatar-fallback {\n\t\t@apply bg-muted text-muted-foreground rounded-full;\n\t}\n\n\t.cn-avatar-image {\n\t\t@apply rounded-full;\n\t}\n\n\t.cn-avatar-badge {\n\t\t@apply bg-primary text-primary-foreground ring-background;\n\t}\n\n\t.cn-avatar-group-count {\n\t\t@apply bg-muted text-muted-foreground size-8 rounded-full text-xs/relaxed group-has-data-[size=lg]/avatar-group:size-10 group-has-data-[size=sm]/avatar-group:size-6 [&>svg]:size-4 group-has-data-[size=lg]/avatar-group:[&>svg]:size-5 group-has-data-[size=sm]/avatar-group:[&>svg]:size-3;\n\t}\n\n\t/* MARK: Badge */\n\t.cn-badge {\n\t\t@apply h-5 gap-1 rounded-full border border-transparent px-2 py-0.5 text-[0.625rem] font-medium transition-all has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&>svg]:size-2.5!;\n\t}\n\n\t.cn-badge-variant-default {\n\t\t@apply bg-primary text-primary-foreground [a]:hover:bg-primary/80;\n\t}\n\n\t.cn-badge-variant-secondary {\n\t\t@apply bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80;\n\t}\n\n\t.cn-badge-variant-outline {\n\t\t@apply border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground bg-input/20 dark:bg-input/30;\n\t}\n\n\t.cn-badge-variant-destructive {\n\t\t@apply bg-destructive/10 [a]:hover:bg-destructive/20 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 text-destructive dark:bg-destructive/20;\n\t}\n\n\t.cn-badge-variant-ghost {\n\t\t@apply hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50;\n\t}\n\n\t.cn-badge-variant-link {\n\t\t@apply text-primary underline-offset-4 hover:underline;\n\t}\n\n\t/* MARK: Breadcrumb */\n\t.cn-breadcrumb-list {\n\t\t@apply text-muted-foreground gap-1.5 text-xs/relaxed;\n\t}\n\n\t.cn-breadcrumb-item {\n\t\t@apply gap-1;\n\t}\n\n\t.cn-breadcrumb-link {\n\t\t@apply hover:text-foreground transition-colors;\n\t}\n\n\t.cn-breadcrumb-page {\n\t\t@apply text-foreground font-normal;\n\t}\n\n\t.cn-breadcrumb-separator {\n\t\t@apply [&>svg]:size-3.5;\n\t}\n\n\t.cn-breadcrumb-ellipsis {\n\t\t@apply size-4 [&>svg]:size-3.5;\n\t}\n\n\t/* MARK: Button */\n\t.cn-button {\n\t\t@apply focus-visible:border-ring focus-visible:ring-ring/30 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 rounded-md border border-transparent bg-clip-padding text-xs/relaxed font-medium focus-visible:ring-2 active:translate-y-px aria-invalid:ring-2 [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-button-variant-default {\n\t\t@apply bg-primary text-primary-foreground hover:bg-primary/80;\n\t}\n\n\t.cn-button-variant-outline {\n\t\t@apply border-border dark:bg-input/30 hover:bg-input/50 hover:text-foreground aria-expanded:bg-muted aria-expanded:text-foreground;\n\t}\n\n\t.cn-button-variant-secondary {\n\t\t@apply bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground;\n\t}\n\n\t.cn-button-variant-ghost {\n\t\t@apply hover:bg-muted hover:text-foreground dark:hover:bg-muted/50 aria-expanded:bg-muted aria-expanded:text-foreground;\n\t}\n\n\t.cn-button-variant-destructive {\n\t\t@apply bg-destructive/10 hover:bg-destructive/20 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/20 text-destructive focus-visible:border-destructive/40 dark:hover:bg-destructive/30;\n\t}\n\n\t.cn-button-variant-link {\n\t\t@apply text-primary underline-offset-4 hover:underline;\n\t}\n\n\t.cn-button-size-xs {\n\t\t@apply h-5 gap-1 rounded-sm px-2 text-[0.625rem] has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-2.5;\n\t}\n\n\t.cn-button-size-sm {\n\t\t@apply h-6 gap-1 px-2 text-xs/relaxed has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3;\n\t}\n\n\t.cn-button-size-default {\n\t\t@apply h-7 gap-1 px-2 text-xs/relaxed has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5;\n\t}\n\n\t.cn-button-size-lg {\n\t\t@apply h-8 gap-1 px-2.5 text-xs/relaxed has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2 [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-button-size-icon-xs {\n\t\t@apply size-5 rounded-sm [&_svg:not([class*='size-'])]:size-2.5;\n\t}\n\n\t.cn-button-size-icon-sm {\n\t\t@apply size-6 [&_svg:not([class*='size-'])]:size-3;\n\t}\n\n\t.cn-button-size-icon {\n\t\t@apply size-7 [&_svg:not([class*='size-'])]:size-3.5;\n\t}\n\n\t.cn-button-size-icon-lg {\n\t\t@apply size-8 [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t/* MARK: Button Group */\n\t.cn-button-group {\n\t\t@apply has-[>[data-slot=button-group]]:gap-2 has-[select[aria-hidden=true]:last-child]:[&>[data-slot=select-trigger]:last-of-type]:rounded-r-md;\n\t}\n\n\t.cn-button-group-orientation-horizontal {\n\t\t@apply [&>[data-slot]:not(:has(~[data-slot]))]:rounded-r-md!;\n\t}\n\n\t.cn-button-group-orientation-vertical {\n\t\t@apply [&>[data-slot]:not(:has(~[data-slot]))]:rounded-b-md!;\n\t}\n\n\t.cn-button-group-text {\n\t\t@apply bg-muted gap-2 rounded-md border px-2.5 text-xs/relaxed font-medium [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-button-group-separator {\n\t\t@apply bg-input;\n\t}\n\n\t/* MARK: Calendar */\n\t.cn-calendar {\n\t\t@apply p-3 [--cell-radius:var(--radius-md)] [--cell-size:--spacing(6)];\n\t}\n\n\t.cn-calendar-dropdown-root {\n\t\t@apply has-focus:border-ring border-input has-focus:ring-ring/30 border has-focus:ring-2;\n\t}\n\n\t.cn-calendar-caption-label {\n\t\t@apply bg-input/20 dark:bg-input/30 h-7 pr-1.5 pl-2;\n\t}\n\n\t/* MARK: Card */\n\t.cn-card {\n\t\t@apply ring-foreground/10 bg-card text-card-foreground gap-4 overflow-hidden rounded-lg py-4 text-xs/relaxed ring-1 has-[>img:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 *:[img:first-child]:rounded-t-lg *:[img:last-child]:rounded-b-lg;\n\t}\n\n\t.cn-card-header {\n\t\t@apply gap-1 rounded-t-lg px-4 group-data-[size=sm]/card:px-3 [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3;\n\t}\n\n\t.cn-card-title {\n\t\t@apply text-sm font-medium;\n\t}\n\n\t.cn-card-description {\n\t\t@apply text-muted-foreground text-xs/relaxed;\n\t}\n\n\t.cn-card-content {\n\t\t@apply px-4 group-data-[size=sm]/card:px-3;\n\t}\n\n\t.cn-card-footer {\n\t\t@apply rounded-b-lg px-4 group-data-[size=sm]/card:px-3 [.border-t]:pt-4 group-data-[size=sm]/card:[.border-t]:pt-3;\n\t}\n\n\t/* MARK: Carousel */\n\t.cn-carousel-previous {\n\t\t@apply rounded-full;\n\t}\n\n\t.cn-carousel-next {\n\t\t@apply rounded-full;\n\t}\n\n\t/* MARK: Chart */\n\t.cn-chart-tooltip {\n\t\t@apply border-border/50 bg-background gap-1.5 rounded-lg border px-2.5 py-1.5 text-xs/relaxed shadow-xl;\n\t}\n\n\t/* MARK: Checkbox */\n\t.cn-checkbox {\n\t\t@apply border-input dark:bg-input/30 data-checked:bg-primary data-checked:text-primary-foreground dark:data-checked:bg-primary data-checked:border-primary aria-invalid:aria-checked:border-primary aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 focus-visible:border-ring focus-visible:ring-ring/30 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 flex size-4 items-center justify-center rounded-[4px] border transition-shadow group-has-disabled/field:opacity-50 focus-visible:ring-2 aria-invalid:ring-2;\n\t}\n\n\t.cn-checkbox-indicator {\n\t\t@apply [&>svg]:size-3.5;\n\t}\n\n\t/* MARK: Combobox */\n\t.cn-combobox-content {\n\t\t@apply bg-popover text-popover-foreground data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 *:data-[slot=input-group]:bg-input/20 dark:bg-popover max-h-72 min-w-32 overflow-hidden rounded-lg shadow-md ring-1 duration-100 *:data-[slot=input-group]:m-1 *:data-[slot=input-group]:mb-0 *:data-[slot=input-group]:h-7 *:data-[slot=input-group]:border-none *:data-[slot=input-group]:shadow-none;\n\t}\n\n\t.cn-combobox-content-logical {\n\t\t@apply data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2;\n\t}\n\n\t.cn-combobox-label {\n\t\t@apply text-muted-foreground px-2 py-1.5 text-xs;\n\t}\n\n\t.cn-combobox-item {\n\t\t@apply data-highlighted:bg-accent data-highlighted:text-accent-foreground not-data-[variant=destructive]:data-highlighted:**:text-accent-foreground min-h-7 gap-2 rounded-md px-2 py-1 text-xs/relaxed [&_svg:not([class*='size-'])]:size-3.5;\n\t}\n\n\t.cn-combobox-item-indicator {\n\t\t@apply pointer-events-none absolute right-2 flex items-center justify-center;\n\t}\n\n\t.cn-combobox-empty {\n\t\t@apply text-muted-foreground hidden w-full justify-center py-2 text-center text-xs/relaxed group-data-empty/combobox-content:flex;\n\t}\n\n\t.cn-combobox-list {\n\t\t@apply no-scrollbar max-h-[min(calc(--spacing(72)---spacing(9)),calc(var(--available-height)---spacing(9)))] scroll-py-1 overflow-y-auto p-1 data-empty:p-0;\n\t}\n\n\t.cn-combobox-item-text {\n\t\t@apply flex flex-1 gap-2;\n\t}\n\n\t.cn-combobox-separator {\n\t\t@apply bg-border/50 -mx-1 my-1 h-px;\n\t}\n\n\t.cn-combobox-trigger {\n\t\t@apply [&_svg:not([class*='size-'])]:size-3.5;\n\t}\n\n\t.cn-combobox-trigger-icon {\n\t\t@apply text-muted-foreground size-3.5;\n\t}\n\n\t.cn-combobox-chips {\n\t\t@apply bg-input/20 dark:bg-input/30 border-input focus-within:border-ring focus-within:ring-ring/30 has-aria-invalid:ring-destructive/20 dark:has-aria-invalid:ring-destructive/40 has-aria-invalid:border-destructive dark:has-aria-invalid:border-destructive/50 flex min-h-7 flex-wrap items-center gap-1 rounded-md border bg-clip-padding px-2 py-0.5 text-xs/relaxed transition-colors focus-within:ring-2 has-aria-invalid:ring-2 has-data-[slot=combobox-chip]:px-1;\n\t}\n\n\t.cn-combobox-chip {\n\t\t@apply bg-muted-foreground/10 text-foreground flex h-[calc(--spacing(4.75))] w-fit items-center justify-center gap-1 rounded-[calc(var(--radius-sm)-2px)] px-1.5 text-xs/relaxed font-medium whitespace-nowrap has-data-[slot=combobox-chip-remove]:pr-0;\n\t}\n\n\t.cn-combobox-chip-remove {\n\t\t@apply -ml-1 opacity-50 hover:opacity-100;\n\t}\n\n\t/* MARK: Command */\n\t.cn-command {\n\t\t@apply bg-popover text-popover-foreground rounded-xl p-1;\n\t}\n\n\t.cn-command-dialog {\n\t\t@apply rounded-xl! p-0;\n\t}\n\n\t.cn-command-input-wrapper {\n\t\t@apply p-1 pb-0;\n\t}\n\n\t.cn-command-input-group {\n\t\t@apply bg-input/20 dark:bg-input/30 h-8!;\n\t}\n\n\t.cn-command-input-icon {\n\t\t@apply size-3.5 shrink-0 opacity-50;\n\t}\n\n\t.cn-command-input {\n\t\t@apply w-full text-xs/relaxed;\n\t}\n\n\t.cn-command-list {\n\t\t@apply no-scrollbar max-h-72 scroll-py-1 outline-none;\n\t}\n\n\t.cn-command-empty {\n\t\t@apply py-6 text-center text-xs/relaxed;\n\t}\n\n\t.cn-command-group {\n\t\t@apply text-foreground **:[[cmdk-group-heading]]:text-muted-foreground overflow-hidden p-1 **:[[cmdk-group-heading]]:px-2.5 **:[[cmdk-group-heading]]:py-1.5 **:[[cmdk-group-heading]]:text-xs **:[[cmdk-group-heading]]:font-medium;\n\t}\n\n\t.cn-command-separator {\n\t\t@apply bg-border/50 -mx-1 my-1 h-px;\n\t}\n\n\t.cn-command-item {\n\t\t@apply data-selected:bg-muted data-selected:text-foreground data-selected:*:[svg]:text-foreground relative flex min-h-7 cursor-default items-center gap-2 rounded-md px-2.5 py-1.5 text-xs/relaxed outline-hidden select-none in-data-[slot=dialog-content]:rounded-md [&_svg:not([class*='size-'])]:size-3.5;\n\t}\n\n\t.cn-command-shortcut {\n\t\t@apply text-muted-foreground group-data-selected/command-item:text-foreground ml-auto text-[0.625rem] tracking-widest;\n\t}\n\n\t/* MARK: Context Menu */\n\t.cn-context-menu-content {\n\t\t@apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 bg-popover text-popover-foreground min-w-32 rounded-lg p-1 shadow-md ring-1 duration-100;\n\t}\n\n\t.cn-context-menu-content-logical {\n\t\t@apply data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2;\n\t}\n\n\t.cn-context-menu-item {\n\t\t@apply focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:text-destructive not-data-[variant=destructive]:focus:**:text-accent-foreground min-h-7 gap-2 rounded-md px-2 py-1 text-xs/relaxed data-inset:pl-7.5 [&_svg:not([class*='size-'])]:size-3.5;\n\t}\n\n\t.cn-context-menu-checkbox-item {\n\t\t@apply focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground min-h-7 gap-2 rounded-md py-1.5 pr-8 pl-2 text-xs data-inset:pl-7.5 [&_svg:not([class*='size-'])]:size-3.5;\n\t}\n\n\t.cn-context-menu-radio-item {\n\t\t@apply focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground min-h-7 gap-2 rounded-md py-1.5 pr-8 pl-2 text-xs data-inset:pl-7.5 [&_svg:not([class*='size-'])]:size-3.5;\n\t}\n\n\t.cn-context-menu-item-indicator {\n\t\t@apply pointer-events-none absolute right-2 flex items-center justify-center;\n\t}\n\n\t.cn-context-menu-label {\n\t\t@apply text-muted-foreground px-2 py-1.5 text-xs data-inset:pl-7.5;\n\t}\n\n\t.cn-context-menu-separator {\n\t\t@apply bg-border/50 -mx-1 my-1 h-px;\n\t}\n\n\t.cn-context-menu-shortcut {\n\t\t@apply text-muted-foreground group-focus/context-menu-item:text-accent-foreground ml-auto text-[0.625rem] tracking-widest;\n\t}\n\n\t.cn-context-menu-sub-trigger {\n\t\t@apply focus:bg-accent focus:text-accent-foreground data-open:bg-accent data-open:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground min-h-7 gap-2 rounded-md px-2 py-1 text-xs data-inset:pl-7.5 [&_svg:not([class*='size-'])]:size-3.5;\n\t}\n\n\t.cn-context-menu-sub-content {\n\t\t@apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 bg-popover text-popover-foreground min-w-32 rounded-lg p-1 shadow-md ring-1 duration-100;\n\t}\n\n\t.cn-context-menu-subcontent {\n\t\t@apply shadow-lg;\n\t}\n\n\t/* MARK: Dialog */\n\t.cn-dialog-overlay {\n\t\t@apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 bg-black/80 duration-100 supports-backdrop-filter:backdrop-blur-xs;\n\t}\n\n\t.cn-dialog-content {\n\t\t@apply bg-background data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 ring-foreground/10 grid max-w-[calc(100%-2rem)] gap-4 rounded-xl p-4 text-xs/relaxed ring-1 duration-100 sm:max-w-sm;\n\t}\n\n\t.cn-dialog-close {\n\t\t@apply absolute top-2 right-2;\n\t}\n\n\t.cn-dialog-header {\n\t\t@apply gap-1;\n\t}\n\n\t.cn-dialog-footer {\n\t\t@apply gap-2;\n\t}\n\n\t.cn-dialog-title {\n\t\t@apply text-sm font-medium;\n\t}\n\n\t.cn-dialog-description {\n\t\t@apply text-muted-foreground *:[a]:hover:text-foreground text-xs/relaxed *:[a]:underline *:[a]:underline-offset-3;\n\t}\n\n\t/* MARK: Drawer */\n\t.cn-drawer-overlay {\n\t\t@apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 bg-black/80 supports-backdrop-filter:backdrop-blur-xs;\n\t}\n\n\t.cn-drawer-content {\n\t\t@apply before:bg-background before:border-border relative flex h-auto flex-col bg-transparent p-2 text-xs/relaxed before:absolute before:inset-2 before:-z-10 before:rounded-xl before:border data-[vaul-drawer-direction=bottom]:inset-x-0 data-[vaul-drawer-direction=bottom]:bottom-0 data-[vaul-drawer-direction=bottom]:mt-24 data-[vaul-drawer-direction=bottom]:max-h-[80vh] data-[vaul-drawer-direction=left]:inset-y-0 data-[vaul-drawer-direction=left]:left-0 data-[vaul-drawer-direction=left]:w-3/4 data-[vaul-drawer-direction=right]:inset-y-0 data-[vaul-drawer-direction=right]:right-0 data-[vaul-drawer-direction=right]:w-3/4 data-[vaul-drawer-direction=top]:inset-x-0 data-[vaul-drawer-direction=top]:top-0 data-[vaul-drawer-direction=top]:mb-24 data-[vaul-drawer-direction=top]:max-h-[80vh] data-[vaul-drawer-direction=left]:sm:max-w-sm data-[vaul-drawer-direction=right]:sm:max-w-sm;\n\t}\n\n\t.cn-drawer-handle {\n\t\t@apply bg-muted mx-auto mt-4 hidden h-1.5 w-[100px] shrink-0 rounded-full group-data-[vaul-drawer-direction=bottom]/drawer-content:block;\n\t}\n\n\t.cn-drawer-header {\n\t\t@apply gap-1 p-4 group-data-[vaul-drawer-direction=bottom]/drawer-content:text-center group-data-[vaul-drawer-direction=top]/drawer-content:text-center md:text-left;\n\t}\n\n\t.cn-drawer-title {\n\t\t@apply text-foreground text-sm font-medium;\n\t}\n\n\t.cn-drawer-description {\n\t\t@apply text-muted-foreground text-xs/relaxed;\n\t}\n\n\t.cn-drawer-footer {\n\t\t@apply gap-2 p-4;\n\t}\n\n\t/* MARK: Dropdown Menu */\n\t.cn-dropdown-menu-content {\n\t\t@apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 bg-popover text-popover-foreground min-w-32 rounded-lg p-1 shadow-md ring-1 duration-100;\n\t}\n\n\t.cn-dropdown-menu-content-logical {\n\t\t@apply data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2;\n\t}\n\n\t.cn-dropdown-menu-item {\n\t\t@apply focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:text-destructive not-data-[variant=destructive]:focus:**:text-accent-foreground min-h-7 gap-2 rounded-md px-2 py-1 text-xs/relaxed data-inset:pl-7.5 [&_svg:not([class*='size-'])]:size-3.5;\n\t}\n\n\t.cn-dropdown-menu-checkbox-item {\n\t\t@apply focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground min-h-7 gap-2 rounded-md py-1.5 pr-8 pl-2 text-xs data-inset:pl-7.5 [&_svg:not([class*='size-'])]:size-3.5;\n\t}\n\n\t.cn-dropdown-menu-radio-item {\n\t\t@apply focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground min-h-7 gap-2 rounded-md py-1.5 pr-8 pl-2 text-xs data-inset:pl-7.5 [&_svg:not([class*='size-'])]:size-3.5;\n\t}\n\n\t.cn-dropdown-menu-item-indicator {\n\t\t@apply absolute right-2 flex items-center justify-center;\n\t}\n\n\t.cn-dropdown-menu-label {\n\t\t@apply text-muted-foreground px-2 py-1.5 text-xs data-inset:pl-7.5;\n\t}\n\n\t.cn-dropdown-menu-separator {\n\t\t@apply bg-border/50 -mx-1 my-1 h-px;\n\t}\n\n\t.cn-dropdown-menu-shortcut {\n\t\t@apply text-muted-foreground group-focus/dropdown-menu-item:text-accent-foreground ml-auto text-[0.625rem] tracking-widest;\n\t}\n\n\t.cn-dropdown-menu-sub-trigger {\n\t\t@apply focus:bg-accent focus:text-accent-foreground data-open:bg-accent data-open:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground min-h-7 gap-2 rounded-md px-2 py-1 text-xs data-inset:pl-7.5 [&_svg:not([class*='size-'])]:size-3.5;\n\t}\n\n\t.cn-dropdown-menu-sub-content {\n\t\t@apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 bg-popover text-popover-foreground min-w-32 rounded-lg p-1 shadow-md ring-1 duration-100;\n\t}\n\n\t.cn-dropdown-menu-subcontent {\n\t\t@apply shadow-lg;\n\t}\n\n\t/* MARK: Empty */\n\t.cn-empty {\n\t\t@apply gap-4 rounded-xl border-dashed p-6;\n\t}\n\n\t.cn-empty-header {\n\t\t@apply gap-1;\n\t}\n\n\t.cn-empty-media {\n\t\t@apply mb-2;\n\t}\n\n\t.cn-empty-media-default {\n\t\t@apply bg-transparent;\n\t}\n\n\t.cn-empty-media-icon {\n\t\t@apply bg-muted text-foreground flex size-8 shrink-0 items-center justify-center rounded-md [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-empty-title {\n\t\t@apply text-sm font-medium tracking-tight;\n\t}\n\n\t.cn-empty-description {\n\t\t@apply text-xs/relaxed;\n\t}\n\n\t.cn-empty-content {\n\t\t@apply gap-2 text-xs/relaxed;\n\t}\n\n\t/* MARK: Field */\n\t.cn-field-set {\n\t\t@apply gap-4 has-[>[data-slot=checkbox-group]]:gap-3 has-[>[data-slot=radio-group]]:gap-3;\n\t}\n\n\t.cn-field-legend {\n\t\t@apply mb-2 font-medium data-[variant=label]:text-xs/relaxed data-[variant=legend]:text-sm;\n\t}\n\n\t.cn-field-group {\n\t\t@apply gap-4 data-[slot=checkbox-group]:gap-3 *:data-[slot=field-group]:gap-4;\n\t}\n\n\t.cn-field {\n\t\t@apply data-[invalid=true]:text-destructive gap-2;\n\t}\n\n\t.cn-field-content {\n\t\t@apply gap-0.5;\n\t}\n\n\t.cn-field-label {\n\t\t@apply has-data-checked:bg-primary/5 dark:has-data-checked:bg-primary/10 gap-2 group-data-[disabled=true]/field:opacity-50 has-[>[data-slot=field]]:rounded-md has-[>[data-slot=field]]:border *:data-[slot=field]:p-2;\n\t}\n\n\t.cn-field-title {\n\t\t@apply gap-2 text-xs/relaxed font-medium group-data-[disabled=true]/field:opacity-50;\n\t}\n\n\t.cn-field-description {\n\t\t@apply text-muted-foreground text-left text-xs/relaxed [[data-variant=legend]+&]:-mt-1.5;\n\t}\n\n\t.cn-field-separator {\n\t\t@apply -my-2 h-5 text-xs/relaxed group-data-[variant=outline]/field-group:-mb-2;\n\t}\n\n\t.cn-field-separator-content {\n\t\t@apply text-muted-foreground px-2;\n\t}\n\n\t.cn-field-error {\n\t\t@apply text-destructive text-xs/relaxed;\n\t}\n\n\t/* MARK: Hover Card */\n\t.cn-hover-card-content {\n\t\t@apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 bg-popover text-popover-foreground w-72 rounded-lg p-2.5 text-xs/relaxed shadow-md ring-1 duration-100;\n\t}\n\n\t.cn-hover-card-content-logical {\n\t\t@apply data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2;\n\t}\n\n\t/* MARK: Input */\n\t.cn-input {\n\t\t@apply bg-input/20 dark:bg-input/30 border-input focus-visible:border-ring focus-visible:ring-ring/30 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 h-7 rounded-md border px-2 py-0.5 text-sm transition-colors file:h-6 file:text-xs/relaxed file:font-medium focus-visible:ring-2 aria-invalid:ring-2 md:text-xs/relaxed;\n\t}\n\n\t/* MARK: Input OTP */\n\t.cn-input-otp {\n\t\t@apply gap-2;\n\t}\n\n\t.cn-input-otp-group {\n\t\t@apply has-aria-invalid:ring-destructive/20 dark:has-aria-invalid:ring-destructive/40 has-aria-invalid:border-destructive rounded-md has-aria-invalid:ring-2;\n\t}\n\n\t.cn-input-otp-slot {\n\t\t@apply bg-input/20 dark:bg-input/30 border-input data-[active=true]:border-ring data-[active=true]:ring-ring/30 data-[active=true]:aria-invalid:ring-destructive/20 dark:data-[active=true]:aria-invalid:ring-destructive/40 aria-invalid:border-destructive data-[active=true]:aria-invalid:border-destructive size-7 border-y border-r text-xs/relaxed transition-all outline-none first:rounded-l-md first:border-l last:rounded-r-md data-[active=true]:ring-2;\n\t}\n\n\t.cn-input-otp-caret-line {\n\t\t@apply animate-caret-blink bg-foreground h-4 w-px duration-1000;\n\t}\n\n\t.cn-input-otp-separator {\n\t\t@apply [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t/* MARK: Item */\n\t.cn-item {\n\t\t@apply [a]:hover:bg-muted rounded-md border text-xs/relaxed;\n\t}\n\n\t.cn-item-variant-default {\n\t\t@apply border-transparent;\n\t}\n\n\t.cn-item-variant-outline {\n\t\t@apply border-border;\n\t}\n\n\t.cn-item-variant-muted {\n\t\t@apply bg-muted/50 border-transparent;\n\t}\n\n\t.cn-item-size-default {\n\t\t@apply gap-2.5 px-3 py-2.5;\n\t}\n\n\t.cn-item-size-sm {\n\t\t@apply gap-2.5 px-3 py-2.5;\n\t}\n\n\t.cn-item-size-xs {\n\t\t@apply gap-2.5 px-2.5 py-2 in-data-[slot=dropdown-menu-content]:p-0;\n\t}\n\n\t.cn-item-media {\n\t\t@apply gap-2 group-has-data-[slot=item-description]/item:translate-y-0.5 group-has-data-[slot=item-description]/item:self-start;\n\t}\n\n\t.cn-item-media-variant-default {\n\t\t@apply bg-transparent;\n\t}\n\n\t.cn-item-media-variant-icon {\n\t\t@apply [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-item-media-variant-image {\n\t\t@apply size-8 overflow-hidden rounded-sm group-data-[size=sm]/item:size-8 group-data-[size=xs]/item:size-6 [&_img]:size-full [&_img]:object-cover;\n\t}\n\n\t.cn-item-content {\n\t\t@apply gap-1 group-data-[size=xs]/item:gap-0.5;\n\t}\n\n\t.cn-item-title {\n\t\t@apply gap-2 text-xs/relaxed leading-snug font-medium underline-offset-4;\n\t}\n\n\t.cn-item-description {\n\t\t@apply text-muted-foreground text-left text-xs/relaxed;\n\t}\n\n\t.cn-item-actions {\n\t\t@apply gap-2;\n\t}\n\n\t.cn-item-header {\n\t\t@apply gap-2;\n\t}\n\n\t.cn-item-footer {\n\t\t@apply gap-2;\n\t}\n\n\t.cn-item-group {\n\t\t@apply gap-4 has-data-[size=sm]:gap-2.5 has-data-[size=xs]:gap-2;\n\t}\n\n\t.cn-item-separator {\n\t\t@apply my-2;\n\t}\n\n\t/* MARK: Kbd */\n\t.cn-kbd {\n\t\t@apply bg-muted text-muted-foreground in-data-[slot=tooltip-content]:bg-background/20 in-data-[slot=tooltip-content]:text-background dark:in-data-[slot=tooltip-content]:bg-background/10 h-5 w-fit min-w-5 gap-1 rounded-xs px-1 font-sans text-[0.625rem] font-medium [&_svg:not([class*='size-'])]:size-3;\n\t}\n\n\t.cn-kbd-group {\n\t\t@apply gap-1;\n\t}\n\n\t/* MARK: Label */\n\t.cn-label {\n\t\t@apply gap-2 text-xs/relaxed leading-none font-medium group-data-[disabled=true]:opacity-50 peer-disabled:opacity-50;\n\t}\n\n\t/* MARK: Menubar */\n\t.cn-menubar {\n\t\t@apply h-9 rounded-lg border p-1;\n\t}\n\n\t.cn-menubar-trigger {\n\t\t@apply hover:bg-muted aria-expanded:bg-muted rounded-[calc(var(--radius-md)-2px)] px-2 py-[calc(--spacing(0.85))] text-xs/relaxed font-medium;\n\t}\n\n\t.cn-menubar-content {\n\t\t@apply bg-popover text-popover-foreground data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 min-w-32 rounded-lg p-1 shadow-md ring-1 duration-100;\n\t}\n\n\t.cn-menubar-content-logical {\n\t\t@apply data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2;\n\t}\n\n\t.cn-menubar-item {\n\t\t@apply focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:text-destructive! not-data-[variant=destructive]:focus:**:text-accent-foreground min-h-7 gap-2 rounded-md px-2 py-1 text-xs/relaxed data-disabled:opacity-50 data-inset:pl-7.5 [&_svg:not([class*='size-'])]:size-3.5;\n\t}\n\n\t.cn-menubar-checkbox-item {\n\t\t@apply focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground min-h-7 gap-2 rounded-md py-1.5 pr-2 pl-7.5 text-xs data-inset:pl-7.5;\n\t}\n\n\t.cn-menubar-checkbox-item-indicator {\n\t\t@apply left-2 size-4 [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-menubar-radio-item {\n\t\t@apply focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground min-h-7 gap-2 rounded-md py-1.5 pr-2 pl-7.5 text-xs data-disabled:opacity-50 data-inset:pl-7.5 [&_svg:not([class*='size-'])]:size-3.5;\n\t}\n\n\t.cn-menubar-radio-item-indicator {\n\t\t@apply left-2 size-4 [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-menubar-label {\n\t\t@apply text-muted-foreground px-2 py-1.5 text-xs data-inset:pl-7.5;\n\t}\n\n\t.cn-menubar-separator {\n\t\t@apply bg-border/50 -mx-1 my-1 h-px;\n\t}\n\n\t.cn-menubar-shortcut {\n\t\t@apply text-muted-foreground group-focus/menubar-item:text-accent-foreground text-[0.625rem] tracking-widest;\n\t}\n\n\t.cn-menubar-sub-trigger {\n\t\t@apply focus:bg-accent focus:text-accent-foreground data-open:bg-accent data-open:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground min-h-7 gap-2 rounded-md px-2 py-1 text-xs data-inset:pl-7.5 [&_svg:not([class*='size-'])]:size-3.5;\n\t}\n\n\t.cn-menubar-sub-content {\n\t\t@apply bg-popover text-popover-foreground data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 min-w-32 rounded-lg p-1 shadow-md ring-1 duration-100;\n\t}\n\n\t/* MARK: Navigation Menu */\n\t.cn-navigation-menu {\n\t\t@apply max-w-max;\n\t}\n\n\t.cn-navigation-menu-list {\n\t\t@apply gap-0;\n\t}\n\n\t.cn-navigation-menu-trigger {\n\t\t@apply bg-background hover:bg-muted focus:bg-muted data-open:hover:bg-muted data-open:focus:bg-muted data-open:bg-muted/50 focus-visible:ring-ring/30 data-popup-open:bg-muted/50 data-popup-open:hover:bg-muted rounded-md px-2.5 py-1.5 text-xs/relaxed font-medium transition-all focus-visible:ring-2 focus-visible:outline-1 disabled:opacity-50;\n\t}\n\n\t.cn-navigation-menu-trigger-icon {\n\t\t@apply relative top-px ml-1 size-3 transition duration-300 group-data-open/navigation-menu-trigger:rotate-180 group-data-popup-open/navigation-menu-trigger:rotate-180;\n\t}\n\n\t.cn-navigation-menu-content {\n\t\t@apply data-[motion^=from-]:animate-in data-[motion^=to-]:animate-out data-[motion^=from-]:fade-in data-[motion^=to-]:fade-out data-[motion=from-end]:slide-in-from-right-52 data-[motion=from-start]:slide-in-from-left-52 data-[motion=to-end]:slide-out-to-right-52 data-[motion=to-start]:slide-out-to-left-52 group-data-[viewport=false]/navigation-menu:bg-popover group-data-[viewport=false]/navigation-menu:text-popover-foreground group-data-[viewport=false]/navigation-menu:data-open:animate-in group-data-[viewport=false]/navigation-menu:data-closed:animate-out group-data-[viewport=false]/navigation-menu:data-closed:zoom-out-95 group-data-[viewport=false]/navigation-menu:data-open:zoom-in-95 group-data-[viewport=false]/navigation-menu:data-open:fade-in-0 group-data-[viewport=false]/navigation-menu:data-closed:fade-out-0 group-data-[viewport=false]/navigation-menu:ring-foreground/10 p-1.5 ease-[cubic-bezier(0.22,1,0.36,1)] group-data-[viewport=false]/navigation-menu:rounded-xl group-data-[viewport=false]/navigation-menu:shadow-md group-data-[viewport=false]/navigation-menu:ring-1 group-data-[viewport=false]/navigation-menu:duration-300;\n\t}\n\n\t.cn-navigation-menu-viewport {\n\t\t@apply bg-popover text-popover-foreground data-open:animate-in data-closed:animate-out data-closed:zoom-out-90 data-open:zoom-in-90 ring-foreground/10 rounded-xl shadow-md ring-1 duration-100;\n\t}\n\n\t.cn-navigation-menu-link {\n\t\t@apply data-[active=true]:focus:bg-muted data-[active=true]:hover:bg-muted data-[active=true]:bg-muted/50 focus-visible:ring-ring/30 hover:bg-muted focus:bg-muted flex items-center gap-1.5 rounded-lg p-2 text-xs/relaxed transition-all outline-none focus-visible:ring-2 focus-visible:outline-1 [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-navigation-menu-indicator {\n\t\t@apply data-[state=visible]:animate-in data-[state=hidden]:animate-out data-[state=hidden]:fade-out data-[state=visible]:fade-in;\n\t}\n\n\t.cn-navigation-menu-indicator-arrow {\n\t\t@apply bg-border rounded-tl-sm shadow-md;\n\t}\n\n\t.cn-navigation-menu-positioner {\n\t\t@apply transition-[top,left,right,bottom] duration-300 ease-[cubic-bezier(0.22,1,0.36,1)] data-[side=bottom]:before:top-[-10px] data-[side=bottom]:before:right-0 data-[side=bottom]:before:left-0;\n\t}\n\n\t.cn-navigation-menu-popup {\n\t\t@apply bg-popover text-popover-foreground ring-foreground/10 rounded-xl shadow ring-1 transition-all ease-[cubic-bezier(0.22,1,0.36,1)] outline-none data-ending-style:scale-90 data-ending-style:opacity-0 data-ending-style:duration-150 data-starting-style:scale-90 data-starting-style:opacity-0;\n\t}\n\n\t/* MARK: Native Select */\n\t.cn-native-select {\n\t\t@apply border-input bg-input/20 placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 dark:hover:bg-input/50 focus-visible:border-ring focus-visible:ring-ring/30 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 h-7 w-full min-w-0 appearance-none rounded-md border py-0.5 pr-6 pl-2 text-xs/relaxed transition-colors select-none focus-visible:ring-2 aria-invalid:ring-2 data-[size=sm]:h-6 data-[size=sm]:text-[0.625rem];\n\t}\n\n\t.cn-native-select-icon {\n\t\t@apply text-muted-foreground top-1/2 right-1.5 size-3.5 -translate-y-1/2 group-data-[size=sm]/native-select:size-3 group-data-[size=sm]/native-select:-translate-y-[calc(--spacing(1.25))];\n\t}\n\n\t/* MARK: Pagination */\n\t.cn-pagination-content {\n\t\t@apply gap-0.5;\n\t}\n\n\t.cn-pagination-ellipsis {\n\t\t@apply size-7 items-center justify-center [&_svg:not([class*='size-'])]:size-3.5;\n\t}\n\n\t.cn-pagination-previous {\n\t\t@apply pl-2!;\n\t}\n\n\t.cn-pagination-next {\n\t\t@apply pr-2!;\n\t}\n\n\t/* MARK: Popover */\n\t.cn-popover-content {\n\t\t@apply bg-popover text-popover-foreground data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 flex flex-col gap-4 rounded-lg p-2.5 text-xs shadow-md ring-1 duration-100;\n\t}\n\n\t.cn-popover-content-logical {\n\t\t@apply data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2;\n\t}\n\n\t.cn-popover-header {\n\t\t@apply flex flex-col gap-1 text-xs;\n\t}\n\n\t.cn-popover-title {\n\t\t@apply text-sm font-medium;\n\t}\n\n\t.cn-popover-description {\n\t\t@apply text-muted-foreground;\n\t}\n\n\t/* MARK: Progress */\n\t.cn-progress {\n\t\t@apply bg-muted h-1 rounded-md;\n\t}\n\n\t.cn-progress-track {\n\t\t@apply bg-muted h-1 rounded-md;\n\t}\n\n\t.cn-progress-indicator {\n\t\t@apply bg-primary;\n\t}\n\n\t.cn-progress-label {\n\t\t@apply text-xs/relaxed font-medium;\n\t}\n\n\t.cn-progress-value {\n\t\t@apply text-muted-foreground ml-auto text-xs/relaxed tabular-nums;\n\t}\n\n\t/* MARK: Radio Group */\n\t.cn-radio-group {\n\t\t@apply grid gap-3;\n\t}\n\n\t.cn-radio-group-item {\n\t\t@apply border-input dark:bg-input/30 data-checked:bg-primary data-checked:text-primary-foreground dark:data-checked:bg-primary data-checked:border-primary aria-invalid:aria-checked:border-primary aria-invalid:border-destructive focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 dark:aria-invalid:border-destructive/50 flex size-4 rounded-full focus-visible:ring-3 aria-invalid:ring-3;\n\t}\n\n\t.cn-radio-group-indicator {\n\t\t@apply flex size-4 items-center justify-center;\n\t}\n\n\t.cn-radio-group-indicator-icon {\n\t\t@apply bg-primary-foreground absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2 rounded-full;\n\t}\n\n\t/* MARK: Resizable */\n\t.cn-resizable-handle-icon {\n\t\t@apply bg-border h-6 w-1 rounded-lg;\n\t}\n\n\t/* MARK: Scroll Area */\n\t.cn-scroll-area-scrollbar {\n\t\t@apply data-horizontal:h-2.5 data-horizontal:flex-col data-horizontal:border-t data-horizontal:border-t-transparent data-vertical:h-full data-vertical:w-2.5 data-vertical:border-l data-vertical:border-l-transparent;\n\t}\n\n\t.cn-scroll-area-thumb {\n\t\t@apply rounded-full;\n\t}\n\n\t/* MARK: Select */\n\t.cn-select-trigger {\n\t\t@apply border-input data-placeholder:text-muted-foreground bg-input/20 dark:bg-input/30 dark:hover:bg-input/50 focus-visible:border-ring focus-visible:ring-ring/30 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 gap-1.5 rounded-md border px-2 py-1.5 text-xs/relaxed transition-colors focus-visible:ring-2 aria-invalid:ring-2 data-[size=default]:h-7 data-[size=sm]:h-6 *:data-[slot=select-value]:flex *:data-[slot=select-value]:gap-1.5 [&_svg:not([class*='size-'])]:size-3.5;\n\t}\n\n\t.cn-select-value {\n\t\t@apply flex flex-1 text-left;\n\t}\n\n\t.cn-select-trigger-icon {\n\t\t@apply text-muted-foreground size-3.5;\n\t}\n\n\t.cn-select-content {\n\t\t@apply bg-popover text-popover-foreground data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 min-w-32 rounded-lg shadow-md ring-1 duration-100;\n\t}\n\n\t.cn-select-content-logical {\n\t\t@apply data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2;\n\t}\n\n\t.cn-select-label {\n\t\t@apply text-muted-foreground px-2 py-1.5 text-xs;\n\t}\n\n\t.cn-select-item {\n\t\t@apply focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground min-h-7 gap-2 rounded-md px-2 py-1 text-xs/relaxed [&_svg:not([class*='size-'])]:size-3.5 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2;\n\t}\n\n\t.cn-select-item-indicator {\n\t\t@apply pointer-events-none absolute right-2 flex items-center justify-center;\n\t}\n\n\t.cn-select-group {\n\t\t@apply scroll-my-1 p-1;\n\t}\n\n\t.cn-select-item-text {\n\t\t@apply flex flex-1 gap-2;\n\t}\n\n\t.cn-select-separator {\n\t\t@apply bg-border/50 -mx-1 my-1 h-px;\n\t}\n\n\t.cn-select-scroll-up-button {\n\t\t@apply bg-popover z-10 flex cursor-default items-center justify-center py-1 [&_svg:not([class*='size-'])]:size-3.5;\n\t}\n\n\t.cn-select-scroll-down-button {\n\t\t@apply bg-popover z-10 flex cursor-default items-center justify-center py-1 [&_svg:not([class*='size-'])]:size-3.5;\n\t}\n\n\t/* MARK: Separator */\n\t.cn-separator {\n\t\t@apply bg-border shrink-0;\n\t}\n\n\t.cn-separator-horizontal {\n\t\t@apply h-px w-full;\n\t}\n\n\t.cn-separator-vertical {\n\t\t@apply h-full w-px;\n\t}\n\n\t/* MARK: Sheet */\n\t.cn-sheet-overlay {\n\t\t@apply bg-black/80 supports-backdrop-filter:backdrop-blur-xs;\n\t}\n\n\t.cn-sheet-content {\n\t\t@apply bg-background fixed z-50 flex flex-col bg-clip-padding text-xs/relaxed shadow-lg transition duration-200 ease-in-out data-[side=bottom]:inset-x-0 data-[side=bottom]:bottom-0 data-[side=bottom]:h-auto data-[side=bottom]:border-t data-[side=left]:inset-y-0 data-[side=left]:left-0 data-[side=left]:h-full data-[side=left]:w-3/4 data-[side=left]:border-r data-[side=right]:inset-y-0 data-[side=right]:right-0 data-[side=right]:h-full data-[side=right]:w-3/4 data-[side=right]:border-l data-[side=top]:inset-x-0 data-[side=top]:top-0 data-[side=top]:h-auto data-[side=top]:border-b data-[side=left]:sm:max-w-sm data-[side=right]:sm:max-w-sm;\n\t}\n\n\t.cn-sheet-close {\n\t\t@apply absolute top-4 right-4;\n\t}\n\n\t.cn-sheet-header {\n\t\t@apply gap-1.5 p-6;\n\t}\n\n\t.cn-sheet-footer {\n\t\t@apply gap-2 p-6;\n\t}\n\n\t.cn-sheet-title {\n\t\t@apply text-foreground text-sm font-medium;\n\t}\n\n\t.cn-sheet-description {\n\t\t@apply text-muted-foreground text-xs/relaxed;\n\t}\n\n\t/* MARK: Sidebar */\n\n\t/* MARK: Sidebar */\n\t.cn-sidebar-gap {\n\t\t@apply transition-[width] duration-200 ease-linear;\n\t}\n\n\t.cn-sidebar-inner {\n\t\t@apply bg-sidebar group-data-[variant=floating]:ring-sidebar-border group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:shadow-sm group-data-[variant=floating]:ring-1;\n\t}\n\n\t.cn-sidebar-rail {\n\t\t@apply hover:after:bg-sidebar-border;\n\t}\n\n\t.cn-sidebar-inset {\n\t\t@apply bg-background md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2;\n\t}\n\n\t.cn-sidebar-input {\n\t\t@apply bg-muted/20 dark:bg-muted/30 border-input h-8 w-full;\n\t}\n\n\t.cn-sidebar-header {\n\t\t@apply gap-2 p-2;\n\t}\n\n\t.cn-sidebar-content {\n\t\t@apply no-scrollbar gap-0;\n\t}\n\n\t.cn-sidebar-footer {\n\t\t@apply gap-2 p-2;\n\t}\n\n\t.cn-sidebar-separator {\n\t\t@apply bg-sidebar-border mx-2;\n\t}\n\n\t.cn-sidebar-group {\n\t\t@apply px-2 py-1;\n\t}\n\n\t.cn-sidebar-menu {\n\t\t@apply gap-px;\n\t}\n\n\t.cn-sidebar-group-content {\n\t\t@apply text-xs;\n\t}\n\n\t.cn-sidebar-group-label {\n\t\t@apply text-sidebar-foreground/70 ring-sidebar-ring h-8 rounded-md px-2 text-xs transition-[margin,opacity] duration-200 ease-linear group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0 focus-visible:ring-2 [&>svg]:size-4;\n\t}\n\n\t.cn-sidebar-group-action {\n\t\t@apply text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground absolute top-3.5 right-3 w-5 rounded-md p-0 focus-visible:ring-2 [&>svg]:size-4;\n\t}\n\n\t.cn-sidebar-menu-button {\n\t\t@apply ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground active:bg-sidebar-accent active:text-sidebar-accent-foreground data-active:bg-sidebar-accent data-active:text-sidebar-accent-foreground data-open:hover:bg-sidebar-accent data-open:hover:text-sidebar-accent-foreground gap-2 rounded-[calc(var(--radius-sm)+2px)] p-2 text-left text-xs transition-[width,height,padding] group-has-data-[sidebar=menu-action]/menu-item:pr-8 group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! focus-visible:ring-2 data-active:font-medium;\n\t}\n\n\t.cn-sidebar-menu-button-variant-default {\n\t\t@apply hover:bg-sidebar-accent hover:text-sidebar-accent-foreground;\n\t}\n\n\t.cn-sidebar-menu-button-variant-outline {\n\t\t@apply bg-background hover:bg-sidebar-accent hover:text-sidebar-accent-foreground shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))];\n\t}\n\n\t.cn-sidebar-menu-button-size-default {\n\t\t@apply h-8 text-xs;\n\t}\n\n\t.cn-sidebar-menu-button-size-sm {\n\t\t@apply h-7 text-xs;\n\t}\n\n\t.cn-sidebar-menu-button-size-lg {\n\t\t@apply h-12 text-xs group-data-[collapsible=icon]:p-0!;\n\t}\n\n\t.cn-sidebar-menu-action {\n\t\t@apply text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground peer-hover/menu-button:text-sidebar-accent-foreground absolute top-1.5 right-1 aspect-square w-5 rounded-[calc(var(--radius-sm)-2px)] p-0 peer-data-[size=default]/menu-button:top-1.5 peer-data-[size=lg]/menu-button:top-2.5 peer-data-[size=sm]/menu-button:top-1 focus-visible:ring-2 [&>svg]:size-4;\n\t}\n\n\t.cn-sidebar-menu-badge {\n\t\t@apply text-sidebar-foreground peer-hover/menu-button:text-sidebar-accent-foreground peer-data-active/menu-button:text-sidebar-accent-foreground pointer-events-none absolute right-1 flex h-5 min-w-5 rounded-[calc(var(--radius-sm)-2px)] px-1 text-xs font-medium peer-data-[size=default]/menu-button:top-1.5 peer-data-[size=lg]/menu-button:top-2.5 peer-data-[size=sm]/menu-button:top-1;\n\t}\n\n\t.cn-sidebar-menu-skeleton {\n\t\t@apply h-8 gap-2 rounded-md px-2;\n\t}\n\n\t.cn-sidebar-menu-skeleton-icon {\n\t\t@apply size-4 rounded-md;\n\t}\n\n\t.cn-sidebar-menu-skeleton-text {\n\t\t@apply h-4;\n\t}\n\n\t.cn-sidebar-menu-sub {\n\t\t@apply border-sidebar-border mx-3.5 translate-x-px gap-1 border-l px-2.5 py-0.5 group-data-[collapsible=icon]:hidden;\n\t}\n\n\t.cn-sidebar-menu-sub-button {\n\t\t@apply text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground active:bg-sidebar-accent active:text-sidebar-accent-foreground [&>svg]:text-sidebar-accent-foreground data-active:bg-sidebar-accent data-active:text-sidebar-accent-foreground h-7 gap-2 rounded-md px-2 focus-visible:ring-2 data-[size=md]:text-xs data-[size=sm]:text-xs [&>svg]:size-4;\n\t}\n\n\t/* MARK: Skeleton */\n\t.cn-skeleton {\n\t\t@apply bg-muted rounded-md;\n\t}\n\n\t/* MARK: Slider */\n\t.cn-slider {\n\t\t@apply data-vertical:min-h-40;\n\t}\n\n\t.cn-slider-track {\n\t\t@apply bg-muted rounded-md data-horizontal:h-3 data-horizontal:w-full data-vertical:h-full data-vertical:w-3;\n\t}\n\n\t.cn-slider-range {\n\t\t@apply bg-primary;\n\t}\n\n\t.cn-slider-thumb {\n\t\t@apply border-primary ring-ring/30 size-4 rounded-md border bg-white shadow-sm transition-colors hover:ring-4 focus-visible:ring-4 focus-visible:outline-hidden;\n\t}\n\n\t/* MARK: Sonner */\n\t.cn-toast {\n\t\t@apply rounded-md;\n\t}\n\n\t/* MARK: Switch */\n\t.cn-switch {\n\t\t@apply data-checked:bg-primary data-unchecked:bg-input focus-visible:border-ring focus-visible:ring-ring/30 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 dark:data-unchecked:bg-input/80 shrink-0 rounded-full border border-transparent focus-visible:ring-2 aria-invalid:ring-2 data-[size=default]:h-[16.6px] data-[size=default]:w-[28px] data-[size=sm]:h-[14px] data-[size=sm]:w-[24px];\n\t}\n\n\t.cn-switch-thumb {\n\t\t@apply bg-background dark:data-unchecked:bg-foreground dark:data-checked:bg-primary-foreground rounded-full group-data-[size=default]/switch:size-3.5 group-data-[size=sm]/switch:size-3 group-data-[size=default]/switch:data-checked:translate-x-[calc(100%-2px)] group-data-[size=sm]/switch:data-checked:translate-x-[calc(100%-2px)] group-data-[size=default]/switch:data-unchecked:translate-x-0 group-data-[size=sm]/switch:data-unchecked:translate-x-0;\n\t}\n\n\t/* MARK: Table */\n\t.cn-table-container {\n\t\t@apply relative w-full overflow-x-auto;\n\t}\n\n\t.cn-table {\n\t\t@apply w-full caption-bottom text-xs;\n\t}\n\n\t.cn-table-header {\n\t\t@apply [&_tr]:border-b;\n\t}\n\n\t.cn-table-body {\n\t\t@apply [&_tr:last-child]:border-0;\n\t}\n\n\t.cn-table-footer {\n\t\t@apply bg-muted/50 border-t font-medium [&>tr]:last:border-b-0;\n\t}\n\n\t.cn-table-row {\n\t\t@apply hover:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors;\n\t}\n\n\t.cn-table-head {\n\t\t@apply text-foreground h-10 px-2 text-left align-middle font-medium whitespace-nowrap [&:has([role=checkbox])]:pr-0;\n\t}\n\n\t.cn-table-cell {\n\t\t@apply p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0;\n\t}\n\n\t.cn-table-caption {\n\t\t@apply text-muted-foreground mt-4 text-xs;\n\t}\n\n\t/* MARK: Tabs */\n\t.cn-tabs {\n\t\t@apply gap-2;\n\t}\n\n\t.cn-tabs-list {\n\t\t@apply rounded-lg p-[3px] group-data-horizontal/tabs:h-8 data-[variant=line]:rounded-none;\n\t}\n\n\t.cn-tabs-trigger {\n\t\t@apply gap-1.5 rounded-md border border-transparent px-1.5 py-0.5 text-xs font-medium group-data-vertical/tabs:py-[calc(--spacing(1.25))] [&_svg:not([class*='size-'])]:size-3.5;\n\t}\n\n\t.cn-tabs-content {\n\t\t@apply text-xs/relaxed;\n\t}\n\n\t/* MARK: Textarea */\n\t.cn-textarea {\n\t\t@apply border-input bg-input/20 dark:bg-input/30 focus-visible:border-ring focus-visible:ring-ring/30 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 resize-none rounded-md border px-2 py-2 text-sm transition-colors focus-visible:ring-2 aria-invalid:ring-2 md:text-xs/relaxed;\n\t}\n\n\t/* MARK: Toggle */\n\t.cn-toggle {\n\t\t@apply hover:text-foreground aria-pressed:bg-muted focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive data-[state=on]:bg-muted gap-1 rounded-md text-xs font-medium transition-all [&_svg:not([class*='size-'])]:size-3.5;\n\t}\n\n\t.cn-toggle-variant-default {\n\t\t@apply bg-transparent;\n\t}\n\n\t.cn-toggle-variant-outline {\n\t\t@apply border-input hover:bg-muted border bg-transparent;\n\t}\n\n\t.cn-toggle-size-default {\n\t\t@apply h-7 min-w-7 px-2;\n\t}\n\n\t.cn-toggle-size-sm {\n\t\t@apply h-6 min-w-6 rounded-[min(var(--radius-md),8px)] px-1.5 text-[0.625rem] [&_svg:not([class*='size-'])]:size-3;\n\t}\n\n\t.cn-toggle-size-lg {\n\t\t@apply h-8 min-w-8 px-2;\n\t}\n\n\t/* MARK: Toggle Group */\n\t.cn-toggle-group {\n\t\t@apply rounded-md data-[size=sm]:rounded-[min(var(--radius-md),8px)];\n\t}\n\n\t.cn-toggle-group-item {\n\t\t@apply group-data-[spacing=0]/toggle-group:rounded-none group-data-[spacing=0]/toggle-group:px-2 group-data-horizontal/toggle-group:data-[spacing=0]:first:rounded-l-md group-data-vertical/toggle-group:data-[spacing=0]:first:rounded-t-md group-data-horizontal/toggle-group:data-[spacing=0]:last:rounded-r-md group-data-vertical/toggle-group:data-[spacing=0]:last:rounded-b-md;\n\t}\n\n\t/* MARK: Tooltip */\n\t.cn-tooltip-content {\n\t\t@apply data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 inline-flex items-center gap-1.5 rounded-md px-3 py-1.5 text-xs has-data-[slot=kbd]:pr-1.5 **:data-[slot=kbd]:relative **:data-[slot=kbd]:isolate **:data-[slot=kbd]:z-50 **:data-[slot=kbd]:rounded-sm;\n\t}\n\n\t.cn-tooltip-content-logical {\n\t\t@apply data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2;\n\t}\n\n\t.cn-tooltip-arrow {\n\t\t@apply size-2.5 translate-y-[calc(-50%-2px)] rotate-45 rounded-[2px];\n\t}\n\n\t.cn-tooltip-arrow-logical {\n\t\t@apply data-[side=inline-end]:top-1/2! data-[side=inline-end]:-left-1 data-[side=inline-end]:-translate-y-1/2 data-[side=inline-start]:top-1/2! data-[side=inline-start]:-right-1 data-[side=inline-start]:-translate-y-1/2;\n\t}\n\n\t/* MARK: Input Group */\n\t.cn-input-group {\n\t\t@apply border-input bg-input/20 dark:bg-input/30 has-[[data-slot=input-group-control]:focus-visible]:border-ring has-[[data-slot=input-group-control]:focus-visible]:ring-ring/30 has-[[data-slot][aria-invalid=true]]:ring-destructive/20 has-[[data-slot][aria-invalid=true]]:border-destructive dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40 h-7 rounded-md border transition-colors in-data-[slot=combobox-content]:focus-within:border-inherit in-data-[slot=combobox-content]:focus-within:ring-0 has-data-[align=block-end]:rounded-md has-data-[align=block-start]:rounded-md has-[[data-slot=input-group-control]:focus-visible]:ring-2 has-[[data-slot][aria-invalid=true]]:ring-2 has-[textarea]:rounded-md has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>[data-align=block-end]]:[&>input]:pt-3 has-[>[data-align=block-start]]:[&>input]:pb-3 has-[>[data-align=inline-end]]:[&>input]:pr-1.5 has-[>[data-align=inline-start]]:[&>input]:pl-1.5;\n\t}\n\n\t.cn-input-group-addon {\n\t\t@apply text-muted-foreground **:data-[slot=kbd]:bg-muted-foreground/10 h-auto gap-1 py-2 text-xs/relaxed font-medium group-data-[disabled=true]/input-group:opacity-50 **:data-[slot=kbd]:rounded-[calc(var(--radius-sm)-2px)] **:data-[slot=kbd]:px-1 **:data-[slot=kbd]:text-[0.625rem] [&>svg:not([class*='size-'])]:size-3.5;\n\t}\n\n\t.cn-input-group-addon-align-inline-start {\n\t\t@apply pl-2 has-[>button]:ml-[-0.275rem] has-[>kbd]:ml-[-0.275rem];\n\t}\n\n\t.cn-input-group-addon-align-inline-end {\n\t\t@apply pr-2 has-[>button]:mr-[-0.275rem] has-[>kbd]:mr-[-0.275rem];\n\t}\n\n\t.cn-input-group-addon-align-block-start {\n\t\t@apply px-2 pt-2 group-has-[>input]/input-group:pt-2 [.border-b]:pb-2;\n\t}\n\n\t.cn-input-group-addon-align-block-end {\n\t\t@apply px-2 pb-2 group-has-[>input]/input-group:pb-2 [.border-t]:pt-2;\n\t}\n\n\t.cn-input-group-button {\n\t\t@apply gap-2 rounded-md text-xs/relaxed;\n\t}\n\n\t.cn-input-group-button-size-xs {\n\t\t@apply h-5 gap-1 rounded-[calc(var(--radius-sm)-2px)] px-1 [&>svg:not([class*='size-'])]:size-3;\n\t}\n\n\t.cn-input-group-button-size-icon-xs {\n\t\t@apply size-6 p-0 has-[>svg]:p-0;\n\t}\n\n\t.cn-input-group-button-size-sm {\n\t\t@apply gap-1;\n\t}\n\n\t.cn-input-group-button-size-icon-sm {\n\t\t@apply size-7 p-0 has-[>svg]:p-0;\n\t}\n\n\t.cn-input-group-text {\n\t\t@apply text-muted-foreground gap-2 text-xs/relaxed [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-input-group-input {\n\t\t@apply rounded-none border-0 bg-transparent shadow-none ring-0 focus-visible:ring-0 aria-invalid:ring-0 dark:bg-transparent;\n\t}\n\n\t.cn-input-group-textarea {\n\t\t@apply rounded-none border-0 bg-transparent py-2 shadow-none ring-0 focus-visible:ring-0 aria-invalid:ring-0 dark:bg-transparent;\n\t}\n\n\t/* MARK: Menu Translucent */\n\t.cn-menu-translucent {\n\t\t@apply bg-popover/70 **:data-[slot$=-item]:focus:bg-foreground/10 **:data-[slot$=-item]:data-highlighted:bg-foreground/10 **:data-[slot$=-separator]:bg-foreground/5 **:data-[slot$=-trigger]:focus:bg-foreground/10 **:data-[slot$=-trigger]:aria-expanded:bg-foreground/10! **:data-[variant=destructive]:focus:bg-foreground/10! **:data-[variant=destructive]:text-accent-foreground! **:data-[variant=destructive]:**:text-accent-foreground! relative animate-none! before:pointer-events-none before:absolute before:inset-0 before:-z-1 before:rounded-[inherit] before:backdrop-blur-2xl before:backdrop-saturate-150;\n\t}\n}\n"
  },
  {
    "path": "docs/src/lib/registry/styles/style-nova.css",
    "content": ".style-nova {\n\t/* MARK: Accordion */\n\t.cn-accordion-item {\n\t\t@apply not-last:border-b;\n\t}\n\n\t.cn-accordion-trigger {\n\t\t@apply focus-visible:ring-ring/50 focus-visible:border-ring focus-visible:after:border-ring **:data-[slot=accordion-trigger-icon]:text-muted-foreground rounded-lg py-2.5 text-left text-sm font-medium hover:underline focus-visible:ring-3 **:data-[slot=accordion-trigger-icon]:ml-auto **:data-[slot=accordion-trigger-icon]:size-4;\n\t}\n\n\t.cn-accordion-content {\n\t\t@apply data-open:animate-accordion-down data-closed:animate-accordion-up text-sm;\n\t}\n\n\t.cn-accordion-content-inner {\n\t\t@apply pt-0 pb-2.5;\n\t}\n\n\t/* MARK: Alert */\n\t.cn-alert {\n\t\t@apply grid gap-0.5 rounded-lg border px-2.5 py-2 text-left text-sm has-data-[slot=alert-action]:relative has-data-[slot=alert-action]:pr-18 has-[>svg]:grid-cols-[auto_1fr] has-[>svg]:gap-x-2 *:[svg]:row-span-2 *:[svg]:translate-y-0.5 *:[svg]:text-current *:[svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-alert-variant-default {\n\t\t@apply bg-card text-card-foreground;\n\t}\n\n\t.cn-alert-variant-destructive {\n\t\t@apply text-destructive bg-card *:data-[slot=alert-description]:text-destructive/90 *:[svg]:text-current;\n\t}\n\n\t.cn-alert-title {\n\t\t@apply font-medium group-has-[>svg]/alert:col-start-2;\n\t}\n\n\t.cn-alert-description {\n\t\t@apply text-muted-foreground text-sm text-balance md:text-pretty [&_p:not(:last-child)]:mb-4;\n\t}\n\n\t.cn-alert-action {\n\t\t@apply absolute top-2 right-2;\n\t}\n\n\t/* MARK: Alert Dialog */\n\t.cn-alert-dialog-overlay {\n\t\t@apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 bg-black/10 duration-100 supports-backdrop-filter:backdrop-blur-xs;\n\t}\n\n\t.cn-alert-dialog-content {\n\t\t@apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 bg-background ring-foreground/10 gap-4 rounded-xl p-4 ring-1 duration-100 data-[size=default]:max-w-xs data-[size=sm]:max-w-xs data-[size=default]:sm:max-w-sm;\n\t}\n\n\t.cn-alert-dialog-header {\n\t\t@apply grid grid-rows-[auto_1fr] place-items-center gap-1.5 text-center has-data-[slot=alert-dialog-media]:grid-rows-[auto_auto_1fr] has-data-[slot=alert-dialog-media]:gap-x-4 sm:group-data-[size=default]/alert-dialog-content:place-items-start sm:group-data-[size=default]/alert-dialog-content:text-left sm:group-data-[size=default]/alert-dialog-content:has-data-[slot=alert-dialog-media]:grid-rows-[auto_1fr];\n\t}\n\n\t.cn-alert-dialog-media {\n\t\t@apply bg-muted mb-2 inline-flex size-10 items-center justify-center rounded-md sm:group-data-[size=default]/alert-dialog-content:row-span-2 *:[svg:not([class*='size-'])]:size-6;\n\t}\n\n\t.cn-alert-dialog-title {\n\t\t@apply text-base font-medium sm:group-data-[size=default]/alert-dialog-content:group-has-data-[slot=alert-dialog-media]/alert-dialog-content:col-start-2;\n\t}\n\n\t.cn-alert-dialog-description {\n\t\t@apply text-muted-foreground *:[a]:hover:text-foreground text-sm text-balance md:text-pretty *:[a]:underline *:[a]:underline-offset-3;\n\t}\n\n\t.cn-alert-dialog-footer {\n\t\t@apply bg-muted/50 -mx-4 -mb-4 rounded-b-xl border-t p-4;\n\t}\n\n\t/* MARK: Avatar */\n\t.cn-avatar {\n\t\t@apply size-8 rounded-full after:rounded-full data-[size=lg]:size-10 data-[size=sm]:size-6;\n\t}\n\n\t.cn-avatar-fallback {\n\t\t@apply bg-muted text-muted-foreground rounded-full;\n\t}\n\n\t.cn-avatar-image {\n\t\t@apply rounded-full;\n\t}\n\n\t.cn-avatar-badge {\n\t\t@apply bg-primary text-primary-foreground ring-background;\n\t}\n\n\t.cn-avatar-group-count {\n\t\t@apply bg-muted text-muted-foreground size-8 rounded-full text-sm group-has-data-[size=lg]/avatar-group:size-10 group-has-data-[size=sm]/avatar-group:size-6 [&>svg]:size-4 group-has-data-[size=lg]/avatar-group:[&>svg]:size-5 group-has-data-[size=sm]/avatar-group:[&>svg]:size-3;\n\t}\n\n\t/* MARK: Badge */\n\t.cn-badge {\n\t\t@apply h-5 gap-1 rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium transition-all has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&>svg]:size-3!;\n\t}\n\n\t.cn-badge-variant-default {\n\t\t@apply bg-primary text-primary-foreground [a]:hover:bg-primary/80;\n\t}\n\n\t.cn-badge-variant-secondary {\n\t\t@apply bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80;\n\t}\n\n\t.cn-badge-variant-outline {\n\t\t@apply border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground;\n\t}\n\n\t.cn-badge-variant-destructive {\n\t\t@apply bg-destructive/10 [a]:hover:bg-destructive/20 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 text-destructive dark:bg-destructive/20;\n\t}\n\n\t.cn-badge-variant-ghost {\n\t\t@apply hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50;\n\t}\n\n\t.cn-badge-variant-link {\n\t\t@apply text-primary underline-offset-4 hover:underline;\n\t}\n\n\t/* MARK: Breadcrumb */\n\t.cn-breadcrumb-list {\n\t\t@apply text-muted-foreground gap-1.5 text-sm;\n\t}\n\n\t.cn-breadcrumb-item {\n\t\t@apply gap-1;\n\t}\n\n\t.cn-breadcrumb-link {\n\t\t@apply hover:text-foreground transition-colors;\n\t}\n\n\t.cn-breadcrumb-page {\n\t\t@apply text-foreground font-normal;\n\t}\n\n\t.cn-breadcrumb-separator {\n\t\t@apply [&>svg]:size-3.5;\n\t}\n\n\t.cn-breadcrumb-ellipsis {\n\t\t@apply size-5 [&>svg]:size-4;\n\t}\n\n\t/* MARK: Button */\n\t.cn-button {\n\t\t@apply focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 rounded-lg border border-transparent bg-clip-padding text-sm font-medium focus-visible:ring-3 active:translate-y-px aria-invalid:ring-3 [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-button-variant-default {\n\t\t@apply bg-primary text-primary-foreground [a]:hover:bg-primary/80;\n\t}\n\n\t.cn-button-variant-outline {\n\t\t@apply border-border bg-background hover:bg-muted hover:text-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 aria-expanded:bg-muted aria-expanded:text-foreground;\n\t}\n\n\t.cn-button-variant-secondary {\n\t\t@apply bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground;\n\t}\n\n\t.cn-button-variant-ghost {\n\t\t@apply hover:bg-muted hover:text-foreground dark:hover:bg-muted/50 aria-expanded:bg-muted aria-expanded:text-foreground;\n\t}\n\n\t.cn-button-variant-destructive {\n\t\t@apply bg-destructive/10 hover:bg-destructive/20 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/20 text-destructive focus-visible:border-destructive/40 dark:hover:bg-destructive/30;\n\t}\n\n\t.cn-button-variant-link {\n\t\t@apply text-primary underline-offset-4 hover:underline;\n\t}\n\n\t.cn-button-size-xs {\n\t\t@apply h-6 gap-1 rounded-[min(var(--radius-md),10px)] px-2 text-xs in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3;\n\t}\n\n\t.cn-button-size-sm {\n\t\t@apply h-7 gap-1 rounded-[min(var(--radius-md),12px)] px-2.5 text-[0.8rem] in-data-[slot=button-group]:rounded-lg has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3.5;\n\t}\n\n\t.cn-button-size-default {\n\t\t@apply h-8 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2;\n\t}\n\n\t.cn-button-size-lg {\n\t\t@apply h-9 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3;\n\t}\n\n\t.cn-button-size-icon-xs {\n\t\t@apply size-6 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-lg [&_svg:not([class*='size-'])]:size-3;\n\t}\n\n\t.cn-button-size-icon-sm {\n\t\t@apply size-7 rounded-[min(var(--radius-md),12px)] in-data-[slot=button-group]:rounded-lg;\n\t}\n\n\t.cn-button-size-icon {\n\t\t@apply size-8;\n\t}\n\n\t.cn-button-size-icon-lg {\n\t\t@apply size-9;\n\t}\n\n\t/* MARK: Button Group */\n\t.cn-button-group {\n\t\t@apply has-[>[data-slot=button-group]]:gap-2 has-[select[aria-hidden=true]:last-child]:[&>[data-slot=select-trigger]:last-of-type]:rounded-r-lg;\n\t}\n\n\t.cn-button-group-orientation-horizontal {\n\t\t@apply [&>[data-slot]:not(:has(~[data-slot]))]:rounded-r-lg!;\n\t}\n\n\t.cn-button-group-orientation-vertical {\n\t\t@apply [&>[data-slot]:not(:has(~[data-slot]))]:rounded-b-lg!;\n\t}\n\n\t.cn-button-group-text {\n\t\t@apply bg-muted gap-2 rounded-lg border px-2.5 text-sm font-medium [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-button-group-separator {\n\t\t@apply bg-input;\n\t}\n\n\t/* MARK: Calendar */\n\t.cn-calendar {\n\t\t@apply p-2 [--cell-radius:var(--radius-md)] [--cell-size:--spacing(7)];\n\t}\n\n\t.cn-calendar-dropdown-root {\n\t\t@apply has-focus:border-ring border-input has-focus:ring-ring/50 border has-focus:ring-3;\n\t}\n\n\t.cn-calendar-caption-label {\n\t\t@apply h-6 pr-1 pl-1.5;\n\t}\n\n\t/* MARK: Card */\n\t.cn-card {\n\t\t@apply ring-foreground/10 bg-card text-card-foreground gap-4 overflow-hidden rounded-xl py-4 text-sm ring-1 has-data-[slot=card-footer]:pb-0 has-[>img:first-child]:pt-0 data-[size=sm]:gap-3 data-[size=sm]:py-3 data-[size=sm]:has-data-[slot=card-footer]:pb-0 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl;\n\t}\n\n\t.cn-card-header {\n\t\t@apply gap-1 rounded-t-xl px-4 group-data-[size=sm]/card:px-3 [.border-b]:pb-4 group-data-[size=sm]/card:[.border-b]:pb-3;\n\t}\n\n\t.cn-card-title {\n\t\t@apply text-base leading-snug font-medium group-data-[size=sm]/card:text-sm;\n\t}\n\n\t.cn-card-description {\n\t\t@apply text-muted-foreground text-sm;\n\t}\n\n\t.cn-card-content {\n\t\t@apply px-4 group-data-[size=sm]/card:px-3;\n\t}\n\n\t.cn-card-footer {\n\t\t@apply bg-muted/50 rounded-b-xl border-t p-4 group-data-[size=sm]/card:p-3;\n\t}\n\n\t/* MARK: Carousel */\n\t.cn-carousel-previous {\n\t\t@apply rounded-full;\n\t}\n\n\t.cn-carousel-next {\n\t\t@apply rounded-full;\n\t}\n\n\t/* MARK: Chart */\n\t.cn-chart-tooltip {\n\t\t@apply border-border/50 bg-background gap-1.5 rounded-lg border px-2.5 py-1.5 text-xs shadow-xl;\n\t}\n\n\t/* MARK: Checkbox */\n\t.cn-checkbox {\n\t\t@apply border-input dark:bg-input/30 data-checked:bg-primary data-checked:text-primary-foreground dark:data-checked:bg-primary data-checked:border-primary aria-invalid:aria-checked:border-primary aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 flex size-4 items-center justify-center rounded-[4px] border transition-colors group-has-disabled/field:opacity-50 focus-visible:ring-3 aria-invalid:ring-3;\n\t}\n\n\t.cn-checkbox-indicator {\n\t\t@apply [&>svg]:size-3.5;\n\t}\n\n\t/* MARK: Combobox */\n\t.cn-combobox-content {\n\t\t@apply bg-popover text-popover-foreground data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 *:data-[slot=input-group]:bg-input/30 *:data-[slot=input-group]:border-input/30 max-h-72 min-w-36 overflow-hidden rounded-lg shadow-md ring-1 duration-100 *:data-[slot=input-group]:m-1 *:data-[slot=input-group]:mb-0 *:data-[slot=input-group]:h-8 *:data-[slot=input-group]:shadow-none;\n\t}\n\n\t.cn-combobox-content-logical {\n\t\t@apply data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2;\n\t}\n\n\t.cn-combobox-label {\n\t\t@apply text-muted-foreground px-2 py-1.5 text-xs;\n\t}\n\n\t.cn-combobox-item {\n\t\t@apply data-highlighted:bg-accent data-highlighted:text-accent-foreground not-data-[variant=destructive]:data-highlighted:**:text-accent-foreground gap-2 rounded-md py-1 pr-8 pl-1.5 text-sm [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-combobox-item-indicator {\n\t\t@apply pointer-events-none absolute right-2 flex size-4 items-center justify-center;\n\t}\n\n\t.cn-combobox-empty {\n\t\t@apply text-muted-foreground hidden w-full justify-center py-2 text-center text-sm group-data-empty/combobox-content:flex;\n\t}\n\n\t.cn-combobox-list {\n\t\t@apply no-scrollbar max-h-[min(calc(--spacing(72)---spacing(9)),calc(var(--available-height)---spacing(9)))] scroll-py-1 overflow-y-auto p-1 data-empty:p-0;\n\t}\n\n\t.cn-combobox-item-text {\n\t\t@apply flex flex-1 gap-2;\n\t}\n\n\t.cn-combobox-separator {\n\t\t@apply bg-border -mx-1 my-1 h-px;\n\t}\n\n\t.cn-combobox-trigger {\n\t\t@apply [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-combobox-trigger-icon {\n\t\t@apply text-muted-foreground size-4;\n\t}\n\n\t.cn-combobox-chips {\n\t\t@apply dark:bg-input/30 border-input focus-within:border-ring focus-within:ring-ring/50 has-aria-invalid:ring-destructive/20 dark:has-aria-invalid:ring-destructive/40 has-aria-invalid:border-destructive dark:has-aria-invalid:border-destructive/50 flex min-h-8 flex-wrap items-center gap-1 rounded-lg border bg-transparent bg-clip-padding px-2.5 py-1 text-sm transition-colors focus-within:ring-3 has-aria-invalid:ring-3 has-data-[slot=combobox-chip]:px-1;\n\t}\n\n\t.cn-combobox-chip {\n\t\t@apply bg-muted text-foreground flex h-[calc(--spacing(5.25))] w-fit items-center justify-center gap-1 rounded-sm px-1.5 text-xs font-medium whitespace-nowrap has-data-[slot=combobox-chip-remove]:pr-0;\n\t}\n\n\t.cn-combobox-chip-remove {\n\t\t@apply -ml-1 opacity-50 hover:opacity-100;\n\t}\n\n\t/* MARK: Command */\n\t.cn-command {\n\t\t@apply bg-popover text-popover-foreground rounded-xl! p-1;\n\t}\n\n\t.cn-command-dialog {\n\t\t@apply rounded-xl!;\n\t}\n\n\t.cn-command-input-wrapper {\n\t\t@apply p-1 pb-0;\n\t}\n\n\t.cn-command-input-group {\n\t\t@apply bg-input/30 border-input/30 h-8! rounded-lg! shadow-none! *:data-[slot=input-group-addon]:pl-2!;\n\t}\n\n\t.cn-command-input-icon {\n\t\t@apply size-4 shrink-0 opacity-50;\n\t}\n\n\t.cn-command-input {\n\t\t@apply w-full text-sm;\n\t}\n\n\t.cn-command-list {\n\t\t@apply no-scrollbar max-h-72 scroll-py-1 outline-none;\n\t}\n\n\t.cn-command-empty {\n\t\t@apply py-6 text-center text-sm;\n\t}\n\n\t.cn-command-group {\n\t\t@apply text-foreground **:[[cmdk-group-heading]]:text-muted-foreground overflow-hidden p-1 **:[[cmdk-group-heading]]:px-2 **:[[cmdk-group-heading]]:py-1.5 **:[[cmdk-group-heading]]:text-xs **:[[cmdk-group-heading]]:font-medium;\n\t}\n\n\t.cn-command-separator {\n\t\t@apply bg-border -mx-1 h-px;\n\t}\n\n\t.cn-command-item {\n\t\t@apply data-selected:bg-muted data-selected:text-foreground data-selected:*:[svg]:text-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none in-data-[slot=dialog-content]:rounded-lg! [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-command-shortcut {\n\t\t@apply text-muted-foreground group-data-selected/command-item:text-foreground ml-auto text-xs tracking-widest;\n\t}\n\n\t/* MARK: Context Menu */\n\t.cn-context-menu-content {\n\t\t@apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 bg-popover text-popover-foreground min-w-36 rounded-lg p-1 shadow-md ring-1 duration-100;\n\t}\n\n\t.cn-context-menu-content-logical {\n\t\t@apply data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2;\n\t}\n\n\t.cn-context-menu-item {\n\t\t@apply focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:text-destructive focus:*:[svg]:text-accent-foreground gap-1.5 rounded-md px-1.5 py-1 text-sm data-inset:pl-7 [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-context-menu-checkbox-item {\n\t\t@apply focus:bg-accent focus:text-accent-foreground gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm data-inset:pl-7 [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-context-menu-radio-item {\n\t\t@apply focus:bg-accent focus:text-accent-foreground gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm data-inset:pl-7 [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-context-menu-item-indicator {\n\t\t@apply absolute right-2;\n\t}\n\n\t.cn-context-menu-label {\n\t\t@apply text-muted-foreground px-1.5 py-1 text-xs font-medium data-inset:pl-7;\n\t}\n\n\t.cn-context-menu-separator {\n\t\t@apply bg-border -mx-1 my-1 h-px;\n\t}\n\n\t.cn-context-menu-shortcut {\n\t\t@apply text-muted-foreground group-focus/context-menu-item:text-accent-foreground ml-auto text-xs tracking-widest;\n\t}\n\n\t.cn-context-menu-sub-trigger {\n\t\t@apply focus:bg-accent focus:text-accent-foreground data-open:bg-accent data-open:text-accent-foreground gap-1.5 rounded-md px-1.5 py-1 text-sm data-inset:pl-7 [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-context-menu-sub-content {\n\t\t@apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 bg-popover text-popover-foreground min-w-32 rounded-lg border p-1 shadow-lg duration-100;\n\t}\n\n\t.cn-context-menu-subcontent {\n\t\t@apply shadow-lg;\n\t}\n\n\t/* MARK: Dialog */\n\t.cn-dialog-overlay {\n\t\t@apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 bg-black/10 duration-100 supports-backdrop-filter:backdrop-blur-xs;\n\t}\n\n\t.cn-dialog-content {\n\t\t@apply bg-background data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 ring-foreground/10 grid max-w-[calc(100%-2rem)] gap-4 rounded-xl p-4 text-sm ring-1 duration-100 sm:max-w-sm;\n\t}\n\n\t.cn-dialog-close {\n\t\t@apply absolute top-2 right-2;\n\t}\n\n\t.cn-dialog-header {\n\t\t@apply gap-2;\n\t}\n\n\t.cn-dialog-footer {\n\t\t@apply bg-muted/50 -mx-4 -mb-4 rounded-b-xl border-t p-4;\n\t}\n\n\t.cn-dialog-title {\n\t\t@apply text-base leading-none font-medium;\n\t}\n\n\t.cn-dialog-description {\n\t\t@apply text-muted-foreground *:[a]:hover:text-foreground text-sm *:[a]:underline *:[a]:underline-offset-3;\n\t}\n\n\t/* MARK: Drawer */\n\t.cn-drawer-overlay {\n\t\t@apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 bg-black/10 supports-backdrop-filter:backdrop-blur-xs;\n\t}\n\n\t.cn-drawer-content {\n\t\t@apply bg-background flex h-auto flex-col text-sm data-[vaul-drawer-direction=bottom]:inset-x-0 data-[vaul-drawer-direction=bottom]:bottom-0 data-[vaul-drawer-direction=bottom]:mt-24 data-[vaul-drawer-direction=bottom]:max-h-[80vh] data-[vaul-drawer-direction=bottom]:rounded-t-xl data-[vaul-drawer-direction=bottom]:border-t data-[vaul-drawer-direction=left]:inset-y-0 data-[vaul-drawer-direction=left]:left-0 data-[vaul-drawer-direction=left]:w-3/4 data-[vaul-drawer-direction=left]:rounded-r-xl data-[vaul-drawer-direction=left]:border-r data-[vaul-drawer-direction=right]:inset-y-0 data-[vaul-drawer-direction=right]:right-0 data-[vaul-drawer-direction=right]:w-3/4 data-[vaul-drawer-direction=right]:rounded-l-xl data-[vaul-drawer-direction=right]:border-l data-[vaul-drawer-direction=top]:inset-x-0 data-[vaul-drawer-direction=top]:top-0 data-[vaul-drawer-direction=top]:mb-24 data-[vaul-drawer-direction=top]:max-h-[80vh] data-[vaul-drawer-direction=top]:rounded-b-xl data-[vaul-drawer-direction=top]:border-b data-[vaul-drawer-direction=left]:sm:max-w-sm data-[vaul-drawer-direction=right]:sm:max-w-sm;\n\t}\n\n\t.cn-drawer-handle {\n\t\t@apply bg-muted mx-auto mt-4 hidden h-1 w-[100px] shrink-0 rounded-full group-data-[vaul-drawer-direction=bottom]/drawer-content:block;\n\t}\n\n\t.cn-drawer-header {\n\t\t@apply gap-0.5 p-4 group-data-[vaul-drawer-direction=bottom]/drawer-content:text-center group-data-[vaul-drawer-direction=top]/drawer-content:text-center md:gap-0.5 md:text-left;\n\t}\n\n\t.cn-drawer-title {\n\t\t@apply text-foreground text-base font-medium;\n\t}\n\n\t.cn-drawer-description {\n\t\t@apply text-muted-foreground text-sm;\n\t}\n\n\t.cn-drawer-footer {\n\t\t@apply gap-2 p-4;\n\t}\n\n\t/* MARK: Dropdown Menu */\n\t.cn-dropdown-menu-content {\n\t\t@apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 bg-popover text-popover-foreground min-w-32 rounded-lg p-1 shadow-md ring-1 duration-100;\n\t}\n\n\t.cn-dropdown-menu-content-logical {\n\t\t@apply data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2;\n\t}\n\n\t.cn-dropdown-menu-item {\n\t\t@apply focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:text-destructive not-data-[variant=destructive]:focus:**:text-accent-foreground gap-1.5 rounded-md px-1.5 py-1 text-sm data-inset:pl-7 [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-dropdown-menu-checkbox-item {\n\t\t@apply focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm data-inset:pl-7 [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-dropdown-menu-radio-item {\n\t\t@apply focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm data-inset:pl-7 [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-dropdown-menu-item-indicator {\n\t\t@apply absolute right-2 flex items-center justify-center;\n\t}\n\n\t.cn-dropdown-menu-label {\n\t\t@apply text-muted-foreground px-1.5 py-1 text-xs font-medium data-inset:pl-7;\n\t}\n\n\t.cn-dropdown-menu-separator {\n\t\t@apply bg-border -mx-1 my-1 h-px;\n\t}\n\n\t.cn-dropdown-menu-shortcut {\n\t\t@apply text-muted-foreground group-focus/dropdown-menu-item:text-accent-foreground ml-auto text-xs tracking-widest;\n\t}\n\n\t.cn-dropdown-menu-sub-trigger {\n\t\t@apply focus:bg-accent focus:text-accent-foreground data-open:bg-accent data-open:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground gap-1.5 rounded-md px-1.5 py-1 text-sm data-inset:pl-7 [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-dropdown-menu-sub-content {\n\t\t@apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 bg-popover text-popover-foreground min-w-[96px] rounded-lg p-1 shadow-lg ring-1 duration-100;\n\t}\n\n\t.cn-dropdown-menu-subcontent {\n\t\t@apply shadow-lg;\n\t}\n\n\t/* MARK: Empty */\n\t.cn-empty {\n\t\t@apply gap-4 rounded-xl border-dashed p-6;\n\t}\n\n\t.cn-empty-header {\n\t\t@apply gap-2;\n\t}\n\n\t.cn-empty-media {\n\t\t@apply mb-2;\n\t}\n\n\t.cn-empty-media-default {\n\t\t@apply bg-transparent;\n\t}\n\n\t.cn-empty-media-icon {\n\t\t@apply bg-muted text-foreground flex size-8 shrink-0 items-center justify-center rounded-lg [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-empty-title {\n\t\t@apply text-sm font-medium tracking-tight;\n\t}\n\n\t.cn-empty-description {\n\t\t@apply text-sm/relaxed;\n\t}\n\n\t.cn-empty-content {\n\t\t@apply gap-2.5 text-sm;\n\t}\n\n\t/* MARK: Field */\n\t.cn-field-set {\n\t\t@apply gap-4 has-[>[data-slot=checkbox-group]]:gap-3 has-[>[data-slot=radio-group]]:gap-3;\n\t}\n\n\t.cn-field-legend {\n\t\t@apply mb-1.5 font-medium data-[variant=label]:text-sm data-[variant=legend]:text-base;\n\t}\n\n\t.cn-field-group {\n\t\t@apply gap-5 data-[slot=checkbox-group]:gap-3 *:data-[slot=field-group]:gap-4;\n\t}\n\n\t.cn-field {\n\t\t@apply data-[invalid=true]:text-destructive gap-2;\n\t}\n\n\t.cn-field-content {\n\t\t@apply gap-0.5;\n\t}\n\n\t.cn-field-label {\n\t\t@apply has-data-checked:bg-primary/5 has-data-checked:border-primary/30 dark:has-data-checked:border-primary/20 dark:has-data-checked:bg-primary/10 gap-2 group-data-[disabled=true]/field:opacity-50 has-[>[data-slot=field]]:rounded-lg has-[>[data-slot=field]]:border *:data-[slot=field]:p-2.5;\n\t}\n\n\t.cn-field-title {\n\t\t@apply gap-2 text-sm font-medium group-data-[disabled=true]/field:opacity-50;\n\t}\n\n\t.cn-field-description {\n\t\t@apply text-muted-foreground text-left text-sm [[data-variant=legend]+&]:-mt-1.5;\n\t}\n\n\t.cn-field-separator {\n\t\t@apply -my-2 h-5 text-sm group-data-[variant=outline]/field-group:-mb-2;\n\t}\n\n\t.cn-field-separator-content {\n\t\t@apply text-muted-foreground px-2;\n\t}\n\n\t.cn-field-error {\n\t\t@apply text-destructive text-sm;\n\t}\n\n\t/* MARK: Hover Card */\n\t.cn-hover-card-content {\n\t\t@apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 bg-popover text-popover-foreground w-64 rounded-lg p-2.5 text-sm shadow-md ring-1 duration-100;\n\t}\n\n\t.cn-hover-card-content-logical {\n\t\t@apply data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2;\n\t}\n\n\t/* MARK: Input */\n\t.cn-input {\n\t\t@apply dark:bg-input/30 border-input focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 disabled:bg-input/50 dark:disabled:bg-input/80 h-8 rounded-lg border bg-transparent px-2.5 py-1 text-base transition-colors file:h-6 file:text-sm file:font-medium focus-visible:ring-3 aria-invalid:ring-3 md:text-sm;\n\t}\n\n\t/* MARK: Input OTP */\n\t.cn-input-otp {\n\t\t@apply gap-2;\n\t}\n\n\t.cn-input-otp-group {\n\t\t@apply has-aria-invalid:ring-destructive/20 dark:has-aria-invalid:ring-destructive/40 has-aria-invalid:border-destructive rounded-lg has-aria-invalid:ring-3;\n\t}\n\n\t.cn-input-otp-slot {\n\t\t@apply dark:bg-input/30 border-input data-[active=true]:border-ring data-[active=true]:ring-ring/50 data-[active=true]:aria-invalid:ring-destructive/20 dark:data-[active=true]:aria-invalid:ring-destructive/40 aria-invalid:border-destructive data-[active=true]:aria-invalid:border-destructive size-8 border-y border-r text-sm transition-all outline-none first:rounded-l-lg first:border-l last:rounded-r-lg data-[active=true]:ring-3;\n\t}\n\n\t.cn-input-otp-caret-line {\n\t\t@apply animate-caret-blink bg-foreground h-4 w-px duration-1000;\n\t}\n\n\t.cn-input-otp-separator {\n\t\t@apply [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t/* MARK: Item */\n\t.cn-item {\n\t\t@apply [a]:hover:bg-muted rounded-lg border text-sm;\n\t}\n\n\t.cn-item-variant-default {\n\t\t@apply border-transparent;\n\t}\n\n\t.cn-item-variant-outline {\n\t\t@apply border-border;\n\t}\n\n\t.cn-item-variant-muted {\n\t\t@apply bg-muted/50 border-transparent;\n\t}\n\n\t.cn-item-size-default {\n\t\t@apply gap-2.5 px-3 py-2.5;\n\t}\n\n\t.cn-item-size-sm {\n\t\t@apply gap-2.5 px-3 py-2.5;\n\t}\n\n\t.cn-item-size-xs {\n\t\t@apply gap-2 px-2.5 py-2 in-data-[slot=dropdown-menu-content]:p-0;\n\t}\n\n\t.cn-item-media {\n\t\t@apply gap-2 group-has-data-[slot=item-description]/item:translate-y-0.5 group-has-data-[slot=item-description]/item:self-start;\n\t}\n\n\t.cn-item-media-variant-default {\n\t\t@apply bg-transparent;\n\t}\n\n\t.cn-item-media-variant-icon {\n\t\t@apply [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-item-media-variant-image {\n\t\t@apply size-10 overflow-hidden rounded-sm group-data-[size=sm]/item:size-8 group-data-[size=xs]/item:size-6 [&_img]:size-full [&_img]:object-cover;\n\t}\n\n\t.cn-item-content {\n\t\t@apply gap-1 group-data-[size=xs]/item:gap-0;\n\t}\n\n\t.cn-item-title {\n\t\t@apply gap-2 text-sm leading-snug font-medium underline-offset-4;\n\t}\n\n\t.cn-item-description {\n\t\t@apply text-muted-foreground text-left text-sm leading-normal group-data-[size=xs]/item:text-xs;\n\t}\n\n\t.cn-item-actions {\n\t\t@apply gap-2;\n\t}\n\n\t.cn-item-header {\n\t\t@apply gap-2;\n\t}\n\n\t.cn-item-footer {\n\t\t@apply gap-2;\n\t}\n\n\t.cn-item-group {\n\t\t@apply gap-4 has-data-[size=sm]:gap-2.5 has-data-[size=xs]:gap-2;\n\t}\n\n\t.cn-item-separator {\n\t\t@apply my-2;\n\t}\n\n\t/* MARK: Kbd */\n\t.cn-kbd {\n\t\t@apply bg-muted text-muted-foreground in-data-[slot=tooltip-content]:bg-background/20 in-data-[slot=tooltip-content]:text-background dark:in-data-[slot=tooltip-content]:bg-background/10 h-5 w-fit min-w-5 gap-1 rounded-sm px-1 font-sans text-xs font-medium [&_svg:not([class*='size-'])]:size-3;\n\t}\n\n\t.cn-kbd-group {\n\t\t@apply gap-1;\n\t}\n\n\t/* MARK: Label */\n\t.cn-label {\n\t\t@apply gap-2 text-sm leading-none font-medium group-data-[disabled=true]:opacity-50 peer-disabled:opacity-50;\n\t}\n\n\t/* MARK: Menubar */\n\t.cn-menubar {\n\t\t@apply h-8 gap-0.5 rounded-lg border p-[3px];\n\t}\n\n\t.cn-menubar-trigger {\n\t\t@apply hover:bg-muted aria-expanded:bg-muted rounded-sm px-1.5 py-[2px] text-sm font-medium;\n\t}\n\n\t.cn-menubar-content {\n\t\t@apply bg-popover text-popover-foreground data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 min-w-36 rounded-lg p-1 shadow-md ring-1 duration-100;\n\t}\n\n\t.cn-menubar-content-logical {\n\t\t@apply data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2;\n\t}\n\n\t.cn-menubar-item {\n\t\t@apply focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:text-destructive! not-data-[variant=destructive]:focus:**:text-accent-foreground gap-1.5 rounded-md px-1.5 py-1 text-sm data-disabled:opacity-50 data-inset:pl-7 [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-menubar-checkbox-item {\n\t\t@apply focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground gap-1.5 rounded-md py-1 pr-1.5 pl-7 text-sm data-inset:pl-7;\n\t}\n\n\t.cn-menubar-checkbox-item-indicator {\n\t\t@apply left-1.5 size-4 [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-menubar-radio-item {\n\t\t@apply focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground gap-1.5 rounded-md py-1 pr-1.5 pl-7 text-sm data-disabled:opacity-50 data-inset:pl-7 [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-menubar-radio-item-indicator {\n\t\t@apply left-1.5 size-4 [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-menubar-label {\n\t\t@apply px-1.5 py-1 text-sm font-medium data-inset:pl-7;\n\t}\n\n\t.cn-menubar-separator {\n\t\t@apply bg-border;\n\t}\n\n\t.cn-menubar-shortcut {\n\t\t@apply text-muted-foreground group-focus/menubar-item:text-accent-foreground text-xs tracking-widest;\n\t}\n\n\t.cn-menubar-sub-trigger {\n\t\t@apply focus:bg-accent focus:text-accent-foreground data-open:bg-accent data-open:text-accent-foreground gap-1.5 rounded-md px-1.5 py-1 text-sm data-inset:pl-7 [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-menubar-sub-content {\n\t\t@apply bg-popover text-popover-foreground data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 min-w-32 rounded-lg p-1 shadow-lg ring-1 duration-100;\n\t}\n\n\t/* MARK: Navigation Menu */\n\t.cn-navigation-menu {\n\t\t@apply max-w-max;\n\t}\n\n\t.cn-navigation-menu-list {\n\t\t@apply gap-0;\n\t}\n\n\t.cn-navigation-menu-trigger {\n\t\t@apply bg-background hover:bg-muted focus:bg-muted data-open:hover:bg-muted data-open:focus:bg-muted data-open:bg-muted/50 focus-visible:ring-ring/50 data-popup-open:bg-muted/50 data-popup-open:hover:bg-muted rounded-lg px-2.5 py-1.5 text-sm font-medium transition-all focus-visible:ring-3 focus-visible:outline-1 disabled:opacity-50;\n\t}\n\n\t.cn-navigation-menu-link {\n\t\t@apply data-active:focus:bg-muted data-active:hover:bg-muted data-active:bg-muted/50 focus-visible:ring-ring/50 hover:bg-muted focus:bg-muted flex items-center gap-2 rounded-lg p-2 text-sm transition-all outline-none focus-visible:ring-3 focus-visible:outline-1 in-data-[slot=navigation-menu-content]:rounded-md [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-navigation-menu-trigger-icon {\n\t\t@apply relative top-px ml-1 size-3 transition duration-300 group-data-open/navigation-menu-trigger:rotate-180 group-data-popup-open/navigation-menu-trigger:rotate-180;\n\t}\n\n\t.cn-navigation-menu-content {\n\t\t@apply data-[motion^=from-]:animate-in data-[motion^=to-]:animate-out data-[motion^=from-]:fade-in data-[motion^=to-]:fade-out data-[motion=from-end]:slide-in-from-right-52 data-[motion=from-start]:slide-in-from-left-52 data-[motion=to-end]:slide-out-to-right-52 data-[motion=to-start]:slide-out-to-left-52 group-data-[viewport=false]/navigation-menu:bg-popover group-data-[viewport=false]/navigation-menu:text-popover-foreground group-data-[viewport=false]/navigation-menu:data-open:animate-in group-data-[viewport=false]/navigation-menu:data-closed:animate-out group-data-[viewport=false]/navigation-menu:data-closed:zoom-out-95 group-data-[viewport=false]/navigation-menu:data-open:zoom-in-95 group-data-[viewport=false]/navigation-menu:data-open:fade-in-0 group-data-[viewport=false]/navigation-menu:data-closed:fade-out-0 group-data-[viewport=false]/navigation-menu:ring-foreground/10 p-1 ease-[cubic-bezier(0.22,1,0.36,1)] group-data-[viewport=false]/navigation-menu:rounded-lg group-data-[viewport=false]/navigation-menu:shadow group-data-[viewport=false]/navigation-menu:ring-1 group-data-[viewport=false]/navigation-menu:duration-300;\n\t}\n\n\t.cn-navigation-menu-viewport {\n\t\t@apply bg-popover text-popover-foreground data-open:animate-in data-closed:animate-out data-closed:zoom-out-90 data-open:zoom-in-90 ring-foreground/10 rounded-lg shadow ring-1 duration-100;\n\t}\n\n\t.cn-navigation-menu-indicator {\n\t\t@apply data-[state=visible]:animate-in data-[state=hidden]:animate-out data-[state=hidden]:fade-out data-[state=visible]:fade-in;\n\t}\n\n\t.cn-navigation-menu-indicator-arrow {\n\t\t@apply bg-border rounded-tl-sm shadow-md;\n\t}\n\n\t.cn-navigation-menu-positioner {\n\t\t@apply transition-[top,left,right,bottom] duration-300 ease-[cubic-bezier(0.22,1,0.36,1)] data-[side=bottom]:before:top-[-10px] data-[side=bottom]:before:right-0 data-[side=bottom]:before:left-0;\n\t}\n\n\t.cn-navigation-menu-popup {\n\t\t@apply bg-popover text-popover-foreground ring-foreground/10 rounded-lg shadow ring-1 transition-all ease-[cubic-bezier(0.22,1,0.36,1)] outline-none data-ending-style:scale-90 data-ending-style:opacity-0 data-ending-style:duration-150 data-starting-style:scale-90 data-starting-style:opacity-0;\n\t}\n\n\t/* MARK: Native Select */\n\t.cn-native-select {\n\t\t@apply border-input placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 dark:hover:bg-input/50 focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 h-8 w-full min-w-0 appearance-none rounded-lg border bg-transparent py-1 pr-8 pl-2.5 text-sm transition-colors select-none focus-visible:ring-3 aria-invalid:ring-3 data-[size=sm]:h-7 data-[size=sm]:rounded-[min(var(--radius-md),10px)] data-[size=sm]:py-0.5;\n\t}\n\n\t.cn-native-select-icon {\n\t\t@apply text-muted-foreground top-1/2 right-2.5 size-4 -translate-y-1/2;\n\t}\n\n\t/* MARK: Pagination */\n\t.cn-pagination-content {\n\t\t@apply gap-0.5;\n\t}\n\n\t.cn-pagination-ellipsis {\n\t\t@apply size-8 items-center justify-center [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-pagination-previous {\n\t\t@apply pl-1.5!;\n\t}\n\n\t.cn-pagination-next {\n\t\t@apply pr-1.5!;\n\t}\n\n\t/* MARK: Popover */\n\t.cn-popover-content {\n\t\t@apply bg-popover text-popover-foreground data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 flex flex-col gap-2.5 rounded-lg p-2.5 text-sm shadow-md ring-1 duration-100;\n\t}\n\n\t.cn-popover-content-logical {\n\t\t@apply data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2;\n\t}\n\n\t.cn-popover-header {\n\t\t@apply flex flex-col gap-0.5 text-sm;\n\t}\n\n\t.cn-popover-title {\n\t\t@apply font-medium;\n\t}\n\n\t.cn-popover-description {\n\t\t@apply text-muted-foreground;\n\t}\n\n\t/* MARK: Progress */\n\t.cn-progress {\n\t\t@apply bg-muted h-1 rounded-full;\n\t}\n\n\t.cn-progress-track {\n\t\t@apply bg-muted h-1 rounded-full;\n\t}\n\n\t.cn-progress-indicator {\n\t\t@apply bg-primary;\n\t}\n\n\t.cn-progress-label {\n\t\t@apply text-sm font-medium;\n\t}\n\n\t.cn-progress-value {\n\t\t@apply text-muted-foreground ml-auto text-sm tabular-nums;\n\t}\n\n\t/* MARK: Radio Group */\n\t.cn-radio-group {\n\t\t@apply grid gap-2;\n\t}\n\n\t.cn-radio-group-item {\n\t\t@apply border-input dark:bg-input/30 data-checked:bg-primary data-checked:text-primary-foreground dark:data-checked:bg-primary data-checked:border-primary aria-invalid:aria-checked:border-primary aria-invalid:border-destructive focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 dark:aria-invalid:border-destructive/50 flex size-4 rounded-full focus-visible:ring-3 aria-invalid:ring-3;\n\t}\n\n\t.cn-radio-group-indicator {\n\t\t@apply flex size-4 items-center justify-center;\n\t}\n\n\t.cn-radio-group-indicator-icon {\n\t\t@apply bg-primary-foreground absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2 rounded-full;\n\t}\n\n\t/* MARK: Resizable */\n\t.cn-resizable-handle-icon {\n\t\t@apply bg-border h-6 w-1 rounded-lg;\n\t}\n\n\t/* MARK: Scroll Area */\n\t.cn-scroll-area-scrollbar {\n\t\t@apply data-horizontal:h-2.5 data-horizontal:flex-col data-horizontal:border-t data-horizontal:border-t-transparent data-vertical:h-full data-vertical:w-2.5 data-vertical:border-l data-vertical:border-l-transparent;\n\t}\n\n\t.cn-scroll-area-thumb {\n\t\t@apply rounded-full;\n\t}\n\n\t/* MARK: Select */\n\t.cn-select-trigger {\n\t\t@apply border-input data-placeholder:text-muted-foreground dark:bg-input/30 dark:hover:bg-input/50 focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 gap-1.5 rounded-lg border bg-transparent py-2 pr-2 pl-2.5 text-sm transition-colors select-none focus-visible:ring-3 aria-invalid:ring-3 data-[size=default]:h-8 data-[size=sm]:h-7 data-[size=sm]:rounded-[min(var(--radius-md),10px)] *:data-[slot=select-value]:flex *:data-[slot=select-value]:gap-1.5 [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-select-value {\n\t\t@apply flex flex-1 text-left;\n\t}\n\n\t.cn-select-trigger-icon {\n\t\t@apply text-muted-foreground size-4;\n\t}\n\n\t.cn-select-content {\n\t\t@apply bg-popover text-popover-foreground data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 min-w-36 rounded-lg shadow-md ring-1 duration-100;\n\t}\n\n\t.cn-select-content-logical {\n\t\t@apply data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2;\n\t}\n\n\t.cn-select-label {\n\t\t@apply text-muted-foreground px-1.5 py-1 text-xs;\n\t}\n\n\t.cn-select-item {\n\t\t@apply focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground gap-1.5 rounded-md py-1 pr-8 pl-1.5 text-sm [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2;\n\t}\n\n\t.cn-select-item-indicator {\n\t\t@apply pointer-events-none absolute right-2 flex size-4 items-center justify-center;\n\t}\n\n\t.cn-select-group {\n\t\t@apply scroll-my-1 p-1;\n\t}\n\n\t.cn-select-item-text {\n\t\t@apply flex flex-1 gap-2;\n\t}\n\n\t.cn-select-separator {\n\t\t@apply bg-border -mx-1 my-1 h-px;\n\t}\n\n\t.cn-select-scroll-up-button {\n\t\t@apply bg-popover z-10 flex cursor-default items-center justify-center py-1 [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-select-scroll-down-button {\n\t\t@apply bg-popover z-10 flex cursor-default items-center justify-center py-1 [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t/* MARK: Separator */\n\t.cn-separator {\n\t\t@apply bg-border shrink-0;\n\t}\n\n\t.cn-separator-horizontal {\n\t\t@apply h-px w-full;\n\t}\n\n\t.cn-separator-vertical {\n\t\t@apply h-full w-px;\n\t}\n\n\t/* MARK: Sheet */\n\t.cn-sheet-overlay {\n\t\t@apply bg-black/10 supports-backdrop-filter:backdrop-blur-xs;\n\t}\n\n\t.cn-sheet-content {\n\t\t@apply bg-background fixed z-50 flex flex-col gap-4 bg-clip-padding text-sm shadow-lg transition duration-200 ease-in-out data-[side=bottom]:inset-x-0 data-[side=bottom]:bottom-0 data-[side=bottom]:h-auto data-[side=bottom]:border-t data-[side=left]:inset-y-0 data-[side=left]:left-0 data-[side=left]:h-full data-[side=left]:w-3/4 data-[side=left]:border-r data-[side=right]:inset-y-0 data-[side=right]:right-0 data-[side=right]:h-full data-[side=right]:w-3/4 data-[side=right]:border-l data-[side=top]:inset-x-0 data-[side=top]:top-0 data-[side=top]:h-auto data-[side=top]:border-b data-[side=left]:sm:max-w-sm data-[side=right]:sm:max-w-sm;\n\t}\n\n\t.cn-sheet-close {\n\t\t@apply absolute top-3 right-3;\n\t}\n\n\t.cn-sheet-header {\n\t\t@apply gap-0.5 p-4;\n\t}\n\n\t.cn-sheet-footer {\n\t\t@apply gap-2 p-4;\n\t}\n\n\t.cn-sheet-title {\n\t\t@apply text-foreground text-base font-medium;\n\t}\n\n\t.cn-sheet-description {\n\t\t@apply text-muted-foreground text-sm;\n\t}\n\n\t/* MARK: Sidebar */\n\t.cn-sidebar-gap {\n\t\t@apply transition-[width] duration-200 ease-linear;\n\t}\n\n\t.cn-sidebar-inner {\n\t\t@apply bg-sidebar group-data-[variant=floating]:ring-sidebar-border group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:shadow-sm group-data-[variant=floating]:ring-1;\n\t}\n\n\t.cn-sidebar-rail {\n\t\t@apply hover:after:bg-sidebar-border;\n\t}\n\n\t.cn-sidebar-inset {\n\t\t@apply bg-background md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2;\n\t}\n\n\t.cn-sidebar-input {\n\t\t@apply bg-background h-8 w-full shadow-none;\n\t}\n\n\t.cn-sidebar-header {\n\t\t@apply gap-2 p-2;\n\t}\n\n\t.cn-sidebar-content {\n\t\t@apply no-scrollbar gap-0;\n\t}\n\n\t.cn-sidebar-footer {\n\t\t@apply gap-2 p-2;\n\t}\n\n\t.cn-sidebar-separator {\n\t\t@apply bg-sidebar-border mx-2;\n\t}\n\n\t.cn-sidebar-group {\n\t\t@apply p-2;\n\t}\n\n\t.cn-sidebar-menu {\n\t\t@apply gap-0;\n\t}\n\n\t.cn-sidebar-group-content {\n\t\t@apply text-sm;\n\t}\n\n\t.cn-sidebar-group-label {\n\t\t@apply text-sidebar-foreground/70 ring-sidebar-ring h-8 rounded-md px-2 text-xs font-medium transition-[margin,opacity] duration-200 ease-linear group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0 focus-visible:ring-2 [&>svg]:size-4;\n\t}\n\n\t.cn-sidebar-group-action {\n\t\t@apply text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground absolute top-3.5 right-3 w-5 rounded-md p-0 focus-visible:ring-2 [&>svg]:size-4;\n\t}\n\n\t.cn-sidebar-menu-button {\n\t\t@apply ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground active:bg-sidebar-accent active:text-sidebar-accent-foreground data-active:bg-sidebar-accent data-active:text-sidebar-accent-foreground data-open:hover:bg-sidebar-accent data-open:hover:text-sidebar-accent-foreground gap-2 rounded-md p-2 text-left text-sm transition-[width,height,padding] group-has-data-[sidebar=menu-action]/menu-item:pr-8 group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! focus-visible:ring-2 data-active:font-medium;\n\t}\n\n\t.cn-sidebar-menu-button-variant-default {\n\t\t@apply hover:bg-sidebar-accent hover:text-sidebar-accent-foreground;\n\t}\n\n\t.cn-sidebar-menu-button-variant-outline {\n\t\t@apply bg-background hover:bg-sidebar-accent hover:text-sidebar-accent-foreground shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))];\n\t}\n\n\t.cn-sidebar-menu-button-size-default {\n\t\t@apply h-8 text-sm;\n\t}\n\n\t.cn-sidebar-menu-button-size-sm {\n\t\t@apply h-7 text-xs;\n\t}\n\n\t.cn-sidebar-menu-button-size-lg {\n\t\t@apply h-12 text-sm group-data-[collapsible=icon]:p-0!;\n\t}\n\n\t.cn-sidebar-menu-action {\n\t\t@apply text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground peer-hover/menu-button:text-sidebar-accent-foreground absolute top-1.5 right-1 aspect-square w-5 rounded-md p-0 peer-data-[size=default]/menu-button:top-1.5 peer-data-[size=lg]/menu-button:top-2.5 peer-data-[size=sm]/menu-button:top-1 focus-visible:ring-2 [&>svg]:size-4;\n\t}\n\n\t.cn-sidebar-menu-badge {\n\t\t@apply text-sidebar-foreground peer-hover/menu-button:text-sidebar-accent-foreground peer-data-active/menu-button:text-sidebar-accent-foreground pointer-events-none absolute right-1 flex h-5 min-w-5 rounded-md px-1 text-xs font-medium peer-data-[size=default]/menu-button:top-1.5 peer-data-[size=lg]/menu-button:top-2.5 peer-data-[size=sm]/menu-button:top-1;\n\t}\n\n\t.cn-sidebar-menu-skeleton {\n\t\t@apply h-8 gap-2 rounded-md px-2;\n\t}\n\n\t.cn-sidebar-menu-skeleton-icon {\n\t\t@apply size-4 rounded-md;\n\t}\n\n\t.cn-sidebar-menu-skeleton-text {\n\t\t@apply h-4;\n\t}\n\n\t.cn-sidebar-menu-sub {\n\t\t@apply border-sidebar-border mx-3.5 translate-x-px gap-1 border-l px-2.5 py-0.5 group-data-[collapsible=icon]:hidden;\n\t}\n\n\t.cn-sidebar-menu-sub-button {\n\t\t@apply text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground active:bg-sidebar-accent active:text-sidebar-accent-foreground [&>svg]:text-sidebar-accent-foreground data-active:bg-sidebar-accent data-active:text-sidebar-accent-foreground h-7 gap-2 rounded-md px-2 focus-visible:ring-2 data-[size=md]:text-sm data-[size=sm]:text-xs [&>svg]:size-4;\n\t}\n\n\t/* MARK: Skeleton */\n\t.cn-skeleton {\n\t\t@apply bg-muted rounded-md;\n\t}\n\n\t/* MARK: Slider */\n\t.cn-slider {\n\t\t@apply data-vertical:min-h-40;\n\t}\n\n\t.cn-slider-track {\n\t\t@apply bg-muted rounded-full data-horizontal:h-1 data-horizontal:w-full data-vertical:h-full data-vertical:w-1;\n\t}\n\n\t.cn-slider-range {\n\t\t@apply bg-primary;\n\t}\n\n\t.cn-slider-thumb {\n\t\t@apply border-ring ring-ring/50 relative size-3 rounded-full border bg-white transition-[color,box-shadow] after:absolute after:-inset-2 hover:ring-3 focus-visible:ring-3 focus-visible:outline-hidden active:ring-3;\n\t}\n\n\t/* MARK: Sonner */\n\t.cn-toast {\n\t\t@apply rounded-2xl;\n\t}\n\n\t/* MARK: Switch */\n\t.cn-switch {\n\t\t@apply data-checked:bg-primary data-unchecked:bg-input focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 dark:data-unchecked:bg-input/80 shrink-0 rounded-full border border-transparent focus-visible:ring-3 aria-invalid:ring-3 data-[size=default]:h-[18.4px] data-[size=default]:w-[32px] data-[size=sm]:h-[14px] data-[size=sm]:w-[24px];\n\t}\n\n\t.cn-switch-thumb {\n\t\t@apply bg-background dark:data-unchecked:bg-foreground dark:data-checked:bg-primary-foreground rounded-full group-data-[size=default]/switch:size-4 group-data-[size=sm]/switch:size-3 group-data-[size=default]/switch:data-checked:translate-x-[calc(100%-2px)] group-data-[size=sm]/switch:data-checked:translate-x-[calc(100%-2px)] group-data-[size=default]/switch:data-unchecked:translate-x-0 group-data-[size=sm]/switch:data-unchecked:translate-x-0;\n\t}\n\n\t/* MARK: Table */\n\t.cn-table-container {\n\t\t@apply relative w-full overflow-x-auto;\n\t}\n\n\t.cn-table {\n\t\t@apply w-full caption-bottom text-sm;\n\t}\n\n\t.cn-table-header {\n\t\t@apply [&_tr]:border-b;\n\t}\n\n\t.cn-table-body {\n\t\t@apply [&_tr:last-child]:border-0;\n\t}\n\n\t.cn-table-footer {\n\t\t@apply bg-muted/50 border-t font-medium [&>tr]:last:border-b-0;\n\t}\n\n\t.cn-table-row {\n\t\t@apply hover:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors;\n\t}\n\n\t.cn-table-head {\n\t\t@apply text-foreground h-10 px-2 text-left align-middle font-medium whitespace-nowrap [&:has([role=checkbox])]:pr-0;\n\t}\n\n\t.cn-table-cell {\n\t\t@apply p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0;\n\t}\n\n\t.cn-table-caption {\n\t\t@apply text-muted-foreground mt-4 text-sm;\n\t}\n\n\t/* MARK: Tabs */\n\t.cn-tabs {\n\t\t@apply gap-2;\n\t}\n\n\t.cn-tabs-list {\n\t\t@apply rounded-lg p-[3px] group-data-horizontal/tabs:h-8 data-[variant=line]:rounded-none;\n\t}\n\n\t.cn-tabs-trigger {\n\t\t@apply gap-1.5 rounded-md border border-transparent px-1.5 py-0.5 text-sm font-medium group-data-[variant=default]/tabs-list:data-active:shadow-sm group-data-[variant=line]/tabs-list:data-active:shadow-none [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-tabs-content {\n\t\t@apply text-sm;\n\t}\n\n\t/* MARK: Textarea */\n\t.cn-textarea {\n\t\t@apply border-input dark:bg-input/30 focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 disabled:bg-input/50 dark:disabled:bg-input/80 rounded-lg border bg-transparent px-2.5 py-2 text-base transition-colors focus-visible:ring-3 aria-invalid:ring-3 md:text-sm;\n\t}\n\n\t/* MARK: Toggle */\n\t.cn-toggle {\n\t\t@apply hover:text-foreground aria-pressed:bg-muted focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive data-[state=on]:bg-muted gap-1 rounded-lg text-sm font-medium transition-all [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-toggle-variant-default {\n\t\t@apply bg-transparent;\n\t}\n\n\t.cn-toggle-variant-outline {\n\t\t@apply border-input hover:bg-muted border bg-transparent;\n\t}\n\n\t.cn-toggle-size-default {\n\t\t@apply h-8 min-w-8 px-2;\n\t}\n\n\t.cn-toggle-size-sm {\n\t\t@apply h-7 min-w-7 rounded-[min(var(--radius-md),12px)] px-1.5 text-[0.8rem];\n\t}\n\n\t.cn-toggle-size-lg {\n\t\t@apply h-9 min-w-9 px-2.5;\n\t}\n\n\t/* MARK: Toggle Group */\n\t.cn-toggle-group {\n\t\t@apply rounded-lg data-[size=sm]:rounded-[min(var(--radius-md),10px)];\n\t}\n\n\t.cn-toggle-group-item {\n\t\t@apply group-data-[spacing=0]/toggle-group:rounded-none group-data-[spacing=0]/toggle-group:px-2 group-data-horizontal/toggle-group:data-[spacing=0]:first:rounded-l-lg group-data-vertical/toggle-group:data-[spacing=0]:first:rounded-t-lg group-data-horizontal/toggle-group:data-[spacing=0]:last:rounded-r-lg group-data-vertical/toggle-group:data-[spacing=0]:last:rounded-b-lg;\n\t}\n\n\t/* MARK: Tooltip */\n\t.cn-tooltip-content {\n\t\t@apply data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 inline-flex items-center gap-1.5 rounded-md px-3 py-1.5 text-xs has-data-[slot=kbd]:pr-1.5 **:data-[slot=kbd]:relative **:data-[slot=kbd]:isolate **:data-[slot=kbd]:z-50 **:data-[slot=kbd]:rounded-sm;\n\t}\n\n\t.cn-tooltip-content-logical {\n\t\t@apply data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2;\n\t}\n\n\t.cn-tooltip-arrow {\n\t\t@apply size-2.5 translate-y-[calc(-50%-2px)] rotate-45 rounded-[2px];\n\t}\n\n\t.cn-tooltip-arrow-logical {\n\t\t@apply data-[side=inline-end]:top-1/2! data-[side=inline-end]:-left-1 data-[side=inline-end]:-translate-y-1/2 data-[side=inline-start]:top-1/2! data-[side=inline-start]:-right-1 data-[side=inline-start]:-translate-y-1/2;\n\t}\n\n\t/* MARK: Input Group */\n\t.cn-input-group {\n\t\t@apply border-input dark:bg-input/30 has-[[data-slot=input-group-control]:focus-visible]:border-ring has-[[data-slot=input-group-control]:focus-visible]:ring-ring/50 has-[[data-slot][aria-invalid=true]]:ring-destructive/20 has-[[data-slot][aria-invalid=true]]:border-destructive dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40 has-disabled:bg-input/50 dark:has-disabled:bg-input/80 h-8 rounded-lg border transition-colors in-data-[slot=combobox-content]:focus-within:border-inherit in-data-[slot=combobox-content]:focus-within:ring-0 has-disabled:opacity-50 has-[[data-slot=input-group-control]:focus-visible]:ring-3 has-[[data-slot][aria-invalid=true]]:ring-3 has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>[data-align=block-end]]:[&>input]:pt-3 has-[>[data-align=block-start]]:[&>input]:pb-3 has-[>[data-align=inline-end]]:[&>input]:pr-1.5 has-[>[data-align=inline-start]]:[&>input]:pl-1.5;\n\t}\n\n\t.cn-input-group-addon {\n\t\t@apply text-muted-foreground h-auto gap-2 py-1.5 text-sm font-medium group-data-[disabled=true]/input-group:opacity-50 [&>kbd]:rounded-[calc(var(--radius)-5px)] [&>svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-input-group-addon-align-inline-start {\n\t\t@apply pl-2 has-[>button]:ml-[-0.3rem] has-[>kbd]:ml-[-0.15rem];\n\t}\n\n\t.cn-input-group-addon-align-inline-end {\n\t\t@apply pr-2 has-[>button]:mr-[-0.3rem] has-[>kbd]:mr-[-0.15rem];\n\t}\n\n\t.cn-input-group-addon-align-block-start {\n\t\t@apply px-2.5 pt-2 group-has-[>input]/input-group:pt-2 [.border-b]:pb-2;\n\t}\n\n\t.cn-input-group-addon-align-block-end {\n\t\t@apply px-2.5 pb-2 group-has-[>input]/input-group:pb-2 [.border-t]:pt-2;\n\t}\n\n\t.cn-input-group-button {\n\t\t@apply gap-2 text-sm;\n\t}\n\n\t.cn-input-group-button-size-xs {\n\t\t@apply h-6 gap-1 rounded-[calc(var(--radius)-3px)] px-1.5 [&>svg:not([class*='size-'])]:size-3.5;\n\t}\n\n\t.cn-input-group-button-size-icon-xs {\n\t\t@apply size-6 rounded-[calc(var(--radius)-3px)] p-0 has-[>svg]:p-0;\n\t}\n\n\t.cn-input-group-button-size-icon-sm {\n\t\t@apply size-8 p-0 has-[>svg]:p-0;\n\t}\n\n\t.cn-input-group-text {\n\t\t@apply text-muted-foreground gap-2 text-sm [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-input-group-input {\n\t\t@apply rounded-none border-0 bg-transparent shadow-none ring-0 focus-visible:ring-0 disabled:bg-transparent aria-invalid:ring-0 dark:bg-transparent dark:disabled:bg-transparent;\n\t}\n\n\t.cn-input-group-textarea {\n\t\t@apply rounded-none border-0 bg-transparent py-2 shadow-none ring-0 focus-visible:ring-0 disabled:bg-transparent aria-invalid:ring-0 dark:bg-transparent dark:disabled:bg-transparent;\n\t}\n\n\t/* MARK: Menu Translucent */\n\t.cn-menu-translucent {\n\t\t@apply bg-popover/70 **:data-[slot$=-item]:focus:bg-foreground/10 **:data-[slot$=-item]:data-highlighted:bg-foreground/10 **:data-[slot$=-separator]:bg-foreground/5 **:data-[slot$=-trigger]:focus:bg-foreground/10 **:data-[slot$=-trigger]:aria-expanded:bg-foreground/10! **:data-[variant=destructive]:focus:bg-foreground/10! **:data-[variant=destructive]:text-accent-foreground! **:data-[variant=destructive]:**:text-accent-foreground! relative animate-none! before:pointer-events-none before:absolute before:inset-0 before:-z-1 before:rounded-[inherit] before:backdrop-blur-2xl before:backdrop-saturate-150;\n\t}\n}\n"
  },
  {
    "path": "docs/src/lib/registry/styles/style-vega.css",
    "content": ".style-vega {\n\t/* MARK: Accordion */\n\t.cn-accordion-item {\n\t\t@apply not-last:border-b;\n\t}\n\n\t.cn-accordion-trigger {\n\t\t@apply focus-visible:ring-ring/50 focus-visible:border-ring focus-visible:after:border-ring **:data-[slot=accordion-trigger-icon]:text-muted-foreground rounded-md py-4 text-left text-sm font-medium hover:underline focus-visible:ring-3 **:data-[slot=accordion-trigger-icon]:ml-auto **:data-[slot=accordion-trigger-icon]:size-4;\n\t}\n\n\t.cn-accordion-content {\n\t\t@apply data-open:animate-accordion-down data-closed:animate-accordion-up text-sm;\n\t}\n\n\t.cn-accordion-content-inner {\n\t\t@apply pt-0 pb-4;\n\t}\n\n\t/* MARK: Alert Dialog */\n\t.cn-alert-dialog-overlay {\n\t\t@apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 bg-black/10 duration-100 supports-backdrop-filter:backdrop-blur-xs;\n\t}\n\n\t.cn-alert-dialog-content {\n\t\t@apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 bg-background ring-foreground/10 gap-6 rounded-xl p-6 ring-1 duration-100 data-[size=default]:max-w-xs data-[size=sm]:max-w-xs data-[size=default]:sm:max-w-lg;\n\t}\n\n\t.cn-alert-dialog-header {\n\t\t@apply grid grid-rows-[auto_1fr] place-items-center gap-1.5 text-center has-data-[slot=alert-dialog-media]:grid-rows-[auto_auto_1fr] has-data-[slot=alert-dialog-media]:gap-x-6 sm:group-data-[size=default]/alert-dialog-content:place-items-start sm:group-data-[size=default]/alert-dialog-content:text-left sm:group-data-[size=default]/alert-dialog-content:has-data-[slot=alert-dialog-media]:grid-rows-[auto_1fr];\n\t}\n\n\t.cn-alert-dialog-media {\n\t\t@apply bg-muted mb-2 inline-flex size-16 items-center justify-center rounded-md sm:group-data-[size=default]/alert-dialog-content:row-span-2 *:[svg:not([class*='size-'])]:size-8;\n\t}\n\n\t.cn-alert-dialog-title {\n\t\t@apply text-lg font-medium sm:group-data-[size=default]/alert-dialog-content:group-has-data-[slot=alert-dialog-media]/alert-dialog-content:col-start-2;\n\t}\n\n\t.cn-alert-dialog-description {\n\t\t@apply text-muted-foreground *:[a]:hover:text-foreground text-sm text-balance md:text-pretty *:[a]:underline *:[a]:underline-offset-3;\n\t}\n\n\t/* MARK: Alert */\n\t.cn-alert {\n\t\t@apply grid gap-0.5 rounded-lg border px-4 py-3 text-left text-sm has-data-[slot=alert-action]:relative has-data-[slot=alert-action]:pr-18 has-[>svg]:grid-cols-[auto_1fr] has-[>svg]:gap-x-2.5 *:[svg]:row-span-2 *:[svg]:translate-y-0.5 *:[svg]:text-current *:[svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-alert-variant-default {\n\t\t@apply bg-card text-card-foreground;\n\t}\n\n\t.cn-alert-variant-destructive {\n\t\t@apply text-destructive bg-card *:data-[slot=alert-description]:text-destructive/90 *:[svg]:text-current;\n\t}\n\n\t.cn-alert-title {\n\t\t@apply font-medium group-has-[>svg]/alert:col-start-2;\n\t}\n\n\t.cn-alert-description {\n\t\t@apply text-muted-foreground text-sm text-balance md:text-pretty [&_p:not(:last-child)]:mb-4;\n\t}\n\n\t.cn-alert-action {\n\t\t@apply absolute top-2.5 right-3;\n\t}\n\n\t/* MARK: Avatar */\n\t.cn-avatar {\n\t\t@apply size-8 rounded-full after:rounded-full data-[size=lg]:size-10 data-[size=sm]:size-6;\n\t}\n\n\t.cn-avatar-fallback {\n\t\t@apply bg-muted text-muted-foreground rounded-full;\n\t}\n\n\t.cn-avatar-image {\n\t\t@apply rounded-full;\n\t}\n\n\t.cn-avatar-badge {\n\t\t@apply bg-primary text-primary-foreground ring-background;\n\t}\n\n\t.cn-avatar-group-count {\n\t\t@apply bg-muted text-muted-foreground size-8 rounded-full text-sm group-has-data-[size=lg]/avatar-group:size-10 group-has-data-[size=sm]/avatar-group:size-6 [&>svg]:size-4 group-has-data-[size=lg]/avatar-group:[&>svg]:size-5 group-has-data-[size=sm]/avatar-group:[&>svg]:size-3;\n\t}\n\n\t/* MARK: Badge */\n\t.cn-badge {\n\t\t@apply h-5 gap-1 rounded-4xl border border-transparent px-2 py-0.5 text-xs font-medium transition-all has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&>svg]:size-3!;\n\t}\n\n\t.cn-badge-variant-default {\n\t\t@apply bg-primary text-primary-foreground [a]:hover:bg-primary/80;\n\t}\n\n\t.cn-badge-variant-secondary {\n\t\t@apply bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80;\n\t}\n\n\t.cn-badge-variant-outline {\n\t\t@apply border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground;\n\t}\n\n\t.cn-badge-variant-destructive {\n\t\t@apply bg-destructive/10 [a]:hover:bg-destructive/20 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 text-destructive dark:bg-destructive/20;\n\t}\n\n\t.cn-badge-variant-ghost {\n\t\t@apply hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50;\n\t}\n\n\t.cn-badge-variant-link {\n\t\t@apply text-primary underline-offset-4 hover:underline;\n\t}\n\n\t/* MARK: Breadcrumb */\n\t.cn-breadcrumb-list {\n\t\t@apply text-muted-foreground gap-1.5 text-sm sm:gap-2.5;\n\t}\n\n\t.cn-breadcrumb-item {\n\t\t@apply gap-1.5;\n\t}\n\n\t.cn-breadcrumb-link {\n\t\t@apply hover:text-foreground transition-colors;\n\t}\n\n\t.cn-breadcrumb-page {\n\t\t@apply text-foreground font-normal;\n\t}\n\n\t.cn-breadcrumb-separator {\n\t\t@apply [&>svg]:size-3.5;\n\t}\n\n\t.cn-breadcrumb-ellipsis {\n\t\t@apply size-5 [&>svg]:size-4;\n\t}\n\n\t/* MARK: Button */\n\t.cn-button {\n\t\t@apply focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 rounded-md border border-transparent bg-clip-padding text-sm font-medium focus-visible:ring-3 active:translate-y-px aria-invalid:ring-3 [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-button-variant-default {\n\t\t@apply bg-primary text-primary-foreground hover:bg-primary/80;\n\t}\n\n\t.cn-button-variant-outline {\n\t\t@apply border-border bg-background hover:bg-muted hover:text-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50 aria-expanded:bg-muted aria-expanded:text-foreground shadow-xs;\n\t}\n\n\t.cn-button-variant-secondary {\n\t\t@apply bg-secondary text-secondary-foreground hover:bg-secondary/80 aria-expanded:bg-secondary aria-expanded:text-secondary-foreground;\n\t}\n\n\t.cn-button-variant-ghost {\n\t\t@apply hover:bg-muted hover:text-foreground dark:hover:bg-muted/50 aria-expanded:bg-muted aria-expanded:text-foreground;\n\t}\n\n\t.cn-button-variant-destructive {\n\t\t@apply bg-destructive/10 hover:bg-destructive/20 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/20 text-destructive focus-visible:border-destructive/40 dark:hover:bg-destructive/30;\n\t}\n\n\t.cn-button-variant-link {\n\t\t@apply text-primary underline-offset-4 hover:underline;\n\t}\n\n\t.cn-button-size-xs {\n\t\t@apply h-6 gap-1 rounded-[min(var(--radius-md),8px)] px-2 text-xs in-data-[slot=button-group]:rounded-md has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&_svg:not([class*='size-'])]:size-3;\n\t}\n\n\t.cn-button-size-sm {\n\t\t@apply h-8 gap-1 rounded-[min(var(--radius-md),10px)] px-2.5 in-data-[slot=button-group]:rounded-md has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5;\n\t}\n\n\t.cn-button-size-default {\n\t\t@apply h-9 gap-1.5 px-2.5 in-data-[slot=button-group]:rounded-md has-data-[icon=inline-end]:pr-2 has-data-[icon=inline-start]:pl-2;\n\t}\n\n\t.cn-button-size-lg {\n\t\t@apply h-10 gap-1.5 px-2.5 has-data-[icon=inline-end]:pr-3 has-data-[icon=inline-start]:pl-3;\n\t}\n\n\t.cn-button-size-icon-xs {\n\t\t@apply size-6 rounded-[min(var(--radius-md),8px)] in-data-[slot=button-group]:rounded-md [&_svg:not([class*='size-'])]:size-3;\n\t}\n\n\t.cn-button-size-icon-sm {\n\t\t@apply size-8 rounded-[min(var(--radius-md),10px)] in-data-[slot=button-group]:rounded-md;\n\t}\n\n\t.cn-button-size-icon {\n\t\t@apply size-9;\n\t}\n\n\t.cn-button-size-icon-lg {\n\t\t@apply size-10;\n\t}\n\n\t/* MARK: Button Group */\n\t.cn-button-group {\n\t\t@apply has-[>[data-slot=button-group]]:gap-2 has-[select[aria-hidden=true]:last-child]:[&>[data-slot=select-trigger]:last-of-type]:rounded-r-md;\n\t}\n\n\t.cn-button-group-orientation-horizontal {\n\t\t@apply [&>[data-slot]:not(:has(~[data-slot]))]:rounded-r-md!;\n\t}\n\n\t.cn-button-group-orientation-vertical {\n\t\t@apply [&>[data-slot]:not(:has(~[data-slot]))]:rounded-b-md!;\n\t}\n\n\t.cn-button-group-text {\n\t\t@apply bg-muted gap-2 rounded-md border px-2.5 text-sm font-medium shadow-xs [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-button-group-separator {\n\t\t@apply bg-input;\n\t}\n\n\t/* MARK: Calendar */\n\t.cn-calendar {\n\t\t@apply p-3 [--cell-radius:var(--radius-md)] [--cell-size:--spacing(8)];\n\t}\n\n\t.cn-calendar-dropdown-root {\n\t\t@apply has-focus:border-ring border-input has-focus:ring-ring/50 border shadow-xs has-focus:ring-3;\n\t}\n\n\t.cn-calendar-caption-label {\n\t\t@apply h-8 pr-1 pl-2;\n\t}\n\n\t/* MARK: Card */\n\t.cn-card {\n\t\t@apply ring-foreground/10 bg-card text-card-foreground gap-6 overflow-hidden rounded-xl py-6 text-sm shadow-xs ring-1 has-[>img:first-child]:pt-0 data-[size=sm]:gap-4 data-[size=sm]:py-4 *:[img:first-child]:rounded-t-xl *:[img:last-child]:rounded-b-xl;\n\t}\n\n\t.cn-card-header {\n\t\t@apply gap-1 rounded-t-xl px-6 group-data-[size=sm]/card:px-4 [.border-b]:pb-6 group-data-[size=sm]/card:[.border-b]:pb-4;\n\t}\n\n\t.cn-card-title {\n\t\t@apply text-base leading-normal font-medium group-data-[size=sm]/card:text-sm;\n\t}\n\n\t.cn-card-description {\n\t\t@apply text-muted-foreground text-sm;\n\t}\n\n\t.cn-card-content {\n\t\t@apply px-6 group-data-[size=sm]/card:px-4;\n\t}\n\n\t.cn-card-footer {\n\t\t@apply rounded-b-xl px-6 group-data-[size=sm]/card:px-4 [.border-t]:pt-6 group-data-[size=sm]/card:[.border-t]:pt-4;\n\t}\n\n\t/* MARK: Carousel */\n\t.cn-carousel-previous {\n\t\t@apply rounded-full;\n\t}\n\n\t.cn-carousel-next {\n\t\t@apply rounded-full;\n\t}\n\n\t/* MARK: Chart */\n\t.cn-chart-tooltip {\n\t\t@apply border-border/50 bg-background gap-1.5 rounded-lg border px-2.5 py-1.5 text-xs shadow-xl;\n\t}\n\n\t/* MARK: Checkbox */\n\t.cn-checkbox {\n\t\t@apply border-input dark:bg-input/30 data-checked:bg-primary data-checked:text-primary-foreground dark:data-checked:bg-primary data-checked:border-primary aria-invalid:aria-checked:border-primary aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 flex size-4 items-center justify-center rounded-[4px] border shadow-xs transition-shadow group-has-disabled/field:opacity-50 focus-visible:ring-3 aria-invalid:ring-3;\n\t}\n\n\t.cn-checkbox-indicator {\n\t\t@apply [&>svg]:size-3.5;\n\t}\n\n\t/* MARK: Combobox */\n\t.cn-combobox-content {\n\t\t@apply bg-popover text-popover-foreground data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 *:data-[slot=input-group]:bg-input/30 *:data-[slot=input-group]:border-input/30 max-h-72 min-w-36 overflow-hidden rounded-md shadow-md ring-1 duration-100 *:data-[slot=input-group]:m-1 *:data-[slot=input-group]:mb-0 *:data-[slot=input-group]:h-8 *:data-[slot=input-group]:shadow-none;\n\t}\n\n\t.cn-combobox-content-logical {\n\t\t@apply data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2;\n\t}\n\n\t.cn-combobox-label {\n\t\t@apply text-muted-foreground px-2 py-1.5 text-xs;\n\t}\n\n\t.cn-combobox-item {\n\t\t@apply data-highlighted:bg-accent data-highlighted:text-accent-foreground not-data-[variant=destructive]:data-highlighted:**:text-accent-foreground gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-combobox-item-indicator {\n\t\t@apply pointer-events-none absolute right-2 flex size-4 items-center justify-center;\n\t}\n\n\t.cn-combobox-empty {\n\t\t@apply text-muted-foreground hidden w-full justify-center py-2 text-center text-sm group-data-empty/combobox-content:flex;\n\t}\n\n\t.cn-combobox-list {\n\t\t@apply no-scrollbar max-h-[min(calc(--spacing(72)---spacing(9)),calc(var(--available-height)---spacing(9)))] scroll-py-1 overflow-y-auto p-1 data-empty:p-0;\n\t}\n\n\t.cn-combobox-item-text {\n\t\t@apply flex flex-1 gap-2;\n\t}\n\n\t.cn-combobox-separator {\n\t\t@apply bg-border -mx-1 my-1 h-px;\n\t}\n\n\t.cn-combobox-trigger {\n\t\t@apply [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-combobox-trigger-icon {\n\t\t@apply text-muted-foreground size-4;\n\t}\n\n\t.cn-combobox-chips {\n\t\t@apply dark:bg-input/30 border-input focus-within:border-ring focus-within:ring-ring/50 has-aria-invalid:ring-destructive/20 dark:has-aria-invalid:ring-destructive/40 has-aria-invalid:border-destructive dark:has-aria-invalid:border-destructive/50 flex min-h-9 flex-wrap items-center gap-1.5 rounded-md border bg-transparent bg-clip-padding px-2.5 py-1.5 text-sm shadow-xs transition-[color,box-shadow] focus-within:ring-3 has-aria-invalid:ring-3 has-data-[slot=combobox-chip]:px-1.5;\n\t}\n\n\t.cn-combobox-chip {\n\t\t@apply bg-muted text-foreground flex h-[calc(--spacing(5.5))] w-fit items-center justify-center gap-1 rounded-sm px-1.5 text-xs font-medium whitespace-nowrap has-data-[slot=combobox-chip-remove]:pr-0;\n\t}\n\n\t.cn-combobox-chip-remove {\n\t\t@apply -ml-1 opacity-50 hover:opacity-100;\n\t}\n\n\t/* MARK: Command */\n\t.cn-command {\n\t\t@apply bg-popover text-popover-foreground rounded-xl! p-1;\n\t}\n\n\t.cn-command-dialog {\n\t\t@apply rounded-xl!;\n\t}\n\n\t.cn-command-input-wrapper {\n\t\t@apply p-1 pb-0;\n\t}\n\n\t.cn-command-input-group {\n\t\t@apply bg-input/30 border-input/30 h-8! rounded-lg! shadow-none! *:data-[slot=input-group-addon]:pl-2!;\n\t}\n\n\t.cn-command-input-icon {\n\t\t@apply size-4 shrink-0 opacity-50;\n\t}\n\n\t.cn-command-input {\n\t\t@apply w-full text-sm;\n\t}\n\n\t.cn-command-list {\n\t\t@apply no-scrollbar max-h-72 scroll-py-1 outline-none;\n\t}\n\n\t.cn-command-empty {\n\t\t@apply py-6 text-center text-sm;\n\t}\n\n\t.cn-command-group {\n\t\t@apply text-foreground **:[[cmdk-group-heading]]:text-muted-foreground overflow-hidden p-1 **:[[cmdk-group-heading]]:px-2 **:[[cmdk-group-heading]]:py-1.5 **:[[cmdk-group-heading]]:text-xs **:[[cmdk-group-heading]]:font-medium;\n\t}\n\n\t.cn-command-separator {\n\t\t@apply bg-border -mx-1 h-px w-auto;\n\t}\n\n\t.cn-command-item {\n\t\t@apply data-selected:bg-muted data-selected:text-foreground data-selected:**:[svg]:text-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none in-data-[slot=dialog-content]:rounded-lg! [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-command-shortcut {\n\t\t@apply text-muted-foreground group-data-selected/command-item:text-foreground ml-auto text-xs tracking-widest;\n\t}\n\n\t/* MARK: Context Menu */\n\t.cn-context-menu-content {\n\t\t@apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 bg-popover text-popover-foreground min-w-36 rounded-md p-1 shadow-md ring-1 duration-100;\n\t}\n\n\t.cn-context-menu-content-logical {\n\t\t@apply data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2;\n\t}\n\n\t.cn-context-menu-item {\n\t\t@apply focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:text-destructive focus:*:[svg]:text-accent-foreground gap-2 rounded-sm px-2 py-1.5 text-sm data-inset:pl-8 [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-context-menu-checkbox-item {\n\t\t@apply focus:bg-accent focus:text-accent-foreground gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm data-inset:pl-8 [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-context-menu-radio-item {\n\t\t@apply focus:bg-accent focus:text-accent-foreground gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm data-inset:pl-8 [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-context-menu-item-indicator {\n\t\t@apply absolute right-2;\n\t}\n\n\t.cn-context-menu-label {\n\t\t@apply text-muted-foreground px-2 py-1.5 text-xs font-medium data-inset:pl-8;\n\t}\n\n\t.cn-context-menu-separator {\n\t\t@apply bg-border -mx-1 my-1 h-px;\n\t}\n\n\t.cn-context-menu-shortcut {\n\t\t@apply text-muted-foreground group-focus/context-menu-item:text-accent-foreground ml-auto text-xs tracking-widest;\n\t}\n\n\t.cn-context-menu-sub-trigger {\n\t\t@apply focus:bg-accent focus:text-accent-foreground data-open:bg-accent data-open:text-accent-foreground rounded-sm px-2 py-1.5 text-sm data-inset:pl-8 [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-context-menu-sub-content {\n\t\t@apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 bg-popover text-popover-foreground min-w-32 rounded-md border p-1 shadow-lg duration-100;\n\t}\n\n\t.cn-context-menu-subcontent {\n\t\t@apply shadow-lg;\n\t}\n\n\t/* MARK: Dialog */\n\t.cn-dialog-overlay {\n\t\t@apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 bg-black/10 duration-100 supports-backdrop-filter:backdrop-blur-xs;\n\t}\n\n\t.cn-dialog-content {\n\t\t@apply bg-background data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 ring-foreground/10 grid max-w-[calc(100%-2rem)] gap-6 rounded-xl p-6 text-sm ring-1 duration-100 sm:max-w-md;\n\t}\n\n\t.cn-dialog-close {\n\t\t@apply absolute top-4 right-4;\n\t}\n\n\t.cn-dialog-header {\n\t\t@apply gap-2;\n\t}\n\n\t.cn-dialog-footer {\n\t\t@apply gap-2;\n\t}\n\n\t.cn-dialog-title {\n\t\t@apply leading-none font-medium;\n\t}\n\n\t.cn-dialog-description {\n\t\t@apply text-muted-foreground *:[a]:hover:text-foreground text-sm *:[a]:underline *:[a]:underline-offset-3;\n\t}\n\n\t/* MARK: Drawer */\n\t.cn-drawer-overlay {\n\t\t@apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 bg-black/10 supports-backdrop-filter:backdrop-blur-xs;\n\t}\n\n\t.cn-drawer-content {\n\t\t@apply bg-background flex h-auto flex-col text-sm data-[vaul-drawer-direction=bottom]:inset-x-0 data-[vaul-drawer-direction=bottom]:bottom-0 data-[vaul-drawer-direction=bottom]:mt-24 data-[vaul-drawer-direction=bottom]:max-h-[80vh] data-[vaul-drawer-direction=bottom]:rounded-t-xl data-[vaul-drawer-direction=bottom]:border-t data-[vaul-drawer-direction=left]:inset-y-0 data-[vaul-drawer-direction=left]:left-0 data-[vaul-drawer-direction=left]:w-3/4 data-[vaul-drawer-direction=left]:rounded-r-xl data-[vaul-drawer-direction=left]:border-r data-[vaul-drawer-direction=right]:inset-y-0 data-[vaul-drawer-direction=right]:right-0 data-[vaul-drawer-direction=right]:w-3/4 data-[vaul-drawer-direction=right]:rounded-l-xl data-[vaul-drawer-direction=right]:border-l data-[vaul-drawer-direction=top]:inset-x-0 data-[vaul-drawer-direction=top]:top-0 data-[vaul-drawer-direction=top]:mb-24 data-[vaul-drawer-direction=top]:max-h-[80vh] data-[vaul-drawer-direction=top]:rounded-b-xl data-[vaul-drawer-direction=top]:border-b data-[vaul-drawer-direction=left]:sm:max-w-sm data-[vaul-drawer-direction=right]:sm:max-w-sm;\n\t}\n\n\t.cn-drawer-handle {\n\t\t@apply bg-muted mx-auto mt-4 hidden h-1.5 w-[100px] shrink-0 rounded-full group-data-[vaul-drawer-direction=bottom]/drawer-content:block;\n\t}\n\n\t.cn-drawer-header {\n\t\t@apply gap-0.5 p-4 group-data-[vaul-drawer-direction=bottom]/drawer-content:text-center group-data-[vaul-drawer-direction=top]/drawer-content:text-center md:gap-1.5 md:text-left;\n\t}\n\n\t.cn-drawer-title {\n\t\t@apply text-foreground font-medium;\n\t}\n\n\t.cn-drawer-description {\n\t\t@apply text-muted-foreground text-sm;\n\t}\n\n\t.cn-drawer-footer {\n\t\t@apply gap-2 p-4;\n\t}\n\n\t/* MARK: Dropdown Menu */\n\t.cn-dropdown-menu-content {\n\t\t@apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 bg-popover text-popover-foreground min-w-32 rounded-md p-1 shadow-md ring-1 duration-100;\n\t}\n\n\t.cn-dropdown-menu-content-logical {\n\t\t@apply data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2;\n\t}\n\n\t.cn-dropdown-menu-item {\n\t\t@apply focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:text-destructive not-data-[variant=destructive]:focus:**:text-accent-foreground gap-2 rounded-sm px-2 py-1.5 text-sm data-inset:pl-8 [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-dropdown-menu-checkbox-item {\n\t\t@apply focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm data-inset:pl-8 [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-dropdown-menu-radio-item {\n\t\t@apply focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm data-inset:pl-8 [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-dropdown-menu-item-indicator {\n\t\t@apply absolute right-2 flex items-center justify-center;\n\t}\n\n\t.cn-dropdown-menu-label {\n\t\t@apply text-muted-foreground px-2 py-1.5 text-xs font-medium data-inset:pl-8;\n\t}\n\n\t.cn-dropdown-menu-separator {\n\t\t@apply bg-border -mx-1 my-1 h-px;\n\t}\n\n\t.cn-dropdown-menu-shortcut {\n\t\t@apply text-muted-foreground group-focus/dropdown-menu-item:text-accent-foreground ml-auto text-xs tracking-widest;\n\t}\n\n\t.cn-dropdown-menu-sub-trigger {\n\t\t@apply focus:bg-accent focus:text-accent-foreground data-open:bg-accent data-open:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground gap-2 rounded-sm px-2 py-1.5 text-sm data-inset:pl-8 [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-dropdown-menu-sub-content {\n\t\t@apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 bg-popover text-popover-foreground min-w-[96px] rounded-md p-1 shadow-lg ring-1 duration-100;\n\t}\n\n\t.cn-dropdown-menu-subcontent {\n\t\t@apply shadow-lg;\n\t}\n\n\t/* MARK: Empty */\n\t.cn-empty {\n\t\t@apply gap-4 rounded-lg border-dashed p-12;\n\t}\n\n\t.cn-empty-header {\n\t\t@apply gap-2;\n\t}\n\n\t.cn-empty-media {\n\t\t@apply mb-2;\n\t}\n\n\t.cn-empty-media-default {\n\t\t@apply bg-transparent;\n\t}\n\n\t.cn-empty-media-icon {\n\t\t@apply bg-muted text-foreground flex size-10 shrink-0 items-center justify-center rounded-lg [&_svg:not([class*='size-'])]:size-6;\n\t}\n\n\t.cn-empty-title {\n\t\t@apply text-lg font-medium tracking-tight;\n\t}\n\n\t.cn-empty-description {\n\t\t@apply text-sm/relaxed;\n\t}\n\n\t.cn-empty-content {\n\t\t@apply gap-4 text-sm;\n\t}\n\n\t/* MARK: Field */\n\t.cn-field-set {\n\t\t@apply gap-6 has-[>[data-slot=checkbox-group]]:gap-3 has-[>[data-slot=radio-group]]:gap-3;\n\t}\n\n\t.cn-field-legend {\n\t\t@apply mb-3 font-medium data-[variant=label]:text-sm data-[variant=legend]:text-base;\n\t}\n\n\t.cn-field-group {\n\t\t@apply gap-7 data-[slot=checkbox-group]:gap-3 *:data-[slot=field-group]:gap-4;\n\t}\n\n\t.cn-field {\n\t\t@apply data-[invalid=true]:text-destructive gap-3;\n\t}\n\n\t.cn-field-content {\n\t\t@apply gap-1;\n\t}\n\n\t.cn-field-label {\n\t\t@apply has-data-checked:bg-primary/5 has-data-checked:border-primary/30 dark:has-data-checked:border-primary/20 dark:has-data-checked:bg-primary/10 gap-2 group-data-[disabled=true]/field:opacity-50 has-[>[data-slot=field]]:rounded-md has-[>[data-slot=field]]:border *:data-[slot=field]:p-3;\n\t}\n\n\t.cn-field-title {\n\t\t@apply gap-2 text-sm font-medium group-data-[disabled=true]/field:opacity-50;\n\t}\n\n\t.cn-field-description {\n\t\t@apply text-muted-foreground text-left text-sm [[data-variant=legend]+&]:-mt-1.5;\n\t}\n\n\t.cn-field-separator {\n\t\t@apply -my-2 h-5 text-sm group-data-[variant=outline]/field-group:-mb-2;\n\t}\n\n\t.cn-field-separator-content {\n\t\t@apply text-muted-foreground px-2;\n\t}\n\n\t.cn-field-error {\n\t\t@apply text-destructive text-sm;\n\t}\n\n\t/* MARK: Hover Card */\n\t.cn-hover-card-content {\n\t\t@apply data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 bg-popover text-popover-foreground w-64 rounded-lg p-4 text-sm shadow-md ring-1 duration-100;\n\t}\n\n\t.cn-hover-card-content-logical {\n\t\t@apply data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2;\n\t}\n\n\t/* MARK: Input */\n\t.cn-input {\n\t\t@apply dark:bg-input/30 border-input focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 h-9 rounded-md border bg-transparent px-2.5 py-1 text-base shadow-xs transition-[color,box-shadow] file:h-7 file:text-sm file:font-medium focus-visible:ring-3 aria-invalid:ring-3 md:text-sm;\n\t}\n\n\t/* MARK: Input OTP */\n\t.cn-input-otp {\n\t\t@apply gap-2;\n\t}\n\n\t.cn-input-otp-group {\n\t\t@apply has-aria-invalid:ring-destructive/20 dark:has-aria-invalid:ring-destructive/40 has-aria-invalid:border-destructive rounded-md has-aria-invalid:ring-3;\n\t}\n\n\t.cn-input-otp-slot {\n\t\t@apply dark:bg-input/30 border-input data-[active=true]:border-ring data-[active=true]:ring-ring/50 data-[active=true]:aria-invalid:ring-destructive/20 dark:data-[active=true]:aria-invalid:ring-destructive/40 aria-invalid:border-destructive data-[active=true]:aria-invalid:border-destructive size-9 border-y border-r text-sm shadow-xs transition-all outline-none first:rounded-l-md first:border-l last:rounded-r-md data-[active=true]:ring-3;\n\t}\n\n\t.cn-input-otp-caret-line {\n\t\t@apply animate-caret-blink bg-foreground h-4 w-px duration-1000;\n\t}\n\n\t.cn-input-otp-separator {\n\t\t@apply [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t/* MARK: Item */\n\t.cn-item {\n\t\t@apply [a]:hover:bg-muted rounded-md border text-sm;\n\t}\n\n\t.cn-item-variant-default {\n\t\t@apply border-transparent;\n\t}\n\n\t.cn-item-variant-outline {\n\t\t@apply border-border;\n\t}\n\n\t.cn-item-variant-muted {\n\t\t@apply bg-muted/50 border-transparent;\n\t}\n\n\t.cn-item-size-default {\n\t\t@apply gap-3.5 px-4 py-3.5;\n\t}\n\n\t.cn-item-size-sm {\n\t\t@apply gap-2.5 px-3 py-2.5;\n\t}\n\n\t.cn-item-size-xs {\n\t\t@apply gap-2 px-2.5 py-2 in-data-[slot=dropdown-menu-content]:p-0;\n\t}\n\n\t.cn-item-media {\n\t\t@apply gap-2 group-has-data-[slot=item-description]/item:translate-y-0.5 group-has-data-[slot=item-description]/item:self-start;\n\t}\n\n\t.cn-item-media-variant-default {\n\t\t@apply bg-transparent;\n\t}\n\n\t.cn-item-media-variant-icon {\n\t\t@apply [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-item-media-variant-image {\n\t\t@apply size-10 overflow-hidden rounded-sm group-data-[size=sm]/item:size-8 group-data-[size=xs]/item:size-6 [&_img]:size-full [&_img]:object-cover;\n\t}\n\n\t.cn-item-content {\n\t\t@apply gap-1 group-data-[size=xs]/item:gap-0;\n\t}\n\n\t.cn-item-title {\n\t\t@apply gap-2 text-sm leading-snug font-medium underline-offset-4;\n\t}\n\n\t.cn-item-description {\n\t\t@apply text-muted-foreground text-left text-sm leading-normal group-data-[size=xs]/item:text-xs;\n\t}\n\n\t.cn-item-actions {\n\t\t@apply gap-2;\n\t}\n\n\t.cn-item-header {\n\t\t@apply gap-2;\n\t}\n\n\t.cn-item-footer {\n\t\t@apply gap-2;\n\t}\n\n\t.cn-item-group {\n\t\t@apply gap-4 has-data-[size=sm]:gap-2.5 has-data-[size=xs]:gap-2;\n\t}\n\n\t.cn-item-separator {\n\t\t@apply my-2;\n\t}\n\n\t/* MARK: Kbd */\n\t.cn-kbd {\n\t\t@apply bg-muted text-muted-foreground in-data-[slot=tooltip-content]:bg-background/20 in-data-[slot=tooltip-content]:text-background dark:in-data-[slot=tooltip-content]:bg-background/10 h-5 w-fit min-w-5 gap-1 rounded-sm px-1 font-sans text-xs font-medium [&_svg:not([class*='size-'])]:size-3;\n\t}\n\n\t.cn-kbd-group {\n\t\t@apply gap-1;\n\t}\n\n\t/* MARK: Label */\n\t.cn-label {\n\t\t@apply gap-2 text-sm leading-none font-medium group-data-[disabled=true]:opacity-50 peer-disabled:opacity-50;\n\t}\n\n\t/* MARK: Menubar */\n\t.cn-menubar {\n\t\t@apply h-9 gap-1 rounded-md border p-1 shadow-xs;\n\t}\n\n\t.cn-menubar-trigger {\n\t\t@apply hover:bg-muted aria-expanded:bg-muted rounded-sm px-2 py-1 text-sm font-medium;\n\t}\n\n\t.cn-menubar-content {\n\t\t@apply bg-popover text-popover-foreground data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 min-w-36 rounded-md p-1 shadow-md ring-1 duration-100;\n\t}\n\n\t.cn-menubar-content-logical {\n\t\t@apply data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2;\n\t}\n\n\t.cn-menubar-item {\n\t\t@apply focus:bg-accent focus:text-accent-foreground data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/20 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:text-destructive! not-data-[variant=destructive]:focus:**:text-accent-foreground gap-2 rounded-sm px-2 py-1.5 text-sm data-disabled:opacity-50 data-inset:pl-8 [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-menubar-checkbox-item {\n\t\t@apply focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground gap-2 rounded-md py-1.5 pr-2 pl-8 text-sm data-inset:pl-8;\n\t}\n\n\t.cn-menubar-checkbox-item-indicator {\n\t\t@apply left-2 size-4 [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-menubar-radio-item {\n\t\t@apply focus:bg-accent focus:text-accent-foreground focus:**:text-accent-foreground gap-2 rounded-md py-1.5 pr-2 pl-8 text-sm data-disabled:opacity-50 data-inset:pl-8 [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-menubar-radio-item-indicator {\n\t\t@apply left-2 size-4 [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-menubar-label {\n\t\t@apply px-2 py-1.5 text-sm font-medium data-inset:pl-8;\n\t}\n\n\t.cn-menubar-separator {\n\t\t@apply bg-border;\n\t}\n\n\t.cn-menubar-shortcut {\n\t\t@apply text-muted-foreground group-focus/menubar-item:text-accent-foreground text-xs tracking-widest;\n\t}\n\n\t.cn-menubar-sub-trigger {\n\t\t@apply focus:bg-accent focus:text-accent-foreground data-open:bg-accent data-open:text-accent-foreground gap-2 rounded-sm px-2 py-1.5 text-sm data-inset:pl-8 [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-menubar-sub-content {\n\t\t@apply bg-popover text-popover-foreground data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 min-w-32 rounded-md p-1 shadow-lg ring-1 duration-100;\n\t}\n\n\t/* MARK: Navigation Menu */\n\t.cn-navigation-menu {\n\t\t@apply max-w-max;\n\t}\n\n\t.cn-navigation-menu-list {\n\t\t@apply gap-0;\n\t}\n\n\t.cn-navigation-menu-trigger {\n\t\t@apply bg-background hover:bg-muted focus:bg-muted data-open:hover:bg-muted data-open:focus:bg-muted data-open:bg-muted/50 focus-visible:ring-ring/50 data-popup-open:bg-muted/50 data-popup-open:hover:bg-muted rounded-md px-4 py-2 text-sm font-medium transition-all focus-visible:ring-3 focus-visible:outline-1 disabled:opacity-50;\n\t}\n\n\t.cn-navigation-menu-trigger-icon {\n\t\t@apply relative top-px ml-1 size-3 transition duration-300 group-data-open/navigation-menu-trigger:rotate-180 group-data-popup-open/navigation-menu-trigger:rotate-180;\n\t}\n\n\t.cn-navigation-menu-content {\n\t\t@apply data-[motion^=from-]:animate-in data-[motion^=to-]:animate-out data-[motion^=from-]:fade-in data-[motion^=to-]:fade-out data-[motion=from-end]:slide-in-from-right-52 data-[motion=from-start]:slide-in-from-left-52 data-[motion=to-end]:slide-out-to-right-52 data-[motion=to-start]:slide-out-to-left-52 group-data-[viewport=false]/navigation-menu:bg-popover group-data-[viewport=false]/navigation-menu:text-popover-foreground group-data-[viewport=false]/navigation-menu:data-open:animate-in group-data-[viewport=false]/navigation-menu:data-closed:animate-out group-data-[viewport=false]/navigation-menu:data-closed:zoom-out-95 group-data-[viewport=false]/navigation-menu:data-open:zoom-in-95 group-data-[viewport=false]/navigation-menu:data-open:fade-in-0 group-data-[viewport=false]/navigation-menu:data-closed:fade-out-0 group-data-[viewport=false]/navigation-menu:ring-foreground/10 p-2 pr-2.5 ease-[cubic-bezier(0.22,1,0.36,1)] group-data-[viewport=false]/navigation-menu:rounded-md group-data-[viewport=false]/navigation-menu:shadow group-data-[viewport=false]/navigation-menu:ring-1 group-data-[viewport=false]/navigation-menu:duration-300;\n\t}\n\n\t.cn-navigation-menu-viewport {\n\t\t@apply bg-popover text-popover-foreground data-open:animate-in data-closed:animate-out data-closed:zoom-out-90 data-open:zoom-in-90 ring-foreground/10 rounded-lg shadow ring-1 duration-100;\n\t}\n\n\t.cn-navigation-menu-link {\n\t\t@apply data-[active=true]:focus:bg-muted data-[active=true]:hover:bg-muted data-[active=true]:bg-muted/50 focus-visible:ring-ring/50 hover:bg-muted focus:bg-muted flex items-center gap-1.5 rounded-sm p-2 text-sm transition-all outline-none focus-visible:ring-3 focus-visible:outline-1 [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-navigation-menu-indicator {\n\t\t@apply data-[state=visible]:animate-in data-[state=hidden]:animate-out data-[state=hidden]:fade-out data-[state=visible]:fade-in;\n\t}\n\n\t.cn-navigation-menu-indicator-arrow {\n\t\t@apply bg-border rounded-tl-sm shadow-md;\n\t}\n\n\t.cn-navigation-menu-positioner {\n\t\t@apply transition-[top,left,right,bottom] duration-300 ease-[cubic-bezier(0.22,1,0.36,1)] data-[side=bottom]:before:top-[-10px] data-[side=bottom]:before:right-0 data-[side=bottom]:before:left-0;\n\t}\n\n\t.cn-navigation-menu-popup {\n\t\t@apply bg-popover text-popover-foreground ring-foreground/10 rounded-lg shadow ring-1 transition-all ease-[cubic-bezier(0.22,1,0.36,1)] outline-none data-ending-style:scale-90 data-ending-style:opacity-0 data-ending-style:duration-150 data-starting-style:scale-90 data-starting-style:opacity-0;\n\t}\n\n\t/* MARK: Native Select */\n\t.cn-native-select {\n\t\t@apply border-input placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 dark:hover:bg-input/50 focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 h-9 w-full min-w-0 appearance-none rounded-md border bg-transparent py-1 pr-8 pl-2.5 text-sm shadow-xs transition-[color,box-shadow] select-none focus-visible:ring-3 aria-invalid:ring-3 data-[size=sm]:h-8;\n\t}\n\n\t.cn-native-select-icon {\n\t\t@apply text-muted-foreground top-1/2 right-2.5 size-4 -translate-y-1/2;\n\t}\n\n\t/* MARK: Pagination */\n\t.cn-pagination-content {\n\t\t@apply gap-1;\n\t}\n\n\t.cn-pagination-ellipsis {\n\t\t@apply size-9 items-center justify-center [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-pagination-previous {\n\t\t@apply pl-2!;\n\t}\n\n\t.cn-pagination-next {\n\t\t@apply pr-2!;\n\t}\n\n\t/* MARK: Popover */\n\t.cn-popover-content {\n\t\t@apply bg-popover text-popover-foreground data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 flex flex-col gap-4 rounded-md p-4 text-sm shadow-md ring-1 duration-100;\n\t}\n\n\t.cn-popover-content-logical {\n\t\t@apply data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2;\n\t}\n\n\t.cn-popover-header {\n\t\t@apply flex flex-col gap-1 text-sm;\n\t}\n\n\t.cn-popover-title {\n\t\t@apply font-medium;\n\t}\n\n\t.cn-popover-description {\n\t\t@apply text-muted-foreground;\n\t}\n\n\t/* MARK: Progress */\n\t.cn-progress {\n\t\t@apply bg-muted h-1.5 rounded-full;\n\t}\n\n\t.cn-progress-track {\n\t\t@apply bg-muted h-1.5 rounded-full;\n\t}\n\n\t.cn-progress-indicator {\n\t\t@apply bg-primary;\n\t}\n\n\t.cn-progress-label {\n\t\t@apply text-sm font-medium;\n\t}\n\n\t.cn-progress-value {\n\t\t@apply text-muted-foreground ml-auto text-sm tabular-nums;\n\t}\n\n\t/* MARK: Radio Group */\n\t.cn-radio-group {\n\t\t@apply grid gap-3;\n\t}\n\n\t.cn-radio-group-item {\n\t\t@apply border-input dark:bg-input/30 data-checked:bg-primary data-checked:text-primary-foreground dark:data-checked:bg-primary data-checked:border-primary aria-invalid:aria-checked:border-primary aria-invalid:border-destructive focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 dark:aria-invalid:border-destructive/50 flex size-4 rounded-full focus-visible:ring-3 aria-invalid:ring-3;\n\t}\n\n\t.cn-radio-group-indicator {\n\t\t@apply flex size-4 items-center justify-center;\n\t}\n\n\t.cn-radio-group-indicator-icon {\n\t\t@apply bg-primary-foreground absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2 rounded-full;\n\t}\n\n\t/* MARK: Resizable */\n\t.cn-resizable-handle-icon {\n\t\t@apply bg-border h-6 w-1 rounded-lg;\n\t}\n\n\t/* MARK: Scroll Area */\n\t.cn-scroll-area-scrollbar {\n\t\t@apply data-horizontal:h-2.5 data-horizontal:flex-col data-horizontal:border-t data-horizontal:border-t-transparent data-vertical:h-full data-vertical:w-2.5 data-vertical:border-l data-vertical:border-l-transparent;\n\t}\n\n\t.cn-scroll-area-thumb {\n\t\t@apply rounded-full;\n\t}\n\n\t/* MARK: Select */\n\t.cn-select-trigger {\n\t\t@apply border-input data-placeholder:text-muted-foreground dark:bg-input/30 dark:hover:bg-input/50 focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 gap-1.5 rounded-md border bg-transparent py-2 pr-2 pl-2.5 text-sm shadow-xs transition-[color,box-shadow] focus-visible:ring-3 aria-invalid:ring-3 data-[size=default]:h-9 data-[size=sm]:h-8 *:data-[slot=select-value]:flex *:data-[slot=select-value]:gap-1.5 [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-select-value {\n\t\t@apply flex flex-1 text-left;\n\t}\n\n\t.cn-select-trigger-icon {\n\t\t@apply text-muted-foreground size-4;\n\t}\n\n\t.cn-select-content {\n\t\t@apply bg-popover text-popover-foreground data-open:animate-in data-closed:animate-out data-closed:fade-out-0 data-open:fade-in-0 data-closed:zoom-out-95 data-open:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 ring-foreground/10 min-w-36 rounded-md shadow-md ring-1 duration-100;\n\t}\n\n\t.cn-select-content-logical {\n\t\t@apply data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2;\n\t}\n\n\t.cn-select-label {\n\t\t@apply text-muted-foreground px-2 py-1.5 text-xs;\n\t}\n\n\t.cn-select-item {\n\t\t@apply focus:bg-accent focus:text-accent-foreground not-data-[variant=destructive]:focus:**:text-accent-foreground gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm [&_svg:not([class*='size-'])]:size-4 *:[span]:last:flex *:[span]:last:items-center *:[span]:last:gap-2;\n\t}\n\n\t.cn-select-item-indicator {\n\t\t@apply pointer-events-none absolute right-2 flex size-4 items-center justify-center;\n\t}\n\n\t.cn-select-group {\n\t\t@apply scroll-my-1 p-1;\n\t}\n\n\t.cn-select-item-text {\n\t\t@apply flex flex-1 gap-2;\n\t}\n\n\t.cn-select-separator {\n\t\t@apply bg-border -mx-1 my-1 h-px;\n\t}\n\n\t.cn-select-scroll-up-button {\n\t\t@apply bg-popover z-10 flex cursor-default items-center justify-center py-1 [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-select-scroll-down-button {\n\t\t@apply bg-popover z-10 flex cursor-default items-center justify-center py-1 [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t/* MARK: Separator */\n\t.cn-separator {\n\t\t@apply bg-border shrink-0;\n\t}\n\n\t.cn-separator-horizontal {\n\t\t@apply h-px w-full;\n\t}\n\n\t.cn-separator-vertical {\n\t\t@apply h-full w-px;\n\t}\n\n\t/* MARK: Sheet */\n\t.cn-sheet-overlay {\n\t\t@apply bg-black/10 supports-backdrop-filter:backdrop-blur-xs;\n\t}\n\n\t.cn-sheet-content {\n\t\t@apply bg-background fixed z-50 flex flex-col gap-4 bg-clip-padding text-sm shadow-lg transition duration-200 ease-in-out data-[side=bottom]:inset-x-0 data-[side=bottom]:bottom-0 data-[side=bottom]:h-auto data-[side=bottom]:border-t data-[side=left]:inset-y-0 data-[side=left]:left-0 data-[side=left]:h-full data-[side=left]:w-3/4 data-[side=left]:border-r data-[side=right]:inset-y-0 data-[side=right]:right-0 data-[side=right]:h-full data-[side=right]:w-3/4 data-[side=right]:border-l data-[side=top]:inset-x-0 data-[side=top]:top-0 data-[side=top]:h-auto data-[side=top]:border-b data-[side=left]:sm:max-w-sm data-[side=right]:sm:max-w-sm;\n\t}\n\n\t.cn-sheet-close {\n\t\t@apply absolute top-4 right-4;\n\t}\n\n\t.cn-sheet-header {\n\t\t@apply gap-1.5 p-4;\n\t}\n\n\t.cn-sheet-footer {\n\t\t@apply gap-2 p-4;\n\t}\n\n\t.cn-sheet-title {\n\t\t@apply text-foreground font-medium;\n\t}\n\n\t.cn-sheet-description {\n\t\t@apply text-muted-foreground text-sm;\n\t}\n\n\t/* MARK: Sidebar */\n\t.cn-sidebar-gap {\n\t\t@apply transition-[width] duration-200 ease-linear;\n\t}\n\n\t.cn-sidebar-inner {\n\t\t@apply bg-sidebar group-data-[variant=floating]:ring-sidebar-border group-data-[variant=floating]:rounded-lg group-data-[variant=floating]:shadow-sm group-data-[variant=floating]:ring-1;\n\t}\n\n\t.cn-sidebar-rail {\n\t\t@apply hover:after:bg-sidebar-border;\n\t}\n\n\t.cn-sidebar-inset {\n\t\t@apply bg-background md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0 md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm md:peer-data-[variant=inset]:peer-data-[state=collapsed]:ml-2;\n\t}\n\n\t.cn-sidebar-input {\n\t\t@apply bg-background h-8 w-full shadow-none;\n\t}\n\n\t.cn-sidebar-header {\n\t\t@apply gap-2 p-2;\n\t}\n\n\t.cn-sidebar-content {\n\t\t@apply no-scrollbar gap-2;\n\t}\n\n\t.cn-sidebar-footer {\n\t\t@apply gap-2 p-2;\n\t}\n\n\t.cn-sidebar-separator {\n\t\t@apply bg-sidebar-border mx-2;\n\t}\n\n\t.cn-sidebar-group {\n\t\t@apply p-2;\n\t}\n\n\t.cn-sidebar-menu {\n\t\t@apply gap-1;\n\t}\n\n\t.cn-sidebar-group-content {\n\t\t@apply text-sm;\n\t}\n\n\t.cn-sidebar-group-label {\n\t\t@apply text-sidebar-foreground/70 ring-sidebar-ring h-8 rounded-md px-2 text-xs font-medium transition-[margin,opacity] duration-200 ease-linear group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0 focus-visible:ring-2 [&>svg]:size-4;\n\t}\n\n\t.cn-sidebar-group-action {\n\t\t@apply text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground absolute top-3.5 right-3 w-5 rounded-md p-0 focus-visible:ring-2 [&>svg]:size-4;\n\t}\n\n\t.cn-sidebar-menu-button {\n\t\t@apply ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground active:bg-sidebar-accent active:text-sidebar-accent-foreground data-active:bg-sidebar-accent data-active:text-sidebar-accent-foreground data-open:hover:bg-sidebar-accent data-open:hover:text-sidebar-accent-foreground gap-2 rounded-md p-2 text-left text-sm transition-[width,height,padding] group-has-data-[sidebar=menu-action]/menu-item:pr-8 group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! focus-visible:ring-2 data-active:font-medium;\n\t}\n\n\t.cn-sidebar-menu-button-variant-default {\n\t\t@apply hover:bg-sidebar-accent hover:text-sidebar-accent-foreground;\n\t}\n\n\t.cn-sidebar-menu-button-variant-outline {\n\t\t@apply bg-background hover:bg-sidebar-accent hover:text-sidebar-accent-foreground shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))];\n\t}\n\n\t.cn-sidebar-menu-button-size-default {\n\t\t@apply h-8 text-sm;\n\t}\n\n\t.cn-sidebar-menu-button-size-sm {\n\t\t@apply h-7 text-xs;\n\t}\n\n\t.cn-sidebar-menu-button-size-lg {\n\t\t@apply h-12 text-sm group-data-[collapsible=icon]:p-0!;\n\t}\n\n\t.cn-sidebar-menu-action {\n\t\t@apply text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground peer-hover/menu-button:text-sidebar-accent-foreground absolute top-1.5 right-1 aspect-square w-5 rounded-md p-0 peer-data-[size=default]/menu-button:top-1.5 peer-data-[size=lg]/menu-button:top-2.5 peer-data-[size=sm]/menu-button:top-1 focus-visible:ring-2 [&>svg]:size-4;\n\t}\n\n\t.cn-sidebar-menu-badge {\n\t\t@apply text-sidebar-foreground peer-hover/menu-button:text-sidebar-accent-foreground peer-data-active/menu-button:text-sidebar-accent-foreground pointer-events-none absolute right-1 flex h-5 min-w-5 rounded-md px-1 text-xs font-medium peer-data-[size=default]/menu-button:top-1.5 peer-data-[size=lg]/menu-button:top-2.5 peer-data-[size=sm]/menu-button:top-1;\n\t}\n\n\t.cn-sidebar-menu-skeleton {\n\t\t@apply h-8 gap-2 rounded-md px-2;\n\t}\n\n\t.cn-sidebar-menu-skeleton-icon {\n\t\t@apply size-4 rounded-md;\n\t}\n\n\t.cn-sidebar-menu-skeleton-text {\n\t\t@apply h-4;\n\t}\n\n\t.cn-sidebar-menu-sub {\n\t\t@apply border-sidebar-border mx-3.5 translate-x-px gap-1 border-l px-2.5 py-0.5 group-data-[collapsible=icon]:hidden;\n\t}\n\n\t.cn-sidebar-menu-sub-button {\n\t\t@apply text-sidebar-foreground ring-sidebar-ring hover:bg-sidebar-accent hover:text-sidebar-accent-foreground active:bg-sidebar-accent active:text-sidebar-accent-foreground [&>svg]:text-sidebar-accent-foreground data-active:bg-sidebar-accent data-active:text-sidebar-accent-foreground h-7 gap-2 rounded-md px-2 focus-visible:ring-2 data-[size=md]:text-sm data-[size=sm]:text-xs [&>svg]:size-4;\n\t}\n\n\t/* MARK: Skeleton */\n\t.cn-skeleton {\n\t\t@apply bg-muted rounded-md;\n\t}\n\n\t/* MARK: Slider */\n\t.cn-slider {\n\t\t@apply data-vertical:min-h-40;\n\t}\n\n\t.cn-slider-track {\n\t\t@apply bg-muted rounded-full data-horizontal:h-1.5 data-horizontal:w-full data-vertical:h-full data-vertical:w-1.5;\n\t}\n\n\t.cn-slider-range {\n\t\t@apply bg-primary;\n\t}\n\n\t.cn-slider-thumb {\n\t\t@apply border-primary ring-ring/50 size-4 rounded-full border bg-white shadow-sm transition-[color,box-shadow] hover:ring-4 focus-visible:ring-4 focus-visible:outline-hidden;\n\t}\n\n\t/* MARK: Sonner */\n\t.cn-toast {\n\t\t@apply rounded-2xl;\n\t}\n\n\t/* MARK: Switch */\n\t.cn-switch {\n\t\t@apply data-checked:bg-primary data-unchecked:bg-input focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 dark:data-unchecked:bg-input/80 shrink-0 rounded-full border border-transparent shadow-xs focus-visible:ring-3 aria-invalid:ring-3 data-[size=default]:h-[18.4px] data-[size=default]:w-[32px] data-[size=sm]:h-[14px] data-[size=sm]:w-[24px];\n\t}\n\n\t.cn-switch-thumb {\n\t\t@apply bg-background dark:data-unchecked:bg-foreground dark:data-checked:bg-primary-foreground rounded-full group-data-[size=default]/switch:size-4 group-data-[size=sm]/switch:size-3 group-data-[size=default]/switch:data-checked:translate-x-[calc(100%-2px)] group-data-[size=sm]/switch:data-checked:translate-x-[calc(100%-2px)] group-data-[size=default]/switch:data-unchecked:translate-x-0 group-data-[size=sm]/switch:data-unchecked:translate-x-0;\n\t}\n\n\t/* MARK: Table */\n\t.cn-table-container {\n\t\t@apply relative w-full overflow-x-auto;\n\t}\n\n\t.cn-table {\n\t\t@apply w-full caption-bottom text-sm;\n\t}\n\n\t.cn-table-header {\n\t\t@apply [&_tr]:border-b;\n\t}\n\n\t.cn-table-body {\n\t\t@apply [&_tr:last-child]:border-0;\n\t}\n\n\t.cn-table-footer {\n\t\t@apply bg-muted/50 border-t font-medium [&>tr]:last:border-b-0;\n\t}\n\n\t.cn-table-row {\n\t\t@apply hover:bg-muted/50 data-[state=selected]:bg-muted border-b transition-colors;\n\t}\n\n\t.cn-table-head {\n\t\t@apply text-foreground h-10 px-2 text-left align-middle font-medium whitespace-nowrap [&:has([role=checkbox])]:pr-0;\n\t}\n\n\t.cn-table-cell {\n\t\t@apply p-2 align-middle whitespace-nowrap [&:has([role=checkbox])]:pr-0;\n\t}\n\n\t.cn-table-caption {\n\t\t@apply text-muted-foreground mt-4 text-sm;\n\t}\n\n\t/* MARK: Tabs */\n\t.cn-tabs {\n\t\t@apply gap-2;\n\t}\n\n\t.cn-tabs-list {\n\t\t@apply rounded-lg p-[3px] group-data-horizontal/tabs:h-9 data-[variant=line]:rounded-none;\n\t}\n\n\t.cn-tabs-trigger {\n\t\t@apply gap-1.5 rounded-md border border-transparent px-2 py-1 text-sm font-medium group-data-[variant=default]/tabs-list:data-active:shadow-sm group-data-[variant=line]/tabs-list:data-active:shadow-none [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-tabs-content {\n\t\t@apply text-sm;\n\t}\n\n\t/* MARK: Textarea */\n\t.cn-textarea {\n\t\t@apply border-input dark:bg-input/30 focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 rounded-md border bg-transparent px-2.5 py-2 text-base shadow-xs transition-[color,box-shadow] focus-visible:ring-3 aria-invalid:ring-3 md:text-sm;\n\t}\n\n\t/* MARK: Toggle */\n\t.cn-toggle {\n\t\t@apply hover:text-foreground aria-pressed:bg-muted focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive gap-1 rounded-md text-sm font-medium transition-[color,box-shadow] [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-toggle-variant-default {\n\t\t@apply bg-transparent;\n\t}\n\n\t.cn-toggle-variant-outline {\n\t\t@apply border-input hover:bg-muted border bg-transparent shadow-xs;\n\t}\n\n\t.cn-toggle-size-default {\n\t\t@apply h-9 min-w-9 px-2;\n\t}\n\n\t.cn-toggle-size-sm {\n\t\t@apply h-8 min-w-8 px-1.5;\n\t}\n\n\t.cn-toggle-size-lg {\n\t\t@apply h-10 min-w-10 px-2.5;\n\t}\n\n\t/* MARK: Toggle Group */\n\t.cn-toggle-group {\n\t\t@apply rounded-md data-[spacing=0]:data-[variant=outline]:shadow-xs;\n\t}\n\n\t.cn-toggle-group-item {\n\t\t@apply data-[state=on]:bg-muted group-data-[spacing=0]/toggle-group:rounded-none group-data-[spacing=0]/toggle-group:px-2 group-data-[spacing=0]/toggle-group:shadow-none group-data-horizontal/toggle-group:data-[spacing=0]:first:rounded-l-md group-data-vertical/toggle-group:data-[spacing=0]:first:rounded-t-md group-data-horizontal/toggle-group:data-[spacing=0]:last:rounded-r-md group-data-vertical/toggle-group:data-[spacing=0]:last:rounded-b-md;\n\t}\n\n\t/* MARK: Tooltip */\n\t.cn-tooltip-content {\n\t\t@apply data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 inline-flex items-center gap-1.5 rounded-md px-3 py-1.5 text-xs has-data-[slot=kbd]:pr-1.5 **:data-[slot=kbd]:relative **:data-[slot=kbd]:isolate **:data-[slot=kbd]:z-50 **:data-[slot=kbd]:rounded-sm;\n\t}\n\n\t.cn-tooltip-content-logical {\n\t\t@apply data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2;\n\t}\n\n\t.cn-tooltip-arrow {\n\t\t@apply size-2.5 translate-y-[calc(-50%-2px)] rotate-45 rounded-[2px];\n\t}\n\n\t.cn-tooltip-arrow-logical {\n\t\t@apply data-[side=inline-end]:top-1/2! data-[side=inline-end]:-left-1 data-[side=inline-end]:-translate-y-1/2 data-[side=inline-start]:top-1/2! data-[side=inline-start]:-right-1 data-[side=inline-start]:-translate-y-1/2;\n\t}\n\n\t/* MARK: Input Group */\n\t.cn-input-group {\n\t\t@apply border-input dark:bg-input/30 has-[[data-slot=input-group-control]:focus-visible]:border-ring has-[[data-slot=input-group-control]:focus-visible]:ring-ring/50 has-[[data-slot][aria-invalid=true]]:ring-destructive/20 has-[[data-slot][aria-invalid=true]]:border-destructive dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40 h-9 rounded-md border shadow-xs transition-[color,box-shadow] in-data-[slot=combobox-content]:focus-within:border-inherit in-data-[slot=combobox-content]:focus-within:ring-0 has-[[data-slot=input-group-control]:focus-visible]:ring-3 has-[[data-slot][aria-invalid=true]]:ring-3 has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>[data-align=block-end]]:[&>input]:pt-3 has-[>[data-align=block-start]]:[&>input]:pb-3 has-[>[data-align=inline-end]]:[&>input]:pr-1.5 has-[>[data-align=inline-start]]:[&>input]:pl-1.5;\n\t}\n\n\t.cn-input-group-addon {\n\t\t@apply text-muted-foreground h-auto gap-2 py-1.5 text-sm font-medium group-data-[disabled=true]/input-group:opacity-50 [&>kbd]:rounded-[calc(var(--radius)-5px)] [&>svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-input-group-addon-align-inline-start {\n\t\t@apply pl-2 has-[>button]:-ml-1 has-[>kbd]:ml-[-0.15rem];\n\t}\n\n\t.cn-input-group-addon-align-inline-end {\n\t\t@apply pr-2 has-[>button]:-mr-1 has-[>kbd]:mr-[-0.15rem];\n\t}\n\n\t.cn-input-group-addon-align-block-start {\n\t\t@apply px-2.5 pt-2 group-has-[>input]/input-group:pt-2 [.border-b]:pb-2;\n\t}\n\n\t.cn-input-group-addon-align-block-end {\n\t\t@apply px-2.5 pb-2 group-has-[>input]/input-group:pb-2 [.border-t]:pt-2;\n\t}\n\n\t.cn-input-group-button {\n\t\t@apply gap-2 text-sm;\n\t}\n\n\t.cn-input-group-button-size-xs {\n\t\t@apply h-6 gap-1 rounded-[calc(var(--radius)-5px)] px-1.5 [&>svg:not([class*='size-'])]:size-3.5;\n\t}\n\n\t.cn-input-group-button-size-icon-xs {\n\t\t@apply size-6 rounded-[calc(var(--radius)-5px)] p-0 has-[>svg]:p-0;\n\t}\n\n\t.cn-input-group-button-size-icon-sm {\n\t\t@apply size-8 p-0 has-[>svg]:p-0;\n\t}\n\n\t.cn-input-group-text {\n\t\t@apply text-muted-foreground gap-2 text-sm [&_svg:not([class*='size-'])]:size-4;\n\t}\n\n\t.cn-input-group-input {\n\t\t@apply rounded-none border-0 bg-transparent shadow-none ring-0 focus-visible:ring-0 aria-invalid:ring-0 dark:bg-transparent;\n\t}\n\n\t.cn-input-group-textarea {\n\t\t@apply rounded-none border-0 bg-transparent py-2 shadow-none ring-0 focus-visible:ring-0 aria-invalid:ring-0 dark:bg-transparent;\n\t}\n\n\t/* MARK: Menu Translucent */\n\t.cn-menu-translucent {\n\t\t@apply bg-popover/70 **:data-[slot$=-item]:focus:bg-foreground/10 **:data-[slot$=-item]:data-highlighted:bg-foreground/10 **:data-[slot$=-separator]:bg-foreground/5 **:data-[slot$=-trigger]:focus:bg-foreground/10 **:data-[slot$=-trigger]:aria-expanded:bg-foreground/10! **:data-[variant=destructive]:focus:bg-foreground/10! **:data-[variant=destructive]:text-accent-foreground! **:data-[variant=destructive]:**:text-accent-foreground! relative animate-none! before:pointer-events-none before:absolute before:inset-0 before:-z-1 before:rounded-[inherit] before:backdrop-blur-2xl before:backdrop-saturate-150;\n\t}\n}\n"
  },
  {
    "path": "docs/src/lib/registry/templates.ts",
    "content": "export const BASE_STYLES = `@import \"tailwindcss\";\n\n@import \"tw-animate-css\";\n\n@custom-variant dark (&:is(.dark *));\n`;\n\nexport const BASE_STYLES_WITH_VARIABLES = `@import \"tailwindcss\";\n\n@import \"tw-animate-css\";\n\n@custom-variant dark (&:is(.dark *));\n\n:root {\n  --radius: 0.625rem;\n  --background: <%- colors.light[\"background\"] %>;\n  --foreground: <%- colors.light[\"foreground\"] %>;\n  --card: <%- colors.light[\"card\"] %>;\n  --card-foreground: <%- colors.light[\"card-foreground\"] %>;\n  --popover: <%- colors.light[\"popover\"] %>;\n  --popover-foreground: <%- colors.light[\"popover-foreground\"] %>;\n  --primary: <%- colors.light[\"primary\"] %>;\n  --primary-foreground: <%- colors.light[\"primary-foreground\"] %>;\n  --secondary: <%- colors.light[\"secondary\"] %>;\n  --secondary-foreground: <%- colors.light[\"secondary-foreground\"] %>;\n  --muted: <%- colors.light[\"muted\"] %>;\n  --muted-foreground: <%- colors.light[\"muted-foreground\"] %>;\n  --accent: <%- colors.light[\"accent\"] %>;\n  --accent-foreground: <%- colors.light[\"accent-foreground\"] %>;\n  --destructive: <%- colors.light[\"destructive\"] %>;\n  --border: <%- colors.light[\"border\"] %>;\n  --input: <%- colors.light[\"input\"] %>;\n  --ring: <%- colors.light[\"ring\"] %>;\n  --chart-1: <%- colors.light[\"chart-1\"] %>;\n  --chart-2: <%- colors.light[\"chart-2\"] %>;\n  --chart-3: <%- colors.light[\"chart-3\"] %>;\n  --chart-4: <%- colors.light[\"chart-4\"] %>;\n  --chart-5: <%- colors.light[\"chart-5\"] %>;\n  --sidebar: <%- colors.light[\"sidebar\"] %>;\n  --sidebar-foreground: <%- colors.light[\"sidebar-foreground\"] %>;\n  --sidebar-primary: <%- colors.light[\"sidebar-primary\"] %>;\n  --sidebar-primary-foreground: <%- colors.light[\"sidebar-primary-foreground\"] %>;\n  --sidebar-accent: <%- colors.light[\"sidebar-accent\"] %>;\n  --sidebar-accent-foreground: <%- colors.light[\"sidebar-accent-foreground\"] %>;\n  --sidebar-border: <%- colors.light[\"sidebar-border\"] %>;\n  --sidebar-ring: <%- colors.light[\"sidebar-ring\"] %>;\n}\n\n.dark {\n  --background: <%- colors.dark[\"background\"] %>;\n  --foreground: <%- colors.dark[\"foreground\"] %>;\n  --card: <%- colors.dark[\"card\"] %>;\n  --card-foreground: <%- colors.dark[\"card-foreground\"] %>;\n  --popover: <%- colors.dark[\"popover\"] %>;\n  --popover-foreground: <%- colors.dark[\"popover-foreground\"] %>;\n  --primary: <%- colors.dark[\"primary\"] %>;\n  --primary-foreground: <%- colors.dark[\"primary-foreground\"] %>;\n  --secondary: <%- colors.dark[\"secondary\"] %>;\n  --secondary-foreground: <%- colors.dark[\"secondary-foreground\"] %>;\n  --muted: <%- colors.dark[\"muted\"] %>;\n  --muted-foreground: <%- colors.dark[\"muted-foreground\"] %>;\n  --accent: <%- colors.dark[\"accent\"] %>;\n  --accent-foreground: <%- colors.dark[\"accent-foreground\"] %>;\n  --destructive: <%- colors.dark[\"destructive\"] %>;\n  --border: <%- colors.dark[\"border\"] %>;\n  --input: <%- colors.dark[\"input\"] %>;\n  --ring: <%- colors.dark[\"ring\"] %>;\n  --chart-1: <%- colors.dark[\"chart-1\"] %>;\n  --chart-2: <%- colors.dark[\"chart-2\"] %>;\n  --chart-3: <%- colors.dark[\"chart-3\"] %>;\n  --chart-4: <%- colors.dark[\"chart-4\"] %>;\n  --chart-5: <%- colors.dark[\"chart-5\"] %>;\n  --sidebar: <%- colors.dark[\"sidebar\"] %>;\n  --sidebar-foreground: <%- colors.dark[\"sidebar-foreground\"] %>;\n  --sidebar-primary: <%- colors.dark[\"sidebar-primary\"] %>;\n  --sidebar-primary-foreground: <%- colors.dark[\"sidebar-primary-foreground\"] %>;\n  --sidebar-accent: <%- colors.dark[\"sidebar-accent\"] %>;\n  --sidebar-accent-foreground: <%- colors.dark[\"sidebar-accent-foreground\"] %>;\n  --sidebar-border: <%- colors.dark[\"sidebar-border\"] %>;\n  --sidebar-ring: <%- colors.dark[\"sidebar-ring\"] %>;\n}\n\n@theme inline {\n  --radius-sm: calc(var(--radius) - 4px);\n  --radius-md: calc(var(--radius) - 2px);\n  --radius-lg: var(--radius);\n  --radius-xl: calc(var(--radius) + 4px);\n  --color-background: var(--background);\n  --color-foreground: var(--foreground);\n  --color-card: var(--card);\n  --color-card-foreground: var(--card-foreground);\n  --color-popover: var(--popover);\n  --color-popover-foreground: var(--popover-foreground);\n  --color-primary: var(--primary);\n  --color-primary-foreground: var(--primary-foreground);\n  --color-secondary: var(--secondary);\n  --color-secondary-foreground: var(--secondary-foreground);\n  --color-muted: var(--muted);\n  --color-muted-foreground: var(--muted-foreground);\n  --color-accent: var(--accent);\n  --color-accent-foreground: var(--accent-foreground);\n  --color-destructive: var(--destructive);\n  --color-border: var(--border);\n  --color-input: var(--input);\n  --color-ring: var(--ring);\n  --color-chart-1: var(--chart-1);\n  --color-chart-2: var(--chart-2);\n  --color-chart-3: var(--chart-3);\n  --color-chart-4: var(--chart-4);\n  --color-chart-5: var(--chart-5);\n  --color-sidebar: var(--sidebar);\n  --color-sidebar-foreground: var(--sidebar-foreground);\n  --color-sidebar-primary: var(--sidebar-primary);\n  --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);\n  --color-sidebar-accent: var(--sidebar-accent);\n  --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);\n  --color-sidebar-border: var(--sidebar-border);\n  --color-sidebar-ring: var(--sidebar-ring);\n}\n\n@layer base {\n  * {\n    @apply border-border outline-ring/50;\n  }\n  body {\n    @apply bg-background text-foreground;\n  }\n}`;\n\nexport const THEME_STYLES_WITH_VARIABLES = `.theme-<%- theme %> {\n  --radius: 0.5rem;\n  --background: <%- colors.light[\"background\"] %>;\n  --foreground: <%- colors.light[\"foreground\"] %>;\n  --muted: <%- colors.light[\"muted\"] %>;\n  --muted-foreground: <%- colors.light[\"muted-foreground\"] %>;\n  --popover: <%- colors.light[\"popover\"] %>;\n  --popover-foreground: <%- colors.light[\"popover-foreground\"] %>;\n  --card: <%- colors.light[\"card\"] %>;\n  --card-foreground: <%- colors.light[\"card-foreground\"] %>;\n  --border: <%- colors.light[\"border\"] %>;\n  --input: <%- colors.light[\"input\"] %>;\n  --primary: <%- colors.light[\"primary\"] %>;\n  --primary-foreground: <%- colors.light[\"primary-foreground\"] %>;\n  --secondary: <%- colors.light[\"secondary\"] %>;\n  --secondary-foreground: <%- colors.light[\"secondary-foreground\"] %>;\n  --accent: <%- colors.light[\"accent\"] %>;\n  --accent-foreground: <%- colors.light[\"accent-foreground\"] %>;\n  --destructive: <%- colors.light[\"destructive\"] %>;\n  --ring: <%- colors.light[\"ring\"] %>;\n  --chart-1: <%- colors.light[\"chart-1\"] %>;\n  --chart-2: <%- colors.light[\"chart-2\"] %>;\n  --chart-3: <%- colors.light[\"chart-3\"] %>;\n  --chart-4: <%- colors.light[\"chart-4\"] %>;\n  --chart-5: <%- colors.light[\"chart-5\"] %>;\n  --sidebar: <%- colors.light[\"sidebar\"] %>;\n  --sidebar-foreground: <%- colors.light[\"sidebar-foreground\"] %>;\n  --sidebar-primary: <%- colors.light[\"sidebar-primary\"] %>;\n  --sidebar-primary-foreground: <%- colors.light[\"sidebar-primary-foreground\"] %>;\n  --sidebar-accent: <%- colors.light[\"sidebar-accent\"] %>;\n  --sidebar-accent-foreground: <%- colors.light[\"sidebar-accent-foreground\"] %>;\n  --sidebar-border: <%- colors.light[\"sidebar-border\"] %>;\n  --sidebar-ring: <%- colors.light[\"sidebar-ring\"] %>;\n}\n\n.dark .theme-<%- theme %> {\n  --background: <%- colors.dark[\"background\"] %>;\n  --foreground: <%- colors.dark[\"foreground\"] %>;\n  --muted: <%- colors.dark[\"muted\"] %>;\n  --muted-foreground: <%- colors.dark[\"muted-foreground\"] %>;\n  --popover: <%- colors.dark[\"popover\"] %>;\n  --popover-foreground: <%- colors.dark[\"popover-foreground\"] %>;\n  --card: <%- colors.dark[\"card\"] %>;\n  --card-foreground: <%- colors.dark[\"card-foreground\"] %>;\n  --border: <%- colors.dark[\"border\"] %>;\n  --input: <%- colors.dark[\"input\"] %>;\n  --primary: <%- colors.dark[\"primary\"] %>;\n  --primary-foreground: <%- colors.dark[\"primary-foreground\"] %>;\n  --secondary: <%- colors.dark[\"secondary\"] %>;\n  --secondary-foreground: <%- colors.dark[\"secondary-foreground\"] %>;\n  --accent: <%- colors.dark[\"accent\"] %>;\n  --accent-foreground: <%- colors.dark[\"accent-foreground\"] %>;\n  --destructive: <%- colors.dark[\"destructive\"] %>;\n  --ring: <%- colors.dark[\"ring\"] %>;\n  --chart-1: <%- colors.dark[\"chart-1\"] %>;\n  --chart-2: <%- colors.dark[\"chart-2\"] %>;\n  --chart-3: <%- colors.dark[\"chart-3\"] %>;\n  --chart-4: <%- colors.dark[\"chart-4\"] %>;\n  --chart-5: <%- colors.dark[\"chart-5\"] %>;\n  --sidebar: oklch(0.985 0 0);\n  --sidebar-foreground: <%- colors.dark[\"sidebar-foreground\"] %>;\n  --sidebar-primary: <%- colors.dark[\"sidebar-primary\"] %>;\n  --sidebar-primary-foreground: <%- colors.dark[\"sidebar-primary-foreground\"] %>;\n  --sidebar-accent: <%- colors.dark[\"sidebar-accent\"] %>;\n  --sidebar-accent-foreground: <%- colors.dark[\"sidebar-accent-foreground\"] %>;\n  --sidebar-border: <%- colors.dark[\"sidebar-border\"] %>;\n  --sidebar-ring: <%- colors.dark[\"sidebar-ring\"] %>;\n}`;\n"
  },
  {
    "path": "docs/src/lib/registry/themes.ts",
    "content": "import { type RegistryItem } from \"shadcn-svelte/schema\";\n\nexport const BASE_THEMES = [\n\t{\n\t\tname: \"neutral\",\n\t\ttitle: \"Neutral\",\n\t\ttype: \"registry:theme\",\n\t\tcssVars: {\n\t\t\tlight: {\n\t\t\t\tbackground: \"oklch(1 0 0)\",\n\t\t\t\tforeground: \"oklch(0.145 0 0)\",\n\t\t\t\tcard: \"oklch(1 0 0)\",\n\t\t\t\t\"card-foreground\": \"oklch(0.145 0 0)\",\n\t\t\t\tpopover: \"oklch(1 0 0)\",\n\t\t\t\t\"popover-foreground\": \"oklch(0.145 0 0)\",\n\t\t\t\tprimary: \"oklch(0.205 0 0)\",\n\t\t\t\t\"primary-foreground\": \"oklch(0.985 0 0)\",\n\t\t\t\tsecondary: \"oklch(0.97 0 0)\",\n\t\t\t\t\"secondary-foreground\": \"oklch(0.205 0 0)\",\n\t\t\t\tmuted: \"oklch(0.97 0 0)\",\n\t\t\t\t\"muted-foreground\": \"oklch(0.556 0 0)\",\n\t\t\t\taccent: \"oklch(0.97 0 0)\",\n\t\t\t\t\"accent-foreground\": \"oklch(0.205 0 0)\",\n\t\t\t\tdestructive: \"oklch(0.577 0.245 27.325)\",\n\t\t\t\tborder: \"oklch(0.922 0 0)\",\n\t\t\t\tinput: \"oklch(0.922 0 0)\",\n\t\t\t\tring: \"oklch(0.708 0 0)\",\n\t\t\t\t\"chart-1\": \"oklch(0.809 0.105 251.813)\",\n\t\t\t\t\"chart-2\": \"oklch(0.623 0.214 259.815)\",\n\t\t\t\t\"chart-3\": \"oklch(0.546 0.245 262.881)\",\n\t\t\t\t\"chart-4\": \"oklch(0.488 0.243 264.376)\",\n\t\t\t\t\"chart-5\": \"oklch(0.424 0.199 265.638)\",\n\t\t\t\tradius: \"0.625rem\",\n\t\t\t\tsidebar: \"oklch(0.985 0 0)\",\n\t\t\t\t\"sidebar-foreground\": \"oklch(0.145 0 0)\",\n\t\t\t\t\"sidebar-primary\": \"oklch(0.205 0 0)\",\n\t\t\t\t\"sidebar-primary-foreground\": \"oklch(0.985 0 0)\",\n\t\t\t\t\"sidebar-accent\": \"oklch(0.97 0 0)\",\n\t\t\t\t\"sidebar-accent-foreground\": \"oklch(0.205 0 0)\",\n\t\t\t\t\"sidebar-border\": \"oklch(0.922 0 0)\",\n\t\t\t\t\"sidebar-ring\": \"oklch(0.708 0 0)\",\n\t\t\t},\n\t\t\tdark: {\n\t\t\t\tbackground: \"oklch(0.145 0 0)\",\n\t\t\t\tforeground: \"oklch(0.985 0 0)\",\n\t\t\t\tcard: \"oklch(0.205 0 0)\",\n\t\t\t\t\"card-foreground\": \"oklch(0.985 0 0)\",\n\t\t\t\tpopover: \"oklch(0.205 0 0)\",\n\t\t\t\t\"popover-foreground\": \"oklch(0.985 0 0)\",\n\t\t\t\tprimary: \"oklch(0.922 0 0)\",\n\t\t\t\t\"primary-foreground\": \"oklch(0.205 0 0)\",\n\t\t\t\tsecondary: \"oklch(0.269 0 0)\",\n\t\t\t\t\"secondary-foreground\": \"oklch(0.985 0 0)\",\n\t\t\t\tmuted: \"oklch(0.269 0 0)\",\n\t\t\t\t\"muted-foreground\": \"oklch(0.708 0 0)\",\n\t\t\t\taccent: \"oklch(0.269 0 0)\",\n\t\t\t\t\"accent-foreground\": \"oklch(0.985 0 0)\",\n\t\t\t\tdestructive: \"oklch(0.704 0.191 22.216)\",\n\t\t\t\tborder: \"oklch(1 0 0 / 10%)\",\n\t\t\t\tinput: \"oklch(1 0 0 / 15%)\",\n\t\t\t\tring: \"oklch(0.556 0 0)\",\n\t\t\t\t\"chart-1\": \"oklch(0.809 0.105 251.813)\",\n\t\t\t\t\"chart-2\": \"oklch(0.623 0.214 259.815)\",\n\t\t\t\t\"chart-3\": \"oklch(0.546 0.245 262.881)\",\n\t\t\t\t\"chart-4\": \"oklch(0.488 0.243 264.376)\",\n\t\t\t\t\"chart-5\": \"oklch(0.424 0.199 265.638)\",\n\t\t\t\tsidebar: \"oklch(0.205 0 0)\",\n\t\t\t\t\"sidebar-foreground\": \"oklch(0.985 0 0)\",\n\t\t\t\t\"sidebar-primary\": \"oklch(0.488 0.243 264.376)\",\n\t\t\t\t\"sidebar-primary-foreground\": \"oklch(0.985 0 0)\",\n\t\t\t\t\"sidebar-accent\": \"oklch(0.269 0 0)\",\n\t\t\t\t\"sidebar-accent-foreground\": \"oklch(0.985 0 0)\",\n\t\t\t\t\"sidebar-border\": \"oklch(1 0 0 / 10%)\",\n\t\t\t\t\"sidebar-ring\": \"oklch(0.556 0 0)\",\n\t\t\t},\n\t\t},\n\t},\n\t{\n\t\tname: \"stone\",\n\t\ttitle: \"Stone\",\n\t\ttype: \"registry:theme\",\n\t\tcssVars: {\n\t\t\tlight: {\n\t\t\t\tbackground: \"oklch(1 0 0)\",\n\t\t\t\tforeground: \"oklch(0.147 0.004 49.25)\",\n\t\t\t\tcard: \"oklch(1 0 0)\",\n\t\t\t\t\"card-foreground\": \"oklch(0.147 0.004 49.25)\",\n\t\t\t\tpopover: \"oklch(1 0 0)\",\n\t\t\t\t\"popover-foreground\": \"oklch(0.147 0.004 49.25)\",\n\t\t\t\tprimary: \"oklch(0.216 0.006 56.043)\",\n\t\t\t\t\"primary-foreground\": \"oklch(0.985 0.001 106.423)\",\n\t\t\t\tsecondary: \"oklch(0.97 0.001 106.424)\",\n\t\t\t\t\"secondary-foreground\": \"oklch(0.216 0.006 56.043)\",\n\t\t\t\tmuted: \"oklch(0.97 0.001 106.424)\",\n\t\t\t\t\"muted-foreground\": \"oklch(0.553 0.013 58.071)\",\n\t\t\t\taccent: \"oklch(0.97 0.001 106.424)\",\n\t\t\t\t\"accent-foreground\": \"oklch(0.216 0.006 56.043)\",\n\t\t\t\tdestructive: \"oklch(0.577 0.245 27.325)\",\n\t\t\t\tborder: \"oklch(0.923 0.003 48.717)\",\n\t\t\t\tinput: \"oklch(0.923 0.003 48.717)\",\n\t\t\t\tring: \"oklch(0.709 0.01 56.259)\",\n\t\t\t\t\"chart-1\": \"oklch(0.897 0.196 126.665)\",\n\t\t\t\t\"chart-2\": \"oklch(0.768 0.233 130.85)\",\n\t\t\t\t\"chart-3\": \"oklch(0.648 0.2 131.684)\",\n\t\t\t\t\"chart-4\": \"oklch(0.532 0.157 131.589)\",\n\t\t\t\t\"chart-5\": \"oklch(0.453 0.124 130.933)\",\n\t\t\t\tradius: \"0.625rem\",\n\t\t\t\tsidebar: \"oklch(0.985 0.001 106.423)\",\n\t\t\t\t\"sidebar-foreground\": \"oklch(0.147 0.004 49.25)\",\n\t\t\t\t\"sidebar-primary\": \"oklch(0.216 0.006 56.043)\",\n\t\t\t\t\"sidebar-primary-foreground\": \"oklch(0.985 0.001 106.423)\",\n\t\t\t\t\"sidebar-accent\": \"oklch(0.97 0.001 106.424)\",\n\t\t\t\t\"sidebar-accent-foreground\": \"oklch(0.216 0.006 56.043)\",\n\t\t\t\t\"sidebar-border\": \"oklch(0.923 0.003 48.717)\",\n\t\t\t\t\"sidebar-ring\": \"oklch(0.709 0.01 56.259)\",\n\t\t\t},\n\t\t\tdark: {\n\t\t\t\tbackground: \"oklch(0.147 0.004 49.25)\",\n\t\t\t\tforeground: \"oklch(0.985 0.001 106.423)\",\n\t\t\t\tcard: \"oklch(0.216 0.006 56.043)\",\n\t\t\t\t\"card-foreground\": \"oklch(0.985 0.001 106.423)\",\n\t\t\t\tpopover: \"oklch(0.216 0.006 56.043)\",\n\t\t\t\t\"popover-foreground\": \"oklch(0.985 0.001 106.423)\",\n\t\t\t\tprimary: \"oklch(0.923 0.003 48.717)\",\n\t\t\t\t\"primary-foreground\": \"oklch(0.216 0.006 56.043)\",\n\t\t\t\tsecondary: \"oklch(0.268 0.007 34.298)\",\n\t\t\t\t\"secondary-foreground\": \"oklch(0.985 0.001 106.423)\",\n\t\t\t\tmuted: \"oklch(0.268 0.007 34.298)\",\n\t\t\t\t\"muted-foreground\": \"oklch(0.709 0.01 56.259)\",\n\t\t\t\taccent: \"oklch(0.268 0.007 34.298)\",\n\t\t\t\t\"accent-foreground\": \"oklch(0.985 0.001 106.423)\",\n\t\t\t\tdestructive: \"oklch(0.704 0.191 22.216)\",\n\t\t\t\tborder: \"oklch(1 0 0 / 10%)\",\n\t\t\t\tinput: \"oklch(1 0 0 / 15%)\",\n\t\t\t\tring: \"oklch(0.553 0.013 58.071)\",\n\t\t\t\t\"chart-1\": \"oklch(0.897 0.196 126.665)\",\n\t\t\t\t\"chart-2\": \"oklch(0.768 0.233 130.85)\",\n\t\t\t\t\"chart-3\": \"oklch(0.648 0.2 131.684)\",\n\t\t\t\t\"chart-4\": \"oklch(0.532 0.157 131.589)\",\n\t\t\t\t\"chart-5\": \"oklch(0.453 0.124 130.933)\",\n\t\t\t\tsidebar: \"oklch(0.216 0.006 56.043)\",\n\t\t\t\t\"sidebar-foreground\": \"oklch(0.985 0.001 106.423)\",\n\t\t\t\t\"sidebar-primary\": \"oklch(0.488 0.243 264.376)\",\n\t\t\t\t\"sidebar-primary-foreground\": \"oklch(0.985 0.001 106.423)\",\n\t\t\t\t\"sidebar-accent\": \"oklch(0.268 0.007 34.298)\",\n\t\t\t\t\"sidebar-accent-foreground\": \"oklch(0.985 0.001 106.423)\",\n\t\t\t\t\"sidebar-border\": \"oklch(1 0 0 / 10%)\",\n\t\t\t\t\"sidebar-ring\": \"oklch(0.553 0.013 58.071)\",\n\t\t\t},\n\t\t},\n\t},\n\t{\n\t\tname: \"zinc\",\n\t\ttitle: \"Zinc\",\n\t\ttype: \"registry:theme\",\n\t\tcssVars: {\n\t\t\tlight: {\n\t\t\t\tbackground: \"oklch(1 0 0)\",\n\t\t\t\tforeground: \"oklch(0.141 0.005 285.823)\",\n\t\t\t\tcard: \"oklch(1 0 0)\",\n\t\t\t\t\"card-foreground\": \"oklch(0.141 0.005 285.823)\",\n\t\t\t\tpopover: \"oklch(1 0 0)\",\n\t\t\t\t\"popover-foreground\": \"oklch(0.141 0.005 285.823)\",\n\t\t\t\tprimary: \"oklch(0.21 0.006 285.885)\",\n\t\t\t\t\"primary-foreground\": \"oklch(0.985 0 0)\",\n\t\t\t\tsecondary: \"oklch(0.967 0.001 286.375)\",\n\t\t\t\t\"secondary-foreground\": \"oklch(0.21 0.006 285.885)\",\n\t\t\t\tmuted: \"oklch(0.967 0.001 286.375)\",\n\t\t\t\t\"muted-foreground\": \"oklch(0.552 0.016 285.938)\",\n\t\t\t\taccent: \"oklch(0.967 0.001 286.375)\",\n\t\t\t\t\"accent-foreground\": \"oklch(0.21 0.006 285.885)\",\n\t\t\t\tdestructive: \"oklch(0.577 0.245 27.325)\",\n\t\t\t\tborder: \"oklch(0.92 0.004 286.32)\",\n\t\t\t\tinput: \"oklch(0.92 0.004 286.32)\",\n\t\t\t\tring: \"oklch(0.705 0.015 286.067)\",\n\t\t\t\t\"chart-1\": \"oklch(0.879 0.169 91.605)\",\n\t\t\t\t\"chart-2\": \"oklch(0.769 0.188 70.08)\",\n\t\t\t\t\"chart-3\": \"oklch(0.666 0.179 58.318)\",\n\t\t\t\t\"chart-4\": \"oklch(0.555 0.163 48.998)\",\n\t\t\t\t\"chart-5\": \"oklch(0.473 0.137 46.201)\",\n\t\t\t\tradius: \"0.625rem\",\n\t\t\t\tsidebar: \"oklch(0.985 0 0)\",\n\t\t\t\t\"sidebar-foreground\": \"oklch(0.141 0.005 285.823)\",\n\t\t\t\t\"sidebar-primary\": \"oklch(0.21 0.006 285.885)\",\n\t\t\t\t\"sidebar-primary-foreground\": \"oklch(0.985 0 0)\",\n\t\t\t\t\"sidebar-accent\": \"oklch(0.967 0.001 286.375)\",\n\t\t\t\t\"sidebar-accent-foreground\": \"oklch(0.21 0.006 285.885)\",\n\t\t\t\t\"sidebar-border\": \"oklch(0.92 0.004 286.32)\",\n\t\t\t\t\"sidebar-ring\": \"oklch(0.705 0.015 286.067)\",\n\t\t\t},\n\t\t\tdark: {\n\t\t\t\tbackground: \"oklch(0.141 0.005 285.823)\",\n\t\t\t\tforeground: \"oklch(0.985 0 0)\",\n\t\t\t\tcard: \"oklch(0.21 0.006 285.885)\",\n\t\t\t\t\"card-foreground\": \"oklch(0.985 0 0)\",\n\t\t\t\tpopover: \"oklch(0.21 0.006 285.885)\",\n\t\t\t\t\"popover-foreground\": \"oklch(0.985 0 0)\",\n\t\t\t\tprimary: \"oklch(0.92 0.004 286.32)\",\n\t\t\t\t\"primary-foreground\": \"oklch(0.21 0.006 285.885)\",\n\t\t\t\tsecondary: \"oklch(0.274 0.006 286.033)\",\n\t\t\t\t\"secondary-foreground\": \"oklch(0.985 0 0)\",\n\t\t\t\tmuted: \"oklch(0.274 0.006 286.033)\",\n\t\t\t\t\"muted-foreground\": \"oklch(0.705 0.015 286.067)\",\n\t\t\t\taccent: \"oklch(0.274 0.006 286.033)\",\n\t\t\t\t\"accent-foreground\": \"oklch(0.985 0 0)\",\n\t\t\t\tdestructive: \"oklch(0.704 0.191 22.216)\",\n\t\t\t\tborder: \"oklch(1 0 0 / 10%)\",\n\t\t\t\tinput: \"oklch(1 0 0 / 15%)\",\n\t\t\t\tring: \"oklch(0.552 0.016 285.938)\",\n\t\t\t\t\"chart-1\": \"oklch(0.879 0.169 91.605)\",\n\t\t\t\t\"chart-2\": \"oklch(0.769 0.188 70.08)\",\n\t\t\t\t\"chart-3\": \"oklch(0.666 0.179 58.318)\",\n\t\t\t\t\"chart-4\": \"oklch(0.555 0.163 48.998)\",\n\t\t\t\t\"chart-5\": \"oklch(0.473 0.137 46.201)\",\n\t\t\t\tsidebar: \"oklch(0.21 0.006 285.885)\",\n\t\t\t\t\"sidebar-foreground\": \"oklch(0.985 0 0)\",\n\t\t\t\t\"sidebar-primary\": \"oklch(0.488 0.243 264.376)\",\n\t\t\t\t\"sidebar-primary-foreground\": \"oklch(0.985 0 0)\",\n\t\t\t\t\"sidebar-accent\": \"oklch(0.274 0.006 286.033)\",\n\t\t\t\t\"sidebar-accent-foreground\": \"oklch(0.985 0 0)\",\n\t\t\t\t\"sidebar-border\": \"oklch(1 0 0 / 10%)\",\n\t\t\t\t\"sidebar-ring\": \"oklch(0.552 0.016 285.938)\",\n\t\t\t},\n\t\t},\n\t},\n\t{\n\t\tname: \"mauve\",\n\t\ttitle: \"Mauve\",\n\t\ttype: \"registry:theme\",\n\t\tcssVars: {\n\t\t\tlight: {\n\t\t\t\tbackground: \"oklch(1 0 0)\",\n\t\t\t\tforeground: \"oklch(0.145 0.008 326)\",\n\t\t\t\tcard: \"oklch(1 0 0)\",\n\t\t\t\t\"card-foreground\": \"oklch(0.145 0.008 326)\",\n\t\t\t\tpopover: \"oklch(1 0 0)\",\n\t\t\t\t\"popover-foreground\": \"oklch(0.145 0.008 326)\",\n\t\t\t\tprimary: \"oklch(0.212 0.019 322.12)\",\n\t\t\t\t\"primary-foreground\": \"oklch(0.985 0 0)\",\n\t\t\t\tsecondary: \"oklch(0.96 0.003 325.6)\",\n\t\t\t\t\"secondary-foreground\": \"oklch(0.212 0.019 322.12)\",\n\t\t\t\tmuted: \"oklch(0.96 0.003 325.6)\",\n\t\t\t\t\"muted-foreground\": \"oklch(0.542 0.034 322.5)\",\n\t\t\t\taccent: \"oklch(0.96 0.003 325.6)\",\n\t\t\t\t\"accent-foreground\": \"oklch(0.212 0.019 322.12)\",\n\t\t\t\tdestructive: \"oklch(0.577 0.245 27.325)\",\n\t\t\t\tborder: \"oklch(0.922 0.005 325.62)\",\n\t\t\t\tinput: \"oklch(0.922 0.005 325.62)\",\n\t\t\t\tring: \"oklch(0.711 0.019 323.02)\",\n\t\t\t\t\"chart-1\": \"oklch(0.845 0.143 164.978)\",\n\t\t\t\t\"chart-2\": \"oklch(0.696 0.17 162.48)\",\n\t\t\t\t\"chart-3\": \"oklch(0.596 0.145 163.225)\",\n\t\t\t\t\"chart-4\": \"oklch(0.508 0.118 165.612)\",\n\t\t\t\t\"chart-5\": \"oklch(0.432 0.095 166.913)\",\n\t\t\t\tradius: \"0.625rem\",\n\t\t\t\tsidebar: \"oklch(0.985 0 0)\",\n\t\t\t\t\"sidebar-foreground\": \"oklch(0.145 0.008 326)\",\n\t\t\t\t\"sidebar-primary\": \"oklch(0.212 0.019 322.12)\",\n\t\t\t\t\"sidebar-primary-foreground\": \"oklch(0.985 0 0)\",\n\t\t\t\t\"sidebar-accent\": \"oklch(0.96 0.003 325.6)\",\n\t\t\t\t\"sidebar-accent-foreground\": \"oklch(0.212 0.019 322.12)\",\n\t\t\t\t\"sidebar-border\": \"oklch(0.922 0.005 325.62)\",\n\t\t\t\t\"sidebar-ring\": \"oklch(0.711 0.019 323.02)\",\n\t\t\t},\n\t\t\tdark: {\n\t\t\t\tbackground: \"oklch(0.145 0.008 326)\",\n\t\t\t\tforeground: \"oklch(0.985 0 0)\",\n\t\t\t\tcard: \"oklch(0.212 0.019 322.12)\",\n\t\t\t\t\"card-foreground\": \"oklch(0.985 0 0)\",\n\t\t\t\tpopover: \"oklch(0.212 0.019 322.12)\",\n\t\t\t\t\"popover-foreground\": \"oklch(0.985 0 0)\",\n\t\t\t\tprimary: \"oklch(0.922 0.005 325.62)\",\n\t\t\t\t\"primary-foreground\": \"oklch(0.212 0.019 322.12)\",\n\t\t\t\tsecondary: \"oklch(0.263 0.024 320.12)\",\n\t\t\t\t\"secondary-foreground\": \"oklch(0.985 0 0)\",\n\t\t\t\tmuted: \"oklch(0.263 0.024 320.12)\",\n\t\t\t\t\"muted-foreground\": \"oklch(0.711 0.019 323.02)\",\n\t\t\t\taccent: \"oklch(0.263 0.024 320.12)\",\n\t\t\t\t\"accent-foreground\": \"oklch(0.985 0 0)\",\n\t\t\t\tdestructive: \"oklch(0.704 0.191 22.216)\",\n\t\t\t\tborder: \"oklch(1 0 0 / 10%)\",\n\t\t\t\tinput: \"oklch(1 0 0 / 15%)\",\n\t\t\t\tring: \"oklch(0.542 0.034 322.5)\",\n\t\t\t\t\"chart-1\": \"oklch(0.845 0.143 164.978)\",\n\t\t\t\t\"chart-2\": \"oklch(0.696 0.17 162.48)\",\n\t\t\t\t\"chart-3\": \"oklch(0.596 0.145 163.225)\",\n\t\t\t\t\"chart-4\": \"oklch(0.508 0.118 165.612)\",\n\t\t\t\t\"chart-5\": \"oklch(0.432 0.095 166.913)\",\n\t\t\t\tsidebar: \"oklch(0.212 0.019 322.12)\",\n\t\t\t\t\"sidebar-foreground\": \"oklch(0.985 0 0)\",\n\t\t\t\t\"sidebar-primary\": \"oklch(0.488 0.243 264.376)\",\n\t\t\t\t\"sidebar-primary-foreground\": \"oklch(0.985 0 0)\",\n\t\t\t\t\"sidebar-accent\": \"oklch(0.263 0.024 320.12)\",\n\t\t\t\t\"sidebar-accent-foreground\": \"oklch(0.985 0 0)\",\n\t\t\t\t\"sidebar-border\": \"oklch(1 0 0 / 10%)\",\n\t\t\t\t\"sidebar-ring\": \"oklch(0.542 0.034 322.5)\",\n\t\t\t},\n\t\t},\n\t},\n\t{\n\t\tname: \"olive\",\n\t\ttitle: \"Olive\",\n\t\ttype: \"registry:theme\",\n\t\tcssVars: {\n\t\t\tlight: {\n\t\t\t\tbackground: \"oklch(1 0 0)\",\n\t\t\t\tforeground: \"oklch(0.153 0.006 107.1)\",\n\t\t\t\tcard: \"oklch(1 0 0)\",\n\t\t\t\t\"card-foreground\": \"oklch(0.153 0.006 107.1)\",\n\t\t\t\tpopover: \"oklch(1 0 0)\",\n\t\t\t\t\"popover-foreground\": \"oklch(0.153 0.006 107.1)\",\n\t\t\t\tprimary: \"oklch(0.228 0.013 107.4)\",\n\t\t\t\t\"primary-foreground\": \"oklch(0.988 0.003 106.5)\",\n\t\t\t\tsecondary: \"oklch(0.966 0.005 106.5)\",\n\t\t\t\t\"secondary-foreground\": \"oklch(0.228 0.013 107.4)\",\n\t\t\t\tmuted: \"oklch(0.966 0.005 106.5)\",\n\t\t\t\t\"muted-foreground\": \"oklch(0.58 0.031 107.3)\",\n\t\t\t\taccent: \"oklch(0.966 0.005 106.5)\",\n\t\t\t\t\"accent-foreground\": \"oklch(0.228 0.013 107.4)\",\n\t\t\t\tdestructive: \"oklch(0.577 0.245 27.325)\",\n\t\t\t\tborder: \"oklch(0.93 0.007 106.5)\",\n\t\t\t\tinput: \"oklch(0.93 0.007 106.5)\",\n\t\t\t\tring: \"oklch(0.737 0.021 106.9)\",\n\t\t\t\t\"chart-1\": \"oklch(0.811 0.111 293.571)\",\n\t\t\t\t\"chart-2\": \"oklch(0.606 0.25 292.717)\",\n\t\t\t\t\"chart-3\": \"oklch(0.541 0.281 293.009)\",\n\t\t\t\t\"chart-4\": \"oklch(0.491 0.27 292.581)\",\n\t\t\t\t\"chart-5\": \"oklch(0.432 0.232 292.759)\",\n\t\t\t\tradius: \"0.625rem\",\n\t\t\t\tsidebar: \"oklch(0.988 0.003 106.5)\",\n\t\t\t\t\"sidebar-foreground\": \"oklch(0.153 0.006 107.1)\",\n\t\t\t\t\"sidebar-primary\": \"oklch(0.228 0.013 107.4)\",\n\t\t\t\t\"sidebar-primary-foreground\": \"oklch(0.988 0.003 106.5)\",\n\t\t\t\t\"sidebar-accent\": \"oklch(0.966 0.005 106.5)\",\n\t\t\t\t\"sidebar-accent-foreground\": \"oklch(0.228 0.013 107.4)\",\n\t\t\t\t\"sidebar-border\": \"oklch(0.93 0.007 106.5)\",\n\t\t\t\t\"sidebar-ring\": \"oklch(0.737 0.021 106.9)\",\n\t\t\t},\n\t\t\tdark: {\n\t\t\t\tbackground: \"oklch(0.153 0.006 107.1)\",\n\t\t\t\tforeground: \"oklch(0.988 0.003 106.5)\",\n\t\t\t\tcard: \"oklch(0.228 0.013 107.4)\",\n\t\t\t\t\"card-foreground\": \"oklch(0.988 0.003 106.5)\",\n\t\t\t\tpopover: \"oklch(0.228 0.013 107.4)\",\n\t\t\t\t\"popover-foreground\": \"oklch(0.988 0.003 106.5)\",\n\t\t\t\tprimary: \"oklch(0.93 0.007 106.5)\",\n\t\t\t\t\"primary-foreground\": \"oklch(0.228 0.013 107.4)\",\n\t\t\t\tsecondary: \"oklch(0.286 0.016 107.4)\",\n\t\t\t\t\"secondary-foreground\": \"oklch(0.988 0.003 106.5)\",\n\t\t\t\tmuted: \"oklch(0.286 0.016 107.4)\",\n\t\t\t\t\"muted-foreground\": \"oklch(0.737 0.021 106.9)\",\n\t\t\t\taccent: \"oklch(0.286 0.016 107.4)\",\n\t\t\t\t\"accent-foreground\": \"oklch(0.988 0.003 106.5)\",\n\t\t\t\tdestructive: \"oklch(0.704 0.191 22.216)\",\n\t\t\t\tborder: \"oklch(1 0 0 / 10%)\",\n\t\t\t\tinput: \"oklch(1 0 0 / 15%)\",\n\t\t\t\tring: \"oklch(0.58 0.031 107.3)\",\n\t\t\t\t\"chart-1\": \"oklch(0.811 0.111 293.571)\",\n\t\t\t\t\"chart-2\": \"oklch(0.606 0.25 292.717)\",\n\t\t\t\t\"chart-3\": \"oklch(0.541 0.281 293.009)\",\n\t\t\t\t\"chart-4\": \"oklch(0.491 0.27 292.581)\",\n\t\t\t\t\"chart-5\": \"oklch(0.432 0.232 292.759)\",\n\t\t\t\tsidebar: \"oklch(0.228 0.013 107.4)\",\n\t\t\t\t\"sidebar-foreground\": \"oklch(0.988 0.003 106.5)\",\n\t\t\t\t\"sidebar-primary\": \"oklch(0.488 0.243 264.376)\",\n\t\t\t\t\"sidebar-primary-foreground\": \"oklch(0.988 0.003 106.5)\",\n\t\t\t\t\"sidebar-accent\": \"oklch(0.286 0.016 107.4)\",\n\t\t\t\t\"sidebar-accent-foreground\": \"oklch(0.988 0.003 106.5)\",\n\t\t\t\t\"sidebar-border\": \"oklch(1 0 0 / 10%)\",\n\t\t\t\t\"sidebar-ring\": \"oklch(0.58 0.031 107.3)\",\n\t\t\t},\n\t\t},\n\t},\n\t{\n\t\tname: \"mist\",\n\t\ttitle: \"Mist\",\n\t\ttype: \"registry:theme\",\n\t\tcssVars: {\n\t\t\tlight: {\n\t\t\t\tbackground: \"oklch(1 0 0)\",\n\t\t\t\tforeground: \"oklch(0.148 0.004 228.8)\",\n\t\t\t\tcard: \"oklch(1 0 0)\",\n\t\t\t\t\"card-foreground\": \"oklch(0.148 0.004 228.8)\",\n\t\t\t\tpopover: \"oklch(1 0 0)\",\n\t\t\t\t\"popover-foreground\": \"oklch(0.148 0.004 228.8)\",\n\t\t\t\tprimary: \"oklch(0.218 0.008 223.9)\",\n\t\t\t\t\"primary-foreground\": \"oklch(0.987 0.002 197.1)\",\n\t\t\t\tsecondary: \"oklch(0.963 0.002 197.1)\",\n\t\t\t\t\"secondary-foreground\": \"oklch(0.218 0.008 223.9)\",\n\t\t\t\tmuted: \"oklch(0.963 0.002 197.1)\",\n\t\t\t\t\"muted-foreground\": \"oklch(0.56 0.021 213.5)\",\n\t\t\t\taccent: \"oklch(0.963 0.002 197.1)\",\n\t\t\t\t\"accent-foreground\": \"oklch(0.218 0.008 223.9)\",\n\t\t\t\tdestructive: \"oklch(0.577 0.245 27.325)\",\n\t\t\t\tborder: \"oklch(0.925 0.005 214.3)\",\n\t\t\t\tinput: \"oklch(0.925 0.005 214.3)\",\n\t\t\t\tring: \"oklch(0.723 0.014 214.4)\",\n\t\t\t\t\"chart-1\": \"oklch(0.81 0.117 11.638)\",\n\t\t\t\t\"chart-2\": \"oklch(0.645 0.246 16.439)\",\n\t\t\t\t\"chart-3\": \"oklch(0.586 0.253 17.585)\",\n\t\t\t\t\"chart-4\": \"oklch(0.514 0.222 16.935)\",\n\t\t\t\t\"chart-5\": \"oklch(0.455 0.188 13.697)\",\n\t\t\t\tradius: \"0.625rem\",\n\t\t\t\tsidebar: \"oklch(0.987 0.002 197.1)\",\n\t\t\t\t\"sidebar-foreground\": \"oklch(0.148 0.004 228.8)\",\n\t\t\t\t\"sidebar-primary\": \"oklch(0.218 0.008 223.9)\",\n\t\t\t\t\"sidebar-primary-foreground\": \"oklch(0.987 0.002 197.1)\",\n\t\t\t\t\"sidebar-accent\": \"oklch(0.963 0.002 197.1)\",\n\t\t\t\t\"sidebar-accent-foreground\": \"oklch(0.218 0.008 223.9)\",\n\t\t\t\t\"sidebar-border\": \"oklch(0.925 0.005 214.3)\",\n\t\t\t\t\"sidebar-ring\": \"oklch(0.723 0.014 214.4)\",\n\t\t\t},\n\t\t\tdark: {\n\t\t\t\tbackground: \"oklch(0.148 0.004 228.8)\",\n\t\t\t\tforeground: \"oklch(0.987 0.002 197.1)\",\n\t\t\t\tcard: \"oklch(0.218 0.008 223.9)\",\n\t\t\t\t\"card-foreground\": \"oklch(0.987 0.002 197.1)\",\n\t\t\t\tpopover: \"oklch(0.218 0.008 223.9)\",\n\t\t\t\t\"popover-foreground\": \"oklch(0.987 0.002 197.1)\",\n\t\t\t\tprimary: \"oklch(0.925 0.005 214.3)\",\n\t\t\t\t\"primary-foreground\": \"oklch(0.218 0.008 223.9)\",\n\t\t\t\tsecondary: \"oklch(0.275 0.011 216.9)\",\n\t\t\t\t\"secondary-foreground\": \"oklch(0.987 0.002 197.1)\",\n\t\t\t\tmuted: \"oklch(0.275 0.011 216.9)\",\n\t\t\t\t\"muted-foreground\": \"oklch(0.723 0.014 214.4)\",\n\t\t\t\taccent: \"oklch(0.275 0.011 216.9)\",\n\t\t\t\t\"accent-foreground\": \"oklch(0.987 0.002 197.1)\",\n\t\t\t\tdestructive: \"oklch(0.704 0.191 22.216)\",\n\t\t\t\tborder: \"oklch(1 0 0 / 10%)\",\n\t\t\t\tinput: \"oklch(1 0 0 / 15%)\",\n\t\t\t\tring: \"oklch(0.56 0.021 213.5)\",\n\t\t\t\t\"chart-1\": \"oklch(0.81 0.117 11.638)\",\n\t\t\t\t\"chart-2\": \"oklch(0.645 0.246 16.439)\",\n\t\t\t\t\"chart-3\": \"oklch(0.586 0.253 17.585)\",\n\t\t\t\t\"chart-4\": \"oklch(0.514 0.222 16.935)\",\n\t\t\t\t\"chart-5\": \"oklch(0.455 0.188 13.697)\",\n\t\t\t\tsidebar: \"oklch(0.218 0.008 223.9)\",\n\t\t\t\t\"sidebar-foreground\": \"oklch(0.987 0.002 197.1)\",\n\t\t\t\t\"sidebar-primary\": \"oklch(0.488 0.243 264.376)\",\n\t\t\t\t\"sidebar-primary-foreground\": \"oklch(0.987 0.002 197.1)\",\n\t\t\t\t\"sidebar-accent\": \"oklch(0.275 0.011 216.9)\",\n\t\t\t\t\"sidebar-accent-foreground\": \"oklch(0.987 0.002 197.1)\",\n\t\t\t\t\"sidebar-border\": \"oklch(1 0 0 / 10%)\",\n\t\t\t\t\"sidebar-ring\": \"oklch(0.56 0.021 213.5)\",\n\t\t\t},\n\t\t},\n\t},\n\t{\n\t\tname: \"taupe\",\n\t\ttitle: \"Taupe\",\n\t\ttype: \"registry:theme\",\n\t\tcssVars: {\n\t\t\tlight: {\n\t\t\t\tbackground: \"oklch(1 0 0)\",\n\t\t\t\tforeground: \"oklch(0.147 0.004 49.3)\",\n\t\t\t\tcard: \"oklch(1 0 0)\",\n\t\t\t\t\"card-foreground\": \"oklch(0.147 0.004 49.3)\",\n\t\t\t\tpopover: \"oklch(1 0 0)\",\n\t\t\t\t\"popover-foreground\": \"oklch(0.147 0.004 49.3)\",\n\t\t\t\tprimary: \"oklch(0.214 0.009 43.1)\",\n\t\t\t\t\"primary-foreground\": \"oklch(0.986 0.002 67.8)\",\n\t\t\t\tsecondary: \"oklch(0.96 0.002 17.2)\",\n\t\t\t\t\"secondary-foreground\": \"oklch(0.214 0.009 43.1)\",\n\t\t\t\tmuted: \"oklch(0.96 0.002 17.2)\",\n\t\t\t\t\"muted-foreground\": \"oklch(0.547 0.021 43.1)\",\n\t\t\t\taccent: \"oklch(0.96 0.002 17.2)\",\n\t\t\t\t\"accent-foreground\": \"oklch(0.214 0.009 43.1)\",\n\t\t\t\tdestructive: \"oklch(0.577 0.245 27.325)\",\n\t\t\t\tborder: \"oklch(0.922 0.005 34.3)\",\n\t\t\t\tinput: \"oklch(0.922 0.005 34.3)\",\n\t\t\t\tring: \"oklch(0.714 0.014 41.2)\",\n\t\t\t\t\"chart-1\": \"oklch(0.865 0.127 207.078)\",\n\t\t\t\t\"chart-2\": \"oklch(0.715 0.143 215.221)\",\n\t\t\t\t\"chart-3\": \"oklch(0.609 0.126 221.723)\",\n\t\t\t\t\"chart-4\": \"oklch(0.52 0.105 223.128)\",\n\t\t\t\t\"chart-5\": \"oklch(0.45 0.085 224.283)\",\n\t\t\t\tradius: \"0.625rem\",\n\t\t\t\tsidebar: \"oklch(0.986 0.002 67.8)\",\n\t\t\t\t\"sidebar-foreground\": \"oklch(0.147 0.004 49.3)\",\n\t\t\t\t\"sidebar-primary\": \"oklch(0.214 0.009 43.1)\",\n\t\t\t\t\"sidebar-primary-foreground\": \"oklch(0.986 0.002 67.8)\",\n\t\t\t\t\"sidebar-accent\": \"oklch(0.96 0.002 17.2)\",\n\t\t\t\t\"sidebar-accent-foreground\": \"oklch(0.214 0.009 43.1)\",\n\t\t\t\t\"sidebar-border\": \"oklch(0.922 0.005 34.3)\",\n\t\t\t\t\"sidebar-ring\": \"oklch(0.714 0.014 41.2)\",\n\t\t\t},\n\t\t\tdark: {\n\t\t\t\tbackground: \"oklch(0.147 0.004 49.3)\",\n\t\t\t\tforeground: \"oklch(0.986 0.002 67.8)\",\n\t\t\t\tcard: \"oklch(0.214 0.009 43.1)\",\n\t\t\t\t\"card-foreground\": \"oklch(0.986 0.002 67.8)\",\n\t\t\t\tpopover: \"oklch(0.214 0.009 43.1)\",\n\t\t\t\t\"popover-foreground\": \"oklch(0.986 0.002 67.8)\",\n\t\t\t\tprimary: \"oklch(0.922 0.005 34.3)\",\n\t\t\t\t\"primary-foreground\": \"oklch(0.214 0.009 43.1)\",\n\t\t\t\tsecondary: \"oklch(0.268 0.011 36.5)\",\n\t\t\t\t\"secondary-foreground\": \"oklch(0.986 0.002 67.8)\",\n\t\t\t\tmuted: \"oklch(0.268 0.011 36.5)\",\n\t\t\t\t\"muted-foreground\": \"oklch(0.714 0.014 41.2)\",\n\t\t\t\taccent: \"oklch(0.268 0.011 36.5)\",\n\t\t\t\t\"accent-foreground\": \"oklch(0.986 0.002 67.8)\",\n\t\t\t\tdestructive: \"oklch(0.704 0.191 22.216)\",\n\t\t\t\tborder: \"oklch(1 0 0 / 10%)\",\n\t\t\t\tinput: \"oklch(1 0 0 / 15%)\",\n\t\t\t\tring: \"oklch(0.547 0.021 43.1)\",\n\t\t\t\t\"chart-1\": \"oklch(0.865 0.127 207.078)\",\n\t\t\t\t\"chart-2\": \"oklch(0.715 0.143 215.221)\",\n\t\t\t\t\"chart-3\": \"oklch(0.609 0.126 221.723)\",\n\t\t\t\t\"chart-4\": \"oklch(0.52 0.105 223.128)\",\n\t\t\t\t\"chart-5\": \"oklch(0.45 0.085 224.283)\",\n\t\t\t\tsidebar: \"oklch(0.214 0.009 43.1)\",\n\t\t\t\t\"sidebar-foreground\": \"oklch(0.986 0.002 67.8)\",\n\t\t\t\t\"sidebar-primary\": \"oklch(0.488 0.243 264.376)\",\n\t\t\t\t\"sidebar-primary-foreground\": \"oklch(0.986 0.002 67.8)\",\n\t\t\t\t\"sidebar-accent\": \"oklch(0.268 0.011 36.5)\",\n\t\t\t\t\"sidebar-accent-foreground\": \"oklch(0.986 0.002 67.8)\",\n\t\t\t\t\"sidebar-border\": \"oklch(1 0 0 / 10%)\",\n\t\t\t\t\"sidebar-ring\": \"oklch(0.547 0.021 43.1)\",\n\t\t\t},\n\t\t},\n\t},\n] as const satisfies RegistryItem[];\n\nexport const THEMES = [\n\t...BASE_THEMES,\n\t{\n\t\tname: \"amber\",\n\t\ttitle: \"Amber\",\n\t\ttype: \"registry:theme\",\n\t\tcssVars: {\n\t\t\tlight: {\n\t\t\t\tprimary: \"oklch(0.555 0.163 48.998)\",\n\t\t\t\t\"primary-foreground\": \"oklch(0.987 0.022 95.277)\",\n\t\t\t\tsecondary: \"oklch(0.967 0.001 286.375)\",\n\t\t\t\t\"secondary-foreground\": \"oklch(0.21 0.006 285.885)\",\n\t\t\t\t\"chart-1\": \"oklch(0.879 0.169 91.605)\",\n\t\t\t\t\"chart-2\": \"oklch(0.769 0.188 70.08)\",\n\t\t\t\t\"chart-3\": \"oklch(0.666 0.179 58.318)\",\n\t\t\t\t\"chart-4\": \"oklch(0.555 0.163 48.998)\",\n\t\t\t\t\"chart-5\": \"oklch(0.473 0.137 46.201)\",\n\t\t\t\t\"sidebar-primary\": \"oklch(0.666 0.179 58.318)\",\n\t\t\t\t\"sidebar-primary-foreground\": \"oklch(0.987 0.022 95.277)\",\n\t\t\t},\n\t\t\tdark: {\n\t\t\t\tprimary: \"oklch(0.473 0.137 46.201)\",\n\t\t\t\t\"primary-foreground\": \"oklch(0.987 0.022 95.277)\",\n\t\t\t\tsecondary: \"oklch(0.274 0.006 286.033)\",\n\t\t\t\t\"secondary-foreground\": \"oklch(0.985 0 0)\",\n\t\t\t\t\"chart-1\": \"oklch(0.879 0.169 91.605)\",\n\t\t\t\t\"chart-2\": \"oklch(0.769 0.188 70.08)\",\n\t\t\t\t\"chart-3\": \"oklch(0.666 0.179 58.318)\",\n\t\t\t\t\"chart-4\": \"oklch(0.555 0.163 48.998)\",\n\t\t\t\t\"chart-5\": \"oklch(0.473 0.137 46.201)\",\n\t\t\t\t\"sidebar-primary\": \"oklch(0.769 0.188 70.08)\",\n\t\t\t\t\"sidebar-primary-foreground\": \"oklch(0.279 0.077 45.635)\",\n\t\t\t},\n\t\t},\n\t},\n\t{\n\t\tname: \"blue\",\n\t\ttitle: \"Blue\",\n\t\ttype: \"registry:theme\",\n\t\tcssVars: {\n\t\t\tlight: {\n\t\t\t\tprimary: \"oklch(0.488 0.243 264.376)\",\n\t\t\t\t\"primary-foreground\": \"oklch(0.97 0.014 254.604)\",\n\t\t\t\tsecondary: \"oklch(0.967 0.001 286.375)\",\n\t\t\t\t\"secondary-foreground\": \"oklch(0.21 0.006 285.885)\",\n\t\t\t\t\"chart-1\": \"oklch(0.809 0.105 251.813)\",\n\t\t\t\t\"chart-2\": \"oklch(0.623 0.214 259.815)\",\n\t\t\t\t\"chart-3\": \"oklch(0.546 0.245 262.881)\",\n\t\t\t\t\"chart-4\": \"oklch(0.488 0.243 264.376)\",\n\t\t\t\t\"chart-5\": \"oklch(0.424 0.199 265.638)\",\n\t\t\t\t\"sidebar-primary\": \"oklch(0.546 0.245 262.881)\",\n\t\t\t\t\"sidebar-primary-foreground\": \"oklch(0.97 0.014 254.604)\",\n\t\t\t},\n\t\t\tdark: {\n\t\t\t\tprimary: \"oklch(0.424 0.199 265.638)\",\n\t\t\t\t\"primary-foreground\": \"oklch(0.97 0.014 254.604)\",\n\t\t\t\tsecondary: \"oklch(0.274 0.006 286.033)\",\n\t\t\t\t\"secondary-foreground\": \"oklch(0.985 0 0)\",\n\t\t\t\t\"chart-1\": \"oklch(0.809 0.105 251.813)\",\n\t\t\t\t\"chart-2\": \"oklch(0.623 0.214 259.815)\",\n\t\t\t\t\"chart-3\": \"oklch(0.546 0.245 262.881)\",\n\t\t\t\t\"chart-4\": \"oklch(0.488 0.243 264.376)\",\n\t\t\t\t\"chart-5\": \"oklch(0.424 0.199 265.638)\",\n\t\t\t\t\"sidebar-primary\": \"oklch(0.623 0.214 259.815)\",\n\t\t\t\t\"sidebar-primary-foreground\": \"oklch(0.97 0.014 254.604)\",\n\t\t\t},\n\t\t},\n\t},\n\t{\n\t\tname: \"cyan\",\n\t\ttitle: \"Cyan\",\n\t\ttype: \"registry:theme\",\n\t\tcssVars: {\n\t\t\tlight: {\n\t\t\t\tprimary: \"oklch(0.52 0.105 223.128)\",\n\t\t\t\t\"primary-foreground\": \"oklch(0.984 0.019 200.873)\",\n\t\t\t\tsecondary: \"oklch(0.967 0.001 286.375)\",\n\t\t\t\t\"secondary-foreground\": \"oklch(0.21 0.006 285.885)\",\n\t\t\t\t\"chart-1\": \"oklch(0.865 0.127 207.078)\",\n\t\t\t\t\"chart-2\": \"oklch(0.715 0.143 215.221)\",\n\t\t\t\t\"chart-3\": \"oklch(0.609 0.126 221.723)\",\n\t\t\t\t\"chart-4\": \"oklch(0.52 0.105 223.128)\",\n\t\t\t\t\"chart-5\": \"oklch(0.45 0.085 224.283)\",\n\t\t\t\t\"sidebar-primary\": \"oklch(0.609 0.126 221.723)\",\n\t\t\t\t\"sidebar-primary-foreground\": \"oklch(0.984 0.019 200.873)\",\n\t\t\t},\n\t\t\tdark: {\n\t\t\t\tprimary: \"oklch(0.45 0.085 224.283)\",\n\t\t\t\t\"primary-foreground\": \"oklch(0.984 0.019 200.873)\",\n\t\t\t\tsecondary: \"oklch(0.274 0.006 286.033)\",\n\t\t\t\t\"secondary-foreground\": \"oklch(0.985 0 0)\",\n\t\t\t\t\"chart-1\": \"oklch(0.865 0.127 207.078)\",\n\t\t\t\t\"chart-2\": \"oklch(0.715 0.143 215.221)\",\n\t\t\t\t\"chart-3\": \"oklch(0.609 0.126 221.723)\",\n\t\t\t\t\"chart-4\": \"oklch(0.52 0.105 223.128)\",\n\t\t\t\t\"chart-5\": \"oklch(0.45 0.085 224.283)\",\n\t\t\t\t\"sidebar-primary\": \"oklch(0.715 0.143 215.221)\",\n\t\t\t\t\"sidebar-primary-foreground\": \"oklch(0.302 0.056 229.695)\",\n\t\t\t},\n\t\t},\n\t},\n\t{\n\t\tname: \"emerald\",\n\t\ttitle: \"Emerald\",\n\t\ttype: \"registry:theme\",\n\t\tcssVars: {\n\t\t\tlight: {\n\t\t\t\tprimary: \"oklch(0.508 0.118 165.612)\",\n\t\t\t\t\"primary-foreground\": \"oklch(0.979 0.021 166.113)\",\n\t\t\t\tsecondary: \"oklch(0.967 0.001 286.375)\",\n\t\t\t\t\"secondary-foreground\": \"oklch(0.21 0.006 285.885)\",\n\t\t\t\t\"chart-1\": \"oklch(0.845 0.143 164.978)\",\n\t\t\t\t\"chart-2\": \"oklch(0.696 0.17 162.48)\",\n\t\t\t\t\"chart-3\": \"oklch(0.596 0.145 163.225)\",\n\t\t\t\t\"chart-4\": \"oklch(0.508 0.118 165.612)\",\n\t\t\t\t\"chart-5\": \"oklch(0.432 0.095 166.913)\",\n\t\t\t\t\"sidebar-primary\": \"oklch(0.596 0.145 163.225)\",\n\t\t\t\t\"sidebar-primary-foreground\": \"oklch(0.979 0.021 166.113)\",\n\t\t\t},\n\t\t\tdark: {\n\t\t\t\tprimary: \"oklch(0.432 0.095 166.913)\",\n\t\t\t\t\"primary-foreground\": \"oklch(0.979 0.021 166.113)\",\n\t\t\t\tsecondary: \"oklch(0.274 0.006 286.033)\",\n\t\t\t\t\"secondary-foreground\": \"oklch(0.985 0 0)\",\n\t\t\t\t\"chart-1\": \"oklch(0.845 0.143 164.978)\",\n\t\t\t\t\"chart-2\": \"oklch(0.696 0.17 162.48)\",\n\t\t\t\t\"chart-3\": \"oklch(0.596 0.145 163.225)\",\n\t\t\t\t\"chart-4\": \"oklch(0.508 0.118 165.612)\",\n\t\t\t\t\"chart-5\": \"oklch(0.432 0.095 166.913)\",\n\t\t\t\t\"sidebar-primary\": \"oklch(0.696 0.17 162.48)\",\n\t\t\t\t\"sidebar-primary-foreground\": \"oklch(0.262 0.051 172.552)\",\n\t\t\t},\n\t\t},\n\t},\n\t{\n\t\tname: \"fuchsia\",\n\t\ttitle: \"Fuchsia\",\n\t\ttype: \"registry:theme\",\n\t\tcssVars: {\n\t\t\tlight: {\n\t\t\t\tprimary: \"oklch(0.518 0.253 323.949)\",\n\t\t\t\t\"primary-foreground\": \"oklch(0.977 0.017 320.058)\",\n\t\t\t\tsecondary: \"oklch(0.967 0.001 286.375)\",\n\t\t\t\t\"secondary-foreground\": \"oklch(0.21 0.006 285.885)\",\n\t\t\t\t\"chart-1\": \"oklch(0.833 0.145 321.434)\",\n\t\t\t\t\"chart-2\": \"oklch(0.667 0.295 322.15)\",\n\t\t\t\t\"chart-3\": \"oklch(0.591 0.293 322.896)\",\n\t\t\t\t\"chart-4\": \"oklch(0.518 0.253 323.949)\",\n\t\t\t\t\"chart-5\": \"oklch(0.452 0.211 324.591)\",\n\t\t\t\t\"sidebar-primary\": \"oklch(0.591 0.293 322.896)\",\n\t\t\t\t\"sidebar-primary-foreground\": \"oklch(0.977 0.017 320.058)\",\n\t\t\t},\n\t\t\tdark: {\n\t\t\t\tprimary: \"oklch(0.452 0.211 324.591)\",\n\t\t\t\t\"primary-foreground\": \"oklch(0.977 0.017 320.058)\",\n\t\t\t\tsecondary: \"oklch(0.274 0.006 286.033)\",\n\t\t\t\t\"secondary-foreground\": \"oklch(0.985 0 0)\",\n\t\t\t\t\"chart-1\": \"oklch(0.833 0.145 321.434)\",\n\t\t\t\t\"chart-2\": \"oklch(0.667 0.295 322.15)\",\n\t\t\t\t\"chart-3\": \"oklch(0.591 0.293 322.896)\",\n\t\t\t\t\"chart-4\": \"oklch(0.518 0.253 323.949)\",\n\t\t\t\t\"chart-5\": \"oklch(0.452 0.211 324.591)\",\n\t\t\t\t\"sidebar-primary\": \"oklch(0.667 0.295 322.15)\",\n\t\t\t\t\"sidebar-primary-foreground\": \"oklch(0.977 0.017 320.058)\",\n\t\t\t},\n\t\t},\n\t},\n\t{\n\t\tname: \"green\",\n\t\ttitle: \"Green\",\n\t\ttype: \"registry:theme\",\n\t\tcssVars: {\n\t\t\tlight: {\n\t\t\t\tprimary: \"oklch(0.532 0.157 131.589)\",\n\t\t\t\t\"primary-foreground\": \"oklch(0.986 0.031 120.757)\",\n\t\t\t\tsecondary: \"oklch(0.967 0.001 286.375)\",\n\t\t\t\t\"secondary-foreground\": \"oklch(0.21 0.006 285.885)\",\n\t\t\t\t\"chart-1\": \"oklch(0.871 0.15 154.449)\",\n\t\t\t\t\"chart-2\": \"oklch(0.723 0.219 149.579)\",\n\t\t\t\t\"chart-3\": \"oklch(0.627 0.194 149.214)\",\n\t\t\t\t\"chart-4\": \"oklch(0.527 0.154 150.069)\",\n\t\t\t\t\"chart-5\": \"oklch(0.448 0.119 151.328)\",\n\t\t\t\t\"sidebar-primary\": \"oklch(0.648 0.2 131.684)\",\n\t\t\t\t\"sidebar-primary-foreground\": \"oklch(0.986 0.031 120.757)\",\n\t\t\t},\n\t\t\tdark: {\n\t\t\t\tprimary: \"oklch(0.453 0.124 130.933)\",\n\t\t\t\t\"primary-foreground\": \"oklch(0.986 0.031 120.757)\",\n\t\t\t\tsecondary: \"oklch(0.274 0.006 286.033)\",\n\t\t\t\t\"secondary-foreground\": \"oklch(0.985 0 0)\",\n\t\t\t\t\"chart-1\": \"oklch(0.871 0.15 154.449)\",\n\t\t\t\t\"chart-2\": \"oklch(0.723 0.219 149.579)\",\n\t\t\t\t\"chart-3\": \"oklch(0.627 0.194 149.214)\",\n\t\t\t\t\"chart-4\": \"oklch(0.527 0.154 150.069)\",\n\t\t\t\t\"chart-5\": \"oklch(0.448 0.119 151.328)\",\n\t\t\t\t\"sidebar-primary\": \"oklch(0.768 0.233 130.85)\",\n\t\t\t\t\"sidebar-primary-foreground\": \"oklch(0.986 0.031 120.757)\",\n\t\t\t},\n\t\t},\n\t},\n\t{\n\t\tname: \"indigo\",\n\t\ttitle: \"Indigo\",\n\t\ttype: \"registry:theme\",\n\t\tcssVars: {\n\t\t\tlight: {\n\t\t\t\tprimary: \"oklch(0.457 0.24 277.023)\",\n\t\t\t\t\"primary-foreground\": \"oklch(0.962 0.018 272.314)\",\n\t\t\t\tsecondary: \"oklch(0.967 0.001 286.375)\",\n\t\t\t\t\"secondary-foreground\": \"oklch(0.21 0.006 285.885)\",\n\t\t\t\t\"chart-1\": \"oklch(0.785 0.115 274.713)\",\n\t\t\t\t\"chart-2\": \"oklch(0.585 0.233 277.117)\",\n\t\t\t\t\"chart-3\": \"oklch(0.511 0.262 276.966)\",\n\t\t\t\t\"chart-4\": \"oklch(0.457 0.24 277.023)\",\n\t\t\t\t\"chart-5\": \"oklch(0.398 0.195 277.366)\",\n\t\t\t\t\"sidebar-primary\": \"oklch(0.511 0.262 276.966)\",\n\t\t\t\t\"sidebar-primary-foreground\": \"oklch(0.962 0.018 272.314)\",\n\t\t\t},\n\t\t\tdark: {\n\t\t\t\tprimary: \"oklch(0.398 0.195 277.366)\",\n\t\t\t\t\"primary-foreground\": \"oklch(0.962 0.018 272.314)\",\n\t\t\t\tsecondary: \"oklch(0.274 0.006 286.033)\",\n\t\t\t\t\"secondary-foreground\": \"oklch(0.985 0 0)\",\n\t\t\t\t\"chart-1\": \"oklch(0.785 0.115 274.713)\",\n\t\t\t\t\"chart-2\": \"oklch(0.585 0.233 277.117)\",\n\t\t\t\t\"chart-3\": \"oklch(0.511 0.262 276.966)\",\n\t\t\t\t\"chart-4\": \"oklch(0.457 0.24 277.023)\",\n\t\t\t\t\"chart-5\": \"oklch(0.398 0.195 277.366)\",\n\t\t\t\t\"sidebar-primary\": \"oklch(0.585 0.233 277.117)\",\n\t\t\t\t\"sidebar-primary-foreground\": \"oklch(0.962 0.018 272.314)\",\n\t\t\t},\n\t\t},\n\t},\n\t{\n\t\tname: \"lime\",\n\t\ttitle: \"Lime\",\n\t\ttype: \"registry:theme\",\n\t\tcssVars: {\n\t\t\tlight: {\n\t\t\t\tprimary: \"oklch(0.532 0.157 131.589)\",\n\t\t\t\t\"primary-foreground\": \"oklch(0.986 0.031 120.757)\",\n\t\t\t\tsecondary: \"oklch(0.967 0.001 286.375)\",\n\t\t\t\t\"secondary-foreground\": \"oklch(0.21 0.006 285.885)\",\n\t\t\t\t\"chart-1\": \"oklch(0.897 0.196 126.665)\",\n\t\t\t\t\"chart-2\": \"oklch(0.768 0.233 130.85)\",\n\t\t\t\t\"chart-3\": \"oklch(0.648 0.2 131.684)\",\n\t\t\t\t\"chart-4\": \"oklch(0.532 0.157 131.589)\",\n\t\t\t\t\"chart-5\": \"oklch(0.453 0.124 130.933)\",\n\t\t\t\t\"sidebar-primary\": \"oklch(0.648 0.2 131.684)\",\n\t\t\t\t\"sidebar-primary-foreground\": \"oklch(0.986 0.031 120.757)\",\n\t\t\t},\n\t\t\tdark: {\n\t\t\t\tprimary: \"oklch(0.453 0.124 130.933)\",\n\t\t\t\t\"primary-foreground\": \"oklch(0.986 0.031 120.757)\",\n\t\t\t\tsecondary: \"oklch(0.274 0.006 286.033)\",\n\t\t\t\t\"secondary-foreground\": \"oklch(0.985 0 0)\",\n\t\t\t\t\"chart-1\": \"oklch(0.897 0.196 126.665)\",\n\t\t\t\t\"chart-2\": \"oklch(0.768 0.233 130.85)\",\n\t\t\t\t\"chart-3\": \"oklch(0.648 0.2 131.684)\",\n\t\t\t\t\"chart-4\": \"oklch(0.532 0.157 131.589)\",\n\t\t\t\t\"chart-5\": \"oklch(0.453 0.124 130.933)\",\n\t\t\t\t\"sidebar-primary\": \"oklch(0.768 0.233 130.85)\",\n\t\t\t\t\"sidebar-primary-foreground\": \"oklch(0.274 0.072 132.109)\",\n\t\t\t},\n\t\t},\n\t},\n\t{\n\t\tname: \"orange\",\n\t\ttitle: \"Orange\",\n\t\ttype: \"registry:theme\",\n\t\tcssVars: {\n\t\t\tlight: {\n\t\t\t\tprimary: \"oklch(0.553 0.195 38.402)\",\n\t\t\t\t\"primary-foreground\": \"oklch(0.98 0.016 73.684)\",\n\t\t\t\tsecondary: \"oklch(0.967 0.001 286.375)\",\n\t\t\t\t\"secondary-foreground\": \"oklch(0.21 0.006 285.885)\",\n\t\t\t\t\"chart-1\": \"oklch(0.837 0.128 66.29)\",\n\t\t\t\t\"chart-2\": \"oklch(0.705 0.213 47.604)\",\n\t\t\t\t\"chart-3\": \"oklch(0.646 0.222 41.116)\",\n\t\t\t\t\"chart-4\": \"oklch(0.553 0.195 38.402)\",\n\t\t\t\t\"chart-5\": \"oklch(0.47 0.157 37.304)\",\n\t\t\t\t\"sidebar-primary\": \"oklch(0.646 0.222 41.116)\",\n\t\t\t\t\"sidebar-primary-foreground\": \"oklch(0.98 0.016 73.684)\",\n\t\t\t},\n\t\t\tdark: {\n\t\t\t\tprimary: \"oklch(0.47 0.157 37.304)\",\n\t\t\t\t\"primary-foreground\": \"oklch(0.98 0.016 73.684)\",\n\t\t\t\tsecondary: \"oklch(0.274 0.006 286.033)\",\n\t\t\t\t\"secondary-foreground\": \"oklch(0.985 0 0)\",\n\t\t\t\t\"chart-1\": \"oklch(0.837 0.128 66.29)\",\n\t\t\t\t\"chart-2\": \"oklch(0.705 0.213 47.604)\",\n\t\t\t\t\"chart-3\": \"oklch(0.646 0.222 41.116)\",\n\t\t\t\t\"chart-4\": \"oklch(0.553 0.195 38.402)\",\n\t\t\t\t\"chart-5\": \"oklch(0.47 0.157 37.304)\",\n\t\t\t\t\"sidebar-primary\": \"oklch(0.705 0.213 47.604)\",\n\t\t\t\t\"sidebar-primary-foreground\": \"oklch(0.98 0.016 73.684)\",\n\t\t\t},\n\t\t},\n\t},\n\t{\n\t\tname: \"pink\",\n\t\ttitle: \"Pink\",\n\t\ttype: \"registry:theme\",\n\t\tcssVars: {\n\t\t\tlight: {\n\t\t\t\tprimary: \"oklch(0.525 0.223 3.958)\",\n\t\t\t\t\"primary-foreground\": \"oklch(0.971 0.014 343.198)\",\n\t\t\t\tsecondary: \"oklch(0.967 0.001 286.375)\",\n\t\t\t\t\"secondary-foreground\": \"oklch(0.21 0.006 285.885)\",\n\t\t\t\t\"chart-1\": \"oklch(0.823 0.12 346.018)\",\n\t\t\t\t\"chart-2\": \"oklch(0.656 0.241 354.308)\",\n\t\t\t\t\"chart-3\": \"oklch(0.592 0.249 0.584)\",\n\t\t\t\t\"chart-4\": \"oklch(0.525 0.223 3.958)\",\n\t\t\t\t\"chart-5\": \"oklch(0.459 0.187 3.815)\",\n\t\t\t\t\"sidebar-primary\": \"oklch(0.592 0.249 0.584)\",\n\t\t\t\t\"sidebar-primary-foreground\": \"oklch(0.971 0.014 343.198)\",\n\t\t\t},\n\t\t\tdark: {\n\t\t\t\tprimary: \"oklch(0.459 0.187 3.815)\",\n\t\t\t\t\"primary-foreground\": \"oklch(0.971 0.014 343.198)\",\n\t\t\t\tsecondary: \"oklch(0.274 0.006 286.033)\",\n\t\t\t\t\"secondary-foreground\": \"oklch(0.985 0 0)\",\n\t\t\t\t\"chart-1\": \"oklch(0.823 0.12 346.018)\",\n\t\t\t\t\"chart-2\": \"oklch(0.656 0.241 354.308)\",\n\t\t\t\t\"chart-3\": \"oklch(0.592 0.249 0.584)\",\n\t\t\t\t\"chart-4\": \"oklch(0.525 0.223 3.958)\",\n\t\t\t\t\"chart-5\": \"oklch(0.459 0.187 3.815)\",\n\t\t\t\t\"sidebar-primary\": \"oklch(0.656 0.241 354.308)\",\n\t\t\t\t\"sidebar-primary-foreground\": \"oklch(0.971 0.014 343.198)\",\n\t\t\t},\n\t\t},\n\t},\n\t{\n\t\tname: \"purple\",\n\t\ttitle: \"Purple\",\n\t\ttype: \"registry:theme\",\n\t\tcssVars: {\n\t\t\tlight: {\n\t\t\t\tprimary: \"oklch(0.496 0.265 301.924)\",\n\t\t\t\t\"primary-foreground\": \"oklch(0.977 0.014 308.299)\",\n\t\t\t\tsecondary: \"oklch(0.967 0.001 286.375)\",\n\t\t\t\t\"secondary-foreground\": \"oklch(0.21 0.006 285.885)\",\n\t\t\t\t\"chart-1\": \"oklch(0.827 0.119 306.383)\",\n\t\t\t\t\"chart-2\": \"oklch(0.627 0.265 303.9)\",\n\t\t\t\t\"chart-3\": \"oklch(0.558 0.288 302.321)\",\n\t\t\t\t\"chart-4\": \"oklch(0.496 0.265 301.924)\",\n\t\t\t\t\"chart-5\": \"oklch(0.438 0.218 303.724)\",\n\t\t\t\t\"sidebar-primary\": \"oklch(0.558 0.288 302.321)\",\n\t\t\t\t\"sidebar-primary-foreground\": \"oklch(0.977 0.014 308.299)\",\n\t\t\t},\n\t\t\tdark: {\n\t\t\t\tprimary: \"oklch(0.438 0.218 303.724)\",\n\t\t\t\t\"primary-foreground\": \"oklch(0.977 0.014 308.299)\",\n\t\t\t\tsecondary: \"oklch(0.274 0.006 286.033)\",\n\t\t\t\t\"secondary-foreground\": \"oklch(0.985 0 0)\",\n\t\t\t\t\"chart-1\": \"oklch(0.827 0.119 306.383)\",\n\t\t\t\t\"chart-2\": \"oklch(0.627 0.265 303.9)\",\n\t\t\t\t\"chart-3\": \"oklch(0.558 0.288 302.321)\",\n\t\t\t\t\"chart-4\": \"oklch(0.496 0.265 301.924)\",\n\t\t\t\t\"chart-5\": \"oklch(0.438 0.218 303.724)\",\n\t\t\t\t\"sidebar-primary\": \"oklch(0.627 0.265 303.9)\",\n\t\t\t\t\"sidebar-primary-foreground\": \"oklch(0.977 0.014 308.299)\",\n\t\t\t},\n\t\t},\n\t},\n\t{\n\t\tname: \"red\",\n\t\ttitle: \"Red\",\n\t\ttype: \"registry:theme\",\n\t\tcssVars: {\n\t\t\tlight: {\n\t\t\t\tprimary: \"oklch(0.505 0.213 27.518)\",\n\t\t\t\t\"primary-foreground\": \"oklch(0.971 0.013 17.38)\",\n\t\t\t\tsecondary: \"oklch(0.967 0.001 286.375)\",\n\t\t\t\t\"secondary-foreground\": \"oklch(0.21 0.006 285.885)\",\n\t\t\t\t\"chart-1\": \"oklch(0.808 0.114 19.571)\",\n\t\t\t\t\"chart-2\": \"oklch(0.637 0.237 25.331)\",\n\t\t\t\t\"chart-3\": \"oklch(0.577 0.245 27.325)\",\n\t\t\t\t\"chart-4\": \"oklch(0.505 0.213 27.518)\",\n\t\t\t\t\"chart-5\": \"oklch(0.444 0.177 26.899)\",\n\t\t\t\t\"sidebar-primary\": \"oklch(0.577 0.245 27.325)\",\n\t\t\t\t\"sidebar-primary-foreground\": \"oklch(0.971 0.013 17.38)\",\n\t\t\t},\n\t\t\tdark: {\n\t\t\t\tprimary: \"oklch(0.444 0.177 26.899)\",\n\t\t\t\t\"primary-foreground\": \"oklch(0.971 0.013 17.38)\",\n\t\t\t\tsecondary: \"oklch(0.274 0.006 286.033)\",\n\t\t\t\t\"secondary-foreground\": \"oklch(0.985 0 0)\",\n\t\t\t\t\"chart-1\": \"oklch(0.808 0.114 19.571)\",\n\t\t\t\t\"chart-2\": \"oklch(0.637 0.237 25.331)\",\n\t\t\t\t\"chart-3\": \"oklch(0.577 0.245 27.325)\",\n\t\t\t\t\"chart-4\": \"oklch(0.505 0.213 27.518)\",\n\t\t\t\t\"chart-5\": \"oklch(0.444 0.177 26.899)\",\n\t\t\t\t\"sidebar-primary\": \"oklch(0.637 0.237 25.331)\",\n\t\t\t\t\"sidebar-primary-foreground\": \"oklch(0.971 0.013 17.38)\",\n\t\t\t},\n\t\t},\n\t},\n\t{\n\t\tname: \"rose\",\n\t\ttitle: \"Rose\",\n\t\ttype: \"registry:theme\",\n\t\tcssVars: {\n\t\t\tlight: {\n\t\t\t\tprimary: \"oklch(0.514 0.222 16.935)\",\n\t\t\t\t\"primary-foreground\": \"oklch(0.969 0.015 12.422)\",\n\t\t\t\tsecondary: \"oklch(0.967 0.001 286.375)\",\n\t\t\t\t\"secondary-foreground\": \"oklch(0.21 0.006 285.885)\",\n\t\t\t\t\"chart-1\": \"oklch(0.81 0.117 11.638)\",\n\t\t\t\t\"chart-2\": \"oklch(0.645 0.246 16.439)\",\n\t\t\t\t\"chart-3\": \"oklch(0.586 0.253 17.585)\",\n\t\t\t\t\"chart-4\": \"oklch(0.514 0.222 16.935)\",\n\t\t\t\t\"chart-5\": \"oklch(0.455 0.188 13.697)\",\n\t\t\t\t\"sidebar-primary\": \"oklch(0.586 0.253 17.585)\",\n\t\t\t\t\"sidebar-primary-foreground\": \"oklch(0.969 0.015 12.422)\",\n\t\t\t},\n\t\t\tdark: {\n\t\t\t\tprimary: \"oklch(0.455 0.188 13.697)\",\n\t\t\t\t\"primary-foreground\": \"oklch(0.969 0.015 12.422)\",\n\t\t\t\tsecondary: \"oklch(0.274 0.006 286.033)\",\n\t\t\t\t\"secondary-foreground\": \"oklch(0.985 0 0)\",\n\t\t\t\t\"chart-1\": \"oklch(0.81 0.117 11.638)\",\n\t\t\t\t\"chart-2\": \"oklch(0.645 0.246 16.439)\",\n\t\t\t\t\"chart-3\": \"oklch(0.586 0.253 17.585)\",\n\t\t\t\t\"chart-4\": \"oklch(0.514 0.222 16.935)\",\n\t\t\t\t\"chart-5\": \"oklch(0.455 0.188 13.697)\",\n\t\t\t\tsidebar: \"oklch(0.21 0.006 285.885)\",\n\t\t\t\t\"sidebar-primary\": \"oklch(0.645 0.246 16.439)\",\n\t\t\t\t\"sidebar-primary-foreground\": \"oklch(0.969 0.015 12.422)\",\n\t\t\t},\n\t\t},\n\t},\n\t{\n\t\tname: \"sky\",\n\t\ttitle: \"Sky\",\n\t\ttype: \"registry:theme\",\n\t\tcssVars: {\n\t\t\tlight: {\n\t\t\t\tprimary: \"oklch(0.5 0.134 242.749)\",\n\t\t\t\t\"primary-foreground\": \"oklch(0.977 0.013 236.62)\",\n\t\t\t\tsecondary: \"oklch(0.967 0.001 286.375)\",\n\t\t\t\t\"secondary-foreground\": \"oklch(0.21 0.006 285.885)\",\n\t\t\t\t\"chart-1\": \"oklch(0.828 0.111 230.318)\",\n\t\t\t\t\"chart-2\": \"oklch(0.685 0.169 237.323)\",\n\t\t\t\t\"chart-3\": \"oklch(0.588 0.158 241.966)\",\n\t\t\t\t\"chart-4\": \"oklch(0.5 0.134 242.749)\",\n\t\t\t\t\"chart-5\": \"oklch(0.443 0.11 240.79)\",\n\t\t\t\t\"sidebar-primary\": \"oklch(0.588 0.158 241.966)\",\n\t\t\t\t\"sidebar-primary-foreground\": \"oklch(0.977 0.013 236.62)\",\n\t\t\t},\n\t\t\tdark: {\n\t\t\t\tprimary: \"oklch(0.443 0.11 240.79)\",\n\t\t\t\t\"primary-foreground\": \"oklch(0.977 0.013 236.62)\",\n\t\t\t\tsecondary: \"oklch(0.274 0.006 286.033)\",\n\t\t\t\t\"secondary-foreground\": \"oklch(0.985 0 0)\",\n\t\t\t\t\"chart-1\": \"oklch(0.828 0.111 230.318)\",\n\t\t\t\t\"chart-2\": \"oklch(0.685 0.169 237.323)\",\n\t\t\t\t\"chart-3\": \"oklch(0.588 0.158 241.966)\",\n\t\t\t\t\"chart-4\": \"oklch(0.5 0.134 242.749)\",\n\t\t\t\t\"chart-5\": \"oklch(0.443 0.11 240.79)\",\n\t\t\t\t\"sidebar-primary\": \"oklch(0.685 0.169 237.323)\",\n\t\t\t\t\"sidebar-primary-foreground\": \"oklch(0.293 0.066 243.157)\",\n\t\t\t},\n\t\t},\n\t},\n\t{\n\t\tname: \"teal\",\n\t\ttitle: \"Teal\",\n\t\ttype: \"registry:theme\",\n\t\tcssVars: {\n\t\t\tlight: {\n\t\t\t\tprimary: \"oklch(0.511 0.096 186.391)\",\n\t\t\t\t\"primary-foreground\": \"oklch(0.984 0.014 180.72)\",\n\t\t\t\tsecondary: \"oklch(0.967 0.001 286.375)\",\n\t\t\t\t\"secondary-foreground\": \"oklch(0.21 0.006 285.885)\",\n\t\t\t\t\"chart-1\": \"oklch(0.855 0.138 181.071)\",\n\t\t\t\t\"chart-2\": \"oklch(0.704 0.14 182.503)\",\n\t\t\t\t\"chart-3\": \"oklch(0.6 0.118 184.704)\",\n\t\t\t\t\"chart-4\": \"oklch(0.511 0.096 186.391)\",\n\t\t\t\t\"chart-5\": \"oklch(0.437 0.078 188.216)\",\n\t\t\t\t\"sidebar-primary\": \"oklch(0.6 0.118 184.704)\",\n\t\t\t\t\"sidebar-primary-foreground\": \"oklch(0.984 0.014 180.72)\",\n\t\t\t},\n\t\t\tdark: {\n\t\t\t\tprimary: \"oklch(0.437 0.078 188.216)\",\n\t\t\t\t\"primary-foreground\": \"oklch(0.984 0.014 180.72)\",\n\t\t\t\tsecondary: \"oklch(0.274 0.006 286.033)\",\n\t\t\t\t\"secondary-foreground\": \"oklch(0.985 0 0)\",\n\t\t\t\t\"chart-1\": \"oklch(0.855 0.138 181.071)\",\n\t\t\t\t\"chart-2\": \"oklch(0.704 0.14 182.503)\",\n\t\t\t\t\"chart-3\": \"oklch(0.6 0.118 184.704)\",\n\t\t\t\t\"chart-4\": \"oklch(0.511 0.096 186.391)\",\n\t\t\t\t\"chart-5\": \"oklch(0.437 0.078 188.216)\",\n\t\t\t\t\"sidebar-primary\": \"oklch(0.704 0.14 182.503)\",\n\t\t\t\t\"sidebar-primary-foreground\": \"oklch(0.277 0.046 192.524)\",\n\t\t\t},\n\t\t},\n\t},\n\t{\n\t\tname: \"violet\",\n\t\ttitle: \"Violet\",\n\t\ttype: \"registry:theme\",\n\t\tcssVars: {\n\t\t\tlight: {\n\t\t\t\tprimary: \"oklch(0.491 0.27 292.581)\",\n\t\t\t\t\"primary-foreground\": \"oklch(0.969 0.016 293.756)\",\n\t\t\t\tsecondary: \"oklch(0.967 0.001 286.375)\",\n\t\t\t\t\"secondary-foreground\": \"oklch(0.21 0.006 285.885)\",\n\t\t\t\t\"chart-1\": \"oklch(0.811 0.111 293.571)\",\n\t\t\t\t\"chart-2\": \"oklch(0.606 0.25 292.717)\",\n\t\t\t\t\"chart-3\": \"oklch(0.541 0.281 293.009)\",\n\t\t\t\t\"chart-4\": \"oklch(0.491 0.27 292.581)\",\n\t\t\t\t\"chart-5\": \"oklch(0.432 0.232 292.759)\",\n\t\t\t\t\"sidebar-primary\": \"oklch(0.541 0.281 293.009)\",\n\t\t\t\t\"sidebar-primary-foreground\": \"oklch(0.969 0.016 293.756)\",\n\t\t\t},\n\t\t\tdark: {\n\t\t\t\tprimary: \"oklch(0.432 0.232 292.759)\",\n\t\t\t\t\"primary-foreground\": \"oklch(0.969 0.016 293.756)\",\n\t\t\t\tsecondary: \"oklch(0.274 0.006 286.033)\",\n\t\t\t\t\"secondary-foreground\": \"oklch(0.985 0 0)\",\n\t\t\t\t\"chart-1\": \"oklch(0.811 0.111 293.571)\",\n\t\t\t\t\"chart-2\": \"oklch(0.606 0.25 292.717)\",\n\t\t\t\t\"chart-3\": \"oklch(0.541 0.281 293.009)\",\n\t\t\t\t\"chart-4\": \"oklch(0.491 0.27 292.581)\",\n\t\t\t\t\"chart-5\": \"oklch(0.432 0.232 292.759)\",\n\t\t\t\t\"sidebar-primary\": \"oklch(0.606 0.25 292.717)\",\n\t\t\t\t\"sidebar-primary-foreground\": \"oklch(0.969 0.016 293.756)\",\n\t\t\t},\n\t\t},\n\t},\n\t{\n\t\tname: \"yellow\",\n\t\ttitle: \"Yellow\",\n\t\ttype: \"registry:theme\",\n\t\tcssVars: {\n\t\t\tlight: {\n\t\t\t\tprimary: \"oklch(0.852 0.199 91.936)\",\n\t\t\t\t\"primary-foreground\": \"oklch(0.421 0.095 57.708)\",\n\t\t\t\tsecondary: \"oklch(0.967 0.001 286.375)\",\n\t\t\t\t\"secondary-foreground\": \"oklch(0.21 0.006 285.885)\",\n\t\t\t\t\"chart-1\": \"oklch(0.905 0.182 98.111)\",\n\t\t\t\t\"chart-2\": \"oklch(0.795 0.184 86.047)\",\n\t\t\t\t\"chart-3\": \"oklch(0.681 0.162 75.834)\",\n\t\t\t\t\"chart-4\": \"oklch(0.554 0.135 66.442)\",\n\t\t\t\t\"chart-5\": \"oklch(0.476 0.114 61.907)\",\n\t\t\t\t\"sidebar-primary\": \"oklch(0.681 0.162 75.834)\",\n\t\t\t\t\"sidebar-primary-foreground\": \"oklch(0.987 0.026 102.212)\",\n\t\t\t},\n\t\t\tdark: {\n\t\t\t\tprimary: \"oklch(0.795 0.184 86.047)\",\n\t\t\t\t\"primary-foreground\": \"oklch(0.421 0.095 57.708)\",\n\t\t\t\tsecondary: \"oklch(0.274 0.006 286.033)\",\n\t\t\t\t\"secondary-foreground\": \"oklch(0.985 0 0)\",\n\t\t\t\t\"chart-1\": \"oklch(0.905 0.182 98.111)\",\n\t\t\t\t\"chart-2\": \"oklch(0.795 0.184 86.047)\",\n\t\t\t\t\"chart-3\": \"oklch(0.681 0.162 75.834)\",\n\t\t\t\t\"chart-4\": \"oklch(0.554 0.135 66.442)\",\n\t\t\t\t\"chart-5\": \"oklch(0.476 0.114 61.907)\",\n\t\t\t\t\"sidebar-primary\": \"oklch(0.795 0.184 86.047)\",\n\t\t\t\t\"sidebar-primary-foreground\": \"oklch(0.987 0.026 102.212)\",\n\t\t\t},\n\t\t},\n\t},\n] as const satisfies RegistryItem[];\n\nexport type Theme = (typeof THEMES)[number];\nexport type BaseTheme = (typeof BASE_THEMES)[number];\n"
  },
  {
    "path": "docs/src/lib/registry/ui/accordion/accordion-content.svelte",
    "content": "<script lang=\"ts\">\n\timport { Accordion as AccordionPrimitive } from \"bits-ui\";\n\timport { cn, type WithoutChild } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithoutChild<AccordionPrimitive.ContentProps> = $props();\n</script>\n\n<AccordionPrimitive.Content\n\tbind:ref\n\tdata-slot=\"accordion-content\"\n\tclass=\"cn-accordion-content overflow-hidden\"\n\t{...restProps}\n>\n\t<div\n\t\tclass={cn(\n\t\t\t\"cn-accordion-content-inner [&_a]:hover:text-foreground [&_a]:underline [&_a]:underline-offset-3 [&_p:not(:last-child)]:mb-4\",\n\t\t\tclassName\n\t\t)}\n\t>\n\t\t{@render children?.()}\n\t</div>\n</AccordionPrimitive.Content>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/accordion/accordion-item.svelte",
    "content": "<script lang=\"ts\">\n\timport { Accordion as AccordionPrimitive } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\t...restProps\n\t}: AccordionPrimitive.ItemProps = $props();\n</script>\n\n<AccordionPrimitive.Item\n\tbind:ref\n\tdata-slot=\"accordion-item\"\n\tclass={cn(\"cn-accordion-item\", className)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/accordion/accordion-trigger.svelte",
    "content": "<script lang=\"ts\">\n\timport { Accordion as AccordionPrimitive } from \"bits-ui\";\n\timport { cn, type WithoutChild } from \"$lib/utils.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tlevel = 3,\n\t\tchildren,\n\t\t...restProps\n\t}: WithoutChild<AccordionPrimitive.TriggerProps> & {\n\t\tlevel?: AccordionPrimitive.HeaderProps[\"level\"];\n\t} = $props();\n</script>\n\n<AccordionPrimitive.Header {level} class=\"flex\">\n\t<AccordionPrimitive.Trigger\n\t\tdata-slot=\"accordion-trigger\"\n\t\tbind:ref\n\t\tclass={cn(\n\t\t\t\"cn-accordion-trigger group/accordion-trigger relative flex flex-1 items-start justify-between border border-transparent transition-all outline-none disabled:pointer-events-none disabled:opacity-50\",\n\t\t\tclassName\n\t\t)}\n\t\t{...restProps}\n\t>\n\t\t{@render children?.()}\n\t\t<IconPlaceholder\n\t\t\tlucide=\"ChevronDownIcon\"\n\t\t\ttabler=\"IconChevronDown\"\n\t\t\tdata-slot=\"accordion-trigger-icon\"\n\t\t\thugeicons=\"ArrowDown01Icon\"\n\t\t\tphosphor=\"CaretDownIcon\"\n\t\t\tremixicon=\"RiArrowDownSLine\"\n\t\t\tclass=\"cn-accordion-trigger-icon pointer-events-none shrink-0 group-aria-expanded/accordion-trigger:hidden\"\n\t\t/>\n\t\t<IconPlaceholder\n\t\t\tlucide=\"ChevronUpIcon\"\n\t\t\ttabler=\"IconChevronUp\"\n\t\t\tdata-slot=\"accordion-trigger-icon\"\n\t\t\thugeicons=\"ArrowUp01Icon\"\n\t\t\tphosphor=\"CaretUpIcon\"\n\t\t\tremixicon=\"RiArrowUpSLine\"\n\t\t\tclass=\"cn-accordion-trigger-icon pointer-events-none hidden shrink-0 group-aria-expanded/accordion-trigger:inline\"\n\t\t/>\n\t</AccordionPrimitive.Trigger>\n</AccordionPrimitive.Header>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/accordion/accordion.svelte",
    "content": "<script lang=\"ts\">\n\timport { Accordion as AccordionPrimitive } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tvalue = $bindable(),\n\t\tclass: className,\n\t\t...restProps\n\t}: AccordionPrimitive.RootProps = $props();\n</script>\n\n<AccordionPrimitive.Root\n\tbind:ref\n\tbind:value={value as never}\n\tdata-slot=\"accordion\"\n\tclass={cn(\"cn-accordion flex w-full flex-col\", className)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/accordion/index.ts",
    "content": "import Root from \"./accordion.svelte\";\nimport Content from \"./accordion-content.svelte\";\nimport Item from \"./accordion-item.svelte\";\nimport Trigger from \"./accordion-trigger.svelte\";\n\nexport {\n\tRoot,\n\tContent,\n\tItem,\n\tTrigger,\n\t//\n\tRoot as Accordion,\n\tContent as AccordionContent,\n\tItem as AccordionItem,\n\tTrigger as AccordionTrigger,\n};\n"
  },
  {
    "path": "docs/src/lib/registry/ui/alert/alert-action.svelte",
    "content": "<script lang=\"ts\">\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLDivElement>> = $props();\n</script>\n\n<div\n\tbind:this={ref}\n\tdata-slot=\"alert-action\"\n\tclass={cn(\"cn-alert-action\", className)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/alert/alert-description.svelte",
    "content": "<script lang=\"ts\">\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLDivElement>> = $props();\n</script>\n\n<div\n\tbind:this={ref}\n\tdata-slot=\"alert-description\"\n\tclass={cn(\n\t\t\"cn-alert-description [&_a]:hover:text-foreground [&_a]:underline [&_a]:underline-offset-3\",\n\t\tclassName\n\t)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/alert/alert-title.svelte",
    "content": "<script lang=\"ts\">\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLDivElement>> = $props();\n</script>\n\n<div\n\tbind:this={ref}\n\tdata-slot=\"alert-title\"\n\tclass={cn(\n\t\t\"cn-alert-title [&_a]:hover:text-foreground [&_a]:underline [&_a]:underline-offset-3\",\n\t\tclassName\n\t)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/alert/alert.svelte",
    "content": "<script lang=\"ts\" module>\n\timport { type VariantProps, tv } from \"tailwind-variants\";\n\n\texport const alertVariants = tv({\n\t\tbase: \"cn-alert group/alert relative w-full\",\n\t\tvariants: {\n\t\t\tvariant: {\n\t\t\t\tdefault: \"cn-alert-variant-default\",\n\t\t\t\tdestructive: \"cn-alert-variant-destructive\",\n\t\t\t},\n\t\t},\n\t\tdefaultVariants: {\n\t\t\tvariant: \"default\",\n\t\t},\n\t});\n\n\texport type AlertVariant = VariantProps<typeof alertVariants>[\"variant\"];\n</script>\n\n<script lang=\"ts\">\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tvariant = \"default\",\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLDivElement>> & {\n\t\tvariant?: AlertVariant;\n\t} = $props();\n</script>\n\n<div\n\tbind:this={ref}\n\tdata-slot=\"alert\"\n\trole=\"alert\"\n\tclass={cn(alertVariants({ variant }), className)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/alert/index.ts",
    "content": "import Root from \"./alert.svelte\";\nimport Description from \"./alert-description.svelte\";\nimport Title from \"./alert-title.svelte\";\nimport Action from \"./alert-action.svelte\";\nexport { alertVariants, type AlertVariant } from \"./alert.svelte\";\n\nexport {\n\tRoot,\n\tDescription,\n\tTitle,\n\tAction,\n\t//\n\tRoot as Alert,\n\tDescription as AlertDescription,\n\tTitle as AlertTitle,\n\tAction as AlertAction,\n};\n"
  },
  {
    "path": "docs/src/lib/registry/ui/alert-dialog/alert-dialog-action.svelte",
    "content": "<script lang=\"ts\">\n\timport { AlertDialog as AlertDialogPrimitive } from \"bits-ui\";\n\timport {\n\t\tbuttonVariants,\n\t\ttype ButtonVariant,\n\t\ttype ButtonSize,\n\t} from \"$lib/registry/ui/button/index.js\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tvariant = \"default\",\n\t\tsize = \"default\",\n\t\t...restProps\n\t}: AlertDialogPrimitive.ActionProps & {\n\t\tvariant?: ButtonVariant;\n\t\tsize?: ButtonSize;\n\t} = $props();\n</script>\n\n<AlertDialogPrimitive.Action\n\tbind:ref\n\tdata-slot=\"alert-dialog-action\"\n\tclass={cn(buttonVariants({ variant, size }), \"cn-alert-dialog-action\", className)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/alert-dialog/alert-dialog-cancel.svelte",
    "content": "<script lang=\"ts\">\n\timport { AlertDialog as AlertDialogPrimitive } from \"bits-ui\";\n\timport {\n\t\tbuttonVariants,\n\t\ttype ButtonVariant,\n\t\ttype ButtonSize,\n\t} from \"$lib/registry/ui/button/index.js\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tvariant = \"outline\",\n\t\tsize = \"default\",\n\t\t...restProps\n\t}: AlertDialogPrimitive.CancelProps & {\n\t\tvariant?: ButtonVariant;\n\t\tsize?: ButtonSize;\n\t} = $props();\n</script>\n\n<AlertDialogPrimitive.Cancel\n\tbind:ref\n\tdata-slot=\"alert-dialog-cancel\"\n\tclass={cn(buttonVariants({ variant, size }), \"cn-alert-dialog-cancel\", className)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/alert-dialog/alert-dialog-content.svelte",
    "content": "<script lang=\"ts\">\n\timport { AlertDialog as AlertDialogPrimitive } from \"bits-ui\";\n\timport AlertDialogPortal from \"./alert-dialog-portal.svelte\";\n\timport AlertDialogOverlay from \"./alert-dialog-overlay.svelte\";\n\timport { cn, type WithoutChild, type WithoutChildrenOrChild } from \"$lib/utils.js\";\n\timport type { ComponentProps } from \"svelte\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tsize = \"default\",\n\t\tportalProps,\n\t\t...restProps\n\t}: WithoutChild<AlertDialogPrimitive.ContentProps> & {\n\t\tsize?: \"default\" | \"sm\";\n\t\tportalProps?: WithoutChildrenOrChild<ComponentProps<typeof AlertDialogPortal>>;\n\t} = $props();\n</script>\n\n<AlertDialogPortal {...portalProps}>\n\t<AlertDialogOverlay />\n\t<AlertDialogPrimitive.Content\n\t\tbind:ref\n\t\tdata-slot=\"alert-dialog-content\"\n\t\tdata-size={size}\n\t\tclass={cn(\n\t\t\t\"cn-alert-dialog-content group/alert-dialog-content fixed top-1/2 left-1/2 z-50 grid w-full -translate-x-1/2 -translate-y-1/2 outline-none\",\n\t\t\tclassName\n\t\t)}\n\t\t{...restProps}\n\t/>\n</AlertDialogPortal>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/alert-dialog/alert-dialog-description.svelte",
    "content": "<script lang=\"ts\">\n\timport { AlertDialog as AlertDialogPrimitive } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\t...restProps\n\t}: AlertDialogPrimitive.DescriptionProps = $props();\n</script>\n\n<AlertDialogPrimitive.Description\n\tbind:ref\n\tdata-slot=\"alert-dialog-description\"\n\tclass={cn(\"cn-alert-dialog-description\", className)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/alert-dialog/alert-dialog-footer.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLDivElement>> = $props();\n</script>\n\n<div\n\tbind:this={ref}\n\tdata-slot=\"alert-dialog-footer\"\n\tclass={cn(\n\t\t\"cn-alert-dialog-footer flex flex-col-reverse gap-2 group-data-[size=sm]/alert-dialog-content:grid group-data-[size=sm]/alert-dialog-content:grid-cols-2 sm:flex-row sm:justify-end\",\n\t\tclassName\n\t)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/alert-dialog/alert-dialog-header.svelte",
    "content": "<script lang=\"ts\">\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLDivElement>> = $props();\n</script>\n\n<div\n\tbind:this={ref}\n\tdata-slot=\"alert-dialog-header\"\n\tclass={cn(\"cn-alert-dialog-header\", className)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/alert-dialog/alert-dialog-media.svelte",
    "content": "<script lang=\"ts\">\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLDivElement>> = $props();\n</script>\n\n<div\n\tbind:this={ref}\n\tdata-slot=\"alert-dialog-media\"\n\tclass={cn(\"cn-alert-dialog-media\", className)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/alert-dialog/alert-dialog-overlay.svelte",
    "content": "<script lang=\"ts\">\n\timport { AlertDialog as AlertDialogPrimitive } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\t...restProps\n\t}: AlertDialogPrimitive.OverlayProps = $props();\n</script>\n\n<AlertDialogPrimitive.Overlay\n\tbind:ref\n\tdata-slot=\"alert-dialog-overlay\"\n\tclass={cn(\"cn-alert-dialog-overlay fixed inset-0 z-50\", className)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/alert-dialog/alert-dialog-portal.svelte",
    "content": "<script lang=\"ts\">\n\timport { AlertDialog as AlertDialogPrimitive } from \"bits-ui\";\n\n\tlet { ...restProps }: AlertDialogPrimitive.PortalProps = $props();\n</script>\n\n<AlertDialogPrimitive.Portal {...restProps} />\n"
  },
  {
    "path": "docs/src/lib/registry/ui/alert-dialog/alert-dialog-title.svelte",
    "content": "<script lang=\"ts\">\n\timport { AlertDialog as AlertDialogPrimitive } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\t...restProps\n\t}: AlertDialogPrimitive.TitleProps = $props();\n</script>\n\n<AlertDialogPrimitive.Title\n\tbind:ref\n\tdata-slot=\"alert-dialog-title\"\n\tclass={cn(\"cn-alert-dialog-title\", className)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/alert-dialog/alert-dialog-trigger.svelte",
    "content": "<script lang=\"ts\">\n\timport { AlertDialog as AlertDialogPrimitive } from \"bits-ui\";\n\n\tlet { ref = $bindable(null), ...restProps }: AlertDialogPrimitive.TriggerProps = $props();\n</script>\n\n<AlertDialogPrimitive.Trigger bind:ref data-slot=\"alert-dialog-trigger\" {...restProps} />\n"
  },
  {
    "path": "docs/src/lib/registry/ui/alert-dialog/alert-dialog.svelte",
    "content": "<script lang=\"ts\">\n\timport { AlertDialog as AlertDialogPrimitive } from \"bits-ui\";\n\n\tlet { open = $bindable(false), ...restProps }: AlertDialogPrimitive.RootProps = $props();\n</script>\n\n<AlertDialogPrimitive.Root bind:open {...restProps} />\n"
  },
  {
    "path": "docs/src/lib/registry/ui/alert-dialog/index.ts",
    "content": "import Root from \"./alert-dialog.svelte\";\nimport Portal from \"./alert-dialog-portal.svelte\";\nimport Trigger from \"./alert-dialog-trigger.svelte\";\nimport Title from \"./alert-dialog-title.svelte\";\nimport Action from \"./alert-dialog-action.svelte\";\nimport Cancel from \"./alert-dialog-cancel.svelte\";\nimport Footer from \"./alert-dialog-footer.svelte\";\nimport Header from \"./alert-dialog-header.svelte\";\nimport Overlay from \"./alert-dialog-overlay.svelte\";\nimport Content from \"./alert-dialog-content.svelte\";\nimport Description from \"./alert-dialog-description.svelte\";\nimport Media from \"./alert-dialog-media.svelte\";\n\nexport {\n\tRoot,\n\tTitle,\n\tAction,\n\tCancel,\n\tPortal,\n\tFooter,\n\tHeader,\n\tTrigger,\n\tOverlay,\n\tContent,\n\tDescription,\n\tMedia,\n\t//\n\tRoot as AlertDialog,\n\tTitle as AlertDialogTitle,\n\tAction as AlertDialogAction,\n\tCancel as AlertDialogCancel,\n\tPortal as AlertDialogPortal,\n\tFooter as AlertDialogFooter,\n\tHeader as AlertDialogHeader,\n\tTrigger as AlertDialogTrigger,\n\tOverlay as AlertDialogOverlay,\n\tContent as AlertDialogContent,\n\tDescription as AlertDialogDescription,\n\tMedia as AlertDialogMedia,\n};\n"
  },
  {
    "path": "docs/src/lib/registry/ui/aspect-ratio/aspect-ratio.svelte",
    "content": "<script lang=\"ts\">\n\timport { AspectRatio as AspectRatioPrimitive } from \"bits-ui\";\n\n\tlet { ref = $bindable(null), ...restProps }: AspectRatioPrimitive.RootProps = $props();\n</script>\n\n<AspectRatioPrimitive.Root bind:ref data-slot=\"aspect-ratio\" {...restProps} />\n"
  },
  {
    "path": "docs/src/lib/registry/ui/aspect-ratio/index.ts",
    "content": "import Root from \"./aspect-ratio.svelte\";\n\nexport { Root, Root as AspectRatio };\n"
  },
  {
    "path": "docs/src/lib/registry/ui/avatar/avatar-badge.svelte",
    "content": "<script lang=\"ts\">\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLSpanElement>> = $props();\n</script>\n\n<span\n\tbind:this={ref}\n\tdata-slot=\"avatar-badge\"\n\tclass={cn(\n\t\t\"cn-avatar-badge absolute right-0 bottom-0 z-10 inline-flex items-center justify-center rounded-full bg-blend-color ring-2 select-none\",\n\t\t\"group-data-[size=sm]/avatar:size-2 group-data-[size=sm]/avatar:[&>svg]:hidden\",\n\t\t\"group-data-[size=default]/avatar:size-2.5 group-data-[size=default]/avatar:[&>svg]:size-2\",\n\t\t\"group-data-[size=lg]/avatar:size-3 group-data-[size=lg]/avatar:[&>svg]:size-2\",\n\t\tclassName\n\t)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</span>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/avatar/avatar-fallback.svelte",
    "content": "<script lang=\"ts\">\n\timport { Avatar as AvatarPrimitive } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\t...restProps\n\t}: AvatarPrimitive.FallbackProps = $props();\n</script>\n\n<AvatarPrimitive.Fallback\n\tbind:ref\n\tdata-slot=\"avatar-fallback\"\n\tclass={cn(\n\t\t\"cn-avatar-fallback flex size-full items-center justify-center text-sm group-data-[size=sm]/avatar:text-xs\",\n\t\tclassName\n\t)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/avatar/avatar-group-count.svelte",
    "content": "<script lang=\"ts\">\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLDivElement>> = $props();\n</script>\n\n<div\n\tbind:this={ref}\n\tdata-slot=\"avatar-group-count\"\n\tclass={cn(\n\t\t\"cn-avatar-group-count ring-background relative flex shrink-0 items-center justify-center ring-2\",\n\t\tclassName\n\t)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/avatar/avatar-group.svelte",
    "content": "<script lang=\"ts\">\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLDivElement>> = $props();\n</script>\n\n<div\n\tbind:this={ref}\n\tdata-slot=\"avatar-group\"\n\tclass={cn(\n\t\t\"cn-avatar-group *:data-[slot=avatar]:ring-background group/avatar-group flex -space-x-2 *:data-[slot=avatar]:ring-2\",\n\t\tclassName\n\t)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/avatar/avatar-image.svelte",
    "content": "<script lang=\"ts\">\n\timport { Avatar as AvatarPrimitive } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\t...restProps\n\t}: AvatarPrimitive.ImageProps = $props();\n</script>\n\n<AvatarPrimitive.Image\n\tbind:ref\n\tdata-slot=\"avatar-image\"\n\tclass={cn(\"cn-avatar-image aspect-square size-full object-cover\", className)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/avatar/avatar.svelte",
    "content": "<script lang=\"ts\">\n\timport { Avatar as AvatarPrimitive } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tloadingStatus = $bindable(\"loading\"),\n\t\tsize = \"default\",\n\t\tclass: className,\n\t\t...restProps\n\t}: AvatarPrimitive.RootProps & {\n\t\tsize?: \"default\" | \"sm\" | \"lg\";\n\t} = $props();\n</script>\n\n<AvatarPrimitive.Root\n\tbind:ref\n\tbind:loadingStatus\n\tdata-slot=\"avatar\"\n\tdata-size={size}\n\tclass={cn(\n\t\t\"cn-avatar after:border-border group/avatar relative flex shrink-0 select-none after:absolute after:inset-0 after:border after:mix-blend-darken dark:after:mix-blend-lighten\",\n\t\tclassName\n\t)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/avatar/index.ts",
    "content": "import Root from \"./avatar.svelte\";\nimport Image from \"./avatar-image.svelte\";\nimport Fallback from \"./avatar-fallback.svelte\";\nimport Badge from \"./avatar-badge.svelte\";\nimport Group from \"./avatar-group.svelte\";\nimport GroupCount from \"./avatar-group-count.svelte\";\n\nexport {\n\tRoot,\n\tImage,\n\tFallback,\n\tBadge,\n\tGroup,\n\tGroupCount,\n\t//\n\tRoot as Avatar,\n\tImage as AvatarImage,\n\tFallback as AvatarFallback,\n\tBadge as AvatarBadge,\n\tGroup as AvatarGroup,\n\tGroupCount as AvatarGroupCount,\n};\n"
  },
  {
    "path": "docs/src/lib/registry/ui/badge/badge.svelte",
    "content": "<script lang=\"ts\" module>\n\timport { type VariantProps, tv } from \"tailwind-variants\";\n\n\texport const badgeVariants = tv({\n\t\tbase: \"cn-badge focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive group/badge inline-flex w-fit shrink-0 items-center justify-center overflow-hidden whitespace-nowrap transition-colors focus-visible:ring-[3px] [&>svg]:pointer-events-none\",\n\t\tvariants: {\n\t\t\tvariant: {\n\t\t\t\tdefault: \"cn-badge-variant-default\",\n\t\t\t\tsecondary: \"cn-badge-variant-secondary\",\n\t\t\t\tdestructive: \"cn-badge-variant-destructive\",\n\t\t\t\toutline: \"cn-badge-variant-outline\",\n\t\t\t\tghost: \"cn-badge-variant-ghost\",\n\t\t\t\tlink: \"cn-badge-variant-link\",\n\t\t\t},\n\t\t},\n\t\tdefaultVariants: {\n\t\t\tvariant: \"default\",\n\t\t},\n\t});\n\n\texport type BadgeVariant = VariantProps<typeof badgeVariants>[\"variant\"];\n</script>\n\n<script lang=\"ts\">\n\timport type { HTMLAnchorAttributes } from \"svelte/elements\";\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\thref,\n\t\tclass: className,\n\t\tvariant = \"default\",\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAnchorAttributes> & {\n\t\tvariant?: BadgeVariant;\n\t} = $props();\n</script>\n\n<svelte:element\n\tthis={href ? \"a\" : \"span\"}\n\tbind:this={ref}\n\tdata-slot=\"badge\"\n\t{href}\n\tclass={cn(badgeVariants({ variant }), className)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</svelte:element>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/badge/index.ts",
    "content": "export { default as Badge } from \"./badge.svelte\";\nexport { badgeVariants, type BadgeVariant } from \"./badge.svelte\";\n"
  },
  {
    "path": "docs/src/lib/registry/ui/breadcrumb/breadcrumb-ellipsis.svelte",
    "content": "<script lang=\"ts\">\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\timport { cn, type WithElementRef, type WithoutChildren } from \"$lib/utils.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\t...restProps\n\t}: WithoutChildren<WithElementRef<HTMLAttributes<HTMLSpanElement>>> = $props();\n</script>\n\n<span\n\tbind:this={ref}\n\tdata-slot=\"breadcrumb-ellipsis\"\n\trole=\"presentation\"\n\taria-hidden=\"true\"\n\tclass={cn(\"cn-breadcrumb-ellipsis flex items-center justify-center\", className)}\n\t{...restProps}\n>\n\t<IconPlaceholder\n\t\tlucide=\"MoreHorizontalIcon\"\n\t\ttabler=\"IconDots\"\n\t\thugeicons=\"MoreHorizontalCircle01Icon\"\n\t\tphosphor=\"DotsThreeIcon\"\n\t\tremixicon=\"RiMoreLine\"\n\t/>\n\t<span class=\"sr-only\">More</span>\n</span>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/breadcrumb/breadcrumb-item.svelte",
    "content": "<script lang=\"ts\">\n\timport type { HTMLLiAttributes } from \"svelte/elements\";\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLLiAttributes> = $props();\n</script>\n\n<li\n\tbind:this={ref}\n\tdata-slot=\"breadcrumb-item\"\n\tclass={cn(\"cn-breadcrumb-item inline-flex items-center\", className)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</li>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/breadcrumb/breadcrumb-link.svelte",
    "content": "<script lang=\"ts\">\n\timport type { HTMLAnchorAttributes } from \"svelte/elements\";\n\timport type { Snippet } from \"svelte\";\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\thref = undefined,\n\t\tchild,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAnchorAttributes> & {\n\t\tchild?: Snippet<[{ props: HTMLAnchorAttributes }]>;\n\t} = $props();\n\n\tconst attrs = $derived({\n\t\t\"data-slot\": \"breadcrumb-link\",\n\t\tclass: cn(\"cn-breadcrumb-link\", className),\n\t\thref,\n\t\t...restProps,\n\t});\n</script>\n\n{#if child}\n\t{@render child({ props: attrs })}\n{:else}\n\t<a bind:this={ref} {...attrs}>\n\t\t{@render children?.()}\n\t</a>\n{/if}\n"
  },
  {
    "path": "docs/src/lib/registry/ui/breadcrumb/breadcrumb-list.svelte",
    "content": "<script lang=\"ts\">\n\timport type { HTMLOlAttributes } from \"svelte/elements\";\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLOlAttributes> = $props();\n</script>\n\n<ol\n\tbind:this={ref}\n\tdata-slot=\"breadcrumb-list\"\n\tclass={cn(\"cn-breadcrumb-list flex flex-wrap items-center wrap-break-word\", className)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</ol>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/breadcrumb/breadcrumb-page.svelte",
    "content": "<script lang=\"ts\">\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLSpanElement>> = $props();\n</script>\n\n<span\n\tbind:this={ref}\n\tdata-slot=\"breadcrumb-page\"\n\trole=\"link\"\n\taria-disabled=\"true\"\n\taria-current=\"page\"\n\tclass={cn(\"cn-breadcrumb-page\", className)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</span>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/breadcrumb/breadcrumb-separator.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\timport type { HTMLLiAttributes } from \"svelte/elements\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLLiAttributes> = $props();\n</script>\n\n<li\n\tbind:this={ref}\n\tdata-slot=\"breadcrumb-separator\"\n\trole=\"presentation\"\n\taria-hidden=\"true\"\n\tclass={cn(\"cn-breadcrumb-separator\", className)}\n\t{...restProps}\n>\n\t{#if children}\n\t\t{@render children?.()}\n\t{:else}\n\t\t<IconPlaceholder\n\t\t\tlucide=\"ChevronRightIcon\"\n\t\t\ttabler=\"IconChevronRight\"\n\t\t\thugeicons=\"ArrowRight01Icon\"\n\t\t\tphosphor=\"CaretRightIcon\"\n\t\t\tremixicon=\"RiArrowRightSLine\"\n\t\t/>\n\t{/if}\n</li>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/breadcrumb/breadcrumb.svelte",
    "content": "<script lang=\"ts\">\n\timport type { WithElementRef } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLElement>> = $props();\n</script>\n\n<nav\n\tbind:this={ref}\n\tdata-slot=\"breadcrumb\"\n\taria-label=\"breadcrumb\"\n\tclass={cn(\"cn-breadcrumb\", className)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</nav>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/breadcrumb/index.ts",
    "content": "import Root from \"./breadcrumb.svelte\";\nimport Ellipsis from \"./breadcrumb-ellipsis.svelte\";\nimport Item from \"./breadcrumb-item.svelte\";\nimport Separator from \"./breadcrumb-separator.svelte\";\nimport Link from \"./breadcrumb-link.svelte\";\nimport List from \"./breadcrumb-list.svelte\";\nimport Page from \"./breadcrumb-page.svelte\";\n\nexport {\n\tRoot,\n\tEllipsis,\n\tItem,\n\tSeparator,\n\tLink,\n\tList,\n\tPage,\n\t//\n\tRoot as Breadcrumb,\n\tEllipsis as BreadcrumbEllipsis,\n\tItem as BreadcrumbItem,\n\tSeparator as BreadcrumbSeparator,\n\tLink as BreadcrumbLink,\n\tList as BreadcrumbList,\n\tPage as BreadcrumbPage,\n};\n"
  },
  {
    "path": "docs/src/lib/registry/ui/button/button.svelte",
    "content": "<script lang=\"ts\" module>\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\timport type { HTMLAnchorAttributes, HTMLButtonAttributes } from \"svelte/elements\";\n\timport { type VariantProps, tv } from \"tailwind-variants\";\n\n\texport const buttonVariants = tv({\n\t\tbase: \"cn-button group/button inline-flex shrink-0 items-center justify-center whitespace-nowrap transition-all outline-none select-none disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n\t\tvariants: {\n\t\t\tvariant: {\n\t\t\t\tdefault: \"cn-button-variant-default\",\n\t\t\t\toutline: \"cn-button-variant-outline\",\n\t\t\t\tsecondary: \"cn-button-variant-secondary\",\n\t\t\t\tghost: \"cn-button-variant-ghost\",\n\t\t\t\tdestructive: \"cn-button-variant-destructive\",\n\t\t\t\tlink: \"cn-button-variant-link\",\n\t\t\t},\n\t\t\tsize: {\n\t\t\t\tdefault: \"cn-button-size-default\",\n\t\t\t\txs: \"cn-button-size-xs\",\n\t\t\t\tsm: \"cn-button-size-sm\",\n\t\t\t\tlg: \"cn-button-size-lg\",\n\t\t\t\ticon: \"cn-button-size-icon\",\n\t\t\t\t\"icon-xs\": \"cn-button-size-icon-xs\",\n\t\t\t\t\"icon-sm\": \"cn-button-size-icon-sm\",\n\t\t\t\t\"icon-lg\": \"cn-button-size-icon-lg\",\n\t\t\t},\n\t\t},\n\t\tdefaultVariants: {\n\t\t\tvariant: \"default\",\n\t\t\tsize: \"default\",\n\t\t},\n\t});\n\n\texport type ButtonVariant = VariantProps<typeof buttonVariants>[\"variant\"];\n\texport type ButtonSize = VariantProps<typeof buttonVariants>[\"size\"];\n\n\texport type ButtonProps = WithElementRef<HTMLButtonAttributes> &\n\t\tWithElementRef<HTMLAnchorAttributes> & {\n\t\t\tvariant?: ButtonVariant;\n\t\t\tsize?: ButtonSize;\n\t\t};\n</script>\n\n<script lang=\"ts\">\n\tlet {\n\t\tclass: className,\n\t\tvariant = \"default\",\n\t\tsize = \"default\",\n\t\tref = $bindable(null),\n\t\thref = undefined,\n\t\ttype = \"button\",\n\t\tdisabled,\n\t\tchildren,\n\t\t...restProps\n\t}: ButtonProps = $props();\n</script>\n\n{#if href}\n\t<a\n\t\tbind:this={ref}\n\t\tdata-slot=\"button\"\n\t\tclass={cn(buttonVariants({ variant, size }), className)}\n\t\thref={disabled ? undefined : href}\n\t\taria-disabled={disabled}\n\t\trole={disabled ? \"link\" : undefined}\n\t\ttabindex={disabled ? -1 : undefined}\n\t\t{...restProps}\n\t>\n\t\t{@render children?.()}\n\t</a>\n{:else}\n\t<button\n\t\tbind:this={ref}\n\t\tdata-slot=\"button\"\n\t\tclass={cn(buttonVariants({ variant, size }), className)}\n\t\t{type}\n\t\t{disabled}\n\t\t{...restProps}\n\t>\n\t\t{@render children?.()}\n\t</button>\n{/if}\n"
  },
  {
    "path": "docs/src/lib/registry/ui/button/index.ts",
    "content": "import Root, {\n\ttype ButtonProps,\n\ttype ButtonSize,\n\ttype ButtonVariant,\n\tbuttonVariants,\n} from \"./button.svelte\";\n\nexport {\n\tRoot,\n\ttype ButtonProps as Props,\n\t//\n\tRoot as Button,\n\tbuttonVariants,\n\ttype ButtonProps,\n\ttype ButtonSize,\n\ttype ButtonVariant,\n};\n"
  },
  {
    "path": "docs/src/lib/registry/ui/button-group/button-group-separator.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn } from \"$lib/utils.js\";\n\timport type { ComponentProps } from \"svelte\";\n\timport { Separator } from \"$lib/registry/ui/separator/index.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\torientation = \"vertical\",\n\t\t...restProps\n\t}: ComponentProps<typeof Separator> = $props();\n</script>\n\n<Separator\n\tbind:ref\n\tdata-slot=\"button-group-separator\"\n\t{orientation}\n\tclass={cn(\n\t\t\"cn-button-group-separator relative self-stretch data-[orientation=horizontal]:mx-px data-[orientation=horizontal]:w-auto data-[orientation=vertical]:my-px data-[orientation=vertical]:h-auto\",\n\t\tclassName\n\t)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/button-group/button-group-text.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\timport type { Snippet } from \"svelte\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchild,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLDivElement>> & {\n\t\tchild?: Snippet<[{ props: Record<string, unknown> }]>;\n\t} = $props();\n\n\tconst mergedProps = $derived({\n\t\t...restProps,\n\t\tclass: cn(\"cn-button-group-text flex items-center [&_svg]:pointer-events-none\", className),\n\t\t\"data-slot\": \"button-group-text\",\n\t});\n</script>\n\n{#if child}\n\t{@render child({ props: mergedProps })}\n{:else}\n\t<div bind:this={ref} {...mergedProps}>\n\t\t{@render mergedProps.children?.()}\n\t</div>\n{/if}\n"
  },
  {
    "path": "docs/src/lib/registry/ui/button-group/button-group.svelte",
    "content": "<script lang=\"ts\" module>\n\timport { tv, type VariantProps } from \"tailwind-variants\";\n\n\texport const buttonGroupVariants = tv({\n\t\tbase: \"cn-button-group flex w-fit items-stretch [&>*]:focus-visible:relative [&>*]:focus-visible:z-10 [&>[data-slot=select-trigger]:not([class*='w-'])]:w-fit [&>input]:flex-1\",\n\t\tvariants: {\n\t\t\torientation: {\n\t\t\t\thorizontal:\n\t\t\t\t\t\"cn-button-group-orientation-horizontal [&>[data-slot]]:rounded-r-none [&>[data-slot]~[data-slot]]:rounded-l-none [&>[data-slot]~[data-slot]]:border-l-0\",\n\t\t\t\tvertical:\n\t\t\t\t\t\"cn-button-group-orientation-vertical flex-col [&>[data-slot]]:rounded-b-none [&>[data-slot]~[data-slot]]:rounded-t-none [&>[data-slot]~[data-slot]]:border-t-0\",\n\t\t\t},\n\t\t},\n\t\tdefaultVariants: {\n\t\t\torientation: \"horizontal\",\n\t\t},\n\t});\n\n\texport type ButtonGroupOrientation = VariantProps<typeof buttonGroupVariants>[\"orientation\"];\n</script>\n\n<script lang=\"ts\">\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\torientation = \"horizontal\",\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLDivElement>> & {\n\t\torientation?: ButtonGroupOrientation;\n\t} = $props();\n</script>\n\n<div\n\tbind:this={ref}\n\trole=\"group\"\n\tdata-slot=\"button-group\"\n\tdata-orientation={orientation}\n\tclass={cn(buttonGroupVariants({ orientation }), className)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/button-group/index.ts",
    "content": "import Root, { buttonGroupVariants, type ButtonGroupOrientation } from \"./button-group.svelte\";\nimport Text from \"./button-group-text.svelte\";\nimport Separator from \"./button-group-separator.svelte\";\n\nexport {\n\tRoot,\n\tText,\n\tSeparator,\n\tbuttonGroupVariants,\n\ttype ButtonGroupOrientation,\n\t//\n\tRoot as ButtonGroup,\n\tText as ButtonGroupText,\n\tSeparator as ButtonGroupSeparator,\n};\n"
  },
  {
    "path": "docs/src/lib/registry/ui/calendar/calendar-caption.svelte",
    "content": "<script lang=\"ts\">\n\timport type { ComponentProps } from \"svelte\";\n\timport type Calendar from \"./calendar.svelte\";\n\timport CalendarMonthSelect from \"./calendar-month-select.svelte\";\n\timport CalendarYearSelect from \"./calendar-year-select.svelte\";\n\timport { DateFormatter, getLocalTimeZone, type DateValue } from \"@internationalized/date\";\n\n\tlet {\n\t\tcaptionLayout,\n\t\tmonths,\n\t\tmonthFormat,\n\t\tyears,\n\t\tyearFormat,\n\t\tmonth,\n\t\tlocale,\n\t\tplaceholder = $bindable(),\n\t\tmonthIndex = 0,\n\t}: {\n\t\tcaptionLayout: ComponentProps<typeof Calendar>[\"captionLayout\"];\n\t\tmonths: ComponentProps<typeof CalendarMonthSelect>[\"months\"];\n\t\tmonthFormat: ComponentProps<typeof CalendarMonthSelect>[\"monthFormat\"];\n\t\tyears: ComponentProps<typeof CalendarYearSelect>[\"years\"];\n\t\tyearFormat: ComponentProps<typeof CalendarYearSelect>[\"yearFormat\"];\n\t\tmonth: DateValue;\n\t\tplaceholder: DateValue | undefined;\n\t\tlocale: string;\n\t\tmonthIndex: number;\n\t} = $props();\n\n\tfunction formatYear(date: DateValue) {\n\t\tconst dateObj = date.toDate(getLocalTimeZone());\n\t\tif (typeof yearFormat === \"function\") return yearFormat(dateObj.getFullYear());\n\t\treturn new DateFormatter(locale, { year: yearFormat }).format(dateObj);\n\t}\n\n\tfunction formatMonth(date: DateValue) {\n\t\tconst dateObj = date.toDate(getLocalTimeZone());\n\t\tif (typeof monthFormat === \"function\") return monthFormat(dateObj.getMonth() + 1);\n\t\treturn new DateFormatter(locale, { month: monthFormat }).format(dateObj);\n\t}\n</script>\n\n{#snippet MonthSelect()}\n\t<CalendarMonthSelect\n\t\t{months}\n\t\t{monthFormat}\n\t\tvalue={month.month}\n\t\tonchange={(e) => {\n\t\t\tif (!placeholder) return;\n\t\t\tconst v = Number.parseInt(e.currentTarget.value);\n\t\t\tconst newPlaceholder = placeholder.set({ month: v });\n\t\t\tplaceholder = newPlaceholder.subtract({ months: monthIndex });\n\t\t}}\n\t/>\n{/snippet}\n\n{#snippet YearSelect()}\n\t<CalendarYearSelect {years} {yearFormat} value={month.year} />\n{/snippet}\n\n{#if captionLayout === \"dropdown\"}\n\t{@render MonthSelect()}\n\t{@render YearSelect()}\n{:else if captionLayout === \"dropdown-months\"}\n\t{@render MonthSelect()}\n\t{#if placeholder}\n\t\t{formatYear(placeholder)}\n\t{/if}\n{:else if captionLayout === \"dropdown-years\"}\n\t{#if placeholder}\n\t\t{formatMonth(placeholder)}\n\t{/if}\n\t{@render YearSelect()}\n{:else}\n\t{formatMonth(month)} {formatYear(month)}\n{/if}\n"
  },
  {
    "path": "docs/src/lib/registry/ui/calendar/calendar-cell.svelte",
    "content": "<script lang=\"ts\">\n\timport { Calendar as CalendarPrimitive } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\t...restProps\n\t}: CalendarPrimitive.CellProps = $props();\n</script>\n\n<CalendarPrimitive.Cell\n\tbind:ref\n\tclass={cn(\n\t\t\"relative size-(--cell-size) p-0 text-center text-sm focus-within:z-20 [&:first-child[data-selected]_[data-bits-day]]:rounded-s-(--cell-radius) [&:last-child[data-selected]_[data-bits-day]]:rounded-e-(--cell-radius)\",\n\t\tclassName\n\t)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/calendar/calendar-day.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn } from \"$lib/utils.js\";\n\timport { Calendar as CalendarPrimitive } from \"bits-ui\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\t...restProps\n\t}: CalendarPrimitive.DayProps = $props();\n</script>\n\n<CalendarPrimitive.Day\n\tbind:ref\n\tclass={cn(\n\t\t\"flex size-(--cell-size) flex-col items-center justify-center gap-1 rounded-(--cell-radius) p-0 leading-none font-normal whitespace-nowrap select-none\",\n\t\t\"[&:last-child[data-selected=true]_button]:rounded-r-(--cell-radius)\",\n\t\t\"not-data-selected:hover:bg-accent/50 not-data-selected:hover:text-accent-foreground\",\n\t\t\"[&[data-today]:not([data-selected])]:bg-accent [&[data-today]:not([data-selected])]:text-accent-foreground [&[data-today][data-disabled]]:text-muted-foreground\",\n\t\t\"data-[selected]:bg-primary data-[selected]:text-primary-foreground data-[selected]:hover:text-foreground\",\n\t\t// Outside months\n\t\t\"[&[data-outside-month]:not([data-selected])]:text-muted-foreground [&[data-outside-month]:not([data-selected])]:hover:text-accent-foreground\",\n\t\t// Disabled\n\t\t\"data-[disabled]:text-muted-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n\t\t// Unavailable\n\t\t\"data-[unavailable]:text-muted-foreground data-[unavailable]:line-through\",\n\t\t// focus\n\t\t\"focus:border-ring focus:ring-ring/50 focus:relative\",\n\t\t// inner spans\n\t\t\"[&>span]:text-xs [&>span]:opacity-70\",\n\t\tclassName\n\t)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/calendar/calendar-grid-body.svelte",
    "content": "<script lang=\"ts\">\n\timport { Calendar as CalendarPrimitive } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\t...restProps\n\t}: CalendarPrimitive.GridBodyProps = $props();\n</script>\n\n<CalendarPrimitive.GridBody bind:ref class={cn(className)} {...restProps} />\n"
  },
  {
    "path": "docs/src/lib/registry/ui/calendar/calendar-grid-head.svelte",
    "content": "<script lang=\"ts\">\n\timport { Calendar as CalendarPrimitive } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\t...restProps\n\t}: CalendarPrimitive.GridHeadProps = $props();\n</script>\n\n<CalendarPrimitive.GridHead bind:ref class={cn(className)} {...restProps} />\n"
  },
  {
    "path": "docs/src/lib/registry/ui/calendar/calendar-grid-row.svelte",
    "content": "<script lang=\"ts\">\n\timport { Calendar as CalendarPrimitive } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\t...restProps\n\t}: CalendarPrimitive.GridRowProps = $props();\n</script>\n\n<CalendarPrimitive.GridRow bind:ref class={cn(\"flex\", className)} {...restProps} />\n"
  },
  {
    "path": "docs/src/lib/registry/ui/calendar/calendar-grid.svelte",
    "content": "<script lang=\"ts\">\n\timport { Calendar as CalendarPrimitive } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\t...restProps\n\t}: CalendarPrimitive.GridProps = $props();\n</script>\n\n<CalendarPrimitive.Grid\n\tbind:ref\n\tclass={cn(\"flex w-full border-collapse flex-col\", className)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/calendar/calendar-head-cell.svelte",
    "content": "<script lang=\"ts\">\n\timport { Calendar as CalendarPrimitive } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\t...restProps\n\t}: CalendarPrimitive.HeadCellProps = $props();\n</script>\n\n<CalendarPrimitive.HeadCell\n\tbind:ref\n\tclass={cn(\n\t\t\"text-muted-foreground w-(--cell-size) rounded-md text-[0.8rem] font-normal\",\n\t\tclassName\n\t)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/calendar/calendar-header.svelte",
    "content": "<script lang=\"ts\">\n\timport { Calendar as CalendarPrimitive } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\t...restProps\n\t}: CalendarPrimitive.HeaderProps = $props();\n</script>\n\n<CalendarPrimitive.Header\n\tbind:ref\n\tclass={cn(\n\t\t\"flex h-(--cell-size) w-full items-center justify-center gap-1.5 text-sm font-medium\",\n\t\tclassName\n\t)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/calendar/calendar-heading.svelte",
    "content": "<script lang=\"ts\">\n\timport { Calendar as CalendarPrimitive } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\t...restProps\n\t}: CalendarPrimitive.HeadingProps = $props();\n</script>\n\n<CalendarPrimitive.Heading\n\tbind:ref\n\tclass={cn(\"px-(--cell-size) text-sm font-medium\", className)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/calendar/calendar-month-select.svelte",
    "content": "<script lang=\"ts\">\n\timport { Calendar as CalendarPrimitive } from \"bits-ui\";\n\timport { cn, type WithoutChildrenOrChild } from \"$lib/utils.js\";\n\timport ChevronDownIcon from \"@lucide/svelte/icons/chevron-down\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tvalue,\n\t\tonchange,\n\t\t...restProps\n\t}: WithoutChildrenOrChild<CalendarPrimitive.MonthSelectProps> = $props();\n</script>\n\n<span\n\tclass={cn(\n\t\t\"has-focus:border-ring border-input has-focus:ring-ring/50 relative flex rounded-md border shadow-xs has-focus:ring-[3px]\",\n\t\tclassName\n\t)}\n>\n\t<CalendarPrimitive.MonthSelect\n\t\tbind:ref\n\t\tclass=\"bg-background dark:bg-popover dark:text-popover-foreground absolute inset-0 opacity-0\"\n\t\t{...restProps}\n\t>\n\t\t{#snippet child({ props, monthItems, selectedMonthItem })}\n\t\t\t<select {...props} {value} {onchange}>\n\t\t\t\t{#each monthItems as monthItem (monthItem.value)}\n\t\t\t\t\t<option\n\t\t\t\t\t\tvalue={monthItem.value}\n\t\t\t\t\t\tselected={value !== undefined\n\t\t\t\t\t\t\t? monthItem.value === value\n\t\t\t\t\t\t\t: monthItem.value === selectedMonthItem.value}\n\t\t\t\t\t>\n\t\t\t\t\t\t{monthItem.label}\n\t\t\t\t\t</option>\n\t\t\t\t{/each}\n\t\t\t</select>\n\t\t\t<span\n\t\t\t\tclass=\"[&>svg]:text-muted-foreground flex h-(--cell-size) items-center gap-1 rounded-md ps-2 pe-1 text-sm font-medium select-none [&>svg]:size-3.5\"\n\t\t\t\taria-hidden=\"true\"\n\t\t\t>\n\t\t\t\t{monthItems.find((item) => item.value === value)?.label || selectedMonthItem.label}\n\t\t\t\t<ChevronDownIcon class=\"size-4\" />\n\t\t\t</span>\n\t\t{/snippet}\n\t</CalendarPrimitive.MonthSelect>\n</span>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/calendar/calendar-month.svelte",
    "content": "<script lang=\"ts\">\n\timport { type WithElementRef, cn } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLElement>> = $props();\n</script>\n\n<div {...restProps} bind:this={ref} class={cn(\"flex w-full flex-col gap-4\", className)}>\n\t{@render children?.()}\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/calendar/calendar-months.svelte",
    "content": "<script lang=\"ts\">\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLDivElement>> = $props();\n</script>\n\n<div\n\tbind:this={ref}\n\tclass={cn(\"relative flex flex-col gap-4 md:flex-row\", className)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/calendar/calendar-nav.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLElement>> = $props();\n</script>\n\n<nav\n\t{...restProps}\n\tbind:this={ref}\n\tclass={cn(\"absolute inset-x-0 top-0 flex w-full items-center justify-between gap-1\", className)}\n>\n\t{@render children?.()}\n</nav>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/calendar/calendar-next-button.svelte",
    "content": "<script lang=\"ts\">\n\timport { Calendar as CalendarPrimitive } from \"bits-ui\";\n\timport ChevronRightIcon from \"@lucide/svelte/icons/chevron-right\";\n\timport { buttonVariants, type ButtonVariant } from \"$lib/registry/ui/button/index.js\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\tvariant = \"ghost\",\n\t\t...restProps\n\t}: CalendarPrimitive.NextButtonProps & {\n\t\tvariant?: ButtonVariant;\n\t} = $props();\n</script>\n\n{#snippet Fallback()}\n\t<ChevronRightIcon class=\"size-4\" />\n{/snippet}\n\n<CalendarPrimitive.NextButton\n\tbind:ref\n\tclass={cn(\n\t\tbuttonVariants({ variant }),\n\t\t\"size-(--cell-size) bg-transparent p-0 select-none disabled:opacity-50 rtl:rotate-180\",\n\t\tclassName\n\t)}\n\t{...restProps}\n>\n\t{#if children}\n\t\t{@render children?.()}\n\t{:else}\n\t\t{@render Fallback()}\n\t{/if}\n</CalendarPrimitive.NextButton>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/calendar/calendar-prev-button.svelte",
    "content": "<script lang=\"ts\">\n\timport { Calendar as CalendarPrimitive } from \"bits-ui\";\n\timport ChevronLeftIcon from \"@lucide/svelte/icons/chevron-left\";\n\timport { buttonVariants, type ButtonVariant } from \"$lib/registry/ui/button/index.js\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\tvariant = \"ghost\",\n\t\t...restProps\n\t}: CalendarPrimitive.PrevButtonProps & {\n\t\tvariant?: ButtonVariant;\n\t} = $props();\n</script>\n\n{#snippet Fallback()}\n\t<ChevronLeftIcon class=\"size-4\" />\n{/snippet}\n\n<CalendarPrimitive.PrevButton\n\tbind:ref\n\tclass={cn(\n\t\tbuttonVariants({ variant }),\n\t\t\"size-(--cell-size) bg-transparent p-0 select-none disabled:opacity-50 rtl:rotate-180\",\n\t\tclassName\n\t)}\n\t{...restProps}\n>\n\t{#if children}\n\t\t{@render children?.()}\n\t{:else}\n\t\t{@render Fallback()}\n\t{/if}\n</CalendarPrimitive.PrevButton>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/calendar/calendar-year-select.svelte",
    "content": "<script lang=\"ts\">\n\timport { Calendar as CalendarPrimitive } from \"bits-ui\";\n\timport { cn, type WithoutChildrenOrChild } from \"$lib/utils.js\";\n\timport ChevronDownIcon from \"@lucide/svelte/icons/chevron-down\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tvalue,\n\t\t...restProps\n\t}: WithoutChildrenOrChild<CalendarPrimitive.YearSelectProps> = $props();\n</script>\n\n<span\n\tclass={cn(\n\t\t\"has-focus:border-ring border-input has-focus:ring-ring/50 relative flex rounded-md border shadow-xs has-focus:ring-[3px]\",\n\t\tclassName\n\t)}\n>\n\t<CalendarPrimitive.YearSelect\n\t\tbind:ref\n\t\tclass=\"dark:bg-popover dark:text-popover-foreground absolute inset-0 opacity-0\"\n\t\t{...restProps}\n\t>\n\t\t{#snippet child({ props, yearItems, selectedYearItem })}\n\t\t\t<select {...props} {value}>\n\t\t\t\t{#each yearItems as yearItem (yearItem.value)}\n\t\t\t\t\t<option\n\t\t\t\t\t\tvalue={yearItem.value}\n\t\t\t\t\t\tselected={value !== undefined\n\t\t\t\t\t\t\t? yearItem.value === value\n\t\t\t\t\t\t\t: yearItem.value === selectedYearItem.value}\n\t\t\t\t\t>\n\t\t\t\t\t\t{yearItem.label}\n\t\t\t\t\t</option>\n\t\t\t\t{/each}\n\t\t\t</select>\n\t\t\t<span\n\t\t\t\tclass=\"[&>svg]:text-muted-foreground flex h-(--cell-size) items-center gap-1 rounded-md ps-2 pe-1 text-sm font-medium select-none [&>svg]:size-3.5\"\n\t\t\t\taria-hidden=\"true\"\n\t\t\t>\n\t\t\t\t{yearItems.find((item) => item.value === value)?.label || selectedYearItem.label}\n\t\t\t\t<ChevronDownIcon class=\"size-4\" />\n\t\t\t</span>\n\t\t{/snippet}\n\t</CalendarPrimitive.YearSelect>\n</span>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/calendar/calendar.svelte",
    "content": "<script lang=\"ts\">\n\timport { Calendar as CalendarPrimitive } from \"bits-ui\";\n\timport * as Calendar from \"./index.js\";\n\timport { cn, type WithoutChildrenOrChild } from \"$lib/utils.js\";\n\timport type { ButtonVariant } from \"../button/button.svelte\";\n\timport { isEqualMonth, type DateValue } from \"@internationalized/date\";\n\timport type { Snippet } from \"svelte\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tvalue = $bindable(),\n\t\tplaceholder = $bindable(),\n\t\tclass: className,\n\t\tweekdayFormat = \"short\",\n\t\tbuttonVariant = \"ghost\",\n\t\tcaptionLayout = \"label\",\n\t\tlocale = \"en-US\",\n\t\tmonths: monthsProp,\n\t\tyears,\n\t\tmonthFormat: monthFormatProp,\n\t\tyearFormat = \"numeric\",\n\t\tday,\n\t\tdisableDaysOutsideMonth = false,\n\t\t...restProps\n\t}: WithoutChildrenOrChild<CalendarPrimitive.RootProps> & {\n\t\tbuttonVariant?: ButtonVariant;\n\t\tcaptionLayout?: \"dropdown\" | \"dropdown-months\" | \"dropdown-years\" | \"label\";\n\t\tmonths?: CalendarPrimitive.MonthSelectProps[\"months\"];\n\t\tyears?: CalendarPrimitive.YearSelectProps[\"years\"];\n\t\tmonthFormat?: CalendarPrimitive.MonthSelectProps[\"monthFormat\"];\n\t\tyearFormat?: CalendarPrimitive.YearSelectProps[\"yearFormat\"];\n\t\tday?: Snippet<[{ day: DateValue; outsideMonth: boolean }]>;\n\t} = $props();\n\n\tconst monthFormat = $derived.by(() => {\n\t\tif (monthFormatProp) return monthFormatProp;\n\t\tif (captionLayout.startsWith(\"dropdown\")) return \"short\";\n\t\treturn \"long\";\n\t});\n</script>\n\n<!--\nDiscriminated Unions + Destructing (required for bindable) do not\nget along, so we shut typescript up by casting `value` to `never`.\n-->\n<CalendarPrimitive.Root\n\tbind:value={value as never}\n\tbind:ref\n\tbind:placeholder\n\t{weekdayFormat}\n\t{disableDaysOutsideMonth}\n\tclass={cn(\n\t\t\"cn-calendar bg-background group/calendar in-data-[slot=card-content]:bg-transparent in-data-[slot=popover-content]:bg-transparent\",\n\t\tclassName\n\t)}\n\t{locale}\n\t{monthFormat}\n\t{yearFormat}\n\t{...restProps}\n>\n\t{#snippet children({ months, weekdays })}\n\t\t<Calendar.Months>\n\t\t\t<Calendar.Nav>\n\t\t\t\t<Calendar.PrevButton variant={buttonVariant} />\n\t\t\t\t<Calendar.NextButton variant={buttonVariant} />\n\t\t\t</Calendar.Nav>\n\t\t\t{#each months as month, monthIndex (month)}\n\t\t\t\t<Calendar.Month>\n\t\t\t\t\t<Calendar.Header>\n\t\t\t\t\t\t<Calendar.Caption\n\t\t\t\t\t\t\t{captionLayout}\n\t\t\t\t\t\t\tmonths={monthsProp}\n\t\t\t\t\t\t\t{monthFormat}\n\t\t\t\t\t\t\t{years}\n\t\t\t\t\t\t\t{yearFormat}\n\t\t\t\t\t\t\tmonth={month.value}\n\t\t\t\t\t\t\tbind:placeholder\n\t\t\t\t\t\t\t{locale}\n\t\t\t\t\t\t\t{monthIndex}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</Calendar.Header>\n\t\t\t\t\t<Calendar.Grid>\n\t\t\t\t\t\t<Calendar.GridHead>\n\t\t\t\t\t\t\t<Calendar.GridRow class=\"select-none\">\n\t\t\t\t\t\t\t\t{#each weekdays as weekday (weekday)}\n\t\t\t\t\t\t\t\t\t<Calendar.HeadCell>\n\t\t\t\t\t\t\t\t\t\t{weekday.slice(0, 2)}\n\t\t\t\t\t\t\t\t\t</Calendar.HeadCell>\n\t\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t</Calendar.GridRow>\n\t\t\t\t\t\t</Calendar.GridHead>\n\t\t\t\t\t\t<Calendar.GridBody>\n\t\t\t\t\t\t\t{#each month.weeks as weekDates (weekDates)}\n\t\t\t\t\t\t\t\t<Calendar.GridRow class=\"mt-2 w-full\">\n\t\t\t\t\t\t\t\t\t{#each weekDates as date (date)}\n\t\t\t\t\t\t\t\t\t\t<Calendar.Cell {date} month={month.value}>\n\t\t\t\t\t\t\t\t\t\t\t{#if day}\n\t\t\t\t\t\t\t\t\t\t\t\t{@render day({\n\t\t\t\t\t\t\t\t\t\t\t\t\tday: date,\n\t\t\t\t\t\t\t\t\t\t\t\t\toutsideMonth: !isEqualMonth(date, month.value),\n\t\t\t\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t\t\t\t{:else}\n\t\t\t\t\t\t\t\t\t\t\t\t<Calendar.Day />\n\t\t\t\t\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\t\t\t\t</Calendar.Cell>\n\t\t\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t\t</Calendar.GridRow>\n\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t</Calendar.GridBody>\n\t\t\t\t\t</Calendar.Grid>\n\t\t\t\t</Calendar.Month>\n\t\t\t{/each}\n\t\t</Calendar.Months>\n\t{/snippet}\n</CalendarPrimitive.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/calendar/index.ts",
    "content": "import Root from \"./calendar.svelte\";\nimport Cell from \"./calendar-cell.svelte\";\nimport Day from \"./calendar-day.svelte\";\nimport Grid from \"./calendar-grid.svelte\";\nimport Header from \"./calendar-header.svelte\";\nimport Months from \"./calendar-months.svelte\";\nimport GridRow from \"./calendar-grid-row.svelte\";\nimport Heading from \"./calendar-heading.svelte\";\nimport GridBody from \"./calendar-grid-body.svelte\";\nimport GridHead from \"./calendar-grid-head.svelte\";\nimport HeadCell from \"./calendar-head-cell.svelte\";\nimport NextButton from \"./calendar-next-button.svelte\";\nimport PrevButton from \"./calendar-prev-button.svelte\";\nimport MonthSelect from \"./calendar-month-select.svelte\";\nimport YearSelect from \"./calendar-year-select.svelte\";\nimport Month from \"./calendar-month.svelte\";\nimport Nav from \"./calendar-nav.svelte\";\nimport Caption from \"./calendar-caption.svelte\";\n\nexport {\n\tDay,\n\tCell,\n\tGrid,\n\tHeader,\n\tMonths,\n\tGridRow,\n\tHeading,\n\tGridBody,\n\tGridHead,\n\tHeadCell,\n\tNextButton,\n\tPrevButton,\n\tNav,\n\tMonth,\n\tYearSelect,\n\tMonthSelect,\n\tCaption,\n\t//\n\tRoot as Calendar,\n};\n"
  },
  {
    "path": "docs/src/lib/registry/ui/card/card-action.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLDivElement>> = $props();\n</script>\n\n<div\n\tbind:this={ref}\n\tdata-slot=\"card-action\"\n\tclass={cn(\n\t\t\"cn-card-action col-start-2 row-span-2 row-start-1 self-start justify-self-end\",\n\t\tclassName\n\t)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/card/card-content.svelte",
    "content": "<script lang=\"ts\">\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLDivElement>> = $props();\n</script>\n\n<div\n\tbind:this={ref}\n\tdata-slot=\"card-content\"\n\tclass={cn(\"cn-card-content\", className)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/card/card-description.svelte",
    "content": "<script lang=\"ts\">\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLParagraphElement>> = $props();\n</script>\n\n<p\n\tbind:this={ref}\n\tdata-slot=\"card-description\"\n\tclass={cn(\"cn-card-description\", className)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</p>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/card/card-footer.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLDivElement>> = $props();\n</script>\n\n<div\n\tbind:this={ref}\n\tdata-slot=\"card-footer\"\n\tclass={cn(\"cn-card-footer flex items-center\", className)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/card/card-header.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLDivElement>> = $props();\n</script>\n\n<div\n\tbind:this={ref}\n\tdata-slot=\"card-header\"\n\tclass={cn(\n\t\t\"cn-card-header group/card-header @container/card-header grid auto-rows-min items-start has-data-[slot=card-action]:grid-cols-[1fr_auto] has-data-[slot=card-description]:grid-rows-[auto_auto]\",\n\t\tclassName\n\t)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/card/card-title.svelte",
    "content": "<script lang=\"ts\">\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLDivElement>> = $props();\n</script>\n\n<div bind:this={ref} data-slot=\"card-title\" class={cn(\"cn-card-title\", className)} {...restProps}>\n\t{@render children?.()}\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/card/card.svelte",
    "content": "<script lang=\"ts\">\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\tsize = \"default\",\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLDivElement>> & { size?: \"default\" | \"sm\" } = $props();\n</script>\n\n<div\n\tbind:this={ref}\n\tdata-slot=\"card\"\n\tdata-size={size}\n\tclass={cn(\"cn-card group/card flex flex-col\", className)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/card/index.ts",
    "content": "import Root from \"./card.svelte\";\nimport Content from \"./card-content.svelte\";\nimport Description from \"./card-description.svelte\";\nimport Footer from \"./card-footer.svelte\";\nimport Header from \"./card-header.svelte\";\nimport Title from \"./card-title.svelte\";\nimport Action from \"./card-action.svelte\";\n\nexport {\n\tRoot,\n\tContent,\n\tDescription,\n\tFooter,\n\tHeader,\n\tTitle,\n\tAction,\n\t//\n\tRoot as Card,\n\tContent as CardContent,\n\tDescription as CardDescription,\n\tFooter as CardFooter,\n\tHeader as CardHeader,\n\tTitle as CardTitle,\n\tAction as CardAction,\n};\n"
  },
  {
    "path": "docs/src/lib/registry/ui/carousel/carousel-content.svelte",
    "content": "<script lang=\"ts\">\n\timport emblaCarouselSvelte from \"embla-carousel-svelte\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\timport { getEmblaContext } from \"./context.js\";\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLDivElement>> = $props();\n\n\tconst emblaCtx = getEmblaContext(\"<Carousel.Content/>\");\n</script>\n\n<div\n\tdata-slot=\"carousel-content\"\n\tclass=\"overflow-hidden\"\n\tuse:emblaCarouselSvelte={{\n\t\toptions: {\n\t\t\tcontainer: \"[data-embla-container]\",\n\t\t\tslides: \"[data-embla-slide]\",\n\t\t\t...emblaCtx.options,\n\t\t\taxis: emblaCtx.orientation === \"horizontal\" ? \"x\" : \"y\",\n\t\t},\n\t\tplugins: emblaCtx.plugins,\n\t}}\n\tonemblaInit={emblaCtx.onInit}\n>\n\t<div\n\t\tbind:this={ref}\n\t\tclass={cn(\n\t\t\t\"flex\",\n\t\t\temblaCtx.orientation === \"horizontal\" ? \"-ms-4\" : \"-mt-4 flex-col\",\n\t\t\tclassName\n\t\t)}\n\t\tdata-embla-container=\"\"\n\t\t{...restProps}\n\t>\n\t\t{@render children?.()}\n\t</div>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/carousel/carousel-item.svelte",
    "content": "<script lang=\"ts\">\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\timport { getEmblaContext } from \"./context.js\";\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLDivElement>> = $props();\n\n\tconst emblaCtx = getEmblaContext(\"<Carousel.Item/>\");\n</script>\n\n<div\n\tbind:this={ref}\n\tdata-slot=\"carousel-item\"\n\trole=\"group\"\n\taria-roledescription=\"slide\"\n\tclass={cn(\n\t\t\"min-w-0 shrink-0 grow-0 basis-full\",\n\t\temblaCtx.orientation === \"horizontal\" ? \"ps-4\" : \"pt-4\",\n\t\tclassName\n\t)}\n\tdata-embla-slide=\"\"\n\t{...restProps}\n>\n\t{@render children?.()}\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/carousel/carousel-next.svelte",
    "content": "<script lang=\"ts\">\n\timport type { WithoutChildren } from \"bits-ui\";\n\timport { getEmblaContext } from \"./context.js\";\n\timport { cn } from \"$lib/utils.js\";\n\timport { Button, type Props } from \"$lib/registry/ui/button/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tvariant = \"outline\",\n\t\tsize = \"icon-sm\",\n\t\t...restProps\n\t}: WithoutChildren<Props> = $props();\n\n\tconst emblaCtx = getEmblaContext(\"<Carousel.Next/>\");\n</script>\n\n<Button\n\tdata-slot=\"carousel-next\"\n\t{variant}\n\t{size}\n\taria-disabled={!emblaCtx.canScrollNext}\n\tdisabled={!emblaCtx.canScrollNext}\n\tclass={cn(\n\t\t\"cn-carousel-next absolute touch-manipulation\",\n\t\temblaCtx.orientation === \"horizontal\"\n\t\t\t? \"-end-12 top-1/2 -translate-y-1/2\"\n\t\t\t: \"start-1/2 -bottom-12 -translate-x-1/2 rotate-90\",\n\t\tclassName\n\t)}\n\tonclick={emblaCtx.scrollNext}\n\tonkeydown={emblaCtx.handleKeyDown}\n\tbind:ref\n\t{...restProps}\n>\n\t<IconPlaceholder\n\t\tlucide=\"ChevronRightIcon\"\n\t\ttabler=\"IconChevronRight\"\n\t\thugeicons=\"ArrowRight01Icon\"\n\t\tphosphor=\"CaretRightIcon\"\n\t\tremixicon=\"RiArrowRightSLine\"\n\t/>\n\t<span class=\"sr-only\">Next slide</span>\n</Button>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/carousel/carousel-previous.svelte",
    "content": "<script lang=\"ts\">\n\timport type { WithoutChildren } from \"bits-ui\";\n\timport { getEmblaContext } from \"./context.js\";\n\timport { cn } from \"$lib/utils.js\";\n\timport { Button, type Props } from \"$lib/registry/ui/button/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tvariant = \"outline\",\n\t\tsize = \"icon-sm\",\n\t\t...restProps\n\t}: WithoutChildren<Props> = $props();\n\n\tconst emblaCtx = getEmblaContext(\"<Carousel.Previous/>\");\n</script>\n\n<Button\n\tdata-slot=\"carousel-previous\"\n\t{variant}\n\t{size}\n\taria-disabled={!emblaCtx.canScrollPrev}\n\tdisabled={!emblaCtx.canScrollPrev}\n\tclass={cn(\n\t\t\"cn-carousel-previous absolute touch-manipulation\",\n\t\temblaCtx.orientation === \"horizontal\"\n\t\t\t? \"-start-12 top-1/2 -translate-y-1/2\"\n\t\t\t: \"start-1/2 -top-12 -translate-x-1/2 rotate-90\",\n\t\tclassName\n\t)}\n\tonclick={emblaCtx.scrollPrev}\n\tonkeydown={emblaCtx.handleKeyDown}\n\t{...restProps}\n\tbind:ref\n>\n\t<IconPlaceholder\n\t\tlucide=\"ChevronLeftIcon\"\n\t\ttabler=\"IconChevronLeft\"\n\t\thugeicons=\"ArrowLeft01Icon\"\n\t\tphosphor=\"CaretLeftIcon\"\n\t\tremixicon=\"RiArrowLeftSLine\"\n\t/>\n\t<span class=\"sr-only\">Previous slide</span>\n</Button>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/carousel/carousel.svelte",
    "content": "<script lang=\"ts\">\n\timport {\n\t\ttype CarouselAPI,\n\t\ttype CarouselProps,\n\t\ttype EmblaContext,\n\t\tsetEmblaContext,\n\t} from \"./context.js\";\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\topts = {},\n\t\tplugins = [],\n\t\tsetApi = () => {},\n\t\torientation = \"horizontal\",\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<CarouselProps> = $props();\n\n\t// svelte-ignore state_referenced_locally\n\tlet carouselState = $state<EmblaContext>({\n\t\tapi: undefined,\n\t\tscrollPrev,\n\t\tscrollNext,\n\t\torientation,\n\t\tcanScrollNext: false,\n\t\tcanScrollPrev: false,\n\t\thandleKeyDown,\n\t\toptions: opts,\n\t\tplugins,\n\t\tonInit,\n\t\tscrollSnaps: [],\n\t\tselectedIndex: 0,\n\t\tscrollTo,\n\t});\n\n\tsetEmblaContext(carouselState);\n\n\tfunction scrollPrev() {\n\t\tcarouselState.api?.scrollPrev();\n\t}\n\n\tfunction scrollNext() {\n\t\tcarouselState.api?.scrollNext();\n\t}\n\n\tfunction scrollTo(index: number, jump?: boolean) {\n\t\tcarouselState.api?.scrollTo(index, jump);\n\t}\n\n\tfunction onSelect() {\n\t\tif (!carouselState.api) return;\n\t\tcarouselState.selectedIndex = carouselState.api.selectedScrollSnap();\n\t\tcarouselState.canScrollNext = carouselState.api.canScrollNext();\n\t\tcarouselState.canScrollPrev = carouselState.api.canScrollPrev();\n\t}\n\n\tfunction handleKeyDown(e: KeyboardEvent) {\n\t\tif (e.key === \"ArrowLeft\") {\n\t\t\te.preventDefault();\n\t\t\tscrollPrev();\n\t\t} else if (e.key === \"ArrowRight\") {\n\t\t\te.preventDefault();\n\t\t\tscrollNext();\n\t\t}\n\t}\n\n\tfunction onInit(event: CustomEvent<CarouselAPI>) {\n\t\tcarouselState.api = event.detail;\n\t\tsetApi(carouselState.api);\n\n\t\tcarouselState.scrollSnaps = carouselState.api.scrollSnapList();\n\t\tcarouselState.api.on(\"select\", onSelect);\n\t\tonSelect();\n\t}\n\n\t$effect(() => {\n\t\treturn () => {\n\t\t\tcarouselState.api?.off(\"select\", onSelect);\n\t\t};\n\t});\n</script>\n\n<div\n\tbind:this={ref}\n\tdata-slot=\"carousel\"\n\tclass={cn(\"relative\", className)}\n\trole=\"region\"\n\taria-roledescription=\"carousel\"\n\t{...restProps}\n>\n\t{@render children?.()}\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/carousel/context.ts",
    "content": "import type { WithElementRef } from \"$lib/utils.js\";\nimport type {\n\tEmblaCarouselSvelteType,\n\tdefault as emblaCarouselSvelte,\n} from \"embla-carousel-svelte\";\nimport { getContext, hasContext, setContext } from \"svelte\";\nimport type { HTMLAttributes } from \"svelte/elements\";\n\nexport type CarouselAPI =\n\tNonNullable<NonNullable<EmblaCarouselSvelteType[\"$$_attributes\"]>[\"on:emblaInit\"]> extends (\n\t\tevt: CustomEvent<infer CarouselAPI>\n\t) => void\n\t\t? CarouselAPI\n\t\t: never;\n\ntype EmblaCarouselConfig = NonNullable<Parameters<typeof emblaCarouselSvelte>[1]>;\n\nexport type CarouselOptions = EmblaCarouselConfig[\"options\"];\nexport type CarouselPlugins = EmblaCarouselConfig[\"plugins\"];\n\n////\n\nexport type CarouselProps = {\n\topts?: CarouselOptions;\n\tplugins?: CarouselPlugins;\n\tsetApi?: (api: CarouselAPI | undefined) => void;\n\torientation?: \"horizontal\" | \"vertical\";\n} & WithElementRef<HTMLAttributes<HTMLDivElement>>;\n\nconst EMBLA_CAROUSEL_CONTEXT = Symbol(\"EMBLA_CAROUSEL_CONTEXT\");\n\nexport type EmblaContext = {\n\tapi: CarouselAPI | undefined;\n\torientation: \"horizontal\" | \"vertical\";\n\tscrollNext: () => void;\n\tscrollPrev: () => void;\n\tcanScrollNext: boolean;\n\tcanScrollPrev: boolean;\n\thandleKeyDown: (e: KeyboardEvent) => void;\n\toptions: CarouselOptions;\n\tplugins: CarouselPlugins;\n\tonInit: (e: CustomEvent<CarouselAPI>) => void;\n\tscrollTo: (index: number, jump?: boolean) => void;\n\tscrollSnaps: number[];\n\tselectedIndex: number;\n};\n\nexport function setEmblaContext(config: EmblaContext): EmblaContext {\n\tsetContext(EMBLA_CAROUSEL_CONTEXT, config);\n\treturn config;\n}\n\nexport function getEmblaContext(name = \"This component\") {\n\tif (!hasContext(EMBLA_CAROUSEL_CONTEXT)) {\n\t\tthrow new Error(`${name} must be used within a <Carousel.Root> component`);\n\t}\n\treturn getContext<ReturnType<typeof setEmblaContext>>(EMBLA_CAROUSEL_CONTEXT);\n}\n"
  },
  {
    "path": "docs/src/lib/registry/ui/carousel/index.ts",
    "content": "import Root from \"./carousel.svelte\";\nimport Content from \"./carousel-content.svelte\";\nimport Item from \"./carousel-item.svelte\";\nimport Previous from \"./carousel-previous.svelte\";\nimport Next from \"./carousel-next.svelte\";\n\nexport {\n\tRoot,\n\tContent,\n\tItem,\n\tPrevious,\n\tNext,\n\t//\n\tRoot as Carousel,\n\tContent as CarouselContent,\n\tItem as CarouselItem,\n\tPrevious as CarouselPrevious,\n\tNext as CarouselNext,\n};\n"
  },
  {
    "path": "docs/src/lib/registry/ui/chart/chart-container.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\timport ChartStyle from \"./chart-style.svelte\";\n\timport { setChartContext, type ChartConfig } from \"./chart-utils.js\";\n\n\tconst uid = $props.id();\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tid = uid,\n\t\tclass: className,\n\t\tchildren,\n\t\tconfig,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLElement>> & {\n\t\tconfig: ChartConfig;\n\t} = $props();\n\n\tconst chartId = $derived(`chart-${id || uid.replace(/:/g, \"\")}`);\n\n\tsetChartContext({\n\t\tget config() {\n\t\t\treturn config;\n\t\t},\n\t});\n</script>\n\n<div\n\tbind:this={ref}\n\tdata-chart={chartId}\n\tdata-slot=\"chart\"\n\tclass={cn(\n\t\t\"flex aspect-video justify-center overflow-visible text-xs\",\n\t\t// Overrides\n\t\t//\n\t\t// Stroke around dots/marks when hovering\n\t\t\"[&_.lc-highlight-point]:stroke-transparent\",\n\t\t// override the default stroke color of lines\n\t\t\"[&_.lc-line]:stroke-border/50\",\n\n\t\t// by default, layerchart shows a line intersecting the point when hovering, this hides that\n\t\t\"[&_.lc-highlight-line]:stroke-0\",\n\n\t\t// by default, when you hover a point on a stacked series chart, it will drop the opacity\n\t\t// of the other series, this overrides that\n\t\t\"[&_.lc-area-path]:opacity-100 [&_.lc-highlight-line]:opacity-100 [&_.lc-highlight-point]:opacity-100 [&_.lc-spline-path]:opacity-100 [&_.lc-text]:text-xs [&_.lc-text-svg]:overflow-visible\",\n\n\t\t// We don't want the little tick lines between the axis labels and the chart, so we remove\n\t\t// the stroke. The alternative is to manually disable `tickMarks` on the x/y axis of every\n\t\t// chart.\n\t\t\"[&_.lc-axis-tick]:stroke-0\",\n\n\t\t// We don't want to display the rule on the x/y axis, as there is already going to be\n\t\t// a grid line there and rule ends up overlapping the marks because it is rendered after\n\t\t// the marks\n\t\t\"[&_.lc-rule-x-line:not(.lc-grid-x-rule)]:stroke-0 [&_.lc-rule-y-line:not(.lc-grid-y-rule)]:stroke-0\",\n\t\t\"[&_.lc-grid-x-radial-line]:stroke-border [&_.lc-grid-x-radial-circle]:stroke-border\",\n\t\t\"[&_.lc-grid-y-radial-line]:stroke-border [&_.lc-grid-y-radial-circle]:stroke-border\",\n\n\t\t// Legend adjustments\n\t\t\"[&_.lc-legend-swatch-button]:items-center [&_.lc-legend-swatch-button]:gap-1.5\",\n\t\t\"[&_.lc-legend-swatch-group]:items-center [&_.lc-legend-swatch-group]:gap-4\",\n\t\t\"[&_.lc-legend-swatch]:size-2.5 [&_.lc-legend-swatch]:rounded-[2px]\",\n\n\t\t// Labels\n\t\t\"[&_.lc-labels-text:not([fill])]:fill-foreground [&_text]:stroke-transparent\",\n\n\t\t// Tick labels on th x/y axes\n\t\t\"[&_.lc-axis-tick-label]:fill-muted-foreground [&_.lc-axis-tick-label]:font-normal\",\n\t\t\"[&_.lc-tooltip-rects-g]:fill-transparent\",\n\t\t\"[&_.lc-layout-svg-g]:fill-transparent\",\n\t\t\"[&_.lc-root-container]:w-full\",\n\t\tclassName\n\t)}\n\t{...restProps}\n>\n\t<ChartStyle id={chartId} {config} />\n\t{@render children?.()}\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/chart/chart-style.svelte",
    "content": "<script lang=\"ts\">\n\timport { THEMES, type ChartConfig } from \"./chart-utils.js\";\n\n\tlet { id, config }: { id: string; config: ChartConfig } = $props();\n\n\tconst colorConfig = $derived(\n\t\tconfig ? Object.entries(config).filter(([, config]) => config.theme || config.color) : null\n\t);\n\n\tconst themeContents = $derived.by(() => {\n\t\tif (!colorConfig || !colorConfig.length) return;\n\n\t\tconst themeContents = [];\n\t\tfor (const [_theme, prefix] of Object.entries(THEMES)) {\n\t\t\tlet content = `${prefix} [data-chart=${id}] {\\n`;\n\t\t\tconst color = colorConfig.map(([key, itemConfig]) => {\n\t\t\t\tconst theme = _theme as keyof typeof itemConfig.theme;\n\t\t\t\tconst color = itemConfig.theme?.[theme] || itemConfig.color;\n\t\t\t\treturn color ? `\\t--color-${key}: ${color};` : null;\n\t\t\t});\n\n\t\t\tcontent += color.join(\"\\n\") + \"\\n}\";\n\n\t\t\tthemeContents.push(content);\n\t\t}\n\n\t\treturn themeContents.join(\"\\n\");\n\t});\n</script>\n\n{#if themeContents}\n\t{#key id}\n\t\t<svelte:element this={\"style\"}>\n\t\t\t{themeContents}\n\t\t</svelte:element>\n\t{/key}\n{/if}\n"
  },
  {
    "path": "docs/src/lib/registry/ui/chart/chart-tooltip.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn, type WithElementRef, type WithoutChildren } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\timport { getPayloadConfigFromPayload, useChart, type TooltipPayload } from \"./chart-utils.js\";\n\timport { getTooltipContext, Tooltip as TooltipPrimitive } from \"layerchart\";\n\timport type { Snippet } from \"svelte\";\n\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tfunction defaultFormatter(value: any, _payload: TooltipPayload[]) {\n\t\treturn `${value}`;\n\t}\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\thideLabel = false,\n\t\tindicator = \"dot\",\n\t\thideIndicator = false,\n\t\tlabelKey,\n\t\tlabel,\n\t\tlabelFormatter = defaultFormatter,\n\t\tlabelClassName,\n\t\tformatter,\n\t\tnameKey,\n\t\tcolor,\n\t\t...restProps\n\t}: WithoutChildren<WithElementRef<HTMLAttributes<HTMLDivElement>>> & {\n\t\thideLabel?: boolean;\n\t\tlabel?: string;\n\t\tindicator?: \"line\" | \"dot\" | \"dashed\";\n\t\tnameKey?: string;\n\t\tlabelKey?: string;\n\t\thideIndicator?: boolean;\n\t\tlabelClassName?: string;\n\t\tlabelFormatter?: // eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\t((value: any, payload: TooltipPayload[]) => string | number | Snippet) | null;\n\t\tformatter?: Snippet<\n\t\t\t[\n\t\t\t\t{\n\t\t\t\t\tvalue: unknown;\n\t\t\t\t\tname: string;\n\t\t\t\t\titem: TooltipPayload;\n\t\t\t\t\tindex: number;\n\t\t\t\t\tpayload: TooltipPayload[];\n\t\t\t\t},\n\t\t\t]\n\t\t>;\n\t} = $props();\n\n\tconst chart = useChart();\n\tconst tooltipCtx = getTooltipContext();\n\n\tconst formattedLabel = $derived.by(() => {\n\t\tif (hideLabel || !tooltipCtx.payload?.length) return null;\n\n\t\tconst [item] = tooltipCtx.payload;\n\t\tconst key = labelKey ?? item?.label ?? item?.name ?? \"value\";\n\n\t\tconst itemConfig = getPayloadConfigFromPayload(chart.config, item, key);\n\n\t\tconst value =\n\t\t\t!labelKey && typeof label === \"string\"\n\t\t\t\t? (chart.config[label as keyof typeof chart.config]?.label ?? label)\n\t\t\t\t: (itemConfig?.label ?? item.label);\n\n\t\tif (value === undefined) return null;\n\t\tif (!labelFormatter) return value;\n\t\treturn labelFormatter(value, tooltipCtx.payload);\n\t});\n\n\tconst nestLabel = $derived(tooltipCtx.payload.length === 1 && indicator !== \"dot\");\n</script>\n\n{#snippet TooltipLabel()}\n\t{#if formattedLabel}\n\t\t<div class={cn(\"font-medium\", labelClassName)}>\n\t\t\t{#if typeof formattedLabel === \"function\"}\n\t\t\t\t{@render formattedLabel()}\n\t\t\t{:else}\n\t\t\t\t{formattedLabel}\n\t\t\t{/if}\n\t\t</div>\n\t{/if}\n{/snippet}\n\n<TooltipPrimitive.Root variant=\"none\">\n\t<div\n\t\tbind:this={ref}\n\t\tclass={cn(\n\t\t\t\"border-border/50 bg-background grid min-w-[9rem] items-start gap-1.5 rounded-lg border px-2.5 py-1.5 text-xs shadow-xl\",\n\t\t\tclassName\n\t\t)}\n\t\t{...restProps}\n\t>\n\t\t{#if !nestLabel}\n\t\t\t{@render TooltipLabel()}\n\t\t{/if}\n\t\t<div class=\"grid gap-1.5\">\n\t\t\t{#each tooltipCtx.payload as item, i (item.key + i)}\n\t\t\t\t{@const key = `${nameKey || item.key || item.name || \"value\"}`}\n\t\t\t\t{@const itemConfig = getPayloadConfigFromPayload(chart.config, item, key)}\n\t\t\t\t{@const indicatorColor = color || item.payload?.color || item.color}\n\t\t\t\t<div\n\t\t\t\t\tclass={cn(\n\t\t\t\t\t\t\"[&>svg]:text-muted-foreground flex w-full flex-wrap items-stretch gap-2 [&>svg]:size-2.5\",\n\t\t\t\t\t\tindicator === \"dot\" && \"items-center\"\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{#if formatter && item.value !== undefined && item.name}\n\t\t\t\t\t\t{@render formatter({\n\t\t\t\t\t\t\tvalue: item.value,\n\t\t\t\t\t\t\tname: item.name,\n\t\t\t\t\t\t\titem,\n\t\t\t\t\t\t\tindex: i,\n\t\t\t\t\t\t\tpayload: tooltipCtx.payload,\n\t\t\t\t\t\t})}\n\t\t\t\t\t{:else}\n\t\t\t\t\t\t{#if itemConfig?.icon}\n\t\t\t\t\t\t\t<itemConfig.icon />\n\t\t\t\t\t\t{:else if !hideIndicator}\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tstyle=\"--color-bg: {indicatorColor}; --color-border: {indicatorColor};\"\n\t\t\t\t\t\t\t\tclass={cn(\n\t\t\t\t\t\t\t\t\t\"shrink-0 rounded-[2px] border-(--color-border) bg-(--color-bg)\",\n\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\"size-2.5\": indicator === \"dot\",\n\t\t\t\t\t\t\t\t\t\t\"h-full w-1\": indicator === \"line\",\n\t\t\t\t\t\t\t\t\t\t\"w-0 border-[1.5px] border-dashed bg-transparent\":\n\t\t\t\t\t\t\t\t\t\t\tindicator === \"dashed\",\n\t\t\t\t\t\t\t\t\t\t\"my-0.5\": nestLabel && indicator === \"dashed\",\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t></div>\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclass={cn(\n\t\t\t\t\t\t\t\t\"flex flex-1 shrink-0 justify-between leading-none\",\n\t\t\t\t\t\t\t\tnestLabel ? \"items-end\" : \"items-center\"\n\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div class=\"grid gap-1.5\">\n\t\t\t\t\t\t\t\t{#if nestLabel}\n\t\t\t\t\t\t\t\t\t{@render TooltipLabel()}\n\t\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\t\t<span class=\"text-muted-foreground\">\n\t\t\t\t\t\t\t\t\t{itemConfig?.label || item.name}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t{#if item.value !== undefined}\n\t\t\t\t\t\t\t\t<span class=\"text-foreground font-mono font-medium tabular-nums\">\n\t\t\t\t\t\t\t\t\t{item.value.toLocaleString()}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t{/if}\n\t\t\t\t</div>\n\t\t\t{/each}\n\t\t</div>\n\t</div>\n</TooltipPrimitive.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/chart/chart-utils.ts",
    "content": "import type { Tooltip } from \"layerchart\";\nimport { getContext, setContext, type Component, type ComponentProps, type Snippet } from \"svelte\";\n\nexport const THEMES = { light: \"\", dark: \".dark\" } as const;\n\nexport type ChartConfig = {\n\t[k in string]: {\n\t\tlabel?: string;\n\t\ticon?: Component;\n\t} & (\n\t\t| { color?: string; theme?: never }\n\t\t| { color?: never; theme: Record<keyof typeof THEMES, string> }\n\t);\n};\n\nexport type ExtractSnippetParams<T> = T extends Snippet<[infer P]> ? P : never;\n\nexport type TooltipPayload = ExtractSnippetParams<\n\tComponentProps<typeof Tooltip.Root>[\"children\"]\n>[\"payload\"][number];\n\n// Helper to extract item config from a payload.\nexport function getPayloadConfigFromPayload(\n\tconfig: ChartConfig,\n\tpayload: TooltipPayload,\n\tkey: string\n) {\n\tif (typeof payload !== \"object\" || payload === null) return undefined;\n\n\tconst payloadPayload =\n\t\t\"payload\" in payload && typeof payload.payload === \"object\" && payload.payload !== null\n\t\t\t? payload.payload\n\t\t\t: undefined;\n\n\tlet configLabelKey: string = key;\n\n\tif (payload.key === key) {\n\t\tconfigLabelKey = payload.key;\n\t} else if (payload.name === key) {\n\t\tconfigLabelKey = payload.name;\n\t} else if (key in payload && typeof payload[key as keyof typeof payload] === \"string\") {\n\t\tconfigLabelKey = payload[key as keyof typeof payload] as string;\n\t} else if (\n\t\tpayloadPayload !== undefined &&\n\t\tkey in payloadPayload &&\n\t\ttypeof payloadPayload[key as keyof typeof payloadPayload] === \"string\"\n\t) {\n\t\tconfigLabelKey = payloadPayload[key as keyof typeof payloadPayload] as string;\n\t}\n\n\treturn configLabelKey in config ? config[configLabelKey] : config[key as keyof typeof config];\n}\n\ntype ChartContextValue = {\n\tconfig: ChartConfig;\n};\n\nconst chartContextKey = Symbol(\"chart-context\");\n\nexport function setChartContext(value: ChartContextValue) {\n\treturn setContext(chartContextKey, value);\n}\n\nexport function useChart() {\n\treturn getContext<ChartContextValue>(chartContextKey);\n}\n"
  },
  {
    "path": "docs/src/lib/registry/ui/chart/index.ts",
    "content": "import ChartContainer from \"./chart-container.svelte\";\nimport ChartTooltip from \"./chart-tooltip.svelte\";\n\nexport { getPayloadConfigFromPayload, type ChartConfig } from \"./chart-utils.js\";\n\nexport { ChartContainer, ChartTooltip, ChartContainer as Container, ChartTooltip as Tooltip };\n"
  },
  {
    "path": "docs/src/lib/registry/ui/checkbox/checkbox.svelte",
    "content": "<script lang=\"ts\">\n\timport { Checkbox as CheckboxPrimitive } from \"bits-ui\";\n\timport { cn, type WithoutChildrenOrChild } from \"$lib/utils.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tchecked = $bindable(false),\n\t\tindeterminate = $bindable(false),\n\t\tclass: className,\n\t\t...restProps\n\t}: WithoutChildrenOrChild<CheckboxPrimitive.RootProps> = $props();\n</script>\n\n<CheckboxPrimitive.Root\n\tbind:ref\n\tdata-slot=\"checkbox\"\n\tclass={cn(\n\t\t\"cn-checkbox peer relative shrink-0 outline-none after:absolute after:-inset-x-3 after:-inset-y-2 disabled:cursor-not-allowed disabled:opacity-50\",\n\t\tclassName\n\t)}\n\tbind:checked\n\tbind:indeterminate\n\t{...restProps}\n>\n\t{#snippet children({ checked, indeterminate })}\n\t\t<div\n\t\t\tdata-slot=\"checkbox-indicator\"\n\t\t\tclass=\"cn-checkbox-indicator grid place-content-center text-current transition-none\"\n\t\t>\n\t\t\t{#if checked}\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"CheckIcon\"\n\t\t\t\t\ttabler=\"IconCheck\"\n\t\t\t\t\thugeicons=\"Tick02Icon\"\n\t\t\t\t\tphosphor=\"CheckIcon\"\n\t\t\t\t\tremixicon=\"RiCheckLine\"\n\t\t\t\t/>\n\t\t\t{:else if indeterminate}\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"MinusIcon\"\n\t\t\t\t\ttabler=\"IconMinus\"\n\t\t\t\t\thugeicons=\"MinusSignIcon\"\n\t\t\t\t\tphosphor=\"MinusIcon\"\n\t\t\t\t\tremixicon=\"RiSubtractLine\"\n\t\t\t\t/>\n\t\t\t{/if}\n\t\t</div>\n\t{/snippet}\n</CheckboxPrimitive.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/checkbox/index.ts",
    "content": "import Root from \"./checkbox.svelte\";\nexport {\n\tRoot,\n\t//\n\tRoot as Checkbox,\n};\n"
  },
  {
    "path": "docs/src/lib/registry/ui/collapsible/collapsible-content.svelte",
    "content": "<script lang=\"ts\">\n\timport { Collapsible as CollapsiblePrimitive } from \"bits-ui\";\n\n\tlet { ref = $bindable(null), ...restProps }: CollapsiblePrimitive.ContentProps = $props();\n</script>\n\n<CollapsiblePrimitive.Content bind:ref data-slot=\"collapsible-content\" {...restProps} />\n"
  },
  {
    "path": "docs/src/lib/registry/ui/collapsible/collapsible-trigger.svelte",
    "content": "<script lang=\"ts\">\n\timport { Collapsible as CollapsiblePrimitive } from \"bits-ui\";\n\n\tlet { ref = $bindable(null), ...restProps }: CollapsiblePrimitive.TriggerProps = $props();\n</script>\n\n<CollapsiblePrimitive.Trigger bind:ref data-slot=\"collapsible-trigger\" {...restProps} />\n"
  },
  {
    "path": "docs/src/lib/registry/ui/collapsible/collapsible.svelte",
    "content": "<script lang=\"ts\">\n\timport { Collapsible as CollapsiblePrimitive } from \"bits-ui\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\topen = $bindable(false),\n\t\t...restProps\n\t}: CollapsiblePrimitive.RootProps = $props();\n</script>\n\n<CollapsiblePrimitive.Root bind:ref bind:open data-slot=\"collapsible\" {...restProps} />\n"
  },
  {
    "path": "docs/src/lib/registry/ui/collapsible/index.ts",
    "content": "import Root from \"./collapsible.svelte\";\nimport Trigger from \"./collapsible-trigger.svelte\";\nimport Content from \"./collapsible-content.svelte\";\n\nexport {\n\tRoot,\n\tContent,\n\tTrigger,\n\t//\n\tRoot as Collapsible,\n\tContent as CollapsibleContent,\n\tTrigger as CollapsibleTrigger,\n};\n"
  },
  {
    "path": "docs/src/lib/registry/ui/command/command-dialog.svelte",
    "content": "<script lang=\"ts\">\n\timport type { Command as CommandPrimitive, Dialog as DialogPrimitive } from \"bits-ui\";\n\timport type { Snippet } from \"svelte\";\n\timport Command from \"./command.svelte\";\n\timport * as Dialog from \"$lib/registry/ui/dialog/index.js\";\n\timport { cn, type WithoutChildrenOrChild } from \"$lib/utils.js\";\n\n\tlet {\n\t\topen = $bindable(false),\n\t\tref = $bindable(null),\n\t\tvalue = $bindable(\"\"),\n\t\ttitle = \"Command Palette\",\n\t\tdescription = \"Search for a command to run...\",\n\t\tshowCloseButton = false,\n\t\tportalProps,\n\t\tchildren,\n\t\tclass: className,\n\t\t...restProps\n\t}: WithoutChildrenOrChild<DialogPrimitive.RootProps> &\n\t\tWithoutChildrenOrChild<CommandPrimitive.RootProps> & {\n\t\t\tportalProps?: DialogPrimitive.PortalProps;\n\t\t\tchildren: Snippet;\n\t\t\ttitle?: string;\n\t\t\tdescription?: string;\n\t\t\tshowCloseButton?: boolean;\n\t\t\tclass?: string;\n\t\t} = $props();\n</script>\n\n<Dialog.Root bind:open {...restProps}>\n\t<Dialog.Header class=\"sr-only\">\n\t\t<Dialog.Title>{title}</Dialog.Title>\n\t\t<Dialog.Description>{description}</Dialog.Description>\n\t</Dialog.Header>\n\t<Dialog.Content\n\t\tclass={cn(\"cn-command-dialog top-1/3 translate-y-0 overflow-hidden p-0\", className)}\n\t\t{showCloseButton}\n\t\t{portalProps}\n\t>\n\t\t<Command {...restProps} bind:value bind:ref {children} />\n\t</Dialog.Content>\n</Dialog.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/command/command-empty.svelte",
    "content": "<script lang=\"ts\">\n\timport { Command as CommandPrimitive } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\t...restProps\n\t}: CommandPrimitive.EmptyProps = $props();\n</script>\n\n<CommandPrimitive.Empty\n\tbind:ref\n\tdata-slot=\"command-empty\"\n\tclass={cn(\"cn-command-empty\", className)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/command/command-group.svelte",
    "content": "<script lang=\"ts\">\n\timport { Command as CommandPrimitive, useId } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\theading,\n\t\tvalue,\n\t\t...restProps\n\t}: CommandPrimitive.GroupProps & {\n\t\theading?: string;\n\t} = $props();\n</script>\n\n<CommandPrimitive.Group\n\tbind:ref\n\tdata-slot=\"command-group\"\n\tclass={cn(\"cn-command-group\", className)}\n\tvalue={value ?? heading ?? `----${useId()}`}\n\t{...restProps}\n>\n\t{#if heading}\n\t\t<CommandPrimitive.GroupHeading\n\t\t\tclass=\"text-muted-foreground px-2 py-1.5 text-xs font-medium\"\n\t\t>\n\t\t\t{heading}\n\t\t</CommandPrimitive.GroupHeading>\n\t{/if}\n\t<CommandPrimitive.GroupItems {children} />\n</CommandPrimitive.Group>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/command/command-input.svelte",
    "content": "<script lang=\"ts\">\n\timport { Command as CommandPrimitive } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\timport * as InputGroup from \"$lib/registry/ui/input-group/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tvalue = $bindable(\"\"),\n\t\t...restProps\n\t}: CommandPrimitive.InputProps = $props();\n</script>\n\n<div data-slot=\"command-input-wrapper\" class=\"cn-command-input-wrapper\">\n\t<InputGroup.Root class=\"cn-command-input-group\">\n\t\t<CommandPrimitive.Input\n\t\t\tdata-slot=\"command-input\"\n\t\t\tclass={cn(\n\t\t\t\t\"cn-command-input outline-hidden disabled:cursor-not-allowed disabled:opacity-50\",\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\tbind:ref\n\t\t\t{...restProps}\n\t\t\tbind:value\n\t\t/>\n\t\t<InputGroup.Addon>\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"SearchIcon\"\n\t\t\t\ttabler=\"IconSearch\"\n\t\t\t\thugeicons=\"SearchIcon\"\n\t\t\t\tphosphor=\"MagnifyingGlassIcon\"\n\t\t\t\tremixicon=\"RiSearchLine\"\n\t\t\t\tclass=\"cn-command-input-icon\"\n\t\t\t/>\n\t\t</InputGroup.Addon>\n\t</InputGroup.Root>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/command/command-item.svelte",
    "content": "<script lang=\"ts\">\n\timport { Command as CommandPrimitive } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: CommandPrimitive.ItemProps = $props();\n</script>\n\n<CommandPrimitive.Item\n\tbind:ref\n\tdata-slot=\"command-item\"\n\tclass={cn(\n\t\t\"group/command-item data-selected:bg-muted data-selected:text-foreground data-selected:*:[svg]:text-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none in-data-[slot=dialog-content]:rounded-lg! data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n\t\tclassName\n\t)}\n\t{...restProps}\n>\n\t{@render children?.()}\n\t<IconPlaceholder\n\t\tlucide=\"CheckIcon\"\n\t\ttabler=\"IconCheck\"\n\t\thugeicons=\"Tick02Icon\"\n\t\tphosphor=\"CheckIcon\"\n\t\tremixicon=\"RiCheckLine\"\n\t\tclass=\"cn-command-item-indicator ml-auto opacity-0 group-has-[[data-slot=command-shortcut]]/command-item:hidden group-data-[checked=true]/command-item:opacity-100\"\n\t/>\n</CommandPrimitive.Item>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/command/command-link-item.svelte",
    "content": "<script lang=\"ts\">\n\timport { Command as CommandPrimitive } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\t...restProps\n\t}: CommandPrimitive.LinkItemProps = $props();\n</script>\n\n<CommandPrimitive.LinkItem\n\tbind:ref\n\tdata-slot=\"command-item\"\n\tclass={cn(\n\t\t\"aria-selected:bg-accent aria-selected:text-accent-foreground [&_svg:not([class*='text-'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none data-[disabled=true]:pointer-events-none data-[disabled=true]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n\t\tclassName\n\t)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/command/command-list.svelte",
    "content": "<script lang=\"ts\">\n\timport { Command as CommandPrimitive } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\t...restProps\n\t}: CommandPrimitive.ListProps = $props();\n</script>\n\n<CommandPrimitive.List\n\tbind:ref\n\tdata-slot=\"command-list\"\n\tclass={cn(\"cn-command-list overflow-x-hidden overflow-y-auto\", className)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/command/command-loading.svelte",
    "content": "<script lang=\"ts\">\n\timport { Command as CommandPrimitive } from \"bits-ui\";\n\n\tlet { ref = $bindable(null), ...restProps }: CommandPrimitive.LoadingProps = $props();\n</script>\n\n<CommandPrimitive.Loading bind:ref {...restProps} />\n"
  },
  {
    "path": "docs/src/lib/registry/ui/command/command-separator.svelte",
    "content": "<script lang=\"ts\">\n\timport { Command as CommandPrimitive } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\t...restProps\n\t}: CommandPrimitive.SeparatorProps = $props();\n</script>\n\n<CommandPrimitive.Separator\n\tbind:ref\n\tdata-slot=\"command-separator\"\n\tclass={cn(\"cn-command-separator\", className)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/command/command-shortcut.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLSpanElement>> = $props();\n</script>\n\n<span\n\tbind:this={ref}\n\tdata-slot=\"command-shortcut\"\n\tclass={cn(\"cn-command-shortcut\", className)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</span>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/command/command.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn } from \"$lib/utils.js\";\n\timport { Command as CommandPrimitive } from \"bits-ui\";\n\n\texport type CommandRootApi = CommandPrimitive.Root;\n\n\tlet {\n\t\tapi = $bindable(null),\n\t\tref = $bindable(null),\n\t\tvalue = $bindable(\"\"),\n\t\tclass: className,\n\t\t...restProps\n\t}: CommandPrimitive.RootProps & {\n\t\tapi?: CommandRootApi | null;\n\t} = $props();\n</script>\n\n<CommandPrimitive.Root\n\tbind:this={api}\n\tbind:value\n\tbind:ref\n\tdata-slot=\"command\"\n\tclass={cn(\"cn-command flex size-full flex-col overflow-hidden\", className)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/command/index.ts",
    "content": "import Root from \"./command.svelte\";\nimport Loading from \"./command-loading.svelte\";\nimport Dialog from \"./command-dialog.svelte\";\nimport Empty from \"./command-empty.svelte\";\nimport Group from \"./command-group.svelte\";\nimport Item from \"./command-item.svelte\";\nimport Input from \"./command-input.svelte\";\nimport List from \"./command-list.svelte\";\nimport Separator from \"./command-separator.svelte\";\nimport Shortcut from \"./command-shortcut.svelte\";\nimport LinkItem from \"./command-link-item.svelte\";\n\nexport {\n\tRoot,\n\tDialog,\n\tEmpty,\n\tGroup,\n\tItem,\n\tLinkItem,\n\tInput,\n\tList,\n\tSeparator,\n\tShortcut,\n\tLoading,\n\t//\n\tRoot as Command,\n\tDialog as CommandDialog,\n\tEmpty as CommandEmpty,\n\tGroup as CommandGroup,\n\tItem as CommandItem,\n\tLinkItem as CommandLinkItem,\n\tInput as CommandInput,\n\tList as CommandList,\n\tSeparator as CommandSeparator,\n\tShortcut as CommandShortcut,\n\tLoading as CommandLoading,\n};\n"
  },
  {
    "path": "docs/src/lib/registry/ui/context-menu/context-menu-checkbox-item.svelte",
    "content": "<script lang=\"ts\">\n\timport { ContextMenu as ContextMenuPrimitive } from \"bits-ui\";\n\timport { cn, type WithoutChildrenOrChild } from \"$lib/utils.js\";\n\timport type { Snippet } from \"svelte\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tchecked = $bindable(false),\n\t\tindeterminate = $bindable(false),\n\t\tclass: className,\n\t\tinset,\n\t\tchildren: childrenProp,\n\t\t...restProps\n\t}: WithoutChildrenOrChild<ContextMenuPrimitive.CheckboxItemProps> & {\n\t\tinset?: boolean;\n\t\tchildren?: Snippet;\n\t} = $props();\n</script>\n\n<ContextMenuPrimitive.CheckboxItem\n\tbind:ref\n\tbind:checked\n\tbind:indeterminate\n\tdata-slot=\"context-menu-checkbox-item\"\n\tdata-inset={inset}\n\tclass={cn(\n\t\t\"cn-context-menu-checkbox-item relative flex cursor-default items-center outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n\t\tclassName\n\t)}\n\t{...restProps}\n>\n\t{#snippet children({ checked })}\n\t\t<span class=\"cn-context-menu-item-indicator pointer-events-none\">\n\t\t\t{#if checked}\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"CheckIcon\"\n\t\t\t\t\ttabler=\"IconCheck\"\n\t\t\t\t\thugeicons=\"Tick02Icon\"\n\t\t\t\t\tphosphor=\"CheckIcon\"\n\t\t\t\t\tremixicon=\"RiCheckLine\"\n\t\t\t\t/>\n\t\t\t{/if}\n\t\t</span>\n\t\t{@render childrenProp?.()}\n\t{/snippet}\n</ContextMenuPrimitive.CheckboxItem>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/context-menu/context-menu-content.svelte",
    "content": "<script lang=\"ts\">\n\timport { ContextMenu as ContextMenuPrimitive } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\timport ContextMenuPortal from \"./context-menu-portal.svelte\";\n\timport type { ComponentProps } from \"svelte\";\n\timport type { WithoutChildrenOrChild } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tportalProps,\n\t\tclass: className,\n\t\t...restProps\n\t}: ContextMenuPrimitive.ContentProps & {\n\t\tportalProps?: WithoutChildrenOrChild<ComponentProps<typeof ContextMenuPortal>>;\n\t} = $props();\n</script>\n\n<ContextMenuPortal {...portalProps}>\n\t<ContextMenuPrimitive.Content\n\t\tbind:ref\n\t\tdata-slot=\"context-menu-content\"\n\t\tclass={cn(\n\t\t\t\"cn-context-menu-content cn-menu-target cn-menu-translucent z-50 overflow-x-hidden overflow-y-auto outline-none\",\n\t\t\tclassName\n\t\t)}\n\t\t{...restProps}\n\t/>\n</ContextMenuPortal>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/context-menu/context-menu-group-heading.svelte",
    "content": "<script lang=\"ts\">\n\timport { ContextMenu as ContextMenuPrimitive } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tinset,\n\t\t...restProps\n\t}: ContextMenuPrimitive.GroupHeadingProps & {\n\t\tinset?: boolean;\n\t} = $props();\n</script>\n\n<ContextMenuPrimitive.GroupHeading\n\tbind:ref\n\tdata-slot=\"context-menu-group-heading\"\n\tdata-inset={inset}\n\tclass={cn(\"text-foreground px-2 py-1.5 text-sm font-medium data-inset:ps-8\", className)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/context-menu/context-menu-group.svelte",
    "content": "<script lang=\"ts\">\n\timport { ContextMenu as ContextMenuPrimitive } from \"bits-ui\";\n\n\tlet { ref = $bindable(null), ...restProps }: ContextMenuPrimitive.GroupProps = $props();\n</script>\n\n<ContextMenuPrimitive.Group bind:ref data-slot=\"context-menu-group\" {...restProps} />\n"
  },
  {
    "path": "docs/src/lib/registry/ui/context-menu/context-menu-item.svelte",
    "content": "<script lang=\"ts\">\n\timport { ContextMenu as ContextMenuPrimitive } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tinset,\n\t\tvariant = \"default\",\n\t\t...restProps\n\t}: ContextMenuPrimitive.ItemProps & {\n\t\tinset?: boolean;\n\t\tvariant?: \"default\" | \"destructive\";\n\t} = $props();\n</script>\n\n<ContextMenuPrimitive.Item\n\tbind:ref\n\tdata-slot=\"context-menu-item\"\n\tdata-inset={inset}\n\tdata-variant={variant}\n\tclass={cn(\n\t\t\"cn-context-menu-item group/context-menu-item relative flex cursor-default items-center outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n\t\tclassName\n\t)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/context-menu/context-menu-label.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tinset,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLDivElement>> & {\n\t\tinset?: boolean;\n\t} = $props();\n</script>\n\n<div\n\tbind:this={ref}\n\tdata-slot=\"context-menu-label\"\n\tdata-inset={inset}\n\tclass={cn(\"cn-context-menu-label data-inset:pl-8\", className)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/context-menu/context-menu-portal.svelte",
    "content": "<script lang=\"ts\">\n\timport { ContextMenu as ContextMenuPrimitive } from \"bits-ui\";\n\n\tlet { ...restProps }: ContextMenuPrimitive.PortalProps = $props();\n</script>\n\n<ContextMenuPrimitive.Portal {...restProps} />\n"
  },
  {
    "path": "docs/src/lib/registry/ui/context-menu/context-menu-radio-group.svelte",
    "content": "<script lang=\"ts\">\n\timport { ContextMenu as ContextMenuPrimitive } from \"bits-ui\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tvalue = $bindable(\"\"),\n\t\t...restProps\n\t}: ContextMenuPrimitive.RadioGroupProps = $props();\n</script>\n\n<ContextMenuPrimitive.RadioGroup\n\tbind:ref\n\tbind:value\n\tdata-slot=\"context-menu-radio-group\"\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/context-menu/context-menu-radio-item.svelte",
    "content": "<script lang=\"ts\">\n\timport { ContextMenu as ContextMenuPrimitive } from \"bits-ui\";\n\timport { cn, type WithoutChild } from \"$lib/utils.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tinset,\n\t\tchildren: childrenProp,\n\t\t...restProps\n\t}: WithoutChild<ContextMenuPrimitive.RadioItemProps> & {\n\t\tinset?: boolean;\n\t} = $props();\n</script>\n\n<ContextMenuPrimitive.RadioItem\n\tbind:ref\n\tdata-slot=\"context-menu-radio-item\"\n\tdata-inset={inset}\n\tclass={cn(\n\t\t\"cn-context-menu-radio-item relative flex cursor-default items-center outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n\t\tclassName\n\t)}\n\t{...restProps}\n>\n\t{#snippet children({ checked })}\n\t\t<span class=\"cn-context-menu-item-indicator pointer-events-none\">\n\t\t\t{#if checked}\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"CheckIcon\"\n\t\t\t\t\ttabler=\"IconCheck\"\n\t\t\t\t\thugeicons=\"Tick02Icon\"\n\t\t\t\t\tphosphor=\"CheckIcon\"\n\t\t\t\t\tremixicon=\"RiCheckLine\"\n\t\t\t\t/>\n\t\t\t{/if}\n\t\t</span>\n\t\t{@render childrenProp?.({ checked })}\n\t{/snippet}\n</ContextMenuPrimitive.RadioItem>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/context-menu/context-menu-separator.svelte",
    "content": "<script lang=\"ts\">\n\timport { ContextMenu as ContextMenuPrimitive } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\t...restProps\n\t}: ContextMenuPrimitive.SeparatorProps = $props();\n</script>\n\n<ContextMenuPrimitive.Separator\n\tbind:ref\n\tdata-slot=\"context-menu-separator\"\n\tclass={cn(\"cn-context-menu-separator\", className)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/context-menu/context-menu-shortcut.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLSpanElement>> = $props();\n</script>\n\n<span\n\tbind:this={ref}\n\tdata-slot=\"context-menu-shortcut\"\n\tclass={cn(\"cn-context-menu-shortcut\", className)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</span>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/context-menu/context-menu-sub-content.svelte",
    "content": "<script lang=\"ts\">\n\timport { ContextMenu as ContextMenuPrimitive } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\t...restProps\n\t}: ContextMenuPrimitive.SubContentProps = $props();\n</script>\n\n<ContextMenuPrimitive.SubContent\n\tbind:ref\n\tdata-slot=\"context-menu-sub-content\"\n\tclass={cn(\"cn-context-menu-sub-content cn-menu-target cn-menu-translucent\", className)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/context-menu/context-menu-sub-trigger.svelte",
    "content": "<script lang=\"ts\">\n\timport { ContextMenu as ContextMenuPrimitive } from \"bits-ui\";\n\timport { cn, type WithoutChild } from \"$lib/utils.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tinset,\n\t\tchildren,\n\t\t...restProps\n\t}: WithoutChild<ContextMenuPrimitive.SubTriggerProps> & {\n\t\tinset?: boolean;\n\t} = $props();\n</script>\n\n<ContextMenuPrimitive.SubTrigger\n\tbind:ref\n\tdata-slot=\"context-menu-sub-trigger\"\n\tdata-inset={inset}\n\tclass={cn(\n\t\t\"cn-context-menu-sub-trigger flex cursor-default items-center outline-hidden select-none data-inset:ps-8 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n\t\tclassName\n\t)}\n\t{...restProps}\n>\n\t{@render children?.()}\n\t<IconPlaceholder\n\t\tlucide=\"ChevronRightIcon\"\n\t\ttabler=\"IconChevronRight\"\n\t\thugeicons=\"ArrowRight01Icon\"\n\t\tphosphor=\"CaretRightIcon\"\n\t\tremixicon=\"RiArrowRightSLine\"\n\t\tclass=\"ml-auto\"\n\t/>\n</ContextMenuPrimitive.SubTrigger>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/context-menu/context-menu-sub.svelte",
    "content": "<script lang=\"ts\">\n\timport { ContextMenu as ContextMenuPrimitive } from \"bits-ui\";\n\n\tlet { open = $bindable(false), ...restProps }: ContextMenuPrimitive.SubProps = $props();\n</script>\n\n<ContextMenuPrimitive.Sub bind:open {...restProps} />\n"
  },
  {
    "path": "docs/src/lib/registry/ui/context-menu/context-menu-trigger.svelte",
    "content": "<script lang=\"ts\">\n\timport { ContextMenu as ContextMenuPrimitive } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\t...restProps\n\t}: ContextMenuPrimitive.TriggerProps = $props();\n</script>\n\n<ContextMenuPrimitive.Trigger\n\tbind:ref\n\tdata-slot=\"context-menu-trigger\"\n\tclass={cn(\"cn-context-menu-trigger select-none\", className)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/context-menu/context-menu.svelte",
    "content": "<script lang=\"ts\">\n\timport { ContextMenu as ContextMenuPrimitive } from \"bits-ui\";\n\n\tlet { open = $bindable(false), ...restProps }: ContextMenuPrimitive.RootProps = $props();\n</script>\n\n<ContextMenuPrimitive.Root bind:open {...restProps} />\n"
  },
  {
    "path": "docs/src/lib/registry/ui/context-menu/index.ts",
    "content": "import Root from \"./context-menu.svelte\";\nimport Sub from \"./context-menu-sub.svelte\";\nimport Portal from \"./context-menu-portal.svelte\";\nimport Trigger from \"./context-menu-trigger.svelte\";\nimport Group from \"./context-menu-group.svelte\";\nimport RadioGroup from \"./context-menu-radio-group.svelte\";\nimport Item from \"./context-menu-item.svelte\";\nimport GroupHeading from \"./context-menu-group-heading.svelte\";\nimport Content from \"./context-menu-content.svelte\";\nimport Shortcut from \"./context-menu-shortcut.svelte\";\nimport RadioItem from \"./context-menu-radio-item.svelte\";\nimport Separator from \"./context-menu-separator.svelte\";\nimport SubContent from \"./context-menu-sub-content.svelte\";\nimport SubTrigger from \"./context-menu-sub-trigger.svelte\";\nimport CheckboxItem from \"./context-menu-checkbox-item.svelte\";\nimport Label from \"./context-menu-label.svelte\";\n\nexport {\n\tRoot,\n\tSub,\n\tPortal,\n\tItem,\n\tGroupHeading,\n\tLabel,\n\tGroup,\n\tTrigger,\n\tContent,\n\tShortcut,\n\tSeparator,\n\tRadioItem,\n\tSubContent,\n\tSubTrigger,\n\tRadioGroup,\n\tCheckboxItem,\n\t//\n\tRoot as ContextMenu,\n\tSub as ContextMenuSub,\n\tPortal as ContextMenuPortal,\n\tItem as ContextMenuItem,\n\tGroupHeading as ContextMenuGroupHeading,\n\tGroup as ContextMenuGroup,\n\tContent as ContextMenuContent,\n\tTrigger as ContextMenuTrigger,\n\tShortcut as ContextMenuShortcut,\n\tRadioItem as ContextMenuRadioItem,\n\tSeparator as ContextMenuSeparator,\n\tRadioGroup as ContextMenuRadioGroup,\n\tSubContent as ContextMenuSubContent,\n\tSubTrigger as ContextMenuSubTrigger,\n\tCheckboxItem as ContextMenuCheckboxItem,\n\tLabel as ContextMenuLabel,\n};\n"
  },
  {
    "path": "docs/src/lib/registry/ui/data-table/data-table.svelte.ts",
    "content": "import {\n\ttype RowData,\n\ttype TableOptions,\n\ttype TableOptionsResolved,\n\ttype TableState,\n\ttype Updater,\n\tcreateTable,\n} from \"@tanstack/table-core\";\n\n/**\n * Creates a reactive TanStack table object for Svelte.\n * @param options Table options to create the table with.\n * @returns A reactive table object.\n * @example\n * ```svelte\n * <script>\n *   const table = createSvelteTable({ ... })\n * </script>\n *\n * <table>\n *   <thead>\n *     {#each table.getHeaderGroups() as headerGroup}\n *       <tr>\n *         {#each headerGroup.headers as header}\n *           <th colspan={header.colSpan}>\n *         \t   <FlexRender content={header.column.columnDef.header} context={header.getContext()} />\n *         \t </th>\n *         {/each}\n *       </tr>\n *     {/each}\n *   </thead>\n * \t <!-- ... -->\n * </table>\n * ```\n */\nexport function createSvelteTable<TData extends RowData>(options: TableOptions<TData>) {\n\tconst resolvedOptions: TableOptionsResolved<TData> = mergeObjects(\n\t\t{\n\t\t\tstate: {},\n\t\t\tonStateChange() {},\n\t\t\trenderFallbackValue: null,\n\t\t\tmergeOptions: (\n\t\t\t\tdefaultOptions: TableOptions<TData>,\n\t\t\t\toptions: Partial<TableOptions<TData>>\n\t\t\t) => {\n\t\t\t\treturn mergeObjects(defaultOptions, options);\n\t\t\t},\n\t\t},\n\t\toptions\n\t);\n\n\tconst table = createTable(resolvedOptions);\n\tlet state = $state<TableState>(table.initialState);\n\n\tfunction updateOptions() {\n\t\ttable.setOptions(() => {\n\t\t\treturn mergeObjects(resolvedOptions, options, {\n\t\t\t\tstate: mergeObjects(state, options.state || {}),\n\n\t\t\t\tonStateChange: (updater: Updater<TableState>) => {\n\t\t\t\t\tif (updater instanceof Function) state = updater(state);\n\t\t\t\t\telse state = mergeObjects(state, updater);\n\n\t\t\t\t\toptions.onStateChange?.(updater);\n\t\t\t\t},\n\t\t\t});\n\t\t});\n\t}\n\n\tupdateOptions();\n\n\t$effect.pre(() => {\n\t\tupdateOptions();\n\t});\n\n\treturn table;\n}\n\ntype MaybeThunk<T extends object> = T | (() => T | null | undefined);\ntype Intersection<T extends readonly unknown[]> = (T extends [infer H, ...infer R]\n\t? H & Intersection<R>\n\t: unknown) & {};\n\n/**\n * Lazily merges several objects (or thunks) while preserving\n * getter semantics from every source.\n *\n * Proxy-based to avoid known WebKit recursion issue.\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function mergeObjects<Sources extends readonly MaybeThunk<any>[]>(\n\t...sources: Sources\n): Intersection<{ [K in keyof Sources]: Sources[K] }> {\n\tconst resolve = <T extends object>(src: MaybeThunk<T>): T | undefined =>\n\t\ttypeof src === \"function\" ? (src() ?? undefined) : src;\n\n\tconst findSourceWithKey = (key: PropertyKey) => {\n\t\tfor (let i = sources.length - 1; i >= 0; i--) {\n\t\t\tconst obj = resolve(sources[i]);\n\t\t\tif (obj && key in obj) return obj;\n\t\t}\n\t\treturn undefined;\n\t};\n\n\treturn new Proxy(Object.create(null), {\n\t\tget(_, key) {\n\t\t\tconst src = findSourceWithKey(key);\n\n\t\t\treturn src?.[key as never];\n\t\t},\n\n\t\thas(_, key) {\n\t\t\treturn !!findSourceWithKey(key);\n\t\t},\n\n\t\townKeys(): (string | symbol)[] {\n\t\t\t// eslint-disable-next-line svelte/prefer-svelte-reactivity\n\t\t\tconst all = new Set<string | symbol>();\n\t\t\tfor (const s of sources) {\n\t\t\t\tconst obj = resolve(s);\n\t\t\t\tif (obj) {\n\t\t\t\t\tfor (const k of Reflect.ownKeys(obj) as (string | symbol)[]) {\n\t\t\t\t\t\tall.add(k);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn [...all];\n\t\t},\n\n\t\tgetOwnPropertyDescriptor(_, key) {\n\t\t\tconst src = findSourceWithKey(key);\n\t\t\tif (!src) return undefined;\n\t\t\treturn {\n\t\t\t\tconfigurable: true,\n\t\t\t\tenumerable: true,\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\t\tvalue: (src as any)[key],\n\t\t\t\twritable: true,\n\t\t\t};\n\t\t},\n\t}) as Intersection<{ [K in keyof Sources]: Sources[K] }>;\n}\n"
  },
  {
    "path": "docs/src/lib/registry/ui/data-table/flex-render.svelte",
    "content": "<script\n\tlang=\"ts\"\n\tgenerics=\"TData, TValue, TContext extends HeaderContext<TData, TValue> | CellContext<TData, TValue>\"\n>\n\timport type { CellContext, ColumnDefTemplate, HeaderContext } from \"@tanstack/table-core\";\n\timport { RenderComponentConfig, RenderSnippetConfig } from \"./render-helpers.js\";\n\timport type { Attachment } from \"svelte/attachments\";\n\ttype Props = {\n\t\t/** The cell or header field of the current cell's column definition. */\n\t\tcontent?: TContext extends HeaderContext<TData, TValue>\n\t\t\t? ColumnDefTemplate<HeaderContext<TData, TValue>>\n\t\t\t: TContext extends CellContext<TData, TValue>\n\t\t\t\t? ColumnDefTemplate<CellContext<TData, TValue>>\n\t\t\t\t: never;\n\t\t/** The result of the `getContext()` function of the header or cell */\n\t\tcontext: TContext;\n\n\t\t/** Used to pass attachments that can't be gotten through context */\n\t\tattach?: Attachment;\n\t};\n\n\tlet { content, context, attach }: Props = $props();\n</script>\n\n{#if typeof content === \"string\"}\n\t{content}\n{:else if content instanceof Function}\n\t<!-- It's unlikely that a CellContext will be passed to a Header -->\n\t<!-- eslint-disable-next-line @typescript-eslint/no-explicit-any -->\n\t{@const result = content(context as any)}\n\t{#if result instanceof RenderComponentConfig}\n\t\t{@const { component: Component, props } = result}\n\t\t<Component {...props} {attach} />\n\t{:else if result instanceof RenderSnippetConfig}\n\t\t{@const { snippet, params } = result}\n\t\t{@render snippet({ ...params, attach })}\n\t{:else}\n\t\t{result}\n\t{/if}\n{/if}\n"
  },
  {
    "path": "docs/src/lib/registry/ui/data-table/index.ts",
    "content": "export { default as FlexRender } from \"./flex-render.svelte\";\nexport { renderComponent, renderSnippet } from \"./render-helpers.js\";\nexport { createSvelteTable } from \"./data-table.svelte.js\";\n"
  },
  {
    "path": "docs/src/lib/registry/ui/data-table/render-helpers.ts",
    "content": "import type { Component, ComponentProps, Snippet } from \"svelte\";\n\n/**\n * A helper class to make it easy to identify Svelte components in\n * `columnDef.cell` and `columnDef.header` properties.\n *\n * > NOTE: This class should only be used internally by the adapter. If you're\n * reading this and you don't know what this is for, you probably don't need it.\n *\n * @example\n * ```svelte\n * {@const result = content(context as any)}\n * {#if result instanceof RenderComponentConfig}\n *   {@const { component: Component, props } = result}\n *   <Component {...props} />\n * {/if}\n * ```\n */\nexport class RenderComponentConfig<TComponent extends Component> {\n\tcomponent: TComponent;\n\tprops: ComponentProps<TComponent> | Record<string, never>;\n\tconstructor(\n\t\tcomponent: TComponent,\n\t\tprops: ComponentProps<TComponent> | Record<string, never> = {}\n\t) {\n\t\tthis.component = component;\n\t\tthis.props = props;\n\t}\n}\n\n/**\n * A helper class to make it easy to identify Svelte Snippets in `columnDef.cell` and `columnDef.header` properties.\n *\n * > NOTE: This class should only be used internally by the adapter. If you're\n * reading this and you don't know what this is for, you probably don't need it.\n *\n * @example\n * ```svelte\n * {@const result = content(context as any)}\n * {#if result instanceof RenderSnippetConfig}\n *   {@const { snippet, params } = result}\n *   {@render snippet(params)}\n * {/if}\n * ```\n */\nexport class RenderSnippetConfig<TProps> {\n\tsnippet: Snippet<[TProps]>;\n\tparams: TProps;\n\tconstructor(snippet: Snippet<[TProps]>, params: TProps) {\n\t\tthis.snippet = snippet;\n\t\tthis.params = params;\n\t}\n}\n\n/**\n * A helper function to help create cells from Svelte components through ColumnDef's `cell` and `header` properties.\n *\n * This is only to be used with Svelte Components - use `renderSnippet` for Svelte Snippets.\n *\n * @param component A Svelte component\n * @param props The props to pass to `component`\n * @returns A `RenderComponentConfig` object that helps svelte-table know how to render the header/cell component.\n * @example\n * ```ts\n * // +page.svelte\n * const defaultColumns = [\n *   columnHelper.accessor('name', {\n *     header: header => renderComponent(SortHeader, { label: 'Name', header }),\n *   }),\n *   columnHelper.accessor('state', {\n *     header: header => renderComponent(SortHeader, { label: 'State', header }),\n *   }),\n * ]\n * ```\n * @see {@link https://tanstack.com/table/latest/docs/guide/column-defs}\n */\nexport function renderComponent<\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tT extends Component<any>,\n\tProps extends ComponentProps<T>,\n>(component: T, props: Props = {} as Props) {\n\treturn new RenderComponentConfig(component, props);\n}\n\n/**\n * A helper function to help create cells from Svelte Snippets through ColumnDef's `cell` and `header` properties.\n *\n * The snippet must only take one parameter.\n *\n * This is only to be used with Snippets - use `renderComponent` for Svelte Components.\n *\n * @param snippet\n * @param params\n * @returns - A `RenderSnippetConfig` object that helps svelte-table know how to render the header/cell snippet.\n * @example\n * ```ts\n * // +page.svelte\n * const defaultColumns = [\n *   columnHelper.accessor('name', {\n *     cell: cell => renderSnippet(nameSnippet, { name: cell.row.name }),\n *   }),\n *   columnHelper.accessor('state', {\n *     cell: cell => renderSnippet(stateSnippet, { state: cell.row.state }),\n *   }),\n * ]\n * ```\n * @see {@link https://tanstack.com/table/latest/docs/guide/column-defs}\n */\nexport function renderSnippet<TProps>(snippet: Snippet<[TProps]>, params: TProps = {} as TProps) {\n\treturn new RenderSnippetConfig(snippet, params);\n}\n"
  },
  {
    "path": "docs/src/lib/registry/ui/dialog/dialog-close.svelte",
    "content": "<script lang=\"ts\">\n\timport { Dialog as DialogPrimitive } from \"bits-ui\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\ttype = \"button\",\n\t\t...restProps\n\t}: DialogPrimitive.CloseProps = $props();\n</script>\n\n<DialogPrimitive.Close bind:ref data-slot=\"dialog-close\" {type} {...restProps} />\n"
  },
  {
    "path": "docs/src/lib/registry/ui/dialog/dialog-content.svelte",
    "content": "<script lang=\"ts\">\n\timport { Dialog as DialogPrimitive } from \"bits-ui\";\n\timport DialogPortal from \"./dialog-portal.svelte\";\n\timport type { Snippet } from \"svelte\";\n\timport * as Dialog from \"./index.js\";\n\timport { cn, type WithoutChildrenOrChild } from \"$lib/utils.js\";\n\timport type { ComponentProps } from \"svelte\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tportalProps,\n\t\tchildren,\n\t\tshowCloseButton = true,\n\t\t...restProps\n\t}: WithoutChildrenOrChild<DialogPrimitive.ContentProps> & {\n\t\tportalProps?: WithoutChildrenOrChild<ComponentProps<typeof DialogPortal>>;\n\t\tchildren: Snippet;\n\t\tshowCloseButton?: boolean;\n\t} = $props();\n</script>\n\n<DialogPortal {...portalProps}>\n\t<Dialog.Overlay />\n\t<DialogPrimitive.Content\n\t\tbind:ref\n\t\tdata-slot=\"dialog-content\"\n\t\tclass={cn(\n\t\t\t\"cn-dialog-content fixed top-1/2 left-1/2 z-50 w-full -translate-x-1/2 -translate-y-1/2 outline-none\",\n\t\t\tclassName\n\t\t)}\n\t\t{...restProps}\n\t>\n\t\t{@render children?.()}\n\t\t{#if showCloseButton}\n\t\t\t<DialogPrimitive.Close data-slot=\"dialog-close\">\n\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t<Button variant=\"ghost\" class=\"cn-dialog-close\" size=\"icon-sm\" {...props}>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"XIcon\"\n\t\t\t\t\t\t\ttabler=\"IconX\"\n\t\t\t\t\t\t\thugeicons=\"Cancel01Icon\"\n\t\t\t\t\t\t\tphosphor=\"XIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiCloseLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<span class=\"sr-only\">Close</span>\n\t\t\t\t\t</Button>\n\t\t\t\t{/snippet}\n\t\t\t</DialogPrimitive.Close>\n\t\t{/if}\n\t</DialogPrimitive.Content>\n</DialogPortal>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/dialog/dialog-description.svelte",
    "content": "<script lang=\"ts\">\n\timport { Dialog as DialogPrimitive } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\t...restProps\n\t}: DialogPrimitive.DescriptionProps = $props();\n</script>\n\n<DialogPrimitive.Description\n\tbind:ref\n\tdata-slot=\"dialog-description\"\n\tclass={cn(\"cn-dialog-description\", className)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/dialog/dialog-footer.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\timport { Dialog as DialogPrimitive } from \"bits-ui\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\tshowCloseButton = false,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLDivElement>> & {\n\t\tshowCloseButton?: boolean;\n\t} = $props();\n</script>\n\n<div\n\tbind:this={ref}\n\tdata-slot=\"dialog-footer\"\n\tclass={cn(\"cn-dialog-footer flex flex-col-reverse gap-2 sm:flex-row sm:justify-end\", className)}\n\t{...restProps}\n>\n\t{@render children?.()}\n\t{#if showCloseButton}\n\t\t<DialogPrimitive.Close>\n\t\t\t{#snippet child({ props })}\n\t\t\t\t<Button variant=\"outline\" {...props}>Close</Button>\n\t\t\t{/snippet}\n\t\t</DialogPrimitive.Close>\n\t{/if}\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/dialog/dialog-header.svelte",
    "content": "<script lang=\"ts\">\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLDivElement>> = $props();\n</script>\n\n<div\n\tbind:this={ref}\n\tdata-slot=\"dialog-header\"\n\tclass={cn(\"cn-dialog-header flex flex-col\", className)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/dialog/dialog-overlay.svelte",
    "content": "<script lang=\"ts\">\n\timport { Dialog as DialogPrimitive } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\t...restProps\n\t}: DialogPrimitive.OverlayProps = $props();\n</script>\n\n<DialogPrimitive.Overlay\n\tbind:ref\n\tdata-slot=\"dialog-overlay\"\n\tclass={cn(\"cn-dialog-overlay fixed inset-0 isolate z-50\", className)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/dialog/dialog-portal.svelte",
    "content": "<script lang=\"ts\">\n\timport { Dialog as DialogPrimitive } from \"bits-ui\";\n\n\tlet { ...restProps }: DialogPrimitive.PortalProps = $props();\n</script>\n\n<DialogPrimitive.Portal {...restProps} />\n"
  },
  {
    "path": "docs/src/lib/registry/ui/dialog/dialog-title.svelte",
    "content": "<script lang=\"ts\">\n\timport { Dialog as DialogPrimitive } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\t...restProps\n\t}: DialogPrimitive.TitleProps = $props();\n</script>\n\n<DialogPrimitive.Title\n\tbind:ref\n\tdata-slot=\"dialog-title\"\n\tclass={cn(\"cn-dialog-title\", className)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/dialog/dialog-trigger.svelte",
    "content": "<script lang=\"ts\">\n\timport { Dialog as DialogPrimitive } from \"bits-ui\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\ttype = \"button\",\n\t\t...restProps\n\t}: DialogPrimitive.TriggerProps = $props();\n</script>\n\n<DialogPrimitive.Trigger bind:ref data-slot=\"dialog-trigger\" {type} {...restProps} />\n"
  },
  {
    "path": "docs/src/lib/registry/ui/dialog/dialog.svelte",
    "content": "<script lang=\"ts\">\n\timport { Dialog as DialogPrimitive } from \"bits-ui\";\n\n\tlet { open = $bindable(false), ...restProps }: DialogPrimitive.RootProps = $props();\n</script>\n\n<DialogPrimitive.Root bind:open {...restProps} />\n"
  },
  {
    "path": "docs/src/lib/registry/ui/dialog/index.ts",
    "content": "import Root from \"./dialog.svelte\";\nimport Portal from \"./dialog-portal.svelte\";\nimport Title from \"./dialog-title.svelte\";\nimport Footer from \"./dialog-footer.svelte\";\nimport Header from \"./dialog-header.svelte\";\nimport Overlay from \"./dialog-overlay.svelte\";\nimport Content from \"./dialog-content.svelte\";\nimport Description from \"./dialog-description.svelte\";\nimport Trigger from \"./dialog-trigger.svelte\";\nimport Close from \"./dialog-close.svelte\";\n\nexport {\n\tRoot,\n\tTitle,\n\tPortal,\n\tFooter,\n\tHeader,\n\tTrigger,\n\tOverlay,\n\tContent,\n\tDescription,\n\tClose,\n\t//\n\tRoot as Dialog,\n\tTitle as DialogTitle,\n\tPortal as DialogPortal,\n\tFooter as DialogFooter,\n\tHeader as DialogHeader,\n\tTrigger as DialogTrigger,\n\tOverlay as DialogOverlay,\n\tContent as DialogContent,\n\tDescription as DialogDescription,\n\tClose as DialogClose,\n};\n"
  },
  {
    "path": "docs/src/lib/registry/ui/drawer/drawer-close.svelte",
    "content": "<script lang=\"ts\">\n\timport { Drawer as DrawerPrimitive } from \"vaul-svelte\";\n\n\tlet { ref = $bindable(null), ...restProps }: DrawerPrimitive.CloseProps = $props();\n</script>\n\n<DrawerPrimitive.Close bind:ref data-slot=\"drawer-close\" {...restProps} />\n"
  },
  {
    "path": "docs/src/lib/registry/ui/drawer/drawer-content.svelte",
    "content": "<script lang=\"ts\">\n\timport { Drawer as DrawerPrimitive } from \"vaul-svelte\";\n\timport DrawerPortal from \"./drawer-portal.svelte\";\n\timport DrawerOverlay from \"./drawer-overlay.svelte\";\n\timport { cn } from \"$lib/utils.js\";\n\timport type { ComponentProps } from \"svelte\";\n\timport type { WithoutChildrenOrChild } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tportalProps,\n\t\tchildren,\n\t\t...restProps\n\t}: DrawerPrimitive.ContentProps & {\n\t\tportalProps?: WithoutChildrenOrChild<ComponentProps<typeof DrawerPortal>>;\n\t} = $props();\n</script>\n\n<DrawerPortal {...portalProps}>\n\t<DrawerOverlay />\n\t<DrawerPrimitive.Content\n\t\tbind:ref\n\t\tdata-slot=\"drawer-content\"\n\t\tclass={cn(\"cn-drawer-content group/drawer-content fixed z-50\", className)}\n\t\t{...restProps}\n\t>\n\t\t<div\n\t\t\tclass=\"cn-drawer-handle bg-muted mx-auto hidden shrink-0 group-data-[vaul-drawer-direction=bottom]/drawer-content:block\"\n\t\t></div>\n\t\t{@render children?.()}\n\t</DrawerPrimitive.Content>\n</DrawerPortal>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/drawer/drawer-description.svelte",
    "content": "<script lang=\"ts\">\n\timport { Drawer as DrawerPrimitive } from \"vaul-svelte\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\t...restProps\n\t}: DrawerPrimitive.DescriptionProps = $props();\n</script>\n\n<DrawerPrimitive.Description\n\tbind:ref\n\tdata-slot=\"drawer-description\"\n\tclass={cn(\"cn-drawer-description\", className)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/drawer/drawer-footer.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLDivElement>> = $props();\n</script>\n\n<div\n\tbind:this={ref}\n\tdata-slot=\"drawer-footer\"\n\tclass={cn(\"cn-drawer-footer mt-auto flex flex-col\", className)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/drawer/drawer-header.svelte",
    "content": "<script lang=\"ts\">\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLDivElement>> = $props();\n</script>\n\n<div\n\tbind:this={ref}\n\tdata-slot=\"drawer-header\"\n\tclass={cn(\"cn-drawer-header flex flex-col\", className)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/drawer/drawer-nested.svelte",
    "content": "<script lang=\"ts\">\n\timport { Drawer as DrawerPrimitive } from \"vaul-svelte\";\n\n\tlet {\n\t\tshouldScaleBackground = true,\n\t\topen = $bindable(false),\n\t\tactiveSnapPoint = $bindable(null),\n\t\t...restProps\n\t}: DrawerPrimitive.RootProps = $props();\n</script>\n\n<DrawerPrimitive.NestedRoot {shouldScaleBackground} bind:open bind:activeSnapPoint {...restProps} />\n"
  },
  {
    "path": "docs/src/lib/registry/ui/drawer/drawer-overlay.svelte",
    "content": "<script lang=\"ts\">\n\timport { Drawer as DrawerPrimitive } from \"vaul-svelte\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\t...restProps\n\t}: DrawerPrimitive.OverlayProps = $props();\n</script>\n\n<DrawerPrimitive.Overlay\n\tbind:ref\n\tdata-slot=\"drawer-overlay\"\n\tclass={cn(\"cn-drawer-overlay fixed inset-0 z-50\", className)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/drawer/drawer-portal.svelte",
    "content": "<script lang=\"ts\">\n\timport { Drawer as DrawerPrimitive } from \"vaul-svelte\";\n\n\tlet { ...restProps }: DrawerPrimitive.PortalProps = $props();\n</script>\n\n<DrawerPrimitive.Portal {...restProps} />\n"
  },
  {
    "path": "docs/src/lib/registry/ui/drawer/drawer-title.svelte",
    "content": "<script lang=\"ts\">\n\timport { Drawer as DrawerPrimitive } from \"vaul-svelte\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\t...restProps\n\t}: DrawerPrimitive.TitleProps = $props();\n</script>\n\n<DrawerPrimitive.Title\n\tbind:ref\n\tdata-slot=\"drawer-title\"\n\tclass={cn(\"cn-drawer-title\", className)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/drawer/drawer-trigger.svelte",
    "content": "<script lang=\"ts\">\n\timport { Drawer as DrawerPrimitive } from \"vaul-svelte\";\n\n\tlet { ref = $bindable(null), ...restProps }: DrawerPrimitive.TriggerProps = $props();\n</script>\n\n<DrawerPrimitive.Trigger bind:ref data-slot=\"drawer-trigger\" {...restProps} />\n"
  },
  {
    "path": "docs/src/lib/registry/ui/drawer/drawer.svelte",
    "content": "<script lang=\"ts\">\n\timport { Drawer as DrawerPrimitive } from \"vaul-svelte\";\n\n\tlet {\n\t\tshouldScaleBackground = true,\n\t\topen = $bindable(false),\n\t\tactiveSnapPoint = $bindable(null),\n\t\t...restProps\n\t}: DrawerPrimitive.RootProps = $props();\n</script>\n\n<DrawerPrimitive.Root {shouldScaleBackground} bind:open bind:activeSnapPoint {...restProps} />\n"
  },
  {
    "path": "docs/src/lib/registry/ui/drawer/index.ts",
    "content": "import Root from \"./drawer.svelte\";\nimport Content from \"./drawer-content.svelte\";\nimport Description from \"./drawer-description.svelte\";\nimport Overlay from \"./drawer-overlay.svelte\";\nimport Footer from \"./drawer-footer.svelte\";\nimport Header from \"./drawer-header.svelte\";\nimport Title from \"./drawer-title.svelte\";\nimport NestedRoot from \"./drawer-nested.svelte\";\nimport Close from \"./drawer-close.svelte\";\nimport Trigger from \"./drawer-trigger.svelte\";\nimport Portal from \"./drawer-portal.svelte\";\n\nexport {\n\tRoot,\n\tNestedRoot,\n\tContent,\n\tDescription,\n\tOverlay,\n\tFooter,\n\tHeader,\n\tTitle,\n\tTrigger,\n\tPortal,\n\tClose,\n\n\t//\n\tRoot as Drawer,\n\tNestedRoot as DrawerNestedRoot,\n\tContent as DrawerContent,\n\tDescription as DrawerDescription,\n\tOverlay as DrawerOverlay,\n\tFooter as DrawerFooter,\n\tHeader as DrawerHeader,\n\tTitle as DrawerTitle,\n\tTrigger as DrawerTrigger,\n\tPortal as DrawerPortal,\n\tClose as DrawerClose,\n};\n"
  },
  {
    "path": "docs/src/lib/registry/ui/dropdown-menu/dropdown-menu-checkbox-group.svelte",
    "content": "<script lang=\"ts\">\n\timport { DropdownMenu as DropdownMenuPrimitive } from \"bits-ui\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tvalue = $bindable([]),\n\t\t...restProps\n\t}: DropdownMenuPrimitive.CheckboxGroupProps = $props();\n</script>\n\n<DropdownMenuPrimitive.CheckboxGroup\n\tbind:ref\n\tbind:value\n\tdata-slot=\"dropdown-menu-checkbox-group\"\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte",
    "content": "<script lang=\"ts\">\n\timport { DropdownMenu as DropdownMenuPrimitive } from \"bits-ui\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\timport { cn, type WithoutChildrenOrChild } from \"$lib/utils.js\";\n\timport type { Snippet } from \"svelte\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tchecked = $bindable(false),\n\t\tindeterminate = $bindable(false),\n\t\tclass: className,\n\t\tchildren: childrenProp,\n\t\t...restProps\n\t}: WithoutChildrenOrChild<DropdownMenuPrimitive.CheckboxItemProps> & {\n\t\tchildren?: Snippet;\n\t} = $props();\n</script>\n\n<DropdownMenuPrimitive.CheckboxItem\n\tbind:ref\n\tbind:checked\n\tbind:indeterminate\n\tdata-slot=\"dropdown-menu-checkbox-item\"\n\tclass={cn(\n\t\t\"cn-dropdown-menu-checkbox-item relative flex cursor-default items-center outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n\t\tclassName\n\t)}\n\t{...restProps}\n>\n\t{#snippet children({ checked, indeterminate })}\n\t\t<span\n\t\t\tclass=\"cn-dropdown-menu-item-indicator pointer-events-none\"\n\t\t\tdata-slot=\"dropdown-menu-checkbox-item-indicator\"\n\t\t>\n\t\t\t{#if indeterminate}\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"MinusIcon\"\n\t\t\t\t\ttabler=\"IconMinus\"\n\t\t\t\t\thugeicons=\"MinusSignIcon\"\n\t\t\t\t\tphosphor=\"MinusIcon\"\n\t\t\t\t\tremixicon=\"RiSubtractLine\"\n\t\t\t\t/>\n\t\t\t{:else if checked}\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"CheckIcon\"\n\t\t\t\t\ttabler=\"IconCheck\"\n\t\t\t\t\thugeicons=\"Tick02Icon\"\n\t\t\t\t\tphosphor=\"CheckIcon\"\n\t\t\t\t\tremixicon=\"RiCheckLine\"\n\t\t\t\t/>\n\t\t\t{/if}\n\t\t</span>\n\t\t{@render childrenProp?.()}\n\t{/snippet}\n</DropdownMenuPrimitive.CheckboxItem>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/dropdown-menu/dropdown-menu-content.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn, type WithoutChildrenOrChild } from \"$lib/utils.js\";\n\timport DropdownMenuPortal from \"./dropdown-menu-portal.svelte\";\n\timport { DropdownMenu as DropdownMenuPrimitive } from \"bits-ui\";\n\timport type { ComponentProps } from \"svelte\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tsideOffset = 4,\n\t\talign = \"start\",\n\t\tportalProps,\n\t\tclass: className,\n\t\t...restProps\n\t}: DropdownMenuPrimitive.ContentProps & {\n\t\tportalProps?: WithoutChildrenOrChild<ComponentProps<typeof DropdownMenuPortal>>;\n\t} = $props();\n</script>\n\n<DropdownMenuPortal {...portalProps}>\n\t<DropdownMenuPrimitive.Content\n\t\tbind:ref\n\t\tdata-slot=\"dropdown-menu-content\"\n\t\t{sideOffset}\n\t\t{align}\n\t\tclass={cn(\n\t\t\t\"cn-dropdown-menu-content cn-dropdown-menu-content-logical cn-menu-target cn-menu-translucent z-50 w-(--bits-dropdown-menu-anchor-width) overflow-x-hidden overflow-y-auto outline-none data-closed:overflow-hidden\",\n\t\t\tclassName\n\t\t)}\n\t\t{...restProps}\n\t/>\n</DropdownMenuPortal>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/dropdown-menu/dropdown-menu-group-heading.svelte",
    "content": "<script lang=\"ts\">\n\timport { DropdownMenu as DropdownMenuPrimitive } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\timport type { ComponentProps } from \"svelte\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tinset,\n\t\t...restProps\n\t}: ComponentProps<typeof DropdownMenuPrimitive.GroupHeading> & {\n\t\tinset?: boolean;\n\t} = $props();\n</script>\n\n<DropdownMenuPrimitive.GroupHeading\n\tbind:ref\n\tdata-slot=\"dropdown-menu-group-heading\"\n\tdata-inset={inset}\n\tclass={cn(\"px-2 py-1.5 text-sm font-semibold data-[inset]:ps-8\", className)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/dropdown-menu/dropdown-menu-group.svelte",
    "content": "<script lang=\"ts\">\n\timport { DropdownMenu as DropdownMenuPrimitive } from \"bits-ui\";\n\n\tlet { ref = $bindable(null), ...restProps }: DropdownMenuPrimitive.GroupProps = $props();\n</script>\n\n<DropdownMenuPrimitive.Group bind:ref data-slot=\"dropdown-menu-group\" {...restProps} />\n"
  },
  {
    "path": "docs/src/lib/registry/ui/dropdown-menu/dropdown-menu-item.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn } from \"$lib/utils.js\";\n\timport { DropdownMenu as DropdownMenuPrimitive } from \"bits-ui\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tinset,\n\t\tvariant = \"default\",\n\t\t...restProps\n\t}: DropdownMenuPrimitive.ItemProps & {\n\t\tinset?: boolean;\n\t\tvariant?: \"default\" | \"destructive\";\n\t} = $props();\n</script>\n\n<DropdownMenuPrimitive.Item\n\tbind:ref\n\tdata-slot=\"dropdown-menu-item\"\n\tdata-inset={inset}\n\tdata-variant={variant}\n\tclass={cn(\n\t\t\"cn-dropdown-menu-item group/dropdown-menu-item relative flex cursor-default items-center outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n\t\tclassName\n\t)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/dropdown-menu/dropdown-menu-label.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tinset,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLDivElement>> & {\n\t\tinset?: boolean;\n\t} = $props();\n</script>\n\n<div\n\tbind:this={ref}\n\tdata-slot=\"dropdown-menu-label\"\n\tdata-inset={inset}\n\tclass={cn(\"cn-dropdown-menu-label data-[inset]:pl-8\", className)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/dropdown-menu/dropdown-menu-portal.svelte",
    "content": "<script lang=\"ts\">\n\timport { DropdownMenu as DropdownMenuPrimitive } from \"bits-ui\";\n\n\tlet { ...restProps }: DropdownMenuPrimitive.PortalProps = $props();\n</script>\n\n<DropdownMenuPrimitive.Portal {...restProps} />\n"
  },
  {
    "path": "docs/src/lib/registry/ui/dropdown-menu/dropdown-menu-radio-group.svelte",
    "content": "<script lang=\"ts\">\n\timport { DropdownMenu as DropdownMenuPrimitive } from \"bits-ui\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tvalue = $bindable(),\n\t\t...restProps\n\t}: DropdownMenuPrimitive.RadioGroupProps = $props();\n</script>\n\n<DropdownMenuPrimitive.RadioGroup\n\tbind:ref\n\tbind:value\n\tdata-slot=\"dropdown-menu-radio-group\"\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/dropdown-menu/dropdown-menu-radio-item.svelte",
    "content": "<script lang=\"ts\">\n\timport { DropdownMenu as DropdownMenuPrimitive } from \"bits-ui\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\timport { cn, type WithoutChild } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren: childrenProp,\n\t\t...restProps\n\t}: WithoutChild<DropdownMenuPrimitive.RadioItemProps> = $props();\n</script>\n\n<DropdownMenuPrimitive.RadioItem\n\tbind:ref\n\tdata-slot=\"dropdown-menu-radio-item\"\n\tclass={cn(\n\t\t\"cn-dropdown-menu-radio-item relative flex cursor-default items-center outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n\t\tclassName\n\t)}\n\t{...restProps}\n>\n\t{#snippet children({ checked })}\n\t\t<span\n\t\t\tclass=\"cn-dropdown-menu-item-indicator pointer-events-none\"\n\t\t\tdata-slot=\"dropdown-menu-radio-item-indicator\"\n\t\t>\n\t\t\t{#if checked}\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"CheckIcon\"\n\t\t\t\t\ttabler=\"IconCheck\"\n\t\t\t\t\thugeicons=\"Tick02Icon\"\n\t\t\t\t\tphosphor=\"CheckIcon\"\n\t\t\t\t\tremixicon=\"RiCheckLine\"\n\t\t\t\t/>\n\t\t\t{/if}\n\t\t</span>\n\t\t{@render childrenProp?.({ checked })}\n\t{/snippet}\n</DropdownMenuPrimitive.RadioItem>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/dropdown-menu/dropdown-menu-separator.svelte",
    "content": "<script lang=\"ts\">\n\timport { DropdownMenu as DropdownMenuPrimitive } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\t...restProps\n\t}: DropdownMenuPrimitive.SeparatorProps = $props();\n</script>\n\n<DropdownMenuPrimitive.Separator\n\tbind:ref\n\tdata-slot=\"dropdown-menu-separator\"\n\tclass={cn(\"cn-dropdown-menu-separator\", className)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/dropdown-menu/dropdown-menu-shortcut.svelte",
    "content": "<script lang=\"ts\">\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLSpanElement>> = $props();\n</script>\n\n<span\n\tbind:this={ref}\n\tdata-slot=\"dropdown-menu-shortcut\"\n\tclass={cn(\"cn-dropdown-menu-shortcut\", className)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</span>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/dropdown-menu/dropdown-menu-sub-content.svelte",
    "content": "<script lang=\"ts\">\n\timport { DropdownMenu as DropdownMenuPrimitive } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\t...restProps\n\t}: DropdownMenuPrimitive.SubContentProps = $props();\n</script>\n\n<DropdownMenuPrimitive.SubContent\n\tbind:ref\n\tdata-slot=\"dropdown-menu-sub-content\"\n\tclass={cn(\"cn-dropdown-menu-sub-content cn-menu-target cn-menu-translucent w-auto\", className)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte",
    "content": "<script lang=\"ts\">\n\timport { DropdownMenu as DropdownMenuPrimitive } from \"bits-ui\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tinset,\n\t\tchildren,\n\t\t...restProps\n\t}: DropdownMenuPrimitive.SubTriggerProps & {\n\t\tinset?: boolean;\n\t} = $props();\n</script>\n\n<DropdownMenuPrimitive.SubTrigger\n\tbind:ref\n\tdata-slot=\"dropdown-menu-sub-trigger\"\n\tdata-inset={inset}\n\tclass={cn(\n\t\t\"cn-dropdown-menu-sub-trigger flex cursor-default items-center outline-hidden select-none data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n\t\tclassName\n\t)}\n\t{...restProps}\n>\n\t{@render children?.()}\n\t<IconPlaceholder\n\t\tlucide=\"ChevronRightIcon\"\n\t\ttabler=\"IconChevronRight\"\n\t\thugeicons=\"ArrowRight01Icon\"\n\t\tphosphor=\"CaretRightIcon\"\n\t\tremixicon=\"RiArrowRightSLine\"\n\t\tclass=\"ml-auto\"\n\t/>\n</DropdownMenuPrimitive.SubTrigger>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/dropdown-menu/dropdown-menu-sub.svelte",
    "content": "<script lang=\"ts\">\n\timport { DropdownMenu as DropdownMenuPrimitive } from \"bits-ui\";\n\n\tlet { open = $bindable(false), ...restProps }: DropdownMenuPrimitive.SubProps = $props();\n</script>\n\n<DropdownMenuPrimitive.Sub bind:open {...restProps} />\n"
  },
  {
    "path": "docs/src/lib/registry/ui/dropdown-menu/dropdown-menu-trigger.svelte",
    "content": "<script lang=\"ts\">\n\timport { DropdownMenu as DropdownMenuPrimitive } from \"bits-ui\";\n\n\tlet { ref = $bindable(null), ...restProps }: DropdownMenuPrimitive.TriggerProps = $props();\n</script>\n\n<DropdownMenuPrimitive.Trigger bind:ref data-slot=\"dropdown-menu-trigger\" {...restProps} />\n"
  },
  {
    "path": "docs/src/lib/registry/ui/dropdown-menu/dropdown-menu.svelte",
    "content": "<script lang=\"ts\">\n\timport { DropdownMenu as DropdownMenuPrimitive } from \"bits-ui\";\n\n\tlet { open = $bindable(false), ...restProps }: DropdownMenuPrimitive.RootProps = $props();\n</script>\n\n<DropdownMenuPrimitive.Root bind:open {...restProps} />\n"
  },
  {
    "path": "docs/src/lib/registry/ui/dropdown-menu/index.ts",
    "content": "import Root from \"./dropdown-menu.svelte\";\nimport Sub from \"./dropdown-menu-sub.svelte\";\nimport CheckboxGroup from \"./dropdown-menu-checkbox-group.svelte\";\nimport CheckboxItem from \"./dropdown-menu-checkbox-item.svelte\";\nimport Content from \"./dropdown-menu-content.svelte\";\nimport Group from \"./dropdown-menu-group.svelte\";\nimport Item from \"./dropdown-menu-item.svelte\";\nimport Label from \"./dropdown-menu-label.svelte\";\nimport RadioGroup from \"./dropdown-menu-radio-group.svelte\";\nimport RadioItem from \"./dropdown-menu-radio-item.svelte\";\nimport Separator from \"./dropdown-menu-separator.svelte\";\nimport Shortcut from \"./dropdown-menu-shortcut.svelte\";\nimport Trigger from \"./dropdown-menu-trigger.svelte\";\nimport SubContent from \"./dropdown-menu-sub-content.svelte\";\nimport SubTrigger from \"./dropdown-menu-sub-trigger.svelte\";\nimport GroupHeading from \"./dropdown-menu-group-heading.svelte\";\nimport Portal from \"./dropdown-menu-portal.svelte\";\n\nexport {\n\tCheckboxGroup,\n\tCheckboxItem,\n\tContent,\n\tPortal,\n\tRoot as DropdownMenu,\n\tCheckboxGroup as DropdownMenuCheckboxGroup,\n\tCheckboxItem as DropdownMenuCheckboxItem,\n\tContent as DropdownMenuContent,\n\tPortal as DropdownMenuPortal,\n\tGroup as DropdownMenuGroup,\n\tItem as DropdownMenuItem,\n\tLabel as DropdownMenuLabel,\n\tRadioGroup as DropdownMenuRadioGroup,\n\tRadioItem as DropdownMenuRadioItem,\n\tSeparator as DropdownMenuSeparator,\n\tShortcut as DropdownMenuShortcut,\n\tSub as DropdownMenuSub,\n\tSubContent as DropdownMenuSubContent,\n\tSubTrigger as DropdownMenuSubTrigger,\n\tTrigger as DropdownMenuTrigger,\n\tGroupHeading as DropdownMenuGroupHeading,\n\tGroup,\n\tGroupHeading,\n\tItem,\n\tLabel,\n\tRadioGroup,\n\tRadioItem,\n\tRoot,\n\tSeparator,\n\tShortcut,\n\tSub,\n\tSubContent,\n\tSubTrigger,\n\tTrigger,\n};\n"
  },
  {
    "path": "docs/src/lib/registry/ui/empty/empty-content.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLDivElement>> = $props();\n</script>\n\n<div\n\tbind:this={ref}\n\tdata-slot=\"empty-content\"\n\tclass={cn(\n\t\t\"cn-empty-content flex w-full max-w-sm min-w-0 flex-col items-center text-balance\",\n\t\tclassName\n\t)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/empty/empty-description.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLDivElement>> = $props();\n</script>\n\n<div\n\tbind:this={ref}\n\tdata-slot=\"empty-description\"\n\tclass={cn(\n\t\t\"cn-empty-description text-muted-foreground [&>a:hover]:text-primary text-sm/relaxed [&>a]:underline [&>a]:underline-offset-4\",\n\t\tclassName\n\t)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/empty/empty-header.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLDivElement>> = $props();\n</script>\n\n<div\n\tbind:this={ref}\n\tdata-slot=\"empty-header\"\n\tclass={cn(\"cn-empty-header flex max-w-sm flex-col items-center\", className)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/empty/empty-media.svelte",
    "content": "<script lang=\"ts\" module>\n\timport { tv, type VariantProps } from \"tailwind-variants\";\n\n\texport const emptyMediaVariants = tv({\n\t\tbase: \"cn-empty-media flex shrink-0 items-center justify-center [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n\t\tvariants: {\n\t\t\tvariant: {\n\t\t\t\tdefault: \"cn-empty-media-default\",\n\t\t\t\ticon: \"cn-empty-media-icon\",\n\t\t\t},\n\t\t},\n\t\tdefaultVariants: {\n\t\t\tvariant: \"default\",\n\t\t},\n\t});\n\n\texport type EmptyMediaVariant = VariantProps<typeof emptyMediaVariants>[\"variant\"];\n</script>\n\n<script lang=\"ts\">\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\tvariant = \"default\",\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLDivElement>> & { variant?: EmptyMediaVariant } = $props();\n</script>\n\n<div\n\tbind:this={ref}\n\tdata-slot=\"empty-icon\"\n\tdata-variant={variant}\n\tclass={cn(emptyMediaVariants({ variant }), className)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/empty/empty-title.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLDivElement>> = $props();\n</script>\n\n<div bind:this={ref} data-slot=\"empty-title\" class={cn(\"cn-empty-title\", className)} {...restProps}>\n\t{@render children?.()}\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/empty/empty.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLDivElement>> = $props();\n</script>\n\n<div\n\tbind:this={ref}\n\tdata-slot=\"empty\"\n\tclass={cn(\n\t\t\"cn-empty flex w-full min-w-0 flex-1 flex-col items-center justify-center text-center text-balance\",\n\t\tclassName\n\t)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/empty/index.ts",
    "content": "import Root from \"./empty.svelte\";\nimport Header from \"./empty-header.svelte\";\nimport Media from \"./empty-media.svelte\";\nimport Title from \"./empty-title.svelte\";\nimport Description from \"./empty-description.svelte\";\nimport Content from \"./empty-content.svelte\";\n\nexport {\n\tRoot,\n\tHeader,\n\tMedia,\n\tTitle,\n\tDescription,\n\tContent,\n\t//\n\tRoot as Empty,\n\tHeader as EmptyHeader,\n\tMedia as EmptyMedia,\n\tTitle as EmptyTitle,\n\tDescription as EmptyDescription,\n\tContent as EmptyContent,\n};\n"
  },
  {
    "path": "docs/src/lib/registry/ui/field/field-content.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLDivElement>> = $props();\n</script>\n\n<div\n\tbind:this={ref}\n\tdata-slot=\"field-content\"\n\tclass={cn(\"cn-field-content group/field-content flex flex-1 flex-col leading-snug\", className)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/field/field-description.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLParagraphElement>> = $props();\n</script>\n\n<p\n\tbind:this={ref}\n\tdata-slot=\"field-description\"\n\tclass={cn(\n\t\t\"cn-field-description leading-normal font-normal group-has-[[data-orientation=horizontal]]/field:text-balance\",\n\t\t\"last:mt-0 nth-last-2:-mt-1\",\n\t\t\"[&>a:hover]:text-primary [&>a]:underline [&>a]:underline-offset-4\",\n\t\tclassName\n\t)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</p>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/field/field-error.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\timport type { Snippet } from \"svelte\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\terrors,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLDivElement>> & {\n\t\tchildren?: Snippet;\n\t\terrors?: { message?: string }[];\n\t} = $props();\n\n\tconst hasContent = $derived.by(() => {\n\t\t// has slotted error\n\t\tif (children) return true;\n\n\t\t// no errors\n\t\tif (!errors || errors.length === 0) return false;\n\n\t\t// has an error but no message\n\t\tif (errors.length === 1 && !errors[0]?.message) {\n\t\t\treturn false;\n\t\t}\n\n\t\treturn true;\n\t});\n\n\tconst isMultipleErrors = $derived(errors && errors.length > 1);\n\tconst singleErrorMessage = $derived(errors && errors.length === 1 && errors[0]?.message);\n</script>\n\n{#if hasContent}\n\t<div\n\t\tbind:this={ref}\n\t\trole=\"alert\"\n\t\tdata-slot=\"field-error\"\n\t\tclass={cn(\"cn-field-error font-normal\", className)}\n\t\t{...restProps}\n\t>\n\t\t{#if children}\n\t\t\t{@render children()}\n\t\t{:else if singleErrorMessage}\n\t\t\t{singleErrorMessage}\n\t\t{:else if isMultipleErrors}\n\t\t\t<ul class=\"ml-4 flex list-disc flex-col gap-1\">\n\t\t\t\t{#each errors ?? [] as error, index (index)}\n\t\t\t\t\t{#if error?.message}\n\t\t\t\t\t\t<li>{error.message}</li>\n\t\t\t\t\t{/if}\n\t\t\t\t{/each}\n\t\t\t</ul>\n\t\t{/if}\n\t</div>\n{/if}\n"
  },
  {
    "path": "docs/src/lib/registry/ui/field/field-group.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLDivElement>> = $props();\n</script>\n\n<div\n\tbind:this={ref}\n\tdata-slot=\"field-group\"\n\tclass={cn(\n\t\t\"cn-field-group group/field-group @container/field-group flex w-full flex-col\",\n\t\tclassName\n\t)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/field/field-label.svelte",
    "content": "<script lang=\"ts\">\n\timport { Label } from \"$lib/registry/ui/label/index.js\";\n\timport { cn } from \"$lib/utils.js\";\n\timport type { ComponentProps } from \"svelte\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: ComponentProps<typeof Label> = $props();\n</script>\n\n<Label\n\tbind:ref\n\tdata-slot=\"field-label\"\n\tclass={cn(\n\t\t\"cn-field-label group/field-label peer/field-label flex w-fit leading-snug\",\n\t\t\"has-[>[data-slot=field]]:w-full has-[>[data-slot=field]]:flex-col\",\n\t\tclassName\n\t)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</Label>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/field/field-legend.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tvariant = \"legend\",\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLLegendElement>> & {\n\t\tvariant?: \"legend\" | \"label\";\n\t} = $props();\n</script>\n\n<legend\n\tbind:this={ref}\n\tdata-slot=\"field-legend\"\n\tdata-variant={variant}\n\tclass={cn(\"cn-field-legend\", className)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</legend>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/field/field-separator.svelte",
    "content": "<script lang=\"ts\">\n\timport { Separator } from \"$lib/registry/ui/separator/index.js\";\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\timport type { Snippet } from \"svelte\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLDivElement>> & {\n\t\tchildren?: Snippet;\n\t} = $props();\n\n\tconst hasContent = $derived(!!children);\n</script>\n\n<div\n\tbind:this={ref}\n\tdata-slot=\"field-separator\"\n\tdata-content={hasContent}\n\tclass={cn(\"cn-field-separator relative\", className)}\n\t{...restProps}\n>\n\t<Separator class=\"absolute inset-0 top-1/2\" />\n\t{#if children}\n\t\t<span\n\t\t\tclass=\"cn-field-separator-content bg-background relative mx-auto block w-fit\"\n\t\t\tdata-slot=\"field-separator-content\"\n\t\t>\n\t\t\t{@render children()}\n\t\t</span>\n\t{/if}\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/field/field-set.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\timport type { HTMLFieldsetAttributes } from \"svelte/elements\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLFieldsetAttributes> = $props();\n</script>\n\n<fieldset\n\tbind:this={ref}\n\tdata-slot=\"field-set\"\n\tclass={cn(\"cn-field-set flex flex-col\", className)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</fieldset>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/field/field-title.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLDivElement>> = $props();\n</script>\n\n<div\n\tbind:this={ref}\n\tdata-slot=\"field-label\"\n\tclass={cn(\"cn-field-title flex w-fit items-center leading-snug\", className)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/field/field.svelte",
    "content": "<script lang=\"ts\" module>\n\timport { tv, type VariantProps } from \"tailwind-variants\";\n\n\texport const fieldVariants = tv({\n\t\tbase: \"cn-field group/field flex w-full\",\n\t\tvariants: {\n\t\t\torientation: {\n\t\t\t\tvertical: \"cn-field-orientation-vertical flex-col [&>*]:w-full [&>.sr-only]:w-auto\",\n\t\t\t\thorizontal:\n\t\t\t\t\t\"cn-field-orientation-horizontal flex-row items-center has-[>[data-slot=field-content]]:items-start [&>[data-slot=field-label]]:flex-auto has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px\",\n\t\t\t\tresponsive:\n\t\t\t\t\t\"cn-field-orientation-responsive flex-col @md/field-group:flex-row @md/field-group:items-center @md/field-group:has-[>[data-slot=field-content]]:items-start [&>*]:w-full @md/field-group:[&>*]:w-auto [&>.sr-only]:w-auto @md/field-group:[&>[data-slot=field-label]]:flex-auto @md/field-group:has-[>[data-slot=field-content]]:[&>[role=checkbox],[role=radio]]:mt-px\",\n\t\t\t},\n\t\t},\n\t\tdefaultVariants: {\n\t\t\torientation: \"vertical\",\n\t\t},\n\t});\n\n\texport type FieldOrientation = VariantProps<typeof fieldVariants>[\"orientation\"];\n</script>\n\n<script lang=\"ts\">\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\torientation = \"vertical\",\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLDivElement>> & {\n\t\torientation?: FieldOrientation;\n\t} = $props();\n</script>\n\n<div\n\tbind:this={ref}\n\trole=\"group\"\n\tdata-slot=\"field\"\n\tdata-orientation={orientation}\n\tclass={cn(fieldVariants({ orientation }), className)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/field/index.ts",
    "content": "import Field from \"./field.svelte\";\nimport Set from \"./field-set.svelte\";\nimport Legend from \"./field-legend.svelte\";\nimport Group from \"./field-group.svelte\";\nimport Content from \"./field-content.svelte\";\nimport Label from \"./field-label.svelte\";\nimport Title from \"./field-title.svelte\";\nimport Description from \"./field-description.svelte\";\nimport Separator from \"./field-separator.svelte\";\nimport Error from \"./field-error.svelte\";\n\nexport {\n\tField,\n\tSet,\n\tLegend,\n\tGroup,\n\tContent,\n\tLabel,\n\tTitle,\n\tDescription,\n\tSeparator,\n\tError,\n\t//\n\tSet as FieldSet,\n\tLegend as FieldLegend,\n\tGroup as FieldGroup,\n\tContent as FieldContent,\n\tLabel as FieldLabel,\n\tTitle as FieldTitle,\n\tDescription as FieldDescription,\n\tSeparator as FieldSeparator,\n\tError as FieldError,\n};\n"
  },
  {
    "path": "docs/src/lib/registry/ui/form/form-button.svelte",
    "content": "<script lang=\"ts\">\n\timport { Button, type ButtonProps } from \"$lib/registry/ui/button/index.js\";\n\n\tlet { ref = $bindable(null), ...restProps }: ButtonProps = $props();\n</script>\n\n<Button bind:ref type=\"submit\" {...restProps} />\n"
  },
  {
    "path": "docs/src/lib/registry/ui/form/form-description.svelte",
    "content": "<script lang=\"ts\">\n\timport * as FormPrimitive from \"formsnap\";\n\timport { cn, type WithoutChild } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\t...restProps\n\t}: WithoutChild<FormPrimitive.DescriptionProps> = $props();\n</script>\n\n<FormPrimitive.Description\n\tbind:ref\n\tdata-slot=\"form-description\"\n\tclass={cn(\"text-muted-foreground text-sm\", className)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/form/form-element-field.svelte",
    "content": "<script lang=\"ts\" generics=\"T extends Record<string, unknown>, U extends FormPathLeaves<T>\">\n\timport * as FormPrimitive from \"formsnap\";\n\timport type { FormPathLeaves } from \"sveltekit-superforms\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\timport { cn, type WithElementRef, type WithoutChildren } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tform,\n\t\tname,\n\t\tchildren: childrenProp,\n\t\t...restProps\n\t}: WithoutChildren<WithElementRef<HTMLAttributes<HTMLDivElement>>> &\n\t\tFormPrimitive.ElementFieldProps<T, U> = $props();\n</script>\n\n<FormPrimitive.ElementField {form} {name}>\n\t{#snippet children({ constraints, errors, tainted, value })}\n\t\t<div bind:this={ref} class={cn(\"space-y-2\", className)} {...restProps}>\n\t\t\t{@render childrenProp?.({ constraints, errors, tainted, value: value as T[U] })}\n\t\t</div>\n\t{/snippet}\n</FormPrimitive.ElementField>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/form/form-field-errors.svelte",
    "content": "<script lang=\"ts\">\n\timport * as FormPrimitive from \"formsnap\";\n\timport { cn, type WithoutChild } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\terrorClasses,\n\t\tchildren: childrenProp,\n\t\t...restProps\n\t}: WithoutChild<FormPrimitive.FieldErrorsProps> & {\n\t\terrorClasses?: string | undefined | null;\n\t} = $props();\n</script>\n\n<FormPrimitive.FieldErrors\n\tbind:ref\n\tclass={cn(\"text-destructive text-sm font-medium\", className)}\n\t{...restProps}\n>\n\t{#snippet children({ errors, errorProps })}\n\t\t{#if childrenProp}\n\t\t\t{@render childrenProp({ errors, errorProps })}\n\t\t{:else}\n\t\t\t{#each errors as error (error)}\n\t\t\t\t<div {...errorProps} class={cn(errorClasses)}>{error}</div>\n\t\t\t{/each}\n\t\t{/if}\n\t{/snippet}\n</FormPrimitive.FieldErrors>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/form/form-field.svelte",
    "content": "<script lang=\"ts\" generics=\"T extends Record<string, unknown>, U extends FormPath<T>\">\n\timport * as FormPrimitive from \"formsnap\";\n\timport type { FormPath } from \"sveltekit-superforms\";\n\timport { cn, type WithElementRef, type WithoutChildren } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tform,\n\t\tname,\n\t\tchildren: childrenProp,\n\t\t...restProps\n\t}: FormPrimitive.FieldProps<T, U> &\n\t\tWithoutChildren<WithElementRef<HTMLAttributes<HTMLDivElement>>> = $props();\n</script>\n\n<FormPrimitive.Field {form} {name}>\n\t{#snippet children({ constraints, errors, tainted, value })}\n\t\t<div\n\t\t\tbind:this={ref}\n\t\t\tdata-slot=\"form-item\"\n\t\t\tclass={cn(\"space-y-2\", className)}\n\t\t\t{...restProps}\n\t\t>\n\t\t\t{@render childrenProp?.({ constraints, errors, tainted, value: value as T[U] })}\n\t\t</div>\n\t{/snippet}\n</FormPrimitive.Field>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/form/form-fieldset.svelte",
    "content": "<script lang=\"ts\" generics=\"T extends Record<string, unknown>, U extends FormPath<T>\">\n\timport * as FormPrimitive from \"formsnap\";\n\timport type { FormPath } from \"sveltekit-superforms\";\n\timport { cn, type WithoutChild } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tform,\n\t\tname,\n\t\t...restProps\n\t}: WithoutChild<FormPrimitive.FieldsetProps<T, U>> = $props();\n</script>\n\n<FormPrimitive.Fieldset bind:ref {form} {name} class={cn(\"space-y-2\", className)} {...restProps} />\n"
  },
  {
    "path": "docs/src/lib/registry/ui/form/form-label.svelte",
    "content": "<script lang=\"ts\">\n\timport * as FormPrimitive from \"formsnap\";\n\timport { Label } from \"$lib/registry/ui/label/index.js\";\n\timport { cn, type WithoutChild } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tchildren,\n\t\tclass: className,\n\t\t...restProps\n\t}: WithoutChild<FormPrimitive.LabelProps> = $props();\n</script>\n\n<FormPrimitive.Label {...restProps} bind:ref>\n\t{#snippet child({ props })}\n\t\t<Label\n\t\t\t{...props}\n\t\t\tdata-slot=\"form-label\"\n\t\t\tclass={cn(\"data-[fs-error]:text-destructive\", className)}\n\t\t>\n\t\t\t{@render children?.()}\n\t\t</Label>\n\t{/snippet}\n</FormPrimitive.Label>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/form/form-legend.svelte",
    "content": "<script lang=\"ts\">\n\timport * as FormPrimitive from \"formsnap\";\n\timport { cn, type WithoutChild } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\t...restProps\n\t}: WithoutChild<FormPrimitive.LegendProps> = $props();\n</script>\n\n<FormPrimitive.Legend\n\tbind:ref\n\tclass={cn(\"data-[fs-error]:text-destructive text-sm leading-none font-medium\", className)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/form/index.ts",
    "content": "import * as FormPrimitive from \"formsnap\";\nimport Description from \"./form-description.svelte\";\nimport Label from \"./form-label.svelte\";\nimport FieldErrors from \"./form-field-errors.svelte\";\nimport Field from \"./form-field.svelte\";\nimport Fieldset from \"./form-fieldset.svelte\";\nimport Legend from \"./form-legend.svelte\";\nimport ElementField from \"./form-element-field.svelte\";\nimport Button from \"./form-button.svelte\";\n\nconst Control = FormPrimitive.Control;\n\nexport {\n\tField,\n\tControl,\n\tLabel,\n\tButton,\n\tFieldErrors,\n\tDescription,\n\tFieldset,\n\tLegend,\n\tElementField,\n\t//\n\tField as FormField,\n\tControl as FormControl,\n\tDescription as FormDescription,\n\tLabel as FormLabel,\n\tFieldErrors as FormFieldErrors,\n\tFieldset as FormFieldset,\n\tLegend as FormLegend,\n\tElementField as FormElementField,\n\tButton as FormButton,\n};\n"
  },
  {
    "path": "docs/src/lib/registry/ui/hover-card/hover-card-content.svelte",
    "content": "<script lang=\"ts\">\n\timport { LinkPreview as HoverCardPrimitive } from \"bits-ui\";\n\timport { cn, type WithoutChildrenOrChild } from \"$lib/utils.js\";\n\timport HoverCardPortal from \"./hover-card-portal.svelte\";\n\timport type { ComponentProps } from \"svelte\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\talign = \"center\",\n\t\tsideOffset = 4,\n\t\tportalProps,\n\t\t...restProps\n\t}: HoverCardPrimitive.ContentProps & {\n\t\tportalProps?: WithoutChildrenOrChild<ComponentProps<typeof HoverCardPortal>>;\n\t} = $props();\n</script>\n\n<HoverCardPortal {...portalProps}>\n\t<HoverCardPrimitive.Content\n\t\tbind:ref\n\t\tdata-slot=\"hover-card-content\"\n\t\t{align}\n\t\t{sideOffset}\n\t\tclass={cn(\n\t\t\t\"cn-hover-card-content z-50 origin-(--transform-origin) outline-hidden\",\n\t\t\tclassName\n\t\t)}\n\t\t{...restProps}\n\t/>\n</HoverCardPortal>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/hover-card/hover-card-portal.svelte",
    "content": "<script lang=\"ts\">\n\timport { LinkPreview as HoverCardPrimitive } from \"bits-ui\";\n\n\tlet { ...restProps }: HoverCardPrimitive.PortalProps = $props();\n</script>\n\n<HoverCardPrimitive.Portal {...restProps} />\n"
  },
  {
    "path": "docs/src/lib/registry/ui/hover-card/hover-card-trigger.svelte",
    "content": "<script lang=\"ts\">\n\timport { LinkPreview as HoverCardPrimitive } from \"bits-ui\";\n\n\tlet { ref = $bindable(null), ...restProps }: HoverCardPrimitive.TriggerProps = $props();\n</script>\n\n<HoverCardPrimitive.Trigger bind:ref data-slot=\"hover-card-trigger\" {...restProps} />\n"
  },
  {
    "path": "docs/src/lib/registry/ui/hover-card/hover-card.svelte",
    "content": "<script lang=\"ts\">\n\timport { LinkPreview as HoverCardPrimitive } from \"bits-ui\";\n\n\tlet { open = $bindable(false), ...restProps }: HoverCardPrimitive.RootProps = $props();\n</script>\n\n<HoverCardPrimitive.Root bind:open {...restProps} />\n"
  },
  {
    "path": "docs/src/lib/registry/ui/hover-card/index.ts",
    "content": "import Root from \"./hover-card.svelte\";\nimport Content from \"./hover-card-content.svelte\";\nimport Trigger from \"./hover-card-trigger.svelte\";\nimport Portal from \"./hover-card-portal.svelte\";\n\nexport {\n\tRoot,\n\tContent,\n\tTrigger,\n\tPortal,\n\tRoot as HoverCard,\n\tContent as HoverCardContent,\n\tTrigger as HoverCardTrigger,\n\tPortal as HoverCardPortal,\n};\n"
  },
  {
    "path": "docs/src/lib/registry/ui/input/index.ts",
    "content": "import Root from \"./input.svelte\";\n\nexport {\n\tRoot,\n\t//\n\tRoot as Input,\n};\n"
  },
  {
    "path": "docs/src/lib/registry/ui/input/input.svelte",
    "content": "<script lang=\"ts\">\n\timport type { HTMLInputAttributes, HTMLInputTypeAttribute } from \"svelte/elements\";\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\n\ttype InputType = Exclude<HTMLInputTypeAttribute, \"file\">;\n\n\ttype Props = WithElementRef<\n\t\tOmit<HTMLInputAttributes, \"type\"> &\n\t\t\t({ type: \"file\"; files?: FileList } | { type?: InputType; files?: undefined })\n\t>;\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tvalue = $bindable(),\n\t\ttype,\n\t\tfiles = $bindable(),\n\t\tclass: className,\n\t\t\"data-slot\": dataSlot = \"input\",\n\t\t...restProps\n\t}: Props = $props();\n</script>\n\n{#if type === \"file\"}\n\t<input\n\t\tbind:this={ref}\n\t\tdata-slot={dataSlot}\n\t\tclass={cn(\n\t\t\t\"cn-input file:text-foreground placeholder:text-muted-foreground w-full min-w-0 outline-none file:inline-flex file:border-0 file:bg-transparent disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50\",\n\t\t\tclassName\n\t\t)}\n\t\ttype=\"file\"\n\t\tbind:files\n\t\tbind:value\n\t\t{...restProps}\n\t/>\n{:else}\n\t<input\n\t\tbind:this={ref}\n\t\tdata-slot={dataSlot}\n\t\tclass={cn(\n\t\t\t\"cn-input file:text-foreground placeholder:text-muted-foreground w-full min-w-0 outline-none file:inline-flex file:border-0 file:bg-transparent disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50\",\n\t\t\tclassName\n\t\t)}\n\t\t{type}\n\t\tbind:value\n\t\t{...restProps}\n\t/>\n{/if}\n"
  },
  {
    "path": "docs/src/lib/registry/ui/input-group/index.ts",
    "content": "import Root from \"./input-group.svelte\";\nimport Addon from \"./input-group-addon.svelte\";\nimport Button from \"./input-group-button.svelte\";\nimport Input from \"./input-group-input.svelte\";\nimport Text from \"./input-group-text.svelte\";\nimport Textarea from \"./input-group-textarea.svelte\";\n\nexport {\n\tRoot,\n\tAddon,\n\tButton,\n\tInput,\n\tText,\n\tTextarea,\n\t//\n\tRoot as InputGroup,\n\tAddon as InputGroupAddon,\n\tButton as InputGroupButton,\n\tInput as InputGroupInput,\n\tText as InputGroupText,\n\tTextarea as InputGroupTextarea,\n};\n"
  },
  {
    "path": "docs/src/lib/registry/ui/input-group/input-group-addon.svelte",
    "content": "<script lang=\"ts\" module>\n\timport { tv, type VariantProps } from \"tailwind-variants\";\n\texport const inputGroupAddonVariants = tv({\n\t\tbase: \"cn-input-group-addon flex cursor-text items-center justify-center select-none\",\n\t\tvariants: {\n\t\t\talign: {\n\t\t\t\t\"inline-start\": \"cn-input-group-addon-align-inline-start order-first\",\n\t\t\t\t\"inline-end\": \"cn-input-group-addon-align-inline-end order-last\",\n\t\t\t\t\"block-start\":\n\t\t\t\t\t\"cn-input-group-addon-align-block-start order-first w-full justify-start\",\n\t\t\t\t\"block-end\": \"cn-input-group-addon-align-block-end order-last w-full justify-start\",\n\t\t\t},\n\t\t},\n\t\tdefaultVariants: {\n\t\t\talign: \"inline-start\",\n\t\t},\n\t});\n\n\texport type InputGroupAddonAlign = VariantProps<typeof inputGroupAddonVariants>[\"align\"];\n</script>\n\n<script lang=\"ts\">\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\talign = \"inline-start\",\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLDivElement>> & {\n\t\talign?: InputGroupAddonAlign;\n\t} = $props();\n</script>\n\n<div\n\tbind:this={ref}\n\trole=\"group\"\n\tdata-slot=\"input-group-addon\"\n\tdata-align={align}\n\tclass={cn(inputGroupAddonVariants({ align }), className)}\n\tonclick={(e) => {\n\t\tif ((e.target as HTMLElement).closest(\"button\")) {\n\t\t\treturn;\n\t\t}\n\t\te.currentTarget.parentElement?.querySelector(\"input\")?.focus();\n\t}}\n\t{...restProps}\n>\n\t{@render children?.()}\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/input-group/input-group-button.svelte",
    "content": "<script lang=\"ts\" module>\n\timport { tv, type VariantProps } from \"tailwind-variants\";\n\n\tconst inputGroupButtonVariants = tv({\n\t\tbase: \"cn-input-group-button flex items-center shadow-none\",\n\t\tvariants: {\n\t\t\tsize: {\n\t\t\t\txs: \"cn-input-group-button-size-xs\",\n\t\t\t\tsm: \"cn-input-group-button-size-sm\",\n\t\t\t\t\"icon-xs\": \"cn-input-group-button-size-icon-xs\",\n\t\t\t\t\"icon-sm\": \"cn-input-group-button-size-icon-sm\",\n\t\t\t},\n\t\t},\n\t\tdefaultVariants: {\n\t\t\tsize: \"xs\",\n\t\t},\n\t});\n\n\texport type InputGroupButtonSize = VariantProps<typeof inputGroupButtonVariants>[\"size\"];\n</script>\n\n<script lang=\"ts\">\n\timport { cn } from \"$lib/utils.js\";\n\timport type { ComponentProps } from \"svelte\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\ttype = \"button\",\n\t\tvariant = \"ghost\",\n\t\tsize = \"xs\",\n\t\t...restProps\n\t}: Omit<ComponentProps<typeof Button>, \"href\" | \"size\"> & {\n\t\tsize?: InputGroupButtonSize;\n\t} = $props();\n</script>\n\n<Button\n\tbind:ref\n\t{type}\n\tdata-size={size}\n\t{variant}\n\tclass={cn(inputGroupButtonVariants({ size }), className)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</Button>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/input-group/input-group-input.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn } from \"$lib/utils.js\";\n\timport type { ComponentProps } from \"svelte\";\n\timport { Input } from \"$lib/registry/ui/input/index.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tvalue = $bindable(),\n\t\tclass: className,\n\t\t...props\n\t}: ComponentProps<typeof Input> = $props();\n</script>\n\n<Input\n\tbind:ref\n\tdata-slot=\"input-group-control\"\n\tclass={cn(\"cn-input-group-input flex-1\", className)}\n\tbind:value\n\t{...props}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/input-group/input-group-text.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLSpanElement>> = $props();\n</script>\n\n<span\n\tbind:this={ref}\n\tclass={cn(\"cn-input-group-text flex items-center [&_svg]:pointer-events-none\", className)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</span>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/input-group/input-group-textarea.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn } from \"$lib/utils.js\";\n\timport { Textarea } from \"$lib/registry/ui/textarea/index.js\";\n\timport type { ComponentProps } from \"svelte\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tvalue = $bindable(),\n\t\tclass: className,\n\t\t...props\n\t}: ComponentProps<typeof Textarea> = $props();\n</script>\n\n<Textarea\n\tbind:ref\n\tdata-slot=\"input-group-control\"\n\tclass={cn(\"cn-input-group-textarea flex-1 resize-none\", className)}\n\tbind:value\n\t{...props}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/input-group/input-group.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...props\n\t}: WithElementRef<HTMLAttributes<HTMLDivElement>> = $props();\n</script>\n\n<div\n\tbind:this={ref}\n\tdata-slot=\"input-group\"\n\trole=\"group\"\n\tclass={cn(\n\t\t\"group/input-group cn-input-group relative flex w-full min-w-0 items-center outline-none has-[>textarea]:h-auto\",\n\t\tclassName\n\t)}\n\t{...props}\n>\n\t{@render children?.()}\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/input-otp/index.ts",
    "content": "import Root from \"./input-otp.svelte\";\nimport Group from \"./input-otp-group.svelte\";\nimport Slot from \"./input-otp-slot.svelte\";\nimport Separator from \"./input-otp-separator.svelte\";\n\nexport {\n\tRoot,\n\tGroup,\n\tSlot,\n\tSeparator,\n\tRoot as InputOTP,\n\tGroup as InputOTPGroup,\n\tSlot as InputOTPSlot,\n\tSeparator as InputOTPSeparator,\n};\n"
  },
  {
    "path": "docs/src/lib/registry/ui/input-otp/input-otp-group.svelte",
    "content": "<script lang=\"ts\">\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLDivElement>> = $props();\n</script>\n\n<div\n\tbind:this={ref}\n\tdata-slot=\"input-otp-group\"\n\tclass={cn(\"cn-input-otp-group flex items-center\", className)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/input-otp/input-otp-separator.svelte",
    "content": "<script lang=\"ts\">\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\timport type { WithElementRef } from \"$lib/utils.js\";\n\timport { cn } from \"$lib/utils.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLDivElement>> = $props();\n</script>\n\n<div\n\tbind:this={ref}\n\tdata-slot=\"input-otp-separator\"\n\trole=\"separator\"\n\tclass={cn(\"cn-input-otp-separator flex items-center\", className)}\n\t{...restProps}\n>\n\t{#if children}\n\t\t{@render children?.()}\n\t{:else}\n\t\t<IconPlaceholder\n\t\t\tlucide=\"MinusIcon\"\n\t\t\ttabler=\"IconMinus\"\n\t\t\thugeicons=\"MinusSignIcon\"\n\t\t\tphosphor=\"MinusIcon\"\n\t\t\tremixicon=\"RiSubtractLine\"\n\t\t/>\n\t{/if}\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/input-otp/input-otp-slot.svelte",
    "content": "<script lang=\"ts\">\n\timport { PinInput as InputOTPPrimitive } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tcell,\n\t\tclass: className,\n\t\t...restProps\n\t}: InputOTPPrimitive.CellProps = $props();\n</script>\n\n<InputOTPPrimitive.Cell\n\t{cell}\n\tbind:ref\n\tdata-slot=\"input-otp-slot\"\n\tclass={cn(\n\t\t\"cn-input-otp-slot relative flex items-center justify-center data-[active=true]:z-10\",\n\t\tclassName\n\t)}\n\t{...restProps}\n>\n\t{cell.char}\n\t{#if cell.hasFakeCaret}\n\t\t<div\n\t\t\tclass=\"cn-input-otp-caret pointer-events-none absolute inset-0 flex items-center justify-center\"\n\t\t>\n\t\t\t<div class=\"cn-input-otp-caret-line bg-foreground h-4 w-px\"></div>\n\t\t</div>\n\t{/if}\n</InputOTPPrimitive.Cell>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/input-otp/input-otp.svelte",
    "content": "<script lang=\"ts\">\n\timport { PinInput as InputOTPPrimitive } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tvalue = $bindable(\"\"),\n\t\t...restProps\n\t}: InputOTPPrimitive.RootProps = $props();\n</script>\n\n<InputOTPPrimitive.Root\n\tbind:ref\n\tbind:value\n\tdata-slot=\"input-otp\"\n\tspellcheck={false}\n\tclass={cn(\n\t\t\"cn-input-otp-input cn-input-otp flex items-center disabled:cursor-not-allowed has-disabled:opacity-50\",\n\t\tclassName\n\t)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/item/index.ts",
    "content": "import Root from \"./item.svelte\";\nimport Group from \"./item-group.svelte\";\nimport Separator from \"./item-separator.svelte\";\nimport Header from \"./item-header.svelte\";\nimport Footer from \"./item-footer.svelte\";\nimport Content from \"./item-content.svelte\";\nimport Title from \"./item-title.svelte\";\nimport Description from \"./item-description.svelte\";\nimport Actions from \"./item-actions.svelte\";\nimport Media from \"./item-media.svelte\";\n\nexport {\n\tRoot,\n\tGroup,\n\tSeparator,\n\tHeader,\n\tFooter,\n\tContent,\n\tTitle,\n\tDescription,\n\tActions,\n\tMedia,\n\t//\n\tRoot as Item,\n\tGroup as ItemGroup,\n\tSeparator as ItemSeparator,\n\tHeader as ItemHeader,\n\tFooter as ItemFooter,\n\tContent as ItemContent,\n\tTitle as ItemTitle,\n\tDescription as ItemDescription,\n\tActions as ItemActions,\n\tMedia as ItemMedia,\n};\n"
  },
  {
    "path": "docs/src/lib/registry/ui/item/item-actions.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLDivElement>> = $props();\n</script>\n\n<div\n\tbind:this={ref}\n\tdata-slot=\"item-actions\"\n\tclass={cn(\"cn-item-actions flex items-center\", className)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/item/item-content.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLDivElement>> = $props();\n</script>\n\n<div\n\tbind:this={ref}\n\tdata-slot=\"item-content\"\n\tclass={cn(\n\t\t\"cn-item-content flex flex-1 flex-col [&+[data-slot=item-content]]:flex-none\",\n\t\tclassName\n\t)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/item/item-description.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLParagraphElement>> = $props();\n</script>\n\n<p\n\tbind:this={ref}\n\tdata-slot=\"item-description\"\n\tclass={cn(\n\t\t\"cn-item-description [&>a:hover]:text-primary line-clamp-2 font-normal [&>a]:underline [&>a]:underline-offset-4\",\n\t\tclassName\n\t)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</p>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/item/item-footer.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLDivElement>> = $props();\n</script>\n\n<div\n\tbind:this={ref}\n\tdata-slot=\"item-footer\"\n\tclass={cn(\"cn-item-footer flex basis-full items-center justify-between\", className)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/item/item-group.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLDivElement>> = $props();\n</script>\n\n<div\n\tbind:this={ref}\n\trole=\"list\"\n\tdata-slot=\"item-group\"\n\tclass={cn(\"cn-item-group group/item-group flex w-full flex-col\", className)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/item/item-header.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLDivElement>> = $props();\n</script>\n\n<div\n\tbind:this={ref}\n\tdata-slot=\"item-header\"\n\tclass={cn(\"cn-item-header flex basis-full items-center justify-between\", className)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/item/item-media.svelte",
    "content": "<script lang=\"ts\" module>\n\timport { tv, type VariantProps } from \"tailwind-variants\";\n\n\texport const itemMediaVariants = tv({\n\t\tbase: \"cn-item-media flex shrink-0 items-center justify-center [&_svg]:pointer-events-none\",\n\t\tvariants: {\n\t\t\tvariant: {\n\t\t\t\tdefault: \"cn-item-media-variant-default\",\n\t\t\t\ticon: \"cn-item-media-variant-icon\",\n\t\t\t\timage: \"cn-item-media-variant-image\",\n\t\t\t},\n\t\t},\n\t\tdefaultVariants: {\n\t\t\tvariant: \"default\",\n\t\t},\n\t});\n\n\texport type ItemMediaVariant = VariantProps<typeof itemMediaVariants>[\"variant\"];\n</script>\n\n<script lang=\"ts\">\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\tvariant = \"default\",\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLDivElement>> & { variant?: ItemMediaVariant } = $props();\n</script>\n\n<div\n\tbind:this={ref}\n\tdata-slot=\"item-media\"\n\tdata-variant={variant}\n\tclass={cn(itemMediaVariants({ variant }), className)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/item/item-separator.svelte",
    "content": "<script lang=\"ts\">\n\timport { Separator } from \"$lib/registry/ui/separator/index.js\";\n\timport { cn } from \"$lib/utils.js\";\n\timport type { ComponentProps } from \"svelte\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\t...restProps\n\t}: ComponentProps<typeof Separator> = $props();\n</script>\n\n<Separator\n\tbind:ref\n\tdata-slot=\"item-separator\"\n\torientation=\"horizontal\"\n\tclass={cn(\"cn-item-separator\", className)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/item/item-title.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLDivElement>> = $props();\n</script>\n\n<div\n\tbind:this={ref}\n\tdata-slot=\"item-title\"\n\tclass={cn(\"cn-item-title line-clamp-1 flex w-fit items-center\", className)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/item/item.svelte",
    "content": "<script lang=\"ts\" module>\n\timport { tv, type VariantProps } from \"tailwind-variants\";\n\n\texport const itemVariants = tv({\n\t\tbase: \"cn-item group/item focus-visible:border-ring focus-visible:ring-ring/50 flex w-full flex-wrap items-center transition-colors duration-100 outline-none focus-visible:ring-[3px] [a]:transition-colors\",\n\t\tvariants: {\n\t\t\tvariant: {\n\t\t\t\tdefault: \"cn-item-variant-default\",\n\t\t\t\toutline: \"cn-item-variant-outline\",\n\t\t\t\tmuted: \"cn-item-variant-muted\",\n\t\t\t},\n\t\t\tsize: {\n\t\t\t\tdefault: \"cn-item-size-default\",\n\t\t\t\tsm: \"cn-item-size-sm\",\n\t\t\t\txs: \"cn-item-size-xs\",\n\t\t\t},\n\t\t},\n\t\tdefaultVariants: {\n\t\t\tvariant: \"default\",\n\t\t\tsize: \"default\",\n\t\t},\n\t});\n\n\texport type ItemSize = VariantProps<typeof itemVariants>[\"size\"];\n\texport type ItemVariant = VariantProps<typeof itemVariants>[\"variant\"];\n</script>\n\n<script lang=\"ts\">\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\timport type { Snippet } from \"svelte\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchild,\n\t\tvariant,\n\t\tsize,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLDivElement>> & {\n\t\tchild?: Snippet<[{ props: Record<string, unknown> }]>;\n\t\tvariant?: ItemVariant;\n\t\tsize?: ItemSize;\n\t} = $props();\n\n\tconst mergedProps = $derived({\n\t\tclass: cn(itemVariants({ variant, size }), className),\n\t\t\"data-slot\": \"item\",\n\t\t\"data-variant\": variant,\n\t\t\"data-size\": size,\n\t\t...restProps,\n\t});\n</script>\n\n{#if child}\n\t{@render child({ props: mergedProps })}\n{:else}\n\t<div bind:this={ref} {...mergedProps}>\n\t\t{@render mergedProps.children?.()}\n\t</div>\n{/if}\n"
  },
  {
    "path": "docs/src/lib/registry/ui/kbd/index.ts",
    "content": "import Root from \"./kbd.svelte\";\nimport Group from \"./kbd-group.svelte\";\n\nexport {\n\tRoot,\n\tGroup,\n\t//\n\tRoot as Kbd,\n\tGroup as KbdGroup,\n};\n"
  },
  {
    "path": "docs/src/lib/registry/ui/kbd/kbd-group.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLElement>> = $props();\n</script>\n\n<kbd\n\tbind:this={ref}\n\tdata-slot=\"kbd-group\"\n\tclass={cn(\"cn-kbd-group inline-flex items-center\", className)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</kbd>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/kbd/kbd.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLElement>> = $props();\n</script>\n\n<kbd\n\tbind:this={ref}\n\tdata-slot=\"kbd\"\n\tclass={cn(\n\t\t\"cn-kbd pointer-events-none inline-flex items-center justify-center select-none\",\n\t\tclassName\n\t)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</kbd>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/label/index.ts",
    "content": "import Root from \"./label.svelte\";\n\nexport {\n\tRoot,\n\t//\n\tRoot as Label,\n};\n"
  },
  {
    "path": "docs/src/lib/registry/ui/label/label.svelte",
    "content": "<script lang=\"ts\">\n\timport { Label as LabelPrimitive } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\t...restProps\n\t}: LabelPrimitive.RootProps = $props();\n</script>\n\n<LabelPrimitive.Root\n\tbind:ref\n\tdata-slot=\"label\"\n\tclass={cn(\n\t\t\"cn-label flex items-center select-none group-data-[disabled=true]:pointer-events-none peer-disabled:cursor-not-allowed\",\n\t\tclassName\n\t)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/menubar/index.ts",
    "content": "import Root from \"./menubar.svelte\";\nimport Menu from \"./menubar-menu.svelte\";\nimport Sub from \"./menubar-sub.svelte\";\nimport RadioGroup from \"./menubar-radio-group.svelte\";\nimport CheckboxItem from \"./menubar-checkbox-item.svelte\";\nimport Content from \"./menubar-content.svelte\";\nimport Item from \"./menubar-item.svelte\";\nimport Group from \"./menubar-group.svelte\";\nimport RadioItem from \"./menubar-radio-item.svelte\";\nimport Separator from \"./menubar-separator.svelte\";\nimport Shortcut from \"./menubar-shortcut.svelte\";\nimport SubContent from \"./menubar-sub-content.svelte\";\nimport SubTrigger from \"./menubar-sub-trigger.svelte\";\nimport Trigger from \"./menubar-trigger.svelte\";\nimport Label from \"./menubar-label.svelte\";\nimport GroupHeading from \"./menubar-group-heading.svelte\";\nimport Portal from \"./menubar-portal.svelte\";\n\nexport {\n\tRoot,\n\tCheckboxItem,\n\tContent,\n\tItem,\n\tRadioItem,\n\tSeparator,\n\tShortcut,\n\tSubContent,\n\tSubTrigger,\n\tTrigger,\n\tMenu,\n\tGroup,\n\tSub,\n\tRadioGroup,\n\tLabel,\n\tGroupHeading,\n\tPortal,\n\t//\n\tRoot as Menubar,\n\tCheckboxItem as MenubarCheckboxItem,\n\tContent as MenubarContent,\n\tItem as MenubarItem,\n\tRadioItem as MenubarRadioItem,\n\tSeparator as MenubarSeparator,\n\tShortcut as MenubarShortcut,\n\tSubContent as MenubarSubContent,\n\tSubTrigger as MenubarSubTrigger,\n\tTrigger as MenubarTrigger,\n\tMenu as MenubarMenu,\n\tGroup as MenubarGroup,\n\tSub as MenubarSub,\n\tRadioGroup as MenubarRadioGroup,\n\tLabel as MenubarLabel,\n\tGroupHeading as MenubarGroupHeading,\n\tPortal as MenubarPortal,\n};\n"
  },
  {
    "path": "docs/src/lib/registry/ui/menubar/menubar-checkbox-item.svelte",
    "content": "<script lang=\"ts\">\n\timport { Menubar as MenubarPrimitive } from \"bits-ui\";\n\timport { cn, type WithoutChildrenOrChild } from \"$lib/utils.js\";\n\timport type { Snippet } from \"svelte\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchecked = $bindable(false),\n\t\tindeterminate = $bindable(false),\n\t\tinset,\n\t\tchildren: childrenProp,\n\t\t...restProps\n\t}: WithoutChildrenOrChild<MenubarPrimitive.CheckboxItemProps> & {\n\t\tinset?: boolean;\n\t\tchildren?: Snippet;\n\t} = $props();\n</script>\n\n<MenubarPrimitive.CheckboxItem\n\tbind:ref\n\tbind:checked\n\tbind:indeterminate\n\tdata-slot=\"menubar-checkbox-item\"\n\tdata-inset={inset}\n\tclass={cn(\n\t\t\"cn-menubar-checkbox-item relative flex cursor-default items-center outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n\t\tclassName\n\t)}\n\t{...restProps}\n>\n\t{#snippet children({ checked: checked, indeterminate: indeterminate })}\n\t\t<span\n\t\t\tclass=\"cn-menubar-checkbox-item-indicator pointer-events-none absolute flex items-center justify-center\"\n\t\t>\n\t\t\t{#if indeterminate}\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"MinusIcon\"\n\t\t\t\t\ttabler=\"IconMinus\"\n\t\t\t\t\thugeicons=\"MinusSignIcon\"\n\t\t\t\t\tphosphor=\"MinusIcon\"\n\t\t\t\t\tremixicon=\"RiSubtractLine\"\n\t\t\t\t/>\n\t\t\t{:else if checked}\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"CheckIcon\"\n\t\t\t\t\ttabler=\"IconCheck\"\n\t\t\t\t\thugeicons=\"Tick02Icon\"\n\t\t\t\t\tphosphor=\"CheckIcon\"\n\t\t\t\t\tremixicon=\"RiCheckLine\"\n\t\t\t\t/>\n\t\t\t{/if}\n\t\t</span>\n\t\t{@render childrenProp?.()}\n\t{/snippet}\n</MenubarPrimitive.CheckboxItem>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/menubar/menubar-content.svelte",
    "content": "<script lang=\"ts\">\n\timport { Menubar as MenubarPrimitive } from \"bits-ui\";\n\timport MenubarPortal from \"./menubar-portal.svelte\";\n\timport { cn, type WithoutChildrenOrChild } from \"$lib/utils.js\";\n\timport type { ComponentProps } from \"svelte\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tsideOffset = 8,\n\t\talignOffset = -4,\n\t\talign = \"start\",\n\t\tside = \"bottom\",\n\t\tportalProps,\n\t\t...restProps\n\t}: MenubarPrimitive.ContentProps & {\n\t\tportalProps?: WithoutChildrenOrChild<ComponentProps<typeof MenubarPortal>>;\n\t} = $props();\n</script>\n\n<MenubarPortal {...portalProps}>\n\t<MenubarPrimitive.Content\n\t\tbind:ref\n\t\tdata-slot=\"menubar-content\"\n\t\t{align}\n\t\t{alignOffset}\n\t\t{side}\n\t\t{sideOffset}\n\t\tclass={cn(\n\t\t\t\"cn-menu-target cn-menu-translucent bg-popover text-popover-foreground ring-foreground/10 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 z-50 min-w-36 origin-(--bits-menubar-content-transform-origin) overflow-hidden rounded-lg p-1 shadow-md ring-1 duration-100\",\n\t\t\tclassName\n\t\t)}\n\t\t{...restProps}\n\t/>\n</MenubarPortal>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/menubar/menubar-group-heading.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn } from \"$lib/utils.js\";\n\timport { Menubar as MenubarPrimitive } from \"bits-ui\";\n\timport type { ComponentProps } from \"svelte\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tinset,\n\t\tclass: className,\n\t\t...restProps\n\t}: ComponentProps<typeof MenubarPrimitive.GroupHeading> & {\n\t\tinset?: boolean;\n\t} = $props();\n</script>\n\n<MenubarPrimitive.GroupHeading\n\tbind:ref\n\tdata-slot=\"menubar-group-heading\"\n\tdata-inset={inset}\n\tclass={cn(\"px-2 py-1.5 text-sm font-medium data-[inset]:ps-8\", className)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/menubar/menubar-group.svelte",
    "content": "<script lang=\"ts\">\n\timport { Menubar as MenubarPrimitive } from \"bits-ui\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\t...restProps\n\t}: MenubarPrimitive.GroupProps & {\n\t\tinset?: boolean;\n\t} = $props();\n</script>\n\n<MenubarPrimitive.Group bind:ref data-slot=\"menubar-group\" {...restProps} />\n"
  },
  {
    "path": "docs/src/lib/registry/ui/menubar/menubar-item.svelte",
    "content": "<script lang=\"ts\">\n\timport { Menubar as MenubarPrimitive } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tinset = undefined,\n\t\tvariant = \"default\",\n\t\t...restProps\n\t}: MenubarPrimitive.ItemProps & {\n\t\tinset?: boolean;\n\t\tvariant?: \"default\" | \"destructive\";\n\t} = $props();\n</script>\n\n<MenubarPrimitive.Item\n\tbind:ref\n\tdata-slot=\"menubar-item\"\n\tdata-inset={inset}\n\tdata-variant={variant}\n\tclass={cn(\"cn-menubar-item group/menubar-item flex items-center\", className)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/menubar/menubar-label.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn } from \"$lib/utils.js\";\n\timport { type WithElementRef } from \"bits-ui\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tinset,\n\t\tchildren,\n\t\tclass: className,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLElement>> & {\n\t\tinset?: boolean;\n\t} = $props();\n</script>\n\n<div\n\tbind:this={ref}\n\tdata-slot=\"menubar-label\"\n\tdata-inset={inset}\n\tclass={cn(\"cn-menubar-label\", className)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/menubar/menubar-menu.svelte",
    "content": "<script lang=\"ts\">\n\timport { Menubar as MenubarPrimitive } from \"bits-ui\";\n\n\tlet { ...restProps }: MenubarPrimitive.MenuProps = $props();\n</script>\n\n<MenubarPrimitive.Menu {...restProps} />\n"
  },
  {
    "path": "docs/src/lib/registry/ui/menubar/menubar-portal.svelte",
    "content": "<script lang=\"ts\">\n\timport { Menubar as MenubarPrimitive } from \"bits-ui\";\n\n\tlet { ...restProps }: MenubarPrimitive.PortalProps = $props();\n</script>\n\n<MenubarPrimitive.Portal {...restProps} />\n"
  },
  {
    "path": "docs/src/lib/registry/ui/menubar/menubar-radio-group.svelte",
    "content": "<script lang=\"ts\">\n\timport { Menubar as MenubarPrimitive } from \"bits-ui\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tvalue = $bindable(\"\"),\n\t\t...restProps\n\t}: MenubarPrimitive.RadioGroupProps = $props();\n</script>\n\n<MenubarPrimitive.RadioGroup bind:ref bind:value data-slot=\"menubar-radio-group\" {...restProps} />\n"
  },
  {
    "path": "docs/src/lib/registry/ui/menubar/menubar-radio-item.svelte",
    "content": "<script lang=\"ts\">\n\timport { Menubar as MenubarPrimitive } from \"bits-ui\";\n\timport { cn, type WithoutChild } from \"$lib/utils.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tinset,\n\t\tchildren: childrenProp,\n\t\t...restProps\n\t}: WithoutChild<MenubarPrimitive.RadioItemProps> & {\n\t\tinset?: boolean;\n\t} = $props();\n</script>\n\n<MenubarPrimitive.RadioItem\n\tbind:ref\n\tdata-slot=\"menubar-radio-item\"\n\tdata-inset={inset}\n\tclass={cn(\n\t\t\"cn-menubar-radio-item relative flex cursor-default items-center outline-hidden select-none data-disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n\t\tclassName\n\t)}\n\t{...restProps}\n>\n\t{#snippet children({ checked })}\n\t\t<span\n\t\t\tclass=\"cn-menubar-radio-item-indicator pointer-events-none absolute flex items-center justify-center\"\n\t\t>\n\t\t\t{#if checked}\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"CheckIcon\"\n\t\t\t\t\ttabler=\"IconCheck\"\n\t\t\t\t\thugeicons=\"Tick02Icon\"\n\t\t\t\t\tphosphor=\"CheckIcon\"\n\t\t\t\t\tremixicon=\"RiCheckLine\"\n\t\t\t\t/>\n\t\t\t{/if}\n\t\t</span>\n\t\t{@render childrenProp?.({ checked })}\n\t{/snippet}\n</MenubarPrimitive.RadioItem>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/menubar/menubar-separator.svelte",
    "content": "<script lang=\"ts\">\n\timport { Menubar as MenubarPrimitive } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\t...restProps\n\t}: MenubarPrimitive.SeparatorProps = $props();\n</script>\n\n<MenubarPrimitive.Separator\n\tbind:ref\n\tdata-slot=\"menubar-separator\"\n\tclass={cn(\"cn-menubar-separator -mx-1 my-1 h-px\", className)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/menubar/menubar-shortcut.svelte",
    "content": "<script lang=\"ts\">\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLSpanElement>> = $props();\n</script>\n\n<span\n\tbind:this={ref}\n\tdata-slot=\"menubar-shortcut\"\n\tclass={cn(\"cn-menubar-shortcut ml-auto\", className)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</span>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/menubar/menubar-sub-content.svelte",
    "content": "<script lang=\"ts\">\n\timport { Menubar as MenubarPrimitive } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\t...restProps\n\t}: MenubarPrimitive.SubContentProps = $props();\n</script>\n\n<MenubarPrimitive.SubContent\n\tbind:ref\n\tdata-slot=\"menubar-sub-content\"\n\tclass={cn(\"cn-menubar-sub-content cn-menu-target cn-menu-translucent\", className)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/menubar/menubar-sub-trigger.svelte",
    "content": "<script lang=\"ts\">\n\timport { Menubar as MenubarPrimitive } from \"bits-ui\";\n\timport { cn, type WithoutChild } from \"$lib/utils.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tinset = undefined,\n\t\tchildren,\n\t\t...restProps\n\t}: WithoutChild<MenubarPrimitive.SubTriggerProps> & {\n\t\tinset?: boolean;\n\t} = $props();\n</script>\n\n<MenubarPrimitive.SubTrigger\n\tbind:ref\n\tdata-slot=\"menubar-sub-trigger\"\n\tdata-inset={inset}\n\tclass={cn(\n\t\t\"cn-menubar-sub-trigger flex cursor-default items-center outline-none select-none\",\n\t\tclassName\n\t)}\n\t{...restProps}\n>\n\t{@render children?.()}\n\t<IconPlaceholder\n\t\tlucide=\"ChevronRightIcon\"\n\t\ttabler=\"IconChevronRight\"\n\t\thugeicons=\"ArrowRight01Icon\"\n\t\tphosphor=\"CaretRightIcon\"\n\t\tremixicon=\"RiArrowRightSLine\"\n\t\tclass=\"cn-rtl-flip ml-auto size-4\"\n\t/>\n</MenubarPrimitive.SubTrigger>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/menubar/menubar-sub.svelte",
    "content": "<script lang=\"ts\">\n\timport { Menubar as MenubarPrimitive } from \"bits-ui\";\n\n\tlet { open = $bindable(false), ...restProps }: MenubarPrimitive.SubProps = $props();\n</script>\n\n<MenubarPrimitive.Sub bind:open {...restProps} />\n"
  },
  {
    "path": "docs/src/lib/registry/ui/menubar/menubar-trigger.svelte",
    "content": "<script lang=\"ts\">\n\timport { Menubar as MenubarPrimitive } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\t...restProps\n\t}: MenubarPrimitive.TriggerProps = $props();\n</script>\n\n<MenubarPrimitive.Trigger\n\tbind:ref\n\tdata-slot=\"menubar-trigger\"\n\tclass={cn(\"cn-menubar-trigger flex items-center outline-hidden select-none\", className)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/menubar/menubar.svelte",
    "content": "<script lang=\"ts\">\n\timport { Menubar as MenubarPrimitive } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\t...restProps\n\t}: MenubarPrimitive.RootProps = $props();\n</script>\n\n<MenubarPrimitive.Root\n\tbind:ref\n\tdata-slot=\"menubar\"\n\tclass={cn(\"cn-menubar flex items-center\", className)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/native-select/index.ts",
    "content": "import Root from \"./native-select.svelte\";\nimport Option from \"./native-select-option.svelte\";\nimport OptGroup from \"./native-select-opt-group.svelte\";\n\nexport {\n\tRoot,\n\tOption,\n\tOptGroup,\n\tRoot as NativeSelect,\n\tOption as NativeSelectOption,\n\tOptGroup as NativeSelectOptGroup,\n};\n"
  },
  {
    "path": "docs/src/lib/registry/ui/native-select/native-select-opt-group.svelte",
    "content": "<script lang=\"ts\">\n\timport type { HTMLOptgroupAttributes } from \"svelte/elements\";\n\timport type { WithElementRef } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLOptgroupAttributes> = $props();\n</script>\n\n<optgroup bind:this={ref} data-slot=\"native-select-opt-group\" {...restProps}>\n\t{@render children?.()}\n</optgroup>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/native-select/native-select-option.svelte",
    "content": "<script lang=\"ts\">\n\timport type { HTMLOptionAttributes } from \"svelte/elements\";\n\timport type { WithElementRef } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLOptionAttributes> = $props();\n</script>\n\n<option bind:this={ref} data-slot=\"native-select-option\" {...restProps}>\n\t{@render children?.()}\n</option>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/native-select/native-select.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\timport type { HTMLSelectAttributes } from \"svelte/elements\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\n\ttype NativeSelectProps = Omit<WithElementRef<HTMLSelectAttributes>, \"size\"> & {\n\t\tsize?: \"sm\" | \"default\";\n\t};\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tvalue = $bindable(),\n\t\tclass: className,\n\t\tsize = \"default\",\n\t\tchildren,\n\t\t...restProps\n\t}: NativeSelectProps = $props();\n</script>\n\n<div\n\tclass={cn(\n\t\t\"cn-native-select-wrapper group/native-select relative w-fit has-[select:disabled]:opacity-50\",\n\t\tclassName\n\t)}\n\tdata-slot=\"native-select-wrapper\"\n\tdata-size={size}\n>\n\t<select\n\t\tbind:value\n\t\tbind:this={ref}\n\t\tdata-slot=\"native-select\"\n\t\tdata-size={size}\n\t\tclass=\"cn-native-select outline-none disabled:pointer-events-none disabled:cursor-not-allowed\"\n\t\t{...restProps}\n\t>\n\t\t{@render children?.()}\n\t</select>\n\t<IconPlaceholder\n\t\tlucide=\"ChevronDownIcon\"\n\t\ttabler=\"IconSelector\"\n\t\thugeicons=\"UnfoldMoreIcon\"\n\t\tphosphor=\"CaretDownIcon\"\n\t\tremixicon=\"RiArrowDownSLine\"\n\t\tclass=\"cn-native-select-icon pointer-events-none absolute select-none\"\n\t\taria-hidden\n\t\tdata-slot=\"native-select-icon\"\n\t/>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/navigation-menu/index.ts",
    "content": "import Root from \"./navigation-menu.svelte\";\nimport Content from \"./navigation-menu-content.svelte\";\nimport Indicator from \"./navigation-menu-indicator.svelte\";\nimport Item from \"./navigation-menu-item.svelte\";\nimport Link from \"./navigation-menu-link.svelte\";\nimport List from \"./navigation-menu-list.svelte\";\nimport Trigger from \"./navigation-menu-trigger.svelte\";\nimport Viewport from \"./navigation-menu-viewport.svelte\";\n\nexport {\n\tRoot,\n\tContent,\n\tIndicator,\n\tItem,\n\tLink,\n\tList,\n\tTrigger,\n\tViewport,\n\t//\n\tRoot as NavigationMenuRoot,\n\tContent as NavigationMenuContent,\n\tIndicator as NavigationMenuIndicator,\n\tItem as NavigationMenuItem,\n\tLink as NavigationMenuLink,\n\tList as NavigationMenuList,\n\tTrigger as NavigationMenuTrigger,\n\tViewport as NavigationMenuViewport,\n};\n"
  },
  {
    "path": "docs/src/lib/registry/ui/navigation-menu/navigation-menu-content.svelte",
    "content": "<script lang=\"ts\">\n\timport { NavigationMenu as NavigationMenuPrimitive } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\t...restProps\n\t}: NavigationMenuPrimitive.ContentProps = $props();\n</script>\n\n<NavigationMenuPrimitive.Content\n\tbind:ref\n\tdata-slot=\"navigation-menu-content\"\n\tclass={cn(\n\t\t\"cn-navigation-menu-content top-0 left-0 w-full group-data-[viewport=false]/navigation-menu:top-full group-data-[viewport=false]/navigation-menu:mt-1.5 group-data-[viewport=false]/navigation-menu:overflow-hidden **:data-[slot=navigation-menu-link]:focus:ring-0 **:data-[slot=navigation-menu-link]:focus:outline-none md:absolute md:w-auto\",\n\t\tclassName\n\t)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/navigation-menu/navigation-menu-indicator.svelte",
    "content": "<script lang=\"ts\">\n\timport { NavigationMenu as NavigationMenuPrimitive } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\t...restProps\n\t}: NavigationMenuPrimitive.IndicatorProps = $props();\n</script>\n\n<NavigationMenuPrimitive.Indicator\n\tbind:ref\n\tdata-slot=\"navigation-menu-indicator\"\n\tclass={cn(\n\t\t\"cn-navigation-menu-indicator top-full z-[1] flex h-1.5 items-end justify-center overflow-hidden\",\n\t\tclassName\n\t)}\n\t{...restProps}\n>\n\t<div class=\"cn-navigation-menu-indicator-arrow relative top-[60%] h-2 w-2 rotate-45\"></div>\n</NavigationMenuPrimitive.Indicator>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/navigation-menu/navigation-menu-item.svelte",
    "content": "<script lang=\"ts\">\n\timport { NavigationMenu as NavigationMenuPrimitive } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\t...restProps\n\t}: NavigationMenuPrimitive.ItemProps = $props();\n</script>\n\n<NavigationMenuPrimitive.Item\n\tbind:ref\n\tdata-slot=\"navigation-menu-item\"\n\tclass={cn(\"cn-navigation-menu-item relative\", className)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/navigation-menu/navigation-menu-link.svelte",
    "content": "<script lang=\"ts\">\n\timport { NavigationMenu as NavigationMenuPrimitive } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\t...restProps\n\t}: NavigationMenuPrimitive.LinkProps = $props();\n</script>\n\n<NavigationMenuPrimitive.Link\n\tbind:ref\n\tdata-slot=\"navigation-menu-link\"\n\tclass={cn(\"cn-navigation-menu-link\", className)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/navigation-menu/navigation-menu-list.svelte",
    "content": "<script lang=\"ts\">\n\timport { NavigationMenu as NavigationMenuPrimitive } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\t...restProps\n\t}: NavigationMenuPrimitive.ListProps = $props();\n</script>\n\n<NavigationMenuPrimitive.List\n\tbind:ref\n\tdata-slot=\"navigation-menu-list\"\n\tclass={cn(\n\t\t\"cn-navigation-menu-list group flex flex-1 list-none items-center justify-center\",\n\t\tclassName\n\t)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/navigation-menu/navigation-menu-trigger.svelte",
    "content": "<script lang=\"ts\" module>\n\timport { cn } from \"$lib/utils.js\";\n\timport { tv } from \"tailwind-variants\";\n\n\texport const navigationMenuTriggerStyle = tv({\n\t\tbase: \"cn-navigation-menu-trigger group/navigation-menu-trigger inline-flex h-9 w-max items-center justify-center outline-none disabled:pointer-events-none\",\n\t});\n</script>\n\n<script lang=\"ts\">\n\timport { NavigationMenu as NavigationMenuPrimitive } from \"bits-ui\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: NavigationMenuPrimitive.TriggerProps = $props();\n</script>\n\n<NavigationMenuPrimitive.Trigger\n\tbind:ref\n\tdata-slot=\"navigation-menu-trigger\"\n\tclass={cn(navigationMenuTriggerStyle(), \"group\", className)}\n\t{...restProps}\n>\n\t{@render children?.()}\n\t<IconPlaceholder\n\t\tlucide=\"ChevronDownIcon\"\n\t\ttabler=\"IconChevronDown\"\n\t\thugeicons=\"ArrowDown01Icon\"\n\t\tphosphor=\"CaretDownIcon\"\n\t\tremixicon=\"RiArrowDownSLine\"\n\t\tclass=\"cn-navigation-menu-trigger-icon\"\n\t\taria-hidden=\"true\"\n\t/>\n</NavigationMenuPrimitive.Trigger>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/navigation-menu/navigation-menu-viewport.svelte",
    "content": "<script lang=\"ts\">\n\timport { NavigationMenu as NavigationMenuPrimitive } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\t...restProps\n\t}: NavigationMenuPrimitive.ViewportProps = $props();\n</script>\n\n<div class={cn(\"absolute start-0 top-full isolate z-50 flex justify-center\")}>\n\t<NavigationMenuPrimitive.Viewport\n\t\tbind:ref\n\t\tdata-slot=\"navigation-menu-viewport\"\n\t\tclass={cn(\n\t\t\t\"cn-navigation-menu-viewport origin-top-center relative mt-1.5 h-[calc(var(--bits-navigation-menu-viewport-height)+1rem)] w-full overflow-hidden md:w-[calc(var(--bits-navigation-menu-viewport-width)+1rem)]\",\n\t\t\tclassName\n\t\t)}\n\t\t{...restProps}\n\t/>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/navigation-menu/navigation-menu.svelte",
    "content": "<script lang=\"ts\">\n\timport { NavigationMenu as NavigationMenuPrimitive } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\timport NavigationMenuViewport from \"./navigation-menu-viewport.svelte\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tviewport = true,\n\t\tchildren,\n\t\t...restProps\n\t}: NavigationMenuPrimitive.RootProps & {\n\t\tviewport?: boolean;\n\t} = $props();\n</script>\n\n<NavigationMenuPrimitive.Root\n\tbind:ref\n\tdata-slot=\"navigation-menu\"\n\tdata-viewport={viewport}\n\tclass={cn(\n\t\t\"cn-navigation-menu group/navigation-menu relative flex max-w-max flex-1 items-center justify-center\",\n\t\tclassName\n\t)}\n\t{...restProps}\n>\n\t{@render children?.()}\n\t{#if viewport}\n\t\t<NavigationMenuViewport />\n\t{/if}\n</NavigationMenuPrimitive.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/pagination/index.ts",
    "content": "import Root from \"./pagination.svelte\";\nimport Content from \"./pagination-content.svelte\";\nimport Item from \"./pagination-item.svelte\";\nimport Link from \"./pagination-link.svelte\";\nimport PrevButton from \"./pagination-prev-button.svelte\";\nimport NextButton from \"./pagination-next-button.svelte\";\nimport Ellipsis from \"./pagination-ellipsis.svelte\";\nimport Previous from \"./pagination-previous.svelte\";\nimport Next from \"./pagination-next.svelte\";\n\nexport {\n\tRoot,\n\tContent,\n\tItem,\n\tLink,\n\tPrevButton, // old\n\tNextButton, // old\n\tEllipsis,\n\tPrevious,\n\tNext,\n\t//\n\tRoot as Pagination,\n\tContent as PaginationContent,\n\tItem as PaginationItem,\n\tLink as PaginationLink,\n\tPrevButton as PaginationPrevButton, // old\n\tNextButton as PaginationNextButton, // old\n\tEllipsis as PaginationEllipsis,\n\tPrevious as PaginationPrevious,\n\tNext as PaginationNext,\n};\n"
  },
  {
    "path": "docs/src/lib/registry/ui/pagination/pagination-content.svelte",
    "content": "<script lang=\"ts\">\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLUListElement>> = $props();\n</script>\n\n<ul\n\tbind:this={ref}\n\tdata-slot=\"pagination-content\"\n\tclass={cn(\"cn-pagination-content flex items-center\", className)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</ul>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/pagination/pagination-ellipsis.svelte",
    "content": "<script lang=\"ts\">\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\timport { cn, type WithElementRef, type WithoutChildren } from \"$lib/utils.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\t...restProps\n\t}: WithoutChildren<WithElementRef<HTMLAttributes<HTMLSpanElement>>> = $props();\n</script>\n\n<span\n\tbind:this={ref}\n\taria-hidden=\"true\"\n\tdata-slot=\"pagination-ellipsis\"\n\tclass={cn(\"cn-pagination-ellipsis flex items-center justify-center\", className)}\n\t{...restProps}\n>\n\t<IconPlaceholder\n\t\tlucide=\"MoreHorizontalIcon\"\n\t\ttabler=\"IconDots\"\n\t\thugeicons=\"MoreHorizontalCircle01Icon\"\n\t\tphosphor=\"DotsThreeIcon\"\n\t\tremixicon=\"RiMoreLine\"\n\t/>\n\t<span class=\"sr-only\">More pages</span>\n</span>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/pagination/pagination-item.svelte",
    "content": "<script lang=\"ts\">\n\timport type { HTMLLiAttributes } from \"svelte/elements\";\n\timport type { WithElementRef } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLLiAttributes> = $props();\n</script>\n\n<li bind:this={ref} data-slot=\"pagination-item\" {...restProps}>\n\t{@render children?.()}\n</li>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/pagination/pagination-link.svelte",
    "content": "<script lang=\"ts\">\n\timport { Pagination as PaginationPrimitive } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\timport { buttonVariants, type ButtonSize } from \"$lib/registry/ui/button/index.js\";\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tsize = \"icon\",\n\t\tisActive,\n\t\tpage,\n\t\tchildren,\n\t\t...restProps\n\t}: PaginationPrimitive.PageProps & {\n\t\tsize?: ButtonSize;\n\t\tisActive: boolean;\n\t} = $props();\n</script>\n\n{#snippet Fallback()}\n\t{page.value}\n{/snippet}\n\n<PaginationPrimitive.Page\n\tbind:ref\n\t{page}\n\taria-current={isActive ? \"page\" : undefined}\n\tdata-slot=\"pagination-link\"\n\tdata-active={isActive}\n\tdata-size={size}\n\tclass={cn(\n\t\tbuttonVariants({ size, variant: isActive ? \"outline\" : \"ghost\" }),\n\t\t\"cn-pagination-link\",\n\t\tclassName\n\t)}\n\t{...restProps}\n>\n\t{#if children}\n\t\t{@render children?.()}\n\t{:else}\n\t\t{@render Fallback()}\n\t{/if}\n</PaginationPrimitive.Page>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/pagination/pagination-next-button.svelte",
    "content": "<script lang=\"ts\">\n\timport { Pagination as PaginationPrimitive } from \"bits-ui\";\n\timport ChevronRightIcon from \"@lucide/svelte/icons/chevron-right\";\n\timport { cn } from \"$lib/utils.js\";\n\timport { buttonVariants } from \"../button/index.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: PaginationPrimitive.NextButtonProps = $props();\n</script>\n\n{#snippet Fallback()}\n\t<span>Next</span>\n\t<ChevronRightIcon class=\"size-4\" />\n{/snippet}\n\n<PaginationPrimitive.NextButton\n\tbind:ref\n\taria-label=\"Go to next page\"\n\tclass={cn(buttonVariants({ variant: \"ghost\" }), \"cn-pagination-next\", className)}\n\t{...restProps}\n>\n\t{#if children}\n\t\t{@render children?.()}\n\t{:else}\n\t\t{@render Fallback()}\n\t{/if}\n</PaginationPrimitive.NextButton>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/pagination/pagination-next.svelte",
    "content": "<script lang=\"ts\">\n\timport type { ComponentProps } from \"svelte\";\n\timport { cn } from \"$lib/utils.js\";\n\timport { PaginationLink } from \"./index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\n\ttype PaginationNextProps = ComponentProps<typeof PaginationLink>;\n\n\tlet { class: className, ...restProps }: PaginationNextProps = $props();\n</script>\n\n<PaginationLink\n\taria-label=\"Go to next page\"\n\tsize=\"default\"\n\tclass={cn(\"cn-pagination-next\", className)}\n\t{...restProps}\n>\n\t<span class=\"cn-pagination-next-text hidden sm:block\">Next</span>\n\t<IconPlaceholder\n\t\tlucide=\"ChevronRightIcon\"\n\t\ttabler=\"IconChevronRight\"\n\t\thugeicons=\"ArrowRight01Icon\"\n\t\tphosphor=\"CaretRightIcon\"\n\t\tremixicon=\"RiArrowRightSLine\"\n\t\tdata-icon=\"inline-end\"\n\t/>\n</PaginationLink>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/pagination/pagination-prev-button.svelte",
    "content": "<script lang=\"ts\">\n\timport { Pagination as PaginationPrimitive } from \"bits-ui\";\n\timport ChevronLeftIcon from \"@lucide/svelte/icons/chevron-left\";\n\timport { cn } from \"$lib/utils.js\";\n\timport { buttonVariants } from \"../button/index.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: PaginationPrimitive.PrevButtonProps = $props();\n</script>\n\n{#snippet Fallback()}\n\t<ChevronLeftIcon class=\"size-4\" />\n\t<span>Previous</span>\n{/snippet}\n\n<PaginationPrimitive.PrevButton\n\tbind:ref\n\taria-label=\"Go to previous page\"\n\tclass={cn(buttonVariants({ variant: \"ghost\" }), \"cn-pagination-previous\", className)}\n\t{...restProps}\n>\n\t{#if children}\n\t\t{@render children?.()}\n\t{:else}\n\t\t{@render Fallback()}\n\t{/if}\n</PaginationPrimitive.PrevButton>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/pagination/pagination-previous.svelte",
    "content": "<script lang=\"ts\">\n\timport type { ComponentProps } from \"svelte\";\n\timport { cn } from \"$lib/utils.js\";\n\timport { PaginationLink } from \"./index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\n\ttype PaginationPreviousProps = ComponentProps<typeof PaginationLink>;\n\n\tlet { class: className, ...restProps }: PaginationPreviousProps = $props();\n</script>\n\n<PaginationLink\n\taria-label=\"Go to previous page\"\n\tsize=\"default\"\n\tclass={cn(\"cn-pagination-previous\", className)}\n\t{...restProps}\n>\n\t<IconPlaceholder\n\t\tlucide=\"ChevronLeftIcon\"\n\t\ttabler=\"IconChevronLeft\"\n\t\thugeicons=\"ArrowLeft01Icon\"\n\t\tphosphor=\"CaretLeftIcon\"\n\t\tremixicon=\"RiArrowLeftSLine\"\n\t\tdata-icon=\"inline-start\"\n\t/>\n\t<span class=\"cn-pagination-previous-text hidden sm:block\">Previous</span>\n</PaginationLink>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/pagination/pagination.svelte",
    "content": "<script lang=\"ts\">\n\timport { Pagination as PaginationPrimitive } from \"bits-ui\";\n\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tcount = 0,\n\t\tperPage = 10,\n\t\tpage = $bindable(1),\n\t\tsiblingCount = 1,\n\t\t...restProps\n\t}: PaginationPrimitive.RootProps = $props();\n</script>\n\n<PaginationPrimitive.Root\n\tbind:ref\n\tbind:page\n\trole=\"navigation\"\n\taria-label=\"pagination\"\n\tdata-slot=\"pagination\"\n\t{count}\n\t{perPage}\n\t{siblingCount}\n\tclass={cn(\"cn-pagination mx-auto flex w-full justify-center\", className)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/popover/index.ts",
    "content": "import Root from \"./popover.svelte\";\nimport Close from \"./popover-close.svelte\";\nimport Content from \"./popover-content.svelte\";\nimport Description from \"./popover-description.svelte\";\nimport Header from \"./popover-header.svelte\";\nimport Title from \"./popover-title.svelte\";\nimport Trigger from \"./popover-trigger.svelte\";\nimport Portal from \"./popover-portal.svelte\";\n\nexport {\n\tRoot,\n\tContent,\n\tDescription,\n\tHeader,\n\tTitle,\n\tTrigger,\n\tClose,\n\tPortal,\n\t//\n\tRoot as Popover,\n\tContent as PopoverContent,\n\tDescription as PopoverDescription,\n\tHeader as PopoverHeader,\n\tTitle as PopoverTitle,\n\tTrigger as PopoverTrigger,\n\tClose as PopoverClose,\n\tPortal as PopoverPortal,\n};\n"
  },
  {
    "path": "docs/src/lib/registry/ui/popover/popover-close.svelte",
    "content": "<script lang=\"ts\">\n\timport { Popover as PopoverPrimitive } from \"bits-ui\";\n\n\tlet { ref = $bindable(null), ...restProps }: PopoverPrimitive.CloseProps = $props();\n</script>\n\n<PopoverPrimitive.Close bind:ref data-slot=\"popover-close\" {...restProps} />\n"
  },
  {
    "path": "docs/src/lib/registry/ui/popover/popover-content.svelte",
    "content": "<script lang=\"ts\">\n\timport { Popover as PopoverPrimitive } from \"bits-ui\";\n\timport PopoverPortal from \"./popover-portal.svelte\";\n\timport { cn, type WithoutChildrenOrChild } from \"$lib/utils.js\";\n\timport type { ComponentProps } from \"svelte\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tsideOffset = 4,\n\t\talign = \"center\",\n\t\tportalProps,\n\t\t...restProps\n\t}: PopoverPrimitive.ContentProps & {\n\t\tportalProps?: WithoutChildrenOrChild<ComponentProps<typeof PopoverPortal>>;\n\t} = $props();\n</script>\n\n<PopoverPortal {...portalProps}>\n\t<PopoverPrimitive.Content\n\t\tbind:ref\n\t\tdata-slot=\"popover-content\"\n\t\t{sideOffset}\n\t\t{align}\n\t\tclass={cn(\n\t\t\t\"cn-popover-content cn-popover-content-logical z-50 w-72 origin-(--transform-origin) outline-hidden\",\n\t\t\tclassName\n\t\t)}\n\t\t{...restProps}\n\t/>\n</PopoverPortal>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/popover/popover-description.svelte",
    "content": "<script lang=\"ts\">\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLDivElement>> = $props();\n</script>\n\n<div\n\tbind:this={ref}\n\tdata-slot=\"popover-description\"\n\tclass={cn(\"cn-popover-description\", className)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/popover/popover-header.svelte",
    "content": "<script lang=\"ts\">\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLDivElement>> = $props();\n</script>\n\n<div\n\tbind:this={ref}\n\tdata-slot=\"popover-header\"\n\tclass={cn(\"cn-popover-header\", className)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/popover/popover-portal.svelte",
    "content": "<script lang=\"ts\">\n\timport { Popover as PopoverPrimitive } from \"bits-ui\";\n\n\tlet { ...restProps }: PopoverPrimitive.PortalProps = $props();\n</script>\n\n<PopoverPrimitive.Portal {...restProps} />\n"
  },
  {
    "path": "docs/src/lib/registry/ui/popover/popover-title.svelte",
    "content": "<script lang=\"ts\">\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLDivElement>> = $props();\n</script>\n\n<div\n\tbind:this={ref}\n\tdata-slot=\"popover-title\"\n\tclass={cn(\"cn-popover-title\", className)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/popover/popover-trigger.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn } from \"$lib/utils.js\";\n\timport { Popover as PopoverPrimitive } from \"bits-ui\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\t...restProps\n\t}: PopoverPrimitive.TriggerProps = $props();\n</script>\n\n<PopoverPrimitive.Trigger\n\tbind:ref\n\tdata-slot=\"popover-trigger\"\n\tclass={cn(\"\", className)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/popover/popover.svelte",
    "content": "<script lang=\"ts\">\n\timport { Popover as PopoverPrimitive } from \"bits-ui\";\n\n\tlet { open = $bindable(false), ...restProps }: PopoverPrimitive.RootProps = $props();\n</script>\n\n<PopoverPrimitive.Root bind:open {...restProps} />\n"
  },
  {
    "path": "docs/src/lib/registry/ui/progress/index.ts",
    "content": "import Root from \"./progress.svelte\";\n\nexport {\n\tRoot,\n\t//\n\tRoot as Progress,\n};\n"
  },
  {
    "path": "docs/src/lib/registry/ui/progress/progress.svelte",
    "content": "<script lang=\"ts\">\n\timport { Progress as ProgressPrimitive } from \"bits-ui\";\n\timport { cn, type WithoutChildrenOrChild } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tmax = 100,\n\t\tvalue,\n\t\t...restProps\n\t}: WithoutChildrenOrChild<ProgressPrimitive.RootProps> = $props();\n</script>\n\n<ProgressPrimitive.Root\n\tbind:ref\n\tdata-slot=\"progress\"\n\tclass={cn(\"cn-progress relative flex w-full items-center overflow-x-hidden\", className)}\n\t{value}\n\t{max}\n\t{...restProps}\n>\n\t<div\n\t\tdata-slot=\"progress-indicator\"\n\t\tclass=\"cn-progress-indicator size-full flex-1 transition-all\"\n\t\tstyle=\"transform: translateX(-{100 - (value ?? 0)}%)\"\n\t></div>\n</ProgressPrimitive.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/radio-group/index.ts",
    "content": "import Root from \"./radio-group.svelte\";\nimport Item from \"./radio-group-item.svelte\";\n\nexport {\n\tRoot,\n\tItem,\n\t//\n\tRoot as RadioGroup,\n\tItem as RadioGroupItem,\n};\n"
  },
  {
    "path": "docs/src/lib/registry/ui/radio-group/radio-group-item.svelte",
    "content": "<script lang=\"ts\">\n\timport { RadioGroup as RadioGroupPrimitive } from \"bits-ui\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\timport { cn, type WithoutChildrenOrChild } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\t...restProps\n\t}: WithoutChildrenOrChild<RadioGroupPrimitive.ItemProps> = $props();\n</script>\n\n<RadioGroupPrimitive.Item\n\tbind:ref\n\tdata-slot=\"radio-group-item\"\n\tclass={cn(\n\t\t\"cn-radio-group-item group/radio-group-item peer relative aspect-square shrink-0 border outline-none after:absolute after:-inset-x-3 after:-inset-y-2 disabled:cursor-not-allowed disabled:opacity-50\",\n\t\tclassName\n\t)}\n\t{...restProps}\n>\n\t{#snippet children({ checked })}\n\t\t<div data-slot=\"radio-group-indicator\" class=\"cn-radio-group-indicator\">\n\t\t\t{#if checked}\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"CircleIcon\"\n\t\t\t\t\ttabler=\"IconCircle\"\n\t\t\t\t\thugeicons=\"CircleIcon\"\n\t\t\t\t\tphosphor=\"CircleIcon\"\n\t\t\t\t\tremixicon=\"RiCircleLine\"\n\t\t\t\t\tclass=\"cn-radio-group-indicator-icon\"\n\t\t\t\t/>\n\t\t\t{/if}\n\t\t</div>\n\t{/snippet}\n</RadioGroupPrimitive.Item>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/radio-group/radio-group.svelte",
    "content": "<script lang=\"ts\">\n\timport { RadioGroup as RadioGroupPrimitive } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tvalue = $bindable(\"\"),\n\t\t...restProps\n\t}: RadioGroupPrimitive.RootProps = $props();\n</script>\n\n<RadioGroupPrimitive.Root\n\tbind:ref\n\tbind:value\n\tdata-slot=\"radio-group\"\n\tclass={cn(\"cn-radio-group w-full\", className)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/range-calendar/index.ts",
    "content": "import Root from \"./range-calendar.svelte\";\nimport Cell from \"./range-calendar-cell.svelte\";\nimport Day from \"./range-calendar-day.svelte\";\nimport Grid from \"./range-calendar-grid.svelte\";\nimport Header from \"./range-calendar-header.svelte\";\nimport Months from \"./range-calendar-months.svelte\";\nimport GridRow from \"./range-calendar-grid-row.svelte\";\nimport Heading from \"./range-calendar-heading.svelte\";\nimport HeadCell from \"./range-calendar-head-cell.svelte\";\nimport NextButton from \"./range-calendar-next-button.svelte\";\nimport PrevButton from \"./range-calendar-prev-button.svelte\";\nimport MonthSelect from \"./range-calendar-month-select.svelte\";\nimport YearSelect from \"./range-calendar-year-select.svelte\";\nimport Caption from \"./range-calendar-caption.svelte\";\nimport Nav from \"./range-calendar-nav.svelte\";\nimport Month from \"./range-calendar-month.svelte\";\nimport GridBody from \"./range-calendar-grid-body.svelte\";\nimport GridHead from \"./range-calendar-grid-head.svelte\";\n\nexport {\n\tDay,\n\tCell,\n\tGrid,\n\tHeader,\n\tMonths,\n\tGridRow,\n\tHeading,\n\tGridBody,\n\tGridHead,\n\tHeadCell,\n\tNextButton,\n\tPrevButton,\n\tMonthSelect,\n\tYearSelect,\n\tCaption,\n\tNav,\n\tMonth,\n\t//\n\tRoot as RangeCalendar,\n};\n"
  },
  {
    "path": "docs/src/lib/registry/ui/range-calendar/range-calendar-caption.svelte",
    "content": "<script lang=\"ts\">\n\timport type { ComponentProps } from \"svelte\";\n\timport type RangeCalendar from \"./range-calendar.svelte\";\n\timport RangeCalendarMonthSelect from \"./range-calendar-month-select.svelte\";\n\timport RangeCalendarYearSelect from \"./range-calendar-year-select.svelte\";\n\timport { DateFormatter, getLocalTimeZone, type DateValue } from \"@internationalized/date\";\n\n\tlet {\n\t\tcaptionLayout,\n\t\tmonths,\n\t\tmonthFormat,\n\t\tyears,\n\t\tyearFormat,\n\t\tmonth,\n\t\tlocale,\n\t\tplaceholder = $bindable(),\n\t\tmonthIndex = 0,\n\t}: {\n\t\tcaptionLayout: ComponentProps<typeof RangeCalendar>[\"captionLayout\"];\n\t\tmonths: ComponentProps<typeof RangeCalendarMonthSelect>[\"months\"];\n\t\tmonthFormat: ComponentProps<typeof RangeCalendarMonthSelect>[\"monthFormat\"];\n\t\tyears: ComponentProps<typeof RangeCalendarYearSelect>[\"years\"];\n\t\tyearFormat: ComponentProps<typeof RangeCalendarYearSelect>[\"yearFormat\"];\n\t\tmonth: DateValue;\n\t\tplaceholder: DateValue | undefined;\n\t\tlocale: string;\n\t\tmonthIndex: number;\n\t} = $props();\n\n\tfunction formatYear(date: DateValue) {\n\t\tconst dateObj = date.toDate(getLocalTimeZone());\n\t\tif (typeof yearFormat === \"function\") return yearFormat(dateObj.getFullYear());\n\t\treturn new DateFormatter(locale, { year: yearFormat }).format(dateObj);\n\t}\n\n\tfunction formatMonth(date: DateValue) {\n\t\tconst dateObj = date.toDate(getLocalTimeZone());\n\t\tif (typeof monthFormat === \"function\") return monthFormat(dateObj.getMonth() + 1);\n\t\treturn new DateFormatter(locale, { month: monthFormat }).format(dateObj);\n\t}\n</script>\n\n{#snippet MonthSelect()}\n\t<RangeCalendarMonthSelect\n\t\t{months}\n\t\t{monthFormat}\n\t\tvalue={month.month}\n\t\tonchange={(e) => {\n\t\t\tif (!placeholder) return;\n\t\t\tconst v = Number.parseInt(e.currentTarget.value);\n\t\t\tconst newPlaceholder = placeholder.set({ month: v });\n\t\t\tplaceholder = newPlaceholder.subtract({ months: monthIndex });\n\t\t}}\n\t/>\n{/snippet}\n\n{#snippet YearSelect()}\n\t<RangeCalendarYearSelect {years} {yearFormat} value={month.year} />\n{/snippet}\n\n{#if captionLayout === \"dropdown\"}\n\t{@render MonthSelect()}\n\t{@render YearSelect()}\n{:else if captionLayout === \"dropdown-months\"}\n\t{@render MonthSelect()}\n\t{#if placeholder}\n\t\t{formatYear(placeholder)}\n\t{/if}\n{:else if captionLayout === \"dropdown-years\"}\n\t{#if placeholder}\n\t\t{formatMonth(placeholder)}\n\t{/if}\n\t{@render YearSelect()}\n{:else}\n\t{formatMonth(month)} {formatYear(month)}\n{/if}\n"
  },
  {
    "path": "docs/src/lib/registry/ui/range-calendar/range-calendar-cell.svelte",
    "content": "<script lang=\"ts\">\n\timport { RangeCalendar as RangeCalendarPrimitive } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\t...restProps\n\t}: RangeCalendarPrimitive.CellProps = $props();\n</script>\n\n<RangeCalendarPrimitive.Cell\n\tbind:ref\n\tclass={cn(\n\t\t\"dark:[&:has([data-range-start])]:hover:bg-accent dark:[&:has([data-range-end])]:hover:bg-accent [&:has([data-range-middle])]:bg-accent dark:[&:has([data-range-middle])]:hover:bg-accent/50 [&:has([data-selected])]:bg-accent relative size-(--cell-size) p-0 text-center text-sm focus-within:z-20 data-[range-middle]:rounded-e-(--cell-radius) [&:first-child[data-selected]_[data-bits-day]]:rounded-s-(--cell-radius) [&:has([data-range-end])]:rounded-e-(--cell-radius) [&:has([data-range-middle])]:rounded-none first:[&:has([data-range-middle])]:rounded-s-(--cell-radius) last:[&:has([data-range-middle])]:rounded-e-(--cell-radius) [&:has([data-range-start])]:rounded-s-(--cell-radius) [&:last-child[data-selected]_[data-bits-day]]:rounded-e-(--cell-radius)\",\n\t\tclassName\n\t)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/range-calendar/range-calendar-day.svelte",
    "content": "<script lang=\"ts\">\n\timport { RangeCalendar as RangeCalendarPrimitive } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\t...restProps\n\t}: RangeCalendarPrimitive.DayProps = $props();\n</script>\n\n<RangeCalendarPrimitive.Day\n\tbind:ref\n\tclass={cn(\n\t\t\"flex size-(--cell-size) flex-col items-center justify-center gap-1 rounded-(--cell-radius) p-0 leading-none font-normal whitespace-nowrap select-none\",\n\t\t\"not-data-selected:hover:bg-accent/50 not-data-selected:hover:text-accent-foreground\",\n\t\t\"[&[data-today]:not([data-selected])]:bg-accent [&[data-today]:not([data-selected])]:text-accent-foreground [&[data-today][data-disabled]]:text-muted-foreground data-[range-middle]:rounded-none\",\n\t\t// range Start\n\t\t\"data-[range-start]:bg-primary data-[range-start]:text-primary-foreground data-[range-start]:hover:text-foreground\",\n\t\t// range End\n\t\t\"data-[range-end]:bg-primary data-[range-end]:text-primary-foreground data-[range-end]:hover:text-foreground\",\n\t\t// Outside months\n\t\t\"[&[data-outside-month]:not([data-selected])]:text-muted-foreground [&[data-outside-month]:not([data-selected])]:hover:text-accent-foreground\",\n\t\t// Disabled\n\t\t\"data-[disabled]:text-muted-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50\",\n\t\t// Unavailable\n\t\t\"data-[unavailable]:line-through\",\n\t\t\"dark:data-[range-middle]:hover:bg-accent/0\",\n\t\t// focus\n\t\t\"focus:border-ring focus:ring-ring/50 focus:relative\",\n\t\t// inner spans\n\t\t\"[&>span]:text-xs [&>span]:opacity-70\",\n\t\tclassName\n\t)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/range-calendar/range-calendar-grid-body.svelte",
    "content": "<script lang=\"ts\">\n\timport { RangeCalendar as RangeCalendarPrimitive } from \"bits-ui\";\n\n\tlet { ref = $bindable(null), ...restProps }: RangeCalendarPrimitive.GridBodyProps = $props();\n</script>\n\n<RangeCalendarPrimitive.GridBody bind:ref {...restProps} />\n"
  },
  {
    "path": "docs/src/lib/registry/ui/range-calendar/range-calendar-grid-head.svelte",
    "content": "<script lang=\"ts\">\n\timport { RangeCalendar as RangeCalendarPrimitive } from \"bits-ui\";\n\n\tlet { ref = $bindable(null), ...restProps }: RangeCalendarPrimitive.GridHeadProps = $props();\n</script>\n\n<RangeCalendarPrimitive.GridHead bind:ref {...restProps} />\n"
  },
  {
    "path": "docs/src/lib/registry/ui/range-calendar/range-calendar-grid-row.svelte",
    "content": "<script lang=\"ts\">\n\timport { RangeCalendar as RangeCalendarPrimitive } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\t...restProps\n\t}: RangeCalendarPrimitive.GridRowProps = $props();\n</script>\n\n<RangeCalendarPrimitive.GridRow bind:ref class={cn(\"flex\", className)} {...restProps} />\n"
  },
  {
    "path": "docs/src/lib/registry/ui/range-calendar/range-calendar-grid.svelte",
    "content": "<script lang=\"ts\">\n\timport { RangeCalendar as RangeCalendarPrimitive } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\t...restProps\n\t}: RangeCalendarPrimitive.GridProps = $props();\n</script>\n\n<RangeCalendarPrimitive.Grid\n\tbind:ref\n\tclass={cn(\"mt-4 flex w-full border-collapse flex-col gap-1\", className)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/range-calendar/range-calendar-head-cell.svelte",
    "content": "<script lang=\"ts\">\n\timport { RangeCalendar as RangeCalendarPrimitive } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\t...restProps\n\t}: RangeCalendarPrimitive.HeadCellProps = $props();\n</script>\n\n<RangeCalendarPrimitive.HeadCell\n\tbind:ref\n\tclass={cn(\n\t\t\"text-muted-foreground w-(--cell-size) rounded-md text-[0.8rem] font-normal\",\n\t\tclassName\n\t)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/range-calendar/range-calendar-header.svelte",
    "content": "<script lang=\"ts\">\n\timport { RangeCalendar as RangeCalendarPrimitive } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\t...restProps\n\t}: RangeCalendarPrimitive.HeaderProps = $props();\n</script>\n\n<RangeCalendarPrimitive.Header\n\tbind:ref\n\tclass={cn(\n\t\t\"flex h-(--cell-size) w-full items-center justify-center gap-1.5 text-sm font-medium\",\n\t\tclassName\n\t)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/range-calendar/range-calendar-heading.svelte",
    "content": "<script lang=\"ts\">\n\timport { RangeCalendar as RangeCalendarPrimitive } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\t...restProps\n\t}: RangeCalendarPrimitive.HeadingProps = $props();\n</script>\n\n<RangeCalendarPrimitive.Heading\n\tbind:ref\n\tclass={cn(\"px-(--cell-size) text-sm font-medium\", className)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/range-calendar/range-calendar-month-select.svelte",
    "content": "<script lang=\"ts\">\n\timport { RangeCalendar as RangeCalendarPrimitive } from \"bits-ui\";\n\timport { cn, type WithoutChildrenOrChild } from \"$lib/utils.js\";\n\timport ChevronDownIcon from \"@lucide/svelte/icons/chevron-down\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tvalue,\n\t\tonchange,\n\t\t...restProps\n\t}: WithoutChildrenOrChild<RangeCalendarPrimitive.MonthSelectProps> = $props();\n</script>\n\n<span\n\tclass={cn(\n\t\t\"has-focus:border-ring border-input has-focus:ring-ring/50 relative flex rounded-md border shadow-xs has-focus:ring-[3px]\",\n\t\tclassName\n\t)}\n>\n\t<RangeCalendarPrimitive.MonthSelect bind:ref class=\"absolute inset-0 opacity-0\" {...restProps}>\n\t\t{#snippet child({ props, monthItems, selectedMonthItem })}\n\t\t\t<select {...props} {value} {onchange}>\n\t\t\t\t{#each monthItems as monthItem (monthItem.value)}\n\t\t\t\t\t<option\n\t\t\t\t\t\tvalue={monthItem.value}\n\t\t\t\t\t\tselected={value !== undefined\n\t\t\t\t\t\t\t? monthItem.value === value\n\t\t\t\t\t\t\t: monthItem.value === selectedMonthItem.value}\n\t\t\t\t\t>\n\t\t\t\t\t\t{monthItem.label}\n\t\t\t\t\t</option>\n\t\t\t\t{/each}\n\t\t\t</select>\n\t\t\t<span\n\t\t\t\tclass=\"[&>svg]:text-muted-foreground flex h-(--cell-size) items-center gap-1 rounded-md ps-2 pe-1 text-sm font-medium select-none [&>svg]:size-3.5\"\n\t\t\t\taria-hidden=\"true\"\n\t\t\t>\n\t\t\t\t{monthItems.find((item) => item.value === value)?.label || selectedMonthItem.label}\n\t\t\t\t<ChevronDownIcon class=\"size-4\" />\n\t\t\t</span>\n\t\t{/snippet}\n\t</RangeCalendarPrimitive.MonthSelect>\n</span>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/range-calendar/range-calendar-month.svelte",
    "content": "<script lang=\"ts\">\n\timport { type WithElementRef, cn } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLElement>> = $props();\n</script>\n\n<div {...restProps} bind:this={ref} class={cn(\"flex flex-col\", className)}>\n\t{@render children?.()}\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/range-calendar/range-calendar-months.svelte",
    "content": "<script lang=\"ts\">\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLDivElement>> = $props();\n</script>\n\n<div\n\tbind:this={ref}\n\tclass={cn(\"relative flex flex-col gap-4 md:flex-row\", className)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/range-calendar/range-calendar-nav.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLElement>> = $props();\n</script>\n\n<nav\n\t{...restProps}\n\tbind:this={ref}\n\tclass={cn(\"absolute inset-x-0 top-0 flex w-full items-center justify-between gap-1\", className)}\n>\n\t{@render children?.()}\n</nav>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/range-calendar/range-calendar-next-button.svelte",
    "content": "<script lang=\"ts\">\n\timport { RangeCalendar as RangeCalendarPrimitive } from \"bits-ui\";\n\timport ChevronRightIcon from \"@lucide/svelte/icons/chevron-right\";\n\timport { buttonVariants, type ButtonVariant } from \"$lib/registry/ui/button/index.js\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\tvariant = \"ghost\",\n\t\t...restProps\n\t}: RangeCalendarPrimitive.NextButtonProps & {\n\t\tvariant?: ButtonVariant;\n\t} = $props();\n</script>\n\n{#snippet Fallback()}\n\t<ChevronRightIcon class=\"size-4\" />\n{/snippet}\n\n<RangeCalendarPrimitive.NextButton\n\tbind:ref\n\tclass={cn(\n\t\tbuttonVariants({ variant }),\n\t\t\"size-(--cell-size) bg-transparent p-0 select-none disabled:opacity-50 rtl:rotate-180\",\n\t\tclassName\n\t)}\n\t{...restProps}\n>\n\t{#if children}\n\t\t{@render children?.()}\n\t{:else}\n\t\t{@render Fallback()}\n\t{/if}\n</RangeCalendarPrimitive.NextButton>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/range-calendar/range-calendar-prev-button.svelte",
    "content": "<script lang=\"ts\">\n\timport { RangeCalendar as RangeCalendarPrimitive } from \"bits-ui\";\n\timport ChevronLeftIcon from \"@lucide/svelte/icons/chevron-left\";\n\timport { buttonVariants, type ButtonVariant } from \"$lib/registry/ui/button/index.js\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\tvariant = \"ghost\",\n\t\t...restProps\n\t}: RangeCalendarPrimitive.PrevButtonProps & {\n\t\tvariant?: ButtonVariant;\n\t} = $props();\n</script>\n\n{#snippet Fallback()}\n\t<ChevronLeftIcon class=\"size-4\" />\n{/snippet}\n\n<RangeCalendarPrimitive.PrevButton\n\tbind:ref\n\tclass={cn(\n\t\tbuttonVariants({ variant }),\n\t\t\"size-(--cell-size) bg-transparent p-0 select-none disabled:opacity-50 rtl:rotate-180\",\n\t\tclassName\n\t)}\n\t{...restProps}\n>\n\t{#if children}\n\t\t{@render children?.()}\n\t{:else}\n\t\t{@render Fallback()}\n\t{/if}\n</RangeCalendarPrimitive.PrevButton>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/range-calendar/range-calendar-year-select.svelte",
    "content": "<script lang=\"ts\">\n\timport { RangeCalendar as RangeCalendarPrimitive } from \"bits-ui\";\n\timport { cn, type WithoutChildrenOrChild } from \"$lib/utils.js\";\n\timport ChevronDownIcon from \"@lucide/svelte/icons/chevron-down\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tvalue,\n\t\t...restProps\n\t}: WithoutChildrenOrChild<RangeCalendarPrimitive.YearSelectProps> = $props();\n</script>\n\n<span\n\tclass={cn(\n\t\t\"has-focus:border-ring border-input has-focus:ring-ring/50 relative flex rounded-md border shadow-xs has-focus:ring-[3px]\",\n\t\tclassName\n\t)}\n>\n\t<RangeCalendarPrimitive.YearSelect bind:ref class=\"absolute inset-0 opacity-0\" {...restProps}>\n\t\t{#snippet child({ props, yearItems, selectedYearItem })}\n\t\t\t<select {...props} {value}>\n\t\t\t\t{#each yearItems as yearItem (yearItem.value)}\n\t\t\t\t\t<option\n\t\t\t\t\t\tvalue={yearItem.value}\n\t\t\t\t\t\tselected={value !== undefined\n\t\t\t\t\t\t\t? yearItem.value === value\n\t\t\t\t\t\t\t: yearItem.value === selectedYearItem.value}\n\t\t\t\t\t>\n\t\t\t\t\t\t{yearItem.label}\n\t\t\t\t\t</option>\n\t\t\t\t{/each}\n\t\t\t</select>\n\t\t\t<span\n\t\t\t\tclass=\"[&>svg]:text-muted-foreground flex h-(--cell-size) items-center gap-1 rounded-md ps-2 pe-1 text-sm font-medium select-none [&>svg]:size-3.5\"\n\t\t\t\taria-hidden=\"true\"\n\t\t\t>\n\t\t\t\t{yearItems.find((item) => item.value === value)?.label || selectedYearItem.label}\n\t\t\t\t<ChevronDownIcon class=\"size-4\" />\n\t\t\t</span>\n\t\t{/snippet}\n\t</RangeCalendarPrimitive.YearSelect>\n</span>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/range-calendar/range-calendar.svelte",
    "content": "<script lang=\"ts\">\n\timport { RangeCalendar as RangeCalendarPrimitive } from \"bits-ui\";\n\timport * as RangeCalendar from \"./index.js\";\n\timport { cn, type WithoutChildrenOrChild } from \"$lib/utils.js\";\n\timport type { ButtonVariant } from \"$lib/registry/ui/button/index.js\";\n\timport type { Snippet } from \"svelte\";\n\timport { isEqualMonth, type DateValue } from \"@internationalized/date\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tvalue = $bindable(),\n\t\tplaceholder = $bindable(),\n\t\tweekdayFormat = \"short\",\n\t\tclass: className,\n\t\tbuttonVariant = \"ghost\",\n\t\tcaptionLayout = \"label\",\n\t\tlocale = \"en-US\",\n\t\tmonths: monthsProp,\n\t\tyears,\n\t\tmonthFormat: monthFormatProp,\n\t\tyearFormat = \"numeric\",\n\t\tday,\n\t\tdisableDaysOutsideMonth = false,\n\t\t...restProps\n\t}: WithoutChildrenOrChild<RangeCalendarPrimitive.RootProps> & {\n\t\tbuttonVariant?: ButtonVariant;\n\t\tcaptionLayout?: \"dropdown\" | \"dropdown-months\" | \"dropdown-years\" | \"label\";\n\t\tmonths?: RangeCalendarPrimitive.MonthSelectProps[\"months\"];\n\t\tyears?: RangeCalendarPrimitive.YearSelectProps[\"years\"];\n\t\tmonthFormat?: RangeCalendarPrimitive.MonthSelectProps[\"monthFormat\"];\n\t\tyearFormat?: RangeCalendarPrimitive.YearSelectProps[\"yearFormat\"];\n\t\tday?: Snippet<[{ day: DateValue; outsideMonth: boolean }]>;\n\t} = $props();\n\n\tconst monthFormat = $derived.by(() => {\n\t\tif (monthFormatProp) return monthFormatProp;\n\t\tif (captionLayout.startsWith(\"dropdown\")) return \"short\";\n\t\treturn \"long\";\n\t});\n</script>\n\n<RangeCalendarPrimitive.Root\n\tbind:ref\n\tbind:value\n\tbind:placeholder\n\t{weekdayFormat}\n\t{disableDaysOutsideMonth}\n\tclass={cn(\n\t\t\"cn-calendar bg-background group/calendar p-3 [[data-slot=card-content]_&]:bg-transparent [[data-slot=popover-content]_&]:bg-transparent\",\n\t\tclassName\n\t)}\n\t{locale}\n\t{monthFormat}\n\t{yearFormat}\n\t{...restProps}\n>\n\t{#snippet children({ months, weekdays })}\n\t\t<RangeCalendar.Months>\n\t\t\t<RangeCalendar.Nav>\n\t\t\t\t<RangeCalendar.PrevButton variant={buttonVariant} />\n\t\t\t\t<RangeCalendar.NextButton variant={buttonVariant} />\n\t\t\t</RangeCalendar.Nav>\n\t\t\t{#each months as month, monthIndex (month)}\n\t\t\t\t<RangeCalendar.Month>\n\t\t\t\t\t<RangeCalendar.Header>\n\t\t\t\t\t\t<RangeCalendar.Caption\n\t\t\t\t\t\t\t{captionLayout}\n\t\t\t\t\t\t\tmonths={monthsProp}\n\t\t\t\t\t\t\t{monthFormat}\n\t\t\t\t\t\t\t{years}\n\t\t\t\t\t\t\t{yearFormat}\n\t\t\t\t\t\t\tmonth={month.value}\n\t\t\t\t\t\t\tbind:placeholder\n\t\t\t\t\t\t\t{locale}\n\t\t\t\t\t\t\t{monthIndex}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</RangeCalendar.Header>\n\n\t\t\t\t\t<RangeCalendar.Grid>\n\t\t\t\t\t\t<RangeCalendar.GridHead>\n\t\t\t\t\t\t\t<RangeCalendar.GridRow class=\"select-none\">\n\t\t\t\t\t\t\t\t{#each weekdays as weekday (weekday)}\n\t\t\t\t\t\t\t\t\t<RangeCalendar.HeadCell>\n\t\t\t\t\t\t\t\t\t\t{weekday.slice(0, 2)}\n\t\t\t\t\t\t\t\t\t</RangeCalendar.HeadCell>\n\t\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t</RangeCalendar.GridRow>\n\t\t\t\t\t\t</RangeCalendar.GridHead>\n\t\t\t\t\t\t<RangeCalendar.GridBody>\n\t\t\t\t\t\t\t{#each month.weeks as weekDates (weekDates)}\n\t\t\t\t\t\t\t\t<RangeCalendar.GridRow class=\"mt-2 w-full\">\n\t\t\t\t\t\t\t\t\t{#each weekDates as date (date)}\n\t\t\t\t\t\t\t\t\t\t<RangeCalendar.Cell {date} month={month.value}>\n\t\t\t\t\t\t\t\t\t\t\t{#if day}\n\t\t\t\t\t\t\t\t\t\t\t\t{@render day({\n\t\t\t\t\t\t\t\t\t\t\t\t\tday: date,\n\t\t\t\t\t\t\t\t\t\t\t\t\toutsideMonth: !isEqualMonth(date, month.value),\n\t\t\t\t\t\t\t\t\t\t\t\t})}\n\t\t\t\t\t\t\t\t\t\t\t{:else}\n\t\t\t\t\t\t\t\t\t\t\t\t<RangeCalendar.Day />\n\t\t\t\t\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\t\t\t\t</RangeCalendar.Cell>\n\t\t\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t\t</RangeCalendar.GridRow>\n\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t</RangeCalendar.GridBody>\n\t\t\t\t\t</RangeCalendar.Grid>\n\t\t\t\t</RangeCalendar.Month>\n\t\t\t{/each}\n\t\t</RangeCalendar.Months>\n\t{/snippet}\n</RangeCalendarPrimitive.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/resizable/index.ts",
    "content": "import { Pane } from \"paneforge\";\nimport Handle from \"./resizable-handle.svelte\";\nimport PaneGroup from \"./resizable-pane-group.svelte\";\n\nexport {\n\tPaneGroup,\n\tPane,\n\tHandle,\n\t//\n\tPaneGroup as ResizablePaneGroup,\n\tPane as ResizablePane,\n\tHandle as ResizableHandle,\n};\n"
  },
  {
    "path": "docs/src/lib/registry/ui/resizable/resizable-handle.svelte",
    "content": "<script lang=\"ts\">\n\timport * as ResizablePrimitive from \"paneforge\";\n\timport { cn, type WithoutChildrenOrChild } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\twithHandle = false,\n\t\t...restProps\n\t}: WithoutChildrenOrChild<ResizablePrimitive.PaneResizerProps> & {\n\t\twithHandle?: boolean;\n\t} = $props();\n</script>\n\n<ResizablePrimitive.PaneResizer\n\tbind:ref\n\tdata-slot=\"resizable-handle\"\n\tclass={cn(\n\t\t\"cn-resizable-handle bg-border focus-visible:ring-ring relative flex w-px items-center justify-center after:absolute after:inset-y-0 after:left-1/2 after:w-1 after:-translate-x-1/2 focus-visible:ring-1 focus-visible:ring-offset-1 focus-visible:outline-hidden data-[direction=vertical]:h-px data-[direction=vertical]:w-full data-[direction=vertical]:after:left-0 data-[direction=vertical]:after:h-1 data-[direction=vertical]:after:w-full data-[direction=vertical]:after:translate-x-0 data-[direction=vertical]:after:-translate-y-1/2 [&[data-direction=vertical]>div]:rotate-90\",\n\t\tclassName\n\t)}\n\t{...restProps}\n>\n\t{#if withHandle}\n\t\t<div class=\"cn-resizable-handle-icon z-10 flex shrink-0\"></div>\n\t{/if}\n</ResizablePrimitive.PaneResizer>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/resizable/resizable-pane-group.svelte",
    "content": "<script lang=\"ts\">\n\timport * as ResizablePrimitive from \"paneforge\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tthis: paneGroup = $bindable(),\n\t\tclass: className,\n\t\t...restProps\n\t}: ResizablePrimitive.PaneGroupProps & {\n\t\tthis?: ResizablePrimitive.PaneGroup;\n\t} = $props();\n</script>\n\n<ResizablePrimitive.PaneGroup\n\tbind:ref\n\tbind:this={paneGroup}\n\tdata-slot=\"resizable-pane-group\"\n\tclass={cn(\n\t\t\"cn-resizable-panel-group flex h-full w-full data-[direction=vertical]:flex-col\",\n\t\tclassName\n\t)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/scroll-area/index.ts",
    "content": "import Scrollbar from \"./scroll-area-scrollbar.svelte\";\nimport Root from \"./scroll-area.svelte\";\n\nexport {\n\tRoot,\n\tScrollbar,\n\t//,\n\tRoot as ScrollArea,\n\tScrollbar as ScrollAreaScrollbar,\n};\n"
  },
  {
    "path": "docs/src/lib/registry/ui/scroll-area/scroll-area-scrollbar.svelte",
    "content": "<script lang=\"ts\">\n\timport { ScrollArea as ScrollAreaPrimitive } from \"bits-ui\";\n\timport { cn, type WithoutChild } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\torientation = \"vertical\",\n\t\tchildren,\n\t\t...restProps\n\t}: WithoutChild<ScrollAreaPrimitive.ScrollbarProps> = $props();\n</script>\n\n<ScrollAreaPrimitive.Scrollbar\n\tbind:ref\n\tdata-slot=\"scroll-area-scrollbar\"\n\tdata-orientation={orientation}\n\t{orientation}\n\tclass={cn(\n\t\t\"cn-scroll-area-scrollbar flex touch-none p-px transition-colors select-none\",\n\t\tclassName\n\t)}\n\t{...restProps}\n>\n\t{@render children?.()}\n\t<ScrollAreaPrimitive.Thumb\n\t\tdata-slot=\"scroll-area-thumb\"\n\t\tclass=\"cn-scroll-area-thumb bg-border relative flex-1\"\n\t/>\n</ScrollAreaPrimitive.Scrollbar>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/scroll-area/scroll-area.svelte",
    "content": "<script lang=\"ts\">\n\timport { ScrollArea as ScrollAreaPrimitive } from \"bits-ui\";\n\timport { Scrollbar } from \"./index.js\";\n\timport { cn, type WithoutChild } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tviewportRef = $bindable(null),\n\t\tclass: className,\n\t\torientation = \"vertical\",\n\t\tscrollbarXClasses = \"\",\n\t\tscrollbarYClasses = \"\",\n\t\tchildren,\n\t\t...restProps\n\t}: WithoutChild<ScrollAreaPrimitive.RootProps> & {\n\t\torientation?: \"vertical\" | \"horizontal\" | \"both\" | undefined;\n\t\tscrollbarXClasses?: string | undefined;\n\t\tscrollbarYClasses?: string | undefined;\n\t\tviewportRef?: HTMLElement | null;\n\t} = $props();\n</script>\n\n<ScrollAreaPrimitive.Root\n\tbind:ref\n\tdata-slot=\"scroll-area\"\n\tclass={cn(\"relative\", className)}\n\t{...restProps}\n>\n\t<ScrollAreaPrimitive.Viewport\n\t\tbind:ref={viewportRef}\n\t\tdata-slot=\"scroll-area-viewport\"\n\t\tclass=\"cn-scroll-area-viewport focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:outline-1\"\n\t>\n\t\t{@render children?.()}\n\t</ScrollAreaPrimitive.Viewport>\n\t{#if orientation === \"vertical\" || orientation === \"both\"}\n\t\t<Scrollbar orientation=\"vertical\" class={scrollbarYClasses} />\n\t{/if}\n\t{#if orientation === \"horizontal\" || orientation === \"both\"}\n\t\t<Scrollbar orientation=\"horizontal\" class={scrollbarXClasses} />\n\t{/if}\n\t<ScrollAreaPrimitive.Corner />\n</ScrollAreaPrimitive.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/select/index.ts",
    "content": "import Root from \"./select.svelte\";\nimport Group from \"./select-group.svelte\";\nimport Label from \"./select-label.svelte\";\nimport Item from \"./select-item.svelte\";\nimport Content from \"./select-content.svelte\";\nimport Trigger from \"./select-trigger.svelte\";\nimport Separator from \"./select-separator.svelte\";\nimport ScrollDownButton from \"./select-scroll-down-button.svelte\";\nimport ScrollUpButton from \"./select-scroll-up-button.svelte\";\nimport GroupHeading from \"./select-group-heading.svelte\";\nimport Portal from \"./select-portal.svelte\";\n\nexport {\n\tRoot,\n\tGroup,\n\tLabel,\n\tItem,\n\tContent,\n\tTrigger,\n\tSeparator,\n\tScrollDownButton,\n\tScrollUpButton,\n\tGroupHeading,\n\tPortal,\n\t//\n\tRoot as Select,\n\tGroup as SelectGroup,\n\tLabel as SelectLabel,\n\tItem as SelectItem,\n\tContent as SelectContent,\n\tTrigger as SelectTrigger,\n\tSeparator as SelectSeparator,\n\tScrollDownButton as SelectScrollDownButton,\n\tScrollUpButton as SelectScrollUpButton,\n\tGroupHeading as SelectGroupHeading,\n\tPortal as SelectPortal,\n};\n"
  },
  {
    "path": "docs/src/lib/registry/ui/select/select-content.svelte",
    "content": "<script lang=\"ts\">\n\timport { Select as SelectPrimitive } from \"bits-ui\";\n\timport SelectPortal from \"./select-portal.svelte\";\n\timport SelectScrollUpButton from \"./select-scroll-up-button.svelte\";\n\timport SelectScrollDownButton from \"./select-scroll-down-button.svelte\";\n\timport { cn, type WithoutChild } from \"$lib/utils.js\";\n\timport type { ComponentProps } from \"svelte\";\n\timport type { WithoutChildrenOrChild } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tsideOffset = 4,\n\t\tportalProps,\n\t\tchildren,\n\t\tpreventScroll = true,\n\t\t...restProps\n\t}: WithoutChild<SelectPrimitive.ContentProps> & {\n\t\tportalProps?: WithoutChildrenOrChild<ComponentProps<typeof SelectPortal>>;\n\t} = $props();\n</script>\n\n<SelectPortal {...portalProps}>\n\t<SelectPrimitive.Content\n\t\tbind:ref\n\t\t{sideOffset}\n\t\t{preventScroll}\n\t\tdata-slot=\"select-content\"\n\t\tclass={cn(\n\t\t\t\"cn-select-content cn-select-content-logical cn-menu-target cn-menu-translucent relative isolate z-50 overflow-x-hidden overflow-y-auto\",\n\t\t\tclassName\n\t\t)}\n\t\t{...restProps}\n\t>\n\t\t<SelectScrollUpButton />\n\t\t<SelectPrimitive.Viewport\n\t\t\tclass={cn(\n\t\t\t\t\"h-(--bits-select-anchor-height) w-full min-w-(--bits-select-anchor-width) scroll-my-1\"\n\t\t\t)}\n\t\t>\n\t\t\t{@render children?.()}\n\t\t</SelectPrimitive.Viewport>\n\t\t<SelectScrollDownButton />\n\t</SelectPrimitive.Content>\n</SelectPortal>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/select/select-group-heading.svelte",
    "content": "<script lang=\"ts\">\n\timport { Select as SelectPrimitive } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\timport type { ComponentProps } from \"svelte\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: ComponentProps<typeof SelectPrimitive.GroupHeading> = $props();\n</script>\n\n<SelectPrimitive.GroupHeading\n\tbind:ref\n\tdata-slot=\"select-group-heading\"\n\tclass={cn(\"text-muted-foreground px-2 py-1.5 text-xs\", className)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</SelectPrimitive.GroupHeading>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/select/select-group.svelte",
    "content": "<script lang=\"ts\">\n\timport { Select as SelectPrimitive } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\t...restProps\n\t}: SelectPrimitive.GroupProps = $props();\n</script>\n\n<SelectPrimitive.Group\n\tbind:ref\n\tdata-slot=\"select-group\"\n\tclass={cn(\"cn-select-group\", className)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/select/select-item.svelte",
    "content": "<script lang=\"ts\">\n\timport { Select as SelectPrimitive } from \"bits-ui\";\n\timport { cn, type WithoutChild } from \"$lib/utils.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tvalue,\n\t\tlabel,\n\t\tchildren: childrenProp,\n\t\t...restProps\n\t}: WithoutChild<SelectPrimitive.ItemProps> = $props();\n</script>\n\n<SelectPrimitive.Item\n\tbind:ref\n\t{value}\n\tdata-slot=\"select-item\"\n\tclass={cn(\n\t\t\"cn-select-item focus:bg-accent data-highlighted:bg-accent data-highlighted:text-accent-foreground focus:text-accent-foreground relative flex w-full cursor-default items-center outline-hidden select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n\t\tclassName\n\t)}\n\t{...restProps}\n>\n\t{#snippet children({ selected, highlighted })}\n\t\t<span class=\"absolute end-2 flex size-3.5 items-center justify-center\">\n\t\t\t{#if selected}\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"CheckIcon\"\n\t\t\t\t\ttabler=\"IconCheck\"\n\t\t\t\t\thugeicons=\"Tick02Icon\"\n\t\t\t\t\tphosphor=\"CheckIcon\"\n\t\t\t\t\tremixicon=\"RiCheckLine\"\n\t\t\t\t\tclass=\"cn-select-item-indicator-icon\"\n\t\t\t\t/>\n\t\t\t{/if}\n\t\t</span>\n\t\t{#if childrenProp}\n\t\t\t{@render childrenProp({ selected, highlighted })}\n\t\t{:else}\n\t\t\t{label || value}\n\t\t{/if}\n\t{/snippet}\n</SelectPrimitive.Item>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/select/select-label.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLDivElement>> & {} = $props();\n</script>\n\n<div\n\tbind:this={ref}\n\tdata-slot=\"select-label\"\n\tclass={cn(\"cn-select-label\", className)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/select/select-portal.svelte",
    "content": "<script lang=\"ts\">\n\timport { Select as SelectPrimitive } from \"bits-ui\";\n\n\tlet { ...restProps }: SelectPrimitive.PortalProps = $props();\n</script>\n\n<SelectPrimitive.Portal {...restProps} />\n"
  },
  {
    "path": "docs/src/lib/registry/ui/select/select-scroll-down-button.svelte",
    "content": "<script lang=\"ts\">\n\timport { Select as SelectPrimitive } from \"bits-ui\";\n\timport { cn, type WithoutChildrenOrChild } from \"$lib/utils.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\t...restProps\n\t}: WithoutChildrenOrChild<SelectPrimitive.ScrollDownButtonProps> = $props();\n</script>\n\n<SelectPrimitive.ScrollDownButton\n\tbind:ref\n\tdata-slot=\"select-scroll-down-button\"\n\tclass={cn(\"cn-select-scroll-down-button bottom-0 w-full\", className)}\n\t{...restProps}\n>\n\t<IconPlaceholder\n\t\tlucide=\"ChevronDownIcon\"\n\t\ttabler=\"IconChevronDown\"\n\t\thugeicons=\"ArrowDown01Icon\"\n\t\tphosphor=\"CaretDownIcon\"\n\t\tremixicon=\"RiArrowDownSLine\"\n\t/>\n</SelectPrimitive.ScrollDownButton>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/select/select-scroll-up-button.svelte",
    "content": "<script lang=\"ts\">\n\timport { Select as SelectPrimitive } from \"bits-ui\";\n\timport { cn, type WithoutChildrenOrChild } from \"$lib/utils.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\t...restProps\n\t}: WithoutChildrenOrChild<SelectPrimitive.ScrollUpButtonProps> = $props();\n</script>\n\n<SelectPrimitive.ScrollUpButton\n\tbind:ref\n\tdata-slot=\"select-scroll-up-button\"\n\tclass={cn(\"cn-select-scroll-up-button top-0 w-full\", className)}\n\t{...restProps}\n>\n\t<IconPlaceholder\n\t\tlucide=\"ChevronUpIcon\"\n\t\ttabler=\"IconChevronUp\"\n\t\thugeicons=\"ArrowUp01Icon\"\n\t\tphosphor=\"CaretUpIcon\"\n\t\tremixicon=\"RiArrowUpSLine\"\n\t/>\n</SelectPrimitive.ScrollUpButton>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/select/select-separator.svelte",
    "content": "<script lang=\"ts\">\n\timport type { Separator as SeparatorPrimitive } from \"bits-ui\";\n\timport { Separator } from \"$lib/registry/ui/separator/index.js\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\t...restProps\n\t}: SeparatorPrimitive.RootProps = $props();\n</script>\n\n<Separator\n\tbind:ref\n\tdata-slot=\"select-separator\"\n\tclass={cn(\"cn-select-separator pointer-events-none\", className)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/select/select-trigger.svelte",
    "content": "<script lang=\"ts\">\n\timport { Select as SelectPrimitive } from \"bits-ui\";\n\timport { cn, type WithoutChild } from \"$lib/utils.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\tsize = \"default\",\n\t\t...restProps\n\t}: WithoutChild<SelectPrimitive.TriggerProps> & {\n\t\tsize?: \"sm\" | \"default\";\n\t} = $props();\n</script>\n\n<SelectPrimitive.Trigger\n\tbind:ref\n\tdata-slot=\"select-trigger\"\n\tdata-size={size}\n\tclass={cn(\n\t\t\"cn-select-trigger flex w-fit items-center justify-between whitespace-nowrap outline-none disabled:cursor-not-allowed disabled:opacity-50 *:data-[slot=select-value]:line-clamp-1 *:data-[slot=select-value]:flex *:data-[slot=select-value]:items-center [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n\t\tclassName\n\t)}\n\t{...restProps}\n>\n\t{@render children?.()}\n\t<IconPlaceholder\n\t\tlucide=\"ChevronDownIcon\"\n\t\ttabler=\"IconSelector\"\n\t\thugeicons=\"UnfoldMoreIcon\"\n\t\tphosphor=\"CaretDownIcon\"\n\t\tremixicon=\"RiArrowDownSLine\"\n\t\tclass=\"cn-select-trigger-icon pointer-events-none\"\n\t/>\n</SelectPrimitive.Trigger>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/select/select.svelte",
    "content": "<script lang=\"ts\">\n\timport { Select as SelectPrimitive } from \"bits-ui\";\n\n\tlet {\n\t\topen = $bindable(false),\n\t\tvalue = $bindable(),\n\t\t...restProps\n\t}: SelectPrimitive.RootProps = $props();\n</script>\n\n<SelectPrimitive.Root bind:open bind:value={value as never} {...restProps} />\n"
  },
  {
    "path": "docs/src/lib/registry/ui/separator/index.ts",
    "content": "import Root from \"./separator.svelte\";\n\nexport {\n\tRoot,\n\t//\n\tRoot as Separator,\n};\n"
  },
  {
    "path": "docs/src/lib/registry/ui/separator/separator.svelte",
    "content": "<script lang=\"ts\">\n\timport { Separator as SeparatorPrimitive } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\t\"data-slot\": dataSlot = \"separator\",\n\t\t...restProps\n\t}: SeparatorPrimitive.RootProps = $props();\n</script>\n\n<SeparatorPrimitive.Root\n\tbind:ref\n\tdata-slot={dataSlot}\n\tclass={cn(\n\t\t\"bg-border shrink-0 data-[orientation=horizontal]:h-px data-[orientation=horizontal]:w-full data-[orientation=vertical]:w-px\",\n\t\t// this is different in shadcn/ui but self-stretch breaks things for us\n\t\t\"data-[orientation=vertical]:h-full\",\n\t\tclassName\n\t)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/sheet/index.ts",
    "content": "import Root from \"./sheet.svelte\";\nimport Portal from \"./sheet-portal.svelte\";\nimport Trigger from \"./sheet-trigger.svelte\";\nimport Close from \"./sheet-close.svelte\";\nimport Overlay from \"./sheet-overlay.svelte\";\nimport Content from \"./sheet-content.svelte\";\nimport Header from \"./sheet-header.svelte\";\nimport Footer from \"./sheet-footer.svelte\";\nimport Title from \"./sheet-title.svelte\";\nimport Description from \"./sheet-description.svelte\";\n\nexport {\n\tRoot,\n\tClose,\n\tTrigger,\n\tPortal,\n\tOverlay,\n\tContent,\n\tHeader,\n\tFooter,\n\tTitle,\n\tDescription,\n\t//\n\tRoot as Sheet,\n\tClose as SheetClose,\n\tTrigger as SheetTrigger,\n\tPortal as SheetPortal,\n\tOverlay as SheetOverlay,\n\tContent as SheetContent,\n\tHeader as SheetHeader,\n\tFooter as SheetFooter,\n\tTitle as SheetTitle,\n\tDescription as SheetDescription,\n};\n"
  },
  {
    "path": "docs/src/lib/registry/ui/sheet/sheet-close.svelte",
    "content": "<script lang=\"ts\">\n\timport { Dialog as SheetPrimitive } from \"bits-ui\";\n\n\tlet { ref = $bindable(null), ...restProps }: SheetPrimitive.CloseProps = $props();\n</script>\n\n<SheetPrimitive.Close bind:ref data-slot=\"sheet-close\" {...restProps} />\n"
  },
  {
    "path": "docs/src/lib/registry/ui/sheet/sheet-content.svelte",
    "content": "<script lang=\"ts\" module>\n\texport type Side = \"top\" | \"right\" | \"bottom\" | \"left\";\n</script>\n\n<script lang=\"ts\">\n\timport { Dialog as SheetPrimitive } from \"bits-ui\";\n\timport type { Snippet } from \"svelte\";\n\timport SheetPortal from \"./sheet-portal.svelte\";\n\timport SheetOverlay from \"./sheet-overlay.svelte\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\timport { cn, type WithoutChildrenOrChild } from \"$lib/utils.js\";\n\timport type { ComponentProps } from \"svelte\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tside = \"right\",\n\t\tshowCloseButton = true,\n\t\tportalProps,\n\t\tchildren,\n\t\t...restProps\n\t}: WithoutChildrenOrChild<SheetPrimitive.ContentProps> & {\n\t\tportalProps?: WithoutChildrenOrChild<ComponentProps<typeof SheetPortal>>;\n\t\tside?: Side;\n\t\tshowCloseButton?: boolean;\n\t\tchildren: Snippet;\n\t} = $props();\n</script>\n\n<SheetPortal {...portalProps}>\n\t<SheetOverlay />\n\t<SheetPrimitive.Content\n\t\tbind:ref\n\t\tdata-slot=\"sheet-content\"\n\t\tdata-side={side}\n\t\tclass={cn(\n\t\t\t\"cn-sheet-content data-open:animate-in data-open:fade-in-0 data-[side=bottom]:data-open:slide-in-from-bottom-10 data-[side=left]:data-open:slide-in-from-left-10 data-[side=right]:data-open:slide-in-from-right-10 data-[side=top]:data-open:slide-in-from-top-10 data-closed:animate-out data-closed:fade-out-0 data-[side=bottom]:data-closed:slide-out-to-bottom-10 data-[side=left]:data-closed:slide-out-to-left-10 data-[side=right]:data-closed:slide-out-to-right-10 data-[side=top]:data-closed:slide-out-to-top-10\",\n\t\t\tclassName\n\t\t)}\n\t\t{...restProps}\n\t>\n\t\t{@render children?.()}\n\t\t{#if showCloseButton}\n\t\t\t<SheetPrimitive.Close data-slot=\"sheet-close\">\n\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t<Button variant=\"ghost\" class=\"cn-sheet-close\" size=\"icon-sm\" {...props}>\n\t\t\t\t\t\t<IconPlaceholder\n\t\t\t\t\t\t\tlucide=\"XIcon\"\n\t\t\t\t\t\t\ttabler=\"IconX\"\n\t\t\t\t\t\t\thugeicons=\"Cancel01Icon\"\n\t\t\t\t\t\t\tphosphor=\"XIcon\"\n\t\t\t\t\t\t\tremixicon=\"RiCloseLine\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<span class=\"sr-only\">Close</span>\n\t\t\t\t\t</Button>\n\t\t\t\t{/snippet}\n\t\t\t</SheetPrimitive.Close>\n\t\t{/if}\n\t</SheetPrimitive.Content>\n</SheetPortal>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/sheet/sheet-description.svelte",
    "content": "<script lang=\"ts\">\n\timport { Dialog as SheetPrimitive } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\t...restProps\n\t}: SheetPrimitive.DescriptionProps = $props();\n</script>\n\n<SheetPrimitive.Description\n\tbind:ref\n\tdata-slot=\"sheet-description\"\n\tclass={cn(\"cn-sheet-description\", className)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/sheet/sheet-footer.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLDivElement>> = $props();\n</script>\n\n<div\n\tbind:this={ref}\n\tdata-slot=\"sheet-footer\"\n\tclass={cn(\"cn-sheet-footer mt-auto flex flex-col\", className)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/sheet/sheet-header.svelte",
    "content": "<script lang=\"ts\">\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLDivElement>> = $props();\n</script>\n\n<div\n\tbind:this={ref}\n\tdata-slot=\"sheet-header\"\n\tclass={cn(\"cn-sheet-header flex flex-col\", className)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/sheet/sheet-overlay.svelte",
    "content": "<script lang=\"ts\">\n\timport { Dialog as SheetPrimitive } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\t...restProps\n\t}: SheetPrimitive.OverlayProps = $props();\n</script>\n\n<SheetPrimitive.Overlay\n\tbind:ref\n\tdata-slot=\"sheet-overlay\"\n\tclass={cn(\"cn-sheet-overlay fixed inset-0 z-50\", className)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/sheet/sheet-portal.svelte",
    "content": "<script lang=\"ts\">\n\timport { Dialog as SheetPrimitive } from \"bits-ui\";\n\n\tlet { ...restProps }: SheetPrimitive.PortalProps = $props();\n</script>\n\n<SheetPrimitive.Portal {...restProps} />\n"
  },
  {
    "path": "docs/src/lib/registry/ui/sheet/sheet-title.svelte",
    "content": "<script lang=\"ts\">\n\timport { Dialog as SheetPrimitive } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\t...restProps\n\t}: SheetPrimitive.TitleProps = $props();\n</script>\n\n<SheetPrimitive.Title\n\tbind:ref\n\tdata-slot=\"sheet-title\"\n\tclass={cn(\"cn-sheet-title\", className)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/sheet/sheet-trigger.svelte",
    "content": "<script lang=\"ts\">\n\timport { Dialog as SheetPrimitive } from \"bits-ui\";\n\n\tlet { ref = $bindable(null), ...restProps }: SheetPrimitive.TriggerProps = $props();\n</script>\n\n<SheetPrimitive.Trigger bind:ref data-slot=\"sheet-trigger\" {...restProps} />\n"
  },
  {
    "path": "docs/src/lib/registry/ui/sheet/sheet.svelte",
    "content": "<script lang=\"ts\">\n\timport { Dialog as SheetPrimitive } from \"bits-ui\";\n\n\tlet { open = $bindable(false), ...restProps }: SheetPrimitive.RootProps = $props();\n</script>\n\n<SheetPrimitive.Root bind:open {...restProps} />\n"
  },
  {
    "path": "docs/src/lib/registry/ui/sidebar/constants.ts",
    "content": "export const SIDEBAR_COOKIE_NAME = \"sidebar:state\";\nexport const SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7;\nexport const SIDEBAR_WIDTH = \"16rem\";\nexport const SIDEBAR_WIDTH_MOBILE = \"18rem\";\nexport const SIDEBAR_WIDTH_ICON = \"3rem\";\nexport const SIDEBAR_KEYBOARD_SHORTCUT = \"b\";\n"
  },
  {
    "path": "docs/src/lib/registry/ui/sidebar/context.svelte.ts",
    "content": "import { IsMobile } from \"$lib/registry/hooks/is-mobile.svelte.js\";\nimport { getContext, setContext } from \"svelte\";\nimport { SIDEBAR_KEYBOARD_SHORTCUT } from \"./constants.js\";\n\ntype Getter<T> = () => T;\n\nexport type SidebarStateProps = {\n\t/**\n\t * A getter function that returns the current open state of the sidebar.\n\t * We use a getter function here to support `bind:open` on the `Sidebar.Provider`\n\t * component.\n\t */\n\topen: Getter<boolean>;\n\n\t/**\n\t * A function that sets the open state of the sidebar. To support `bind:open`, we need\n\t * a source of truth for changing the open state to ensure it will be synced throughout\n\t * the sub-components and any `bind:` references.\n\t */\n\tsetOpen: (open: boolean) => void;\n};\n\nclass SidebarState {\n\treadonly props: SidebarStateProps;\n\topen = $derived.by(() => this.props.open());\n\topenMobile = $state(false);\n\tsetOpen: SidebarStateProps[\"setOpen\"];\n\t#isMobile: IsMobile;\n\tstate = $derived.by(() => (this.open ? \"expanded\" : \"collapsed\"));\n\n\tconstructor(props: SidebarStateProps) {\n\t\tthis.setOpen = props.setOpen;\n\t\tthis.#isMobile = new IsMobile();\n\t\tthis.props = props;\n\t}\n\n\t// Convenience getter for checking if the sidebar is mobile\n\t// without this, we would need to use `sidebar.isMobile.current` everywhere\n\tget isMobile() {\n\t\treturn this.#isMobile.current;\n\t}\n\n\t// Event handler to apply to the `<svelte:window>`\n\thandleShortcutKeydown = (e: KeyboardEvent) => {\n\t\tif (e.key === SIDEBAR_KEYBOARD_SHORTCUT && (e.metaKey || e.ctrlKey)) {\n\t\t\te.preventDefault();\n\t\t\tthis.toggle();\n\t\t}\n\t};\n\n\tsetOpenMobile = (value: boolean) => {\n\t\tthis.openMobile = value;\n\t};\n\n\ttoggle = () => {\n\t\treturn this.#isMobile.current\n\t\t\t? (this.openMobile = !this.openMobile)\n\t\t\t: this.setOpen(!this.open);\n\t};\n}\n\nconst SYMBOL_KEY = \"scn-sidebar\";\n\n/**\n * Instantiates a new `SidebarState` instance and sets it in the context.\n *\n * @param props The constructor props for the `SidebarState` class.\n * @returns  The `SidebarState` instance.\n */\nexport function setSidebar(props: SidebarStateProps): SidebarState {\n\treturn setContext(Symbol.for(SYMBOL_KEY), new SidebarState(props));\n}\n\n/**\n * Retrieves the `SidebarState` instance from the context. This is a class instance,\n * so you cannot destructure it.\n * @returns The `SidebarState` instance.\n */\nexport function useSidebar(): SidebarState {\n\treturn getContext(Symbol.for(SYMBOL_KEY));\n}\n"
  },
  {
    "path": "docs/src/lib/registry/ui/sidebar/index.ts",
    "content": "import { useSidebar } from \"./context.svelte.js\";\nimport Content from \"./sidebar-content.svelte\";\nimport Footer from \"./sidebar-footer.svelte\";\nimport GroupAction from \"./sidebar-group-action.svelte\";\nimport GroupContent from \"./sidebar-group-content.svelte\";\nimport GroupLabel from \"./sidebar-group-label.svelte\";\nimport Group from \"./sidebar-group.svelte\";\nimport Header from \"./sidebar-header.svelte\";\nimport Input from \"./sidebar-input.svelte\";\nimport Inset from \"./sidebar-inset.svelte\";\nimport MenuAction from \"./sidebar-menu-action.svelte\";\nimport MenuBadge from \"./sidebar-menu-badge.svelte\";\nimport MenuButton from \"./sidebar-menu-button.svelte\";\nimport MenuItem from \"./sidebar-menu-item.svelte\";\nimport MenuSkeleton from \"./sidebar-menu-skeleton.svelte\";\nimport MenuSubButton from \"./sidebar-menu-sub-button.svelte\";\nimport MenuSubItem from \"./sidebar-menu-sub-item.svelte\";\nimport MenuSub from \"./sidebar-menu-sub.svelte\";\nimport Menu from \"./sidebar-menu.svelte\";\nimport Provider from \"./sidebar-provider.svelte\";\nimport Rail from \"./sidebar-rail.svelte\";\nimport Separator from \"./sidebar-separator.svelte\";\nimport Trigger from \"./sidebar-trigger.svelte\";\nimport Root from \"./sidebar.svelte\";\n\nexport {\n\tContent,\n\tFooter,\n\tGroup,\n\tGroupAction,\n\tGroupContent,\n\tGroupLabel,\n\tHeader,\n\tInput,\n\tInset,\n\tMenu,\n\tMenuAction,\n\tMenuBadge,\n\tMenuButton,\n\tMenuItem,\n\tMenuSkeleton,\n\tMenuSub,\n\tMenuSubButton,\n\tMenuSubItem,\n\tProvider,\n\tRail,\n\tRoot,\n\tSeparator,\n\t//\n\tRoot as Sidebar,\n\tContent as SidebarContent,\n\tFooter as SidebarFooter,\n\tGroup as SidebarGroup,\n\tGroupAction as SidebarGroupAction,\n\tGroupContent as SidebarGroupContent,\n\tGroupLabel as SidebarGroupLabel,\n\tHeader as SidebarHeader,\n\tInput as SidebarInput,\n\tInset as SidebarInset,\n\tMenu as SidebarMenu,\n\tMenuAction as SidebarMenuAction,\n\tMenuBadge as SidebarMenuBadge,\n\tMenuButton as SidebarMenuButton,\n\tMenuItem as SidebarMenuItem,\n\tMenuSkeleton as SidebarMenuSkeleton,\n\tMenuSub as SidebarMenuSub,\n\tMenuSubButton as SidebarMenuSubButton,\n\tMenuSubItem as SidebarMenuSubItem,\n\tProvider as SidebarProvider,\n\tRail as SidebarRail,\n\tSeparator as SidebarSeparator,\n\tTrigger as SidebarTrigger,\n\tTrigger,\n\tuseSidebar,\n};\n"
  },
  {
    "path": "docs/src/lib/registry/ui/sidebar/sidebar-content.svelte",
    "content": "<script lang=\"ts\">\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLElement>> = $props();\n</script>\n\n<div\n\tbind:this={ref}\n\tdata-slot=\"sidebar-content\"\n\tdata-sidebar=\"content\"\n\tclass={cn(\n\t\t\"cn-sidebar-content flex min-h-0 flex-1 flex-col overflow-auto group-data-[collapsible=icon]:overflow-hidden\",\n\t\tclassName\n\t)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/sidebar/sidebar-footer.svelte",
    "content": "<script lang=\"ts\">\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLElement>> = $props();\n</script>\n\n<div\n\tbind:this={ref}\n\tdata-slot=\"sidebar-footer\"\n\tdata-sidebar=\"footer\"\n\tclass={cn(\"cn-sidebar-footer flex flex-col\", className)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/sidebar/sidebar-group-action.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\timport type { Snippet } from \"svelte\";\n\timport type { HTMLButtonAttributes } from \"svelte/elements\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\tchild,\n\t\t...restProps\n\t}: WithElementRef<HTMLButtonAttributes> & {\n\t\tchild?: Snippet<[{ props: Record<string, unknown> }]>;\n\t} = $props();\n\n\tconst mergedProps = $derived({\n\t\tclass: cn(\n\t\t\t\"cn-sidebar-group-action flex aspect-square items-center justify-center outline-hidden transition-transform group-data-[collapsible=icon]:hidden after:absolute after:-inset-2 md:after:hidden [&>svg]:shrink-0\",\n\t\t\tclassName\n\t\t),\n\t\t\"data-slot\": \"sidebar-group-action\",\n\t\t\"data-sidebar\": \"group-action\",\n\t\t...restProps,\n\t});\n</script>\n\n{#if child}\n\t{@render child({ props: mergedProps })}\n{:else}\n\t<button bind:this={ref} {...mergedProps}>\n\t\t{@render children?.()}\n\t</button>\n{/if}\n"
  },
  {
    "path": "docs/src/lib/registry/ui/sidebar/sidebar-group-content.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLDivElement>> = $props();\n</script>\n\n<div\n\tbind:this={ref}\n\tdata-slot=\"sidebar-group-content\"\n\tdata-sidebar=\"group-content\"\n\tclass={cn(\"cn-sidebar-group-content w-full\", className)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/sidebar/sidebar-group-label.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\timport type { Snippet } from \"svelte\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tchildren,\n\t\tchild,\n\t\tclass: className,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLElement>> & {\n\t\tchild?: Snippet<[{ props: Record<string, unknown> }]>;\n\t} = $props();\n\n\tconst mergedProps = $derived({\n\t\tclass: cn(\n\t\t\t\"cn-sidebar-group-label flex shrink-0 items-center outline-hidden [&>svg]:shrink-0\",\n\t\t\tclassName\n\t\t),\n\t\t\"data-slot\": \"sidebar-group-label\",\n\t\t\"data-sidebar\": \"group-label\",\n\t\t...restProps,\n\t});\n</script>\n\n{#if child}\n\t{@render child({ props: mergedProps })}\n{:else}\n\t<div bind:this={ref} {...mergedProps}>\n\t\t{@render children?.()}\n\t</div>\n{/if}\n"
  },
  {
    "path": "docs/src/lib/registry/ui/sidebar/sidebar-group.svelte",
    "content": "<script lang=\"ts\">\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLElement>> = $props();\n</script>\n\n<div\n\tbind:this={ref}\n\tdata-slot=\"sidebar-group\"\n\tdata-sidebar=\"group\"\n\tclass={cn(\"cn-sidebar-group relative flex w-full min-w-0 flex-col\", className)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/sidebar/sidebar-header.svelte",
    "content": "<script lang=\"ts\">\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLElement>> = $props();\n</script>\n\n<div\n\tbind:this={ref}\n\tdata-slot=\"sidebar-header\"\n\tdata-sidebar=\"header\"\n\tclass={cn(\"cn-sidebar-header flex flex-col\", className)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/sidebar/sidebar-input.svelte",
    "content": "<script lang=\"ts\">\n\timport type { ComponentProps } from \"svelte\";\n\timport { Input } from \"$lib/registry/ui/input/index.js\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tvalue = $bindable(\"\"),\n\t\tclass: className,\n\t\t...restProps\n\t}: ComponentProps<typeof Input> = $props();\n</script>\n\n<Input\n\tbind:ref\n\tbind:value\n\tdata-slot=\"sidebar-input\"\n\tdata-sidebar=\"input\"\n\tclass={cn(\"cn-sidebar-input\", className)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/sidebar/sidebar-inset.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLElement>> = $props();\n</script>\n\n<main\n\tbind:this={ref}\n\tdata-slot=\"sidebar-inset\"\n\tclass={cn(\"cn-sidebar-inset relative flex w-full flex-1 flex-col\", className)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</main>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/sidebar/sidebar-menu-action.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\timport type { Snippet } from \"svelte\";\n\timport type { HTMLButtonAttributes } from \"svelte/elements\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tshowOnHover = false,\n\t\tchildren,\n\t\tchild,\n\t\t...restProps\n\t}: WithElementRef<HTMLButtonAttributes> & {\n\t\tchild?: Snippet<[{ props: Record<string, unknown> }]>;\n\t\tshowOnHover?: boolean;\n\t} = $props();\n\n\tconst mergedProps = $derived({\n\t\tclass: cn(\n\t\t\t\"cn-sidebar-menu-action flex items-center justify-center outline-hidden transition-transform group-data-[collapsible=icon]:hidden after:absolute after:-inset-2 md:after:hidden [&>svg]:shrink-0\",\n\t\t\tshowOnHover &&\n\t\t\t\t\"peer-data-active/menu-button:text-sidebar-accent-foreground group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 data-open:opacity-100 md:opacity-0\",\n\t\t\tclassName\n\t\t),\n\t\t\"data-slot\": \"sidebar-menu-action\",\n\t\t\"data-sidebar\": \"menu-action\",\n\t\t...restProps,\n\t});\n</script>\n\n{#if child}\n\t{@render child({ props: mergedProps })}\n{:else}\n\t<button bind:this={ref} {...mergedProps}>\n\t\t{@render children?.()}\n\t</button>\n{/if}\n"
  },
  {
    "path": "docs/src/lib/registry/ui/sidebar/sidebar-menu-badge.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLElement>> = $props();\n</script>\n\n<div\n\tbind:this={ref}\n\tdata-slot=\"sidebar-menu-badge\"\n\tdata-sidebar=\"menu-badge\"\n\tclass={cn(\n\t\t\"cn-sidebar-menu-badge flex items-center justify-center tabular-nums select-none group-data-[collapsible=icon]:hidden\",\n\t\tclassName\n\t)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/sidebar/sidebar-menu-button.svelte",
    "content": "<script lang=\"ts\" module>\n\timport { tv, type VariantProps } from \"tailwind-variants\";\n\n\texport const sidebarMenuButtonVariants = tv({\n\t\tbase: \"cn-sidebar-menu-button peer/menu-button group/menu-button flex w-full items-center overflow-hidden outline-hidden disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&_svg]:size-4 [&_svg]:shrink-0 [&>span:last-child]:truncate\",\n\t\tvariants: {\n\t\t\tvariant: {\n\t\t\t\tdefault: \"cn-sidebar-menu-button-variant-default\",\n\t\t\t\toutline: \"cn-sidebar-menu-button-variant-outline\",\n\t\t\t},\n\t\t\tsize: {\n\t\t\t\tdefault: \"cn-sidebar-menu-button-size-default\",\n\t\t\t\tsm: \"cn-sidebar-menu-button-size-sm\",\n\t\t\t\tlg: \"cn-sidebar-menu-button-size-lg\",\n\t\t\t},\n\t\t},\n\t\tdefaultVariants: {\n\t\t\tvariant: \"default\",\n\t\t\tsize: \"default\",\n\t\t},\n\t});\n\n\texport type SidebarMenuButtonVariant = VariantProps<\n\t\ttypeof sidebarMenuButtonVariants\n\t>[\"variant\"];\n\texport type SidebarMenuButtonSize = VariantProps<typeof sidebarMenuButtonVariants>[\"size\"];\n</script>\n\n<script lang=\"ts\">\n\timport * as Tooltip from \"$lib/registry/ui/tooltip/index.js\";\n\timport { cn, type WithElementRef, type WithoutChildrenOrChild } from \"$lib/utils.js\";\n\timport { mergeProps } from \"bits-ui\";\n\timport type { ComponentProps, Snippet } from \"svelte\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\timport { useSidebar } from \"./context.svelte.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\tchild,\n\t\tvariant = \"default\",\n\t\tsize = \"default\",\n\t\tisActive = false,\n\t\ttooltipContent,\n\t\ttooltipContentProps,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLButtonElement>, HTMLButtonElement> & {\n\t\tisActive?: boolean;\n\t\tvariant?: SidebarMenuButtonVariant;\n\t\tsize?: SidebarMenuButtonSize;\n\t\ttooltipContent?: Snippet | string;\n\t\ttooltipContentProps?: WithoutChildrenOrChild<ComponentProps<typeof Tooltip.Content>>;\n\t\tchild?: Snippet<[{ props: Record<string, unknown> }]>;\n\t} = $props();\n\n\tconst sidebar = useSidebar();\n\n\tconst buttonProps = $derived({\n\t\tclass: cn(sidebarMenuButtonVariants({ variant, size }), className),\n\t\t\"data-slot\": \"sidebar-menu-button\",\n\t\t\"data-sidebar\": \"menu-button\",\n\t\t\"data-size\": size,\n\t\t\"data-active\": isActive,\n\t\t...restProps,\n\t});\n</script>\n\n{#snippet Button({ props }: { props?: Record<string, unknown> })}\n\t{@const mergedProps = mergeProps(buttonProps, props)}\n\t{#if child}\n\t\t{@render child({ props: mergedProps })}\n\t{:else}\n\t\t<button bind:this={ref} {...mergedProps}>\n\t\t\t{@render children?.()}\n\t\t</button>\n\t{/if}\n{/snippet}\n\n{#if !tooltipContent}\n\t{@render Button({})}\n{:else}\n\t<Tooltip.Root>\n\t\t<Tooltip.Trigger>\n\t\t\t{#snippet child({ props })}\n\t\t\t\t{@render Button({ props })}\n\t\t\t{/snippet}\n\t\t</Tooltip.Trigger>\n\t\t<Tooltip.Content\n\t\t\tside=\"right\"\n\t\t\talign=\"center\"\n\t\t\thidden={sidebar.state !== \"collapsed\" || sidebar.isMobile}\n\t\t\t{...tooltipContentProps}\n\t\t>\n\t\t\t{#if typeof tooltipContent === \"string\"}\n\t\t\t\t{tooltipContent}\n\t\t\t{:else if tooltipContent}\n\t\t\t\t{@render tooltipContent()}\n\t\t\t{/if}\n\t\t</Tooltip.Content>\n\t</Tooltip.Root>\n{/if}\n"
  },
  {
    "path": "docs/src/lib/registry/ui/sidebar/sidebar-menu-item.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLLIElement>, HTMLLIElement> = $props();\n</script>\n\n<li\n\tbind:this={ref}\n\tdata-slot=\"sidebar-menu-item\"\n\tdata-sidebar=\"menu-item\"\n\tclass={cn(\"group/menu-item relative\", className)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</li>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/sidebar/sidebar-menu-skeleton.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\timport { Skeleton } from \"$lib/registry/ui/skeleton/index.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tshowIcon = false,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLElement>> & {\n\t\tshowIcon?: boolean;\n\t} = $props();\n\n\t// Random width between 50% and 90%\n\tconst width = `${Math.floor(Math.random() * 40) + 50}%`;\n</script>\n\n<div\n\tbind:this={ref}\n\tdata-slot=\"sidebar-menu-skeleton\"\n\tdata-sidebar=\"menu-skeleton\"\n\tclass={cn(\"cn-sidebar-menu-skeleton flex items-center\", className)}\n\t{...restProps}\n>\n\t{#if showIcon}\n\t\t<Skeleton class=\"cn-sidebar-menu-skeleton-icon\" data-sidebar=\"menu-skeleton-icon\" />\n\t{/if}\n\t<Skeleton\n\t\tclass=\"cn-sidebar-menu-skeleton-text max-w-(--skeleton-width) flex-1\"\n\t\tdata-sidebar=\"menu-skeleton-text\"\n\t\tstyle=\"--skeleton-width: {width};\"\n\t/>\n\t{@render children?.()}\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/sidebar/sidebar-menu-sub-button.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\timport type { Snippet } from \"svelte\";\n\timport type { HTMLAnchorAttributes } from \"svelte/elements\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tchildren,\n\t\tchild,\n\t\tclass: className,\n\t\tsize = \"md\",\n\t\tisActive = false,\n\t\t...restProps\n\t}: WithElementRef<HTMLAnchorAttributes> & {\n\t\tchild?: Snippet<[{ props: Record<string, unknown> }]>;\n\t\tsize?: \"sm\" | \"md\";\n\t\tisActive?: boolean;\n\t} = $props();\n\n\tconst mergedProps = $derived({\n\t\tclass: cn(\n\t\t\t\"cn-sidebar-menu-sub-button flex min-w-0 -translate-x-px items-center overflow-hidden outline-hidden group-data-[collapsible=icon]:hidden disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&>span:last-child]:truncate [&>svg]:shrink-0\",\n\t\t\tclassName\n\t\t),\n\t\t\"data-slot\": \"sidebar-menu-sub-button\",\n\t\t\"data-sidebar\": \"menu-sub-button\",\n\t\t\"data-size\": size,\n\t\t\"data-active\": isActive,\n\t\t...restProps,\n\t});\n</script>\n\n{#if child}\n\t{@render child({ props: mergedProps })}\n{:else}\n\t<a bind:this={ref} {...mergedProps}>\n\t\t{@render children?.()}\n\t</a>\n{/if}\n"
  },
  {
    "path": "docs/src/lib/registry/ui/sidebar/sidebar-menu-sub-item.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tchildren,\n\t\tclass: className,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLLIElement>> = $props();\n</script>\n\n<li\n\tbind:this={ref}\n\tdata-slot=\"sidebar-menu-sub-item\"\n\tdata-sidebar=\"menu-sub-item\"\n\tclass={cn(\"group/menu-sub-item relative\", className)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</li>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/sidebar/sidebar-menu-sub.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLUListElement>> = $props();\n</script>\n\n<ul\n\tbind:this={ref}\n\tdata-slot=\"sidebar-menu-sub\"\n\tdata-sidebar=\"menu-sub\"\n\tclass={cn(\"cn-sidebar-menu-sub flex min-w-0 flex-col\", className)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</ul>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/sidebar/sidebar-menu.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLUListElement>, HTMLUListElement> = $props();\n</script>\n\n<ul\n\tbind:this={ref}\n\tdata-slot=\"sidebar-menu\"\n\tdata-sidebar=\"menu\"\n\tclass={cn(\"cn-sidebar-menu flex w-full min-w-0 flex-col\", className)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</ul>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/sidebar/sidebar-provider.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Tooltip from \"$lib/registry/ui/tooltip/index.js\";\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\timport {\n\t\tSIDEBAR_COOKIE_MAX_AGE,\n\t\tSIDEBAR_COOKIE_NAME,\n\t\tSIDEBAR_WIDTH,\n\t\tSIDEBAR_WIDTH_ICON,\n\t} from \"./constants.js\";\n\timport { setSidebar } from \"./context.svelte.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\topen = $bindable(true),\n\t\tonOpenChange = () => {},\n\t\tclass: className,\n\t\tstyle,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLDivElement>> & {\n\t\topen?: boolean;\n\t\tonOpenChange?: (open: boolean) => void;\n\t} = $props();\n\n\tconst sidebar = setSidebar({\n\t\topen: () => open,\n\t\tsetOpen: (value: boolean) => {\n\t\t\topen = value;\n\t\t\tonOpenChange(value);\n\n\t\t\t// This sets the cookie to keep the sidebar state.\n\t\t\tdocument.cookie = `${SIDEBAR_COOKIE_NAME}=${open}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`;\n\t\t},\n\t});\n</script>\n\n<svelte:window onkeydown={sidebar.handleShortcutKeydown} />\n\n<Tooltip.Provider delayDuration={0}>\n\t<div\n\t\tdata-slot=\"sidebar-wrapper\"\n\t\tstyle=\"--sidebar-width: {SIDEBAR_WIDTH}; --sidebar-width-icon: {SIDEBAR_WIDTH_ICON}; {style}\"\n\t\tclass={cn(\n\t\t\t\"group/sidebar-wrapper has-data-[variant=inset]:bg-sidebar flex min-h-svh w-full\",\n\t\t\tclassName\n\t\t)}\n\t\tbind:this={ref}\n\t\t{...restProps}\n\t>\n\t\t{@render children?.()}\n\t</div>\n</Tooltip.Provider>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/sidebar/sidebar-rail.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\timport { useSidebar } from \"./context.svelte.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLButtonElement>, HTMLButtonElement> = $props();\n\n\tconst sidebar = useSidebar();\n</script>\n\n<button\n\tbind:this={ref}\n\tdata-sidebar=\"rail\"\n\tdata-slot=\"sidebar-rail\"\n\taria-label=\"Toggle Sidebar\"\n\ttabindex={-1}\n\tonclick={sidebar.toggle}\n\ttitle=\"Toggle Sidebar\"\n\tclass={cn(\n\t\t\"cn-sidebar-rail absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 transition-all ease-linear group-data-[side=left]:-right-4 group-data-[side=right]:left-0 after:absolute after:inset-y-0 after:left-1/2 after:w-[2px] sm:flex\",\n\t\t\"in-data-[side=left]:cursor-w-resize in-data-[side=right]:cursor-e-resize\",\n\t\t\"[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize\",\n\t\t\"hover:group-data-[collapsible=offcanvas]:bg-sidebar group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full\",\n\t\t\"[[data-side=left][data-collapsible=offcanvas]_&]:-right-2\",\n\t\t\"[[data-side=right][data-collapsible=offcanvas]_&]:-left-2\",\n\t\tclassName\n\t)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</button>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/sidebar/sidebar-separator.svelte",
    "content": "<script lang=\"ts\">\n\timport { Separator } from \"$lib/registry/ui/separator/index.js\";\n\timport { cn } from \"$lib/utils.js\";\n\timport type { ComponentProps } from \"svelte\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\t...restProps\n\t}: ComponentProps<typeof Separator> = $props();\n</script>\n\n<Separator\n\tbind:ref\n\tdata-slot=\"sidebar-separator\"\n\tdata-sidebar=\"separator\"\n\tclass={cn(\"cn-sidebar-separator w-auto\", className)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/sidebar/sidebar-trigger.svelte",
    "content": "<script lang=\"ts\">\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\timport { cn } from \"$lib/utils.js\";\n\timport type { ComponentProps } from \"svelte\";\n\timport { useSidebar } from \"./context.svelte.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tonclick,\n\t\t...restProps\n\t}: ComponentProps<typeof Button> & {\n\t\tonclick?: (e: MouseEvent) => void;\n\t} = $props();\n\n\tconst sidebar = useSidebar();\n</script>\n\n<Button\n\tbind:ref\n\tdata-sidebar=\"trigger\"\n\tdata-slot=\"sidebar-trigger\"\n\tvariant=\"ghost\"\n\tsize=\"icon-sm\"\n\tclass={cn(\"cn-sidebar-trigger\", className)}\n\ttype=\"button\"\n\tonclick={(e) => {\n\t\tonclick?.(e);\n\t\tsidebar.toggle();\n\t}}\n\t{...restProps}\n>\n\t<IconPlaceholder\n\t\tlucide=\"PanelLeftIcon\"\n\t\ttabler=\"IconLayoutSidebar\"\n\t\thugeicons=\"SidebarLeftIcon\"\n\t\tphosphor=\"SidebarIcon\"\n\t\tremixicon=\"RiSideBarLine\"\n\t/>\n\t<span class=\"sr-only\">Toggle Sidebar</span>\n</Button>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/sidebar/sidebar.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Sheet from \"$lib/registry/ui/sheet/index.js\";\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\timport { SIDEBAR_WIDTH_MOBILE } from \"./constants.js\";\n\timport { useSidebar } from \"./context.svelte.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tside = \"left\",\n\t\tvariant = \"sidebar\",\n\t\tcollapsible = \"offcanvas\",\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLDivElement>> & {\n\t\tside?: \"left\" | \"right\";\n\t\tvariant?: \"sidebar\" | \"floating\" | \"inset\";\n\t\tcollapsible?: \"offcanvas\" | \"icon\" | \"none\";\n\t} = $props();\n\n\tconst sidebar = useSidebar();\n</script>\n\n{#if collapsible === \"none\"}\n\t<div\n\t\tclass={cn(\n\t\t\t\"bg-sidebar text-sidebar-foreground flex h-full w-(--sidebar-width) flex-col\",\n\t\t\tclassName\n\t\t)}\n\t\tbind:this={ref}\n\t\t{...restProps}\n\t>\n\t\t{@render children?.()}\n\t</div>\n{:else if sidebar.isMobile}\n\t<Sheet.Root\n\t\tbind:open={() => sidebar.openMobile, (v) => sidebar.setOpenMobile(v)}\n\t\t{...restProps}\n\t>\n\t\t<Sheet.Content\n\t\t\tbind:ref\n\t\t\tdata-sidebar=\"sidebar\"\n\t\t\tdata-slot=\"sidebar\"\n\t\t\tdata-mobile=\"true\"\n\t\t\tclass={cn(\n\t\t\t\t\"bg-sidebar text-sidebar-foreground w-(--sidebar-width) p-0 [&>button]:hidden\",\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\tstyle=\"--sidebar-width: {SIDEBAR_WIDTH_MOBILE};\"\n\t\t\t{side}\n\t\t>\n\t\t\t<Sheet.Header class=\"sr-only\">\n\t\t\t\t<Sheet.Title>Sidebar</Sheet.Title>\n\t\t\t\t<Sheet.Description>Displays the mobile sidebar.</Sheet.Description>\n\t\t\t</Sheet.Header>\n\t\t\t<div class=\"flex h-full w-full flex-col\">\n\t\t\t\t{@render children?.()}\n\t\t\t</div>\n\t\t</Sheet.Content>\n\t</Sheet.Root>\n{:else}\n\t<div\n\t\tbind:this={ref}\n\t\tclass=\"text-sidebar-foreground group peer hidden md:block\"\n\t\tdata-state={sidebar.state}\n\t\tdata-collapsible={sidebar.state === \"collapsed\" ? collapsible : \"\"}\n\t\tdata-variant={variant}\n\t\tdata-side={side}\n\t\tdata-slot=\"sidebar\"\n\t>\n\t\t<!-- This is what handles the sidebar gap on desktop -->\n\t\t<div\n\t\t\tdata-slot=\"sidebar-gap\"\n\t\t\tclass={cn(\n\t\t\t\t\"cn-sidebar-gap relative w-(--sidebar-width) bg-transparent\",\n\t\t\t\t\"group-data-[collapsible=offcanvas]:w-0\",\n\t\t\t\t\"group-data-[side=right]:rotate-180\",\n\t\t\t\tvariant === \"floating\" || variant === \"inset\"\n\t\t\t\t\t? \"group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4)))]\"\n\t\t\t\t\t: \"group-data-[collapsible=icon]:w-(--sidebar-width-icon)\"\n\t\t\t)}\n\t\t></div>\n\t\t<div\n\t\t\tdata-slot=\"sidebar-container\"\n\t\t\tclass={cn(\n\t\t\t\t\"fixed inset-y-0 z-10 hidden h-svh w-(--sidebar-width) transition-[left,right,width] duration-200 ease-linear md:flex\",\n\t\t\t\tside === \"left\"\n\t\t\t\t\t? \"start-0 group-data-[collapsible=offcanvas]:start-[calc(var(--sidebar-width)*-1)]\"\n\t\t\t\t\t: \"end-0 group-data-[collapsible=offcanvas]:end-[calc(var(--sidebar-width)*-1)]\",\n\t\t\t\t// Adjust the padding for floating and inset variants.\n\t\t\t\tvariant === \"floating\" || variant === \"inset\"\n\t\t\t\t\t? \"p-2 group-data-[collapsible=icon]:w-[calc(var(--sidebar-width-icon)+(--spacing(4))+2px)]\"\n\t\t\t\t\t: \"group-data-[collapsible=icon]:w-(--sidebar-width-icon) group-data-[side=left]:border-e group-data-[side=right]:border-s\",\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\t{...restProps}\n\t\t>\n\t\t\t<div\n\t\t\t\tdata-sidebar=\"sidebar\"\n\t\t\t\tdata-slot=\"sidebar-inner\"\n\t\t\t\tclass=\"cn-sidebar-inner flex size-full flex-col\"\n\t\t\t>\n\t\t\t\t{@render children?.()}\n\t\t\t</div>\n\t\t</div>\n\t</div>\n{/if}\n"
  },
  {
    "path": "docs/src/lib/registry/ui/skeleton/index.ts",
    "content": "import Root from \"./skeleton.svelte\";\n\nexport {\n\tRoot,\n\t//\n\tRoot as Skeleton,\n};\n"
  },
  {
    "path": "docs/src/lib/registry/ui/skeleton/skeleton.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn, type WithElementRef, type WithoutChildren } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\t...restProps\n\t}: WithoutChildren<WithElementRef<HTMLAttributes<HTMLDivElement>>> = $props();\n</script>\n\n<div\n\tbind:this={ref}\n\tdata-slot=\"skeleton\"\n\tclass={cn(\"cn-skeleton animate-pulse\", className)}\n\t{...restProps}\n></div>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/slider/index.ts",
    "content": "import Root from \"./slider.svelte\";\n\nexport {\n\tRoot,\n\t//\n\tRoot as Slider,\n};\n"
  },
  {
    "path": "docs/src/lib/registry/ui/slider/slider.svelte",
    "content": "<script lang=\"ts\">\n\timport { Slider as SliderPrimitive } from \"bits-ui\";\n\timport { cn, type WithoutChildrenOrChild } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tvalue = $bindable(),\n\t\torientation = \"horizontal\",\n\t\tclass: className,\n\t\t...restProps\n\t}: WithoutChildrenOrChild<SliderPrimitive.RootProps> = $props();\n</script>\n\n<!--\nDiscriminated Unions + Destructing (required for bindable) do not\nget along, so we shut typescript up by casting `value` to `never`.\n-->\n<SliderPrimitive.Root\n\tbind:ref\n\tbind:value={value as never}\n\tdata-slot=\"slider\"\n\t{orientation}\n\tclass={cn(\n\t\t\"cn-slider relative flex w-full touch-none items-center select-none data-disabled:opacity-50 data-vertical:h-full data-vertical:w-auto data-vertical:flex-col\",\n\t\tclassName\n\t)}\n\t{...restProps}\n>\n\t{#snippet children({ thumbItems })}\n\t\t<span\n\t\t\tdata-slot=\"slider-track\"\n\t\t\tdata-orientation={orientation}\n\t\t\tclass={cn(\n\t\t\t\t\"cn-slider-track bg-muted relative grow overflow-hidden data-horizontal:w-full data-vertical:h-full\"\n\t\t\t)}\n\t\t>\n\t\t\t<SliderPrimitive.Range\n\t\t\t\tdata-slot=\"slider-range\"\n\t\t\t\tclass={cn(\n\t\t\t\t\t\"cn-slider-range absolute select-none data-horizontal:h-full data-vertical:w-full\"\n\t\t\t\t)}\n\t\t\t/>\n\t\t</span>\n\t\t{#each thumbItems as thumb (thumb)}\n\t\t\t<SliderPrimitive.Thumb\n\t\t\t\tdata-slot=\"slider-thumb\"\n\t\t\t\tindex={thumb.index}\n\t\t\t\tclass=\"cn-slider-thumb block shrink-0 select-none disabled:pointer-events-none disabled:opacity-50\"\n\t\t\t/>\n\t\t{/each}\n\t{/snippet}\n</SliderPrimitive.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/sonner/index.ts",
    "content": "export { default as Toaster } from \"./sonner.svelte\";\n"
  },
  {
    "path": "docs/src/lib/registry/ui/sonner/sonner.svelte",
    "content": "<script lang=\"ts\">\n\timport { Toaster as Sonner, type ToasterProps as SonnerProps } from \"svelte-sonner\";\n\timport { mode } from \"mode-watcher\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\n\tlet { ...restProps }: SonnerProps = $props();\n</script>\n\n<Sonner\n\ttheme={mode.current}\n\tclass=\"toaster group\"\n\tstyle=\"--normal-bg: var(--color-popover); --normal-text: var(--color-popover-foreground); --normal-border: var(--color-border);\"\n\t{...restProps}\n>\n\t{#snippet loadingIcon()}\n\t\t<IconPlaceholder\n\t\t\tlucide=\"Loader2Icon\"\n\t\t\ttabler=\"IconLoader\"\n\t\t\thugeicons=\"Loading03Icon\"\n\t\t\tphosphor=\"SpinnerIcon\"\n\t\t\tremixicon=\"RiLoaderLine\"\n\t\t\tclass=\"size-4 animate-spin\"\n\t\t/>\n\t{/snippet}\n\t{#snippet successIcon()}\n\t\t<IconPlaceholder\n\t\t\tlucide=\"CircleCheckIcon\"\n\t\t\ttabler=\"IconCircleCheck\"\n\t\t\thugeicons=\"CheckmarkCircle02Icon\"\n\t\t\tphosphor=\"CheckCircleIcon\"\n\t\t\tremixicon=\"RiCheckboxCircleLine\"\n\t\t\tclass=\"size-4\"\n\t\t/>\n\t{/snippet}\n\t{#snippet errorIcon()}\n\t\t<IconPlaceholder\n\t\t\tlucide=\"OctagonXIcon\"\n\t\t\ttabler=\"IconAlertOctagon\"\n\t\t\thugeicons=\"MultiplicationSignCircleIcon\"\n\t\t\tphosphor=\"XCircleIcon\"\n\t\t\tremixicon=\"RiErrorWarningLine\"\n\t\t\tclass=\"size-4\"\n\t\t/>\n\t{/snippet}\n\t{#snippet infoIcon()}\n\t\t<IconPlaceholder\n\t\t\tlucide=\"InfoIcon\"\n\t\t\ttabler=\"IconInfoCircle\"\n\t\t\thugeicons=\"InformationCircleIcon\"\n\t\t\tphosphor=\"InfoIcon\"\n\t\t\tremixicon=\"RiInformationLine\"\n\t\t\tclass=\"size-4\"\n\t\t/>\n\t{/snippet}\n\t{#snippet warningIcon()}\n\t\t<IconPlaceholder\n\t\t\tlucide=\"TriangleAlertIcon\"\n\t\t\ttabler=\"IconAlertTriangle\"\n\t\t\thugeicons=\"Alert02Icon\"\n\t\t\tphosphor=\"WarningIcon\"\n\t\t\tremixicon=\"RiCloseCircleLine\"\n\t\t\tclass=\"size-4\"\n\t\t/>\n\t{/snippet}\n</Sonner>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/spinner/index.ts",
    "content": "export { default as Spinner } from \"./spinner.svelte\";\n"
  },
  {
    "path": "docs/src/lib/registry/ui/spinner/spinner.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn } from \"$lib/utils.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\timport type { SVGAttributes } from \"svelte/elements\";\n\n\tlet {\n\t\tclass: className,\n\t\trole = \"status\",\n\t\t// we add color and stroke for compatibility with different icon libraries props\n\t\tcolor,\n\t\tstroke,\n\t\t\"aria-label\": ariaLabel = \"Loading\",\n\t\t...restProps\n\t}: SVGAttributes<SVGSVGElement> = $props();\n</script>\n\n<IconPlaceholder\n\tlucide=\"Loader2Icon\"\n\ttabler=\"IconLoader\"\n\thugeicons=\"Loading03Icon\"\n\tphosphor=\"SpinnerIcon\"\n\tremixicon=\"RiLoaderLine\"\n\t{role}\n\tcolor={color === null ? undefined : color}\n\tstroke={stroke === null ? undefined : stroke}\n\taria-label={ariaLabel}\n\tclass={cn(\"size-4 animate-spin\", className)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/switch/index.ts",
    "content": "import Root from \"./switch.svelte\";\n\nexport {\n\tRoot,\n\t//\n\tRoot as Switch,\n};\n"
  },
  {
    "path": "docs/src/lib/registry/ui/switch/switch.svelte",
    "content": "<script lang=\"ts\">\n\timport { Switch as SwitchPrimitive } from \"bits-ui\";\n\timport { cn, type WithoutChildrenOrChild } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchecked = $bindable(false),\n\t\tsize = \"default\",\n\t\t...restProps\n\t}: WithoutChildrenOrChild<SwitchPrimitive.RootProps> & {\n\t\tsize?: \"sm\" | \"default\";\n\t} = $props();\n</script>\n\n<SwitchPrimitive.Root\n\tbind:ref\n\tbind:checked\n\tdata-slot=\"switch\"\n\tdata-size={size}\n\tclass={cn(\n\t\t\"cn-switch peer group/switch relative inline-flex items-center transition-all outline-none after:absolute after:-inset-x-3 after:-inset-y-2 data-disabled:cursor-not-allowed data-disabled:opacity-50\",\n\t\tclassName\n\t)}\n\t{...restProps}\n>\n\t<SwitchPrimitive.Thumb\n\t\tdata-slot=\"switch-thumb\"\n\t\tclass=\"cn-switch-thumb pointer-events-none block ring-0 transition-transform rtl:data-[state=checked]:translate-x-[calc(-100%)]\"\n\t/>\n</SwitchPrimitive.Root>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/table/index.ts",
    "content": "import Root from \"./table.svelte\";\nimport Body from \"./table-body.svelte\";\nimport Caption from \"./table-caption.svelte\";\nimport Cell from \"./table-cell.svelte\";\nimport Footer from \"./table-footer.svelte\";\nimport Head from \"./table-head.svelte\";\nimport Header from \"./table-header.svelte\";\nimport Row from \"./table-row.svelte\";\n\nexport {\n\tRoot,\n\tBody,\n\tCaption,\n\tCell,\n\tFooter,\n\tHead,\n\tHeader,\n\tRow,\n\t//\n\tRoot as Table,\n\tBody as TableBody,\n\tCaption as TableCaption,\n\tCell as TableCell,\n\tFooter as TableFooter,\n\tHead as TableHead,\n\tHeader as TableHeader,\n\tRow as TableRow,\n};\n"
  },
  {
    "path": "docs/src/lib/registry/ui/table/table-body.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLTableSectionElement>> = $props();\n</script>\n\n<tbody bind:this={ref} data-slot=\"table-body\" class={cn(\"cn-table-body\", className)} {...restProps}>\n\t{@render children?.()}\n</tbody>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/table/table-caption.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLElement>> = $props();\n</script>\n\n<caption\n\tbind:this={ref}\n\tdata-slot=\"table-caption\"\n\tclass={cn(\"cn-table-caption\", className)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</caption>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/table/table-cell.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\timport type { HTMLTdAttributes } from \"svelte/elements\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLTdAttributes> = $props();\n</script>\n\n<td bind:this={ref} data-slot=\"table-cell\" class={cn(\"cn-table-cell\", className)} {...restProps}>\n\t{@render children?.()}\n</td>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/table/table-footer.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLTableSectionElement>> = $props();\n</script>\n\n<tfoot\n\tbind:this={ref}\n\tdata-slot=\"table-footer\"\n\tclass={cn(\"cn-table-footer\", className)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</tfoot>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/table/table-head.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\timport type { HTMLThAttributes } from \"svelte/elements\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLThAttributes> = $props();\n</script>\n\n<th bind:this={ref} data-slot=\"table-head\" class={cn(\"cn-table-head\", className)} {...restProps}>\n\t{@render children?.()}\n</th>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/table/table-header.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLTableSectionElement>> = $props();\n</script>\n\n<thead\n\tbind:this={ref}\n\tdata-slot=\"table-header\"\n\tclass={cn(\"cn-table-header\", className)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</thead>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/table/table-row.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLTableRowElement>> = $props();\n</script>\n\n<tr bind:this={ref} data-slot=\"table-row\" class={cn(\"cn-table-row\", className)} {...restProps}>\n\t{@render children?.()}\n</tr>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/table/table.svelte",
    "content": "<script lang=\"ts\">\n\timport type { HTMLTableAttributes } from \"svelte/elements\";\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLTableAttributes> = $props();\n</script>\n\n<div data-slot=\"table-container\" class=\"cn-table-container\">\n\t<table bind:this={ref} data-slot=\"table\" class={cn(\"cn-table\", className)} {...restProps}>\n\t\t{@render children?.()}\n\t</table>\n</div>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/tabs/index.ts",
    "content": "import Root from \"./tabs.svelte\";\nimport Content from \"./tabs-content.svelte\";\nimport List, { tabsListVariants, type TabsListVariant } from \"./tabs-list.svelte\";\nimport Trigger from \"./tabs-trigger.svelte\";\n\nexport {\n\tRoot,\n\tContent,\n\tList,\n\tTrigger,\n\ttabsListVariants,\n\ttype TabsListVariant,\n\t//\n\tRoot as Tabs,\n\tContent as TabsContent,\n\tList as TabsList,\n\tTrigger as TabsTrigger,\n};\n"
  },
  {
    "path": "docs/src/lib/registry/ui/tabs/tabs-content.svelte",
    "content": "<script lang=\"ts\">\n\timport { Tabs as TabsPrimitive } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\t...restProps\n\t}: TabsPrimitive.ContentProps = $props();\n</script>\n\n<TabsPrimitive.Content\n\tbind:ref\n\tdata-slot=\"tabs-content\"\n\tclass={cn(\"cn-tabs-content flex-1 outline-none\", className)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/tabs/tabs-list.svelte",
    "content": "<script lang=\"ts\" module>\n\timport { tv, type VariantProps } from \"tailwind-variants\";\n\n\texport const tabsListVariants = tv({\n\t\tbase: \"cn-tabs-list group/tabs-list text-muted-foreground inline-flex w-fit items-center justify-center group-data-[orientation=vertical]/tabs:h-fit group-data-[orientation=vertical]/tabs:flex-col\",\n\t\tvariants: {\n\t\t\tvariant: {\n\t\t\t\tdefault: \"cn-tabs-list-variant-default bg-muted\",\n\t\t\t\tline: \"cn-tabs-list-variant-line gap-1 bg-transparent\",\n\t\t\t},\n\t\t},\n\t\tdefaultVariants: {\n\t\t\tvariant: \"default\",\n\t\t},\n\t});\n\n\texport type TabsListVariant = VariantProps<typeof tabsListVariants>[\"variant\"];\n</script>\n\n<script lang=\"ts\">\n\timport { Tabs as TabsPrimitive } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tvariant = \"default\",\n\t\tclass: className,\n\t\t...restProps\n\t}: TabsPrimitive.ListProps & {\n\t\tvariant?: TabsListVariant;\n\t} = $props();\n</script>\n\n<TabsPrimitive.List\n\tbind:ref\n\tdata-slot=\"tabs-list\"\n\tdata-variant={variant}\n\tclass={cn(tabsListVariants({ variant }), className)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/tabs/tabs-trigger.svelte",
    "content": "<script lang=\"ts\">\n\timport { Tabs as TabsPrimitive } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\t...restProps\n\t}: TabsPrimitive.TriggerProps = $props();\n</script>\n\n<TabsPrimitive.Trigger\n\tbind:ref\n\tdata-slot=\"tabs-trigger\"\n\tclass={cn(\n\t\t\"cn-tabs-trigger focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:outline-ring text-foreground/60 hover:text-foreground dark:text-muted-foreground dark:hover:text-foreground relative inline-flex h-[calc(100%-1px)] flex-1 items-center justify-center whitespace-nowrap transition-all group-data-[orientation=vertical]/tabs:w-full group-data-[orientation=vertical]/tabs:justify-start focus-visible:ring-[3px] focus-visible:outline-1 disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n\t\t\"group-data-[variant=line]/tabs-list:bg-transparent group-data-[variant=line]/tabs-list:data-active:bg-transparent dark:group-data-[variant=line]/tabs-list:data-active:border-transparent dark:group-data-[variant=line]/tabs-list:data-active:bg-transparent\",\n\t\t\"data-active:bg-background dark:data-active:text-foreground dark:data-active:border-input dark:data-active:bg-input/30 data-active:text-foreground\",\n\t\t\"after:bg-foreground after:absolute after:opacity-0 after:transition-opacity group-data-[orientation=horizontal]/tabs:after:inset-x-0 group-data-[orientation=horizontal]/tabs:after:bottom-[-5px] group-data-[orientation=horizontal]/tabs:after:h-0.5 group-data-[orientation=vertical]/tabs:after:inset-y-0 group-data-[orientation=vertical]/tabs:after:-right-1 group-data-[orientation=vertical]/tabs:after:w-0.5 group-data-[variant=line]/tabs-list:data-active:after:opacity-100\",\n\t\tclassName\n\t)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/tabs/tabs.svelte",
    "content": "<script lang=\"ts\">\n\timport { Tabs as TabsPrimitive } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tvalue = $bindable(\"\"),\n\t\tclass: className,\n\t\t...restProps\n\t}: TabsPrimitive.RootProps = $props();\n</script>\n\n<TabsPrimitive.Root\n\tbind:ref\n\tbind:value\n\tdata-slot=\"tabs\"\n\tclass={cn(\"cn-tabs group/tabs flex data-[orientation=horizontal]:flex-col\", className)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/textarea/index.ts",
    "content": "import Root from \"./textarea.svelte\";\n\nexport {\n\tRoot,\n\t//\n\tRoot as Textarea,\n};\n"
  },
  {
    "path": "docs/src/lib/registry/ui/textarea/textarea.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn, type WithElementRef, type WithoutChildren } from \"$lib/utils.js\";\n\timport type { HTMLTextareaAttributes } from \"svelte/elements\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tvalue = $bindable(),\n\t\tclass: className,\n\t\t\"data-slot\": dataSlot = \"textarea\",\n\t\t...restProps\n\t}: WithoutChildren<WithElementRef<HTMLTextareaAttributes>> = $props();\n</script>\n\n<textarea\n\tbind:this={ref}\n\tdata-slot={dataSlot}\n\tclass={cn(\n\t\t\"cn-textarea placeholder:text-muted-foreground flex field-sizing-content min-h-16 w-full outline-none disabled:cursor-not-allowed disabled:opacity-50\",\n\t\tclassName\n\t)}\n\tbind:value\n\t{...restProps}\n></textarea>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/toggle/index.ts",
    "content": "import Root from \"./toggle.svelte\";\nexport {\n\ttoggleVariants,\n\ttype ToggleSize,\n\ttype ToggleVariant,\n\ttype ToggleVariants,\n} from \"./toggle.svelte\";\n\nexport {\n\tRoot,\n\t//\n\tRoot as Toggle,\n};\n"
  },
  {
    "path": "docs/src/lib/registry/ui/toggle/toggle.svelte",
    "content": "<script lang=\"ts\" module>\n\timport { type VariantProps, tv } from \"tailwind-variants\";\n\n\texport const toggleVariants = tv({\n\t\tbase: \"cn-toggle group/toggle hover:bg-muted inline-flex items-center justify-center whitespace-nowrap outline-none focus-visible:ring-[3px] disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n\t\tvariants: {\n\t\t\tvariant: {\n\t\t\t\tdefault: \"cn-toggle-variant-default\",\n\t\t\t\toutline: \"cn-toggle-variant-outline\",\n\t\t\t},\n\t\t\tsize: {\n\t\t\t\tdefault: \"cn-toggle-size-default\",\n\t\t\t\tsm: \"cn-toggle-size-sm\",\n\t\t\t\tlg: \"cn-toggle-size-lg\",\n\t\t\t},\n\t\t},\n\t\tdefaultVariants: {\n\t\t\tvariant: \"default\",\n\t\t\tsize: \"default\",\n\t\t},\n\t});\n\n\texport type ToggleVariant = VariantProps<typeof toggleVariants>[\"variant\"];\n\texport type ToggleSize = VariantProps<typeof toggleVariants>[\"size\"];\n\texport type ToggleVariants = VariantProps<typeof toggleVariants>;\n</script>\n\n<script lang=\"ts\">\n\timport { Toggle as TogglePrimitive } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tpressed = $bindable(false),\n\t\tclass: className,\n\t\tsize = \"default\",\n\t\tvariant = \"default\",\n\t\t...restProps\n\t}: TogglePrimitive.RootProps & {\n\t\tvariant?: ToggleVariant;\n\t\tsize?: ToggleSize;\n\t} = $props();\n</script>\n\n<TogglePrimitive.Root\n\tbind:ref\n\tbind:pressed\n\tdata-slot=\"toggle\"\n\tclass={cn(toggleVariants({ variant, size }), className)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/toggle-group/index.ts",
    "content": "import Root from \"./toggle-group.svelte\";\nimport Item from \"./toggle-group-item.svelte\";\n\nexport {\n\tRoot,\n\tItem,\n\t//\n\tRoot as ToggleGroup,\n\tItem as ToggleGroupItem,\n};\n"
  },
  {
    "path": "docs/src/lib/registry/ui/toggle-group/toggle-group-item.svelte",
    "content": "<script lang=\"ts\">\n\timport { ToggleGroup as ToggleGroupPrimitive } from \"bits-ui\";\n\timport { getToggleGroupCtx } from \"./toggle-group.svelte\";\n\timport { cn } from \"$lib/utils.js\";\n\timport { type ToggleVariants, toggleVariants } from \"$lib/registry/ui/toggle/index.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tvalue = $bindable(),\n\t\tclass: className,\n\t\tsize,\n\t\tvariant,\n\t\t...restProps\n\t}: ToggleGroupPrimitive.ItemProps & ToggleVariants = $props();\n\n\tconst ctx = getToggleGroupCtx();\n</script>\n\n<ToggleGroupPrimitive.Item\n\tbind:ref\n\tdata-slot=\"toggle-group-item\"\n\tdata-variant={ctx.variant || variant}\n\tdata-size={ctx.size || size}\n\tdata-spacing={ctx.spacing}\n\tclass={cn(\n\t\t\"cn-toggle-group-item shrink-0 focus:z-10 focus-visible:z-10 group-data-horizontal/toggle-group:data-[spacing=0]:data-[variant=outline]:border-l-0 group-data-vertical/toggle-group:data-[spacing=0]:data-[variant=outline]:border-t-0 group-data-horizontal/toggle-group:data-[spacing=0]:data-[variant=outline]:first:border-l group-data-vertical/toggle-group:data-[spacing=0]:data-[variant=outline]:first:border-t\",\n\t\ttoggleVariants({\n\t\t\tvariant: ctx.variant || variant,\n\t\t\tsize: ctx.size || size,\n\t\t}),\n\t\tclassName\n\t)}\n\t{value}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/toggle-group/toggle-group.svelte",
    "content": "<script lang=\"ts\" module>\n\timport { getContext, setContext } from \"svelte\";\n\timport type { VariantProps } from \"tailwind-variants\";\n\timport { toggleVariants } from \"$lib/registry/ui/toggle/index.js\";\n\n\ttype ToggleVariants = VariantProps<typeof toggleVariants>;\n\n\tinterface ToggleGroupContext extends ToggleVariants {\n\t\tspacing?: number;\n\t\torientation?: \"horizontal\" | \"vertical\";\n\t}\n\n\texport function setToggleGroupCtx(props: ToggleGroupContext) {\n\t\tsetContext(\"toggleGroup\", props);\n\t}\n\n\texport function getToggleGroupCtx() {\n\t\treturn getContext<Required<ToggleGroupContext>>(\"toggleGroup\");\n\t}\n</script>\n\n<script lang=\"ts\">\n\timport { ToggleGroup as ToggleGroupPrimitive } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tvalue = $bindable(),\n\t\tclass: className,\n\t\tsize = \"default\",\n\t\tspacing = 0,\n\t\torientation = \"horizontal\",\n\t\tvariant = \"default\",\n\t\t...restProps\n\t}: ToggleGroupPrimitive.RootProps &\n\t\tToggleVariants & {\n\t\t\tspacing?: number;\n\t\t\torientation?: \"horizontal\" | \"vertical\";\n\t\t} = $props();\n\n\tsetToggleGroupCtx({\n\t\tget variant() {\n\t\t\treturn variant;\n\t\t},\n\t\tget size() {\n\t\t\treturn size;\n\t\t},\n\t\tget spacing() {\n\t\t\treturn spacing;\n\t\t},\n\t\tget orientation() {\n\t\t\treturn orientation;\n\t\t},\n\t});\n</script>\n\n<!--\nDiscriminated Unions + Destructing (required for bindable) do not\nget along, so we shut typescript up by casting `value` to `never`.\n-->\n<ToggleGroupPrimitive.Root\n\tbind:value={value as never}\n\tbind:ref\n\t{orientation}\n\tdata-slot=\"toggle-group\"\n\tdata-variant={variant}\n\tdata-size={size}\n\tdata-spacing={spacing}\n\tstyle={`--gap: ${spacing}`}\n\tclass={cn(\n\t\t\"cn-toggle-group group/toggle-group flex w-fit flex-row items-center gap-[--spacing(var(--gap))] data-vertical:flex-col data-vertical:items-stretch\",\n\t\tclassName\n\t)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/tooltip/index.ts",
    "content": "import Root from \"./tooltip.svelte\";\nimport Trigger from \"./tooltip-trigger.svelte\";\nimport Content from \"./tooltip-content.svelte\";\nimport Provider from \"./tooltip-provider.svelte\";\nimport Portal from \"./tooltip-portal.svelte\";\n\nexport {\n\tRoot,\n\tTrigger,\n\tContent,\n\tProvider,\n\tPortal,\n\t//\n\tRoot as Tooltip,\n\tContent as TooltipContent,\n\tTrigger as TooltipTrigger,\n\tProvider as TooltipProvider,\n\tPortal as TooltipPortal,\n};\n"
  },
  {
    "path": "docs/src/lib/registry/ui/tooltip/tooltip-content.svelte",
    "content": "<script lang=\"ts\">\n\timport { Tooltip as TooltipPrimitive } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\timport TooltipPortal from \"./tooltip-portal.svelte\";\n\timport type { ComponentProps } from \"svelte\";\n\timport type { WithoutChildrenOrChild } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tsideOffset = 0,\n\t\tside = \"top\",\n\t\tchildren,\n\t\tarrowClasses,\n\t\tportalProps,\n\t\t...restProps\n\t}: TooltipPrimitive.ContentProps & {\n\t\tarrowClasses?: string;\n\t\tportalProps?: WithoutChildrenOrChild<ComponentProps<typeof TooltipPortal>>;\n\t} = $props();\n</script>\n\n<TooltipPortal {...portalProps}>\n\t<TooltipPrimitive.Content\n\t\tbind:ref\n\t\tdata-slot=\"tooltip-content\"\n\t\t{sideOffset}\n\t\t{side}\n\t\tclass={cn(\n\t\t\t\"cn-tooltip-content bg-foreground text-background z-50 w-fit max-w-xs origin-(--bits-tooltip-content-transform-origin)\",\n\t\t\tclassName\n\t\t)}\n\t\t{...restProps}\n\t>\n\t\t{@render children?.()}\n\t\t<TooltipPrimitive.Arrow>\n\t\t\t{#snippet child({ props })}\n\t\t\t\t<div\n\t\t\t\t\tclass={cn(\n\t\t\t\t\t\t\"cn-tooltip-arrow bg-foreground fill-foreground z-50\",\n\t\t\t\t\t\t\"data-[side=top]:translate-x-1/2 data-[side=top]:translate-y-[calc(-50%+2px)]\",\n\t\t\t\t\t\t\"data-[side=bottom]:-translate-x-1/2 data-[side=bottom]:-translate-y-[calc(-50%+1px)]\",\n\t\t\t\t\t\t\"data-[side=right]:translate-x-[calc(50%+2px)] data-[side=right]:translate-y-1/2\",\n\t\t\t\t\t\t\"data-[side=left]:-translate-y-[calc(50%-3px)]\",\n\t\t\t\t\t\tarrowClasses\n\t\t\t\t\t)}\n\t\t\t\t\t{...props}\n\t\t\t\t></div>\n\t\t\t{/snippet}\n\t\t</TooltipPrimitive.Arrow>\n\t</TooltipPrimitive.Content>\n</TooltipPortal>\n"
  },
  {
    "path": "docs/src/lib/registry/ui/tooltip/tooltip-portal.svelte",
    "content": "<script lang=\"ts\">\n\timport { Tooltip as TooltipPrimitive } from \"bits-ui\";\n\n\tlet { ...restProps }: TooltipPrimitive.PortalProps = $props();\n</script>\n\n<TooltipPrimitive.Portal {...restProps} />\n"
  },
  {
    "path": "docs/src/lib/registry/ui/tooltip/tooltip-provider.svelte",
    "content": "<script lang=\"ts\">\n\timport { Tooltip as TooltipPrimitive } from \"bits-ui\";\n\n\tlet { delayDuration = 0, ...restProps }: TooltipPrimitive.ProviderProps = $props();\n</script>\n\n<TooltipPrimitive.Provider {delayDuration} {...restProps} />\n"
  },
  {
    "path": "docs/src/lib/registry/ui/tooltip/tooltip-trigger.svelte",
    "content": "<script lang=\"ts\">\n\timport { Tooltip as TooltipPrimitive } from \"bits-ui\";\n\n\tlet { ref = $bindable(null), ...restProps }: TooltipPrimitive.TriggerProps = $props();\n</script>\n\n<TooltipPrimitive.Trigger bind:ref data-slot=\"tooltip-trigger\" {...restProps} />\n"
  },
  {
    "path": "docs/src/lib/registry/ui/tooltip/tooltip.svelte",
    "content": "<script lang=\"ts\">\n\timport { Tooltip as TooltipPrimitive } from \"bits-ui\";\n\timport TooltipProvider from \"./tooltip-provider.svelte\";\n\n\tlet { open = $bindable(false), ...restProps }: TooltipPrimitive.RootProps = $props();\n</script>\n\n<TooltipProvider>\n\t<TooltipPrimitive.Root bind:open {...restProps} />\n</TooltipProvider>\n"
  },
  {
    "path": "docs/src/lib/themes.ts",
    "content": "export const THEMES = [\n\t{\n\t\tname: \"Default\",\n\t\tvalue: \"default\",\n\t},\n\t{\n\t\tname: \"Neutral\",\n\t\tvalue: \"neutral\",\n\t},\n\t{\n\t\tname: \"Stone\",\n\t\tvalue: \"stone\",\n\t},\n\t{\n\t\tname: \"Zinc\",\n\t\tvalue: \"zinc\",\n\t},\n\t{\n\t\tname: \"Gray\",\n\t\tvalue: \"gray\",\n\t},\n\t{\n\t\tname: \"Slate\",\n\t\tvalue: \"slate\",\n\t},\n\t{\n\t\tname: \"Scaled\",\n\t\tvalue: \"scaled\",\n\t},\n];\nexport type Theme = (typeof THEMES)[number];\n"
  },
  {
    "path": "docs/src/lib/user-config.svelte.ts",
    "content": "import { Context } from \"runed\";\nimport { z } from \"zod\";\n\nexport const USER_CONFIG_COOKIE_NAME = \"scn_user_config\";\n\nconst layoutSchema = z.enum([\"fixed\", \"full\"]).default(\"full\");\nconst installationTypeSchema = z.enum([\"cli\", \"manual\"]).default(\"cli\");\nconst packageManagerSchema = z.enum([\"npm\", \"yarn\", \"pnpm\", \"bun\"]).default(\"pnpm\");\nconst colorFormatSchema = z.enum([\"class\", \"hex\", \"rgb\", \"hsl\", \"oklch\", \"var\"]).default(\"oklch\");\nconst activeTheme = z\n\t.enum([\n\t\t\"default\",\n\t\t\"scaled\",\n\t\t\"mono\",\n\t\t\"blue\",\n\t\t\"green\",\n\t\t\"amber\",\n\t\t\"rose\",\n\t\t\"purple\",\n\t\t\"orange\",\n\t\t\"teal\",\n\t\t\"violet\",\n\t\t\"red\",\n\t\t\"yellow\",\n\t\t\"neutral\",\n\t])\n\t.default(\"default\");\n\nexport type Layout = z.infer<typeof layoutSchema>;\nexport type InstallationType = z.infer<typeof installationTypeSchema>;\nexport type PackageManager = z.infer<typeof packageManagerSchema>;\nexport type ColorFormat = z.infer<typeof colorFormatSchema>;\nexport type ActiveTheme = z.infer<typeof activeTheme>;\n\nexport const userConfigSchema = z\n\t.object({\n\t\tlayout: layoutSchema,\n\t\tinstallationType: installationTypeSchema,\n\t\tpackageManager: packageManagerSchema,\n\t\tcolorFormat: colorFormatSchema,\n\t\tactiveTheme: activeTheme,\n\t})\n\t.default({\n\t\tlayout: \"full\",\n\t\tinstallationType: \"cli\",\n\t\tpackageManager: \"npm\",\n\t\tcolorFormat: \"hsl\",\n\t\tactiveTheme: \"default\",\n\t});\n\nexport type UserConfigType = z.infer<typeof userConfigSchema>;\n\nfunction parseCookie(cookie: string): Record<string, string> {\n\tconst cookies = cookie.split(\";\");\n\tconst cookieMap: Record<string, string> = {};\n\tfor (const cookie of cookies) {\n\t\tconst [key, value] = cookie.split(\"=\");\n\t\tcookieMap[key.trim()] = decodeURIComponent(value);\n\t}\n\treturn cookieMap;\n}\n\nexport function parseUserConfig(cookie: string): UserConfigType {\n\tconst cookieMap = parseCookie(cookie);\n\tconst userConfig = cookieMap[USER_CONFIG_COOKIE_NAME];\n\tif (!userConfig) return userConfigSchema.parse({});\n\treturn userConfigSchema.parse(JSON.parse(userConfig));\n}\n\nexport class UserConfig {\n\t#config: UserConfigType;\n\n\tconstructor(config: UserConfigType) {\n\t\tthis.#config = $state.raw(config);\n\t}\n\n\tget current(): UserConfigType {\n\t\treturn this.#config;\n\t}\n\n\tsetConfig(config: Partial<UserConfigType>): void {\n\t\tthis.#config = { ...this.#config, ...config };\n\t\tdocument.cookie = `${USER_CONFIG_COOKIE_NAME}=${encodeURIComponent(JSON.stringify(this.#config))}; path=/; max-age=31536000; SameSite=Lax;`;\n\n\t\tif (config.layout) updateLayoutClass(this.#config.layout);\n\t}\n}\n\nfunction updateLayoutClass(newLayout: Layout): void {\n\tif (typeof document === \"undefined\") return;\n\n\t// Remove any existing layout classes\n\tdocument.documentElement.classList.remove(\"layout-fixed\", \"layout-full\");\n\t// Add the new layout class\n\tdocument.documentElement.classList.add(`layout-${newLayout}`);\n}\n\nexport const UserConfigContext = new Context<UserConfig>(\"UserConfigContext\");\n"
  },
  {
    "path": "docs/src/lib/utils.ts",
    "content": "import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]): string {\n\treturn twMerge(clsx(inputs));\n}\n\nexport function getComponentName(name: string): string {\n\t// convert kebab-case to title case\n\treturn name.replace(/-/g, \" \").replace(/\\b\\w/g, (char) => char.toUpperCase());\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type WithoutChild<T> = T extends { child?: any } ? Omit<T, \"child\"> : T;\nexport type WithoutChildrenOrChild<T> = WithoutChildren<WithoutChild<T>>;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type WithoutChildren<T> = T extends { children?: any } ? Omit<T, \"children\"> : T;\nexport type WithElementRef<T, U extends HTMLElement = HTMLElement> = T & { ref?: U | null };\n"
  },
  {
    "path": "docs/src/params/view.ts",
    "content": "import { isBlock, type BlockName } from \"$lib/blocks.js\";\nimport type { ParamMatcher } from \"@sveltejs/kit\";\n\nexport const match: ParamMatcher = (param: string): param is BlockName => {\n\treturn isBlock(param);\n};\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/(create)/+layout@(app).svelte",
    "content": "<script lang=\"ts\">\n\tlet { children } = $props();\n</script>\n\n{@render children()}\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/(create)/components/action-menu.svelte",
    "content": "<script lang=\"ts\" module>\n\timport { Context } from \"runed\";\n\n\tclass ActionMenuContext {\n\t\topen = $state(false);\n\t}\n\n\texport const ActionMenuCtx = new Context<ActionMenuContext>(\"action-menu-ctx\");\n</script>\n\n<script lang=\"ts\">\n\timport * as Command from \"$lib/registry/ui/command/index.js\";\n\timport { goto } from \"$app/navigation\";\n\timport { page } from \"$app/state\";\n\timport { groupItemsByType } from \"../lib/utils.js\";\n\timport { examples } from \"$lib/registry/examples/create/index.js\";\n\timport type { Snippet } from \"svelte\";\n\n\tlet { children }: { children: Snippet } = $props();\n\n\tconst groupedItems = $derived(groupItemsByType(examples));\n\n\tfunction handleKeydown(e: KeyboardEvent) {\n\t\tif (e.key === \"p\" && (e.metaKey || e.ctrlKey)) {\n\t\t\te.preventDefault();\n\t\t\te.stopPropagation();\n\t\t\tactionMenuCtx.open = !actionMenuCtx.open;\n\t\t}\n\t}\n\n\tconst actionMenuCtx = ActionMenuCtx.set(new ActionMenuContext());\n\n\tfunction handleSelect(itemName: string) {\n\t\tgoto(`/create/${itemName}${page.url.search}`);\n\t\tactionMenuCtx.open = false;\n\t}\n</script>\n\n<svelte:document onkeydown={handleKeydown} />\n\n<Command.Dialog bind:open={actionMenuCtx.open} value={page.params.item} class=\"animate-none!\">\n\t<Command.Input placeholder=\"Search\" />\n\t<Command.List>\n\t\t<Command.Empty>No items found.</Command.Empty>\n\t\t<Command.Group>\n\t\t\t{#each groupedItems as group (group.type)}\n\t\t\t\t{#each group.items as item (item.name)}\n\t\t\t\t\t<Command.Item\n\t\t\t\t\t\tvalue={item.name}\n\t\t\t\t\t\tonSelect={() => handleSelect(item.name)}\n\t\t\t\t\t\tdata-checked={page.params.item === item.name}\n\t\t\t\t\t>\n\t\t\t\t\t\t{item.title}\n\t\t\t\t\t</Command.Item>\n\t\t\t\t{/each}\n\t\t\t{/each}\n\t\t</Command.Group>\n\t</Command.List>\n</Command.Dialog>\n{@render children?.()}\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/(create)/components/base-color-picker.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Picker from \"./picker/index.js\";\n\timport { useDesignSystem } from \"$lib/features/design-system/index.js\";\n\timport { IsMobile } from \"$lib/registry/hooks/is-mobile.svelte.js\";\n\timport LockButton from \"./lock-button.svelte\";\n\timport { BASE_THEMES, type BaseColorName } from \"$lib/registry/config.js\";\n\timport { mode, setMode } from \"mode-watcher\";\n\n\ttype Props = {\n\t\tsubmenu?: boolean;\n\t};\n\n\tlet { submenu = false }: Props = $props();\n\n\tconst designSystem = useDesignSystem();\n\n\tconst isMobile = new IsMobile();\n\n\tconst currentBaseColor = $derived(\n\t\tBASE_THEMES.find((base) => base.name === designSystem.baseColor) ?? BASE_THEMES[0]\n\t);\n</script>\n\n<div class=\"group/picker relative\">\n\t<Picker.Root {submenu}>\n\t\t<Picker.Trigger {submenu}>\n\t\t\t<div class=\"flex flex-col justify-start text-left\">\n\t\t\t\t<div class=\"text-muted-foreground text-xs\">Base Color</div>\n\t\t\t\t<div class=\"text-foreground text-sm font-medium\">\n\t\t\t\t\t{currentBaseColor?.title}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div\n\t\t\t\tstyle=\"--color: \n\t\t\t\t\t\t{currentBaseColor?.cssVars?.[mode.current as 'light' | 'dark']?.['muted-foreground']}\"\n\t\t\t\tclass=\"pointer-events-none absolute top-1/2 right-4 size-4 -translate-y-1/2 rounded-full bg-(--color) select-none\"\n\t\t\t></div>\n\t\t</Picker.Trigger>\n\t\t<Picker.Content\n\t\t\tside={isMobile.current ? \"top\" : submenu ? \"left\" : \"right\"}\n\t\t\talign={isMobile.current ? \"center\" : \"start\"}\n\t\t\tsideOffset={submenu ? 5 : 20}\n\t\t\t{submenu}\n\t\t>\n\t\t\t<Picker.RadioGroup\n\t\t\t\tbind:value={designSystem.baseColor}\n\t\t\t\tonValueChange={(value) => {\n\t\t\t\t\tif (value === \"dark\") {\n\t\t\t\t\t\tsetMode(mode.current === \"dark\" ? \"light\" : \"dark\");\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tdesignSystem.baseColor = value as BaseColorName;\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<Picker.Group>\n\t\t\t\t\t{#each BASE_THEMES as baseColor (baseColor.name)}\n\t\t\t\t\t\t<Picker.RadioItem value={baseColor.name} closeOnSelect={false}>\n\t\t\t\t\t\t\t<div class=\"flex items-center gap-2\">\n\t\t\t\t\t\t\t\t{#if mode.current}\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tstyle=\"--color: {baseColor.cssVars?.[\n\t\t\t\t\t\t\t\t\t\t\tmode.current as 'light' | 'dark'\n\t\t\t\t\t\t\t\t\t\t]?.['muted-foreground']};\"\n\t\t\t\t\t\t\t\t\t\tclass=\"size-4 rounded-full bg-(--color)\"\n\t\t\t\t\t\t\t\t\t></div>\n\t\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\t\t{baseColor.title}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</Picker.RadioItem>\n\t\t\t\t\t{/each}\n\t\t\t\t</Picker.Group>\n\t\t\t\t<Picker.Separator />\n\t\t\t\t<Picker.Group>\n\t\t\t\t\t<Picker.Item\n\t\t\t\t\t\tcloseOnSelect={false}\n\t\t\t\t\t\tonclick={() => {\n\t\t\t\t\t\t\tsetMode(mode.current === \"dark\" ? \"light\" : \"dark\");\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t<div class=\"flex flex-col justify-start pointer-coarse:gap-1\">\n\t\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t\tSwitch to {mode.current === \"dark\" ? \"Light\" : \"Dark\"} Mode\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"text-muted-foreground text-xs pointer-coarse:text-sm\">\n\t\t\t\t\t\t\t\tBase colors are easier to see in dark mode.\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</Picker.Item>\n\t\t\t\t</Picker.Group>\n\t\t\t</Picker.RadioGroup>\n\t\t</Picker.Content>\n\t</Picker.Root>\n\t<LockButton prop=\"baseColor\" class=\"absolute top-1/2 right-10 -translate-y-1/2\" />\n</div>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/(create)/components/copy-preset.svelte",
    "content": "<script lang=\"ts\">\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport { UseClipboard } from \"$lib/hooks/use-clipboard.svelte.js\";\n\timport { useDesignSystem } from \"$lib/features/design-system/index.js\";\n\timport { cn } from \"$lib/utils.js\";\n\n\ttype Props = {\n\t\tclass?: string;\n\t};\n\n\tlet { class: className }: Props = $props();\n\n\tconst designSystem = useDesignSystem();\n\tconst clipboard = new UseClipboard();\n\n\tconst presetCode = $derived(new URL(designSystem.shareUrl).searchParams.get(\"preset\") ?? \"\");\n\n\tfunction handleCopy() {\n\t\tclipboard.copy(`--preset ${presetCode}`);\n\t}\n</script>\n\n<Button\n\tvariant=\"outline\"\n\tonclick={handleCopy}\n\tclass={cn(\n\t\t\"hover:bg-muted! touch-manipulation bg-transparent! px-2! py-0! text-sm! transition-none select-none pointer-coarse:h-10!\",\n\t\tclassName\n\t)}\n>\n\t<span>{clipboard.copied ? \"Copied\" : `--preset ${presetCode}`}</span>\n</Button>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/(create)/components/customizer-controls.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn } from \"$lib/utils.js\";\n\timport RandomButton from \"./random-button.svelte\";\n\timport ResetButton from \"./reset-button.svelte\";\n\n\ttype Props = {\n\t\tclass?: string;\n\t\tsubmenu?: boolean;\n\t};\n\n\tlet { class: className, submenu = false }: Props = $props();\n</script>\n\n<div class={cn(\"items-center gap-0\", className)}>\n\t<RandomButton {submenu} />\n\t<ResetButton {submenu} />\n</div>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/(create)/components/customizer.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as FieldGroup from \"$lib/registry/ui/field/index.js\";\n\timport RadiusPicker from \"./radius-picker.svelte\";\n\timport StylePicker from \"./style-picker.svelte\";\n\timport ThemePicker from \"./theme-picker.svelte\";\n\timport BaseColorPicker from \"./base-color-picker.svelte\";\n\timport IconLibraryPicker from \"./icon-library-picker.svelte\";\n\timport FontPicker from \"./font-picker.svelte\";\n\timport MenuColorPicker from \"./menu-color-picker.svelte\";\n\timport MenuAccentPicker from \"./menu-accent-picker.svelte\";\n\timport RandomButton from \"./random-button.svelte\";\n\timport CopyPreset from \"./copy-preset.svelte\";\n\timport MainMenu from \"./main-menu.svelte\";\n\timport Cta from \"$lib/components/cta.svelte\";\n\timport Ethical from \"$lib/components/ethical.svelte\";\n</script>\n\n<div\n\tclass=\"top-24 right-12 isolate z-10 flex min-h-0 w-full flex-col gap-2 self-start md:w-(--customizer-width)\"\n>\n\t<Card.Root\n\t\tclass=\"dark bg-card/90 max-h-full min-h-0 w-full rounded-2xl shadow-xl backdrop-blur-xl\"\n\t\tsize=\"sm\"\n\t>\n\t\t<Card.Header\n\t\t\tclass=\"hidden items-center justify-between gap-2 border-b group-data-reversed/layout:flex-row-reverse md:flex\"\n\t\t>\n\t\t\t<MainMenu />\n\t\t</Card.Header>\n\t\t<Card.Content\n\t\t\tclass=\"no-scrollbar min-h-0 flex-1 overflow-x-auto overflow-y-hidden md:overflow-y-auto\"\n\t\t>\n\t\t\t<FieldGroup.Group class=\"flex-row gap-2.5 py-px md:flex-col md:gap-3.25\">\n\t\t\t\t<StylePicker />\n\t\t\t\t<BaseColorPicker />\n\t\t\t\t<ThemePicker />\n\t\t\t\t<IconLibraryPicker />\n\t\t\t\t<FontPicker />\n\t\t\t\t<RadiusPicker />\n\t\t\t\t<MenuColorPicker />\n\t\t\t\t<MenuAccentPicker />\n\t\t\t</FieldGroup.Group>\n\t\t</Card.Content>\n\t\t<Card.Footer class=\"flex min-w-0 gap-2 md:flex-col md:**:[button,a]:w-full\">\n\t\t\t<CopyPreset class=\"flex-1 md:flex-none\" />\n\t\t\t<RandomButton />\n\t\t\t<!-- <ActionMenu {itemsByBase} /> -->\n\t\t</Card.Footer>\n\t</Card.Root>\n\t<div class=\"hidden w-full flex-1 flex-col gap-12 md:flex\">\n\t\t<Cta />\n\t</div>\n\t<div class=\"hidden flex-col gap-12 md:flex\">\n\t\t<Ethical />\n\t</div>\n</div>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/(create)/components/example-wrapper.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet { class: className, children, ...restProps }: HTMLAttributes<HTMLDivElement> = $props();\n</script>\n\n<div class=\"bg-background w-full\">\n\t<div\n\t\tdata-slot=\"example-wrapper\"\n\t\tclass={cn(\n\t\t\t\"mx-auto grid min-h-screen w-full max-w-5xl min-w-0 content-center items-start gap-8 p-4 pt-2 sm:gap-12 sm:p-6 md:grid-cols-2 md:gap-8 lg:p-12 2xl:max-w-6xl\",\n\n\t\t\tclassName\n\t\t)}\n\t\t{...restProps}\n\t>\n\t\t{@render children?.()}\n\t</div>\n</div>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/(create)/components/example.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\ttype Props = {\n\t\ttitle?: string;\n\t\tcontainerClass?: string;\n\t};\n\tlet {\n\t\ttitle,\n\t\tcontainerClass,\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: HTMLAttributes<HTMLDivElement> & Props = $props();\n</script>\n\n<div\n\tdata-slot=\"example\"\n\tclass={cn(\n\t\t\"mx-auto flex w-full max-w-lg min-w-0 flex-col gap-1 self-stretch lg:max-w-none\",\n\t\tcontainerClass\n\t)}\n\t{...restProps}\n>\n\t{#if title}\n\t\t<div class=\"text-muted-foreground px-1.5 py-2 text-xs font-medium\">\n\t\t\t{title}\n\t\t</div>\n\t{/if}\n\t<div\n\t\tdata-slot=\"example-content\"\n\t\tclass={cn(\n\t\t\t\"bg-card text-foreground flex min-w-0 flex-1 flex-col items-start gap-6 rounded-xl p-12 *:[div:not([class*='w-'])]:w-full\",\n\t\t\tclassName\n\t\t)}\n\t>\n\t\t{@render children?.()}\n\t</div>\n</div>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/(create)/components/font-picker.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Picker from \"./picker/index.js\";\n\timport * as Item from \"$lib/registry/ui/item/index.js\";\n\timport { useDesignSystem } from \"$lib/features/design-system/index.js\";\n\timport { IsMobile } from \"$lib/registry/hooks/is-mobile.svelte.js\";\n\timport LockButton from \"./lock-button.svelte\";\n\timport { fonts, getFont } from \"$lib/registry/config.js\";\n\n\ttype Props = {\n\t\tsubmenu?: boolean;\n\t};\n\n\tlet { submenu = false }: Props = $props();\n\n\tconst designSystem = useDesignSystem();\n\n\tconst isMobile = new IsMobile();\n\n\tconst currentFont = $derived(getFont(designSystem.font) ?? fonts[0]);\n</script>\n\n<div class=\"group/picker relative\">\n\t<Picker.Root {submenu}>\n\t\t<Picker.Trigger {submenu}>\n\t\t\t<div class=\"flex flex-col justify-start text-left\">\n\t\t\t\t<div class=\"text-muted-foreground text-xs\">Font</div>\n\t\t\t\t<div class=\"text-foreground text-sm font-medium\">\n\t\t\t\t\t{currentFont?.title}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div\n\t\t\t\tclass=\"text-foreground pointer-events-none absolute top-1/2 right-4 flex size-4 -translate-y-1/2 items-center justify-center text-base select-none\"\n\t\t\t\tstyle=\"font-family: {currentFont?.font.family}\"\n\t\t\t>\n\t\t\t\tAa\n\t\t\t</div>\n\t\t</Picker.Trigger>\n\t\t<Picker.Content\n\t\t\tside={isMobile.current ? \"top\" : submenu ? \"left\" : \"right\"}\n\t\t\talign={isMobile.current ? \"center\" : \"start\"}\n\t\t\tclass=\"max-h-80 overflow-y-auto md:w-72\"\n\t\t\tsideOffset={submenu ? 5 : 20}\n\t\t\t{submenu}\n\t\t>\n\t\t\t<Picker.RadioGroup bind:value={designSystem.font}>\n\t\t\t\t<Picker.Group>\n\t\t\t\t\t{#each fonts as font, index (font.name)}\n\t\t\t\t\t\t<Picker.RadioItem\n\t\t\t\t\t\t\tvalue={font.name.replace(\"font-\", \"\")}\n\t\t\t\t\t\t\tcloseOnSelect={false}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Item.Root size=\"sm\">\n\t\t\t\t\t\t\t\t<Item.Content class=\"gap-1\">\n\t\t\t\t\t\t\t\t\t<Item.Title class=\"text-muted-foreground text-xs font-medium\">\n\t\t\t\t\t\t\t\t\t\t{font.title}\n\t\t\t\t\t\t\t\t\t</Item.Title>\n\t\t\t\t\t\t\t\t\t<Item.Description\n\t\t\t\t\t\t\t\t\t\tclass=\"text-foreground\"\n\t\t\t\t\t\t\t\t\t\tstyle=\"font-family: {font.font.family}\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\tDesigners love packing quirky glyphs into test phrases.\n\t\t\t\t\t\t\t\t\t</Item.Description>\n\t\t\t\t\t\t\t\t</Item.Content>\n\t\t\t\t\t\t\t</Item.Root>\n\t\t\t\t\t\t</Picker.RadioItem>\n\t\t\t\t\t\t{#if index < fonts.length - 1}\n\t\t\t\t\t\t\t<Picker.Separator class=\"opacity-50\" />\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t{/each}\n\t\t\t\t</Picker.Group>\n\t\t\t</Picker.RadioGroup>\n\t\t</Picker.Content>\n\t</Picker.Root>\n\t<LockButton prop=\"font\" class=\"absolute top-1/2 right-10 -translate-y-1/2\" />\n</div>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/(create)/components/icon-library-picker.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Picker from \"./picker/index.js\";\n\timport * as Item from \"$lib/registry/ui/item/index.js\";\n\timport { useDesignSystem } from \"$lib/features/design-system/index.js\";\n\timport { IsMobile } from \"$lib/registry/hooks/is-mobile.svelte.js\";\n\timport LockButton from \"./lock-button.svelte\";\n\timport { iconLibraries, type IconLibraryName } from \"$lib/registry/config.js\";\n\timport LucideLogo from \"$lib/registry/icons/logos/lucide.svelte\";\n\timport TablerLogo from \"$lib/registry/icons/logos/tabler.svelte\";\n\timport HugeiconsLogo from \"$lib/registry/icons/logos/hugeicons.svelte\";\n\timport PhosphorLogo from \"$lib/registry/icons/logos/phosphor.svelte\";\n\timport RemixiconLogo from \"$lib/registry/icons/logos/remixicon.svelte\";\n\timport LucideSquareIcon from \"@lucide/svelte/icons/square\";\n\timport LucideIcon from \"$lib/components/icon-placeholder/lucide-icon.svelte\";\n\timport TablerIcon from \"$lib/components/icon-placeholder/tabler-icon.svelte\";\n\timport HugeiconsIcon from \"$lib/components/icon-placeholder/hugeicons-icon.svelte\";\n\timport PhosphorIcon from \"$lib/components/icon-placeholder/phosphor-icon.svelte\";\n\timport RemixiconIcon from \"$lib/components/icon-placeholder/remixicon-icon.svelte\";\n\timport type { LucideIconName } from \"$lib/registry/icons/__lucide__/index.js\";\n\timport type { TablerIconName } from \"$lib/registry/icons/__tabler__/index.js\";\n\timport type { HugeIconsIconName } from \"$lib/registry/icons/__hugeicons__/index.js\";\n\timport type { PhosphorIconName } from \"$lib/registry/icons/__phosphor__/index.js\";\n\timport type { RemixIconIconName } from \"$lib/registry/icons/__remixicon__/index.js\";\n\n\ttype Props = {\n\t\tsubmenu?: boolean;\n\t};\n\n\tlet { submenu = false }: Props = $props();\n\n\tconst designSystem = useDesignSystem();\n\tconst isMobile = new IsMobile();\n\n\tconst currentIconLibrary = $derived(iconLibraries[designSystem.iconLibrary]);\n\n\tconst logos = {\n\t\tlucide: LucideLogo,\n\t\ttabler: TablerLogo,\n\t\thugeicons: HugeiconsLogo,\n\t\tphosphor: PhosphorLogo,\n\t\tremixicon: RemixiconLogo,\n\t} as const;\n\n\tconst CurrentLogo = $derived(logos[currentIconLibrary.name]);\n\n\t// TODO: none of these icons will actually load until we use them in components\n\tconst PREVIEW_ICONS = {\n\t\tlucide: [\n\t\t\t\"CopyIcon\",\n\t\t\t\"CircleAlertIcon\",\n\t\t\t\"Trash2Icon\",\n\t\t\t\"ShareIcon\",\n\t\t\t\"ShoppingBagIcon\",\n\t\t\t\"MoreHorizontalIcon\",\n\t\t\t\"Loader2Icon\",\n\t\t\t\"PlusIcon\",\n\t\t\t\"MinusIcon\",\n\t\t\t\"ArrowLeftIcon\",\n\t\t\t\"ArrowRightIcon\",\n\t\t\t\"CheckIcon\",\n\t\t\t\"ChevronDownIcon\",\n\t\t\t\"ChevronRightIcon\",\n\t\t] satisfies LucideIconName[],\n\t\ttabler: [\n\t\t\t\"IconCopy\",\n\t\t\t\"IconExclamationCircle\",\n\t\t\t\"IconTrash\",\n\t\t\t\"IconShare\",\n\t\t\t\"IconShoppingBag\",\n\t\t\t\"IconDots\",\n\t\t\t\"IconLoader\",\n\t\t\t\"IconPlus\",\n\t\t\t\"IconMinus\",\n\t\t\t\"IconArrowLeft\",\n\t\t\t\"IconArrowRight\",\n\t\t\t\"IconCheck\",\n\t\t\t\"IconChevronDown\",\n\t\t\t\"IconChevronRight\",\n\t\t] satisfies TablerIconName[],\n\t\thugeicons: [\n\t\t\t\"Copy01Icon\",\n\t\t\t\"AlertCircleIcon\",\n\t\t\t\"Delete02Icon\",\n\t\t\t\"Share03Icon\",\n\t\t\t\"ShoppingBag01Icon\",\n\t\t\t\"MoreHorizontalCircle01Icon\",\n\t\t\t\"Loading03Icon\",\n\t\t\t\"PlusSignIcon\",\n\t\t\t\"MinusSignIcon\",\n\t\t\t\"ArrowLeft02Icon\",\n\t\t\t\"ArrowRight02Icon\",\n\t\t\t\"Tick02Icon\",\n\t\t\t\"ArrowDown01Icon\",\n\t\t\t\"ArrowRight01Icon\",\n\t\t] satisfies HugeIconsIconName[],\n\t\tphosphor: [\n\t\t\t\"CopyIcon\",\n\t\t\t\"WarningCircleIcon\",\n\t\t\t\"TrashIcon\",\n\t\t\t\"ShareIcon\",\n\t\t\t\"BagIcon\",\n\t\t\t\"DotsThreeIcon\",\n\t\t\t\"SpinnerIcon\",\n\t\t\t\"PlusIcon\",\n\t\t\t\"MinusIcon\",\n\t\t\t\"ArrowLeftIcon\",\n\t\t\t\"ArrowRightIcon\",\n\t\t\t\"CheckIcon\",\n\t\t\t\"CaretDownIcon\",\n\t\t\t\"CaretRightIcon\",\n\t\t] satisfies PhosphorIconName[],\n\t\tremixicon: [\n\t\t\t\"RiFileCopyLine\",\n\t\t\t\"RiErrorWarningLine\",\n\t\t\t\"RiDeleteBinLine\",\n\t\t\t\"RiShareLine\",\n\t\t\t\"RiShoppingBagLine\",\n\t\t\t\"RiMoreLine\",\n\t\t\t\"RiLoaderLine\",\n\t\t\t\"RiAddLine\",\n\t\t\t\"RiSubtractLine\",\n\t\t\t\"RiArrowLeftLine\",\n\t\t\t\"RiArrowRightLine\",\n\t\t\t\"RiCheckLine\",\n\t\t\t\"RiArrowDownSLine\",\n\t\t\t\"RiArrowRightSLine\",\n\t\t] satisfies RemixIconIconName[],\n\t} as const satisfies Record<\n\t\tIconLibraryName,\n\t\t| LucideIconName[]\n\t\t| TablerIconName[]\n\t\t| HugeIconsIconName[]\n\t\t| PhosphorIconName[]\n\t\t| RemixIconIconName[]\n\t>;\n</script>\n\n<div class=\"group/picker relative\">\n\t<Picker.Root {submenu}>\n\t\t<Picker.Trigger {submenu}>\n\t\t\t<div class=\"flex flex-col justify-start text-left\">\n\t\t\t\t<div class=\"text-muted-foreground text-xs\">Icon Library</div>\n\t\t\t\t<div class=\"text-foreground text-sm font-medium\">\n\t\t\t\t\t{currentIconLibrary?.title}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div\n\t\t\t\tclass=\"text-foreground *:[svg]:text-foreground! pointer-events-none absolute top-1/2 right-4 flex size-4 -translate-y-1/2 items-center justify-center text-base select-none\"\n\t\t\t>\n\t\t\t\t<CurrentLogo class=\"size-4\" />\n\t\t\t</div>\n\t\t</Picker.Trigger>\n\t\t<Picker.Content\n\t\t\tside={isMobile.current ? \"top\" : submenu ? \"left\" : \"right\"}\n\t\t\talign={isMobile.current ? \"center\" : \"start\"}\n\t\t\tsideOffset={submenu ? 5 : 20}\n\t\t\t{submenu}\n\t\t>\n\t\t\t<Picker.RadioGroup bind:value={designSystem.iconLibrary}>\n\t\t\t\t<Picker.Group>\n\t\t\t\t\t{#each Object.values(iconLibraries) as iconLibrary, index (iconLibrary.name)}\n\t\t\t\t\t\t<Picker.RadioItem\n\t\t\t\t\t\t\tcloseOnSelect={false}\n\t\t\t\t\t\t\tvalue={iconLibrary.name}\n\t\t\t\t\t\t\tclass=\"pr-2 *:data-[slot=dropdown-menu-radio-item-indicator]:hidden\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<Item.Root size=\"sm\">\n\t\t\t\t\t\t\t\t<Item.Content class=\"gap-1\">\n\t\t\t\t\t\t\t\t\t<Item.Title class=\"text-muted-foreground text-xs font-medium\">\n\t\t\t\t\t\t\t\t\t\t{iconLibrary.title}\n\t\t\t\t\t\t\t\t\t</Item.Title>\n\t\t\t\t\t\t\t\t\t{@render IconLibraryPreview(iconLibrary.name)}\n\t\t\t\t\t\t\t\t</Item.Content>\n\t\t\t\t\t\t\t</Item.Root>\n\t\t\t\t\t\t</Picker.RadioItem>\n\t\t\t\t\t\t{#if index < Object.values(iconLibraries).length - 1}\n\t\t\t\t\t\t\t<Picker.Separator class=\"opacity-50\" />\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t{/each}\n\t\t\t\t</Picker.Group>\n\t\t\t</Picker.RadioGroup>\n\t\t</Picker.Content>\n\t</Picker.Root>\n\t<LockButton prop=\"iconLibrary\" class=\"absolute top-1/2 right-10 -translate-y-1/2\" />\n</div>\n\n{#snippet IconLibraryPreview(iconLibrary: IconLibraryName)}\n\t{@const previewIcons = PREVIEW_ICONS[iconLibrary]}\n\t{#if previewIcons}\n\t\t{#if iconLibrary === \"lucide\"}\n\t\t\t{@render IconLibraryPreviewLucide(previewIcons as LucideIconName[])}\n\t\t{:else if iconLibrary === \"tabler\"}\n\t\t\t{@render IconLibraryPreviewTabler(previewIcons as TablerIconName[])}\n\t\t{:else if iconLibrary === \"hugeicons\"}\n\t\t\t{@render IconLibraryPreviewHugeicons(previewIcons as HugeIconsIconName[])}\n\t\t{:else if iconLibrary === \"phosphor\"}\n\t\t\t{@render IconLibraryPreviewPhosphor(previewIcons as PhosphorIconName[])}\n\t\t{:else if iconLibrary === \"remixicon\"}\n\t\t\t{@render IconLibraryPreviewRemixicon(previewIcons as RemixIconIconName[])}\n\t\t{/if}\n\t{/if}\n{/snippet}\n\n{#snippet PlaceholderIcon()}\n\t<LucideSquareIcon />\n{/snippet}\n\n{#snippet IconLibraryPreviewLucide(previewIcons: LucideIconName[])}\n\t<div class=\"-mx-1 grid w-full grid-cols-7 gap-2\">\n\t\t{#each previewIcons as iconName (iconName)}\n\t\t\t<LucideIcon icon={iconName}>\n\t\t\t\t{#snippet placeholder()}\n\t\t\t\t\t{@render PlaceholderIcon()}\n\t\t\t\t{/snippet}\n\t\t\t</LucideIcon>\n\t\t{/each}\n\t</div>\n{/snippet}\n\n{#snippet IconLibraryPreviewTabler(previewIcons: TablerIconName[])}\n\t<div class=\"-mx-1 grid w-full grid-cols-7 gap-2\">\n\t\t{#each previewIcons as iconName (iconName)}\n\t\t\t<TablerIcon icon={iconName}>\n\t\t\t\t{#snippet placeholder()}\n\t\t\t\t\t{@render PlaceholderIcon()}\n\t\t\t\t{/snippet}\n\t\t\t</TablerIcon>\n\t\t{/each}\n\t</div>\n{/snippet}\n\n{#snippet IconLibraryPreviewHugeicons(previewIcons: HugeIconsIconName[])}\n\t<div class=\"-mx-1 grid w-full grid-cols-7 gap-2\">\n\t\t{#each previewIcons as iconName (iconName)}\n\t\t\t<HugeiconsIcon icon={iconName}>\n\t\t\t\t{#snippet placeholder()}\n\t\t\t\t\t{@render PlaceholderIcon()}\n\t\t\t\t{/snippet}\n\t\t\t</HugeiconsIcon>\n\t\t{/each}\n\t</div>\n{/snippet}\n\n{#snippet IconLibraryPreviewPhosphor(previewIcons: PhosphorIconName[])}\n\t<div class=\"-mx-1 grid w-full grid-cols-7 gap-2\">\n\t\t{#each previewIcons as iconName (iconName)}\n\t\t\t<PhosphorIcon icon={iconName}>\n\t\t\t\t{#snippet placeholder()}\n\t\t\t\t\t{@render PlaceholderIcon()}\n\t\t\t\t{/snippet}\n\t\t\t</PhosphorIcon>\n\t\t{/each}\n\t</div>\n{/snippet}\n\n{#snippet IconLibraryPreviewRemixicon(previewIcons: RemixIconIconName[])}\n\t<div class=\"-mx-1 grid w-full grid-cols-7 gap-2\">\n\t\t{#each previewIcons as iconName (iconName)}\n\t\t\t<RemixiconIcon icon={iconName}>\n\t\t\t\t{#snippet placeholder()}\n\t\t\t\t\t{@render PlaceholderIcon()}\n\t\t\t\t{/snippet}\n\t\t\t</RemixiconIcon>\n\t\t{/each}\n\t</div>\n{/snippet}\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/(create)/components/initialize-dialog.svelte",
    "content": "<script lang=\"ts\">\n\timport { buttonVariants } from \"$lib/registry/ui/button/index.js\";\n\timport * as Dialog from \"$lib/registry/ui/dialog/index.js\";\n\timport SquareTerminal from \"@lucide/svelte/icons/square-terminal\";\n\timport { useDesignSystem } from \"$lib/features/design-system/index.js\";\n\timport * as Tooltip from \"$lib/registry/ui/tooltip/index.js\";\n\timport { cn } from \"$lib/utils.js\";\n\timport PMExecute from \"$lib/components/pm-execute.svelte\";\n\n\tconst designSystem = useDesignSystem();\n</script>\n\n<Dialog.Root>\n\t<Dialog.Trigger\n\t\tclass={cn(buttonVariants({ variant: \"default\", size: \"sm\" }), \"hidden md:flex\")}\n\t>\n\t\t<SquareTerminal />\n\t\tInitialize Project\n\t</Dialog.Trigger>\n\t<Dialog.Content class=\"w-full max-w-lg!\">\n\t\t<Dialog.Header>\n\t\t\t<Dialog.Title>Initialize Project</Dialog.Title>\n\t\t\t<Dialog.Description>\n\t\t\t\tRun the following command to initialize your project with the current preset.\n\t\t\t</Dialog.Description>\n\t\t</Dialog.Header>\n\t\t<Tooltip.Provider>\n\t\t\t<PMExecute command=\"shadcn-svelte init --preset {designSystem.preset}\" />\n\t\t</Tooltip.Provider>\n\t</Dialog.Content>\n</Dialog.Root>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/(create)/components/item-explorer.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\timport * as Collapsible from \"$lib/registry/ui/collapsible/index.js\";\n\timport ChevronRightIcon from \"@lucide/svelte/icons/chevron-right\";\n\timport type { RegistryItem } from \"shadcn-svelte/schema\";\n\timport { groupItemsByType } from \"../lib/utils.js\";\n\timport { cn } from \"$lib/utils.js\";\n\timport { goto } from \"$app/navigation\";\n\timport { page } from \"$app/state\";\n\n\ttype Props = {\n\t\titems: Pick<RegistryItem, \"name\" | \"title\" | \"type\">[];\n\t};\n\tlet { items }: Props = $props();\n\n\tconst groupedItems = $derived(groupItemsByType(items));\n</script>\n\n<Sidebar.Root\n\tclass=\"sticky z-30 hidden h-[calc(100svh-var(--header-height)-2rem)] overscroll-none bg-transparent xl:flex\"\n\tcollapsible=\"none\"\n>\n\t<Sidebar.Content class=\"no-scrollbar -mx-1 overflow-x-hidden\">\n\t\t{#each groupedItems as group (group.title)}\n\t\t\t<Collapsible.Root open class=\"group/collapsible\">\n\t\t\t\t<Sidebar.Group class=\"px-1 py-0\">\n\t\t\t\t\t<Collapsible.Trigger\n\t\t\t\t\t\tclass=\"flex w-full items-center gap-1 py-1.5 text-[0.8rem] font-medium [&[data-state=open]>svg]:rotate-90\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<ChevronRightIcon\n\t\t\t\t\t\t\tclass=\"text-muted-foreground size-3.5 transition-transform\"\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<span>{group.title}</span>\n\t\t\t\t\t</Collapsible.Trigger>\n\t\t\t\t\t<Collapsible.Content>\n\t\t\t\t\t\t<Sidebar.GroupContent>\n\t\t\t\t\t\t\t<Sidebar.Menu class=\"border-border/50 relative ml-1.5 border-l pl-2\">\n\t\t\t\t\t\t\t\t{#each group.items as item, index (item.name)}\n\t\t\t\t\t\t\t\t\t<Sidebar.MenuItem class=\"relative\">\n\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\tclass={cn(\n\t\t\t\t\t\t\t\t\t\t\t\t\"border-border/50 absolute top-1/2 -left-2 h-px w-2 border-t\",\n\t\t\t\t\t\t\t\t\t\t\t\tindex === group.items.length - 1 && \"bg-sidebar\"\n\t\t\t\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t\t\t\t></div>\n\t\t\t\t\t\t\t\t\t\t{#if index === group.items.length - 1}\n\t\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\t\tclass=\"bg-sidebar absolute top-1/2 -bottom-1 -left-2.5 w-1\"\n\t\t\t\t\t\t\t\t\t\t\t></div>\n\t\t\t\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\t\t\t\t<Sidebar.MenuButton\n\t\t\t\t\t\t\t\t\t\t\tonclick={() =>\n\t\t\t\t\t\t\t\t\t\t\t\tgoto(`/create/${item.name}${page.url.search}`)}\n\t\t\t\t\t\t\t\t\t\t\tclass=\"data-[active=true]:bg-accent data-[active=true]:border-accent 3xl:fixed:w-full 3xl:fixed:max-w-48 relative h-[26px] w-fit cursor-pointer overflow-visible border border-transparent text-[0.8rem] font-normal after:absolute after:inset-x-0 after:-inset-y-1 after:z-0 after:rounded-md\"\n\t\t\t\t\t\t\t\t\t\t\tdata-active={item.name === page.params.item}\n\t\t\t\t\t\t\t\t\t\t\tisActive={item.name === page.params.item}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{item.title}\n\t\t\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\t\t\tclass=\"absolute inset-0 flex w-(--sidebar-width) bg-transparent\"\n\t\t\t\t\t\t\t\t\t\t\t></span>\n\t\t\t\t\t\t\t\t\t\t</Sidebar.MenuButton>\n\t\t\t\t\t\t\t\t\t\t<a\n\t\t\t\t\t\t\t\t\t\t\thref={`/preview/${item.name}`}\n\t\t\t\t\t\t\t\t\t\t\tdata-sveltekit-preload-data=\"hover\"\n\t\t\t\t\t\t\t\t\t\t\tclass=\"sr-only\"\n\t\t\t\t\t\t\t\t\t\t\ttabindex={-1}\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\t{item.title}\n\t\t\t\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t\t\t\t</Sidebar.MenuItem>\n\t\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t</Sidebar.Menu>\n\t\t\t\t\t\t</Sidebar.GroupContent>\n\t\t\t\t\t</Collapsible.Content>\n\t\t\t\t</Sidebar.Group>\n\t\t\t</Collapsible.Root>\n\t\t{/each}\n\t</Sidebar.Content>\n</Sidebar.Root>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/(create)/components/lock-button.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Tooltip from \"$lib/registry/ui/tooltip/index.js\";\n\timport { cn } from \"$lib/utils.js\";\n\timport { SquareLock01Icon, SquareUnlock01Icon } from \"@hugeicons/core-free-icons\";\n\timport { HugeiconsIcon } from \"@hugeicons/svelte\";\n\timport { useDesignSystem, type Lockable } from \"$lib/features/design-system/index.js\";\n\n\ttype Props = {\n\t\tprop: keyof Lockable;\n\t\tclass?: string;\n\t};\n\n\tlet { prop, class: className }: Props = $props();\n\n\tconst designSystem = useDesignSystem();\n\n\tconst isLocked = $derived(designSystem.locks[prop]);\n</script>\n\n<Tooltip.Root>\n\t<Tooltip.Trigger\n\t\tonclick={() => (isLocked ? designSystem.unlock(prop) : designSystem.lock(prop))}\n\t\tdata-locked={isLocked}\n\t\tclass={cn(\n\t\t\t\"flex size-4 cursor-pointer items-center justify-center rounded opacity-0 transition-opacity group-focus-within/picker:opacity-100 group-hover/picker:opacity-100 focus-visible:opacity-100 data-[locked=true]:opacity-100 pointer-coarse:hidden\",\n\t\t\tclassName\n\t\t)}\n\t\taria-label={isLocked ? \"Unlock\" : \"Lock\"}\n\t>\n\t\t{#if isLocked}\n\t\t\t<HugeiconsIcon\n\t\t\t\ticon={SquareLock01Icon}\n\t\t\t\tstrokeWidth={2}\n\t\t\t\tclassName=\"text-foreground size-5\"\n\t\t\t/>\n\t\t{:else}\n\t\t\t<HugeiconsIcon\n\t\t\t\ticon={SquareUnlock01Icon}\n\t\t\t\tstrokeWidth={2}\n\t\t\t\tclassName=\"text-foreground size-5\"\n\t\t\t/>\n\t\t{/if}\n\t</Tooltip.Trigger>\n\t<Tooltip.Content>\n\t\t{isLocked ? \"Locked\" : \"Unlocked\"}\n\t</Tooltip.Content>\n</Tooltip.Root>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/(create)/components/main-menu.svelte",
    "content": "<svelte:options runes />\n\n<script lang=\"ts\">\n\timport { cn } from \"$lib/utils.js\";\n\timport * as Picker from \"./picker/index.js\";\n\timport { useDesignSystem } from \"$lib/features/design-system/index.js\";\n\timport { setMode, mode } from \"mode-watcher\";\n\timport { useIsMac } from \"$lib/hooks/use-is-mac.svelte.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\timport { ActionMenuCtx } from \"./action-menu.svelte\";\n\n\ttype Props = {\n\t\tclass?: string;\n\t};\n\n\tlet { class: className }: Props = $props();\n\n\tconst isMac = useIsMac();\n\tconst designSystem = useDesignSystem();\n\tconst actionMenuCtx = ActionMenuCtx.get();\n\n\tfunction toggleTheme() {\n\t\tsetMode(mode.current === \"dark\" ? \"light\" : \"dark\");\n\t}\n</script>\n\n<Picker.Root submenu={false}>\n\t<Picker.Trigger\n\t\tsubmenu={false}\n\t\tclass={cn(\n\t\t\t\"ring-foreground/10 flex items-center justify-between gap-2 rounded-lg px-1.75 ring-1 focus-visible:ring-1\",\n\t\t\tclassName\n\t\t)}\n\t>\n\t\t<span class=\"font-medium\">Menu</span>\n\t\t<IconPlaceholder\n\t\t\tlucide=\"MenuIcon\"\n\t\t\thugeicons=\"Menu09Icon\"\n\t\t\tphosphor=\"ListIcon\"\n\t\t\ttabler=\"IconMenu2\"\n\t\t\tremixicon=\"RiMenuLine\"\n\t\t\tclass=\"size-5\"\n\t\t/>\n\t</Picker.Trigger>\n\t<Picker.Content side=\"right\" align=\"start\" alignOffset={-8}>\n\t\t<Picker.Group>\n\t\t\t<Picker.Item onSelect={() => (actionMenuCtx.open = true)}>\n\t\t\t\tNavigate...\n\t\t\t\t<Picker.Shortcut>{isMac.current ? \"⌘P\" : \"Ctrl+P\"}</Picker.Shortcut>\n\t\t\t</Picker.Item>\n\t\t\t<Picker.Item onSelect={() => designSystem.randomize()}>\n\t\t\t\tShuffle\n\t\t\t\t<Picker.Shortcut>R</Picker.Shortcut>\n\t\t\t</Picker.Item>\n\t\t\t<Picker.Item onSelect={toggleTheme}>\n\t\t\t\tLight/Dark\n\t\t\t\t<Picker.Shortcut>D</Picker.Shortcut>\n\t\t\t</Picker.Item>\n\t\t</Picker.Group>\n\t\t<Picker.Separator />\n\t\t<Picker.Group>\n\t\t\t<Picker.Item onSelect={() => designSystem.undo()} disabled={!designSystem.canUndo}>\n\t\t\t\tUndo\n\t\t\t\t<Picker.Shortcut>{isMac.current ? \"⌘Z\" : \"Ctrl+Z\"}</Picker.Shortcut>\n\t\t\t</Picker.Item>\n\t\t\t<Picker.Item onSelect={() => designSystem.redo()} disabled={!designSystem.canRedo}>\n\t\t\t\tRedo\n\t\t\t\t<Picker.Shortcut>{isMac.current ? \"⇧⌘Z\" : \"Ctrl+Shift+Z\"}</Picker.Shortcut>\n\t\t\t</Picker.Item>\n\t\t\t<Picker.Separator />\n\t\t\t<Picker.Item onSelect={() => designSystem.reset()}>Reset</Picker.Item>\n\t\t</Picker.Group>\n\t</Picker.Content>\n</Picker.Root>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/(create)/components/menu-accent-picker.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Picker from \"./picker/index.js\";\n\timport { useDesignSystem } from \"$lib/features/design-system/index.js\";\n\timport { IsMobile } from \"$lib/registry/hooks/is-mobile.svelte.js\";\n\timport LockButton from \"./lock-button.svelte\";\n\timport { MENU_ACCENTS, type MenuAccentValue } from \"$lib/registry/config.js\";\n\n\ttype Props = {\n\t\tsubmenu?: boolean;\n\t};\n\n\tlet { submenu = false }: Props = $props();\n\n\tconst designSystem = useDesignSystem();\n\tconst isMobile = new IsMobile();\n\n\tconst currentAccent = $derived(\n\t\tMENU_ACCENTS.find((accent) => accent.value === designSystem.menuAccent) ?? MENU_ACCENTS[0]\n\t);\n</script>\n\n<div class=\"group/picker relative\">\n\t<Picker.Root {submenu}>\n\t\t<Picker.Trigger {submenu}>\n\t\t\t<div class=\"flex flex-col justify-start text-left\">\n\t\t\t\t<div class=\"text-muted-foreground text-xs\">Menu Accent</div>\n\t\t\t\t<div class=\"text-foreground text-sm font-medium\">\n\t\t\t\t\t{currentAccent.label}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div\n\t\t\t\tclass=\"text-foreground pointer-events-none absolute top-1/2 right-4 flex size-4 -translate-y-1/2 items-center justify-center text-base select-none\"\n\t\t\t>\n\t\t\t\t<svg\n\t\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\t\t\twidth=\"128\"\n\t\t\t\t\theight=\"128\"\n\t\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\t\tfill=\"none\"\n\t\t\t\t\tclass=\"text-foreground size-4\"\n\t\t\t\t>\n\t\t\t\t\t<path\n\t\t\t\t\t\td=\"M19 12.1294L12.9388 18.207C11.1557 19.9949 10.2641 20.8889 9.16993 20.9877C8.98904 21.0041 8.80705 21.0041 8.62616 20.9877C7.53195 20.8889 6.64039 19.9949 4.85726 18.207L2.83687 16.1811C1.72104 15.0622 1.72104 13.2482 2.83687 12.1294M19 12.1294L10.9184 4.02587M19 12.1294H2.83687M10.9184 4.02587L2.83687 12.1294M10.9184 4.02587L8.89805 2\"\n\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\tstroke-width=\"2\"\n\t\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t\t\tdata-accent={currentAccent.value}\n\t\t\t\t\t\tclass=\"data-[accent=bold]:fill-foreground fill-muted-foreground/30\"\n\t\t\t\t\t></path>\n\t\t\t\t\t<path\n\t\t\t\t\t\td=\"M22 20C22 21.1046 21.1046 22 20 22C18.8954 22 18 21.1046 18 20C18 18.8954 20 17 20 17C20 17 22 18.8954 22 20Z\"\n\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t\tstroke-width=\"2\"\n\t\t\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\t\t\tdata-accent={currentAccent.value}\n\t\t\t\t\t\tclass=\"data-[accent=bold]:fill-foreground fill-muted-foreground/30\"\n\t\t\t\t\t></path>\n\t\t\t\t</svg>\n\t\t\t</div>\n\t\t</Picker.Trigger>\n\t\t<Picker.Content\n\t\t\tside={isMobile.current ? \"top\" : submenu ? \"left\" : \"right\"}\n\t\t\talign={isMobile.current ? \"center\" : \"start\"}\n\t\t\tsideOffset={submenu ? 5 : 20}\n\t\t\t{submenu}\n\t\t>\n\t\t\t<Picker.RadioGroup\n\t\t\t\tvalue={currentAccent.value}\n\t\t\t\tonValueChange={(value) => {\n\t\t\t\t\tdesignSystem.menuAccent = value as MenuAccentValue;\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<Picker.Group>\n\t\t\t\t\t{#each MENU_ACCENTS as accent (accent.value)}\n\t\t\t\t\t\t<Picker.RadioItem value={accent.value} closeOnSelect={false}>\n\t\t\t\t\t\t\t{accent.label}\n\t\t\t\t\t\t</Picker.RadioItem>\n\t\t\t\t\t{/each}\n\t\t\t\t</Picker.Group>\n\t\t\t</Picker.RadioGroup>\n\t\t</Picker.Content>\n\t</Picker.Root>\n\t<LockButton prop=\"menuAccent\" class=\"absolute top-1/2 right-10 -translate-y-1/2\" />\n</div>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/(create)/components/menu-color-picker.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Picker from \"./picker/index.js\";\n\timport { useDesignSystem } from \"$lib/features/design-system/index.js\";\n\timport { IsMobile } from \"$lib/registry/hooks/is-mobile.svelte.js\";\n\timport LockButton from \"./lock-button.svelte\";\n\timport type { MenuColorValue } from \"$lib/registry/config.js\";\n\timport { mode } from \"mode-watcher\";\n\timport { browser } from \"$app/environment\";\n\timport MenuIcon from \"@lucide/svelte/icons/menu\";\n\n\ttype ColorChoice = \"default\" | \"inverted\";\n\ttype SurfaceChoice = \"solid\" | \"translucent\";\n\n\ttype Props = {\n\t\tsubmenu?: boolean;\n\t};\n\n\tlet { submenu = false }: Props = $props();\n\n\tconst designSystem = useDesignSystem();\n\tconst isMobile = new IsMobile();\n\n\tconst MENU_OPTIONS: { value: MenuColorValue; label: string }[] = [\n\t\t{ value: \"default\", label: \"Default / Solid\" },\n\t\t{ value: \"default-translucent\", label: \"Default / Translucent\" },\n\t\t{ value: \"inverted\", label: \"Inverted / Solid\" },\n\t\t{ value: \"inverted-translucent\", label: \"Inverted / Translucent\" },\n\t];\n\n\tfunction getMenuColorValue(color: ColorChoice, translucent: boolean): MenuColorValue {\n\t\tif (color === \"default\") {\n\t\t\treturn translucent ? \"default-translucent\" : \"default\";\n\t\t}\n\t\treturn translucent ? \"inverted-translucent\" : \"inverted\";\n\t}\n\n\tfunction isTranslucentMenuColor(value: MenuColorValue): boolean {\n\t\treturn value === \"default-translucent\" || value === \"inverted-translucent\";\n\t}\n\n\tconst currentMenu = $derived(\n\t\tMENU_OPTIONS.find((menu) => menu.value === designSystem.menuColor) ?? MENU_OPTIONS[0]\n\t);\n\n\tconst colorChoice = $derived<ColorChoice>(\n\t\tdesignSystem.menuColor === \"inverted\" || designSystem.menuColor === \"inverted-translucent\"\n\t\t\t? \"inverted\"\n\t\t\t: \"default\"\n\t);\n\n\tconst surfaceChoice = $derived<SurfaceChoice>(\n\t\tdesignSystem.menuColor === \"default-translucent\" ||\n\t\t\tdesignSystem.menuColor === \"inverted-translucent\"\n\t\t\t? \"translucent\"\n\t\t\t: \"solid\"\n\t);\n\n\tconst mounted = $derived(browser);\n\tconst isDark = $derived(mounted && mode.current === \"dark\");\n\n\tlet lastSolidMenuAccent = $state(designSystem.menuAccent);\n\n\t$effect(() => {\n\t\tif (surfaceChoice === \"solid\") {\n\t\t\tlastSolidMenuAccent = designSystem.menuAccent;\n\t\t}\n\t});\n\n\tfunction setColor(color: ColorChoice) {\n\t\tconst nextMenuColor = getMenuColorValue(color, surfaceChoice === \"translucent\");\n\t\tdesignSystem.menuColor = nextMenuColor;\n\t\tif (isTranslucentMenuColor(nextMenuColor)) {\n\t\t\tdesignSystem.menuAccent = \"subtle\";\n\t\t}\n\t}\n\n\tfunction setSurface(choice: SurfaceChoice) {\n\t\tconst isTranslucent = choice === \"translucent\";\n\t\tconst nextMenuColor = getMenuColorValue(colorChoice, isTranslucent);\n\t\tdesignSystem.menuColor = nextMenuColor;\n\t\tdesignSystem.menuAccent = isTranslucent ? \"subtle\" : lastSolidMenuAccent;\n\t}\n</script>\n\n<div class=\"group/picker relative\">\n\t<Picker.Root {submenu}>\n\t\t<Picker.Trigger {submenu}>\n\t\t\t<div\n\t\t\t\tclass=\"flex min-w-0 flex-1 flex-col justify-start overflow-hidden pr-8 text-left md:pr-7\"\n\t\t\t>\n\t\t\t\t<div class=\"text-muted-foreground text-xs\">Menu</div>\n\t\t\t\t<div\n\t\t\t\t\tclass=\"text-foreground overflow-hidden text-sm font-medium text-ellipsis whitespace-nowrap\"\n\t\t\t\t>\n\t\t\t\t\t{currentMenu.label}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div\n\t\t\t\tclass=\"text-foreground pointer-events-none absolute top-1/2 right-4 flex size-4 -translate-y-1/2 items-center justify-center text-base select-none md:right-2.5\"\n\t\t\t>\n\t\t\t\t<MenuIcon class=\"size-4\" strokeWidth={2} />\n\t\t\t</div>\n\t\t</Picker.Trigger>\n\t\t<Picker.Content\n\t\t\tside={isMobile.current ? \"top\" : submenu ? \"left\" : \"right\"}\n\t\t\talign={isMobile.current ? \"center\" : \"start\"}\n\t\t\tsideOffset={submenu ? 5 : 20}\n\t\t\t{submenu}\n\t\t>\n\t\t\t<Picker.Group>\n\t\t\t\t<Picker.Label>Color</Picker.Label>\n\t\t\t\t<Picker.RadioGroup\n\t\t\t\t\tvalue={colorChoice}\n\t\t\t\t\tonValueChange={(value) => setColor(value as ColorChoice)}\n\t\t\t\t>\n\t\t\t\t\t<Picker.RadioItem value=\"default\" closeOnSelect={isMobile.current}>\n\t\t\t\t\t\tDefault\n\t\t\t\t\t</Picker.RadioItem>\n\t\t\t\t\t<Picker.RadioItem\n\t\t\t\t\t\tvalue=\"inverted\"\n\t\t\t\t\t\tcloseOnSelect={isMobile.current}\n\t\t\t\t\t\tdisabled={isDark}\n\t\t\t\t\t>\n\t\t\t\t\t\tInverted\n\t\t\t\t\t</Picker.RadioItem>\n\t\t\t\t</Picker.RadioGroup>\n\t\t\t</Picker.Group>\n\t\t\t<Picker.Separator />\n\t\t\t<Picker.Group>\n\t\t\t\t<Picker.Label>Appearance</Picker.Label>\n\t\t\t\t<Picker.RadioGroup\n\t\t\t\t\tvalue={surfaceChoice}\n\t\t\t\t\tonValueChange={(value) => setSurface(value as SurfaceChoice)}\n\t\t\t\t>\n\t\t\t\t\t<Picker.RadioItem value=\"solid\" closeOnSelect={isMobile.current}>\n\t\t\t\t\t\tSolid\n\t\t\t\t\t</Picker.RadioItem>\n\t\t\t\t\t<Picker.RadioItem value=\"translucent\" closeOnSelect={isMobile.current}>\n\t\t\t\t\t\tTranslucent\n\t\t\t\t\t</Picker.RadioItem>\n\t\t\t\t</Picker.RadioGroup>\n\t\t\t</Picker.Group>\n\t\t</Picker.Content>\n\t</Picker.Root>\n\t<LockButton prop=\"menuColor\" class=\"absolute top-1/2 right-8 -translate-y-1/2\" />\n</div>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/(create)/components/menu-icon-default.svelte",
    "content": "<script lang=\"ts\">\n\timport type { SVGAttributes } from \"svelte/elements\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet { class: className, ...restProps }: SVGAttributes<SVGSVGElement> = $props();\n</script>\n\n<svg\n\txmlns=\"http://www.w3.org/2000/svg\"\n\twidth=\"128\"\n\theight=\"128\"\n\tviewBox=\"0 0 24 24\"\n\tfill=\"none\"\n\trole=\"img\"\n\tstroke=\"currentColor\"\n\tclass={cn(\"text-foreground size-4\", className)}\n\t{...restProps}\n>\n\t<path\n\t\td=\"M2 11.5C2 7.02166 2 4.78249 3.39124 3.39124C4.78249 2 7.02166 2 11.5 2C15.9783 2 18.2175 2 19.6088 3.39124C21 4.78249 21 7.02166 21 11.5C21 15.9783 21 18.2175 19.6088 19.6088C18.2175 21 15.9783 21 11.5 21C7.02166 21 4.78249 21 3.39124 19.6088C2 18.2175 2 15.9783 2 11.5Z\"\n\t\tstroke=\"currentColor\"\n\t\tstroke-width=\"2\"\n\t/>\n\t<path\n\t\td=\"M8.5 11.5L14.5001 11.5\"\n\t\tstroke=\"currentColor\"\n\t\tstroke-width=\"2\"\n\t\tstroke-linecap=\"round\"\n\t\tstroke-linejoin=\"round\"\n\t/>\n\t<path\n\t\td=\"M9.5 15H13.5\"\n\t\tstroke=\"currentColor\"\n\t\tstroke-width=\"2\"\n\t\tstroke-linecap=\"round\"\n\t\tstroke-linejoin=\"round\"\n\t/>\n\t<path\n\t\td=\"M7.5 8H15.5\"\n\t\tstroke=\"currentColor\"\n\t\tstroke-width=\"2\"\n\t\tstroke-linecap=\"round\"\n\t\tstroke-linejoin=\"round\"\n\t/>\n</svg>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/(create)/components/menu-icon-inverted.svelte",
    "content": "<script lang=\"ts\">\n\timport type { SVGAttributes } from \"svelte/elements\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet { class: className, ...restProps }: SVGAttributes<SVGSVGElement> = $props();\n</script>\n\n<svg\n\txmlns=\"http://www.w3.org/2000/svg\"\n\twidth=\"128\"\n\theight=\"128\"\n\tviewBox=\"0 0 24 24\"\n\tfill=\"none\"\n\trole=\"img\"\n\tclass={cn(\"fill-foreground text-foreground size-4\", className)}\n\t{...restProps}\n>\n\t<path\n\t\td=\"M2 11.5C2 7.02166 2 4.78249 3.39124 3.39124C4.78249 2 7.02166 2 11.5 2C15.9783 2 18.2175 2 19.6088 3.39124C21 4.78249 21 7.02166 21 11.5C21 15.9783 21 18.2175 19.6088 19.6088C18.2175 21 15.9783 21 11.5 21C7.02166 21 4.78249 21 3.39124 19.6088C2 18.2175 2 15.9783 2 11.5Z\"\n\t\tstroke=\"currentColor\"\n\t\tstroke-width=\"2\"\n\t/>\n\t<path\n\t\td=\"M8.5 11.5L14.5001 11.5\"\n\t\tstroke=\"var(--background)\"\n\t\tstroke-width=\"2\"\n\t\tstroke-linecap=\"round\"\n\t\tstroke-linejoin=\"round\"\n\t/>\n\t<path\n\t\td=\"M9.5 15H13.5\"\n\t\tstroke=\"var(--background)\"\n\t\tstroke-width=\"2\"\n\t\tstroke-linecap=\"round\"\n\t\tstroke-linejoin=\"round\"\n\t/>\n\t<path\n\t\td=\"M7.5 8H15.5\"\n\t\tstroke=\"var(--background)\"\n\t\tstroke-width=\"2\"\n\t\tstroke-linecap=\"round\"\n\t\tstroke-linejoin=\"round\"\n\t/>\n</svg>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/(create)/components/picker/index.ts",
    "content": "import Root from \"./picker.svelte\";\nimport Content from \"./picker-content.svelte\";\nimport Trigger from \"./picker-trigger.svelte\";\nimport Item from \"./picker-item.svelte\";\nimport Label from \"./picker-label.svelte\";\nimport Separator from \"./picker-separator.svelte\";\nimport Shortcut from \"./picker-shortcut.svelte\";\nimport Group from \"./picker-group.svelte\";\nimport RadioGroup from \"./picker-radio-group.svelte\";\nimport RadioItem from \"./picker-radio-item.svelte\";\nimport CheckboxItem from \"./picker-checkbox-item.svelte\";\n\nexport {\n\tRoot,\n\tContent,\n\tTrigger,\n\tItem,\n\tLabel,\n\tSeparator,\n\tShortcut,\n\tGroup,\n\tRadioGroup,\n\tRadioItem,\n\tCheckboxItem,\n};\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/(create)/components/picker/picker-checkbox-item.svelte",
    "content": "<script lang=\"ts\">\n\timport { DropdownMenu as DropdownMenuPrimitive } from \"bits-ui\";\n\timport CheckIcon from \"@lucide/svelte/icons/check\";\n\timport MinusIcon from \"@lucide/svelte/icons/minus\";\n\timport { cn, type WithoutChildrenOrChild } from \"$lib/utils.js\";\n\timport type { Snippet } from \"svelte\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tchecked = $bindable(false),\n\t\tindeterminate = $bindable(false),\n\t\tclass: className,\n\t\tchildren: childrenProp,\n\t\t...restProps\n\t}: WithoutChildrenOrChild<DropdownMenuPrimitive.CheckboxItemProps> & {\n\t\tchildren?: Snippet;\n\t} = $props();\n</script>\n\n<DropdownMenuPrimitive.CheckboxItem\n\tbind:ref\n\tbind:checked\n\tbind:indeterminate\n\tdata-slot=\"dropdown-menu-checkbox-item\"\n\tclass={cn(\n\t\t\"focus:bg-accent/95 focus:text-accent-foreground focus:ring-foreground/20 focus:**:text-accent-foreground relative flex cursor-default items-center gap-2 rounded-sm py-1.5 pr-8 pl-2 text-sm outline-hidden select-none focus:ring-1 data-disabled:pointer-events-none data-disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n\t\tclassName\n\t)}\n\t{...restProps}\n>\n\t{#snippet children({ checked, indeterminate })}\n\t\t<span\n\t\t\tclass=\"pointer-events-none absolute start-2 flex size-3.5 items-center justify-center\"\n\t\t>\n\t\t\t{#if indeterminate}\n\t\t\t\t<MinusIcon class=\"size-4\" />\n\t\t\t{:else}\n\t\t\t\t<CheckIcon class={cn(\"size-4\", !checked && \"text-transparent\")} />\n\t\t\t{/if}\n\t\t</span>\n\t\t{@render childrenProp?.()}\n\t{/snippet}\n</DropdownMenuPrimitive.CheckboxItem>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/(create)/components/picker/picker-content.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn, type WithoutChildrenOrChild } from \"$lib/utils.js\";\n\timport { DropdownMenu as DropdownMenuPrimitive } from \"bits-ui\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tsideOffset = 20,\n\t\tportalProps,\n\t\tclass: className,\n\t\tsubmenu = false,\n\t\t...restProps\n\t}: DropdownMenuPrimitive.ContentProps & {\n\t\tportalProps?: WithoutChildrenOrChild<DropdownMenuPrimitive.PortalProps>;\n\t\tsubmenu?: boolean;\n\t} = $props();\n</script>\n\n{#if submenu}\n\t<DropdownMenuPrimitive.SubContent\n\t\tbind:ref\n\t\tdata-slot=\"dropdown-menu-sub-content\"\n\t\t{sideOffset}\n\t\tclass={cn(\n\t\t\t\"bg-popover/90 text-popover-foreground ring-foreground/10 z-50 w-auto min-w-[96px] rounded-md p-1 shadow-lg ring-1 backdrop-blur-xs\",\n\t\t\tclassName\n\t\t)}\n\t\t{...restProps}\n\t/>\n{:else}\n\t<DropdownMenuPrimitive.Portal {...portalProps}>\n\t\t<DropdownMenuPrimitive.Content\n\t\t\tbind:ref\n\t\t\tdata-slot=\"dropdown-menu-content\"\n\t\t\t{sideOffset}\n\t\t\tclass={cn(\n\t\t\t\t\"cn-menu-target no-scrollbar z-50 max-h-(--available-height) w-[calc(var(--available-width)-(--spacing(6)))] min-w-32 origin-(--transform-origin) translate-y-2 overflow-x-hidden overflow-y-auto rounded-xl border-0 bg-neutral-950/80 p-1.5 text-neutral-100 ring-1 ring-neutral-950/80 backdrop-blur-xl outline-none data-[state=closed]:overflow-hidden md:w-52 dark:bg-neutral-800/90 dark:ring-neutral-700/50\",\n\t\t\t\tclassName\n\t\t\t)}\n\t\t\t{...restProps}\n\t\t/>\n\t</DropdownMenuPrimitive.Portal>\n{/if}\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/(create)/components/picker/picker-group.svelte",
    "content": "<script lang=\"ts\">\n\timport { DropdownMenu as DropdownMenuPrimitive } from \"bits-ui\";\n\n\tlet { ...restProps }: DropdownMenuPrimitive.GroupProps = $props();\n</script>\n\n<DropdownMenuPrimitive.Group data-slot=\"dropdown-menu-group\" {...restProps} />\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/(create)/components/picker/picker-item.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn } from \"$lib/utils.js\";\n\timport { DropdownMenu as DropdownMenuPrimitive } from \"bits-ui\";\n\n\tlet {\n\t\tinset,\n\t\tvariant = \"default\",\n\t\tclass: className,\n\t\t...restProps\n\t}: DropdownMenuPrimitive.ItemProps & {\n\t\tinset?: boolean;\n\t\tvariant?: \"default\" | \"destructive\";\n\t} = $props();\n</script>\n\n<DropdownMenuPrimitive.Item\n\tdata-slot=\"dropdown-menu-item\"\n\tdata-inset={inset}\n\tdata-variant={variant}\n\tclass={cn(\n\t\t\"group/dropdown-menu-item relative flex cursor-default items-center gap-2 rounded-lg px-2 py-1.5 text-sm font-medium outline-hidden select-none **:text-neutral-100 focus:bg-neutral-600 focus:text-neutral-100 focus:**:text-neutral-100 data-disabled:pointer-events-none data-disabled:opacity-50 data-inset:pl-8 dark:focus:bg-neutral-700/80 pointer-coarse:gap-3 pointer-coarse:py-2.5 pointer-coarse:pl-3 pointer-coarse:text-base [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n\t\tclassName\n\t)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/(create)/components/picker/picker-label.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn } from \"$lib/utils.js\";\n\timport { DropdownMenu as DropdownMenuPrimitive } from \"bits-ui\";\n\n\tlet {\n\t\tinset,\n\t\tclass: className,\n\t\t...restProps\n\t}: DropdownMenuPrimitive.GroupHeadingProps & { inset?: boolean } = $props();\n</script>\n\n<DropdownMenuPrimitive.GroupHeading\n\tdata-slot=\"dropdown-menu-label\"\n\tdata-inset={inset}\n\tclass={cn(\"px-2 py-1.5 text-xs font-medium text-neutral-400 data-inset:pl-8\", className)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/(create)/components/picker/picker-radio-group.svelte",
    "content": "<script lang=\"ts\">\n\timport { DropdownMenu as DropdownMenuPrimitive } from \"bits-ui\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tvalue = $bindable(\"\"),\n\t\t...restProps\n\t}: DropdownMenuPrimitive.RadioGroupProps = $props();\n</script>\n\n<DropdownMenuPrimitive.RadioGroup\n\tbind:ref\n\tbind:value\n\tdata-slot=\"dropdown-menu-radio-group\"\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/(create)/components/picker/picker-radio-item.svelte",
    "content": "<script lang=\"ts\">\n\timport { DropdownMenu as DropdownMenuPrimitive } from \"bits-ui\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\timport { cn, type WithoutChild } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren: childrenProp,\n\t\t...restProps\n\t}: WithoutChild<DropdownMenuPrimitive.RadioItemProps> = $props();\n</script>\n\n<DropdownMenuPrimitive.RadioItem\n\tbind:ref\n\tdata-slot=\"dropdown-menu-radio-item\"\n\tclass={cn(\n\t\t\"relative flex cursor-default items-center gap-2 rounded-lg py-1.5 pr-8 pl-2 text-sm font-medium outline-hidden select-none **:text-neutral-100 focus:bg-neutral-600 focus:text-neutral-100 focus:**:text-neutral-100 data-disabled:pointer-events-none data-disabled:opacity-50 data-inset:pl-8 dark:focus:bg-neutral-700/80 pointer-coarse:gap-3 pointer-coarse:py-2.5 pointer-coarse:pl-3 pointer-coarse:text-base [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n\t\tclassName\n\t)}\n\t{...restProps}\n>\n\t{#snippet children({ checked })}\n\t\t<span\n\t\t\tclass=\"pointer-events-none absolute right-2 flex items-center justify-center\"\n\t\t\tdata-slot=\"dropdown-menu-radio-item-indicator\"\n\t\t>\n\t\t\t{#if checked}\n\t\t\t\t<IconPlaceholder\n\t\t\t\t\tlucide=\"CheckIcon\"\n\t\t\t\t\ttabler=\"IconCheck\"\n\t\t\t\t\thugeicons=\"Tick02Icon\"\n\t\t\t\t\tphosphor=\"CheckIcon\"\n\t\t\t\t\tremixicon=\"RiCheckLine\"\n\t\t\t\t\tclass=\"size-4 pointer-coarse:size-5\"\n\t\t\t\t/>\n\t\t\t{/if}\n\t\t</span>\n\t\t{@render childrenProp?.({ checked })}\n\t{/snippet}\n</DropdownMenuPrimitive.RadioItem>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/(create)/components/picker/picker-separator.svelte",
    "content": "<script lang=\"ts\">\n\timport { DropdownMenu as DropdownMenuPrimitive } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\t...restProps\n\t}: DropdownMenuPrimitive.SeparatorProps = $props();\n</script>\n\n<DropdownMenuPrimitive.Separator\n\tbind:ref\n\tdata-slot=\"dropdown-menu-separator\"\n\tclass={cn(\"-mx-1.5 my-1.5 h-px bg-neutral-600 dark:bg-neutral-700\", className)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/(create)/components/picker/picker-shortcut.svelte",
    "content": "<script lang=\"ts\">\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\timport { cn, type WithElementRef } from \"$lib/utils.js\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tchildren,\n\t\t...restProps\n\t}: WithElementRef<HTMLAttributes<HTMLSpanElement>> = $props();\n</script>\n\n<span\n\tbind:this={ref}\n\tdata-slot=\"dropdown-menu-shortcut\"\n\tclass={cn(\n\t\t\"ml-auto text-xs tracking-widest text-neutral-400 group-focus/dropdown-menu-item:text-neutral-100\",\n\t\tclassName\n\t)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</span>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/(create)/components/picker/picker-trigger.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn } from \"$lib/utils.js\";\n\timport { DropdownMenu as DropdownMenuPrimitive } from \"bits-ui\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\tsubmenu = false,\n\t\tchildren,\n\t\t...restProps\n\t}: DropdownMenuPrimitive.TriggerProps & {\n\t\tsubmenu?: boolean;\n\t} = $props();\n</script>\n\n{#if submenu}\n\t<DropdownMenuPrimitive.SubTrigger\n\t\tbind:ref\n\t\tdata-slot=\"dropdown-menu-sub-trigger\"\n\t\tclass={cn(\n\t\t\t\"focus:bg-accent/95 focus:text-accent-foreground focus:ring-foreground/20 not-data-[variant=destructive]:focus:**:text-accent-foreground data-[state=open]:bg-accent/95 data-[state=open]:text-accent-foreground flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus:ring-1 data-inset:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n\t\t\tclassName\n\t\t)}\n\t\tdisabled={restProps.disabled ?? false}\n\t>\n\t\t{@render children?.()}\n\t</DropdownMenuPrimitive.SubTrigger>\n{:else}\n\t<DropdownMenuPrimitive.Trigger\n\t\tbind:ref\n\t\tdata-slot=\"dropdown-menu-trigger\"\n\t\tclass={cn(\n\t\t\t\"ring-foreground/10 hover:bg-muted focus-visible:ring-foreground/50 data-[state=open]:bg-muted relative w-40 shrink-0 touch-manipulation rounded-xl p-3 ring-1 select-none focus-visible:outline-none disabled:opacity-50 md:w-full md:rounded-lg md:px-2.5 md:py-2\",\n\t\t\tclassName\n\t\t)}\n\t\tdisabled={restProps.disabled}\n\t>\n\t\t{@render children?.()}\n\t</DropdownMenuPrimitive.Trigger>\n{/if}\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/(create)/components/picker/picker.svelte",
    "content": "<script lang=\"ts\">\n\timport { DropdownMenu as DropdownMenuPrimitive } from \"bits-ui\";\n\n\ttype Props =\n\t\t| ({\n\t\t\t\tsubmenu: true;\n\t\t  } & DropdownMenuPrimitive.RootProps)\n\t\t| ({\n\t\t\t\tsubmenu: false;\n\t\t  } & DropdownMenuPrimitive.SubProps);\n\n\tlet { open = $bindable(false), submenu, ...restProps }: Props = $props();\n</script>\n\n{#if submenu}\n\t<DropdownMenuPrimitive.Sub bind:open {...restProps} />\n{:else}\n\t<DropdownMenuPrimitive.Root bind:open {...restProps} />\n{/if}\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/(create)/components/preset-picker.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Picker from \"./picker/index.js\";\n\timport { useDesignSystem } from \"$lib/features/design-system/index.js\";\n\timport { IsMobile } from \"$lib/registry/hooks/is-mobile.svelte.js\";\n\timport { PRESETS, STYLES } from \"$lib/registry/config.js\";\n\n\ttype Props = {\n\t\tsubmenu?: boolean;\n\t};\n\n\tlet { submenu = false }: Props = $props();\n\n\tconst designSystem = useDesignSystem();\n\n\tconst currentPreset = $derived(\n\t\tPRESETS.find(\n\t\t\t(preset) =>\n\t\t\t\tpreset.baseColor === designSystem.baseColor &&\n\t\t\t\tpreset.style === designSystem.style &&\n\t\t\t\tpreset.theme === designSystem.theme &&\n\t\t\t\tpreset.iconLibrary === designSystem.iconLibrary &&\n\t\t\t\tpreset.font === designSystem.font &&\n\t\t\t\tpreset.menuAccent === designSystem.menuAccent &&\n\t\t\t\tpreset.menuColor === designSystem.menuColor &&\n\t\t\t\tpreset.radius === designSystem.radius\n\t\t)\n\t);\n\n\tconst selectedPresetTitle = $derived(currentPreset?.title ?? \"\");\n\n\tfunction handlePresetChange(value: string) {\n\t\tconst preset = PRESETS.find((p) => p.title === value);\n\t\tif (!preset) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Update all params including baseColor.\n\t\tdesignSystem.baseColor = preset.baseColor;\n\t\tdesignSystem.style = preset.style;\n\t\tdesignSystem.theme = preset.theme;\n\t\tdesignSystem.iconLibrary = preset.iconLibrary;\n\t\tdesignSystem.font = preset.font;\n\t\tdesignSystem.menuAccent = preset.menuAccent;\n\t\tdesignSystem.menuColor = preset.menuColor;\n\t\tdesignSystem.radius = preset.radius;\n\t}\n\n\tconst isMobile = new IsMobile();\n</script>\n\n<Picker.Root {submenu}>\n\t<Picker.Trigger {submenu}>\n\t\t<div class=\"flex flex-col justify-start text-left\">\n\t\t\t<div class=\"text-muted-foreground text-xs\">Preset</div>\n\t\t\t<div class=\"text-foreground line-clamp-1 text-sm font-medium\">\n\t\t\t\t{currentPreset?.description ?? \"Custom\"}\n\t\t\t</div>\n\t\t</div>\n\t</Picker.Trigger>\n\t<Picker.Content\n\t\tside={isMobile.current ? \"top\" : submenu ? \"left\" : \"right\"}\n\t\talign={isMobile.current ? \"center\" : \"start\"}\n\t\tclass=\"md:w-72\"\n\t\tsideOffset={submenu ? 5 : 20}\n\t\t{submenu}\n\t>\n\t\t<Picker.RadioGroup value={selectedPresetTitle} onValueChange={handlePresetChange}>\n\t\t\t<Picker.Group>\n\t\t\t\t{#each PRESETS as preset (preset.title)}\n\t\t\t\t\t{@const style = STYLES.find((s) => s.name === preset.style)}\n\t\t\t\t\t<Picker.RadioItem value={preset.title} closeOnSelect={false}>\n\t\t\t\t\t\t<div class=\"flex items-center gap-2\">\n\t\t\t\t\t\t\t{#if style?.icon}\n\t\t\t\t\t\t\t\t<div class=\"flex size-4 shrink-0 items-center justify-center\">\n\t\t\t\t\t\t\t\t\t<style.icon class=\"size-4\" />\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\t{preset.description}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</Picker.RadioItem>\n\t\t\t\t{/each}\n\t\t\t</Picker.Group>\n\t\t</Picker.RadioGroup>\n\t</Picker.Content>\n</Picker.Root>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/(create)/components/preview.svelte",
    "content": "<script lang=\"ts\">\n\timport { Badge } from \"$lib/registry/ui/badge/index.js\";\n\timport { cn } from \"$lib/utils.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\timport { useDesignSystem } from \"$lib/features/design-system/index.js\";\n\n\ttype Props = {\n\t\titem: string;\n\t};\n\n\tlet { item }: Props = $props();\n\n\tconst designSystem = useDesignSystem();\n</script>\n\n<div\n\tdata-slot=\"preview\"\n\tclass=\"border-border relative -mx-1 flex flex-1 flex-col justify-center overflow-hidden rounded-2xl border sm:mx-0\"\n>\n\t<div\n\t\tclass={cn(\n\t\t\t\"[--preview-height:calc(100svh-var(--header-height)-2rem-150px)] md:[--preview-height:calc(100svh-var(--header-height)-2rem)]\",\n\t\t\t\"z-0 mx-auto flex max-h-(--preview-height) w-full flex-1 flex-col overflow-y-auto\"\n\t\t)}\n\t>\n\t\t<Button\n\t\t\thref=\"/preview/{item}{new URL(designSystem.shareUrl).search}&fromPreview=true\"\n\t\t\tclass=\"absolute top-2 right-2 isolate z-10\"\n\t\t\tvariant=\"ghost\"\n\t\t\tsize=\"icon-sm\"\n\t\t>\n\t\t\t<IconPlaceholder\n\t\t\t\tlucide=\"MaximizeIcon\"\n\t\t\t\ttabler=\"IconBorderCorners\"\n\t\t\t\thugeicons=\"ArrowExpandIcon\"\n\t\t\t\tphosphor=\"CornersOutIcon\"\n\t\t\t\tremixicon=\"RiExpandDiagonalLine\"\n\t\t\t/>\n\t\t</Button>\n\t\t<iframe src=\"/preview/{item}\" class=\"h-(--preview-height)\" title={item}></iframe>\n\t\t<Badge class=\"absolute right-2 bottom-2 isolate z-10\" variant=\"secondary\">Preview</Badge>\n\t</div>\n</div>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/(create)/components/radius-picker.svelte",
    "content": "<script lang=\"ts\">\n\timport { RADII } from \"$lib/registry/config.js\";\n\timport * as Picker from \"./picker/index.js\";\n\timport { useDesignSystem } from \"$lib/features/design-system/index.js\";\n\timport { IsMobile } from \"$lib/registry/hooks/is-mobile.svelte.js\";\n\timport LockButton from \"./lock-button.svelte\";\n\n\ttype Props = {\n\t\tsubmenu?: boolean;\n\t};\n\n\tlet { submenu = false }: Props = $props();\n\n\tconst designSystem = useDesignSystem();\n\n\tconst currentRadius = $derived(\n\t\tRADII.find((radius) => radius.name === designSystem.radius) ?? RADII[0]\n\t);\n\n\tconst isMobile = new IsMobile();\n</script>\n\n<div class=\"group/picker relative\">\n\t<Picker.Root {submenu}>\n\t\t<Picker.Trigger {submenu}>\n\t\t\t<div class=\"flex flex-col justify-start text-left\">\n\t\t\t\t<div class=\"text-muted-foreground text-xs\">Radius</div>\n\t\t\t\t<div class=\"text-foreground text-sm font-medium\">\n\t\t\t\t\t{currentRadius?.label}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div\n\t\t\t\tclass=\"text-foreground pointer-events-none absolute top-1/2 right-4 flex size-4 -translate-y-1/2 items-center justify-center text-base select-none\"\n\t\t\t>\n\t\t\t\t<div\n\t\t\t\t\tclass=\"size-4 border-t-2 border-r-2 border-current transition-all\"\n\t\t\t\t\tstyle=\"border-top-right-radius: {currentRadius?.value};\"\n\t\t\t\t></div>\n\t\t\t</div>\n\t\t</Picker.Trigger>\n\t\t<Picker.Content\n\t\t\tside={isMobile.current ? \"top\" : submenu ? \"left\" : \"right\"}\n\t\t\talign={isMobile.current ? \"center\" : \"start\"}\n\t\t\tsideOffset={submenu ? 5 : 20}\n\t\t\t{submenu}\n\t\t>\n\t\t\t<Picker.RadioGroup bind:value={designSystem.radius}>\n\t\t\t\t<Picker.Group>\n\t\t\t\t\t{#each RADII as radius (radius.name)}\n\t\t\t\t\t\t{#if radius.name === \"default\"}\n\t\t\t\t\t\t\t<Picker.RadioItem value={radius.name} closeOnSelect={false}>\n\t\t\t\t\t\t\t\t<div class=\"flex flex-col justify-start pointer-coarse:gap-1\">\n\t\t\t\t\t\t\t\t\t<div>{radius.label}</div>\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tclass=\"text-muted-foreground text-xs pointer-coarse:text-sm\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\tUse radius from style\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</Picker.RadioItem>\n\t\t\t\t\t\t\t<Picker.Separator />\n\t\t\t\t\t\t{:else}\n\t\t\t\t\t\t\t<Picker.RadioItem value={radius.name} closeOnSelect={false}>\n\t\t\t\t\t\t\t\t{radius.label}\n\t\t\t\t\t\t\t</Picker.RadioItem>\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t{/each}\n\t\t\t\t</Picker.Group>\n\t\t\t</Picker.RadioGroup>\n\t\t</Picker.Content>\n\t</Picker.Root>\n\t<LockButton prop=\"radius\" class=\"absolute top-1/2 right-10 -translate-y-1/2\" />\n</div>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/(create)/components/random-button.svelte",
    "content": "<script lang=\"ts\">\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Kbd from \"$lib/registry/ui/kbd/index.js\";\n\timport { DiceFaces05Icon } from \"@hugeicons/core-free-icons\";\n\timport { HugeiconsIcon } from \"@hugeicons/svelte\";\n\timport { useDesignSystem } from \"$lib/features/design-system/index.js\";\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\n\ttype Props = {\n\t\tsubmenu?: boolean;\n\t};\n\n\tlet { submenu = false }: Props = $props();\n\n\tconst designSystem = useDesignSystem();\n</script>\n\n{#if submenu}\n\t<DropdownMenu.Item\n\t\tonSelect={designSystem.randomize}\n\t\tcloseOnSelect={false}\n\t\tclass=\"border-foreground/10 bg-muted/50 h-[calc(--spacing(13.5))] w-[140px] touch-manipulation justify-between rounded-xl border select-none focus-visible:border-transparent focus-visible:ring-1 sm:rounded-lg md:w-full md:rounded-lg md:border-transparent md:bg-transparent md:pr-3.5! md:pl-2!\"\n\t>\n\t\t<div class=\"flex flex-col justify-start text-left\">\n\t\t\t<div class=\"text-muted-foreground text-xs\">Shuffle</div>\n\t\t\t<div class=\"text-foreground text-sm font-medium\">Try Random</div>\n\t\t</div>\n\t\t<HugeiconsIcon icon={DiceFaces05Icon} className=\"size-5 md:hidden\" />\n\t\t<Kbd.Root class=\"bg-foreground/10 text-foreground hidden md:flex\">R</Kbd.Root>\n\t</DropdownMenu.Item>\n{:else}\n\t<Button\n\t\tvariant=\"outline\"\n\t\tonclick={designSystem.randomize}\n\t\tclass=\"hover:bg-muted! flex-1 touch-manipulation bg-transparent! px-2! py-0! text-sm! transition-none select-none md:flex-none pointer-coarse:h-10!\"\n\t>\n\t\t<span class=\"w-full text-center font-medium\">Shuffle</span>\n\t</Button>\n{/if}\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/(create)/components/reset-button.svelte",
    "content": "<script lang=\"ts\">\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport { Undo02Icon } from \"@hugeicons/core-free-icons\";\n\timport { HugeiconsIcon } from \"@hugeicons/svelte\";\n\timport { useDesignSystem } from \"$lib/features/design-system/index.js\";\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\n\ttype Props = {\n\t\tsubmenu?: boolean;\n\t};\n\n\tlet { submenu = false }: Props = $props();\n\n\tconst designSystem = useDesignSystem();\n</script>\n\n{#if submenu}\n\t<DropdownMenu.Item\n\t\tonSelect={designSystem.reset}\n\t\tcloseOnSelect={false}\n\t\tclass=\"border-foreground/10 bg-muted/50 h-[calc(--spacing(13.5))] w-[140px] touch-manipulation justify-between rounded-xl border select-none focus-visible:border-transparent focus-visible:ring-1 sm:rounded-lg md:w-full md:rounded-lg md:border-transparent md:bg-transparent md:pr-3.5! md:pl-2!\"\n\t>\n\t\t<div class=\"flex flex-col justify-start text-left\">\n\t\t\t<div class=\"text-muted-foreground text-xs\">Reset</div>\n\t\t\t<div class=\"text-foreground text-sm font-medium\">Start Over</div>\n\t\t</div>\n\t\t<HugeiconsIcon icon={Undo02Icon} className=\"-translate-x-0.5\" />\n\t</DropdownMenu.Item>\n{:else}\n\t<Button\n\t\tvariant=\"ghost\"\n\t\tsize=\"sm\"\n\t\tonclick={designSystem.reset}\n\t\tclass=\"border-foreground/10 bg-muted/50 h-[calc(--spacing(13.5))] w-[140px] touch-manipulation justify-between rounded-xl border select-none focus-visible:border-transparent focus-visible:ring-1 sm:rounded-lg md:w-full md:rounded-lg md:border-transparent md:bg-transparent md:pr-3.5! md:pl-2!\"\n\t>\n\t\t<div class=\"flex flex-col justify-start text-left\">\n\t\t\t<div class=\"text-muted-foreground text-xs\">Reset</div>\n\t\t\t<div class=\"text-foreground text-sm font-medium\">Start Over</div>\n\t\t</div>\n\t\t<HugeiconsIcon icon={Undo02Icon} className=\"-translate-x-0.5\" />\n\t</Button>\n{/if}\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/(create)/components/share.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Popover from \"$lib/registry/ui/popover/index.js\";\n\timport { UseClipboard } from \"$lib/hooks/use-clipboard.svelte.js\";\n\timport ShareIcon from \"@lucide/svelte/icons/share\";\n\timport CopyIcon from \"@lucide/svelte/icons/copy\";\n\timport CheckIcon from \"@lucide/svelte/icons/check\";\n\timport { buttonVariants, Button } from \"$lib/registry/ui/button/index.js\";\n\timport { useDesignSystem } from \"$lib/features/design-system/index.js\";\n\timport { Input } from \"$lib/registry/ui/input/index.js\";\n\timport { cn } from \"$lib/utils.js\";\n\timport { scale } from \"svelte/transition\";\n\timport { OG_IMAGE_BASE_URL } from \"$lib/../routes/og/og.js\";\n\n\tconst designSystem = useDesignSystem();\n\n\tconst clipboard = new UseClipboard();\n\n\tconst ogSrc = $derived(\n\t\t`${OG_IMAGE_BASE_URL}/create/og${new URL(designSystem.shareUrl).search}`\n\t);\n</script>\n\n<Button\n\tvariant=\"outline\"\n\tsize=\"sm\"\n\tclass=\"md:hidden\"\n\tonclick={() => clipboard.copy(designSystem.shareUrl)}\n>\n\t{#if clipboard.copied}\n\t\t<CheckIcon />\n\t{:else}\n\t\t<ShareIcon />\n\t{/if}\n\tShare\n</Button>\n<Popover.Root>\n\t<Popover.Trigger\n\t\tclass={cn(buttonVariants({ variant: \"outline\", size: \"sm\" }), \"hidden md:flex\")}\n\t>\n\t\t<ShareIcon />\n\t\tShare\n\t</Popover.Trigger>\n\t<Popover.Content align=\"end\" class=\"w-96\">\n\t\t<div class=\"flex w-full flex-col items-start gap-2\">\n\t\t\t<div\n\t\t\t\tclass=\"border-border bg-background h-[183px] w-full overflow-hidden rounded-lg border\"\n\t\t\t>\n\t\t\t\t<img src={ogSrc} alt=\"og\" class=\"size-full object-contain\" />\n\t\t\t</div>\n\t\t\t<div class=\"flex w-full place-items-center items-center gap-2\">\n\t\t\t\t<Input readonly value={designSystem.shareUrl} />\n\t\t\t\t<Button\n\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\tsize=\"icon\"\n\t\t\t\t\tonclick={() => clipboard.copy(designSystem.shareUrl)}\n\t\t\t\t>\n\t\t\t\t\t{#if clipboard.copied}\n\t\t\t\t\t\t<div in:scale={{ duration: 500, start: 0.85 }}>\n\t\t\t\t\t\t\t<CheckIcon tabindex={-1} />\n\t\t\t\t\t\t\t<span class=\"sr-only\">Copied</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t{:else}\n\t\t\t\t\t\t<div in:scale={{ duration: 500, start: 0.85 }}>\n\t\t\t\t\t\t\t<CopyIcon tabindex={-1} />\n\t\t\t\t\t\t\t<span class=\"sr-only\">Copy</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t{/if}\n\t\t\t\t</Button>\n\t\t\t</div>\n\t\t</div>\n\t</Popover.Content>\n</Popover.Root>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/(create)/components/style-picker.svelte",
    "content": "<script lang=\"ts\">\n\timport { STYLES } from \"$lib/registry/config.js\";\n\timport LockButton from \"./lock-button.svelte\";\n\timport * as Picker from \"./picker/index.js\";\n\timport { useDesignSystem } from \"$lib/features/design-system/index.js\";\n\timport { IsMobile } from \"$lib/registry/hooks/is-mobile.svelte.js\";\n\n\ttype Props = {\n\t\tsubmenu?: boolean;\n\t};\n\n\tlet { submenu = false }: Props = $props();\n\n\tconst designSystem = useDesignSystem();\n\n\tconst currentStyle = $derived(\n\t\tSTYLES.find((style) => style.name === designSystem.style) ?? STYLES[0]\n\t);\n\n\tconst isMobile = new IsMobile();\n</script>\n\n<div class=\"group/picker relative\">\n\t<Picker.Root {submenu}>\n\t\t<Picker.Trigger {submenu}>\n\t\t\t<div class=\"flex flex-col justify-start text-left\">\n\t\t\t\t<div class=\"text-muted-foreground text-xs\">Style</div>\n\t\t\t\t<div class=\"text-foreground text-sm font-medium\">\n\t\t\t\t\t{currentStyle?.title}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div\n\t\t\t\tclass=\"pointer-events-none absolute top-1/2 right-4 flex size-4 -translate-y-1/2 items-center justify-center select-none\"\n\t\t\t>\n\t\t\t\t<currentStyle.icon class=\"size-4\" />\n\t\t\t</div>\n\t\t</Picker.Trigger>\n\t\t<Picker.Content\n\t\t\tside={isMobile.current ? \"top\" : submenu ? \"left\" : \"right\"}\n\t\t\talign={isMobile.current ? \"center\" : \"start\"}\n\t\t\tclass=\"md:w-64\"\n\t\t\tsideOffset={submenu ? 5 : 20}\n\t\t\t{submenu}\n\t\t>\n\t\t\t<Picker.RadioGroup bind:value={designSystem.style}>\n\t\t\t\t<Picker.Group>\n\t\t\t\t\t{#each STYLES as style, i (style.name)}\n\t\t\t\t\t\t<Picker.RadioItem value={style.name} closeOnSelect={false}>\n\t\t\t\t\t\t\t<div class=\"flex items-start gap-2\">\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclass=\"flex size-4 translate-y-0.5 items-center justify-center\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<style.icon class=\"size-4\" />\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div class=\"flex flex-col justify-start pointer-coarse:gap-1\">\n\t\t\t\t\t\t\t\t\t<div>{style.title}</div>\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tclass=\"text-muted-foreground text-xs pointer-coarse:text-sm\"\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t{style.description}\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</Picker.RadioItem>\n\t\t\t\t\t\t{#if i < STYLES.length - 1}\n\t\t\t\t\t\t\t<Picker.Separator />\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t{/each}\n\t\t\t\t</Picker.Group>\n\t\t\t</Picker.RadioGroup>\n\t\t</Picker.Content>\n\t</Picker.Root>\n\t<LockButton prop=\"style\" class=\"absolute top-1/2 right-10 -translate-y-1/2\" />\n</div>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/(create)/components/theme-picker.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Picker from \"./picker/index.js\";\n\timport { useDesignSystem } from \"$lib/features/design-system/index.js\";\n\timport { IsMobile } from \"$lib/registry/hooks/is-mobile.svelte.js\";\n\timport LockButton from \"./lock-button.svelte\";\n\timport { mode } from \"mode-watcher\";\n\timport { BASE_THEMES, THEMES, type BaseTheme, type Theme } from \"$lib/registry/config.js\";\n\n\ttype Props = {\n\t\tsubmenu?: boolean;\n\t};\n\n\tlet { submenu = false }: Props = $props();\n\n\tconst designSystem = useDesignSystem();\n\n\tconst isMobile = new IsMobile();\n\n\tconst currentTheme = $derived(\n\t\tTHEMES.find((theme) => theme.name === designSystem.theme) ?? THEMES[0]\n\t);\n\n\tfunction isBaseColor(theme: Theme): theme is BaseTheme {\n\t\treturn BASE_THEMES.find((baseColor) => baseColor.name === theme.name) !== undefined;\n\t}\n\n\tfunction getColorForTheme(theme: Theme) {\n\t\tif (isBaseColor(theme)) {\n\t\t\treturn theme.cssVars[mode.current ?? \"light\"][\"muted-foreground\"];\n\t\t}\n\t\treturn theme.cssVars[mode.current ?? \"light\"][\"primary\"];\n\t}\n</script>\n\n<div class=\"group/picker relative\">\n\t<Picker.Root {submenu}>\n\t\t<Picker.Trigger {submenu}>\n\t\t\t<div class=\"flex flex-col justify-start text-left\">\n\t\t\t\t<div class=\"text-muted-foreground text-xs\">Theme</div>\n\t\t\t\t<div class=\"text-foreground text-sm font-medium\">\n\t\t\t\t\t{currentTheme?.title}\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t\t<div\n\t\t\t\tstyle=\"--color: {getColorForTheme(currentTheme)};\"\n\t\t\t\tclass=\"pointer-events-none absolute top-1/2 right-4 size-4 -translate-y-1/2 rounded-full bg-(--color) select-none\"\n\t\t\t></div>\n\t\t</Picker.Trigger>\n\t\t<Picker.Content\n\t\t\tside={isMobile.current ? \"top\" : submenu ? \"left\" : \"right\"}\n\t\t\talign={isMobile.current ? \"center\" : \"start\"}\n\t\t\tclass=\"max-h-96 overflow-y-auto\"\n\t\t\tsideOffset={submenu ? 5 : 20}\n\t\t\t{submenu}\n\t\t>\n\t\t\t<Picker.RadioGroup bind:value={designSystem.theme}>\n\t\t\t\t<Picker.Group>\n\t\t\t\t\t{#each THEMES.filter( (theme) => BASE_THEMES.find((baseColor) => baseColor.name === theme.name) ) as theme (theme.name)}\n\t\t\t\t\t\t{#if theme.name === designSystem.baseColor}\n\t\t\t\t\t\t\t<Picker.RadioItem value={theme.name} closeOnSelect={false}>\n\t\t\t\t\t\t\t\t<div class=\"flex items-start gap-2\">\n\t\t\t\t\t\t\t\t\t{#if mode.current}\n\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\tstyle=\"--color: {getColorForTheme(theme)};\"\n\t\t\t\t\t\t\t\t\t\t\tclass=\"size-4 translate-y-1 rounded-full bg-(--color)\"\n\t\t\t\t\t\t\t\t\t\t></div>\n\t\t\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\t\t\t<div class=\"flex flex-col justify-start pointer-coarse:gap-1\">\n\t\t\t\t\t\t\t\t\t\t<div>{theme.title}</div>\n\t\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\t\tclass=\"text-muted-foreground text-xs pointer-coarse:text-sm\"\n\t\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\t\tMatch base color\n\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t</Picker.RadioItem>\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t{/each}\n\t\t\t\t</Picker.Group>\n\t\t\t\t<Picker.Separator />\n\t\t\t\t<Picker.Group>\n\t\t\t\t\t{#each THEMES.filter((theme) => !BASE_THEMES.find((baseColor) => baseColor.name === theme.name)) as theme (theme.name)}\n\t\t\t\t\t\t<Picker.RadioItem value={theme.name} closeOnSelect={false}>\n\t\t\t\t\t\t\t<div class=\"flex items-center gap-2\">\n\t\t\t\t\t\t\t\t{#if mode.current}\n\t\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\t\tstyle=\"--color: {theme.cssVars[mode.current]['primary']};\"\n\t\t\t\t\t\t\t\t\t\tclass=\"size-4 rounded-full bg-(--color)\"\n\t\t\t\t\t\t\t\t\t></div>\n\t\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\t\t{theme.title}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</Picker.RadioItem>\n\t\t\t\t\t{/each}\n\t\t\t\t</Picker.Group>\n\t\t\t</Picker.RadioGroup>\n\t\t</Picker.Content>\n\t</Picker.Root>\n\t<LockButton prop=\"theme\" class=\"absolute top-1/2 right-10 -translate-y-1/2\" />\n</div>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/(create)/components/welcome-dialog.svelte",
    "content": "<script lang=\"ts\">\n\timport { PersistedState } from \"runed\";\n\timport Logo from \"$lib/components/logo.svelte\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Dialog from \"$lib/registry/ui/dialog/index.js\";\n\n\tconst dismissed = new PersistedState(\"shadcn-create-welcome-dialog\", false);\n</script>\n\n<Dialog.Root bind:open={() => !dismissed.current, (v) => (dismissed.current = !v)}>\n\t<Dialog.Content\n\t\tshowCloseButton={false}\n\t\tclass=\"dialog-ring max-w-92 min-w-0 gap-0 overflow-hidden rounded-xl p-0 sm:max-w-sm dark:bg-neutral-900\"\n\t>\n\t\t<div\n\t\t\tclass=\"flex aspect-[2/1.2] w-full items-center justify-center rounded-t-xl bg-neutral-950 text-center text-neutral-100 sm:aspect-2/1\"\n\t\t>\n\t\t\t<div class=\"font-mono text-2xl font-bold\">\n\t\t\t\t<Logo class=\"size-12\" />\n\t\t\t</div>\n\t\t</div>\n\t\t<Dialog.Header class=\"gap-1 p-4\">\n\t\t\t<Dialog.Title class=\"text-left text-base\">Build your own shadcn-svelte</Dialog.Title>\n\t\t\t<Dialog.Description class=\"text-foreground text-left leading-relaxed\">\n\t\t\t\tCustomize everything from the ground up. Pick your component library, font, color\n\t\t\t\tscheme, and more.\n\t\t\t</Dialog.Description>\n\t\t\t<Dialog.Description class=\"text-foreground mt-2 text-left leading-relaxed font-medium\">\n\t\t\t\tAvailable for SvelteKit, Vite, and Astro.\n\t\t\t</Dialog.Description>\n\t\t</Dialog.Header>\n\t\t<Dialog.Footer class=\"m-0\">\n\t\t\t<Dialog.Close>\n\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t<Button class=\"w-full rounded-lg shadow-none\" {...props}>Get Started</Button>\n\t\t\t\t{/snippet}\n\t\t\t</Dialog.Close>\n\t\t</Dialog.Footer>\n\t</Dialog.Content>\n</Dialog.Root>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/(create)/create/+layout.svelte",
    "content": "<script lang=\"ts\">\n\timport WelcomeDialog from \"../components/welcome-dialog.svelte\";\n\timport { useDesignSystem } from \"$lib/features/design-system/index.js\";\n\timport Metadata from \"$lib/components/metadata.svelte\";\n\timport SiteHeader from \"$lib/components/site-header.svelte\";\n\timport Customizer from \"../components/customizer.svelte\";\n\timport ActionMenu from \"../components/action-menu.svelte\";\n\n\tlet { children } = $props();\n\n\tconst designSystem = useDesignSystem();\n</script>\n\n<Metadata\n\ttitle=\"New Project\"\n\tdescription=\"Build your own shadcn-svelte.\"\n\togImage={{\n\t\turl: `/create/og${new URL(designSystem.shareUrl).search}`,\n\t\twidth: \"1200\",\n\t\theight: \"630\",\n\t}}\n/>\n\n<ActionMenu>\n\t<div\n\t\tdata-slot=\"layout\"\n\t\tclass=\"group/layout section-soft relative z-10 flex h-svh flex-col overflow-hidden [--customizer-width:--spacing(56)] [--gap:--spacing(4)] md:[--gap:--spacing(6)]\"\n\t>\n\t\t<SiteHeader />\n\t\t<main\n\t\t\tdata-slot=\"designer\"\n\t\t\tclass=\"container-wrapper flex min-h-0 flex-1 flex-col gap-(--gap) p-(--gap) pt-[calc(var(--gap)*0.25)] md:flex-row-reverse\"\n\t\t>\n\t\t\t{@render children?.()}\n\t\t\t<Customizer />\n\t\t\t<WelcomeDialog />\n\t\t</main>\n\t</div>\n</ActionMenu>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/(create)/create/+page.server.ts",
    "content": "import { redirect } from \"@sveltejs/kit\";\n\nexport function load({ url }) {\n\tredirect(303, `/create/preview${url.search}`);\n}\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/(create)/create/[item]/+page.svelte",
    "content": "<script lang=\"ts\">\n\timport Preview from \"../../components/preview.svelte\";\n\n\tlet { data } = $props();\n</script>\n\n<Preview item={data.params.item} />\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/(create)/create/[item]/+page.ts",
    "content": "export function load({ params }) {\n\treturn {\n\t\tparams,\n\t};\n}\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/(create)/lib/randomize-biases.ts",
    "content": "import type { BaseColorName, Radius, StyleName, ThemeName, fonts } from \"$lib/registry/config.js\";\n\nexport type RandomizeContext = {\n\tstyle?: StyleName;\n\tbaseColor?: BaseColorName;\n\ttheme?: ThemeName;\n\ticonLibrary?: string;\n\tfont?: string;\n\tmenuAccent?: string;\n\tmenuColor?: string;\n\tradius?: string;\n};\n\nexport type BiasFilter<T> = (items: readonly T[], context: RandomizeContext) => readonly T[];\n\nexport type RandomizeBiases = {\n\tfonts?: BiasFilter<(typeof fonts)[number]>;\n\tradius?: BiasFilter<Radius>;\n\t// Add more bias filters as needed:\n\t// styles?: BiasFilter<Style>\n\t// baseColors?: BiasFilter<BaseColor>\n\t// themes?: BiasFilter<Theme>\n\t// etc.\n};\n\n/**\n * Configuration for randomization biases.\n * Add biases here to influence random selection based on context.\n */\nexport const RANDOMIZE_BIASES: RandomizeBiases = {\n\tfonts: (fonts, context) => {\n\t\t// When style is lyra, only use mono fonts.\n\t\tif (context.style === \"lyra\") {\n\t\t\treturn fonts.filter((font) => font.name.includes(\"mono\"));\n\t\t}\n\n\t\treturn fonts;\n\t},\n\tradius: (radii, context) => {\n\t\t// When style is lyra, always use \"none\" radius\n\t\tif (context.style === \"lyra\") {\n\t\t\treturn radii.filter((radius) => radius.name === \"none\");\n\t\t}\n\n\t\treturn radii;\n\t},\n\t// Add more biases here as needed:\n\t// Example: When baseColor is \"blue\", prefer certain themes\n\t// themes: (themes, context) => {\n\t//   if (context.baseColor === \"blue\") {\n\t//     return themes.filter(theme => theme.name.includes(\"dark\"))\n\t//   }\n\t//   return themes\n\t// },\n};\n\n/**\n * Applies biases to a list of items based on the current context.\n */\nexport function applyBias<T>(\n\titems: readonly T[],\n\tcontext: RandomizeContext,\n\tbiasFilter?: BiasFilter<T>\n): readonly T[] {\n\tif (!biasFilter) {\n\t\treturn items;\n\t}\n\n\treturn biasFilter(items, context);\n}\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/(create)/lib/utils.ts",
    "content": "import { type RegistryItem } from \"shadcn-svelte/schema\";\n\nconst mapping = {\n\t\"registry:block\": \"Blocks\",\n\t\"registry:example\": \"Components\",\n};\n\nexport function groupItemsByType(items: Pick<RegistryItem, \"name\" | \"title\" | \"type\">[]) {\n\tconst grouped = items.reduce(\n\t\t(acc, item) => {\n\t\t\tacc[item.type] = [...(acc[item.type] || []), item];\n\t\t\treturn acc;\n\t\t},\n\t\t{} as Record<string, Pick<RegistryItem, \"name\" | \"title\" | \"type\">[]>\n\t);\n\n\treturn Object.entries(grouped)\n\t\t.map(([type, items]) => ({\n\t\t\ttype,\n\t\t\ttitle: mapping[type as keyof typeof mapping] || type,\n\t\t\titems,\n\t\t}))\n\t\t.sort((a, b) => {\n\t\t\tconst aIndex = Object.keys(mapping).indexOf(a.type);\n\t\t\tconst bIndex = Object.keys(mapping).indexOf(b.type);\n\n\t\t\t// If both are in mapping, sort by their order.\n\t\t\tif (aIndex !== -1 && bIndex !== -1) {\n\t\t\t\treturn aIndex - bIndex;\n\t\t\t}\n\t\t\t// If only a is in mapping, it comes first.\n\t\t\tif (aIndex !== -1) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\t// If only b is in mapping, it comes first.\n\t\t\tif (bIndex !== -1) {\n\t\t\t\treturn 1;\n\t\t\t}\n\t\t\t// If neither is in mapping, maintain original order.\n\t\t\treturn 0;\n\t\t});\n}\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/+layout.svelte",
    "content": "<script lang=\"ts\">\n\timport SiteFooter from \"$lib/components/site-footer.svelte\";\n\timport SiteHeader from \"$lib/components/site-header.svelte\";\n\timport * as Tooltip from \"$lib/registry/ui/tooltip/index.js\";\n\n\tlet { children } = $props();\n</script>\n\n<div class=\"bg-background relative z-10 flex min-h-svh flex-col\">\n\t<SiteHeader />\n\t<main class=\"flex flex-1 flex-col\">\n\t\t<Tooltip.Provider>\n\t\t\t{@render children()}\n\t\t</Tooltip.Provider>\n\t</main>\n\t<SiteFooter />\n</div>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/+page.svelte",
    "content": "<svelte:options runes />\n\n<script lang=\"ts\">\n\timport Announcement from \"$lib/components/announcement.svelte\";\n\timport ExamplesNav from \"$lib/components/examples-nav.svelte\";\n\timport PageActions from \"$lib/components/page-header/page-actions.svelte\";\n\timport PageHeaderDescription from \"$lib/components/page-header/page-header-description.svelte\";\n\timport PageHeaderHeading from \"$lib/components/page-header/page-header-heading.svelte\";\n\timport PageHeader from \"$lib/components/page-header/page-header.svelte\";\n\timport PageNav from \"$lib/components/page-nav.svelte\";\n\timport ThemeSelector from \"$lib/components/theme-selector.svelte\";\n\timport Button from \"$lib/registry/ui/button/button.svelte\";\n\timport RootComponents from \"$lib/components/cards/root-components.svelte\";\n\timport Metadata from \"$lib/components/metadata.svelte\";\n\timport { IsMobile } from \"$lib/registry/hooks/is-mobile.svelte.js\";\n\n\tconst title = \"The Foundation for your Design System\";\n\tconst description =\n\t\t\"A set of beautifully designed components that you can customize, extend, and build on. Start here then make it your own. Open Source. Open Code.\";\n\n\tconst mobile = new IsMobile();\n</script>\n\n<Metadata {title} {description} />\n\n<div class=\"flex flex-1 flex-col\">\n\t<PageHeader>\n\t\t<Announcement />\n\t\t<PageHeaderHeading class=\"max-w-4xl\">{title}</PageHeaderHeading>\n\t\t<PageHeaderDescription>{description}</PageHeaderDescription>\n\t\t<PageActions>\n\t\t\t<Button href=\"/docs/installation\" size=\"sm\">Get Started</Button>\n\t\t\t<Button href=\"/docs/components\" size=\"sm\" variant=\"ghost\">View Components</Button>\n\t\t</PageActions>\n\t</PageHeader>\n\t{#if !mobile.current}\n\t\t<PageNav class=\"hidden md:flex\">\n\t\t\t<ExamplesNav class=\"[&>a:first-child]:text-primary flex-1 overflow-hidden\" />\n\t\t\t<ThemeSelector class=\"me-4 hidden md:flex\" />\n\t\t</PageNav>\n\t{/if}\n\t<div class=\"container-wrapper section-soft flex-1 pb-6\">\n\t\t<div class=\"container overflow-hidden\">\n\t\t\t<section\n\t\t\t\tclass=\"border-border/50 -mx-4 w-[160vw] overflow-hidden rounded-lg border md:hidden md:w-[150vw]\"\n\t\t\t>\n\t\t\t\t<enhanced:img\n\t\t\t\t\tclass=\"block dark:hidden\"\n\t\t\t\t\tsrc=\"../../../../static/img/registry/dashboard-01-light.png\"\n\t\t\t\t\talt=\"Dashboard\"\n\t\t\t\t\tfetchpriority={mobile.current ? \"high\" : undefined}\n\t\t\t\t\tloading={mobile.current ? \"eager\" : \"lazy\"}\n\t\t\t\t/>\n\t\t\t\t<enhanced:img\n\t\t\t\t\tclass=\"hidden dark:block\"\n\t\t\t\t\tsrc=\"../../../../static/img/registry/dashboard-01-dark.png\"\n\t\t\t\t\talt=\"Dashboard\"\n\t\t\t\t\tfetchpriority=\"high\"\n\t\t\t\t\tloading={mobile.current ? \"eager\" : \"lazy\"}\n\t\t\t\t/>\n\t\t\t</section>\n\t\t\t{#if !mobile.current}\n\t\t\t\t<section class=\"theme-container hidden md:block\">\n\t\t\t\t\t<RootComponents />\n\t\t\t\t</section>\n\t\t\t{/if}\n\t\t</div>\n\t</div>\n</div>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/+page.ts",
    "content": "export const prerender = true;\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/blocks/+layout.svelte",
    "content": "<script lang=\"ts\">\n\timport Announcement from \"$lib/components/announcement.svelte\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\n\timport BlocksNav from \"$lib/components/blocks-nav.svelte\";\n\timport PageHeader from \"$lib/components/page-header/page-header.svelte\";\n\timport PageHeaderHeading from \"$lib/components/page-header/page-header-heading.svelte\";\n\timport PageHeaderDescription from \"$lib/components/page-header/page-header-description.svelte\";\n\timport PageActions from \"$lib/components/page-header/page-actions.svelte\";\n\timport PageNav from \"$lib/components/page-nav.svelte\";\n\timport Metadata from \"$lib/components/metadata.svelte\";\n\n\tlet { children } = $props();\n\n\tconst title = \"Building Blocks for the Web\";\n\tconst description =\n\t\t\"Clean, modern building blocks. Works with all Svelte projects. Copy and paste into your apps. Open Source. Free forever.\";\n</script>\n\n<Metadata\n\t{title}\n\t{description}\n\togImage={{\n\t\turl: `/og?title=${encodeURIComponent(title)}&description=${encodeURIComponent(description)}`,\n\t}}\n/>\n\n<PageHeader>\n\t<Announcement />\n\t<PageHeaderHeading>{title}</PageHeaderHeading>\n\t<PageHeaderDescription>{description}</PageHeaderDescription>\n\t<PageActions>\n\t\t<Button href=\"#blocks\" size=\"sm\">Browse Blocks</Button>\n\t\t<!-- <Button href=\"/docs/blocks\" variant=\"ghost\" size=\"sm\">Add a block</Button> -->\n\t</PageActions>\n</PageHeader>\n<PageNav>\n\t<BlocksNav />\n\t<Button\n\t\tsize=\"sm\"\n\t\tvariant=\"secondary\"\n\t\thref=\"/blocks/sidebar\"\n\t\tclass=\"me-7 hidden shadow-none lg:flex\"\n\t>\n\t\tBrowse all blocks\n\t</Button>\n</PageNav>\n<div class=\"container-wrapper section-soft flex-1 md:py-12\">\n\t<div class=\"container\">{@render children?.()}</div>\n</div>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/blocks/+page.svelte",
    "content": "<script lang=\"ts\">\n\timport type { PageData } from \"./$types.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport BlockViewer from \"$lib/components/block-viewer.svelte\";\n\timport { createFileTreeForRegistryItemFiles } from \"$lib/registry/registry-utils.js\";\n\timport ComponentPreview from \"$lib/components/component-preview.svelte\";\n\n\tlet { data }: { data: PageData } = $props();\n</script>\n\n<div class=\"flex flex-col gap-12 md:gap-24\">\n\t{#each data.blocks as block (block.name)}\n\t\t<BlockViewer item={block} tree={createFileTreeForRegistryItemFiles(block.files)}>\n\t\t\t<ComponentPreview\n\t\t\t\tname={block.name}\n\t\t\t\thideCode\n\t\t\t\tclass=\"my-0 **:[.preview]:h-auto **:[.preview]:p-4 **:[.preview>.p-6]:p-0\"\n\t\t\t/>\n\t\t</BlockViewer>\n\t{/each}\n\t<div class=\"container-wrapper\">\n\t\t<div class=\"container flex justify-center py-6\">\n\t\t\t<Button href=\"/blocks/sidebar\" variant=\"outline\">Browse more blocks</Button>\n\t\t</div>\n\t</div>\n</div>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/blocks/+page.ts",
    "content": "import type { PageLoad } from \"./$types.js\";\nimport type { HighlightedBlock } from \"../../../api/block/[block]/+server.js\";\n\nexport const prerender = true;\n\nconst FEATURED_BLOCKS = [\"dashboard-01\", \"sidebar-07\", \"sidebar-03\", \"login-03\", \"login-04\"];\n\nexport const load: PageLoad = async ({ fetch }) => {\n\tconst loadItems = FEATURED_BLOCKS.map(async (block) => {\n\t\tconst resp = await fetch(`/api/block/${block}`);\n\t\treturn (await resp.json()) as HighlightedBlock;\n\t});\n\n\tconst result = await Promise.all(loadItems);\n\n\treturn {\n\t\tblocks: result.sort(\n\t\t\t(a, b) => FEATURED_BLOCKS.indexOf(a.name) - FEATURED_BLOCKS.indexOf(b.name)\n\t\t),\n\t};\n};\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/blocks/[category]/+page.server.ts",
    "content": "import path from \"node:path\";\nimport { registryCategories } from \"$lib/registry/registry-categories.js\";\nimport type { EntryGenerator, PageServerLoad } from \"./$types.js\";\n\nconst sidebars = import.meta.glob(\"/src/__registry__/json/styles/nova/sidebar-*.json\");\nconst dashboards = import.meta.glob(\"/src/__registry__/json/styles/nova/dashboard-*.json\");\nconst logins = import.meta.glob(\"/src/__registry__/json/styles/nova/login-*.json\");\nconst calendars = import.meta.glob(\"/src/__registry__/json/styles/nova/calendar-*.json\");\nconst otps = import.meta.glob(\"/src/__registry__/json/styles/nova/otp-*.json\");\nconst signUps = import.meta.glob(\"/src/__registry__/json/styles/nova/signup-*.json\");\n\nexport const prerender = true;\n\nexport const entries: EntryGenerator = () =>\n\tregistryCategories.filter((c) => !c.hidden).map(({ slug }) => ({ category: slug }));\n\nexport const load: PageServerLoad = async () => {\n\treturn {\n\t\tcalendars: getBlockNames(calendars),\n\t\tdashboards: getBlockNames(dashboards),\n\t\tlogins: getBlockNames(logins),\n\t\tsidebars: getBlockNames(sidebars),\n\t\totps: getBlockNames(otps),\n\t\tsignUps: getBlockNames(signUps),\n\t};\n};\n\nfunction getBlockNames(glob: Record<string, unknown>) {\n\treturn Object.keys(glob).map((n) => path.parse(n).name);\n}\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/blocks/[category]/+page.svelte",
    "content": "<script lang=\"ts\">\n\timport type { PageData } from \"./$types.js\";\n\timport BlockViewer from \"$lib/components/block-viewer.svelte\";\n\timport { createFileTreeForRegistryItemFiles } from \"$lib/registry/registry-utils.js\";\n\timport ComponentPreview from \"$lib/components/component-preview.svelte\";\n\timport { Skeleton } from \"$lib/registry/ui/skeleton/index.js\";\n\n\tlet { data }: { data: PageData } = $props();\n</script>\n\n{#snippet Placeholder()}\n\t<div class=\"mt-2 flex min-h-[331px] w-full items-center justify-center rounded-md border p-4\">\n\t\t<Skeleton class=\"h-[297px] w-[250px]\" />\n\t</div>\n{/snippet}\n\n<div class=\"flex flex-col gap-12 md:gap-24\">\n\t{#each data.blocks as block (block.name)}\n\t\t<BlockViewer item={block} tree={createFileTreeForRegistryItemFiles(block.files)}>\n\t\t\t{#await block.component}\n\t\t\t\t{@render Placeholder()}\n\t\t\t{:then component}\n\t\t\t\t<ComponentPreview\n\t\t\t\t\tname={block.name}\n\t\t\t\t\t{component}\n\t\t\t\t\thideCode\n\t\t\t\t\tclass=\"my-0 **:[.preview]:h-auto **:[.preview]:p-4 **:[.preview>.p-6]:p-0\"\n\t\t\t\t/>\n\t\t\t{/await}\n\t\t</BlockViewer>\n\t{/each}\n</div>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/blocks/[category]/+page.ts",
    "content": "import type { EntryGenerator, PageLoad } from \"./$types.js\";\nimport { registryCategories } from \"$lib/registry/registry-categories.js\";\nimport type { Component } from \"svelte\";\nimport { error } from \"@sveltejs/kit\";\nimport type { HighlightedBlock } from \"../../../../api/block/[block]/+server.js\";\n\nexport const prerender = true;\n\nexport const entries: EntryGenerator = () =>\n\tregistryCategories.filter((c) => !c.hidden).map(({ slug }) => ({ category: slug }));\n\ntype Item = HighlightedBlock & {\n\tcomponent?: Promise<Component>;\n};\n\nconst calendarComponents = import.meta.glob(\"/src/lib/registry/blocks/calendar-*.svelte\", {\n\timport: \"default\",\n});\n\nexport const load: PageLoad = async ({ params, data, fetch }) => {\n\tconst category = params.category;\n\n\tlet loadItems;\n\n\tif (category === \"sidebar\") {\n\t\tloadItems = data.sidebars.map(async (block) => {\n\t\t\tconst resp = await fetch(`/api/block/${block}`);\n\t\t\treturn (await resp.json()) as Item;\n\t\t});\n\t} else if (category === \"dashboard\") {\n\t\tloadItems = data.dashboards.map(async (block) => {\n\t\t\tconst resp = await fetch(`/api/block/${block}`);\n\t\t\treturn (await resp.json()) as Item;\n\t\t});\n\t} else if (category === \"login\") {\n\t\tloadItems = data.logins.map(async (block) => {\n\t\t\tconst resp = await fetch(`/api/block/${block}`);\n\t\t\treturn (await resp.json()) as Item;\n\t\t});\n\t} else if (category === \"calendar\") {\n\t\tloadItems = data.calendars.map(async (block) => {\n\t\t\tconst resp = await fetch(`/api/block/${block}`);\n\t\t\tconst item = (await resp.json()) as Item;\n\t\t\tconst path = `/src/lib/registry/blocks/${block}.svelte`;\n\t\t\titem.component = calendarComponents[path]() as Promise<Component>;\n\t\t\treturn item;\n\t\t});\n\t} else if (category === \"otp\") {\n\t\tloadItems = data.otps.map(async (block) => {\n\t\t\tconst resp = await fetch(`/api/block/${block}`);\n\t\t\treturn (await resp.json()) as Item;\n\t\t});\n\t} else if (category === \"sign-up\") {\n\t\tloadItems = data.signUps.map(async (block) => {\n\t\t\tconst resp = await fetch(`/api/block/${block}`);\n\t\t\treturn (await resp.json()) as Item;\n\t\t});\n\t} else {\n\t\terror(404);\n\t}\n\n\tconst blocks = await Promise.all(loadItems);\n\n\treturn { blocks };\n};\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/charts/+layout.svelte",
    "content": "<script lang=\"ts\">\n\timport Announcement from \"$lib/components/announcement.svelte\";\n\timport PageActions from \"$lib/components/page-header/page-actions.svelte\";\n\timport PageHeaderDescription from \"$lib/components/page-header/page-header-description.svelte\";\n\timport PageHeaderHeading from \"$lib/components/page-header/page-header-heading.svelte\";\n\timport PageHeader from \"$lib/components/page-header/page-header.svelte\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport PageNav from \"$lib/components/page-nav.svelte\";\n\timport ChartsNav from \"$lib/components/charts-nav.svelte\";\n\timport ThemeSelector from \"$lib/components/theme-selector.svelte\";\n\timport Metadata from \"$lib/components/metadata.svelte\";\n\n\tlet { children } = $props();\n\tconst title = \"Beautiful Charts & Graphs\";\n\tconst description =\n\t\t\"A collection of ready-to-use chart components built with LayerChart. From basic charts to rich data displays, copy and paste into your apps.\";\n</script>\n\n<Metadata\n\t{title}\n\t{description}\n\togImage={{\n\t\turl: `/og?title=${encodeURIComponent(title)}&description=${encodeURIComponent(description)}`,\n\t}}\n/>\n\n<PageHeader>\n\t<Announcement />\n\t<PageHeaderHeading>{title}</PageHeaderHeading>\n\t<PageHeaderDescription>{description}</PageHeaderDescription>\n\t<PageActions>\n\t\t<Button href=\"#charts\" size=\"sm\">Browse Charts</Button>\n\t\t<Button href=\"/docs/components/chart\" variant=\"ghost\" size=\"sm\">Documentation</Button>\n\t</PageActions>\n</PageHeader>\n<PageNav id=\"charts\">\n\t<ChartsNav />\n\t<ThemeSelector class=\"me-4 hidden md:flex\" />\n</PageNav>\n<div class=\"container-wrapper section-soft flex-1\">\n\t<div class=\"container pb-6\">\n\t\t<section class=\"theme-container\">{@render children?.()}</section>\n\t</div>\n</div>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/charts/+page.ts",
    "content": "import { redirect } from \"@sveltejs/kit\";\n\nexport function load() {\n\tredirect(302, \"/charts/area\");\n}\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/charts/[t]/+page.server.ts",
    "content": "import path from \"node:path\";\nimport type { PageServerLoad, EntryGenerator } from \"./$types.js\";\n\nconst chartTypes = [\"area\", \"bar\", \"line\", \"pie\", \"radar\", \"radial\", \"tooltip\"] as const;\n\nconst charts = import.meta.glob(\"/src/__registry__/json/styles/nova/chart-*.json\");\nexport const prerender = true;\n\nexport const entries: EntryGenerator = () => {\n\treturn chartTypes.map((type) => ({ t: type }));\n};\n\nexport const load: PageServerLoad = async () => {\n\treturn {\n\t\tcharts: getChartNames(charts),\n\t};\n};\n\nfunction getChartNames(glob: Record<string, unknown>) {\n\treturn Object.keys(glob).map((n) => path.parse(n).name);\n}\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/charts/[t]/+page.svelte",
    "content": "<script lang=\"ts\">\n\timport ChartDisplay from \"$lib/components/chart-display.svelte\";\n\timport { cn } from \"$lib/utils.js\";\n\timport { charts } from \"../charts.js\";\n\n\tlet { data } = $props();\n\n\tconst chartList = $derived(charts[data.type]);\n</script>\n\n<div class=\"grid flex-1 gap-12 lg:gap-24\">\n\t<h2 class=\"sr-only\">\n\t\t{data.type.charAt(0).toUpperCase() + data.type.slice(1)} Charts\n\t</h2>\n\t<div\n\t\tclass=\"grid flex-1 scroll-mt-20 items-stretch gap-10 md:grid-cols-2 md:gap-6 lg:grid-cols-3 xl:gap-10\"\n\t>\n\t\t{#each { length: 12 } as _, index (index)}\n\t\t\t{@const chart = chartList[index]}\n\t\t\t{#if chart}\n\t\t\t\t<ChartDisplay\n\t\t\t\t\tname={chart.id}\n\t\t\t\t\tclass={cn(chart.fullWidth && \"md:col-span-2 lg:col-span-3\")}\n\t\t\t\t\tchartData={data.charts}\n\t\t\t\t>\n\t\t\t\t\t<chart.component />\n\t\t\t\t</ChartDisplay>\n\t\t\t{:else}\n\t\t\t\t<div\n\t\t\t\t\tclass=\"hidden aspect-square w-full rounded-lg border border-dashed xl:block\"\n\t\t\t\t></div>\n\t\t\t{/if}\n\t\t{/each}\n\t</div>\n</div>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/charts/[t]/+page.ts",
    "content": "import type { HighlightedBlock } from \"../../../../api/block/[block]/+server.js\";\nimport type { EntryGenerator, PageLoad } from \"./$types.js\";\n\nconst chartTypes = [\"area\", \"bar\", \"line\", \"pie\", \"radar\", \"radial\", \"tooltip\"] as const;\ntype ChartType = (typeof chartTypes)[number];\n\nexport const prerender = true;\n\nexport const entries: EntryGenerator = () => {\n\treturn chartTypes.map((type) => ({ t: type }));\n};\n\nexport const load: PageLoad = async ({ params, data, fetch }) => {\n\tconst loadItems = data.charts.map(async (chart) => {\n\t\tconst res = await fetch(`/api/block/${chart}`);\n\t\tconst item = (await res.json()) as HighlightedBlock;\n\t\treturn item;\n\t});\n\n\treturn {\n\t\tcharts: await Promise.all(loadItems),\n\t\ttype: params.t as ChartType,\n\t};\n};\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/charts/charts.ts",
    "content": "import ChartAreaAxes from \"$lib/registry/blocks/chart-area-axes.svelte\";\nimport ChartAreaDefault from \"$lib/registry/blocks/chart-area-default.svelte\";\nimport ChartAreaGradient from \"$lib/registry/blocks/chart-area-gradient.svelte\";\nimport ChartAreaIcons from \"$lib/registry/blocks/chart-area-icons.svelte\";\nimport ChartAreaInteractive from \"$lib/registry/blocks/chart-area-interactive.svelte\";\nimport ChartAreaLegend from \"$lib/registry/blocks/chart-area-legend.svelte\";\nimport ChartAreaLinear from \"$lib/registry/blocks/chart-area-linear.svelte\";\nimport ChartAreaStackedExpand from \"$lib/registry/blocks/chart-area-stacked-expand.svelte\";\nimport ChartAreaStacked from \"$lib/registry/blocks/chart-area-stacked.svelte\";\nimport ChartAreaStep from \"$lib/registry/blocks/chart-area-step.svelte\";\nimport ChartBarActive from \"$lib/registry/blocks/chart-bar-active.svelte\";\nimport ChartBarDefault from \"$lib/registry/blocks/chart-bar-default.svelte\";\nimport ChartBarHorizontal from \"$lib/registry/blocks/chart-bar-horizontal.svelte\";\nimport ChartBarInteractive from \"$lib/registry/blocks/chart-bar-interactive.svelte\";\nimport ChartBarLabelCustom from \"$lib/registry/blocks/chart-bar-label-custom.svelte\";\nimport ChartBarLabel from \"$lib/registry/blocks/chart-bar-label.svelte\";\nimport ChartBarMixed from \"$lib/registry/blocks/chart-bar-mixed.svelte\";\nimport ChartBarMultiple from \"$lib/registry/blocks/chart-bar-multiple.svelte\";\nimport ChartBarNegative from \"$lib/registry/blocks/chart-bar-negative.svelte\";\nimport ChartBarStacked from \"$lib/registry/blocks/chart-bar-stacked.svelte\";\nimport ChartLineDefault from \"$lib/registry/blocks/chart-line-default.svelte\";\nimport ChartLineDotsColors from \"$lib/registry/blocks/chart-line-dots-colors.svelte\";\nimport ChartLineDotsCustom from \"$lib/registry/blocks/chart-line-dots-custom.svelte\";\nimport ChartLineDots from \"$lib/registry/blocks/chart-line-dots.svelte\";\nimport ChartLineInteractive from \"$lib/registry/blocks/chart-line-interactive.svelte\";\nimport ChartLineLabelCustom from \"$lib/registry/blocks/chart-line-label-custom.svelte\";\nimport ChartLineLabel from \"$lib/registry/blocks/chart-line-label.svelte\";\nimport ChartLineLinear from \"$lib/registry/blocks/chart-line-linear.svelte\";\nimport ChartLineMultiple from \"$lib/registry/blocks/chart-line-multiple.svelte\";\nimport ChartLineStep from \"$lib/registry/blocks/chart-line-step.svelte\";\nimport ChartPieDonutActive from \"$lib/registry/blocks/chart-pie-donut-active.svelte\";\nimport ChartPieDonutText from \"$lib/registry/blocks/chart-pie-donut-text.svelte\";\nimport ChartPieDonut from \"$lib/registry/blocks/chart-pie-donut.svelte\";\nimport ChartPieInteractive from \"$lib/registry/blocks/chart-pie-interactive.svelte\";\nimport ChartPieLabelCustom from \"$lib/registry/blocks/chart-pie-label-custom.svelte\";\nimport ChartPieLabelList from \"$lib/registry/blocks/chart-pie-label-list.svelte\";\nimport ChartPieLabel from \"$lib/registry/blocks/chart-pie-label.svelte\";\nimport ChartPieLegend from \"$lib/registry/blocks/chart-pie-legend.svelte\";\n// import ChartPieSeparatorNone from \"$lib/registry/blocks/chart-pie-separator-none.svelte\";\nimport ChartPieSimple from \"$lib/registry/blocks/chart-pie-simple.svelte\";\nimport ChartPieStacked from \"$lib/registry/blocks/chart-pie-stacked.svelte\";\nimport ChartRadarDefault from \"$lib/registry/blocks/chart-radar-default.svelte\";\nimport ChartRadarDots from \"$lib/registry/blocks/chart-radar-dots.svelte\";\nimport ChartRadarGridCircleFill from \"$lib/registry/blocks/chart-radar-grid-circle-fill.svelte\";\nimport ChartRadarGridCircleNoLines from \"$lib/registry/blocks/chart-radar-grid-circle-no-lines.svelte\";\nimport ChartRadarGridCircle from \"$lib/registry/blocks/chart-radar-grid-circle.svelte\";\nimport ChartRadarGridCustom from \"$lib/registry/blocks/chart-radar-grid-custom.svelte\";\nimport ChartRadarGridFill from \"$lib/registry/blocks/chart-radar-grid-fill.svelte\";\nimport ChartRadarGridNone from \"$lib/registry/blocks/chart-radar-grid-none.svelte\";\nimport ChartRadarIcons from \"$lib/registry/blocks/chart-radar-icons.svelte\";\nimport ChartRadarLabelCustom from \"$lib/registry/blocks/chart-radar-label-custom.svelte\";\nimport ChartRadarLegend from \"$lib/registry/blocks/chart-radar-legend.svelte\";\nimport ChartRadarLinesOnly from \"$lib/registry/blocks/chart-radar-lines-only.svelte\";\nimport ChartRadarMultiple from \"$lib/registry/blocks/chart-radar-multiple.svelte\";\nimport ChartRadarRadius from \"$lib/registry/blocks/chart-radar-radius.svelte\";\n// import ChartRadialGrid from \"$lib/registry/blocks/chart-radial-grid.svelte\";\nimport ChartRadialLabel from \"$lib/registry/blocks/chart-radial-label.svelte\";\nimport ChartRadialShape from \"$lib/registry/blocks/chart-radial-shape.svelte\";\nimport ChartRadialSimple from \"$lib/registry/blocks/chart-radial-simple.svelte\";\nimport ChartRadialStacked from \"$lib/registry/blocks/chart-radial-stacked.svelte\";\nimport ChartRadialText from \"$lib/registry/blocks/chart-radial-text.svelte\";\nimport ChartTooltipAdvanced from \"$lib/registry/blocks/chart-tooltip-advanced.svelte\";\nimport ChartTooltipDefault from \"$lib/registry/blocks/chart-tooltip-default.svelte\";\nimport ChartTooltipFormatter from \"$lib/registry/blocks/chart-tooltip-formatter.svelte\";\nimport ChartTooltipIcons from \"$lib/registry/blocks/chart-tooltip-icons.svelte\";\nimport ChartTooltipIndicatorLine from \"$lib/registry/blocks/chart-tooltip-indicator-line.svelte\";\nimport ChartTooltipIndicatorNone from \"$lib/registry/blocks/chart-tooltip-indicator-none.svelte\";\nimport ChartTooltipLabelCustom from \"$lib/registry/blocks/chart-tooltip-label-custom.svelte\";\nimport ChartTooltipLabelFormatter from \"$lib/registry/blocks/chart-tooltip-label-formatter.svelte\";\nimport ChartTooltipLabelNone from \"$lib/registry/blocks/chart-tooltip-label-none.svelte\";\nimport type { Component } from \"svelte\";\n\ninterface ChartItem {\n\tid: string;\n\tcomponent: Component;\n\tfullWidth?: boolean;\n}\n\ninterface ChartGroups {\n\tarea: ChartItem[];\n\tbar: ChartItem[];\n\tline: ChartItem[];\n\tpie: ChartItem[];\n\tradar: ChartItem[];\n\tradial: ChartItem[];\n\ttooltip: ChartItem[];\n}\n\nexport const charts: ChartGroups = {\n\tarea: [\n\t\t{\n\t\t\tid: \"chart-area-interactive\",\n\t\t\tcomponent: ChartAreaInteractive,\n\t\t\tfullWidth: true,\n\t\t},\n\t\t{ id: \"chart-area-default\", component: ChartAreaDefault },\n\t\t{ id: \"chart-area-linear\", component: ChartAreaLinear },\n\t\t{ id: \"chart-area-step\", component: ChartAreaStep },\n\t\t{ id: \"chart-area-legend\", component: ChartAreaLegend },\n\t\t{ id: \"chart-area-stacked\", component: ChartAreaStacked },\n\t\t{ id: \"chart-area-stacked-expand\", component: ChartAreaStackedExpand },\n\t\t{ id: \"chart-area-icons\", component: ChartAreaIcons },\n\t\t{ id: \"chart-area-gradient\", component: ChartAreaGradient },\n\t\t{ id: \"chart-area-axes\", component: ChartAreaAxes },\n\t],\n\tbar: [\n\t\t{\n\t\t\tid: \"chart-bar-interactive\",\n\t\t\tcomponent: ChartBarInteractive,\n\t\t\tfullWidth: true,\n\t\t},\n\t\t{ id: \"chart-bar-default\", component: ChartBarDefault },\n\t\t{ id: \"chart-bar-horizontal\", component: ChartBarHorizontal },\n\t\t{ id: \"chart-bar-multiple\", component: ChartBarMultiple },\n\t\t{ id: \"chart-bar-stacked\", component: ChartBarStacked },\n\t\t{ id: \"chart-bar-label\", component: ChartBarLabel },\n\t\t{ id: \"chart-bar-label-custom\", component: ChartBarLabelCustom },\n\t\t{ id: \"chart-bar-mixed\", component: ChartBarMixed },\n\t\t{ id: \"chart-bar-active\", component: ChartBarActive },\n\t\t{ id: \"chart-bar-negative\", component: ChartBarNegative },\n\t],\n\tline: [\n\t\t{\n\t\t\tid: \"chart-line-interactive\",\n\t\t\tcomponent: ChartLineInteractive,\n\t\t\tfullWidth: true,\n\t\t},\n\t\t{ id: \"chart-line-default\", component: ChartLineDefault },\n\t\t{ id: \"chart-line-linear\", component: ChartLineLinear },\n\t\t{ id: \"chart-line-step\", component: ChartLineStep },\n\t\t{ id: \"chart-line-multiple\", component: ChartLineMultiple },\n\t\t{ id: \"chart-line-dots\", component: ChartLineDots },\n\t\t{ id: \"chart-line-dots-custom\", component: ChartLineDotsCustom },\n\t\t{ id: \"chart-line-dots-colors\", component: ChartLineDotsColors },\n\t\t{ id: \"chart-line-label\", component: ChartLineLabel },\n\t\t{ id: \"chart-line-label-custom\", component: ChartLineLabelCustom },\n\t],\n\tpie: [\n\t\t{ id: \"chart-pie-simple\", component: ChartPieSimple },\n\t\t// { id: \"chart-pie-separator-none\", component: ChartPieSeparatorNone },\n\t\t{ id: \"chart-pie-label\", component: ChartPieLabel },\n\t\t{ id: \"chart-pie-label-custom\", component: ChartPieLabelCustom },\n\t\t{ id: \"chart-pie-label-list\", component: ChartPieLabelList },\n\t\t{ id: \"chart-pie-legend\", component: ChartPieLegend },\n\t\t{ id: \"chart-pie-donut\", component: ChartPieDonut },\n\t\t{ id: \"chart-pie-donut-active\", component: ChartPieDonutActive },\n\t\t{ id: \"chart-pie-donut-text\", component: ChartPieDonutText },\n\t\t{ id: \"chart-pie-stacked\", component: ChartPieStacked },\n\t\t{ id: \"chart-pie-interactive\", component: ChartPieInteractive },\n\t],\n\tradar: [\n\t\t{ id: \"chart-radar-default\", component: ChartRadarDefault },\n\t\t{ id: \"chart-radar-dots\", component: ChartRadarDots },\n\t\t{ id: \"chart-radar-lines-only\", component: ChartRadarLinesOnly },\n\t\t{ id: \"chart-radar-label-custom\", component: ChartRadarLabelCustom },\n\t\t{ id: \"chart-radar-grid-custom\", component: ChartRadarGridCustom },\n\t\t{ id: \"chart-radar-grid-none\", component: ChartRadarGridNone },\n\t\t{ id: \"chart-radar-grid-circle\", component: ChartRadarGridCircle },\n\t\t{\n\t\t\tid: \"chart-radar-grid-circle-no-lines\",\n\t\t\tcomponent: ChartRadarGridCircleNoLines,\n\t\t},\n\t\t{ id: \"chart-radar-grid-circle-fill\", component: ChartRadarGridCircleFill },\n\t\t{ id: \"chart-radar-grid-fill\", component: ChartRadarGridFill },\n\t\t{ id: \"chart-radar-multiple\", component: ChartRadarMultiple },\n\t\t{ id: \"chart-radar-legend\", component: ChartRadarLegend },\n\t\t{ id: \"chart-radar-icons\", component: ChartRadarIcons },\n\t\t{ id: \"chart-radar-radius\", component: ChartRadarRadius },\n\t],\n\tradial: [\n\t\t{ id: \"chart-radial-simple\", component: ChartRadialSimple },\n\t\t{ id: \"chart-radial-label\", component: ChartRadialLabel },\n\t\t// { id: \"chart-radial-grid\", component: ChartRadialGrid },\n\t\t{ id: \"chart-radial-text\", component: ChartRadialText },\n\t\t{ id: \"chart-radial-shape\", component: ChartRadialShape },\n\t\t{ id: \"chart-radial-stacked\", component: ChartRadialStacked },\n\t],\n\ttooltip: [\n\t\t{ id: \"chart-tooltip-default\", component: ChartTooltipDefault },\n\t\t{\n\t\t\tid: \"chart-tooltip-indicator-line\",\n\t\t\tcomponent: ChartTooltipIndicatorLine,\n\t\t},\n\t\t{\n\t\t\tid: \"chart-tooltip-indicator-none\",\n\t\t\tcomponent: ChartTooltipIndicatorNone,\n\t\t},\n\t\t{ id: \"chart-tooltip-label-custom\", component: ChartTooltipLabelCustom },\n\t\t{\n\t\t\tid: \"chart-tooltip-label-formatter\",\n\t\t\tcomponent: ChartTooltipLabelFormatter,\n\t\t},\n\t\t{ id: \"chart-tooltip-label-none\", component: ChartTooltipLabelNone },\n\t\t{ id: \"chart-tooltip-formatter\", component: ChartTooltipFormatter },\n\t\t{ id: \"chart-tooltip-icons\", component: ChartTooltipIcons },\n\t\t{ id: \"chart-tooltip-advanced\", component: ChartTooltipAdvanced },\n\t],\n};\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/colors/+layout.svelte",
    "content": "<script lang=\"ts\">\n\timport Announcement from \"$lib/components/announcement.svelte\";\n\timport ColorsNav from \"$lib/components/colors-nav.svelte\";\n\timport Metadata from \"$lib/components/metadata.svelte\";\n\timport PageActions from \"$lib/components/page-header/page-actions.svelte\";\n\timport PageHeaderDescription from \"$lib/components/page-header/page-header-description.svelte\";\n\timport PageHeaderHeading from \"$lib/components/page-header/page-header-heading.svelte\";\n\timport PageHeader from \"$lib/components/page-header/page-header.svelte\";\n\timport Button from \"$lib/registry/ui/button/button.svelte\";\n\n\tconst title = \"Tailwind Colors in Every Format\";\n\tconst description =\n\t\t\"The complete Tailwind color palette in HEX, RGB, HSL, CSS variables, and classes. Ready to copy and paste into your project.\";\n\n\tlet { children } = $props();\n</script>\n\n<Metadata\n\t{title}\n\t{description}\n\togImage={{\n\t\turl: `/og?title=${encodeURIComponent(title)}&description=${encodeURIComponent(description)}`,\n\t}}\n/>\n\n<div>\n\t<PageHeader>\n\t\t<Announcement />\n\t\t<PageHeaderHeading>{title}</PageHeaderHeading>\n\t\t<PageHeaderDescription>{description}</PageHeaderDescription>\n\t\t<PageActions>\n\t\t\t<Button href=\"#colors\" size=\"sm\">Browse Colors</Button>\n\t\t\t<Button href=\"/docs/theming\" variant=\"ghost\" size=\"sm\">Documentation</Button>\n\t\t</PageActions>\n\t</PageHeader>\n\t<div class=\"hidden\">\n\t\t<div class=\"container-wrapper\">\n\t\t\t<div class=\"container flex items-center justify-between gap-8 py-4\">\n\t\t\t\t<ColorsNav class=\"[&>a:first-child]:text-primary flex-1 overflow-hidden\" />\n\t\t\t</div>\n\t\t</div>\n\t</div>\n\t<div class=\"container-wrapper\">\n\t\t<div class=\"container py-6\">\n\t\t\t<section id=\"colors\" class=\"scroll-mt-20\">\n\t\t\t\t{@render children?.()}\n\t\t\t</section>\n\t\t</div>\n\t</div>\n</div>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/colors/+layout.ts",
    "content": "export const prerender = true;\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/colors/+page.svelte",
    "content": "<script lang=\"ts\">\n\timport { getColors } from \"$lib/colors.js\";\n\timport ColorPalette from \"$lib/components/color-palette.svelte\";\n\timport { UseClipboard } from \"$lib/hooks/use-clipboard.svelte.js\";\n\n\tconst colors = getColors();\n\tconst clipboard = new UseClipboard({ delay: 0, reset: false });\n</script>\n\n<div class=\"grid gap-8 lg:gap-16 xl:gap-20\">\n\t{#each colors as colorPalette (colorPalette.name)}\n\t\t<ColorPalette {colorPalette} {clipboard} />\n\t{/each}\n</div>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/docs/+layout.server.ts",
    "content": "export const prerender = true;\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/docs/+layout.svelte",
    "content": "<script lang=\"ts\">\n\timport DocsSidebar from \"$lib/components/docs-sidebar.svelte\";\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\timport { sidebarNavItems } from \"$lib/navigation.js\";\n\tlet { children } = $props();\n</script>\n\n<div class=\"container-wrapper flex flex-1 flex-col px-2\">\n\t<Sidebar.Provider\n\t\tclass=\"3xl:fixed:container 3xl:fixed:px-3 min-h-min flex-1 items-start px-0 [--sidebar-width:220px] [--top-spacing:0] lg:grid lg:grid-cols-[var(--sidebar-width)_minmax(0,1fr)] lg:[--sidebar-width:240px] lg:[--top-spacing:calc(var(--spacing)*4)]\"\n\t>\n\t\t<DocsSidebar navItems={sidebarNavItems} />\n\t\t<div class=\"h-full w-full\">{@render children()}</div>\n\t</Sidebar.Provider>\n</div>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/docs/[...slug]/+page.svelte",
    "content": "<script lang=\"ts\">\n\timport { Badge } from \"$lib/registry/ui/badge/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport ArrowUpRight from \"@lucide/svelte/icons/arrow-up-right\";\n\timport ArrowLeftIcon from \"@lucide/svelte/icons/arrow-left\";\n\timport ArrowRightIcon from \"@lucide/svelte/icons/arrow-right\";\n\timport DocsToc from \"$lib/components/docs-toc.svelte\";\n\timport { findNeighbors } from \"$lib/navigation.js\";\n\timport { page } from \"$app/state\";\n\timport Cta from \"$lib/components/cta.svelte\";\n\timport ComponentCodeViewer from \"$lib/components/component-code-viewer/component-code-viewer.svelte\";\n\timport Metadata from \"$lib/components/metadata.svelte\";\n\timport Ethical from \"$lib/components/ethical.svelte\";\n\timport DocsCopyPage from \"$lib/components/docs-copy-page.svelte\";\n\timport CtaMobile from \"$lib/components/cta-mobile.svelte\";\n\n\tlet { data } = $props();\n\n\tconst Markdown = $derived(data.component);\n\tconst doc = $derived(data.metadata);\n\tconst apiLink = $derived(doc.links?.api);\n\tconst docLink = $derived(doc.links?.doc);\n\tconst source = $derived(data.viewerData);\n\n\tconst neighbors = $derived(findNeighbors(page.url.pathname));\n</script>\n\n<Metadata\n\ttitle={doc.title}\n\tdescription={doc.description}\n\togImage={{\n\t\turl: `/og?title=${encodeURIComponent(doc.title)}&description=${encodeURIComponent(doc.description)}`,\n\t}}\n\togType=\"article\"\n/>\n\n<!--\nNOTE: The TOC needs to come first in the DOM order to prevent CLS, so we flex-row-reverse\nthe docs container. The issue this resolves is prominent on slow connections (3G).\n  -->\n<div\n\tdata-slot=\"docs\"\n\tclass=\"flex flex-row-reverse items-stretch text-[1.05rem] sm:text-[15px] xl:w-full\"\n\tid=\"main-content\"\n>\n\t<div\n\t\tclass=\"sticky top-[calc(var(--header-height)+1px)] z-30 ms-auto hidden h-[calc(100svh-var(--footer-height)+2rem)] w-72 flex-col gap-4 overflow-hidden overscroll-none pb-8 xl:flex\"\n\t\tdata-llm-ignore\n\t>\n\t\t<div class=\"h-(--top-spacing) shrink-0\"></div>\n\t\t{#if doc.toc.length}\n\t\t\t<div class=\"no-scrollbar overflow-y-auto px-8\">\n\t\t\t\t<DocsToc toc={{ items: doc.toc }} />\n\t\t\t\t<div class=\"h-12\"></div>\n\t\t\t</div>\n\t\t{/if}\n\t\t<div class=\"flex flex-1 flex-col gap-12 px-6\">\n\t\t\t<Cta />\n\t\t</div>\n\t\t<div class=\"flex flex-col gap-12 px-6\">\n\t\t\t<Ethical />\n\t\t</div>\n\t</div>\n\t<div class=\"flex min-w-0 flex-1 flex-col\">\n\t\t<div class=\"h-(--top-spacing) shrink-0\"></div>\n\t\t<div\n\t\t\tclass=\"mx-auto flex w-full max-w-2xl min-w-0 flex-1 flex-col px-4 py-6 text-neutral-800 md:px-0 lg:py-8 dark:text-neutral-300\"\n\t\t>\n\t\t\t<div class=\"flex flex-col gap-2\">\n\t\t\t\t<div class=\"flex flex-col gap-2\">\n\t\t\t\t\t<div class=\"flex items-start justify-between\">\n\t\t\t\t\t\t<h1\n\t\t\t\t\t\t\tclass=\"scroll-m-20 text-4xl font-semibold tracking-tight sm:text-3xl xl:text-4xl\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{doc.title}\n\t\t\t\t\t\t</h1>\n\t\t\t\t\t\t<div\n\t\t\t\t\t\t\tclass=\"docs-nav bg-background/80 border-border/50 fixed inset-x-0 bottom-0 isolate z-50 flex items-center gap-2 border-t px-6 py-4 backdrop-blur-sm sm:static sm:z-0 sm:border-t-0 sm:bg-transparent sm:px-0 sm:pt-1.5 sm:backdrop-blur-none\"\n\t\t\t\t\t\t\tdata-llm-ignore\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<DocsCopyPage />\n\t\t\t\t\t\t\t{#if neighbors.previous}\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\t\tsize=\"icon\"\n\t\t\t\t\t\t\t\t\tclass=\"extend-touch-target ms-auto size-8 shadow-none md:size-7\"\n\t\t\t\t\t\t\t\t\thref={neighbors.previous.href}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<ArrowLeftIcon />\n\t\t\t\t\t\t\t\t\t<span class=\"sr-only\">Previous</span>\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\t{#if neighbors.next}\n\t\t\t\t\t\t\t\t<Button\n\t\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\t\tsize=\"icon\"\n\t\t\t\t\t\t\t\t\tclass=\"extend-touch-target size-8 shadow-none md:size-7\"\n\t\t\t\t\t\t\t\t\thref={neighbors.next.href}\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<span class=\"sr-only\">Next</span>\n\t\t\t\t\t\t\t\t\t<ArrowRightIcon />\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t\t{#if data.metadata.description}\n\t\t\t\t\t\t<p class=\"text-muted-foreground text-[1.05rem] text-balance sm:text-base\">\n\t\t\t\t\t\t\t{doc.description}\n\t\t\t\t\t\t</p>\n\t\t\t\t\t{/if}\n\t\t\t\t</div>\n\t\t\t\t{#if apiLink || docLink || source}\n\t\t\t\t\t<div class=\"flex items-center space-x-2 pt-4\">\n\t\t\t\t\t\t{#if docLink}\n\t\t\t\t\t\t\t<Badge\n\t\t\t\t\t\t\t\thref={docLink}\n\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t\t\trel=\"noreferrer\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tDocs\n\t\t\t\t\t\t\t\t<ArrowUpRight aria-hidden=\"true\" />\n\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t{#if apiLink}\n\t\t\t\t\t\t\t<Badge\n\t\t\t\t\t\t\t\thref={apiLink}\n\t\t\t\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\t\t\t\ttarget=\"_blank\"\n\t\t\t\t\t\t\t\trel=\"noreferrer\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\tAPI Reference <ArrowUpRight aria-hidden=\"true\" />\n\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t{#if source}\n\t\t\t\t\t\t\t{#key page.url.pathname}\n\t\t\t\t\t\t\t\t<ComponentCodeViewer item={source} allowSidebar={true} />\n\t\t\t\t\t\t\t{/key}\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t</div>\n\t\t\t\t{/if}\n\t\t\t</div>\n\t\t\t<div class=\"mt-4\">\n\t\t\t\t<CtaMobile />\n\t\t\t</div>\n\t\t\t<div class=\"w-full flex-1 *:data-[slot=alert]:first:mt-0\">\n\t\t\t\t<Markdown viewerData={data.viewerData} />\n\t\t\t</div>\n\t\t</div>\n\t\t<div\n\t\t\tclass=\"mx-auto hidden h-16 w-full max-w-2xl items-center gap-2 px-4 sm:flex md:px-0\"\n\t\t\tdata-llm-ignore\n\t\t>\n\t\t\t{#if neighbors.previous}\n\t\t\t\t<Button\n\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\tclass=\"shadow-none\"\n\t\t\t\t\thref={neighbors.previous.href}\n\t\t\t\t>\n\t\t\t\t\t<ArrowLeftIcon />\n\t\t\t\t\t{neighbors.previous.title}\n\t\t\t\t</Button>\n\t\t\t{/if}\n\t\t\t{#if neighbors.next}\n\t\t\t\t<Button\n\t\t\t\t\tvariant=\"secondary\"\n\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\tclass=\"ms-auto shadow-none\"\n\t\t\t\t\thref={neighbors.next.href}\n\t\t\t\t>\n\t\t\t\t\t{neighbors.next.title}\n\t\t\t\t\t<ArrowRightIcon />\n\t\t\t\t</Button>\n\t\t\t{/if}\n\t\t</div>\n\t</div>\n</div>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/docs/[...slug]/+page.ts",
    "content": "import { getDoc } from \"$lib/docs.js\";\nimport type { HighlightedBlock } from \"../../../../api/block/[block]/+server.js\";\nimport type { EntryGenerator, PageLoad } from \"./$types.js\";\n\nexport const prerender = true;\n\nexport const entries: EntryGenerator = () => {\n\tconsole.info(\"Prerendering /docs\");\n\tconst modules = import.meta.glob(\"/content/**/*.md\");\n\tconst entries = [];\n\n\tfor (const path of Object.keys(modules)) {\n\t\tconst slug = path.replace(\"/content/\", \"\").replace(\".md\", \"\").replace(\"/index\", \"\");\n\t\tentries.push({ slug });\n\t}\n\n\treturn entries;\n};\n\n/**\n * Any components / blocks that won't have a .json file associated with them.\n */\nconst ITEMS_TO_IGNORE = [\"combobox\", \"date-picker\", \"typography\"];\n\nexport const load: PageLoad = async ({ params, fetch }) => {\n\tconst doc = await getDoc(params.slug);\n\tconst name = doc.metadata.slug;\n\tif (params.slug.includes(\"components/\") && !ITEMS_TO_IGNORE.includes(name)) {\n\t\tconst res = await fetch(`/api/block/${name}`);\n\t\tconst item: HighlightedBlock = await res.json();\n\n\t\treturn { ...doc, viewerData: item };\n\t}\n\n\treturn { ...doc, viewerData: null };\n};\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/examples/+layout.svelte",
    "content": "<script lang=\"ts\">\n\timport Announcement from \"$lib/components/announcement.svelte\";\n\timport ExamplesNav from \"$lib/components/examples-nav.svelte\";\n\timport Metadata from \"$lib/components/metadata.svelte\";\n\timport PageActions from \"$lib/components/page-header/page-actions.svelte\";\n\timport PageHeaderDescription from \"$lib/components/page-header/page-header-description.svelte\";\n\timport PageHeaderHeading from \"$lib/components/page-header/page-header-heading.svelte\";\n\timport PageHeader from \"$lib/components/page-header/page-header.svelte\";\n\timport PageNav from \"$lib/components/page-nav.svelte\";\n\timport ThemeSelector from \"$lib/components/theme-selector.svelte\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\n\tlet { children } = $props();\n\n\tconst title = \"Examples\";\n\tconst description = \"Check out some example apps build using the components.\";\n</script>\n\n<Metadata\n\t{title}\n\t{description}\n\togImage={{\n\t\turl: `/og?title=${encodeURIComponent(title)}&description=${encodeURIComponent(description)}`,\n\t}}\n/>\n\n<PageHeader>\n\t<Announcement />\n\t<PageHeaderHeading>The Foundation for your Design System</PageHeaderHeading>\n\t<PageHeaderDescription>\n\t\tA set of beautifully designed components that you can customize, extend, and build on. Start\n\t\there then make it your own. Open Source. Open Code.\n\t</PageHeaderDescription>\n\t<PageActions>\n\t\t<Button href=\"/docs\" size=\"sm\">Get Started</Button>\n\t\t<Button href=\"/blocks\" size=\"sm\" variant=\"ghost\">Browse Blocks</Button>\n\t</PageActions>\n</PageHeader>\n<PageNav id=\"examples\">\n\t<ExamplesNav class=\"[&>a:first-child]:text-primary flex-1 overflow-hidden\" />\n\t<ThemeSelector class=\"me-4 hidden md:block\" />\n</PageNav>\n<div class=\"container-wrapper section-soft flex flex-1 flex-col pb-6\">\n\t<div class=\"theme-container container flex flex-1 scroll-mt-20 flex-col\">\n\t\t<div\n\t\t\tclass=\"bg-background flex flex-col overflow-hidden rounded-lg border bg-clip-padding md:flex-1 xl:rounded-xl\"\n\t\t>\n\t\t\t{@render children()}\n\t\t</div>\n\t</div>\n</div>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/examples/+layout.ts",
    "content": "export const prerender = true;\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/examples/+page.svelte",
    "content": ""
  },
  {
    "path": "docs/src/routes/(app)/(layout)/examples/+page.ts",
    "content": "import { redirect } from \"@sveltejs/kit\";\nimport type { PageLoad } from \"./$types.js\";\n\nexport const load: PageLoad = async () => {\n\tredirect(302, \"/examples/dashboard\");\n};\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/examples/authentication/(components)/user-auth-form.svelte",
    "content": "<script lang=\"ts\">\n\timport GithubIcon from \"$lib/components/github.svelte\";\n\timport SpinnerIcon from \"$lib/components/spinner.svelte\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport { Input } from \"$lib/registry/ui/input/index.js\";\n\timport { Label } from \"$lib/registry/ui/label/index.js\";\n\timport { cn } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet { class: className, ...restProps }: HTMLAttributes<HTMLElement> = $props();\n\n\tlet isLoading = $state(false);\n\tasync function onSubmit(e: Event) {\n\t\te.preventDefault();\n\t\tisLoading = true;\n\n\t\tsetTimeout(() => {\n\t\t\tisLoading = false;\n\t\t}, 3000);\n\t}\n</script>\n\n<div class={cn(\"grid gap-6\", className)} {...restProps}>\n\t<form onsubmit={onSubmit}>\n\t\t<div class=\"grid gap-2\">\n\t\t\t<div class=\"grid gap-1\">\n\t\t\t\t<Label class=\"sr-only\" for=\"email\">Email</Label>\n\t\t\t\t<Input\n\t\t\t\t\tid=\"email\"\n\t\t\t\t\tplaceholder=\"name@example.com\"\n\t\t\t\t\ttype=\"email\"\n\t\t\t\t\tautocapitalize=\"none\"\n\t\t\t\t\tautocomplete=\"email\"\n\t\t\t\t\tautocorrect=\"off\"\n\t\t\t\t\tdisabled={isLoading}\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t<Button disabled={isLoading}>\n\t\t\t\t{#if isLoading}\n\t\t\t\t\t<SpinnerIcon class=\"me-2 size-4 animate-spin\" />\n\t\t\t\t{/if}\n\t\t\t\tSign In with Email\n\t\t\t</Button>\n\t\t</div>\n\t</form>\n\t<div class=\"relative\">\n\t\t<div class=\"absolute inset-0 flex items-center\">\n\t\t\t<span class=\"w-full border-t\"></span>\n\t\t</div>\n\t\t<div class=\"relative flex justify-center text-xs uppercase\">\n\t\t\t<span class=\"bg-background text-muted-foreground px-2\"> Or continue with </span>\n\t\t</div>\n\t</div>\n\t<Button variant=\"outline\" type=\"button\" disabled={isLoading}>\n\t\t{#if isLoading}\n\t\t\t<SpinnerIcon class=\"me-2 size-4 animate-spin\" />\n\t\t{:else}\n\t\t\t<GithubIcon class=\"me-2 size-4\" />\n\t\t{/if}\n\t\tGitHub\n\t</Button>\n</div>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/examples/authentication/+page.svelte",
    "content": "<script lang=\"ts\">\n\timport UserAuthForm from \"./(components)/user-auth-form.svelte\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport Metadata from \"$lib/components/metadata.svelte\";\n\n\tconst title = \"Authentication\";\n\tconst description = \"Authentication forms build using the components.\";\n</script>\n\n<Metadata\n\t{title}\n\t{description}\n\togImage={{\n\t\turl: `/og?title=${encodeURIComponent(title)}&description=${encodeURIComponent(description)}`,\n\t}}\n/>\n\n<div class=\"md:hidden\">\n\t<img\n\t\tsrc=\"/img/examples/authentication-light.png\"\n\t\talt=\"Authentication\"\n\t\tclass=\"block dark:hidden\"\n\t/>\n\t<img\n\t\tsrc=\"/img/examples/authentication-dark.png\"\n\t\talt=\"Authentication\"\n\t\tclass=\"hidden dark:block\"\n\t/>\n</div>\n\n<div\n\tclass=\"relative container hidden h-[800px] flex-col items-center justify-center md:grid lg:max-w-none lg:grid-cols-2 lg:px-0\"\n>\n\t<Button\n\t\thref=\"/examples/authentication\"\n\t\tvariant=\"ghost\"\n\t\tclass=\"absolute end-4 top-4 md:end-8 md:top-8\"\n\t>\n\t\tLogin\n\t</Button>\n\t<div class=\"bg-muted relative hidden h-full flex-col p-10 text-white lg:flex dark:border-e\">\n\t\t<div class=\"absolute inset-0 bg-zinc-900\"></div>\n\t\t<div class=\"relative z-20 flex items-center text-lg font-medium\">\n\t\t\t<svg\n\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\t\tviewBox=\"0 0 24 24\"\n\t\t\t\tfill=\"none\"\n\t\t\t\tstroke=\"currentColor\"\n\t\t\t\tstroke-width=\"2\"\n\t\t\t\tstroke-linecap=\"round\"\n\t\t\t\tstroke-linejoin=\"round\"\n\t\t\t\tclass=\"me-2 h-6 w-6\"\n\t\t\t>\n\t\t\t\t<path d=\"M15 6v12a3 3 0 1 0 3-3H6a3 3 0 1 0 3 3V6a3 3 0 1 0-3 3h12a3 3 0 1 0-3-3\" />\n\t\t\t</svg>\n\t\t\tAcme Inc\n\t\t</div>\n\t\t<div class=\"relative z-20 mt-auto\">\n\t\t\t<blockquote class=\"space-y-2\">\n\t\t\t\t<p class=\"text-lg\">\n\t\t\t\t\t&ldquo;This library has saved me countless hours of work and helped me deliver\n\t\t\t\t\tstunning designs to my clients faster than ever before.&rdquo;\n\t\t\t\t</p>\n\t\t\t\t<footer class=\"text-sm\">Sofia Davis</footer>\n\t\t\t</blockquote>\n\t\t</div>\n\t</div>\n\t<div class=\"lg:p-8\">\n\t\t<div class=\"mx-auto flex w-full flex-col justify-center space-y-6 sm:w-[350px]\">\n\t\t\t<div class=\"flex flex-col space-y-2 text-center\">\n\t\t\t\t<h1 class=\"text-2xl font-semibold tracking-tight\">Create an account</h1>\n\t\t\t\t<p class=\"text-muted-foreground text-sm\">\n\t\t\t\t\tEnter your email below to create your account\n\t\t\t\t</p>\n\t\t\t</div>\n\t\t\t<UserAuthForm />\n\t\t\t<p class=\"text-muted-foreground px-8 text-center text-sm\">\n\t\t\t\tBy clicking continue, you agree to our\n\t\t\t\t<a href=\"/terms\" class=\"hover:text-primary underline underline-offset-4\">\n\t\t\t\t\tTerms of Service\n\t\t\t\t</a>\n\t\t\t\tand\n\t\t\t\t<a href=\"/privacy\" class=\"hover:text-primary underline underline-offset-4\">\n\t\t\t\t\tPrivacy Policy\n\t\t\t\t</a>.\n\t\t\t</p>\n\t\t</div>\n\t</div>\n</div>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/examples/dashboard/+page.svelte",
    "content": "<script lang=\"ts\">\n\timport Metadata from \"$lib/components/metadata.svelte\";\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\timport AppSidebar from \"./components/app-sidebar.svelte\";\n\timport ChartAreaInteractive from \"./components/chart-area-interactive.svelte\";\n\timport DataTable from \"./components/data-table.svelte\";\n\timport SectionCards from \"./components/section-cards.svelte\";\n\timport SiteHeader from \"./components/site-header.svelte\";\n\timport { data } from \"./data.js\";\n\n\tconst title = \"Dashboard\";\n\tconst description = \"A dashboard built using the components.\";\n</script>\n\n<Metadata\n\t{title}\n\t{description}\n\togImage={{\n\t\turl: `/og?title=${encodeURIComponent(title)}&description=${encodeURIComponent(description)}`,\n\t}}\n/>\n\n<div class=\"md:hidden\">\n\t<img\n\t\tsrc=\"/img/examples/dashboard-light.png\"\n\t\twidth={1280}\n\t\theight={843}\n\t\talt=\"Dashboard\"\n\t\tclass=\"block dark:hidden\"\n\t/>\n\t<img\n\t\tsrc=\"/img/examples/dashboard-dark.png\"\n\t\twidth={1280}\n\t\theight={843}\n\t\talt=\"Dashboard\"\n\t\tclass=\"hidden dark:block\"\n\t/>\n</div>\n<Sidebar.Provider\n\tclass=\"hidden md:flex\"\n\tstyle=\"--sidebar-width: calc(var(--spacing) * 64); --header-height: calc(var(--spacing) * 12 + 1px);\"\n>\n\t<AppSidebar variant=\"sidebar\" />\n\t<Sidebar.Inset>\n\t\t<SiteHeader />\n\t\t<div class=\"flex flex-1 flex-col\">\n\t\t\t<div class=\"@container/main flex flex-1 flex-col gap-2\">\n\t\t\t\t<div class=\"flex flex-col gap-4 py-4 md:gap-6 md:py-6\">\n\t\t\t\t\t<SectionCards />\n\t\t\t\t\t<div class=\"px-4 lg:px-6\">\n\t\t\t\t\t\t<ChartAreaInteractive />\n\t\t\t\t\t</div>\n\t\t\t\t\t<DataTable {data} />\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</Sidebar.Inset>\n</Sidebar.Provider>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/examples/dashboard/components/app-sidebar.svelte",
    "content": "<script lang=\"ts\">\n\timport CameraIcon from \"@tabler/icons-svelte/icons/camera\";\n\timport ChartBarIcon from \"@tabler/icons-svelte/icons/chart-bar\";\n\timport DashboardIcon from \"@tabler/icons-svelte/icons/dashboard\";\n\timport DatabaseIcon from \"@tabler/icons-svelte/icons/database\";\n\timport FileAiIcon from \"@tabler/icons-svelte/icons/file-ai\";\n\timport FileDescriptionIcon from \"@tabler/icons-svelte/icons/file-description\";\n\timport FileWordIcon from \"@tabler/icons-svelte/icons/file-word\";\n\timport FolderIcon from \"@tabler/icons-svelte/icons/folder\";\n\timport HelpIcon from \"@tabler/icons-svelte/icons/help\";\n\timport InnerShadowTopIcon from \"@tabler/icons-svelte/icons/inner-shadow-top\";\n\timport ListDetailsIcon from \"@tabler/icons-svelte/icons/list-details\";\n\timport ReportIcon from \"@tabler/icons-svelte/icons/report\";\n\timport SearchIcon from \"@tabler/icons-svelte/icons/search\";\n\timport SettingsIcon from \"@tabler/icons-svelte/icons/settings\";\n\timport UsersIcon from \"@tabler/icons-svelte/icons/users\";\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\timport NavDocuments from \"./nav-documents.svelte\";\n\timport NavMain from \"./nav-main.svelte\";\n\timport NavSecondary from \"./nav-secondary.svelte\";\n\timport NavUser from \"./nav-user.svelte\";\n\timport type { ComponentProps } from \"svelte\";\n\n\tconst data = {\n\t\tuser: {\n\t\t\tname: \"shadcn\",\n\t\t\temail: \"m@example.com\",\n\t\t\tavatar: \"/avatars/shadcn.jpg\",\n\t\t},\n\t\tnavMain: [\n\t\t\t{\n\t\t\t\ttitle: \"Dashboard\",\n\t\t\t\turl: \"#\",\n\t\t\t\ticon: DashboardIcon,\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"Lifecycle\",\n\t\t\t\turl: \"#\",\n\t\t\t\ticon: ListDetailsIcon,\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"Analytics\",\n\t\t\t\turl: \"#\",\n\t\t\t\ticon: ChartBarIcon,\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"Projects\",\n\t\t\t\turl: \"#\",\n\t\t\t\ticon: FolderIcon,\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"Team\",\n\t\t\t\turl: \"#\",\n\t\t\t\ticon: UsersIcon,\n\t\t\t},\n\t\t],\n\t\tnavClouds: [\n\t\t\t{\n\t\t\t\ttitle: \"Capture\",\n\t\t\t\ticon: CameraIcon,\n\t\t\t\tisActive: true,\n\t\t\t\turl: \"#\",\n\t\t\t\titems: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Active Proposals\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Archived\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"Proposal\",\n\t\t\t\ticon: FileDescriptionIcon,\n\t\t\t\turl: \"#\",\n\t\t\t\titems: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Active Proposals\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Archived\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"Prompts\",\n\t\t\t\ticon: FileAiIcon,\n\t\t\t\turl: \"#\",\n\t\t\t\titems: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Active Proposals\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ttitle: \"Archived\",\n\t\t\t\t\t\turl: \"#\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t},\n\t\t],\n\t\tnavSecondary: [\n\t\t\t{\n\t\t\t\ttitle: \"Settings\",\n\t\t\t\turl: \"#\",\n\t\t\t\ticon: SettingsIcon,\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"Get Help\",\n\t\t\t\turl: \"#\",\n\t\t\t\ticon: HelpIcon,\n\t\t\t},\n\t\t\t{\n\t\t\t\ttitle: \"Search\",\n\t\t\t\turl: \"#\",\n\t\t\t\ticon: SearchIcon,\n\t\t\t},\n\t\t],\n\t\tdocuments: [\n\t\t\t{\n\t\t\t\tname: \"Data Library\",\n\t\t\t\turl: \"#\",\n\t\t\t\ticon: DatabaseIcon,\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"Reports\",\n\t\t\t\turl: \"#\",\n\t\t\t\ticon: ReportIcon,\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: \"Word Assistant\",\n\t\t\t\turl: \"#\",\n\t\t\t\ticon: FileWordIcon,\n\t\t\t},\n\t\t],\n\t};\n\n\tlet { ...restProps }: ComponentProps<typeof Sidebar.Root> = $props();\n</script>\n\n<Sidebar.Root collapsible=\"none\" class=\"h-auto border-e\" {...restProps}>\n\t<Sidebar.Header class=\"border-b\">\n\t\t<Sidebar.Menu>\n\t\t\t<Sidebar.MenuItem>\n\t\t\t\t<Sidebar.MenuButton class=\"data-[slot=sidebar-menu-button]:!p-1.5\">\n\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t<a href=\"##\" {...props}>\n\t\t\t\t\t\t\t<InnerShadowTopIcon class=\"!size-5\" />\n\t\t\t\t\t\t\t<span class=\"text-base font-semibold\">Acme Inc.</span>\n\t\t\t\t\t\t</a>\n\t\t\t\t\t{/snippet}\n\t\t\t\t</Sidebar.MenuButton>\n\t\t\t</Sidebar.MenuItem>\n\t\t</Sidebar.Menu>\n\t</Sidebar.Header>\n\t<Sidebar.Content>\n\t\t<NavMain items={data.navMain} />\n\t\t<NavDocuments items={data.documents} />\n\t\t<NavSecondary items={data.navSecondary} class=\"mt-auto\" />\n\t</Sidebar.Content>\n\t<Sidebar.Footer>\n\t\t<NavUser user={data.user} />\n\t</Sidebar.Footer>\n</Sidebar.Root>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/examples/dashboard/components/chart-area-interactive.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport * as Select from \"$lib/registry/ui/select/index.js\";\n\timport * as ToggleGroup from \"$lib/registry/ui/toggle-group/index.js\";\n\timport { scaleUtc } from \"d3-scale\";\n\timport { Area, AreaChart, ChartClipPath } from \"layerchart\";\n\timport { curveNatural } from \"d3-shape\";\n\timport { cubicInOut } from \"svelte/easing\";\n\n\tconst chartData = [\n\t\t{ date: new Date(\"2024-04-01\"), desktop: 222, mobile: 150 },\n\t\t{ date: new Date(\"2024-04-02\"), desktop: 97, mobile: 180 },\n\t\t{ date: new Date(\"2024-04-03\"), desktop: 167, mobile: 120 },\n\t\t{ date: new Date(\"2024-04-04\"), desktop: 242, mobile: 260 },\n\t\t{ date: new Date(\"2024-04-05\"), desktop: 373, mobile: 290 },\n\t\t{ date: new Date(\"2024-04-06\"), desktop: 301, mobile: 340 },\n\t\t{ date: new Date(\"2024-04-07\"), desktop: 245, mobile: 180 },\n\t\t{ date: new Date(\"2024-04-08\"), desktop: 409, mobile: 320 },\n\t\t{ date: new Date(\"2024-04-09\"), desktop: 59, mobile: 110 },\n\t\t{ date: new Date(\"2024-04-10\"), desktop: 261, mobile: 190 },\n\t\t{ date: new Date(\"2024-04-11\"), desktop: 327, mobile: 350 },\n\t\t{ date: new Date(\"2024-04-12\"), desktop: 292, mobile: 210 },\n\t\t{ date: new Date(\"2024-04-13\"), desktop: 342, mobile: 380 },\n\t\t{ date: new Date(\"2024-04-14\"), desktop: 137, mobile: 220 },\n\t\t{ date: new Date(\"2024-04-15\"), desktop: 120, mobile: 170 },\n\t\t{ date: new Date(\"2024-04-16\"), desktop: 138, mobile: 190 },\n\t\t{ date: new Date(\"2024-04-17\"), desktop: 446, mobile: 360 },\n\t\t{ date: new Date(\"2024-04-18\"), desktop: 364, mobile: 410 },\n\t\t{ date: new Date(\"2024-04-19\"), desktop: 243, mobile: 180 },\n\t\t{ date: new Date(\"2024-04-20\"), desktop: 89, mobile: 150 },\n\t\t{ date: new Date(\"2024-04-21\"), desktop: 137, mobile: 200 },\n\t\t{ date: new Date(\"2024-04-22\"), desktop: 224, mobile: 170 },\n\t\t{ date: new Date(\"2024-04-23\"), desktop: 138, mobile: 230 },\n\t\t{ date: new Date(\"2024-04-24\"), desktop: 387, mobile: 290 },\n\t\t{ date: new Date(\"2024-04-25\"), desktop: 215, mobile: 250 },\n\t\t{ date: new Date(\"2024-04-26\"), desktop: 75, mobile: 130 },\n\t\t{ date: new Date(\"2024-04-27\"), desktop: 383, mobile: 420 },\n\t\t{ date: new Date(\"2024-04-28\"), desktop: 122, mobile: 180 },\n\t\t{ date: new Date(\"2024-04-29\"), desktop: 315, mobile: 240 },\n\t\t{ date: new Date(\"2024-04-30\"), desktop: 454, mobile: 380 },\n\t\t{ date: new Date(\"2024-05-01\"), desktop: 165, mobile: 220 },\n\t\t{ date: new Date(\"2024-05-02\"), desktop: 293, mobile: 310 },\n\t\t{ date: new Date(\"2024-05-03\"), desktop: 247, mobile: 190 },\n\t\t{ date: new Date(\"2024-05-04\"), desktop: 385, mobile: 420 },\n\t\t{ date: new Date(\"2024-05-05\"), desktop: 481, mobile: 390 },\n\t\t{ date: new Date(\"2024-05-06\"), desktop: 498, mobile: 520 },\n\t\t{ date: new Date(\"2024-05-07\"), desktop: 388, mobile: 300 },\n\t\t{ date: new Date(\"2024-05-08\"), desktop: 149, mobile: 210 },\n\t\t{ date: new Date(\"2024-05-09\"), desktop: 227, mobile: 180 },\n\t\t{ date: new Date(\"2024-05-10\"), desktop: 293, mobile: 330 },\n\t\t{ date: new Date(\"2024-05-11\"), desktop: 335, mobile: 270 },\n\t\t{ date: new Date(\"2024-05-12\"), desktop: 197, mobile: 240 },\n\t\t{ date: new Date(\"2024-05-13\"), desktop: 197, mobile: 160 },\n\t\t{ date: new Date(\"2024-05-14\"), desktop: 448, mobile: 490 },\n\t\t{ date: new Date(\"2024-05-15\"), desktop: 473, mobile: 380 },\n\t\t{ date: new Date(\"2024-05-16\"), desktop: 338, mobile: 400 },\n\t\t{ date: new Date(\"2024-05-17\"), desktop: 499, mobile: 420 },\n\t\t{ date: new Date(\"2024-05-18\"), desktop: 315, mobile: 350 },\n\t\t{ date: new Date(\"2024-05-19\"), desktop: 235, mobile: 180 },\n\t\t{ date: new Date(\"2024-05-20\"), desktop: 177, mobile: 230 },\n\t\t{ date: new Date(\"2024-05-21\"), desktop: 82, mobile: 140 },\n\t\t{ date: new Date(\"2024-05-22\"), desktop: 81, mobile: 120 },\n\t\t{ date: new Date(\"2024-05-23\"), desktop: 252, mobile: 290 },\n\t\t{ date: new Date(\"2024-05-24\"), desktop: 294, mobile: 220 },\n\t\t{ date: new Date(\"2024-05-25\"), desktop: 201, mobile: 250 },\n\t\t{ date: new Date(\"2024-05-26\"), desktop: 213, mobile: 170 },\n\t\t{ date: new Date(\"2024-05-27\"), desktop: 420, mobile: 460 },\n\t\t{ date: new Date(\"2024-05-28\"), desktop: 233, mobile: 190 },\n\t\t{ date: new Date(\"2024-05-29\"), desktop: 78, mobile: 130 },\n\t\t{ date: new Date(\"2024-05-30\"), desktop: 340, mobile: 280 },\n\t\t{ date: new Date(\"2024-05-31\"), desktop: 178, mobile: 230 },\n\t\t{ date: new Date(\"2024-06-01\"), desktop: 178, mobile: 200 },\n\t\t{ date: new Date(\"2024-06-02\"), desktop: 470, mobile: 410 },\n\t\t{ date: new Date(\"2024-06-03\"), desktop: 103, mobile: 160 },\n\t\t{ date: new Date(\"2024-06-04\"), desktop: 439, mobile: 380 },\n\t\t{ date: new Date(\"2024-06-05\"), desktop: 88, mobile: 140 },\n\t\t{ date: new Date(\"2024-06-06\"), desktop: 294, mobile: 250 },\n\t\t{ date: new Date(\"2024-06-07\"), desktop: 323, mobile: 370 },\n\t\t{ date: new Date(\"2024-06-08\"), desktop: 385, mobile: 320 },\n\t\t{ date: new Date(\"2024-06-09\"), desktop: 438, mobile: 480 },\n\t\t{ date: new Date(\"2024-06-10\"), desktop: 155, mobile: 200 },\n\t\t{ date: new Date(\"2024-06-11\"), desktop: 92, mobile: 150 },\n\t\t{ date: new Date(\"2024-06-12\"), desktop: 492, mobile: 420 },\n\t\t{ date: new Date(\"2024-06-13\"), desktop: 81, mobile: 130 },\n\t\t{ date: new Date(\"2024-06-14\"), desktop: 426, mobile: 380 },\n\t\t{ date: new Date(\"2024-06-15\"), desktop: 307, mobile: 350 },\n\t\t{ date: new Date(\"2024-06-16\"), desktop: 371, mobile: 310 },\n\t\t{ date: new Date(\"2024-06-17\"), desktop: 475, mobile: 520 },\n\t\t{ date: new Date(\"2024-06-18\"), desktop: 107, mobile: 170 },\n\t\t{ date: new Date(\"2024-06-19\"), desktop: 341, mobile: 290 },\n\t\t{ date: new Date(\"2024-06-20\"), desktop: 408, mobile: 450 },\n\t\t{ date: new Date(\"2024-06-21\"), desktop: 169, mobile: 210 },\n\t\t{ date: new Date(\"2024-06-22\"), desktop: 317, mobile: 270 },\n\t\t{ date: new Date(\"2024-06-23\"), desktop: 480, mobile: 530 },\n\t\t{ date: new Date(\"2024-06-24\"), desktop: 132, mobile: 180 },\n\t\t{ date: new Date(\"2024-06-25\"), desktop: 141, mobile: 190 },\n\t\t{ date: new Date(\"2024-06-26\"), desktop: 434, mobile: 380 },\n\t\t{ date: new Date(\"2024-06-27\"), desktop: 448, mobile: 490 },\n\t\t{ date: new Date(\"2024-06-28\"), desktop: 149, mobile: 200 },\n\t\t{ date: new Date(\"2024-06-29\"), desktop: 103, mobile: 160 },\n\t\t{ date: new Date(\"2024-06-30\"), desktop: 446, mobile: 400 },\n\t];\n\n\tlet timeRange = $state(\"90d\");\n\n\tconst selectedLabel = $derived.by(() => {\n\t\tswitch (timeRange) {\n\t\t\tcase \"90d\":\n\t\t\t\treturn \"Last 3 months\";\n\t\t\tcase \"30d\":\n\t\t\t\treturn \"Last 30 days\";\n\t\t\tcase \"7d\":\n\t\t\t\treturn \"Last 7 days\";\n\t\t\tdefault:\n\t\t\t\treturn \"Last 3 months\";\n\t\t}\n\t});\n\n\tconst filteredData = $derived(\n\t\tchartData.filter((item) => {\n\t\t\t// eslint-disable-next-line svelte/prefer-svelte-reactivity\n\t\t\tconst referenceDate = new Date(\"2024-06-30\");\n\t\t\tlet daysToSubtract = 90;\n\t\t\tif (timeRange === \"30d\") {\n\t\t\t\tdaysToSubtract = 30;\n\t\t\t} else if (timeRange === \"7d\") {\n\t\t\t\tdaysToSubtract = 7;\n\t\t\t}\n\n\t\t\treferenceDate.setDate(referenceDate.getDate() - daysToSubtract);\n\t\t\treturn item.date >= referenceDate;\n\t\t})\n\t);\n\n\tconst chartConfig = {\n\t\tdesktop: { label: \"Desktop\", color: \"var(--primary)\" },\n\t\tmobile: { label: \"Mobile\", color: \"var(--primary)\" },\n\t} satisfies Chart.ChartConfig;\n</script>\n\n<Card.Root class=\"@container/card\">\n\t<Card.Header>\n\t\t<Card.Title>Total Visitors</Card.Title>\n\t\t<Card.Description>\n\t\t\t<span class=\"hidden @[540px]/card:block\"> Total for the last 3 months </span>\n\t\t\t<span class=\"@[540px]/card:hidden\">Last 3 months</span>\n\t\t</Card.Description>\n\t\t<Card.Action>\n\t\t\t<ToggleGroup.Root\n\t\t\t\ttype=\"single\"\n\t\t\t\tbind:value={timeRange}\n\t\t\t\tvariant=\"outline\"\n\t\t\t\tclass=\"hidden *:data-[slot=toggle-group-item]:!px-4 @[767px]/card:flex\"\n\t\t\t>\n\t\t\t\t<ToggleGroup.Item value=\"90d\">Last 3 months</ToggleGroup.Item>\n\t\t\t\t<ToggleGroup.Item value=\"30d\">Last 30 days</ToggleGroup.Item>\n\t\t\t\t<ToggleGroup.Item value=\"7d\">Last 7 days</ToggleGroup.Item>\n\t\t\t</ToggleGroup.Root>\n\t\t\t<Select.Root type=\"single\" bind:value={timeRange}>\n\t\t\t\t<Select.Trigger\n\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\tclass=\"flex w-40 **:data-[slot=select-value]:block **:data-[slot=select-value]:truncate @[767px]/card:hidden\"\n\t\t\t\t\taria-label=\"Select a value\"\n\t\t\t\t>\n\t\t\t\t\t<span data-slot=\"select-value\">\n\t\t\t\t\t\t{selectedLabel}\n\t\t\t\t\t</span>\n\t\t\t\t</Select.Trigger>\n\t\t\t\t<Select.Content class=\"rounded-xl\">\n\t\t\t\t\t<Select.Item value=\"90d\" class=\"rounded-lg\">Last 3 months</Select.Item>\n\t\t\t\t\t<Select.Item value=\"30d\" class=\"rounded-lg\">Last 30 days</Select.Item>\n\t\t\t\t\t<Select.Item value=\"7d\" class=\"rounded-lg\">Last 7 days</Select.Item>\n\t\t\t\t</Select.Content>\n\t\t\t</Select.Root>\n\t\t</Card.Action>\n\t</Card.Header>\n\t<Card.Content class=\"px-2 pt-4 sm:px-6 sm:pt-6\">\n\t\t<Chart.Container config={chartConfig} class=\"aspect-auto h-[250px] w-full\">\n\t\t\t<AreaChart\n\t\t\t\tdata={filteredData}\n\t\t\t\tx=\"date\"\n\t\t\t\txScale={scaleUtc()}\n\t\t\t\tseries={[\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"mobile\",\n\t\t\t\t\t\tlabel: \"Mobile\",\n\t\t\t\t\t\tcolor: chartConfig.mobile.color,\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: \"desktop\",\n\t\t\t\t\t\tlabel: \"Desktop\",\n\t\t\t\t\t\tcolor: chartConfig.desktop.color,\n\t\t\t\t\t},\n\t\t\t\t]}\n\t\t\t\tseriesLayout=\"stack\"\n\t\t\t\tprops={{\n\t\t\t\t\tarea: {\n\t\t\t\t\t\tcurve: curveNatural,\n\t\t\t\t\t\t\"fill-opacity\": 0.7,\n\t\t\t\t\t\tline: { class: \"stroke-1\" },\n\t\t\t\t\t\tmotion: \"tween\",\n\t\t\t\t\t},\n\t\t\t\t\txAxis: {\n\t\t\t\t\t\tticks: timeRange === \"7d\" ? 7 : undefined,\n\t\t\t\t\t\tformat: (v) => {\n\t\t\t\t\t\t\treturn v.toLocaleDateString(\"en-US\", {\n\t\t\t\t\t\t\t\tmonth: \"short\",\n\t\t\t\t\t\t\t\tday: \"numeric\",\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\n\t\t\t\t\tyAxis: { format: () => \"\" },\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t{#snippet marks({ series, getAreaProps })}\n\t\t\t\t\t<defs>\n\t\t\t\t\t\t<linearGradient id=\"fillDesktop\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n\t\t\t\t\t\t\t<stop\n\t\t\t\t\t\t\t\toffset=\"5%\"\n\t\t\t\t\t\t\t\tstop-color=\"var(--color-desktop)\"\n\t\t\t\t\t\t\t\tstop-opacity={1.0}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<stop\n\t\t\t\t\t\t\t\toffset=\"95%\"\n\t\t\t\t\t\t\t\tstop-color=\"var(--color-desktop)\"\n\t\t\t\t\t\t\t\tstop-opacity={0.1}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</linearGradient>\n\t\t\t\t\t\t<linearGradient id=\"fillMobile\" x1=\"0\" y1=\"0\" x2=\"0\" y2=\"1\">\n\t\t\t\t\t\t\t<stop offset=\"5%\" stop-color=\"var(--color-mobile)\" stop-opacity={0.8} />\n\t\t\t\t\t\t\t<stop\n\t\t\t\t\t\t\t\toffset=\"95%\"\n\t\t\t\t\t\t\t\tstop-color=\"var(--color-mobile)\"\n\t\t\t\t\t\t\t\tstop-opacity={0.1}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</linearGradient>\n\t\t\t\t\t</defs>\n\t\t\t\t\t<ChartClipPath\n\t\t\t\t\t\tinitialWidth={0}\n\t\t\t\t\t\tmotion={{\n\t\t\t\t\t\t\twidth: { type: \"tween\", duration: 1000, easing: cubicInOut },\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{#each series as s, i (s.key)}\n\t\t\t\t\t\t\t<Area\n\t\t\t\t\t\t\t\t{...getAreaProps(s, i)}\n\t\t\t\t\t\t\t\tfill={s.key === \"desktop\"\n\t\t\t\t\t\t\t\t\t? \"url(#fillDesktop)\"\n\t\t\t\t\t\t\t\t\t: \"url(#fillMobile)\"}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</ChartClipPath>\n\t\t\t\t{/snippet}\n\t\t\t\t{#snippet tooltip()}\n\t\t\t\t\t<Chart.Tooltip\n\t\t\t\t\t\tlabelFormatter={(v: Date) => {\n\t\t\t\t\t\t\treturn v.toLocaleDateString(\"en-US\", {\n\t\t\t\t\t\t\t\tmonth: \"short\",\n\t\t\t\t\t\t\t\tday: \"numeric\",\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}}\n\t\t\t\t\t\tindicator=\"line\"\n\t\t\t\t\t/>\n\t\t\t\t{/snippet}\n\t\t\t</AreaChart>\n\t\t</Chart.Container>\n\t</Card.Content>\n</Card.Root>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/examples/dashboard/components/data-table-actions.svelte",
    "content": "<script lang=\"ts\">\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport DotsVerticalIcon from \"@tabler/icons-svelte/icons/dots-vertical\";\n</script>\n\n<DropdownMenu.Root>\n\t<DropdownMenu.Trigger class=\"data-[state=open]:bg-muted text-muted-foreground flex size-8\">\n\t\t{#snippet child({ props })}\n\t\t\t<Button variant=\"ghost\" size=\"icon\" {...props}>\n\t\t\t\t<DotsVerticalIcon />\n\t\t\t\t<span class=\"sr-only\">Open menu</span>\n\t\t\t</Button>\n\t\t{/snippet}\n\t</DropdownMenu.Trigger>\n\t<DropdownMenu.Content align=\"end\" class=\"w-32\">\n\t\t<DropdownMenu.Item>Edit</DropdownMenu.Item>\n\t\t<DropdownMenu.Item>Make a copy</DropdownMenu.Item>\n\t\t<DropdownMenu.Item>Favorite</DropdownMenu.Item>\n\t\t<DropdownMenu.Separator />\n\t\t<DropdownMenu.Item variant=\"destructive\">Delete</DropdownMenu.Item>\n\t</DropdownMenu.Content>\n</DropdownMenu.Root>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/examples/dashboard/components/data-table-cell-viewer.svelte",
    "content": "<script lang=\"ts\">\n\timport TrendingUpIcon from \"@tabler/icons-svelte/icons/trending-up\";\n\timport { AreaChart } from \"layerchart\";\n\timport { scaleUtc } from \"d3-scale\";\n\timport { curveNatural } from \"d3-shape\";\n\n\timport * as Drawer from \"$lib/registry/ui/drawer/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Chart from \"$lib/registry/ui/chart/index.js\";\n\timport { IsMobile } from \"$lib/registry/hooks/is-mobile.svelte.js\";\n\timport { Label } from \"$lib/registry/ui/label/index.js\";\n\timport { Input } from \"$lib/registry/ui/input/index.js\";\n\timport * as Select from \"$lib/registry/ui/select/index.js\";\n\timport { Separator } from \"$lib/registry/ui/separator/index.js\";\n\timport type { Schema } from \"./schemas.js\";\n\n\tconst chartData = [\n\t\t{ date: new Date(\"2024-01-01\"), desktop: 186, mobile: 80 },\n\t\t{ date: new Date(\"2024-02-01\"), desktop: 305, mobile: 200 },\n\t\t{ date: new Date(\"2024-03-01\"), desktop: 237, mobile: 120 },\n\t\t{ date: new Date(\"2024-04-01\"), desktop: 73, mobile: 190 },\n\t\t{ date: new Date(\"2024-05-01\"), desktop: 209, mobile: 130 },\n\t\t{ date: new Date(\"2024-06-01\"), desktop: 214, mobile: 140 },\n\t];\n\n\tconst chartConfig = {\n\t\tdesktop: {\n\t\t\tlabel: \"Desktop\",\n\t\t\tcolor: \"var(--primary)\",\n\t\t},\n\t\tmobile: {\n\t\t\tlabel: \"Mobile\",\n\t\t\tcolor: \"var(--primary)\",\n\t\t},\n\t} satisfies Chart.ChartConfig;\n\n\tconst isMobile = new IsMobile();\n\n\tlet { item }: { item: Schema } = $props();\n\n\tlet type = $derived(item.type);\n\tlet status = $derived(item.status);\n\tlet reviewer = $derived(item.reviewer);\n</script>\n\n<Drawer.Root direction={isMobile.current ? \"bottom\" : \"right\"}>\n\t<Drawer.Trigger>\n\t\t{#snippet child({ props })}\n\t\t\t<Button variant=\"link\" class=\"text-foreground w-fit px-0 text-start\" {...props}>\n\t\t\t\t{item.header}\n\t\t\t</Button>\n\t\t{/snippet}\n\t</Drawer.Trigger>\n\t<Drawer.Content>\n\t\t<Drawer.Header class=\"gap-1\">\n\t\t\t<Drawer.Title>{item.header}</Drawer.Title>\n\t\t\t<Drawer.Description>Showing total visitors for the last 6 months</Drawer.Description>\n\t\t</Drawer.Header>\n\t\t<div class=\"flex flex-col gap-4 overflow-y-auto px-4 text-sm\">\n\t\t\t{#if !isMobile.current}\n\t\t\t\t<Chart.Container config={chartConfig}>\n\t\t\t\t\t<AreaChart\n\t\t\t\t\t\tdata={chartData}\n\t\t\t\t\t\tx=\"date\"\n\t\t\t\t\t\txScale={scaleUtc()}\n\t\t\t\t\t\tyDomain={[0, 600]}\n\t\t\t\t\t\tseries={[\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tkey: \"mobile\",\n\t\t\t\t\t\t\t\tlabel: \"Mobile\",\n\t\t\t\t\t\t\t\tcolor: chartConfig.mobile.color,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tkey: \"desktop\",\n\t\t\t\t\t\t\t\tlabel: \"Desktop\",\n\t\t\t\t\t\t\t\tcolor: chartConfig.desktop.color,\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t]}\n\t\t\t\t\t\tseriesLayout=\"stack\"\n\t\t\t\t\t\tprops={{\n\t\t\t\t\t\t\tarea: {\n\t\t\t\t\t\t\t\tcurve: curveNatural,\n\t\t\t\t\t\t\t\t\"fill-opacity\": 0.4,\n\t\t\t\t\t\t\t\tline: { class: \"stroke-1\" },\n\t\t\t\t\t\t\t\tmotion: \"tween\",\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\txAxis: {\n\t\t\t\t\t\t\t\tformat: (v) => v.toLocaleDateString(\"en-US\", { month: \"short\" }),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tyAxis: { ticks: [0, 300, 600] },\n\t\t\t\t\t\t}}\n\t\t\t\t\t>\n\t\t\t\t\t\t{#snippet tooltip()}\n\t\t\t\t\t\t\t<Chart.Tooltip\n\t\t\t\t\t\t\t\tlabelFormatter={(v: Date) => {\n\t\t\t\t\t\t\t\t\treturn v.toLocaleDateString(\"en-US\", {\n\t\t\t\t\t\t\t\t\t\tmonth: \"long\",\n\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\tindicator=\"dot\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t</AreaChart>\n\t\t\t\t</Chart.Container>\n\t\t\t\t<Separator />\n\t\t\t\t<div class=\"grid gap-2\">\n\t\t\t\t\t<div class=\"flex gap-2 leading-none font-medium\">\n\t\t\t\t\t\tTrending up by 5.2% this month\n\t\t\t\t\t\t<TrendingUpIcon class=\"size-4\" />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"text-muted-foreground\">\n\t\t\t\t\t\tShowing total visitors for the last 6 months. This is just some random text\n\t\t\t\t\t\tto test the layout. It spans multiple lines and should wrap around.\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<Separator />\n\t\t\t{/if}\n\t\t\t<form class=\"flex flex-col gap-4\">\n\t\t\t\t<div class=\"flex flex-col gap-3\">\n\t\t\t\t\t<Label for=\"header\">Header</Label>\n\t\t\t\t\t<Input id=\"header\" value={item.header} />\n\t\t\t\t</div>\n\t\t\t\t<div class=\"grid grid-cols-2 gap-4\">\n\t\t\t\t\t<div class=\"flex flex-col gap-3\">\n\t\t\t\t\t\t<Label for=\"type\">Type</Label>\n\t\t\t\t\t\t<Select.Root type=\"single\" bind:value={type}>\n\t\t\t\t\t\t\t<Select.Trigger id=\"type\" class=\"w-full\">\n\t\t\t\t\t\t\t\t{type ?? \"Select a type\"}\n\t\t\t\t\t\t\t</Select.Trigger>\n\t\t\t\t\t\t\t<Select.Content>\n\t\t\t\t\t\t\t\t<Select.Item value=\"Table of Contents\"\n\t\t\t\t\t\t\t\t\t>Table of Contents</Select.Item\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<Select.Item value=\"Executive Summary\"\n\t\t\t\t\t\t\t\t\t>Executive Summary</Select.Item\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<Select.Item value=\"Technical Approach\">\n\t\t\t\t\t\t\t\t\tTechnical Approach\n\t\t\t\t\t\t\t\t</Select.Item>\n\t\t\t\t\t\t\t\t<Select.Item value=\"Design\">Design</Select.Item>\n\t\t\t\t\t\t\t\t<Select.Item value=\"Capabilities\">Capabilities</Select.Item>\n\t\t\t\t\t\t\t\t<Select.Item value=\"Focus Documents\">Focus Documents</Select.Item>\n\t\t\t\t\t\t\t\t<Select.Item value=\"Narrative\">Narrative</Select.Item>\n\t\t\t\t\t\t\t\t<Select.Item value=\"Cover Page\">Cover Page</Select.Item>\n\t\t\t\t\t\t\t</Select.Content>\n\t\t\t\t\t\t</Select.Root>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"flex flex-col gap-3\">\n\t\t\t\t\t\t<Label for=\"status\">Status</Label>\n\t\t\t\t\t\t<Select.Root type=\"single\" bind:value={status}>\n\t\t\t\t\t\t\t<Select.Trigger id=\"status\" class=\"w-full\">\n\t\t\t\t\t\t\t\t{status ?? \"Select a status\"}\n\t\t\t\t\t\t\t</Select.Trigger>\n\t\t\t\t\t\t\t<Select.Content>\n\t\t\t\t\t\t\t\t<Select.Item value=\"Done\">Done</Select.Item>\n\t\t\t\t\t\t\t\t<Select.Item value=\"In Progress\">In Progress</Select.Item>\n\t\t\t\t\t\t\t\t<Select.Item value=\"Not Started\">Not Started</Select.Item>\n\t\t\t\t\t\t\t</Select.Content>\n\t\t\t\t\t\t</Select.Root>\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"grid grid-cols-2 gap-4\">\n\t\t\t\t\t<div class=\"flex flex-col gap-3\">\n\t\t\t\t\t\t<Label for=\"target\">Target</Label>\n\t\t\t\t\t\t<Input id=\"target\" value={item.target} />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"flex flex-col gap-3\">\n\t\t\t\t\t\t<Label for=\"limit\">Limit</Label>\n\t\t\t\t\t\t<Input id=\"limit\" value={item.limit} />\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"flex flex-col gap-3\">\n\t\t\t\t\t<Label for=\"reviewer\">Reviewer</Label>\n\t\t\t\t\t<Select.Root type=\"single\" bind:value={reviewer}>\n\t\t\t\t\t\t<Select.Trigger id=\"reviewer\" class=\"w-full\">\n\t\t\t\t\t\t\t{reviewer ?? \"Select a reviewer\"}\n\t\t\t\t\t\t</Select.Trigger>\n\t\t\t\t\t\t<Select.Content>\n\t\t\t\t\t\t\t<Select.Item value=\"Eddie Lake\">Eddie Lake</Select.Item>\n\t\t\t\t\t\t\t<Select.Item value=\"Jamik Tashpulatov\">Jamik Tashpulatov</Select.Item>\n\t\t\t\t\t\t\t<Select.Item value=\"Emily Whalen\">Emily Whalen</Select.Item>\n\t\t\t\t\t\t</Select.Content>\n\t\t\t\t\t</Select.Root>\n\t\t\t\t</div>\n\t\t\t</form>\n\t\t</div>\n\t\t<Drawer.Footer>\n\t\t\t<Button>Submit</Button>\n\t\t\t<Drawer.Close>\n\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t<Button variant=\"outline\" {...props}>Done</Button>\n\t\t\t\t{/snippet}\n\t\t\t</Drawer.Close>\n\t\t</Drawer.Footer>\n\t</Drawer.Content>\n</Drawer.Root>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/examples/dashboard/components/data-table-checkbox.svelte",
    "content": "<script lang=\"ts\">\n\timport { Checkbox } from \"$lib/registry/ui/checkbox/index.js\";\n\timport type { ComponentProps } from \"svelte\";\n\n\tlet {\n\t\tchecked = false,\n\t\tonCheckedChange = (v) => (checked = v),\n\t\t...restProps\n\t}: ComponentProps<typeof Checkbox> = $props();\n</script>\n\n<div class=\"flex items-center justify-center\">\n\t<Checkbox bind:checked={() => checked, onCheckedChange} {...restProps} />\n</div>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/examples/dashboard/components/data-table-drag-handle.svelte",
    "content": "<script lang=\"ts\">\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport GripVerticalIcon from \"@tabler/icons-svelte/icons/grip-vertical\";\n\timport type { Attachment } from \"svelte/attachments\";\n\n\tlet { attach }: { attach?: Attachment } = $props();\n</script>\n\n<Button\n\t{@attach attach}\n\tvariant=\"ghost\"\n\tsize=\"icon\"\n\tclass=\"text-muted-foreground size-7 hover:bg-transparent\"\n>\n\t<GripVerticalIcon class=\"text-muted-foreground size-3\" />\n\t<span class=\"sr-only\">Drag to reorder</span>\n</Button>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/examples/dashboard/components/data-table-header-limit.svelte",
    "content": "<div class=\"w-full text-end\">Limit</div>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/examples/dashboard/components/data-table-header-target.svelte",
    "content": "<div class=\"w-full text-end\">Target</div>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/examples/dashboard/components/data-table-limit.svelte",
    "content": "<script lang=\"ts\">\n\timport { Label } from \"$lib/registry/ui/label/index.js\";\n\timport { Input } from \"$lib/registry/ui/input/index.js\";\n\timport { toast } from \"svelte-sonner\";\n\timport type { Row } from \"@tanstack/table-core\";\n\timport type { Schema } from \"./schemas.js\";\n\n\tlet { row }: { row: Row<Schema> } = $props();\n</script>\n\n<form\n\tonsubmit={(e) => {\n\t\te.preventDefault();\n\t\ttoast.promise(new Promise((resolve) => setTimeout(resolve, 1000)), {\n\t\t\tloading: `Saving ${row.original.header}`,\n\t\t\tsuccess: \"Done\",\n\t\t\terror: \"Error\",\n\t\t});\n\t}}\n>\n\t<Label for=\"{row.original.id}-limit\" class=\"sr-only\">Limit</Label>\n\t<Input\n\t\tclass=\"hover:bg-input/30 focus-visible:bg-background dark:hover:bg-input/30 dark:focus-visible:bg-input/30 h-8 w-16 border-transparent bg-transparent text-end shadow-none focus-visible:border dark:bg-transparent\"\n\t\tvalue={row.original.limit}\n\t\tid=\"{row.original.id}-limit\"\n\t/>\n</form>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/examples/dashboard/components/data-table-reviewer.svelte",
    "content": "<script lang=\"ts\">\n\timport type { Row } from \"@tanstack/table-core\";\n\timport type { Schema } from \"./schemas.js\";\n\timport { Label } from \"$lib/registry/ui/label/index.js\";\n\timport * as Select from \"$lib/registry/ui/select/index.js\";\n\n\tlet { row }: { row: Row<Schema> } = $props();\n\n\tconst isAssigned = $derived(row.original.reviewer !== \"Assign reviewer\");\n\tlet reviewer = $state(\"\");\n</script>\n\n{#if isAssigned}\n\t{row.original.reviewer}\n{:else}\n\t<Label for=\"{row.original.id}-reviewer\" class=\"sr-only\">Reviewer</Label>\n\t<Select.Root type=\"single\" bind:value={reviewer}>\n\t\t<Select.Trigger\n\t\t\tclass=\"w-38 **:data-[slot=select-value]:block **:data-[slot=select-value]:truncate\"\n\t\t\tsize=\"sm\"\n\t\t\tid=\"{row.original.id}-reviewer\"\n\t\t>\n\t\t\t<span data-slot=\"select-value\">\n\t\t\t\t{reviewer !== \"\" ? reviewer : \"Assign reviewer\"}\n\t\t\t</span>\n\t\t</Select.Trigger>\n\t\t<Select.Content align=\"end\">\n\t\t\t<Select.Item value=\"Eddie Lake\">Eddie Lake</Select.Item>\n\t\t\t<Select.Item value=\"Jamik Tashpulatov\">Jamik Tashpulatov</Select.Item>\n\t\t</Select.Content>\n\t</Select.Root>\n{/if}\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/examples/dashboard/components/data-table-status.svelte",
    "content": "<script lang=\"ts\">\n\timport { Badge } from \"$lib/registry/ui/badge/index.js\";\n\timport CircleCheckFilledIcon from \"@tabler/icons-svelte/icons/circle-check-filled\";\n\timport LoaderIcon from \"@tabler/icons-svelte/icons/loader\";\n\timport type { Row } from \"@tanstack/table-core\";\n\timport type { Schema } from \"./schemas.js\";\n\n\tlet { row }: { row: Row<Schema> } = $props();\n</script>\n\n<Badge variant=\"outline\" class=\"text-muted-foreground px-1.5\">\n\t{#if row.original.status === \"Done\"}\n\t\t<CircleCheckFilledIcon class=\"fill-green-500 dark:fill-green-400\" />\n\t{:else}\n\t\t<LoaderIcon />\n\t{/if}\n\t{row.original.status}\n</Badge>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/examples/dashboard/components/data-table-target.svelte",
    "content": "<script lang=\"ts\">\n\timport { Label } from \"$lib/registry/ui/label/index.js\";\n\timport { Input } from \"$lib/registry/ui/input/index.js\";\n\timport { toast } from \"svelte-sonner\";\n\timport type { Row } from \"@tanstack/table-core\";\n\timport type { Schema } from \"./schemas.js\";\n\n\tlet { row }: { row: Row<Schema> } = $props();\n</script>\n\n<form\n\tonsubmit={(e) => {\n\t\te.preventDefault();\n\t\ttoast.promise(new Promise((resolve) => setTimeout(resolve, 1000)), {\n\t\t\tloading: `Saving ${row.original.header}`,\n\t\t\tsuccess: \"Done\",\n\t\t\terror: \"Error\",\n\t\t});\n\t}}\n>\n\t<Label for=\"{row.original.id}-target\" class=\"sr-only\">Target</Label>\n\t<Input\n\t\tclass=\"hover:bg-input/30 focus-visible:bg-background dark:hover:bg-input/30 dark:focus-visible:bg-input/30 h-8 w-16 border-transparent bg-transparent text-end shadow-none focus-visible:border dark:bg-transparent\"\n\t\tvalue={row.original.target}\n\t\tid=\"{row.original.id}-target\"\n\t/>\n</form>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/examples/dashboard/components/data-table-type.svelte",
    "content": "<script lang=\"ts\">\n\timport { Badge } from \"$lib/registry/ui/badge/index.js\";\n\timport type { Row } from \"@tanstack/table-core\";\n\timport type { Schema } from \"./schemas.js\";\n\n\tlet { row }: { row: Row<Schema> } = $props();\n</script>\n\n<div class=\"w-32\">\n\t<Badge variant=\"outline\" class=\"text-muted-foreground px-1.5\">\n\t\t{row.original.type}\n\t</Badge>\n</div>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/examples/dashboard/components/data-table.svelte",
    "content": "<script lang=\"ts\" module>\n\texport const columns: ColumnDef<Schema>[] = [\n\t\t{\n\t\t\tid: \"drag\",\n\t\t\theader: () => null,\n\t\t\tcell: () => renderComponent(DataTableDragHandle, {}),\n\t\t},\n\t\t{\n\t\t\tid: \"select\",\n\t\t\theader: ({ table }) =>\n\t\t\t\trenderComponent(DataTableCheckbox, {\n\t\t\t\t\tchecked: table.getIsAllPageRowsSelected(),\n\t\t\t\t\tindeterminate:\n\t\t\t\t\t\ttable.getIsSomePageRowsSelected() && !table.getIsAllPageRowsSelected(),\n\t\t\t\t\tonCheckedChange: (value) => table.toggleAllPageRowsSelected(!!value),\n\t\t\t\t\t\"aria-label\": \"Select all\",\n\t\t\t\t}),\n\t\t\tcell: ({ row }) =>\n\t\t\t\trenderComponent(DataTableCheckbox, {\n\t\t\t\t\tchecked: row.getIsSelected(),\n\t\t\t\t\tonCheckedChange: (value) => row.toggleSelected(!!value),\n\t\t\t\t\t\"aria-label\": \"Select row\",\n\t\t\t\t}),\n\t\t\tenableSorting: false,\n\t\t\tenableHiding: false,\n\t\t},\n\t\t{\n\t\t\taccessorKey: \"header\",\n\t\t\theader: \"Header\",\n\t\t\tcell: ({ row }) => renderComponent(DataTableCellViewer, { item: row.original }),\n\t\t\tenableHiding: false,\n\t\t},\n\t\t{\n\t\t\taccessorKey: \"type\",\n\t\t\theader: \"Section Type\",\n\t\t\tcell: ({ row }) => renderComponent(DataTableType, { row }),\n\t\t},\n\t\t{\n\t\t\taccessorKey: \"status\",\n\t\t\theader: \"Status\",\n\t\t\tcell: ({ row }) => renderComponent(DataTableStatus, { row }),\n\t\t},\n\t\t{\n\t\t\taccessorKey: \"target\",\n\t\t\theader: () => renderComponent(DataTableHeaderTarget, {}),\n\t\t\tcell: ({ row }) => renderComponent(DataTableTarget, { row }),\n\t\t},\n\t\t{\n\t\t\taccessorKey: \"limit\",\n\t\t\theader: () => renderComponent(DataTableHeaderLimit, {}),\n\t\t\tcell: ({ row }) => renderComponent(DataTableLimit, { row }),\n\t\t},\n\t\t{\n\t\t\taccessorKey: \"reviewer\",\n\t\t\theader: \"Reviewer\",\n\t\t\tcell: ({ row }) => renderComponent(DataTableReviewer, { row }),\n\t\t},\n\t\t{\n\t\t\tid: \"actions\",\n\t\t\tcell: () => renderComponent(DataTableActions, {}),\n\t\t},\n\t];\n</script>\n\n<script lang=\"ts\">\n\timport {\n\t\tgetCoreRowModel,\n\t\tgetFacetedRowModel,\n\t\tgetFacetedUniqueValues,\n\t\tgetFilteredRowModel,\n\t\tgetPaginationRowModel,\n\t\tgetSortedRowModel,\n\t\ttype ColumnDef,\n\t\ttype ColumnFiltersState,\n\t\ttype PaginationState,\n\t\ttype Row,\n\t\ttype RowSelectionState,\n\t\ttype SortingState,\n\t\ttype VisibilityState,\n\t} from \"@tanstack/table-core\";\n\timport type { Schema } from \"./schemas.js\";\n\timport { RestrictToVerticalAxis } from \"@dnd-kit/abstract/modifiers\";\n\timport { createSvelteTable } from \"$lib/registry/ui/data-table/data-table.svelte.js\";\n\timport * as Tabs from \"$lib/registry/ui/tabs/index.js\";\n\timport * as Table from \"$lib/registry/ui/table/index.js\";\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as Select from \"$lib/registry/ui/select/index.js\";\n\timport { Label } from \"$lib/registry/ui/label/index.js\";\n\timport { Badge } from \"$lib/registry/ui/badge/index.js\";\n\timport { FlexRender, renderComponent } from \"$lib/registry/ui/data-table/index.js\";\n\timport LayoutColumnsIcon from \"@tabler/icons-svelte/icons/layout-columns\";\n\timport ChevronDownIcon from \"@tabler/icons-svelte/icons/chevron-down\";\n\timport PlusIcon from \"@tabler/icons-svelte/icons/plus\";\n\timport ChevronsLeftIcon from \"@tabler/icons-svelte/icons/chevrons-left\";\n\timport ChevronLeftIcon from \"@tabler/icons-svelte/icons/chevron-left\";\n\timport ChevronRightIcon from \"@tabler/icons-svelte/icons/chevron-right\";\n\timport ChevronsRightIcon from \"@tabler/icons-svelte/icons/chevrons-right\";\n\timport DataTableCheckbox from \"./data-table-checkbox.svelte\";\n\timport DataTableCellViewer from \"./data-table-cell-viewer.svelte\";\n\timport DataTableReviewer from \"./data-table-reviewer.svelte\";\n\timport DataTableActions from \"./data-table-actions.svelte\";\n\timport DataTableDragHandle from \"./data-table-drag-handle.svelte\";\n\timport DataTableType from \"./data-table-type.svelte\";\n\timport DataTableStatus from \"./data-table-status.svelte\";\n\timport DataTableTarget from \"./data-table-target.svelte\";\n\timport DataTableLimit from \"./data-table-limit.svelte\";\n\timport DataTableHeaderTarget from \"./data-table-header-target.svelte\";\n\timport DataTableHeaderLimit from \"./data-table-header-limit.svelte\";\n\timport { DragDropProvider } from \"@dnd-kit-svelte/svelte\";\n\timport { move } from \"@dnd-kit/helpers\";\n\timport { useSortable } from \"@dnd-kit-svelte/svelte/sortable\";\n\n\tlet { data }: { data: Schema[] } = $props();\n\tlet pagination = $state<PaginationState>({ pageIndex: 0, pageSize: 10 });\n\tlet sorting = $state<SortingState>([]);\n\tlet columnFilters = $state<ColumnFiltersState>([]);\n\tlet rowSelection = $state<RowSelectionState>({});\n\tlet columnVisibility = $state<VisibilityState>({});\n\n\tconst table = createSvelteTable({\n\t\tget data() {\n\t\t\treturn data;\n\t\t},\n\t\tcolumns,\n\t\tstate: {\n\t\t\tget pagination() {\n\t\t\t\treturn pagination;\n\t\t\t},\n\t\t\tget sorting() {\n\t\t\t\treturn sorting;\n\t\t\t},\n\t\t\tget columnVisibility() {\n\t\t\t\treturn columnVisibility;\n\t\t\t},\n\t\t\tget rowSelection() {\n\t\t\t\treturn rowSelection;\n\t\t\t},\n\t\t\tget columnFilters() {\n\t\t\t\treturn columnFilters;\n\t\t\t},\n\t\t},\n\t\tgetRowId: (row) => row.id.toString(),\n\t\tenableRowSelection: true,\n\t\tgetCoreRowModel: getCoreRowModel(),\n\t\tgetPaginationRowModel: getPaginationRowModel(),\n\t\tgetSortedRowModel: getSortedRowModel(),\n\t\tgetFacetedRowModel: getFacetedRowModel(),\n\t\tgetFacetedUniqueValues: getFacetedUniqueValues(),\n\t\tgetFilteredRowModel: getFilteredRowModel(),\n\t\tonPaginationChange: (updater) => {\n\t\t\tif (typeof updater === \"function\") {\n\t\t\t\tpagination = updater(pagination);\n\t\t\t} else {\n\t\t\t\tpagination = updater;\n\t\t\t}\n\t\t},\n\t\tonSortingChange: (updater) => {\n\t\t\tif (typeof updater === \"function\") {\n\t\t\t\tsorting = updater(sorting);\n\t\t\t} else {\n\t\t\t\tsorting = updater;\n\t\t\t}\n\t\t},\n\t\tonColumnFiltersChange: (updater) => {\n\t\t\tif (typeof updater === \"function\") {\n\t\t\t\tcolumnFilters = updater(columnFilters);\n\t\t\t} else {\n\t\t\t\tcolumnFilters = updater;\n\t\t\t}\n\t\t},\n\t\tonColumnVisibilityChange: (updater) => {\n\t\t\tif (typeof updater === \"function\") {\n\t\t\t\tcolumnVisibility = updater(columnVisibility);\n\t\t\t} else {\n\t\t\t\tcolumnVisibility = updater;\n\t\t\t}\n\t\t},\n\t\tonRowSelectionChange: (updater) => {\n\t\t\tif (typeof updater === \"function\") {\n\t\t\t\trowSelection = updater(rowSelection);\n\t\t\t} else {\n\t\t\t\trowSelection = updater;\n\t\t\t}\n\t\t},\n\t});\n\n\tlet views = [\n\t\t{\n\t\t\tid: \"outline\",\n\t\t\tlabel: \"Outline\",\n\t\t\tbadge: 0,\n\t\t},\n\t\t{\n\t\t\tid: \"past-performance\",\n\t\t\tlabel: \"Past Performance\",\n\t\t\tbadge: 3,\n\t\t},\n\t\t{\n\t\t\tid: \"key-personnel\",\n\t\t\tlabel: \"Key Personnel\",\n\t\t\tbadge: 2,\n\t\t},\n\t\t{\n\t\t\tid: \"focus-documents\",\n\t\t\tlabel: \"Focus Documents\",\n\t\t\tbadge: 0,\n\t\t},\n\t];\n\n\tlet view = $state(\"outline\");\n\tlet viewLabel = $derived(views.find((v) => view === v.id)?.label ?? \"Select a view\");\n</script>\n\n<Tabs.Root value=\"outline\" class=\"w-full flex-col justify-start gap-6\">\n\t<div class=\"flex items-center justify-between px-4 lg:px-6\">\n\t\t<Label for=\"view-selector\" class=\"sr-only\">View</Label>\n\t\t<Select.Root type=\"single\" bind:value={view}>\n\t\t\t<Select.Trigger class=\"flex w-fit @4xl/main:hidden\" size=\"sm\" id=\"view-selector\">\n\t\t\t\t{viewLabel}\n\t\t\t</Select.Trigger>\n\t\t\t<Select.Content>\n\t\t\t\t{#each views as view (view.id)}\n\t\t\t\t\t<Select.Item value={view.id}>{view.label}</Select.Item>\n\t\t\t\t{/each}\n\t\t\t</Select.Content>\n\t\t</Select.Root>\n\t\t<Tabs.List\n\t\t\tclass=\"**:data-[slot=badge]:bg-muted-foreground/30 hidden **:data-[slot=badge]:size-5 **:data-[slot=badge]:rounded-full **:data-[slot=badge]:px-1 @4xl/main:flex\"\n\t\t>\n\t\t\t{#each views as view (view.id)}\n\t\t\t\t<Tabs.Trigger value={view.id}>\n\t\t\t\t\t{view.label}\n\t\t\t\t\t{#if view.badge > 0}\n\t\t\t\t\t\t<Badge variant=\"secondary\">{view.badge}</Badge>\n\t\t\t\t\t{/if}\n\t\t\t\t</Tabs.Trigger>\n\t\t\t{/each}\n\t\t</Tabs.List>\n\t\t<div class=\"flex items-center gap-2\">\n\t\t\t<DropdownMenu.Root>\n\t\t\t\t<DropdownMenu.Trigger>\n\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t<Button variant=\"outline\" size=\"sm\" {...props}>\n\t\t\t\t\t\t\t<LayoutColumnsIcon />\n\t\t\t\t\t\t\t<span class=\"hidden lg:inline\">Customize Columns</span>\n\t\t\t\t\t\t\t<span class=\"lg:hidden\">Columns</span>\n\t\t\t\t\t\t\t<ChevronDownIcon />\n\t\t\t\t\t\t</Button>\n\t\t\t\t\t{/snippet}\n\t\t\t\t</DropdownMenu.Trigger>\n\t\t\t\t<DropdownMenu.Content align=\"end\" class=\"w-56\">\n\t\t\t\t\t{#each table\n\t\t\t\t\t\t.getAllColumns()\n\t\t\t\t\t\t.filter((col) => typeof col.accessorFn !== \"undefined\" && col.getCanHide()) as column (column.id)}\n\t\t\t\t\t\t<DropdownMenu.CheckboxItem\n\t\t\t\t\t\t\tclass=\"capitalize\"\n\t\t\t\t\t\t\tchecked={column.getIsVisible()}\n\t\t\t\t\t\t\tonCheckedChange={(value) => column.toggleVisibility(!!value)}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{column.id}\n\t\t\t\t\t\t</DropdownMenu.CheckboxItem>\n\t\t\t\t\t{/each}\n\t\t\t\t</DropdownMenu.Content>\n\t\t\t</DropdownMenu.Root>\n\t\t\t<Button variant=\"outline\" size=\"sm\">\n\t\t\t\t<PlusIcon />\n\t\t\t\t<span class=\"hidden lg:inline\">Add Section</span>\n\t\t\t</Button>\n\t\t</div>\n\t</div>\n\t<Tabs.Content value=\"outline\" class=\"relative flex flex-col gap-4 overflow-auto px-4 lg:px-6\">\n\t\t<div class=\"overflow-hidden rounded-lg border\">\n\t\t\t<DragDropProvider\n\t\t\t\tmodifiers={[\n\t\t\t\t\t// @ts-expect-error @dnd-kit/abstract types are botched atm\n\t\t\t\t\tRestrictToVerticalAxis,\n\t\t\t\t]}\n\t\t\t\tonDragEnd={(e) => (data = move(data, e))}\n\t\t\t>\n\t\t\t\t<Table.Root>\n\t\t\t\t\t<Table.Header class=\"bg-muted sticky top-0 z-10\">\n\t\t\t\t\t\t{#each table.getHeaderGroups() as headerGroup (headerGroup.id)}\n\t\t\t\t\t\t\t<Table.Row>\n\t\t\t\t\t\t\t\t{#each headerGroup.headers as header (header.id)}\n\t\t\t\t\t\t\t\t\t<Table.Head colspan={header.colSpan}>\n\t\t\t\t\t\t\t\t\t\t{#if !header.isPlaceholder}\n\t\t\t\t\t\t\t\t\t\t\t<FlexRender\n\t\t\t\t\t\t\t\t\t\t\t\tcontent={header.column.columnDef.header}\n\t\t\t\t\t\t\t\t\t\t\t\tcontext={header.getContext()}\n\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\t\t\t</Table.Head>\n\t\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t</Table.Row>\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</Table.Header>\n\t\t\t\t\t<Table.Body class=\"**:data-[slot=table-cell]:first:w-8\">\n\t\t\t\t\t\t{#if table.getRowModel().rows?.length}\n\t\t\t\t\t\t\t{#each table.getRowModel().rows as row, index (row.id)}\n\t\t\t\t\t\t\t\t{@render DraggableRow({ row, index })}\n\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t{:else}\n\t\t\t\t\t\t\t<Table.Row>\n\t\t\t\t\t\t\t\t<Table.Cell colspan={columns.length} class=\"h-24 text-center\">\n\t\t\t\t\t\t\t\t\tNo results.\n\t\t\t\t\t\t\t\t</Table.Cell>\n\t\t\t\t\t\t\t</Table.Row>\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t</Table.Body>\n\t\t\t\t</Table.Root>\n\t\t\t</DragDropProvider>\n\t\t</div>\n\t\t<div class=\"flex items-center justify-between px-4\">\n\t\t\t<div class=\"text-muted-foreground hidden flex-1 text-sm lg:flex\">\n\t\t\t\t{table.getFilteredSelectedRowModel().rows.length} of\n\t\t\t\t{table.getFilteredRowModel().rows.length} row(s) selected.\n\t\t\t</div>\n\t\t\t<div class=\"flex w-full items-center gap-8 lg:w-fit\">\n\t\t\t\t<div class=\"hidden items-center gap-2 lg:flex\">\n\t\t\t\t\t<Label for=\"rows-per-page\" class=\"text-sm font-medium\">Rows per page</Label>\n\t\t\t\t\t<Select.Root\n\t\t\t\t\t\ttype=\"single\"\n\t\t\t\t\t\tbind:value={\n\t\t\t\t\t\t\t() => `${table.getState().pagination.pageSize}`,\n\t\t\t\t\t\t\t(v) => table.setPageSize(Number(v))\n\t\t\t\t\t\t}\n\t\t\t\t\t>\n\t\t\t\t\t\t<Select.Trigger size=\"sm\" class=\"w-20\" id=\"rows-per-page\">\n\t\t\t\t\t\t\t{table.getState().pagination.pageSize}\n\t\t\t\t\t\t</Select.Trigger>\n\t\t\t\t\t\t<Select.Content side=\"top\">\n\t\t\t\t\t\t\t{#each [10, 20, 30, 40, 50] as pageSize (pageSize)}\n\t\t\t\t\t\t\t\t<Select.Item value={pageSize.toString()}>\n\t\t\t\t\t\t\t\t\t{pageSize}\n\t\t\t\t\t\t\t\t</Select.Item>\n\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t</Select.Content>\n\t\t\t\t\t</Select.Root>\n\t\t\t\t</div>\n\t\t\t\t<div class=\"flex w-fit items-center justify-center text-sm font-medium\">\n\t\t\t\t\tPage {table.getState().pagination.pageIndex + 1} of\n\t\t\t\t\t{table.getPageCount()}\n\t\t\t\t</div>\n\t\t\t\t<div class=\"ms-auto flex items-center gap-2 lg:ms-0\">\n\t\t\t\t\t<Button\n\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\tclass=\"hidden h-8 w-8 p-0 lg:flex\"\n\t\t\t\t\t\tonclick={() => table.setPageIndex(0)}\n\t\t\t\t\t\tdisabled={!table.getCanPreviousPage()}\n\t\t\t\t\t>\n\t\t\t\t\t\t<span class=\"sr-only\">Go to first page</span>\n\t\t\t\t\t\t<ChevronsLeftIcon />\n\t\t\t\t\t</Button>\n\t\t\t\t\t<Button\n\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\tclass=\"size-8\"\n\t\t\t\t\t\tsize=\"icon\"\n\t\t\t\t\t\tonclick={() => table.previousPage()}\n\t\t\t\t\t\tdisabled={!table.getCanPreviousPage()}\n\t\t\t\t\t>\n\t\t\t\t\t\t<span class=\"sr-only\">Go to previous page</span>\n\t\t\t\t\t\t<ChevronLeftIcon />\n\t\t\t\t\t</Button>\n\t\t\t\t\t<Button\n\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\tclass=\"size-8\"\n\t\t\t\t\t\tsize=\"icon\"\n\t\t\t\t\t\tonclick={() => table.nextPage()}\n\t\t\t\t\t\tdisabled={!table.getCanNextPage()}\n\t\t\t\t\t>\n\t\t\t\t\t\t<span class=\"sr-only\">Go to next page</span>\n\t\t\t\t\t\t<ChevronRightIcon />\n\t\t\t\t\t</Button>\n\t\t\t\t\t<Button\n\t\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\t\tclass=\"hidden size-8 lg:flex\"\n\t\t\t\t\t\tsize=\"icon\"\n\t\t\t\t\t\tonclick={() => table.setPageIndex(table.getPageCount() - 1)}\n\t\t\t\t\t\tdisabled={!table.getCanNextPage()}\n\t\t\t\t\t>\n\t\t\t\t\t\t<span class=\"sr-only\">Go to last page</span>\n\t\t\t\t\t\t<ChevronsRightIcon />\n\t\t\t\t\t</Button>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</Tabs.Content>\n\t<Tabs.Content value=\"past-performance\" class=\"flex flex-col px-4 lg:px-6\">\n\t\t<div class=\"aspect-video w-full flex-1 rounded-lg border border-dashed\"></div>\n\t</Tabs.Content>\n\t<Tabs.Content value=\"key-personnel\" class=\"flex flex-col px-4 lg:px-6\">\n\t\t<div class=\"aspect-video w-full flex-1 rounded-lg border border-dashed\"></div>\n\t</Tabs.Content>\n\t<Tabs.Content value=\"focus-documents\" class=\"flex flex-col px-4 lg:px-6\">\n\t\t<div class=\"aspect-video w-full flex-1 rounded-lg border border-dashed\"></div>\n\t</Tabs.Content>\n</Tabs.Root>\n\n{#snippet DraggableRow({ row, index }: { row: Row<Schema>; index: number })}\n\t{@const { ref, isDragging, handleRef } = useSortable({\n\t\tid: row.original.id,\n\t\tindex: () => index,\n\t})}\n\n\t<Table.Row\n\t\tdata-state={row.getIsSelected() && \"selected\"}\n\t\tdata-dragging={isDragging.current}\n\t\tclass=\"relative z-0 data-[dragging=true]:z-10 data-[dragging=true]:opacity-80\"\n\t\t{@attach ref}\n\t>\n\t\t{#each row.getVisibleCells() as cell (cell.id)}\n\t\t\t<Table.Cell>\n\t\t\t\t<FlexRender\n\t\t\t\t\tattach={handleRef}\n\t\t\t\t\tcontent={cell.column.columnDef.cell}\n\t\t\t\t\tcontext={cell.getContext()}\n\t\t\t\t/>\n\t\t\t</Table.Cell>\n\t\t{/each}\n\t</Table.Row>\n{/snippet}\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/examples/dashboard/components/nav-documents.svelte",
    "content": "<script lang=\"ts\">\n\timport DotsIcon from \"@tabler/icons-svelte/icons/dots\";\n\timport FolderIcon from \"@tabler/icons-svelte/icons/folder\";\n\timport Share3Icon from \"@tabler/icons-svelte/icons/share-3\";\n\timport TrashIcon from \"@tabler/icons-svelte/icons/trash\";\n\timport type { Icon } from \"@tabler/icons-svelte\";\n\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\n\tlet { items }: { items: { name: string; url: string; icon?: Icon }[] } = $props();\n\n\tconst sidebar = Sidebar.useSidebar();\n</script>\n\n<Sidebar.Group class=\"group-data-[collapsible=icon]:hidden\">\n\t<Sidebar.GroupLabel>Documents</Sidebar.GroupLabel>\n\t<Sidebar.Menu>\n\t\t{#each items as item (item.name)}\n\t\t\t<Sidebar.MenuItem>\n\t\t\t\t<Sidebar.MenuButton>\n\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t<a href={item.url} {...props}>\n\t\t\t\t\t\t\t<item.icon />\n\t\t\t\t\t\t\t<span>{item.name}</span>\n\t\t\t\t\t\t</a>\n\t\t\t\t\t{/snippet}\n\t\t\t\t</Sidebar.MenuButton>\n\t\t\t\t<DropdownMenu.Root>\n\t\t\t\t\t<DropdownMenu.Trigger>\n\t\t\t\t\t\t<Sidebar.MenuAction\n\t\t\t\t\t\t\tshowOnHover\n\t\t\t\t\t\t\tclass=\"data-[state=open]:bg-accent rounded-sm\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<DotsIcon />\n\t\t\t\t\t\t\t<span class=\"sr-only\">More</span>\n\t\t\t\t\t\t</Sidebar.MenuAction>\n\t\t\t\t\t</DropdownMenu.Trigger>\n\t\t\t\t\t<DropdownMenu.Content\n\t\t\t\t\t\tclass=\"w-24 rounded-lg\"\n\t\t\t\t\t\tside={sidebar.isMobile ? \"bottom\" : \"right\"}\n\t\t\t\t\t\talign={sidebar.isMobile ? \"end\" : \"start\"}\n\t\t\t\t\t>\n\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t<FolderIcon />\n\t\t\t\t\t\t\t<span>Open</span>\n\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t\t<Share3Icon />\n\t\t\t\t\t\t\t<span>Share</span>\n\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t\t\t<DropdownMenu.Item variant=\"destructive\">\n\t\t\t\t\t\t\t<TrashIcon />\n\t\t\t\t\t\t\t<span>Delete</span>\n\t\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t</DropdownMenu.Content>\n\t\t\t\t</DropdownMenu.Root>\n\t\t\t</Sidebar.MenuItem>\n\t\t{/each}\n\t\t<Sidebar.MenuItem>\n\t\t\t<Sidebar.MenuButton class=\"text-sidebar-foreground/70\">\n\t\t\t\t<DotsIcon class=\"text-sidebar-foreground/70\" />\n\t\t\t\t<span>More</span>\n\t\t\t</Sidebar.MenuButton>\n\t\t</Sidebar.MenuItem>\n\t</Sidebar.Menu>\n</Sidebar.Group>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/examples/dashboard/components/nav-main.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\timport type { Icon } from \"@tabler/icons-svelte\";\n\n\tlet { items }: { items: { title: string; url: string; icon?: Icon }[] } = $props();\n</script>\n\n<Sidebar.Group>\n\t<Sidebar.GroupContent>\n\t\t<Sidebar.GroupLabel>Home</Sidebar.GroupLabel>\n\t\t<Sidebar.Menu>\n\t\t\t{#each items as item (item.title)}\n\t\t\t\t<Sidebar.MenuItem>\n\t\t\t\t\t<Sidebar.MenuButton tooltipContent={item.title}>\n\t\t\t\t\t\t{#if item.icon}\n\t\t\t\t\t\t\t<item.icon />\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t<span>{item.title}</span>\n\t\t\t\t\t</Sidebar.MenuButton>\n\t\t\t\t</Sidebar.MenuItem>\n\t\t\t{/each}\n\t\t</Sidebar.Menu>\n\t</Sidebar.GroupContent>\n</Sidebar.Group>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/examples/dashboard/components/nav-secondary.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\timport type { Icon } from \"@tabler/icons-svelte\";\n\timport type { ComponentProps } from \"svelte\";\n\n\tlet {\n\t\titems,\n\t\t...restProps\n\t}: {\n\t\titems: {\n\t\t\ttitle: string;\n\t\t\turl: string;\n\t\t\ticon: Icon;\n\t\t}[];\n\t} & ComponentProps<typeof Sidebar.Group> = $props();\n</script>\n\n<Sidebar.Group {...restProps}>\n\t<Sidebar.GroupContent>\n\t\t<Sidebar.Menu>\n\t\t\t{#each items as item (item.title)}\n\t\t\t\t<Sidebar.MenuItem>\n\t\t\t\t\t<Sidebar.MenuButton>\n\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t<a href={item.url} {...props}>\n\t\t\t\t\t\t\t\t<item.icon />\n\t\t\t\t\t\t\t\t<span>{item.title}</span>\n\t\t\t\t\t\t\t</a>\n\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t</Sidebar.MenuButton>\n\t\t\t\t</Sidebar.MenuItem>\n\t\t\t{/each}\n\t\t</Sidebar.Menu>\n\t</Sidebar.GroupContent>\n</Sidebar.Group>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/examples/dashboard/components/nav-user.svelte",
    "content": "<script lang=\"ts\">\n\timport CreditCardIcon from \"@tabler/icons-svelte/icons/credit-card\";\n\timport DotsVerticalIcon from \"@tabler/icons-svelte/icons/dots-vertical\";\n\timport LogoutIcon from \"@tabler/icons-svelte/icons/logout\";\n\timport NotificationIcon from \"@tabler/icons-svelte/icons/notification\";\n\timport UserCircleIcon from \"@tabler/icons-svelte/icons/user-circle\";\n\n\timport * as Avatar from \"$lib/registry/ui/avatar/index.js\";\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\timport * as Sidebar from \"$lib/registry/ui/sidebar/index.js\";\n\n\tlet {\n\t\tuser,\n\t}: {\n\t\tuser: {\n\t\t\tname: string;\n\t\t\temail: string;\n\t\t\tavatar: string;\n\t\t};\n\t} = $props();\n\tconst sidebar = Sidebar.useSidebar();\n</script>\n\n<Sidebar.Menu>\n\t<Sidebar.MenuItem>\n\t\t<DropdownMenu.Root>\n\t\t\t<DropdownMenu.Trigger>\n\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t<Sidebar.MenuButton\n\t\t\t\t\t\t{...props}\n\t\t\t\t\t\tsize=\"lg\"\n\t\t\t\t\t\tclass=\"data-[state=open]:bg-sidebar-accent data-[state=open]:text-sidebar-accent-foreground\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<Avatar.Root class=\"h-8 w-8 rounded-lg grayscale\">\n\t\t\t\t\t\t\t<Avatar.Image src={user.avatar} alt={user.name} />\n\t\t\t\t\t\t\t<Avatar.Fallback class=\"rounded-lg\">CN</Avatar.Fallback>\n\t\t\t\t\t\t</Avatar.Root>\n\t\t\t\t\t\t<div class=\"grid flex-1 text-start text-sm leading-tight\">\n\t\t\t\t\t\t\t<span class=\"truncate font-medium\">{user.name}</span>\n\t\t\t\t\t\t\t<span class=\"text-muted-foreground truncate text-xs\">\n\t\t\t\t\t\t\t\t{user.email}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<DotsVerticalIcon class=\"ms-auto size-4\" />\n\t\t\t\t\t</Sidebar.MenuButton>\n\t\t\t\t{/snippet}\n\t\t\t</DropdownMenu.Trigger>\n\t\t\t<DropdownMenu.Content\n\t\t\t\tclass=\"w-(--bits-dropdown-menu-anchor-width) min-w-56 rounded-lg\"\n\t\t\t\tside={sidebar.isMobile ? \"bottom\" : \"right\"}\n\t\t\t\talign=\"end\"\n\t\t\t\tsideOffset={4}\n\t\t\t>\n\t\t\t\t<DropdownMenu.Label class=\"p-0 font-normal\">\n\t\t\t\t\t<div class=\"flex items-center gap-2 px-1 py-1.5 text-start text-sm\">\n\t\t\t\t\t\t<Avatar.Root class=\"h-8 w-8 rounded-lg\">\n\t\t\t\t\t\t\t<Avatar.Image src={user.avatar} alt={user.name} />\n\t\t\t\t\t\t\t<Avatar.Fallback class=\"rounded-lg\">CN</Avatar.Fallback>\n\t\t\t\t\t\t</Avatar.Root>\n\t\t\t\t\t\t<div class=\"grid flex-1 text-start text-sm leading-tight\">\n\t\t\t\t\t\t\t<span class=\"truncate font-medium\">{user.name}</span>\n\t\t\t\t\t\t\t<span class=\"text-muted-foreground truncate text-xs\">\n\t\t\t\t\t\t\t\t{user.email}\n\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</div>\n\t\t\t\t</DropdownMenu.Label>\n\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t<DropdownMenu.Group>\n\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t<UserCircleIcon />\n\t\t\t\t\t\tAccount\n\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t<CreditCardIcon />\n\t\t\t\t\t\tBilling\n\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t\t<NotificationIcon />\n\t\t\t\t\t\tNotifications\n\t\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t</DropdownMenu.Group>\n\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\t<LogoutIcon />\n\t\t\t\t\tLog out\n\t\t\t\t</DropdownMenu.Item>\n\t\t\t</DropdownMenu.Content>\n\t\t</DropdownMenu.Root>\n\t</Sidebar.MenuItem>\n</Sidebar.Menu>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/examples/dashboard/components/schemas.ts",
    "content": "import { z } from \"zod\";\n\nexport const schema = z.object({\n\tid: z.number(),\n\theader: z.string(),\n\ttype: z.string(),\n\tstatus: z.string(),\n\ttarget: z.string(),\n\tlimit: z.string(),\n\treviewer: z.string(),\n});\n\nexport type Schema = z.infer<typeof schema>;\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/examples/dashboard/components/section-cards.svelte",
    "content": "<script lang=\"ts\">\n\timport TrendingDownIcon from \"@tabler/icons-svelte/icons/trending-down\";\n\timport TrendingUpIcon from \"@tabler/icons-svelte/icons/trending-up\";\n\timport { Badge } from \"$lib/registry/ui/badge/index.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n</script>\n\n<div\n\tclass=\"grid grid-cols-1 gap-4 px-4 *:data-[slot=card]:bg-gradient-to-t *:data-[slot=card]:shadow-xs lg:px-6 @xl/main:grid-cols-2 @5xl/main:grid-cols-4\"\n>\n\t<Card.Root class=\"@container/card\">\n\t\t<Card.Header>\n\t\t\t<Card.Description>Total Revenue</Card.Description>\n\t\t\t<Card.Title class=\"text-2xl font-semibold tabular-nums @[250px]/card:text-3xl\">\n\t\t\t\t$1,250.00\n\t\t\t</Card.Title>\n\t\t\t<Card.Action>\n\t\t\t\t<Badge variant=\"outline\">\n\t\t\t\t\t<TrendingUpIcon />\n\t\t\t\t\t+12.5%\n\t\t\t\t</Badge>\n\t\t\t</Card.Action>\n\t\t</Card.Header>\n\t\t<Card.Footer class=\"flex-col items-start gap-1.5 text-sm\">\n\t\t\t<div class=\"line-clamp-1 flex gap-2 font-medium\">\n\t\t\t\tTrending up this month <TrendingUpIcon class=\"size-4\" />\n\t\t\t</div>\n\t\t\t<div class=\"text-muted-foreground\">Visitors for the last 6 months</div>\n\t\t</Card.Footer>\n\t</Card.Root>\n\t<Card.Root class=\"@container/card\">\n\t\t<Card.Header>\n\t\t\t<Card.Description>New Customers</Card.Description>\n\t\t\t<Card.Title class=\"text-2xl font-semibold tabular-nums @[250px]/card:text-3xl\">\n\t\t\t\t1,234\n\t\t\t</Card.Title>\n\t\t\t<Card.Action>\n\t\t\t\t<Badge variant=\"outline\">\n\t\t\t\t\t<TrendingDownIcon />\n\t\t\t\t\t-20%\n\t\t\t\t</Badge>\n\t\t\t</Card.Action>\n\t\t</Card.Header>\n\t\t<Card.Footer class=\"flex-col items-start gap-1.5 text-sm\">\n\t\t\t<div class=\"line-clamp-1 flex gap-2 font-medium\">\n\t\t\t\tDown 20% this period <TrendingDownIcon class=\"size-4\" />\n\t\t\t</div>\n\t\t\t<div class=\"text-muted-foreground\">Acquisition needs attention</div>\n\t\t</Card.Footer>\n\t</Card.Root>\n\t<Card.Root class=\"@container/card\">\n\t\t<Card.Header>\n\t\t\t<Card.Description>Active Accounts</Card.Description>\n\t\t\t<Card.Title class=\"text-2xl font-semibold tabular-nums @[250px]/card:text-3xl\">\n\t\t\t\t45,678\n\t\t\t</Card.Title>\n\t\t\t<Card.Action>\n\t\t\t\t<Badge variant=\"outline\">\n\t\t\t\t\t<TrendingUpIcon />\n\t\t\t\t\t+12.5%\n\t\t\t\t</Badge>\n\t\t\t</Card.Action>\n\t\t</Card.Header>\n\t\t<Card.Footer class=\"flex-col items-start gap-1.5 text-sm\">\n\t\t\t<div class=\"line-clamp-1 flex gap-2 font-medium\">\n\t\t\t\tStrong user retention <TrendingUpIcon class=\"size-4\" />\n\t\t\t</div>\n\t\t\t<div class=\"text-muted-foreground\">Engagement exceed targets</div>\n\t\t</Card.Footer>\n\t</Card.Root>\n\t<Card.Root class=\"@container/card\">\n\t\t<Card.Header>\n\t\t\t<Card.Description>Growth Rate</Card.Description>\n\t\t\t<Card.Title class=\"text-2xl font-semibold tabular-nums @[250px]/card:text-3xl\">\n\t\t\t\t4.5%\n\t\t\t</Card.Title>\n\t\t\t<Card.Action>\n\t\t\t\t<Badge variant=\"outline\">\n\t\t\t\t\t<TrendingUpIcon />\n\t\t\t\t\t+4.5%\n\t\t\t\t</Badge>\n\t\t\t</Card.Action>\n\t\t</Card.Header>\n\t\t<Card.Footer class=\"flex-col items-start gap-1.5 text-sm\">\n\t\t\t<div class=\"line-clamp-1 flex gap-2 font-medium\">\n\t\t\t\tSteady performance increase <TrendingUpIcon class=\"size-4\" />\n\t\t\t</div>\n\t\t\t<div class=\"text-muted-foreground\">Meets growth projections</div>\n\t\t</Card.Footer>\n\t</Card.Root>\n</div>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/examples/dashboard/components/site-header.svelte",
    "content": "<script lang=\"ts\">\n\timport CirclePlusFilledIcon from \"@tabler/icons-svelte/icons/circle-plus-filled\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n</script>\n\n<header\n\tclass=\"bg-background/90 sticky top-0 z-10 flex h-(--header-height) shrink-0 items-center gap-2 border-b transition-[width,height] ease-linear group-has-data-[collapsible=icon]/sidebar-wrapper:h-(--header-height)\"\n>\n\t<div class=\"flex w-full items-center gap-1 px-4 lg:gap-2 lg:px-6\">\n\t\t<h1 class=\"text-base font-medium\">Documents</h1>\n\t\t<div class=\"ms-auto flex items-center gap-2\">\n\t\t\t<Button size=\"sm\" class=\"hidden h-7 sm:flex\">\n\t\t\t\t<CirclePlusFilledIcon />\n\t\t\t\t<span>Quick Create</span>\n\t\t\t</Button>\n\t\t</div>\n\t</div>\n</header>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/examples/dashboard/data.ts",
    "content": "export const data = [\n\t{\n\t\tid: 1,\n\t\theader: \"Cover page\",\n\t\ttype: \"Cover page\",\n\t\tstatus: \"In Process\",\n\t\ttarget: \"18\",\n\t\tlimit: \"5\",\n\t\treviewer: \"Eddie Lake\",\n\t},\n\t{\n\t\tid: 2,\n\t\theader: \"Table of contents\",\n\t\ttype: \"Table of contents\",\n\t\tstatus: \"Done\",\n\t\ttarget: \"29\",\n\t\tlimit: \"24\",\n\t\treviewer: \"Eddie Lake\",\n\t},\n\t{\n\t\tid: 3,\n\t\theader: \"Executive summary\",\n\t\ttype: \"Narrative\",\n\t\tstatus: \"Done\",\n\t\ttarget: \"10\",\n\t\tlimit: \"13\",\n\t\treviewer: \"Eddie Lake\",\n\t},\n\t{\n\t\tid: 4,\n\t\theader: \"Technical approach\",\n\t\ttype: \"Narrative\",\n\t\tstatus: \"Done\",\n\t\ttarget: \"27\",\n\t\tlimit: \"23\",\n\t\treviewer: \"Jamik Tashpulatov\",\n\t},\n\t{\n\t\tid: 5,\n\t\theader: \"Design\",\n\t\ttype: \"Narrative\",\n\t\tstatus: \"In Process\",\n\t\ttarget: \"2\",\n\t\tlimit: \"16\",\n\t\treviewer: \"Jamik Tashpulatov\",\n\t},\n\t{\n\t\tid: 6,\n\t\theader: \"Capabilities\",\n\t\ttype: \"Narrative\",\n\t\tstatus: \"In Process\",\n\t\ttarget: \"20\",\n\t\tlimit: \"8\",\n\t\treviewer: \"Jamik Tashpulatov\",\n\t},\n\t{\n\t\tid: 7,\n\t\theader: \"Integration with existing systems\",\n\t\ttype: \"Narrative\",\n\t\tstatus: \"In Process\",\n\t\ttarget: \"19\",\n\t\tlimit: \"21\",\n\t\treviewer: \"Jamik Tashpulatov\",\n\t},\n\t{\n\t\tid: 8,\n\t\theader: \"Innovation and Advantages\",\n\t\ttype: \"Narrative\",\n\t\tstatus: \"Done\",\n\t\ttarget: \"25\",\n\t\tlimit: \"26\",\n\t\treviewer: \"Assign reviewer\",\n\t},\n\t{\n\t\tid: 9,\n\t\theader: \"Overview of EMR's Innovative Solutions\",\n\t\ttype: \"Technical content\",\n\t\tstatus: \"Done\",\n\t\ttarget: \"7\",\n\t\tlimit: \"23\",\n\t\treviewer: \"Assign reviewer\",\n\t},\n\t{\n\t\tid: 10,\n\t\theader: \"Advanced Algorithms and Machine Learning\",\n\t\ttype: \"Narrative\",\n\t\tstatus: \"Done\",\n\t\ttarget: \"30\",\n\t\tlimit: \"28\",\n\t\treviewer: \"Assign reviewer\",\n\t},\n\t{\n\t\tid: 11,\n\t\theader: \"Adaptive Communication Protocols\",\n\t\ttype: \"Narrative\",\n\t\tstatus: \"Done\",\n\t\ttarget: \"9\",\n\t\tlimit: \"31\",\n\t\treviewer: \"Assign reviewer\",\n\t},\n\t{\n\t\tid: 12,\n\t\theader: \"Advantages Over Current Technologies\",\n\t\ttype: \"Narrative\",\n\t\tstatus: \"Done\",\n\t\ttarget: \"12\",\n\t\tlimit: \"0\",\n\t\treviewer: \"Assign reviewer\",\n\t},\n\t{\n\t\tid: 13,\n\t\theader: \"Past Performance\",\n\t\ttype: \"Narrative\",\n\t\tstatus: \"Done\",\n\t\ttarget: \"22\",\n\t\tlimit: \"33\",\n\t\treviewer: \"Assign reviewer\",\n\t},\n\t{\n\t\tid: 14,\n\t\theader: \"Customer Feedback and Satisfaction Levels\",\n\t\ttype: \"Narrative\",\n\t\tstatus: \"Done\",\n\t\ttarget: \"15\",\n\t\tlimit: \"34\",\n\t\treviewer: \"Assign reviewer\",\n\t},\n\t{\n\t\tid: 15,\n\t\theader: \"Implementation Challenges and Solutions\",\n\t\ttype: \"Narrative\",\n\t\tstatus: \"Done\",\n\t\ttarget: \"3\",\n\t\tlimit: \"35\",\n\t\treviewer: \"Assign reviewer\",\n\t},\n\t{\n\t\tid: 16,\n\t\theader: \"Security Measures and Data Protection Policies\",\n\t\ttype: \"Narrative\",\n\t\tstatus: \"In Process\",\n\t\ttarget: \"6\",\n\t\tlimit: \"36\",\n\t\treviewer: \"Assign reviewer\",\n\t},\n\t{\n\t\tid: 17,\n\t\theader: \"Scalability and Future Proofing\",\n\t\ttype: \"Narrative\",\n\t\tstatus: \"Done\",\n\t\ttarget: \"4\",\n\t\tlimit: \"37\",\n\t\treviewer: \"Assign reviewer\",\n\t},\n\t{\n\t\tid: 18,\n\t\theader: \"Cost-Benefit Analysis\",\n\t\ttype: \"Plain language\",\n\t\tstatus: \"Done\",\n\t\ttarget: \"14\",\n\t\tlimit: \"38\",\n\t\treviewer: \"Assign reviewer\",\n\t},\n\t{\n\t\tid: 19,\n\t\theader: \"User Training and Onboarding Experience\",\n\t\ttype: \"Narrative\",\n\t\tstatus: \"Done\",\n\t\ttarget: \"17\",\n\t\tlimit: \"39\",\n\t\treviewer: \"Assign reviewer\",\n\t},\n\t{\n\t\tid: 20,\n\t\theader: \"Future Development Roadmap\",\n\t\ttype: \"Narrative\",\n\t\tstatus: \"Done\",\n\t\ttarget: \"11\",\n\t\tlimit: \"40\",\n\t\treviewer: \"Assign reviewer\",\n\t},\n\t{\n\t\tid: 21,\n\t\theader: \"System Architecture Overview\",\n\t\ttype: \"Technical content\",\n\t\tstatus: \"In Process\",\n\t\ttarget: \"24\",\n\t\tlimit: \"18\",\n\t\treviewer: \"Maya Johnson\",\n\t},\n\t{\n\t\tid: 22,\n\t\theader: \"Risk Management Plan\",\n\t\ttype: \"Narrative\",\n\t\tstatus: \"Done\",\n\t\ttarget: \"15\",\n\t\tlimit: \"22\",\n\t\treviewer: \"Carlos Rodriguez\",\n\t},\n\t{\n\t\tid: 23,\n\t\theader: \"Compliance Documentation\",\n\t\ttype: \"Legal\",\n\t\tstatus: \"In Process\",\n\t\ttarget: \"31\",\n\t\tlimit: \"27\",\n\t\treviewer: \"Sarah Chen\",\n\t},\n\t{\n\t\tid: 24,\n\t\theader: \"API Documentation\",\n\t\ttype: \"Technical content\",\n\t\tstatus: \"Done\",\n\t\ttarget: \"8\",\n\t\tlimit: \"12\",\n\t\treviewer: \"Raj Patel\",\n\t},\n\t{\n\t\tid: 25,\n\t\theader: \"User Interface Mockups\",\n\t\ttype: \"Visual\",\n\t\tstatus: \"In Process\",\n\t\ttarget: \"19\",\n\t\tlimit: \"25\",\n\t\treviewer: \"Leila Ahmadi\",\n\t},\n\t{\n\t\tid: 26,\n\t\theader: \"Database Schema\",\n\t\ttype: \"Technical content\",\n\t\tstatus: \"Done\",\n\t\ttarget: \"22\",\n\t\tlimit: \"20\",\n\t\treviewer: \"Thomas Wilson\",\n\t},\n\t{\n\t\tid: 27,\n\t\theader: \"Testing Methodology\",\n\t\ttype: \"Technical content\",\n\t\tstatus: \"In Process\",\n\t\ttarget: \"17\",\n\t\tlimit: \"14\",\n\t\treviewer: \"Assign reviewer\",\n\t},\n\t{\n\t\tid: 28,\n\t\theader: \"Deployment Strategy\",\n\t\ttype: \"Narrative\",\n\t\tstatus: \"Done\",\n\t\ttarget: \"26\",\n\t\tlimit: \"30\",\n\t\treviewer: \"Eddie Lake\",\n\t},\n\t{\n\t\tid: 29,\n\t\theader: \"Budget Breakdown\",\n\t\ttype: \"Financial\",\n\t\tstatus: \"In Process\",\n\t\ttarget: \"13\",\n\t\tlimit: \"16\",\n\t\treviewer: \"Jamik Tashpulatov\",\n\t},\n\t{\n\t\tid: 30,\n\t\theader: \"Market Analysis\",\n\t\ttype: \"Research\",\n\t\tstatus: \"Done\",\n\t\ttarget: \"29\",\n\t\tlimit: \"32\",\n\t\treviewer: \"Sophia Martinez\",\n\t},\n\t{\n\t\tid: 31,\n\t\theader: \"Competitor Comparison\",\n\t\ttype: \"Research\",\n\t\tstatus: \"In Process\",\n\t\ttarget: \"21\",\n\t\tlimit: \"19\",\n\t\treviewer: \"Assign reviewer\",\n\t},\n\t{\n\t\tid: 32,\n\t\theader: \"Maintenance Plan\",\n\t\ttype: \"Technical content\",\n\t\tstatus: \"Done\",\n\t\ttarget: \"16\",\n\t\tlimit: \"23\",\n\t\treviewer: \"Alex Thompson\",\n\t},\n\t{\n\t\tid: 33,\n\t\theader: \"User Personas\",\n\t\ttype: \"Research\",\n\t\tstatus: \"In Process\",\n\t\ttarget: \"27\",\n\t\tlimit: \"24\",\n\t\treviewer: \"Nina Patel\",\n\t},\n\t{\n\t\tid: 34,\n\t\theader: \"Accessibility Compliance\",\n\t\ttype: \"Legal\",\n\t\tstatus: \"Done\",\n\t\ttarget: \"18\",\n\t\tlimit: \"21\",\n\t\treviewer: \"Assign reviewer\",\n\t},\n\t{\n\t\tid: 35,\n\t\theader: \"Performance Metrics\",\n\t\ttype: \"Technical content\",\n\t\tstatus: \"In Process\",\n\t\ttarget: \"23\",\n\t\tlimit: \"26\",\n\t\treviewer: \"David Kim\",\n\t},\n\t{\n\t\tid: 36,\n\t\theader: \"Disaster Recovery Plan\",\n\t\ttype: \"Technical content\",\n\t\tstatus: \"Done\",\n\t\ttarget: \"14\",\n\t\tlimit: \"17\",\n\t\treviewer: \"Jamik Tashpulatov\",\n\t},\n\t{\n\t\tid: 37,\n\t\theader: \"Third-party Integrations\",\n\t\ttype: \"Technical content\",\n\t\tstatus: \"In Process\",\n\t\ttarget: \"25\",\n\t\tlimit: \"28\",\n\t\treviewer: \"Eddie Lake\",\n\t},\n\t{\n\t\tid: 38,\n\t\theader: \"User Feedback Summary\",\n\t\ttype: \"Research\",\n\t\tstatus: \"Done\",\n\t\ttarget: \"20\",\n\t\tlimit: \"15\",\n\t\treviewer: \"Assign reviewer\",\n\t},\n\t{\n\t\tid: 39,\n\t\theader: \"Localization Strategy\",\n\t\ttype: \"Narrative\",\n\t\tstatus: \"In Process\",\n\t\ttarget: \"12\",\n\t\tlimit: \"19\",\n\t\treviewer: \"Maria Garcia\",\n\t},\n\t{\n\t\tid: 40,\n\t\theader: \"Mobile Compatibility\",\n\t\ttype: \"Technical content\",\n\t\tstatus: \"Done\",\n\t\ttarget: \"28\",\n\t\tlimit: \"31\",\n\t\treviewer: \"James Wilson\",\n\t},\n\t{\n\t\tid: 41,\n\t\theader: \"Data Migration Plan\",\n\t\ttype: \"Technical content\",\n\t\tstatus: \"In Process\",\n\t\ttarget: \"19\",\n\t\tlimit: \"22\",\n\t\treviewer: \"Assign reviewer\",\n\t},\n\t{\n\t\tid: 42,\n\t\theader: \"Quality Assurance Protocols\",\n\t\ttype: \"Technical content\",\n\t\tstatus: \"Done\",\n\t\ttarget: \"30\",\n\t\tlimit: \"33\",\n\t\treviewer: \"Priya Singh\",\n\t},\n\t{\n\t\tid: 43,\n\t\theader: \"Stakeholder Analysis\",\n\t\ttype: \"Research\",\n\t\tstatus: \"In Process\",\n\t\ttarget: \"11\",\n\t\tlimit: \"14\",\n\t\treviewer: \"Eddie Lake\",\n\t},\n\t{\n\t\tid: 44,\n\t\theader: \"Environmental Impact Assessment\",\n\t\ttype: \"Research\",\n\t\tstatus: \"Done\",\n\t\ttarget: \"24\",\n\t\tlimit: \"27\",\n\t\treviewer: \"Assign reviewer\",\n\t},\n\t{\n\t\tid: 45,\n\t\theader: \"Intellectual Property Rights\",\n\t\ttype: \"Legal\",\n\t\tstatus: \"In Process\",\n\t\ttarget: \"17\",\n\t\tlimit: \"20\",\n\t\treviewer: \"Sarah Johnson\",\n\t},\n\t{\n\t\tid: 46,\n\t\theader: \"Customer Support Framework\",\n\t\ttype: \"Narrative\",\n\t\tstatus: \"Done\",\n\t\ttarget: \"22\",\n\t\tlimit: \"25\",\n\t\treviewer: \"Jamik Tashpulatov\",\n\t},\n\t{\n\t\tid: 47,\n\t\theader: \"Version Control Strategy\",\n\t\ttype: \"Technical content\",\n\t\tstatus: \"In Process\",\n\t\ttarget: \"15\",\n\t\tlimit: \"18\",\n\t\treviewer: \"Assign reviewer\",\n\t},\n\t{\n\t\tid: 48,\n\t\theader: \"Continuous Integration Pipeline\",\n\t\ttype: \"Technical content\",\n\t\tstatus: \"Done\",\n\t\ttarget: \"26\",\n\t\tlimit: \"29\",\n\t\treviewer: \"Michael Chen\",\n\t},\n\t{\n\t\tid: 49,\n\t\theader: \"Regulatory Compliance\",\n\t\ttype: \"Legal\",\n\t\tstatus: \"In Process\",\n\t\ttarget: \"13\",\n\t\tlimit: \"16\",\n\t\treviewer: \"Assign reviewer\",\n\t},\n\t{\n\t\tid: 50,\n\t\theader: \"User Authentication System\",\n\t\ttype: \"Technical content\",\n\t\tstatus: \"Done\",\n\t\ttarget: \"28\",\n\t\tlimit: \"31\",\n\t\treviewer: \"Eddie Lake\",\n\t},\n\t{\n\t\tid: 51,\n\t\theader: \"Data Analytics Framework\",\n\t\ttype: \"Technical content\",\n\t\tstatus: \"In Process\",\n\t\ttarget: \"21\",\n\t\tlimit: \"24\",\n\t\treviewer: \"Jamik Tashpulatov\",\n\t},\n\t{\n\t\tid: 52,\n\t\theader: \"Cloud Infrastructure\",\n\t\ttype: \"Technical content\",\n\t\tstatus: \"Done\",\n\t\ttarget: \"16\",\n\t\tlimit: \"19\",\n\t\treviewer: \"Assign reviewer\",\n\t},\n\t{\n\t\tid: 53,\n\t\theader: \"Network Security Measures\",\n\t\ttype: \"Technical content\",\n\t\tstatus: \"In Process\",\n\t\ttarget: \"29\",\n\t\tlimit: \"32\",\n\t\treviewer: \"Lisa Wong\",\n\t},\n\t{\n\t\tid: 54,\n\t\theader: \"Project Timeline\",\n\t\ttype: \"Planning\",\n\t\tstatus: \"Done\",\n\t\ttarget: \"14\",\n\t\tlimit: \"17\",\n\t\treviewer: \"Eddie Lake\",\n\t},\n\t{\n\t\tid: 55,\n\t\theader: \"Resource Allocation\",\n\t\ttype: \"Planning\",\n\t\tstatus: \"In Process\",\n\t\ttarget: \"27\",\n\t\tlimit: \"30\",\n\t\treviewer: \"Assign reviewer\",\n\t},\n\t{\n\t\tid: 56,\n\t\theader: \"Team Structure and Roles\",\n\t\ttype: \"Planning\",\n\t\tstatus: \"Done\",\n\t\ttarget: \"20\",\n\t\tlimit: \"23\",\n\t\treviewer: \"Jamik Tashpulatov\",\n\t},\n\t{\n\t\tid: 57,\n\t\theader: \"Communication Protocols\",\n\t\ttype: \"Planning\",\n\t\tstatus: \"In Process\",\n\t\ttarget: \"15\",\n\t\tlimit: \"18\",\n\t\treviewer: \"Assign reviewer\",\n\t},\n\t{\n\t\tid: 58,\n\t\theader: \"Success Metrics\",\n\t\ttype: \"Planning\",\n\t\tstatus: \"Done\",\n\t\ttarget: \"30\",\n\t\tlimit: \"33\",\n\t\treviewer: \"Eddie Lake\",\n\t},\n\t{\n\t\tid: 59,\n\t\theader: \"Internationalization Support\",\n\t\ttype: \"Technical content\",\n\t\tstatus: \"In Process\",\n\t\ttarget: \"23\",\n\t\tlimit: \"26\",\n\t\treviewer: \"Jamik Tashpulatov\",\n\t},\n\t{\n\t\tid: 60,\n\t\theader: \"Backup and Recovery Procedures\",\n\t\ttype: \"Technical content\",\n\t\tstatus: \"Done\",\n\t\ttarget: \"18\",\n\t\tlimit: \"21\",\n\t\treviewer: \"Assign reviewer\",\n\t},\n\t{\n\t\tid: 61,\n\t\theader: \"Monitoring and Alerting System\",\n\t\ttype: \"Technical content\",\n\t\tstatus: \"In Process\",\n\t\ttarget: \"25\",\n\t\tlimit: \"28\",\n\t\treviewer: \"Daniel Park\",\n\t},\n\t{\n\t\tid: 62,\n\t\theader: \"Code Review Guidelines\",\n\t\ttype: \"Technical content\",\n\t\tstatus: \"Done\",\n\t\ttarget: \"12\",\n\t\tlimit: \"15\",\n\t\treviewer: \"Eddie Lake\",\n\t},\n\t{\n\t\tid: 63,\n\t\theader: \"Documentation Standards\",\n\t\ttype: \"Technical content\",\n\t\tstatus: \"In Process\",\n\t\ttarget: \"27\",\n\t\tlimit: \"30\",\n\t\treviewer: \"Jamik Tashpulatov\",\n\t},\n\t{\n\t\tid: 64,\n\t\theader: \"Release Management Process\",\n\t\ttype: \"Planning\",\n\t\tstatus: \"Done\",\n\t\ttarget: \"22\",\n\t\tlimit: \"25\",\n\t\treviewer: \"Assign reviewer\",\n\t},\n\t{\n\t\tid: 65,\n\t\theader: \"Feature Prioritization Matrix\",\n\t\ttype: \"Planning\",\n\t\tstatus: \"In Process\",\n\t\ttarget: \"19\",\n\t\tlimit: \"22\",\n\t\treviewer: \"Emma Davis\",\n\t},\n\t{\n\t\tid: 66,\n\t\theader: \"Technical Debt Assessment\",\n\t\ttype: \"Technical content\",\n\t\tstatus: \"Done\",\n\t\ttarget: \"24\",\n\t\tlimit: \"27\",\n\t\treviewer: \"Eddie Lake\",\n\t},\n\t{\n\t\tid: 67,\n\t\theader: \"Capacity Planning\",\n\t\ttype: \"Planning\",\n\t\tstatus: \"In Process\",\n\t\ttarget: \"21\",\n\t\tlimit: \"24\",\n\t\treviewer: \"Jamik Tashpulatov\",\n\t},\n\t{\n\t\tid: 68,\n\t\theader: \"Service Level Agreements\",\n\t\ttype: \"Legal\",\n\t\tstatus: \"Done\",\n\t\ttarget: \"26\",\n\t\tlimit: \"29\",\n\t\treviewer: \"Assign reviewer\",\n\t},\n];\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/examples/playground/(components)/code-viewer.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Dialog from \"$lib/registry/ui/dialog/index.js\";\n\timport { buttonVariants } from \"$lib/registry/ui/button/index.js\";\n</script>\n\n<Dialog.Root>\n\t<Dialog.Trigger class={buttonVariants({ variant: \"secondary\" })}>View code</Dialog.Trigger>\n\t<Dialog.Content class=\"sm:max-w-[625px]\">\n\t\t<Dialog.Header>\n\t\t\t<Dialog.Title>View code</Dialog.Title>\n\t\t\t<Dialog.Description>\n\t\t\t\tYou can use the following code to start integrating your current prompt and settings\n\t\t\t\tinto your application.\n\t\t\t</Dialog.Description>\n\t\t</Dialog.Header>\n\t\t<div class=\"grid gap-4\">\n\t\t\t<div class=\"rounded-md bg-black p-6\">\n\t\t\t\t<pre><code class=\"text-muted-foreground grid gap-1 text-sm [&_span]:h-4\"\n\t\t\t\t\t\t><span><span class=\"text-sky-300\">import</span> os</span><span\n\t\t\t\t\t\t\t><span class=\"text-sky-300\">import</span> openai</span\n\t\t\t\t\t\t><span></span><span\n\t\t\t\t\t\t\t>openai.api_key = os.getenv(<span class=\"text-green-300\"\n\t\t\t\t\t\t\t\t>&quot;OPENAI_API_KEY&quot;</span\n\t\t\t\t\t\t\t>)</span\n\t\t\t\t\t\t><span></span><span>response = openai.Completion.create(</span\n\t\t\t\t\t\t><span> model=<span class=\"text-green-300\">&quot;davinci&quot;</span>,</span\n\t\t\t\t\t\t><span> prompt=<span class=\"text-amber-300\">&quot;&quot;</span>,</span\n\t\t\t\t\t\t><span> temperature=<span class=\"text-amber-300\">0.9</span>,</span\n\t\t\t\t\t\t><span> max_tokens=<span class=\"text-amber-300\">5</span>,</span\n\t\t\t\t\t\t><span> top_p=<span class=\"text-amber-300\">1</span>,</span\n\t\t\t\t\t\t><span> frequency_penalty=<span class=\"text-amber-300\">0</span>,</span\n\t\t\t\t\t\t><span> presence_penalty=<span class=\"text-green-300\">0</span>,</span><span\n\t\t\t\t\t\t\t>)</span\n\t\t\t\t\t\t></code\n\t\t\t\t\t></pre>\n\t\t\t</div>\n\t\t\t<div>\n\t\t\t\t<p class=\"text-muted-foreground text-sm\">\n\t\t\t\t\tYour API Key can be found here. You should use environment variables or a secret\n\t\t\t\t\tmanagement tool to expose your key to your applications.\n\t\t\t\t</p>\n\t\t\t</div>\n\t\t</div>\n\t</Dialog.Content>\n</Dialog.Root>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/examples/playground/(components)/index.ts",
    "content": "export { default as CodeViewer } from \"./code-viewer.svelte\";\nexport { default as MaxLengthSelector } from \"./max-length-selector.svelte\";\nexport { default as ModelSelector } from \"./model-selector.svelte\";\nexport { default as PresetActions } from \"./preset-actions.svelte\";\nexport { default as PresetSave } from \"./preset-save.svelte\";\nexport { default as PresetSelector } from \"./preset-selector.svelte\";\nexport { default as PresetShare } from \"./preset-share.svelte\";\nexport { default as TemperatureSelector } from \"./temperature-selector.svelte\";\nexport { default as TopPSelector } from \"./top-p-selector.svelte\";\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/examples/playground/(components)/max-length-selector.svelte",
    "content": "<script lang=\"ts\">\n\timport type { Slider as SliderPrimitive } from \"bits-ui\";\n\timport * as HoverCard from \"$lib/registry/ui/hover-card/index.js\";\n\timport { Slider } from \"$lib/registry/ui/slider/index.js\";\n\timport { Label } from \"$lib/registry/ui/label/index.js\";\n\n\tlet { value = $bindable(), ...restProps }: SliderPrimitive.RootProps = $props();\n</script>\n\n<div class=\"grid gap-2 pt-2\">\n\t<HoverCard.Root openDelay={200} closeDelay={100}>\n\t\t<HoverCard.Trigger>\n\t\t\t{#snippet child({ props })}\n\t\t\t\t<div class=\"grid gap-4\" {...props}>\n\t\t\t\t\t<div class=\"flex items-center justify-between\">\n\t\t\t\t\t\t<Label for=\"maxlength\">Maximum Length</Label>\n\t\t\t\t\t\t<span\n\t\t\t\t\t\t\tclass=\"text-muted-foreground hover:border-border w-12 rounded-md border border-transparent px-2 py-0.5 text-end text-sm\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{value}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</div>\n\t\t\t\t\t<Slider\n\t\t\t\t\t\tid=\"maxlength\"\n\t\t\t\t\t\tmax={4000}\n\t\t\t\t\t\tbind:value={value as never}\n\t\t\t\t\t\tstep={10}\n\t\t\t\t\t\tclass=\"[&_[role=slider]]:h-4 [&_[role=slider]]:w-4\"\n\t\t\t\t\t\taria-label=\"Maximum Length\"\n\t\t\t\t\t\t{...restProps}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t{/snippet}\n\t\t</HoverCard.Trigger>\n\t\t<HoverCard.Content class=\"w-[260px] text-sm\" side=\"left\" align=\"start\">\n\t\t\tThe maximum number of tokens to generate. Requests can use up to 2,048 or 4,000 tokens,\n\t\t\tshared between prompt and completion. The exact limit varies by model.\n\t\t</HoverCard.Content>\n\t</HoverCard.Root>\n</div>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/examples/playground/(components)/model-item.svelte",
    "content": "<script lang=\"ts\">\n\timport type { Command as CommandPrimitive } from \"bits-ui\";\n\timport CheckIcon from \"@lucide/svelte/icons/check\";\n\timport type { Model } from \"../(data)/models.js\";\n\timport * as Command from \"$lib/registry/ui/command/index.js\";\n\timport { cn } from \"$lib/utils.js\";\n\n\ttype Props = {\n\t\tmodel: Model;\n\t\tisSelected: boolean;\n\t\tonSelect: () => void;\n\t\tonPeek: (model: Model) => void;\n\t} & CommandPrimitive.ItemProps;\n\n\tlet { model, isSelected, onSelect, onPeek, ...restProps }: Props = $props();\n\n\tfunction mutationObserverAction(node: HTMLElement) {\n\t\tconst observer = new MutationObserver((mutations) => {\n\t\t\tfor (const mutation of mutations) {\n\t\t\t\tif (mutation.type !== \"attributes\" || mutation.attributeName !== \"aria-selected\")\n\t\t\t\t\tcontinue;\n\n\t\t\t\tif (node.getAttribute(\"aria-selected\") === \"true\") {\n\t\t\t\t\tonPeek(model);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tobserver.observe(node, {\n\t\t\tattributes: true,\n\t\t});\n\t\treturn {\n\t\t\tdestroy() {\n\t\t\t\tobserver.disconnect();\n\t\t\t},\n\t\t};\n\t}\n</script>\n\n<Command.Item value={model.name} {onSelect} {...restProps}>\n\t{#snippet child({ props })}\n\t\t<div\n\t\t\tuse:mutationObserverAction\n\t\t\t{...props}\n\t\t\tclass=\"aria-selected:bg-primary aria-selected:text-primary-foreground relative flex cursor-default items-center rounded-sm px-2 py-1.5 text-sm outline-none select-none data-[disabled]:pointer-events-none data-[disabled]:opacity-50\"\n\t\t>\n\t\t\t{model.name}\n\t\t\t{#if isSelected}\n\t\t\t\t<CheckIcon class={cn(\"ms-auto size-4\")} />\n\t\t\t{/if}\n\t\t</div>\n\t{/snippet}\n</Command.Item>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/examples/playground/(components)/model-selector.svelte",
    "content": "<script lang=\"ts\">\n\timport ChevronsUpDownIcon from \"@lucide/svelte/icons/chevrons-up-down\";\n\timport { tick } from \"svelte\";\n\timport { useId } from \"bits-ui\";\n\timport type { Model, ModelType } from \"../(data)/models.js\";\n\timport ModelItem from \"./model-item.svelte\";\n\timport * as HoverCard from \"$lib/registry/ui/hover-card/index.js\";\n\timport { Label } from \"$lib/registry/ui/label/index.js\";\n\timport { buttonVariants } from \"$lib/registry/ui/button/index.js\";\n\timport * as Command from \"$lib/registry/ui/command/index.js\";\n\timport * as Popover from \"$lib/registry/ui/popover/index.js\";\n\n\tlet { types, models }: { types: ModelType[]; models: Model[] } = $props();\n\n\tlet selectedModel = $derived(models[0]);\n\tlet peekedModel = $state<Model | undefined>();\n\tlet open = $state(false);\n\n\tlet value = $state(\"\");\n\n\tconst selectedValue = $derived(models.find((f) => f.id === value)?.name ?? \"Select a model...\");\n\n\t// We want to refocus the trigger button when the user selects\n\t// an item from the list so users can continue navigating the\n\t// rest of the form with the keyboard.\n\tfunction closeAndFocusTrigger(triggerId: string) {\n\t\topen = false;\n\t\ttick().then(() => {\n\t\t\tdocument.getElementById(triggerId)?.focus();\n\t\t});\n\t}\n\n\tfunction onPopoverOpenChange(open: boolean) {\n\t\tif (open) {\n\t\t\tpeekedModel = selectedModel;\n\t\t} else {\n\t\t\tpeekedModel = undefined;\n\t\t}\n\t}\n\n\tconst hoverCardIsOpen = $derived(open && peekedModel !== undefined);\n\tlet triggerId = useId();\n\n\tfunction handlePeek(model: Model) {\n\t\tif (peekedModel === undefined) {\n\t\t\tif (!open) return;\n\t\t\tpeekedModel = model;\n\t\t\treturn;\n\t\t}\n\t\tpeekedModel = model;\n\t}\n\n\tfunction onPopoverOutsideClick() {\n\t\tpeekedModel = undefined;\n\t}\n</script>\n\n<div class=\"grid gap-2\">\n\t<HoverCard.Root openDelay={200}>\n\t\t<HoverCard.Trigger>\n\t\t\t{#snippet child({ props })}\n\t\t\t\t<div {...props}>\n\t\t\t\t\t<Label for=\"model\">Model</Label>\n\t\t\t\t</div>\n\t\t\t{/snippet}\n\t\t</HoverCard.Trigger>\n\t\t<HoverCard.Content class=\"w-[260px] text-sm\" align=\"start\" side=\"left\">\n\t\t\tThe model which will generate the completion. Some models are suitable for natural\n\t\t\tlanguage tasks, others specialize in code. Learn more.\n\t\t</HoverCard.Content>\n\t</HoverCard.Root>\n\n\t<Popover.Root bind:open onOpenChange={onPopoverOpenChange}>\n\t\t<Popover.Trigger\n\t\t\tclass={buttonVariants({ variant: \"outline\", class: \"w-[200px] justify-between\" })}\n\t\t\trole=\"combobox\"\n\t\t\taria-expanded={open}\n\t\t\tid={triggerId}\n\t\t>\n\t\t\t{selectedValue}\n\t\t\t<ChevronsUpDownIcon class=\"opacity-50\" />\n\t\t</Popover.Trigger>\n\t\t<Popover.Content class=\"w-[250px] p-0\" onInteractOutside={onPopoverOutsideClick}>\n\t\t\t<HoverCard.Root open={hoverCardIsOpen} openDelay={0}>\n\t\t\t\t<HoverCard.Content\n\t\t\t\t\tinteractOutsideBehavior=\"ignore\"\n\t\t\t\t\tclass=\"-ms-2 min-h-[280px]\"\n\t\t\t\t\tside=\"left\"\n\t\t\t\t\talign=\"start\"\n\t\t\t\t>\n\t\t\t\t\t{#if peekedModel && hoverCardIsOpen}\n\t\t\t\t\t\t<div class=\"grid gap-2\">\n\t\t\t\t\t\t\t<h4 class=\"leading-none font-medium\">\n\t\t\t\t\t\t\t\t{peekedModel.name}\n\t\t\t\t\t\t\t</h4>\n\t\t\t\t\t\t\t<div class=\"text-muted-foreground text-sm\">\n\t\t\t\t\t\t\t\t{peekedModel.description}\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t{#if peekedModel.strengths}\n\t\t\t\t\t\t\t\t<div class=\"mt-4 grid gap-2\">\n\t\t\t\t\t\t\t\t\t<h5 class=\"text-sm leading-none font-medium\">Strengths</h5>\n\t\t\t\t\t\t\t\t\t<ul class=\"text-muted-foreground text-sm\">\n\t\t\t\t\t\t\t\t\t\t{peekedModel.strengths}\n\t\t\t\t\t\t\t\t\t</ul>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t</div>\n\t\t\t\t\t{/if}\n\t\t\t\t</HoverCard.Content>\n\t\t\t\t<Command.Root loop>\n\t\t\t\t\t<Command.Input placeholder=\"Search Models....\" />\n\t\t\t\t\t<Command.List class=\"h-(--bits-command-list-height) max-h-[400px]\">\n\t\t\t\t\t\t<Command.Empty>No models found.</Command.Empty>\n\t\t\t\t\t\t{#each types as type (type)}\n\t\t\t\t\t\t\t<Command.Group heading={type}>\n\t\t\t\t\t\t\t\t{#each models.filter((model) => model.type === type) as model (model.id)}\n\t\t\t\t\t\t\t\t\t<HoverCard.Trigger>\n\t\t\t\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t\t\t\t<div {...props} role=\"button\" tabindex={0}>\n\t\t\t\t\t\t\t\t\t\t\t\t<ModelItem\n\t\t\t\t\t\t\t\t\t\t\t\t\t{model}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tvalue = model.id;\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tcloseAndFocusTrigger(triggerId);\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\tonPeek={() => {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\thandlePeek(model);\n\t\t\t\t\t\t\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t\t\t\t\t\t\t\tisSelected={value === model.id}\n\t\t\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t\t\t\t</HoverCard.Trigger>\n\t\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t\t</Command.Group>\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</Command.List>\n\t\t\t\t</Command.Root>\n\t\t\t</HoverCard.Root>\n\t\t</Popover.Content>\n\t</Popover.Root>\n</div>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/examples/playground/(components)/preset-actions.svelte",
    "content": "<script lang=\"ts\">\n\timport EllipsisIcon from \"@lucide/svelte/icons/ellipsis\";\n\timport * as Dialog from \"$lib/registry/ui/dialog/index.js\";\n\timport * as AlertDialog from \"$lib/registry/ui/alert-dialog/index.js\";\n\timport { Button, buttonVariants } from \"$lib/registry/ui/button/index.js\";\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\timport { Label } from \"$lib/registry/ui/label/index.js\";\n\timport { Switch } from \"$lib/registry/ui/switch/index.js\";\n\n\tlet open = $state(false);\n\tlet showDeleteDialog = $state(false);\n</script>\n\n<DropdownMenu.Root>\n\t<DropdownMenu.Trigger class={buttonVariants({ variant: \"secondary\" })}>\n\t\t<span class=\"sr-only\">Actions</span>\n\t\t<EllipsisIcon />\n\t</DropdownMenu.Trigger>\n\t<DropdownMenu.Content align=\"end\">\n\t\t<DropdownMenu.Item onSelect={() => (open = true)}>\n\t\t\tContent filter preferences\n\t\t</DropdownMenu.Item>\n\t\t<DropdownMenu.Separator />\n\t\t<DropdownMenu.Item onSelect={() => (showDeleteDialog = true)} class=\"text-red-600\">\n\t\t\tDelete preset\n\t\t</DropdownMenu.Item>\n\t</DropdownMenu.Content>\n</DropdownMenu.Root>\n<Dialog.Root bind:open>\n\t<Dialog.Content>\n\t\t<Dialog.Header>\n\t\t\t<Dialog.Title>Content filter preferences</Dialog.Title>\n\t\t\t<Dialog.Description>\n\t\t\t\tThe content filter flags text that may violate our content policy. It&apos;s powered\n\t\t\t\tby our moderation endpoint which is free to use to moderate your OpenAI API traffic.\n\t\t\t\tLearn more.\n\t\t\t</Dialog.Description>\n\t\t</Dialog.Header>\n\t\t<div class=\"py-6\">\n\t\t\t<h4 class=\"text-muted-foreground text-sm\">Playground Warnings</h4>\n\t\t\t<div class=\"flex items-start justify-between space-x-4 pt-3\">\n\t\t\t\t<Switch name=\"show\" id=\"show\" checked />\n\t\t\t\t<Label class=\"grid gap-1 font-normal\" for=\"show\">\n\t\t\t\t\t<span class=\"font-semibold\"> Show a warning when content is flagged </span>\n\t\t\t\t\t<span class=\"text-muted-foreground text-sm\">\n\t\t\t\t\t\tA warning will be shown when sexual, hateful, violent or self-harm content\n\t\t\t\t\t\tis detected.\n\t\t\t\t\t</span>\n\t\t\t\t</Label>\n\t\t\t</div>\n\t\t</div>\n\t\t<Dialog.Footer>\n\t\t\t<Button variant=\"secondary\" onclick={() => (open = false)}>Close</Button>\n\t\t</Dialog.Footer>\n\t</Dialog.Content>\n</Dialog.Root>\n<AlertDialog.Root bind:open={showDeleteDialog}>\n\t<AlertDialog.Content>\n\t\t<AlertDialog.Header>\n\t\t\t<AlertDialog.Title>Are you sure absolutely sure?</AlertDialog.Title>\n\t\t\t<AlertDialog.Description>\n\t\t\t\tThis action cannot be undone. This preset will no longer be accessible by you or\n\t\t\t\tothers you&apos;ve shared it with.\n\t\t\t</AlertDialog.Description>\n\t\t</AlertDialog.Header>\n\t\t<AlertDialog.Footer>\n\t\t\t<AlertDialog.Cancel>Cancel</AlertDialog.Cancel>\n\t\t\t<Button\n\t\t\t\tvariant=\"destructive\"\n\t\t\t\tonclick={() => {\n\t\t\t\t\tshowDeleteDialog = false;\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\tDelete\n\t\t\t</Button>\n\t\t</AlertDialog.Footer>\n\t</AlertDialog.Content>\n</AlertDialog.Root>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/examples/playground/(components)/preset-save.svelte",
    "content": "<script lang=\"ts\">\n\timport { Button, buttonVariants } from \"$lib/registry/ui/button/index.js\";\n\timport * as Dialog from \"$lib/registry/ui/dialog/index.js\";\n\timport { Input } from \"$lib/registry/ui/input/index.js\";\n\timport { Label } from \"$lib/registry/ui/label/index.js\";\n</script>\n\n<Dialog.Root>\n\t<Dialog.Trigger class={buttonVariants({ variant: \"secondary\" })}>Save</Dialog.Trigger>\n\t<Dialog.Content class=\"sm:max-w-[475px]\">\n\t\t<Dialog.Header>\n\t\t\t<Dialog.Title>Save preset</Dialog.Title>\n\t\t\t<Dialog.Description>\n\t\t\t\tThis will save the current playground state as a preset which you can access later\n\t\t\t\tor share with others.\n\t\t\t</Dialog.Description>\n\t\t</Dialog.Header>\n\t\t<div class=\"grid gap-4 py-4\">\n\t\t\t<div class=\"grid gap-2\">\n\t\t\t\t<Label for=\"name\">Name</Label>\n\t\t\t\t<Input id=\"name\" />\n\t\t\t</div>\n\t\t\t<div class=\"grid gap-2\">\n\t\t\t\t<Label for=\"description\">Description</Label>\n\t\t\t\t<Input id=\"description\" />\n\t\t\t</div>\n\t\t</div>\n\t\t<Dialog.Footer>\n\t\t\t<Button type=\"submit\">Save</Button>\n\t\t</Dialog.Footer>\n\t</Dialog.Content>\n</Dialog.Root>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/examples/playground/(components)/preset-selector.svelte",
    "content": "<script lang=\"ts\">\n\timport CheckIcon from \"@lucide/svelte/icons/check\";\n\timport ChevronsUpDownIcon from \"@lucide/svelte/icons/chevrons-up-down\";\n\timport { tick } from \"svelte\";\n\timport { useId } from \"bits-ui\";\n\timport type { Preset } from \"../(data)/presets.js\";\n\timport { cn } from \"$lib/utils.js\";\n\timport { buttonVariants } from \"$lib/registry/ui/button/index.js\";\n\timport * as Command from \"$lib/registry/ui/command/index.js\";\n\timport * as Popover from \"$lib/registry/ui/popover/index.js\";\n\n\tlet { presets }: { presets: Preset[] } = $props();\n\n\tlet open = $state(false);\n\n\tlet value = $state(\"\");\n\n\tconst selectedValue = $derived(\n\t\tpresets.find((f) => f.name === value)?.name ?? \"Load a preset...\"\n\t);\n\n\tlet triggerId = useId();\n\n\t// We want to refocus the trigger button when the user selects\n\t// an item from the list so users can continue navigating the\n\t// rest of the form with the keyboard.\n\tfunction closeAndFocusTrigger(triggerId: string) {\n\t\topen = false;\n\t\ttick().then(() => {\n\t\t\tdocument.getElementById(triggerId)?.focus();\n\t\t});\n\t}\n</script>\n\n<Popover.Root bind:open>\n\t<Popover.Trigger\n\t\tclass={buttonVariants({\n\t\t\tvariant: \"outline\",\n\t\t\tclass: \"flex-1 justify-between md:max-w-[200px] lg:max-w-[300px]\",\n\t\t})}\n\t\trole=\"combobox\"\n\t\taria-expanded={open}\n\t\tid={triggerId}\n\t>\n\t\t{selectedValue}\n\t\t<ChevronsUpDownIcon class=\"opacity-50\" />\n\t</Popover.Trigger>\n\t<Popover.Content class=\"w-full p-0 md:w-[200px] lg:w-[300px]\">\n\t\t<Command.Root>\n\t\t\t<Command.Input placeholder=\"Search presets...\" />\n\t\t\t<Command.List>\n\t\t\t\t<Command.Empty>No presets found.</Command.Empty>\n\t\t\t\t<Command.Group heading=\"Examples\">\n\t\t\t\t\t{#each presets as preset (preset)}\n\t\t\t\t\t\t<Command.Item\n\t\t\t\t\t\t\tvalue={preset.name}\n\t\t\t\t\t\t\tclass=\"aria-selected:bg-primary aria-selected:text-primary-foreground\"\n\t\t\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t\t\tvalue = preset.name;\n\t\t\t\t\t\t\t\tcloseAndFocusTrigger(triggerId);\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{preset.name}\n\t\t\t\t\t\t\t<CheckIcon\n\t\t\t\t\t\t\t\tclass={cn(value === preset.name ? \"opacity-100\" : \"opacity-0\")}\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t</Command.Item>\n\t\t\t\t\t{/each}\n\t\t\t\t</Command.Group>\n\t\t\t</Command.List>\n\t\t</Command.Root>\n\t</Popover.Content>\n</Popover.Root>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/examples/playground/(components)/preset-share.svelte",
    "content": "<script lang=\"ts\">\n\timport CopyIcon from \"@lucide/svelte/icons/copy\";\n\timport { Button, buttonVariants } from \"$lib/registry/ui/button/index.js\";\n\timport { Input } from \"$lib/registry/ui/input/index.js\";\n\timport { Label } from \"$lib/registry/ui/label/index.js\";\n\timport * as Popover from \"$lib/registry/ui/popover/index.js\";\n</script>\n\n<Popover.Root>\n\t<Popover.Trigger class={buttonVariants({ variant: \"secondary\" })}>Share</Popover.Trigger>\n\t<Popover.Content class=\"w-[520px]\" align=\"end\">\n\t\t<div class=\"flex flex-col space-y-2 text-center sm:text-start\">\n\t\t\t<h3 class=\"text-lg font-semibold\">Share preset</h3>\n\t\t\t<p class=\"text-muted-foreground text-sm\">\n\t\t\t\tAnyone who has this link and an OpenAI account will be able to view this.\n\t\t\t</p>\n\t\t</div>\n\t\t<div class=\"flex items-center space-x-2 pt-4\">\n\t\t\t<div class=\"grid flex-1 gap-2\">\n\t\t\t\t<Label for=\"link\" class=\"sr-only\">Link</Label>\n\t\t\t\t<Input\n\t\t\t\t\tid=\"link\"\n\t\t\t\t\tvalue=\"https://platform.openai.com/playground/p/7bbKYQvsVkNmVb8NGcdUOLae?model=text-davinci-003\"\n\t\t\t\t\treadonly\n\t\t\t\t\tclass=\"h-9\"\n\t\t\t\t/>\n\t\t\t</div>\n\t\t\t<Button type=\"submit\" size=\"sm\" class=\"px-3\">\n\t\t\t\t<span class=\"sr-only\"> Copy </span>\n\t\t\t\t<CopyIcon />\n\t\t\t</Button>\n\t\t</div>\n\t</Popover.Content>\n</Popover.Root>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/examples/playground/(components)/temperature-selector.svelte",
    "content": "<script lang=\"ts\">\n\timport type { Slider as SliderPrimitive } from \"bits-ui\";\n\timport * as HoverCard from \"$lib/registry/ui/hover-card/index.js\";\n\timport { Label } from \"$lib/registry/ui/label/index.js\";\n\timport { Slider } from \"$lib/registry/ui/slider/index.js\";\n\n\tlet { value = $bindable(), ...restProps }: SliderPrimitive.RootProps = $props();\n</script>\n\n<div class=\"grid gap-2 pt-2\">\n\t<HoverCard.Root openDelay={200} closeDelay={100}>\n\t\t<HoverCard.Trigger>\n\t\t\t{#snippet child({ props })}\n\t\t\t\t<div class=\"grid gap-4\" {...props}>\n\t\t\t\t\t<div class=\"flex items-center justify-between\">\n\t\t\t\t\t\t<Label for=\"temperature\">Temperature</Label>\n\t\t\t\t\t\t<span\n\t\t\t\t\t\t\tclass=\"text-muted-foreground hover:border-border w-12 rounded-md border border-transparent px-2 py-0.5 text-end text-sm\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{value}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</div>\n\t\t\t\t\t<Slider\n\t\t\t\t\t\tid=\"temperature\"\n\t\t\t\t\t\tmax={1}\n\t\t\t\t\t\tbind:value={value as never}\n\t\t\t\t\t\tstep={0.1}\n\t\t\t\t\t\tclass=\"[&_[role=slider]]:h-4 [&_[role=slider]]:w-4\"\n\t\t\t\t\t\taria-label=\"Temperature\"\n\t\t\t\t\t\t{...restProps}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t{/snippet}\n\t\t</HoverCard.Trigger>\n\t\t<HoverCard.Content class=\"w-[260px] text-sm\" align=\"start\" side=\"left\">\n\t\t\tControls randomness: lowering results in less random completions. As the temperature\n\t\t\tapproaches zero, the model will become deterministic and repetitive.\n\t\t</HoverCard.Content>\n\t</HoverCard.Root>\n</div>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/examples/playground/(components)/top-p-selector.svelte",
    "content": "<script lang=\"ts\">\n\timport type { Slider as SliderPrimitive } from \"bits-ui\";\n\timport * as HoverCard from \"$lib/registry/ui/hover-card/index.js\";\n\timport { Label } from \"$lib/registry/ui/label/index.js\";\n\timport { Slider } from \"$lib/registry/ui/slider/index.js\";\n\n\tlet { value = $bindable(), ...restProps }: SliderPrimitive.RootProps = $props();\n</script>\n\n<div class=\"grid gap-2 pt-2\">\n\t<HoverCard.Root openDelay={200} closeDelay={100}>\n\t\t<HoverCard.Trigger>\n\t\t\t{#snippet child({ props })}\n\t\t\t\t<div class=\"grid gap-4\" {...props}>\n\t\t\t\t\t<div class=\"flex items-center justify-between\">\n\t\t\t\t\t\t<Label for=\"top-p\">Top P</Label>\n\t\t\t\t\t\t<span\n\t\t\t\t\t\t\tclass=\"text-muted-foreground hover:border-border w-12 rounded-md border border-transparent px-2 py-0.5 text-end text-sm\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t{value}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t</div>\n\t\t\t\t\t<Slider\n\t\t\t\t\t\tid=\"top-p\"\n\t\t\t\t\t\tmax={1}\n\t\t\t\t\t\tbind:value={value as never}\n\t\t\t\t\t\tstep={0.1}\n\t\t\t\t\t\tclass=\"[&_[role=slider]]:h-4 [&_[role=slider]]:w-4\"\n\t\t\t\t\t\taria-label=\"Top P\"\n\t\t\t\t\t\t{...restProps}\n\t\t\t\t\t/>\n\t\t\t\t</div>\n\t\t\t{/snippet}\n\t\t</HoverCard.Trigger>\n\t\t<HoverCard.Content class=\"w-[260px] text-sm\" side=\"left\" align=\"start\">\n\t\t\tControl diversity via nucleus sampling: 0.5 means half of all likelihood-weighted\n\t\t\toptions are considered.\n\t\t</HoverCard.Content>\n\t</HoverCard.Root>\n</div>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/examples/playground/(data)/models.ts",
    "content": "export const types = [\"GPT-3\", \"Codex\"];\n\nexport type ModelType = (typeof types)[number];\n\nexport type Model<Type = string> = {\n\tid: string;\n\tname: string;\n\tdescription: string;\n\tstrengths?: string;\n\ttype: Type;\n};\n\nexport const models: Model<ModelType>[] = [\n\t{\n\t\tid: \"c305f976-8e38-42b1-9fb7-d21b2e34f0da\",\n\t\tname: \"text-davinci-003\",\n\t\tdescription:\n\t\t\t\"Most capable GPT-3 model. Can do any task the other models can do, often with higher quality, longer output and better instruction-following. Also supports inserting completions within text.\",\n\t\ttype: \"GPT-3\",\n\t\tstrengths:\n\t\t\t\"Complex intent, cause and effect, creative generation, search, summarization for audience\",\n\t},\n\t{\n\t\tid: \"464a47c3-7ab5-44d7-b669-f9cb5a9e8465\",\n\t\tname: \"text-curie-001\",\n\t\tdescription: \"Very capable, but faster and lower cost than Davinci.\",\n\t\ttype: \"GPT-3\",\n\t\tstrengths: \"Language translation, complex classification, sentiment, summarization\",\n\t},\n\t{\n\t\tid: \"ac0797b0-7e31-43b6-a494-da7e2ab43445\",\n\t\tname: \"text-babbage-001\",\n\t\tdescription: \"Capable of straightforward tasks, very fast, and lower cost.\",\n\t\ttype: \"GPT-3\",\n\t\tstrengths: \"Moderate classification, semantic search\",\n\t},\n\t{\n\t\tid: \"be638fb1-973b-4471-a49c-290325085802\",\n\t\tname: \"text-ada-001\",\n\t\tdescription:\n\t\t\t\"Capable of very simple tasks, usually the fastest model in the GPT-3 series, and lowest cost.\",\n\t\ttype: \"GPT-3\",\n\t\tstrengths: \"Parsing text, simple classification, address correction, keywords\",\n\t},\n\t{\n\t\tid: \"b43c0ea9-5ad4-456a-ae29-26cd77b6d0fb\",\n\t\tname: \"code-davinci-002\",\n\t\tdescription:\n\t\t\t\"Most capable Codex model. Particularly good at translating natural language to code. In addition to completing code, also supports inserting completions within code.\",\n\t\ttype: \"Codex\",\n\t},\n\t{\n\t\tid: \"bbd57291-4622-4a21-9eed-dd6bd786fdd1\",\n\t\tname: \"code-cushman-001\",\n\t\tdescription:\n\t\t\t\"Almost as capable as Davinci Codex, but slightly faster. This speed advantage may make it preferable for real-time applications.\",\n\t\ttype: \"Codex\",\n\t\tstrengths: \"Real-time application where low-latency is preferable\",\n\t},\n];\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/examples/playground/(data)/presets.ts",
    "content": "export type Preset = {\n\tid: string;\n\tname: string;\n};\n\nexport const presets: Preset[] = [\n\t{\n\t\tid: \"9cb0e66a-9937-465d-a188-2c4c4ae2401f\",\n\t\tname: \"Grammatical Standard English\",\n\t},\n\t{\n\t\tid: \"61eb0e32-2391-4cd3-adc3-66efe09bc0b7\",\n\t\tname: \"Summarize for a 2nd grader\",\n\t},\n\t{\n\t\tid: \"a4e1fa51-f4ce-4e45-892c-224030a00bdd\",\n\t\tname: \"Text to command\",\n\t},\n\t{\n\t\tid: \"cc198b13-4933-43aa-977e-dcd95fa30770\",\n\t\tname: \"Q&A\",\n\t},\n\t{\n\t\tid: \"adfa95be-a575-45fd-a9ef-ea45386c64de\",\n\t\tname: \"English to other languages\",\n\t},\n\t{\n\t\tid: \"c569a06a-0bd6-43a7-adf9-bf68c09e7a79\",\n\t\tname: \"Parse unstructured data\",\n\t},\n\t{\n\t\tid: \"15ccc0d7-f37a-4f0a-8163-a37e162877dc\",\n\t\tname: \"Classification\",\n\t},\n\t{\n\t\tid: \"4641ef41-1c0f-421d-b4b2-70fe431081f3\",\n\t\tname: \"Natural language to Python\",\n\t},\n\t{\n\t\tid: \"48d34082-72f3-4a1b-a14d-f15aca4f57a0\",\n\t\tname: \"Explain code\",\n\t},\n\t{\n\t\tid: \"dfd42fd5-0394-4810-92c6-cc907d3bfd1a\",\n\t\tname: \"Chat\",\n\t},\n];\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/examples/playground/+page.svelte",
    "content": "<script lang=\"ts\">\n\timport RotateCCWIcon from \"@lucide/svelte/icons/rotate-ccw\";\n\timport {\n\t\tCodeViewer,\n\t\tMaxLengthSelector,\n\t\tModelSelector,\n\t\tPresetActions,\n\t\tPresetSave,\n\t\tPresetSelector,\n\t\tPresetShare,\n\t\tTemperatureSelector,\n\t\tTopPSelector,\n\t} from \"./(components)/index.js\";\n\timport { models, types } from \"./(data)/models.js\";\n\timport { presets } from \"./(data)/presets.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport { Label } from \"$lib/registry/ui/label/index.js\";\n\timport { Separator } from \"$lib/registry/ui/separator/index.js\";\n\timport * as Tabs from \"$lib/registry/ui/tabs/index.js\";\n\timport { Textarea } from \"$lib/registry/ui/textarea/index.js\";\n\timport * as HoverCard from \"$lib/registry/ui/hover-card/index.js\";\n\timport Metadata from \"$lib/components/metadata.svelte\";\n\n\tconst title = \"Playground\";\n\tconst description = \"The OpenAI Playground build using the components.\";\n</script>\n\n<Metadata\n\t{title}\n\t{description}\n\togImage={{\n\t\turl: `/og?title=${encodeURIComponent(title)}&description=${encodeURIComponent(description)}`,\n\t}}\n/>\n\n<div class=\"md:hidden\">\n\t<img src=\"/img/examples/playground-light.png\" alt=\"Playground\" class=\"block dark:hidden\" />\n\t<img src=\"/img/examples/playground-dark.png\" alt=\"Playground\" class=\"hidden dark:block\" />\n</div>\n<div class=\"hidden h-full flex-col md:flex\">\n\t<div\n\t\tclass=\"container flex flex-col items-start justify-between space-y-2 py-4 sm:flex-row sm:items-center sm:space-y-0 md:h-16\"\n\t>\n\t\t<h2 class=\"text-lg font-semibold\">Playground</h2>\n\t\t<div class=\"ms-auto flex w-full space-x-2 sm:justify-end\">\n\t\t\t<PresetSelector {presets} />\n\t\t\t<PresetSave />\n\t\t\t<div class=\"hidden space-x-2 md:flex\">\n\t\t\t\t<CodeViewer />\n\t\t\t\t<PresetShare />\n\t\t\t</div>\n\t\t\t<PresetActions />\n\t\t</div>\n\t</div>\n\t<Separator />\n\t<Tabs.Root value=\"complete\" class=\"flex-1\">\n\t\t<div class=\"container h-full py-6\">\n\t\t\t<div class=\"grid h-full items-stretch gap-6 md:grid-cols-[1fr_200px]\">\n\t\t\t\t<div class=\"hidden flex-col space-y-4 sm:flex md:order-2\">\n\t\t\t\t\t<div class=\"grid gap-2\">\n\t\t\t\t\t\t<HoverCard.Root openDelay={200}>\n\t\t\t\t\t\t\t<HoverCard.Trigger>\n\t\t\t\t\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\t\tclass=\"text-sm leading-none font-medium peer-disabled:cursor-not-allowed peer-disabled:opacity-70\"\n\t\t\t\t\t\t\t\t\t\t{...props}\n\t\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t\tMode\n\t\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t\t{/snippet}\n\t\t\t\t\t\t\t</HoverCard.Trigger>\n\t\t\t\t\t\t\t<HoverCard.Content class=\"w-[320px] text-sm\" side=\"left\">\n\t\t\t\t\t\t\t\tChoose the interface that best suits your task. You can provide: a\n\t\t\t\t\t\t\t\tsimple prompt to complete, starting and ending text to insert a\n\t\t\t\t\t\t\t\tcompletion within, or some text with instructions to edit it.\n\t\t\t\t\t\t\t</HoverCard.Content>\n\t\t\t\t\t\t</HoverCard.Root>\n\t\t\t\t\t\t<Tabs.List class=\"grid grid-cols-3\">\n\t\t\t\t\t\t\t<Tabs.Trigger value=\"complete\">\n\t\t\t\t\t\t\t\t<span class=\"sr-only\">Complete</span>\n\t\t\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\t\t\t\t\t\t\tviewBox=\"0 0 20 20\"\n\t\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\t\tclass=\"size-5\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<rect\n\t\t\t\t\t\t\t\t\t\tx=\"4\"\n\t\t\t\t\t\t\t\t\t\ty=\"3\"\n\t\t\t\t\t\t\t\t\t\twidth=\"12\"\n\t\t\t\t\t\t\t\t\t\theight=\"2\"\n\t\t\t\t\t\t\t\t\t\trx=\"1\"\n\t\t\t\t\t\t\t\t\t\tfill=\"currentColor\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<rect\n\t\t\t\t\t\t\t\t\t\tx=\"4\"\n\t\t\t\t\t\t\t\t\t\ty=\"7\"\n\t\t\t\t\t\t\t\t\t\twidth=\"12\"\n\t\t\t\t\t\t\t\t\t\theight=\"2\"\n\t\t\t\t\t\t\t\t\t\trx=\"1\"\n\t\t\t\t\t\t\t\t\t\tfill=\"currentColor\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<rect\n\t\t\t\t\t\t\t\t\t\tx=\"4\"\n\t\t\t\t\t\t\t\t\t\ty=\"11\"\n\t\t\t\t\t\t\t\t\t\twidth=\"3\"\n\t\t\t\t\t\t\t\t\t\theight=\"2\"\n\t\t\t\t\t\t\t\t\t\trx=\"1\"\n\t\t\t\t\t\t\t\t\t\tfill=\"currentColor\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<rect\n\t\t\t\t\t\t\t\t\t\tx=\"4\"\n\t\t\t\t\t\t\t\t\t\ty=\"15\"\n\t\t\t\t\t\t\t\t\t\twidth=\"3\"\n\t\t\t\t\t\t\t\t\t\theight=\"2\"\n\t\t\t\t\t\t\t\t\t\trx=\"1\"\n\t\t\t\t\t\t\t\t\t\tfill=\"currentColor\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<rect\n\t\t\t\t\t\t\t\t\t\tx=\"8.5\"\n\t\t\t\t\t\t\t\t\t\ty=\"11\"\n\t\t\t\t\t\t\t\t\t\twidth=\"3\"\n\t\t\t\t\t\t\t\t\t\theight=\"2\"\n\t\t\t\t\t\t\t\t\t\trx=\"1\"\n\t\t\t\t\t\t\t\t\t\tfill=\"currentColor\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<rect\n\t\t\t\t\t\t\t\t\t\tx=\"8.5\"\n\t\t\t\t\t\t\t\t\t\ty=\"15\"\n\t\t\t\t\t\t\t\t\t\twidth=\"3\"\n\t\t\t\t\t\t\t\t\t\theight=\"2\"\n\t\t\t\t\t\t\t\t\t\trx=\"1\"\n\t\t\t\t\t\t\t\t\t\tfill=\"currentColor\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<rect\n\t\t\t\t\t\t\t\t\t\tx=\"13\"\n\t\t\t\t\t\t\t\t\t\ty=\"11\"\n\t\t\t\t\t\t\t\t\t\twidth=\"3\"\n\t\t\t\t\t\t\t\t\t\theight=\"2\"\n\t\t\t\t\t\t\t\t\t\trx=\"1\"\n\t\t\t\t\t\t\t\t\t\tfill=\"currentColor\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t\t</Tabs.Trigger>\n\t\t\t\t\t\t\t<Tabs.Trigger value=\"insert\">\n\t\t\t\t\t\t\t\t<span class=\"sr-only\">Insert</span>\n\t\t\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\t\t\t\t\t\t\tviewBox=\"0 0 20 20\"\n\t\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\t\tclass=\"size-5\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\t\tfill-rule=\"evenodd\"\n\t\t\t\t\t\t\t\t\t\tclip-rule=\"evenodd\"\n\t\t\t\t\t\t\t\t\t\td=\"M14.491 7.769a.888.888 0 0 1 .287.648.888.888 0 0 1-.287.648l-3.916 3.667a1.013 1.013 0 0 1-.692.268c-.26 0-.509-.097-.692-.268L5.275 9.065A.886.886 0 0 1 5 8.42a.889.889 0 0 1 .287-.64c.181-.17.427-.267.683-.269.257-.002.504.09.69.258L8.903 9.87V3.917c0-.243.103-.477.287-.649.183-.171.432-.268.692-.268.26 0 .509.097.692.268a.888.888 0 0 1 .287.649V9.87l2.245-2.102c.183-.172.432-.269.692-.269.26 0 .508.097.692.269Z\"\n\t\t\t\t\t\t\t\t\t\tfill=\"currentColor\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<rect\n\t\t\t\t\t\t\t\t\t\tx=\"4\"\n\t\t\t\t\t\t\t\t\t\ty=\"15\"\n\t\t\t\t\t\t\t\t\t\twidth=\"3\"\n\t\t\t\t\t\t\t\t\t\theight=\"2\"\n\t\t\t\t\t\t\t\t\t\trx=\"1\"\n\t\t\t\t\t\t\t\t\t\tfill=\"currentColor\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<rect\n\t\t\t\t\t\t\t\t\t\tx=\"8.5\"\n\t\t\t\t\t\t\t\t\t\ty=\"15\"\n\t\t\t\t\t\t\t\t\t\twidth=\"3\"\n\t\t\t\t\t\t\t\t\t\theight=\"2\"\n\t\t\t\t\t\t\t\t\t\trx=\"1\"\n\t\t\t\t\t\t\t\t\t\tfill=\"currentColor\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<rect\n\t\t\t\t\t\t\t\t\t\tx=\"13\"\n\t\t\t\t\t\t\t\t\t\ty=\"15\"\n\t\t\t\t\t\t\t\t\t\twidth=\"3\"\n\t\t\t\t\t\t\t\t\t\theight=\"2\"\n\t\t\t\t\t\t\t\t\t\trx=\"1\"\n\t\t\t\t\t\t\t\t\t\tfill=\"currentColor\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t\t</Tabs.Trigger>\n\t\t\t\t\t\t\t<Tabs.Trigger value=\"edit\">\n\t\t\t\t\t\t\t\t<span class=\"sr-only\">Edit</span>\n\t\t\t\t\t\t\t\t<svg\n\t\t\t\t\t\t\t\t\txmlns=\"http://www.w3.org/2000/svg\"\n\t\t\t\t\t\t\t\t\tviewBox=\"0 0 20 20\"\n\t\t\t\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\t\t\t\tclass=\"size-5\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t<rect\n\t\t\t\t\t\t\t\t\t\tx=\"4\"\n\t\t\t\t\t\t\t\t\t\ty=\"3\"\n\t\t\t\t\t\t\t\t\t\twidth=\"12\"\n\t\t\t\t\t\t\t\t\t\theight=\"2\"\n\t\t\t\t\t\t\t\t\t\trx=\"1\"\n\t\t\t\t\t\t\t\t\t\tfill=\"currentColor\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<rect\n\t\t\t\t\t\t\t\t\t\tx=\"4\"\n\t\t\t\t\t\t\t\t\t\ty=\"7\"\n\t\t\t\t\t\t\t\t\t\twidth=\"12\"\n\t\t\t\t\t\t\t\t\t\theight=\"2\"\n\t\t\t\t\t\t\t\t\t\trx=\"1\"\n\t\t\t\t\t\t\t\t\t\tfill=\"currentColor\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<rect\n\t\t\t\t\t\t\t\t\t\tx=\"4\"\n\t\t\t\t\t\t\t\t\t\ty=\"11\"\n\t\t\t\t\t\t\t\t\t\twidth=\"3\"\n\t\t\t\t\t\t\t\t\t\theight=\"2\"\n\t\t\t\t\t\t\t\t\t\trx=\"1\"\n\t\t\t\t\t\t\t\t\t\tfill=\"currentColor\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<rect\n\t\t\t\t\t\t\t\t\t\tx=\"4\"\n\t\t\t\t\t\t\t\t\t\ty=\"15\"\n\t\t\t\t\t\t\t\t\t\twidth=\"4\"\n\t\t\t\t\t\t\t\t\t\theight=\"2\"\n\t\t\t\t\t\t\t\t\t\trx=\"1\"\n\t\t\t\t\t\t\t\t\t\tfill=\"currentColor\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<rect\n\t\t\t\t\t\t\t\t\t\tx=\"8.5\"\n\t\t\t\t\t\t\t\t\t\ty=\"11\"\n\t\t\t\t\t\t\t\t\t\twidth=\"3\"\n\t\t\t\t\t\t\t\t\t\theight=\"2\"\n\t\t\t\t\t\t\t\t\t\trx=\"1\"\n\t\t\t\t\t\t\t\t\t\tfill=\"currentColor\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t<path\n\t\t\t\t\t\t\t\t\t\td=\"M17.154 11.346a1.182 1.182 0 0 0-1.671 0L11 15.829V17.5h1.671l4.483-4.483a1.182 1.182 0 0 0 0-1.671Z\"\n\t\t\t\t\t\t\t\t\t\tfill=\"currentColor\"\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t</svg>\n\t\t\t\t\t\t\t</Tabs.Trigger>\n\t\t\t\t\t\t</Tabs.List>\n\t\t\t\t\t</div>\n\t\t\t\t\t<ModelSelector {types} {models} />\n\t\t\t\t\t<TemperatureSelector type=\"single\" value={0.56} />\n\t\t\t\t\t<MaxLengthSelector type=\"single\" value={256} />\n\t\t\t\t\t<TopPSelector type=\"single\" value={0.9} />\n\t\t\t\t</div>\n\t\t\t\t<div class=\"md:order-1\">\n\t\t\t\t\t<Tabs.Content value=\"complete\" class=\"mt-0 border-0 p-0\">\n\t\t\t\t\t\t<div class=\"flex h-full flex-col space-y-4\">\n\t\t\t\t\t\t\t<Textarea\n\t\t\t\t\t\t\t\tplaceholder=\"Write a tagline for an ice cream shop\"\n\t\t\t\t\t\t\t\tclass=\"min-h-[400px] flex-1 p-4 md:min-h-[700px] lg:min-h-[700px]\"\n\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t<div class=\"flex items-center space-x-2\">\n\t\t\t\t\t\t\t\t<Button>Submit</Button>\n\t\t\t\t\t\t\t\t<Button variant=\"secondary\">\n\t\t\t\t\t\t\t\t\t<span class=\"sr-only\">Show history</span>\n\t\t\t\t\t\t\t\t\t<RotateCCWIcon class=\"size-4\" />\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</Tabs.Content>\n\t\t\t\t\t<Tabs.Content value=\"insert\" class=\"mt-0 border-0 p-0\">\n\t\t\t\t\t\t<div class=\"flex flex-col space-y-4\">\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclass=\"grid h-full grid-rows-2 gap-6 lg:grid-cols-2 lg:grid-rows-1\"\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<Textarea\n\t\t\t\t\t\t\t\t\tplaceholder=\"We're writing to [inset]. Congrats from OpenAI!\"\n\t\t\t\t\t\t\t\t\tclass=\"h-full min-h-[300px] lg:min-h-[700px] xl:min-h-[700px]\"\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t<div class=\"bg-muted rounded-md border\"></div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"flex items-center space-x-2\">\n\t\t\t\t\t\t\t\t<Button>Submit</Button>\n\t\t\t\t\t\t\t\t<Button variant=\"secondary\">\n\t\t\t\t\t\t\t\t\t<span class=\"sr-only\">Show history</span>\n\t\t\t\t\t\t\t\t\t<RotateCCWIcon class=\"size-4\" />\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</Tabs.Content>\n\t\t\t\t\t<Tabs.Content value=\"edit\" class=\"mt-0 border-0 p-0\">\n\t\t\t\t\t\t<div class=\"flex flex-col space-y-4\">\n\t\t\t\t\t\t\t<div class=\"grid h-full gap-6 lg:grid-cols-2\">\n\t\t\t\t\t\t\t\t<div class=\"flex flex-col space-y-4\">\n\t\t\t\t\t\t\t\t\t<div class=\"flex flex-1 flex-col space-y-2\">\n\t\t\t\t\t\t\t\t\t\t<Label for=\"input\">Input</Label>\n\t\t\t\t\t\t\t\t\t\t<Textarea\n\t\t\t\t\t\t\t\t\t\t\tid=\"input\"\n\t\t\t\t\t\t\t\t\t\t\tplaceholder=\"We is going to the market.\"\n\t\t\t\t\t\t\t\t\t\t\tclass=\"flex-1 lg:min-h-[580px]\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t\t<div class=\"flex flex-col space-y-2\">\n\t\t\t\t\t\t\t\t\t\t<Label for=\"instructions\">Instructions</Label>\n\t\t\t\t\t\t\t\t\t\t<Textarea\n\t\t\t\t\t\t\t\t\t\t\tid=\"instructions\"\n\t\t\t\t\t\t\t\t\t\t\tplaceholder=\"Fix the grammar.\"\n\t\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\t\tclass=\"bg-muted mt-[21px] min-h-[400px] rounded-md border lg:min-h-[700px]\"\n\t\t\t\t\t\t\t\t></div>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t<div class=\"flex items-center space-x-2\">\n\t\t\t\t\t\t\t\t<Button>Submit</Button>\n\t\t\t\t\t\t\t\t<Button variant=\"secondary\">\n\t\t\t\t\t\t\t\t\t<span class=\"sr-only\">Show history</span>\n\t\t\t\t\t\t\t\t\t<RotateCCWIcon class=\"size-4\" />\n\t\t\t\t\t\t\t\t</Button>\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t</div>\n\t\t\t\t\t</Tabs.Content>\n\t\t\t\t</div>\n\t\t\t</div>\n\t\t</div>\n\t</Tabs.Root>\n</div>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/examples/tasks/+page.svelte",
    "content": "<script lang=\"ts\">\n\timport DataTable from \"./components/data-table.svelte\";\n\timport UserNav from \"./components/user-nav.svelte\";\n\timport { data } from \"./data/tasks.js\";\n</script>\n\n<div class=\"md:hidden\">\n\t<img src=\"/img/examples/tasks-light.png\" alt=\"Tasks\" class=\"block dark:hidden\" />\n\t<img src=\"/img/examples/tasks-dark.png\" alt=\"Tasks\" class=\"hidden dark:block\" />\n</div>\n<div class=\"hidden h-full flex-1 flex-col gap-8 p-8 md:flex\">\n\t<div class=\"flex items-center justify-between gap-2\">\n\t\t<div class=\"flex flex-col gap-1\">\n\t\t\t<h2 class=\"text-2xl font-semibold tracking-tight\">Welcome back!</h2>\n\t\t\t<p class=\"text-muted-foreground\">Here&apos;s a list of your tasks for this month.</p>\n\t\t</div>\n\t\t<div class=\"flex items-center gap-2\">\n\t\t\t<UserNav />\n\t\t</div>\n\t</div>\n\t<DataTable {data} />\n</div>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/examples/tasks/components/data-table-cell.svelte",
    "content": "<script lang=\"ts\">\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet { children, ...restProps }: HTMLAttributes<HTMLDivElement> = $props();\n</script>\n\n<div {...restProps}>\n\t{@render children?.()}\n</div>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/examples/tasks/components/data-table-column-header.svelte",
    "content": "<script lang=\"ts\">\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\timport type { Column } from \"@tanstack/table-core\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\timport { cn } from \"$lib/utils.js\";\n\timport ArrowUpIcon from \"@lucide/svelte/icons/arrow-up\";\n\timport ArrowDownIcon from \"@lucide/svelte/icons/arrow-down\";\n\timport ChevronsUpDownIcon from \"@lucide/svelte/icons/chevrons-up-down\";\n\timport EyeOffIcon from \"@lucide/svelte/icons/eye-off\";\n\timport type { Task } from \"../data/schemas.js\";\n\n\tlet {\n\t\tcolumn,\n\t\ttitle,\n\t\tclass: className,\n\t\t...restProps\n\t}: { column: Column<Task>; title: string } & HTMLAttributes<HTMLDivElement> = $props();\n</script>\n\n{#if !column?.getCanSort()}\n\t<div class={className} {...restProps}>\n\t\t{title}\n\t</div>\n{:else}\n\t<div class={cn(\"flex items-center\", className)} {...restProps}>\n\t\t<DropdownMenu.Root>\n\t\t\t<DropdownMenu.Trigger>\n\t\t\t\t{#snippet child({ props })}\n\t\t\t\t\t<Button\n\t\t\t\t\t\t{...props}\n\t\t\t\t\t\tvariant=\"ghost\"\n\t\t\t\t\t\tsize=\"sm\"\n\t\t\t\t\t\tclass=\"data-[state=open]:bg-accent -ms-3 h-8\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<span>\n\t\t\t\t\t\t\t{title}\n\t\t\t\t\t\t</span>\n\t\t\t\t\t\t{#if column.getIsSorted() === \"desc\"}\n\t\t\t\t\t\t\t<ArrowDownIcon />\n\t\t\t\t\t\t{:else if column.getIsSorted() === \"asc\"}\n\t\t\t\t\t\t\t<ArrowUpIcon />\n\t\t\t\t\t\t{:else}\n\t\t\t\t\t\t\t<ChevronsUpDownIcon />\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t</Button>\n\t\t\t\t{/snippet}\n\t\t\t</DropdownMenu.Trigger>\n\t\t\t<DropdownMenu.Content align=\"start\">\n\t\t\t\t<DropdownMenu.Item onclick={() => column.toggleSorting(false)}>\n\t\t\t\t\t<ArrowUpIcon class=\"text-muted-foreground/70 me-2 size-3.5\" />\n\t\t\t\t\tAsc\n\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t<DropdownMenu.Item onclick={() => column.toggleSorting(true)}>\n\t\t\t\t\t<ArrowDownIcon class=\"text-muted-foreground/70 me-2 size-3.5\" />\n\t\t\t\t\tDesc\n\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t<DropdownMenu.Separator />\n\t\t\t\t<DropdownMenu.Item onclick={() => column.toggleVisibility(false)}>\n\t\t\t\t\t<EyeOffIcon class=\"text-muted-foreground/70 me-2 size-3.5\" />\n\t\t\t\t\tHide\n\t\t\t\t</DropdownMenu.Item>\n\t\t\t</DropdownMenu.Content>\n\t\t</DropdownMenu.Root>\n\t</div>\n{/if}\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/examples/tasks/components/data-table-faceted-filter.svelte",
    "content": "<script lang=\"ts\" generics=\"TData, TValue\">\n\timport CirclePlusIcon from \"@lucide/svelte/icons/circle-plus\";\n\timport CheckIcon from \"@lucide/svelte/icons/check\";\n\timport type { Column } from \"@tanstack/table-core\";\n\timport { SvelteSet } from \"svelte/reactivity\";\n\timport * as Command from \"$lib/registry/ui/command/index.js\";\n\timport * as Popover from \"$lib/registry/ui/popover/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport { cn } from \"$lib/utils.js\";\n\timport { Separator } from \"$lib/registry/ui/separator/index.js\";\n\timport { Badge } from \"$lib/registry/ui/badge/index.js\";\n\timport type { Component } from \"svelte\";\n\n\tlet {\n\t\tcolumn,\n\t\ttitle,\n\t\toptions,\n\t}: {\n\t\tcolumn: Column<TData, TValue>;\n\t\ttitle: string;\n\t\toptions: {\n\t\t\tlabel: string;\n\t\t\tvalue: string;\n\t\t\ticon?: Component;\n\t\t}[];\n\t} = $props();\n\n\tconst facets = $derived(column?.getFacetedUniqueValues());\n\tconst selectedValues = $derived(new SvelteSet(column?.getFilterValue() as string[]));\n</script>\n\n<Popover.Root>\n\t<Popover.Trigger>\n\t\t{#snippet child({ props })}\n\t\t\t<Button {...props} variant=\"outline\" size=\"sm\" class=\"h-8 border-dashed\">\n\t\t\t\t<CirclePlusIcon />\n\t\t\t\t{title}\n\t\t\t\t{#if selectedValues.size > 0}\n\t\t\t\t\t<Separator orientation=\"vertical\" class=\"mx-2 h-4\" />\n\t\t\t\t\t<Badge variant=\"secondary\" class=\"rounded-sm px-1 font-normal lg:hidden\">\n\t\t\t\t\t\t{selectedValues.size}\n\t\t\t\t\t</Badge>\n\t\t\t\t\t<div class=\"hidden space-x-1 lg:flex\">\n\t\t\t\t\t\t{#if selectedValues.size > 2}\n\t\t\t\t\t\t\t<Badge variant=\"secondary\" class=\"rounded-sm px-1 font-normal\">\n\t\t\t\t\t\t\t\t{selectedValues.size} selected\n\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t{:else}\n\t\t\t\t\t\t\t{#each options.filter( (opt) => selectedValues.has(opt.value) ) as option (option)}\n\t\t\t\t\t\t\t\t<Badge variant=\"secondary\" class=\"rounded-sm px-1 font-normal\">\n\t\t\t\t\t\t\t\t\t{option.label}\n\t\t\t\t\t\t\t\t</Badge>\n\t\t\t\t\t\t\t{/each}\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t</div>\n\t\t\t\t{/if}\n\t\t\t</Button>\n\t\t{/snippet}\n\t</Popover.Trigger>\n\t<Popover.Content class=\"w-[200px] p-0\" align=\"start\">\n\t\t<Command.Root>\n\t\t\t<Command.Input placeholder={title} />\n\t\t\t<Command.List>\n\t\t\t\t<Command.Empty>No results found.</Command.Empty>\n\t\t\t\t<Command.Group>\n\t\t\t\t\t{#each options as option (option)}\n\t\t\t\t\t\t{@const isSelected = selectedValues.has(option.value)}\n\t\t\t\t\t\t<Command.Item\n\t\t\t\t\t\t\tonSelect={() => {\n\t\t\t\t\t\t\t\tif (isSelected) {\n\t\t\t\t\t\t\t\t\tselectedValues.delete(option.value);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tselectedValues.add(option.value);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tconst filterValues = Array.from(selectedValues);\n\t\t\t\t\t\t\t\tcolumn?.setFilterValue(\n\t\t\t\t\t\t\t\t\tfilterValues.length ? filterValues : undefined\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}}\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\t<div\n\t\t\t\t\t\t\t\tclass={cn(\n\t\t\t\t\t\t\t\t\t\"border-primary me-2 flex size-4 items-center justify-center rounded-sm border\",\n\t\t\t\t\t\t\t\t\tisSelected\n\t\t\t\t\t\t\t\t\t\t? \"bg-primary text-primary-foreground\"\n\t\t\t\t\t\t\t\t\t\t: \"opacity-50 [&_svg]:invisible\"\n\t\t\t\t\t\t\t\t)}\n\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t<CheckIcon class=\"size-4\" />\n\t\t\t\t\t\t\t</div>\n\t\t\t\t\t\t\t{#if option.icon}\n\t\t\t\t\t\t\t\t{@const Icon = option.icon}\n\t\t\t\t\t\t\t\t<Icon class=\"text-muted-foreground\" />\n\t\t\t\t\t\t\t{/if}\n\n\t\t\t\t\t\t\t<span>{option.label}</span>\n\t\t\t\t\t\t\t{#if facets?.get(option.value)}\n\t\t\t\t\t\t\t\t<span\n\t\t\t\t\t\t\t\t\tclass=\"ms-auto flex size-4 items-center justify-center font-mono text-xs\"\n\t\t\t\t\t\t\t\t>\n\t\t\t\t\t\t\t\t\t{facets.get(option.value)}\n\t\t\t\t\t\t\t\t</span>\n\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t</Command.Item>\n\t\t\t\t\t{/each}\n\t\t\t\t</Command.Group>\n\t\t\t\t{#if selectedValues.size > 0}\n\t\t\t\t\t<Command.Separator />\n\t\t\t\t\t<Command.Group>\n\t\t\t\t\t\t<Command.Item\n\t\t\t\t\t\t\tonSelect={() => column?.setFilterValue(undefined)}\n\t\t\t\t\t\t\tclass=\"justify-center text-center\"\n\t\t\t\t\t\t>\n\t\t\t\t\t\t\tClear filters\n\t\t\t\t\t\t</Command.Item>\n\t\t\t\t\t</Command.Group>\n\t\t\t\t{/if}\n\t\t\t</Command.List>\n\t\t</Command.Root>\n\t</Popover.Content>\n</Popover.Root>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/examples/tasks/components/data-table-priority-cell.svelte",
    "content": "<script lang=\"ts\">\n\timport { priorities } from \"../data/data.js\";\n\n\tlet { value }: { value: string } = $props();\n\n\tconst priority = $derived(priorities.find((p) => p.value === value));\n</script>\n\n{#if priority}\n\t<div class=\"flex items-center\">\n\t\t<priority.icon class=\"text-muted-foreground me-2 size-4\" />\n\t\t<span>{priority.label}</span>\n\t</div>\n{/if}\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/examples/tasks/components/data-table-row-actions.svelte",
    "content": "<script lang=\"ts\">\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\timport type { Row } from \"@tanstack/table-core\";\n\timport EllipsisIcon from \"@lucide/svelte/icons/ellipsis\";\n\timport { labels } from \"../data/data.js\";\n\timport { taskSchema, type Task } from \"../data/schemas.js\";\n\n\tlet { row }: { row: Row<Task> } = $props();\n\n\tconst task = $derived(taskSchema.parse(row.original));\n</script>\n\n<DropdownMenu.Root>\n\t<DropdownMenu.Trigger>\n\t\t{#snippet child({ props })}\n\t\t\t<Button {...props} variant=\"ghost\" class=\"data-[state=open]:bg-muted flex h-8 w-8 p-0\">\n\t\t\t\t<EllipsisIcon />\n\t\t\t\t<span class=\"sr-only\">Open Menu</span>\n\t\t\t</Button>\n\t\t{/snippet}\n\t</DropdownMenu.Trigger>\n\t<DropdownMenu.Content class=\"w-[160px]\" align=\"end\">\n\t\t<DropdownMenu.Item>Edit</DropdownMenu.Item>\n\t\t<DropdownMenu.Item>Make a copy</DropdownMenu.Item>\n\t\t<DropdownMenu.Item>Favorite</DropdownMenu.Item>\n\t\t<DropdownMenu.Separator />\n\t\t<DropdownMenu.Sub>\n\t\t\t<DropdownMenu.SubTrigger>Labels</DropdownMenu.SubTrigger>\n\t\t\t<DropdownMenu.SubContent>\n\t\t\t\t<DropdownMenu.RadioGroup value={task.label}>\n\t\t\t\t\t{#each labels as label (label.value)}\n\t\t\t\t\t\t<DropdownMenu.RadioItem value={label.value}>\n\t\t\t\t\t\t\t{label.label}\n\t\t\t\t\t\t</DropdownMenu.RadioItem>\n\t\t\t\t\t{/each}\n\t\t\t\t</DropdownMenu.RadioGroup>\n\t\t\t</DropdownMenu.SubContent>\n\t\t</DropdownMenu.Sub>\n\t\t<DropdownMenu.Separator />\n\t\t<DropdownMenu.Item>\n\t\t\tDelete\n\t\t\t<DropdownMenu.Shortcut>⌘⌫</DropdownMenu.Shortcut>\n\t\t</DropdownMenu.Item>\n\t</DropdownMenu.Content>\n</DropdownMenu.Root>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/examples/tasks/components/data-table-status-cell.svelte",
    "content": "<script lang=\"ts\">\n\timport { statuses } from \"../data/data.js\";\n\n\tlet { value }: { value: string } = $props();\n\n\tconst status = $derived(statuses.find((s) => s.value === value));\n</script>\n\n{#if status}\n\t<div class=\"flex w-[100px] items-center\">\n\t\t<status.icon class=\"text-muted-foreground me-2 size-4\" />\n\t\t<span>{status.label}</span>\n\t</div>\n{/if}\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/examples/tasks/components/data-table-title-cell.svelte",
    "content": "<script lang=\"ts\">\n\timport { Badge } from \"$lib/registry/ui/badge/index.js\";\n\timport { labels } from \"../data/data.js\";\n\n\tlet { value, labelValue }: { value: string; labelValue: string } = $props();\n\n\tconst label = $derived(labels.find((l) => l.value === labelValue));\n</script>\n\n<div class=\"flex space-x-2\">\n\t{#if label}\n\t\t<Badge variant=\"outline\">{label.label}</Badge>\n\t{/if}\n\t<span class=\"max-w-[500px] truncate font-medium\">\n\t\t{value}\n\t</span>\n</div>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/examples/tasks/components/data-table-toolbar.svelte",
    "content": "<script lang=\"ts\" generics=\"TData\">\n\timport XIcon from \"@lucide/svelte/icons/x\";\n\timport type { Table } from \"@tanstack/table-core\";\n\timport { DataTableFacetedFilter, DataTableViewOptions } from \"./index.js\";\n\timport Button from \"$lib/registry/ui/button/button.svelte\";\n\timport { Input } from \"$lib/registry/ui/input/index.js\";\n\timport { priorities, statuses } from \"../data/data.js\";\n\n\tlet { table }: { table: Table<TData> } = $props();\n\n\tconst isFiltered = $derived(table.getState().columnFilters.length > 0);\n\tconst statusCol = $derived(table.getColumn(\"status\"));\n\tconst priorityCol = $derived(table.getColumn(\"priority\"));\n</script>\n\n<div class=\"flex items-center justify-between\">\n\t<div class=\"flex flex-1 items-center space-x-2\">\n\t\t<Input\n\t\t\tplaceholder=\"Filter tasks...\"\n\t\t\tvalue={(table.getColumn(\"title\")?.getFilterValue() as string) ?? \"\"}\n\t\t\toninput={(e) => {\n\t\t\t\ttable.getColumn(\"title\")?.setFilterValue(e.currentTarget.value);\n\t\t\t}}\n\t\t\tonchange={(e) => {\n\t\t\t\ttable.getColumn(\"title\")?.setFilterValue(e.currentTarget.value);\n\t\t\t}}\n\t\t\tclass=\"h-8 w-[150px] lg:w-[250px]\"\n\t\t/>\n\n\t\t{#if statusCol}\n\t\t\t<DataTableFacetedFilter column={statusCol} title=\"Status\" options={statuses} />\n\t\t{/if}\n\t\t{#if priorityCol}\n\t\t\t<DataTableFacetedFilter column={priorityCol} title=\"Priority\" options={priorities} />\n\t\t{/if}\n\n\t\t{#if isFiltered}\n\t\t\t<Button\n\t\t\t\tvariant=\"ghost\"\n\t\t\t\tonclick={() => table.resetColumnFilters()}\n\t\t\t\tclass=\"h-8 px-2 lg:px-3\"\n\t\t\t>\n\t\t\t\tReset\n\t\t\t\t<XIcon />\n\t\t\t</Button>\n\t\t{/if}\n\t</div>\n\t<DataTableViewOptions {table} />\n</div>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/examples/tasks/components/data-table-view-options.svelte",
    "content": "<script lang=\"ts\" generics=\"TData\">\n\timport Settings2Icon from \"@lucide/svelte/icons/settings-2\";\n\timport type { Table } from \"@tanstack/table-core\";\n\timport { buttonVariants } from \"$lib/registry/ui/button/index.js\";\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n\n\tlet { table }: { table: Table<TData> } = $props();\n</script>\n\n<DropdownMenu.Root>\n\t<DropdownMenu.Trigger\n\t\tclass={buttonVariants({\n\t\t\tvariant: \"outline\",\n\t\t\tsize: \"sm\",\n\t\t\tclass: \"ms-auto hidden h-8 lg:flex\",\n\t\t})}\n\t>\n\t\t<Settings2Icon />\n\t\tView\n\t</DropdownMenu.Trigger>\n\t<DropdownMenu.Content>\n\t\t<DropdownMenu.Group>\n\t\t\t<DropdownMenu.Label>Toggle columns</DropdownMenu.Label>\n\t\t\t<DropdownMenu.Separator />\n\t\t\t{#each table\n\t\t\t\t.getAllColumns()\n\t\t\t\t.filter((col) => typeof col.accessorFn !== \"undefined\" && col.getCanHide()) as column (column)}\n\t\t\t\t<DropdownMenu.CheckboxItem\n\t\t\t\t\tbind:checked={() => column.getIsVisible(), (v) => column.toggleVisibility(!!v)}\n\t\t\t\t\tclass=\"capitalize\"\n\t\t\t\t>\n\t\t\t\t\t{column.id}\n\t\t\t\t</DropdownMenu.CheckboxItem>\n\t\t\t{/each}\n\t\t</DropdownMenu.Group>\n\t</DropdownMenu.Content>\n</DropdownMenu.Root>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/examples/tasks/components/data-table.svelte",
    "content": "<script lang=\"ts\">\n\timport {\n\t\ttype ColumnDef,\n\t\ttype ColumnFiltersState,\n\t\ttype PaginationState,\n\t\ttype RowSelectionState,\n\t\ttype SortingState,\n\t\ttype VisibilityState,\n\t\ttype Table as TableType,\n\t\tgetCoreRowModel,\n\t\tgetFacetedRowModel,\n\t\tgetFacetedUniqueValues,\n\t\tgetFilteredRowModel,\n\t\tgetPaginationRowModel,\n\t\tgetSortedRowModel,\n\t} from \"@tanstack/table-core\";\n\timport DataTableToolbar from \"./data-table-toolbar.svelte\";\n\timport { createSvelteTable } from \"$lib/registry/ui/data-table/data-table.svelte.js\";\n\timport FlexRender from \"$lib/registry/ui/data-table/flex-render.svelte\";\n\timport * as Table from \"$lib/registry/ui/table/index.js\";\n\timport { type Task } from \"../data/schemas.js\";\n\timport { renderComponent, renderSnippet } from \"$lib/registry/ui/data-table/render-helpers.js\";\n\timport Checkbox from \"$lib/registry/ui/checkbox/checkbox.svelte\";\n\timport { createRawSnippet } from \"svelte\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport ColumnHeader from \"./data-table-column-header.svelte\";\n\timport TitleCell from \"./data-table-title-cell.svelte\";\n\timport StatusCell from \"./data-table-status-cell.svelte\";\n\timport PriorityCell from \"./data-table-priority-cell.svelte\";\n\timport RowActions from \"./data-table-row-actions.svelte\";\n\timport ChevronRightIcon from \"@lucide/svelte/icons/chevron-right\";\n\timport ChevronLeftIcon from \"@lucide/svelte/icons/chevron-left\";\n\timport ChevronsLeftIcon from \"@lucide/svelte/icons/chevrons-left\";\n\timport ChevronsRightIcon from \"@lucide/svelte/icons/chevrons-right\";\n\timport * as Select from \"$lib/registry/ui/select/index.js\";\n\n\tlet { data }: { data: Task[] } = $props();\n\n\tlet rowSelection = $state<RowSelectionState>({});\n\tlet columnVisibility = $state<VisibilityState>({});\n\tlet columnFilters = $state<ColumnFiltersState>([]);\n\tlet sorting = $state<SortingState>([]);\n\tlet pagination = $state<PaginationState>({ pageIndex: 0, pageSize: 10 });\n\n\tconst columns: ColumnDef<Task>[] = [\n\t\t{\n\t\t\tid: \"select\",\n\t\t\theader: ({ table }) =>\n\t\t\t\trenderComponent(Checkbox, {\n\t\t\t\t\tchecked: table.getIsAllPageRowsSelected(),\n\t\t\t\t\tonCheckedChange: (value) => table.toggleAllPageRowsSelected(value),\n\t\t\t\t\tindeterminate:\n\t\t\t\t\t\ttable.getIsSomePageRowsSelected() && !table.getIsAllPageRowsSelected(),\n\t\t\t\t\t\"aria-label\": \"Select all\",\n\t\t\t\t}),\n\t\t\tcell: ({ row }) =>\n\t\t\t\trenderComponent(Checkbox, {\n\t\t\t\t\tchecked: row.getIsSelected(),\n\t\t\t\t\tonCheckedChange: (value) => row.toggleSelected(value),\n\t\t\t\t\t\"aria-label\": \"Select row\",\n\t\t\t\t}),\n\t\t\tenableSorting: false,\n\t\t\tenableHiding: false,\n\t\t},\n\t\t{\n\t\t\taccessorKey: \"id\",\n\t\t\theader: ({ column }) => {\n\t\t\t\treturn renderComponent(ColumnHeader, {\n\t\t\t\t\tcolumn,\n\t\t\t\t\ttitle: \"Task\",\n\t\t\t\t});\n\t\t\t},\n\t\t\tcell: ({ row }) => {\n\t\t\t\tconst idSnippet = createRawSnippet<[{ id: string }]>((getId) => {\n\t\t\t\t\tconst { id } = getId();\n\t\t\t\t\treturn {\n\t\t\t\t\t\trender: () => `<div class=\"w-[80px]\">${id}</div>`,\n\t\t\t\t\t};\n\t\t\t\t});\n\n\t\t\t\treturn renderSnippet(idSnippet, {\n\t\t\t\t\tid: row.original.id,\n\t\t\t\t});\n\t\t\t},\n\t\t\tenableSorting: false,\n\t\t\tenableHiding: false,\n\t\t},\n\t\t{\n\t\t\taccessorKey: \"title\",\n\t\t\theader: ({ column }) => renderComponent(ColumnHeader, { column, title: \"Title\" }),\n\t\t\tcell: ({ row }) => {\n\t\t\t\treturn renderComponent(TitleCell, {\n\t\t\t\t\tlabelValue: row.original.label,\n\t\t\t\t\tvalue: row.original.title,\n\t\t\t\t});\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\taccessorKey: \"status\",\n\t\t\theader: ({ column }) =>\n\t\t\t\trenderComponent(ColumnHeader, {\n\t\t\t\t\tcolumn,\n\t\t\t\t\ttitle: \"Status\",\n\t\t\t\t}),\n\t\t\tcell: ({ row }) => {\n\t\t\t\treturn renderComponent(StatusCell, {\n\t\t\t\t\tvalue: row.original.status,\n\t\t\t\t});\n\t\t\t},\n\t\t\tfilterFn: (row, id, value) => {\n\t\t\t\treturn value.includes(row.getValue(id));\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\taccessorKey: \"priority\",\n\t\t\theader: ({ column }) => {\n\t\t\t\treturn renderComponent(ColumnHeader, {\n\t\t\t\t\ttitle: \"Priority\",\n\t\t\t\t\tcolumn,\n\t\t\t\t});\n\t\t\t},\n\t\t\tcell: ({ row }) => {\n\t\t\t\treturn renderComponent(PriorityCell, {\n\t\t\t\t\tvalue: row.original.priority,\n\t\t\t\t});\n\t\t\t},\n\t\t\tfilterFn: (row, id, value) => {\n\t\t\t\treturn value.includes(row.getValue(id));\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\tid: \"actions\",\n\t\t\tcell: ({ row }) => renderComponent(RowActions, { row }),\n\t\t},\n\t];\n\n\tconst table = createSvelteTable({\n\t\tget data() {\n\t\t\treturn data;\n\t\t},\n\t\tstate: {\n\t\t\tget sorting() {\n\t\t\t\treturn sorting;\n\t\t\t},\n\t\t\tget columnVisibility() {\n\t\t\t\treturn columnVisibility;\n\t\t\t},\n\t\t\tget rowSelection() {\n\t\t\t\treturn rowSelection;\n\t\t\t},\n\t\t\tget columnFilters() {\n\t\t\t\treturn columnFilters;\n\t\t\t},\n\t\t\tget pagination() {\n\t\t\t\treturn pagination;\n\t\t\t},\n\t\t},\n\t\tcolumns,\n\t\tenableRowSelection: true,\n\t\tonRowSelectionChange: (updater) => {\n\t\t\tif (typeof updater === \"function\") {\n\t\t\t\trowSelection = updater(rowSelection);\n\t\t\t} else {\n\t\t\t\trowSelection = updater;\n\t\t\t}\n\t\t},\n\t\tonSortingChange: (updater) => {\n\t\t\tif (typeof updater === \"function\") {\n\t\t\t\tsorting = updater(sorting);\n\t\t\t} else {\n\t\t\t\tsorting = updater;\n\t\t\t}\n\t\t},\n\t\tonColumnFiltersChange: (updater) => {\n\t\t\tif (typeof updater === \"function\") {\n\t\t\t\tcolumnFilters = updater(columnFilters);\n\t\t\t} else {\n\t\t\t\tcolumnFilters = updater;\n\t\t\t}\n\t\t},\n\t\tonColumnVisibilityChange: (updater) => {\n\t\t\tif (typeof updater === \"function\") {\n\t\t\t\tcolumnVisibility = updater(columnVisibility);\n\t\t\t} else {\n\t\t\t\tcolumnVisibility = updater;\n\t\t\t}\n\t\t},\n\t\tonPaginationChange: (updater) => {\n\t\t\tif (typeof updater === \"function\") {\n\t\t\t\tpagination = updater(pagination);\n\t\t\t} else {\n\t\t\t\tpagination = updater;\n\t\t\t}\n\t\t},\n\t\tgetCoreRowModel: getCoreRowModel(),\n\t\tgetFilteredRowModel: getFilteredRowModel(),\n\t\tgetPaginationRowModel: getPaginationRowModel(),\n\t\tgetSortedRowModel: getSortedRowModel(),\n\t\tgetFacetedRowModel: getFacetedRowModel(),\n\t\tgetFacetedUniqueValues: getFacetedUniqueValues(),\n\t});\n</script>\n\n{#snippet Pagination({ table }: { table: TableType<Task> })}\n\t<div class=\"flex items-center justify-between px-2\">\n\t\t<div class=\"text-muted-foreground flex-1 text-sm\">\n\t\t\t{table.getFilteredSelectedRowModel().rows.length} of\n\t\t\t{table.getFilteredRowModel().rows.length} row(s) selected.\n\t\t</div>\n\t\t<div class=\"flex items-center space-x-6 lg:space-x-8\">\n\t\t\t<div class=\"flex items-center space-x-2\">\n\t\t\t\t<p class=\"text-sm font-medium\">Rows per page</p>\n\t\t\t\t<Select.Root\n\t\t\t\t\tallowDeselect={false}\n\t\t\t\t\ttype=\"single\"\n\t\t\t\t\tvalue={`${table.getState().pagination.pageSize}`}\n\t\t\t\t\tonValueChange={(value) => {\n\t\t\t\t\t\ttable.setPageSize(Number(value));\n\t\t\t\t\t}}\n\t\t\t\t>\n\t\t\t\t\t<Select.Trigger class=\"h-8 w-[70px]\">\n\t\t\t\t\t\t{String(table.getState().pagination.pageSize)}\n\t\t\t\t\t</Select.Trigger>\n\t\t\t\t\t<Select.Content side=\"top\">\n\t\t\t\t\t\t{#each [10, 20, 30, 40, 50] as pageSize (pageSize)}\n\t\t\t\t\t\t\t<Select.Item value={`${pageSize}`}>\n\t\t\t\t\t\t\t\t{pageSize}\n\t\t\t\t\t\t\t</Select.Item>\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</Select.Content>\n\t\t\t\t</Select.Root>\n\t\t\t</div>\n\t\t\t<div class=\"flex w-[100px] items-center justify-center text-sm font-medium\">\n\t\t\t\tPage {table.getState().pagination.pageIndex + 1} of\n\t\t\t\t{table.getPageCount()}\n\t\t\t</div>\n\t\t\t<div class=\"flex items-center space-x-2\">\n\t\t\t\t<Button\n\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\tclass=\"hidden size-8 p-0 lg:flex\"\n\t\t\t\t\tonclick={() => table.setPageIndex(0)}\n\t\t\t\t\tdisabled={!table.getCanPreviousPage()}\n\t\t\t\t>\n\t\t\t\t\t<span class=\"sr-only\">Go to first page</span>\n\t\t\t\t\t<ChevronsLeftIcon />\n\t\t\t\t</Button>\n\t\t\t\t<Button\n\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\tclass=\"size-8 p-0\"\n\t\t\t\t\tonclick={() => table.previousPage()}\n\t\t\t\t\tdisabled={!table.getCanPreviousPage()}\n\t\t\t\t>\n\t\t\t\t\t<span class=\"sr-only\">Go to previous page</span>\n\t\t\t\t\t<ChevronLeftIcon />\n\t\t\t\t</Button>\n\t\t\t\t<Button\n\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\tclass=\"size-8 p-0\"\n\t\t\t\t\tonclick={() => table.nextPage()}\n\t\t\t\t\tdisabled={!table.getCanNextPage()}\n\t\t\t\t>\n\t\t\t\t\t<span class=\"sr-only\">Go to next page</span>\n\t\t\t\t\t<ChevronRightIcon />\n\t\t\t\t</Button>\n\t\t\t\t<Button\n\t\t\t\t\tvariant=\"outline\"\n\t\t\t\t\tclass=\"hidden size-8 p-0 lg:flex\"\n\t\t\t\t\tonclick={() => table.setPageIndex(table.getPageCount() - 1)}\n\t\t\t\t\tdisabled={!table.getCanNextPage()}\n\t\t\t\t>\n\t\t\t\t\t<span class=\"sr-only\">Go to last page</span>\n\t\t\t\t\t<ChevronsRightIcon />\n\t\t\t\t</Button>\n\t\t\t</div>\n\t\t</div>\n\t</div>\n{/snippet}\n\n<div class=\"space-y-4\">\n\t<DataTableToolbar {table} />\n\t<div class=\"rounded-md border\">\n\t\t<Table.Root>\n\t\t\t<Table.Header>\n\t\t\t\t{#each table.getHeaderGroups() as headerGroup (headerGroup.id)}\n\t\t\t\t\t<Table.Row>\n\t\t\t\t\t\t{#each headerGroup.headers as header (header.id)}\n\t\t\t\t\t\t\t<Table.Head colspan={header.colSpan}>\n\t\t\t\t\t\t\t\t{#if !header.isPlaceholder}\n\t\t\t\t\t\t\t\t\t<FlexRender\n\t\t\t\t\t\t\t\t\t\tcontent={header.column.columnDef.header}\n\t\t\t\t\t\t\t\t\t\tcontext={header.getContext()}\n\t\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t\t{/if}\n\t\t\t\t\t\t\t</Table.Head>\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</Table.Row>\n\t\t\t\t{/each}\n\t\t\t</Table.Header>\n\t\t\t<Table.Body>\n\t\t\t\t{#each table.getRowModel().rows as row (row.id)}\n\t\t\t\t\t<Table.Row data-state={row.getIsSelected() && \"selected\"}>\n\t\t\t\t\t\t{#each row.getVisibleCells() as cell (cell.id)}\n\t\t\t\t\t\t\t<Table.Cell>\n\t\t\t\t\t\t\t\t<FlexRender\n\t\t\t\t\t\t\t\t\tcontent={cell.column.columnDef.cell}\n\t\t\t\t\t\t\t\t\tcontext={cell.getContext()}\n\t\t\t\t\t\t\t\t/>\n\t\t\t\t\t\t\t</Table.Cell>\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</Table.Row>\n\t\t\t\t{:else}\n\t\t\t\t\t<Table.Row>\n\t\t\t\t\t\t<Table.Cell colspan={columns.length} class=\"h-24 text-center\">\n\t\t\t\t\t\t\tNo results.\n\t\t\t\t\t\t</Table.Cell>\n\t\t\t\t\t</Table.Row>\n\t\t\t\t{/each}\n\t\t\t</Table.Body>\n\t\t</Table.Root>\n\t</div>\n\t{@render Pagination({ table })}\n</div>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/examples/tasks/components/index.ts",
    "content": "export { default as DataTableToolbar } from \"./data-table-toolbar.svelte\";\nexport { default as DataTableViewOptions } from \"./data-table-view-options.svelte\";\nexport { default as DataTableFacetedFilter } from \"./data-table-faceted-filter.svelte\";\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/examples/tasks/components/user-nav.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Avatar from \"$lib/registry/ui/avatar/index.js\";\n\timport Button from \"$lib/registry/ui/button/button.svelte\";\n\timport * as DropdownMenu from \"$lib/registry/ui/dropdown-menu/index.js\";\n</script>\n\n<DropdownMenu.Root>\n\t<DropdownMenu.Trigger>\n\t\t{#snippet child({ props })}\n\t\t\t<Button {...props} variant=\"ghost\" class=\"relative size-8 rounded-full\">\n\t\t\t\t<Avatar.Root class=\"size-9\">\n\t\t\t\t\t<Avatar.Image src=\"/avatars/01.png\" alt=\"@shadcn\" />\n\t\t\t\t\t<Avatar.Fallback>SC</Avatar.Fallback>\n\t\t\t\t</Avatar.Root>\n\t\t\t</Button>\n\t\t{/snippet}\n\t</DropdownMenu.Trigger>\n\t<DropdownMenu.Content class=\"w-56\" align=\"end\">\n\t\t<DropdownMenu.Group>\n\t\t\t<DropdownMenu.Label class=\"font-normal\">\n\t\t\t\t<div class=\"flex flex-col space-y-1\">\n\t\t\t\t\t<p class=\"text-sm leading-none font-medium\">shadcn</p>\n\t\t\t\t\t<p class=\"text-muted-foreground text-xs leading-none\">m@example.com</p>\n\t\t\t\t</div>\n\t\t\t</DropdownMenu.Label>\n\t\t\t<DropdownMenu.Separator />\n\t\t\t<DropdownMenu.Group>\n\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\tProfile\n\t\t\t\t\t<DropdownMenu.Shortcut>⇧⌘P</DropdownMenu.Shortcut>\n\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\tBilling\n\t\t\t\t\t<DropdownMenu.Shortcut>⌘B</DropdownMenu.Shortcut>\n\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t<DropdownMenu.Item>\n\t\t\t\t\tSettings\n\t\t\t\t\t<DropdownMenu.Shortcut>⌘S</DropdownMenu.Shortcut>\n\t\t\t\t</DropdownMenu.Item>\n\t\t\t\t<DropdownMenu.Item>New Team</DropdownMenu.Item>\n\t\t\t</DropdownMenu.Group>\n\t\t\t<DropdownMenu.Separator />\n\t\t\t<DropdownMenu.Item>\n\t\t\t\tLog out\n\t\t\t\t<DropdownMenu.Shortcut>⇧⌘Q</DropdownMenu.Shortcut>\n\t\t\t</DropdownMenu.Item>\n\t\t</DropdownMenu.Group>\n\t</DropdownMenu.Content>\n</DropdownMenu.Root>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/examples/tasks/data/data.ts",
    "content": "import ArrowDownIcon from \"@lucide/svelte/icons/arrow-down\";\nimport ArrowRightIcon from \"@lucide/svelte/icons/arrow-right\";\nimport ArrowUpIcon from \"@lucide/svelte/icons/arrow-up\";\nimport CircleCheckIcon from \"@lucide/svelte/icons/circle-check\";\nimport CircleIcon from \"@lucide/svelte/icons/circle\";\nimport CircleOffIcon from \"@lucide/svelte/icons/circle-off\";\nimport CircleHelpIcon from \"@lucide/svelte/icons/circle-help\";\nimport TimerIcon from \"@lucide/svelte/icons/timer\";\n\nexport const labels = [\n\t{\n\t\tvalue: \"bug\",\n\t\tlabel: \"Bug\",\n\t},\n\t{\n\t\tvalue: \"feature\",\n\t\tlabel: \"Feature\",\n\t},\n\t{\n\t\tvalue: \"documentation\",\n\t\tlabel: \"Documentation\",\n\t},\n];\n\nexport const statuses = [\n\t{\n\t\tvalue: \"backlog\",\n\t\tlabel: \"Backlog\",\n\t\ticon: CircleHelpIcon,\n\t},\n\t{\n\t\tvalue: \"todo\",\n\t\tlabel: \"Todo\",\n\t\ticon: CircleIcon,\n\t},\n\t{\n\t\tvalue: \"in progress\",\n\t\tlabel: \"In Progress\",\n\t\ticon: TimerIcon,\n\t},\n\t{\n\t\tvalue: \"done\",\n\t\tlabel: \"Done\",\n\t\ticon: CircleCheckIcon,\n\t},\n\t{\n\t\tvalue: \"canceled\",\n\t\tlabel: \"Canceled\",\n\t\ticon: CircleOffIcon,\n\t},\n];\n\nexport const priorities = [\n\t{\n\t\tlabel: \"Low\",\n\t\tvalue: \"low\",\n\t\ticon: ArrowDownIcon,\n\t},\n\t{\n\t\tlabel: \"Medium\",\n\t\tvalue: \"medium\",\n\t\ticon: ArrowRightIcon,\n\t},\n\t{\n\t\tlabel: \"High\",\n\t\tvalue: \"high\",\n\t\ticon: ArrowUpIcon,\n\t},\n];\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/examples/tasks/data/schemas.ts",
    "content": "import { z } from \"zod\";\n\n// We're keeping a simple non-relational schema here.\n// IRL, you will have a schema for your data models.\nexport const taskSchema = z.object({\n\tid: z.string(),\n\ttitle: z.string(),\n\tstatus: z.string(),\n\tlabel: z.string(),\n\tpriority: z.string(),\n});\n\nexport type Task = z.output<typeof taskSchema>;\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/examples/tasks/data/tasks.ts",
    "content": "export const data = [\n\t{\n\t\tid: \"TASK-8782\",\n\t\ttitle: \"You can't compress the program without quantifying the open-source SSD pixel!\",\n\t\tstatus: \"in progress\",\n\t\tlabel: \"documentation\",\n\t\tpriority: \"medium\",\n\t},\n\t{\n\t\tid: \"TASK-7878\",\n\t\ttitle: \"Try to calculate the EXE feed, maybe it will index the multi-byte pixel!\",\n\t\tstatus: \"backlog\",\n\t\tlabel: \"documentation\",\n\t\tpriority: \"medium\",\n\t},\n\t{\n\t\tid: \"TASK-7839\",\n\t\ttitle: \"We need to bypass the neural TCP card!\",\n\t\tstatus: \"todo\",\n\t\tlabel: \"bug\",\n\t\tpriority: \"high\",\n\t},\n\t{\n\t\tid: \"TASK-5562\",\n\t\ttitle: \"The SAS interface is down, bypass the open-source pixel so we can back up the PNG bandwidth!\",\n\t\tstatus: \"backlog\",\n\t\tlabel: \"feature\",\n\t\tpriority: \"medium\",\n\t},\n\t{\n\t\tid: \"TASK-8686\",\n\t\ttitle: \"I'll parse the wireless SSL protocol, that should driver the API panel!\",\n\t\tstatus: \"canceled\",\n\t\tlabel: \"feature\",\n\t\tpriority: \"medium\",\n\t},\n\t{\n\t\tid: \"TASK-1280\",\n\t\ttitle: \"Use the digital TLS panel, then you can transmit the haptic system!\",\n\t\tstatus: \"done\",\n\t\tlabel: \"bug\",\n\t\tpriority: \"high\",\n\t},\n\t{\n\t\tid: \"TASK-7262\",\n\t\ttitle: \"The UTF8 application is down, parse the neural bandwidth so we can back up the PNG firewall!\",\n\t\tstatus: \"done\",\n\t\tlabel: \"feature\",\n\t\tpriority: \"high\",\n\t},\n\t{\n\t\tid: \"TASK-1138\",\n\t\ttitle: \"Generating the driver won't do anything, we need to quantify the 1080p SMTP bandwidth!\",\n\t\tstatus: \"in progress\",\n\t\tlabel: \"feature\",\n\t\tpriority: \"medium\",\n\t},\n\t{\n\t\tid: \"TASK-7184\",\n\t\ttitle: \"We need to program the back-end THX pixel!\",\n\t\tstatus: \"todo\",\n\t\tlabel: \"feature\",\n\t\tpriority: \"low\",\n\t},\n\t{\n\t\tid: \"TASK-5160\",\n\t\ttitle: \"Calculating the bus won't do anything, we need to navigate the back-end JSON protocol!\",\n\t\tstatus: \"in progress\",\n\t\tlabel: \"documentation\",\n\t\tpriority: \"high\",\n\t},\n\t{\n\t\tid: \"TASK-5618\",\n\t\ttitle: \"Generating the driver won't do anything, we need to index the online SSL application!\",\n\t\tstatus: \"done\",\n\t\tlabel: \"documentation\",\n\t\tpriority: \"medium\",\n\t},\n\t{\n\t\tid: \"TASK-6699\",\n\t\ttitle: \"I'll transmit the wireless JBOD capacitor, that should hard drive the SSD feed!\",\n\t\tstatus: \"backlog\",\n\t\tlabel: \"documentation\",\n\t\tpriority: \"medium\",\n\t},\n\t{\n\t\tid: \"TASK-2858\",\n\t\ttitle: \"We need to override the online UDP bus!\",\n\t\tstatus: \"backlog\",\n\t\tlabel: \"bug\",\n\t\tpriority: \"medium\",\n\t},\n\t{\n\t\tid: \"TASK-9864\",\n\t\ttitle: \"I'll reboot the 1080p FTP panel, that should matrix the HEX hard drive!\",\n\t\tstatus: \"done\",\n\t\tlabel: \"bug\",\n\t\tpriority: \"high\",\n\t},\n\t{\n\t\tid: \"TASK-8404\",\n\t\ttitle: \"We need to generate the virtual HEX alarm!\",\n\t\tstatus: \"in progress\",\n\t\tlabel: \"bug\",\n\t\tpriority: \"low\",\n\t},\n\t{\n\t\tid: \"TASK-5365\",\n\t\ttitle: \"Backing up the pixel won't do anything, we need to transmit the primary IB array!\",\n\t\tstatus: \"in progress\",\n\t\tlabel: \"documentation\",\n\t\tpriority: \"low\",\n\t},\n\t{\n\t\tid: \"TASK-1780\",\n\t\ttitle: \"The CSS feed is down, index the bluetooth transmitter so we can compress the CLI protocol!\",\n\t\tstatus: \"todo\",\n\t\tlabel: \"documentation\",\n\t\tpriority: \"high\",\n\t},\n\t{\n\t\tid: \"TASK-6938\",\n\t\ttitle: \"Use the redundant SCSI application, then you can hack the optical alarm!\",\n\t\tstatus: \"todo\",\n\t\tlabel: \"documentation\",\n\t\tpriority: \"high\",\n\t},\n\t{\n\t\tid: \"TASK-9885\",\n\t\ttitle: \"We need to compress the auxiliary VGA driver!\",\n\t\tstatus: \"backlog\",\n\t\tlabel: \"bug\",\n\t\tpriority: \"high\",\n\t},\n\t{\n\t\tid: \"TASK-3216\",\n\t\ttitle: \"Transmitting the transmitter won't do anything, we need to compress the virtual HDD sensor!\",\n\t\tstatus: \"backlog\",\n\t\tlabel: \"documentation\",\n\t\tpriority: \"medium\",\n\t},\n\t{\n\t\tid: \"TASK-9285\",\n\t\ttitle: \"The IP monitor is down, copy the haptic alarm so we can generate the HTTP transmitter!\",\n\t\tstatus: \"todo\",\n\t\tlabel: \"bug\",\n\t\tpriority: \"high\",\n\t},\n\t{\n\t\tid: \"TASK-1024\",\n\t\ttitle: \"Overriding the microchip won't do anything, we need to transmit the digital OCR transmitter!\",\n\t\tstatus: \"in progress\",\n\t\tlabel: \"documentation\",\n\t\tpriority: \"low\",\n\t},\n\t{\n\t\tid: \"TASK-7068\",\n\t\ttitle: \"You can't generate the capacitor without indexing the wireless HEX pixel!\",\n\t\tstatus: \"canceled\",\n\t\tlabel: \"bug\",\n\t\tpriority: \"low\",\n\t},\n\t{\n\t\tid: \"TASK-6502\",\n\t\ttitle: \"Navigating the microchip won't do anything, we need to bypass the back-end SQL bus!\",\n\t\tstatus: \"todo\",\n\t\tlabel: \"bug\",\n\t\tpriority: \"high\",\n\t},\n\t{\n\t\tid: \"TASK-5326\",\n\t\ttitle: \"We need to hack the redundant UTF8 transmitter!\",\n\t\tstatus: \"todo\",\n\t\tlabel: \"bug\",\n\t\tpriority: \"low\",\n\t},\n\t{\n\t\tid: \"TASK-6274\",\n\t\ttitle: \"Use the virtual PCI circuit, then you can parse the bluetooth alarm!\",\n\t\tstatus: \"canceled\",\n\t\tlabel: \"documentation\",\n\t\tpriority: \"low\",\n\t},\n\t{\n\t\tid: \"TASK-1571\",\n\t\ttitle: \"I'll input the neural DRAM circuit, that should protocol the SMTP interface!\",\n\t\tstatus: \"in progress\",\n\t\tlabel: \"feature\",\n\t\tpriority: \"medium\",\n\t},\n\t{\n\t\tid: \"TASK-9518\",\n\t\ttitle: \"Compressing the interface won't do anything, we need to compress the online SDD matrix!\",\n\t\tstatus: \"canceled\",\n\t\tlabel: \"documentation\",\n\t\tpriority: \"medium\",\n\t},\n\t{\n\t\tid: \"TASK-5581\",\n\t\ttitle: \"I'll synthesize the digital COM pixel, that should transmitter the UTF8 protocol!\",\n\t\tstatus: \"backlog\",\n\t\tlabel: \"documentation\",\n\t\tpriority: \"high\",\n\t},\n\t{\n\t\tid: \"TASK-2197\",\n\t\ttitle: \"Parsing the feed won't do anything, we need to copy the bluetooth DRAM bus!\",\n\t\tstatus: \"todo\",\n\t\tlabel: \"documentation\",\n\t\tpriority: \"low\",\n\t},\n\t{\n\t\tid: \"TASK-8484\",\n\t\ttitle: \"We need to parse the solid state UDP firewall!\",\n\t\tstatus: \"in progress\",\n\t\tlabel: \"bug\",\n\t\tpriority: \"low\",\n\t},\n\t{\n\t\tid: \"TASK-9892\",\n\t\ttitle: \"If we back up the application, we can get to the UDP application through the multi-byte THX capacitor!\",\n\t\tstatus: \"done\",\n\t\tlabel: \"documentation\",\n\t\tpriority: \"high\",\n\t},\n\t{\n\t\tid: \"TASK-9616\",\n\t\ttitle: \"We need to synthesize the cross-platform ASCII pixel!\",\n\t\tstatus: \"in progress\",\n\t\tlabel: \"feature\",\n\t\tpriority: \"medium\",\n\t},\n\t{\n\t\tid: \"TASK-9744\",\n\t\ttitle: \"Use the back-end IP card, then you can input the solid state hard drive!\",\n\t\tstatus: \"done\",\n\t\tlabel: \"documentation\",\n\t\tpriority: \"low\",\n\t},\n\t{\n\t\tid: \"TASK-1376\",\n\t\ttitle: \"Generating the alarm won't do anything, we need to generate the mobile IP capacitor!\",\n\t\tstatus: \"backlog\",\n\t\tlabel: \"documentation\",\n\t\tpriority: \"low\",\n\t},\n\t{\n\t\tid: \"TASK-7382\",\n\t\ttitle: \"If we back up the firewall, we can get to the RAM alarm through the primary UTF8 pixel!\",\n\t\tstatus: \"todo\",\n\t\tlabel: \"feature\",\n\t\tpriority: \"low\",\n\t},\n\t{\n\t\tid: \"TASK-2290\",\n\t\ttitle: \"I'll compress the virtual JSON panel, that should application the UTF8 bus!\",\n\t\tstatus: \"canceled\",\n\t\tlabel: \"documentation\",\n\t\tpriority: \"high\",\n\t},\n\t{\n\t\tid: \"TASK-1533\",\n\t\ttitle: \"You can't input the firewall without overriding the wireless TCP firewall!\",\n\t\tstatus: \"done\",\n\t\tlabel: \"bug\",\n\t\tpriority: \"high\",\n\t},\n\t{\n\t\tid: \"TASK-4920\",\n\t\ttitle: \"Bypassing the hard drive won't do anything, we need to input the bluetooth JSON program!\",\n\t\tstatus: \"in progress\",\n\t\tlabel: \"bug\",\n\t\tpriority: \"high\",\n\t},\n\t{\n\t\tid: \"TASK-5168\",\n\t\ttitle: \"If we synthesize the bus, we can get to the IP panel through the virtual TLS array!\",\n\t\tstatus: \"in progress\",\n\t\tlabel: \"feature\",\n\t\tpriority: \"low\",\n\t},\n\t{\n\t\tid: \"TASK-7103\",\n\t\ttitle: \"We need to parse the multi-byte EXE bandwidth!\",\n\t\tstatus: \"canceled\",\n\t\tlabel: \"feature\",\n\t\tpriority: \"low\",\n\t},\n\t{\n\t\tid: \"TASK-4314\",\n\t\ttitle: \"If we compress the program, we can get to the XML alarm through the multi-byte COM matrix!\",\n\t\tstatus: \"in progress\",\n\t\tlabel: \"bug\",\n\t\tpriority: \"high\",\n\t},\n\t{\n\t\tid: \"TASK-3415\",\n\t\ttitle: \"Use the cross-platform XML application, then you can quantify the solid state feed!\",\n\t\tstatus: \"todo\",\n\t\tlabel: \"feature\",\n\t\tpriority: \"high\",\n\t},\n\t{\n\t\tid: \"TASK-8339\",\n\t\ttitle: \"Try to calculate the DNS interface, maybe it will input the bluetooth capacitor!\",\n\t\tstatus: \"in progress\",\n\t\tlabel: \"feature\",\n\t\tpriority: \"low\",\n\t},\n\t{\n\t\tid: \"TASK-6995\",\n\t\ttitle: \"Try to hack the XSS bandwidth, maybe it will override the bluetooth matrix!\",\n\t\tstatus: \"todo\",\n\t\tlabel: \"feature\",\n\t\tpriority: \"high\",\n\t},\n\t{\n\t\tid: \"TASK-8053\",\n\t\ttitle: \"If we connect the program, we can get to the UTF8 matrix through the digital UDP protocol!\",\n\t\tstatus: \"todo\",\n\t\tlabel: \"feature\",\n\t\tpriority: \"medium\",\n\t},\n\t{\n\t\tid: \"TASK-4336\",\n\t\ttitle: \"If we synthesize the microchip, we can get to the SAS sensor through the optical UDP program!\",\n\t\tstatus: \"todo\",\n\t\tlabel: \"documentation\",\n\t\tpriority: \"low\",\n\t},\n\t{\n\t\tid: \"TASK-8790\",\n\t\ttitle: \"I'll back up the optical COM alarm, that should alarm the RSS capacitor!\",\n\t\tstatus: \"done\",\n\t\tlabel: \"bug\",\n\t\tpriority: \"medium\",\n\t},\n\t{\n\t\tid: \"TASK-8980\",\n\t\ttitle: \"Try to navigate the SQL transmitter, maybe it will back up the virtual firewall!\",\n\t\tstatus: \"canceled\",\n\t\tlabel: \"bug\",\n\t\tpriority: \"low\",\n\t},\n\t{\n\t\tid: \"TASK-7342\",\n\t\ttitle: \"Use the neural CLI card, then you can parse the online port!\",\n\t\tstatus: \"backlog\",\n\t\tlabel: \"documentation\",\n\t\tpriority: \"low\",\n\t},\n\t{\n\t\tid: \"TASK-5608\",\n\t\ttitle: \"I'll hack the haptic SSL program, that should bus the UDP transmitter!\",\n\t\tstatus: \"canceled\",\n\t\tlabel: \"documentation\",\n\t\tpriority: \"low\",\n\t},\n\t{\n\t\tid: \"TASK-1606\",\n\t\ttitle: \"I'll generate the bluetooth PNG firewall, that should pixel the SSL driver!\",\n\t\tstatus: \"done\",\n\t\tlabel: \"feature\",\n\t\tpriority: \"medium\",\n\t},\n\t{\n\t\tid: \"TASK-7872\",\n\t\ttitle: \"Transmitting the circuit won't do anything, we need to reboot the 1080p RSS monitor!\",\n\t\tstatus: \"canceled\",\n\t\tlabel: \"feature\",\n\t\tpriority: \"medium\",\n\t},\n\t{\n\t\tid: \"TASK-4167\",\n\t\ttitle: \"Use the cross-platform SMS circuit, then you can synthesize the optical feed!\",\n\t\tstatus: \"canceled\",\n\t\tlabel: \"bug\",\n\t\tpriority: \"medium\",\n\t},\n\t{\n\t\tid: \"TASK-9581\",\n\t\ttitle: \"You can't index the port without hacking the cross-platform XSS monitor!\",\n\t\tstatus: \"backlog\",\n\t\tlabel: \"documentation\",\n\t\tpriority: \"low\",\n\t},\n\t{\n\t\tid: \"TASK-8806\",\n\t\ttitle: \"We need to bypass the back-end SSL panel!\",\n\t\tstatus: \"done\",\n\t\tlabel: \"bug\",\n\t\tpriority: \"medium\",\n\t},\n\t{\n\t\tid: \"TASK-6542\",\n\t\ttitle: \"Try to quantify the RSS firewall, maybe it will quantify the open-source system!\",\n\t\tstatus: \"done\",\n\t\tlabel: \"feature\",\n\t\tpriority: \"low\",\n\t},\n\t{\n\t\tid: \"TASK-6806\",\n\t\ttitle: \"The VGA protocol is down, reboot the back-end matrix so we can parse the CSS panel!\",\n\t\tstatus: \"canceled\",\n\t\tlabel: \"documentation\",\n\t\tpriority: \"low\",\n\t},\n\t{\n\t\tid: \"TASK-9549\",\n\t\ttitle: \"You can't bypass the bus without connecting the neural JBOD bus!\",\n\t\tstatus: \"todo\",\n\t\tlabel: \"feature\",\n\t\tpriority: \"high\",\n\t},\n\t{\n\t\tid: \"TASK-1075\",\n\t\ttitle: \"Backing up the driver won't do anything, we need to parse the redundant RAM pixel!\",\n\t\tstatus: \"done\",\n\t\tlabel: \"feature\",\n\t\tpriority: \"medium\",\n\t},\n\t{\n\t\tid: \"TASK-1427\",\n\t\ttitle: \"Use the auxiliary PCI circuit, then you can calculate the cross-platform interface!\",\n\t\tstatus: \"done\",\n\t\tlabel: \"documentation\",\n\t\tpriority: \"high\",\n\t},\n\t{\n\t\tid: \"TASK-1907\",\n\t\ttitle: \"Hacking the circuit won't do anything, we need to back up the online DRAM system!\",\n\t\tstatus: \"todo\",\n\t\tlabel: \"documentation\",\n\t\tpriority: \"high\",\n\t},\n\t{\n\t\tid: \"TASK-4309\",\n\t\ttitle: \"If we generate the system, we can get to the TCP sensor through the optical GB pixel!\",\n\t\tstatus: \"backlog\",\n\t\tlabel: \"bug\",\n\t\tpriority: \"medium\",\n\t},\n\t{\n\t\tid: \"TASK-3973\",\n\t\ttitle: \"I'll parse the back-end ADP array, that should bandwidth the RSS bandwidth!\",\n\t\tstatus: \"todo\",\n\t\tlabel: \"feature\",\n\t\tpriority: \"medium\",\n\t},\n\t{\n\t\tid: \"TASK-7962\",\n\t\ttitle: \"Use the wireless RAM program, then you can hack the cross-platform feed!\",\n\t\tstatus: \"canceled\",\n\t\tlabel: \"bug\",\n\t\tpriority: \"low\",\n\t},\n\t{\n\t\tid: \"TASK-3360\",\n\t\ttitle: \"You can't quantify the program without synthesizing the neural OCR interface!\",\n\t\tstatus: \"done\",\n\t\tlabel: \"feature\",\n\t\tpriority: \"medium\",\n\t},\n\t{\n\t\tid: \"TASK-9887\",\n\t\ttitle: \"Use the auxiliary ASCII sensor, then you can connect the solid state port!\",\n\t\tstatus: \"backlog\",\n\t\tlabel: \"bug\",\n\t\tpriority: \"medium\",\n\t},\n\t{\n\t\tid: \"TASK-3649\",\n\t\ttitle: \"I'll input the virtual USB system, that should circuit the DNS monitor!\",\n\t\tstatus: \"in progress\",\n\t\tlabel: \"feature\",\n\t\tpriority: \"medium\",\n\t},\n\t{\n\t\tid: \"TASK-3586\",\n\t\ttitle: \"If we quantify the circuit, we can get to the CLI feed through the mobile SMS hard drive!\",\n\t\tstatus: \"in progress\",\n\t\tlabel: \"bug\",\n\t\tpriority: \"low\",\n\t},\n\t{\n\t\tid: \"TASK-5150\",\n\t\ttitle: \"I'll hack the wireless XSS port, that should transmitter the IP interface!\",\n\t\tstatus: \"canceled\",\n\t\tlabel: \"feature\",\n\t\tpriority: \"medium\",\n\t},\n\t{\n\t\tid: \"TASK-3652\",\n\t\ttitle: \"The SQL interface is down, override the optical bus so we can program the ASCII interface!\",\n\t\tstatus: \"backlog\",\n\t\tlabel: \"feature\",\n\t\tpriority: \"low\",\n\t},\n\t{\n\t\tid: \"TASK-6884\",\n\t\ttitle: \"Use the digital PCI circuit, then you can synthesize the multi-byte microchip!\",\n\t\tstatus: \"canceled\",\n\t\tlabel: \"feature\",\n\t\tpriority: \"high\",\n\t},\n\t{\n\t\tid: \"TASK-1591\",\n\t\ttitle: \"We need to connect the mobile XSS driver!\",\n\t\tstatus: \"in progress\",\n\t\tlabel: \"feature\",\n\t\tpriority: \"high\",\n\t},\n\t{\n\t\tid: \"TASK-3802\",\n\t\ttitle: \"Try to override the ASCII protocol, maybe it will parse the virtual matrix!\",\n\t\tstatus: \"in progress\",\n\t\tlabel: \"feature\",\n\t\tpriority: \"low\",\n\t},\n\t{\n\t\tid: \"TASK-7253\",\n\t\ttitle: \"Programming the capacitor won't do anything, we need to bypass the neural IB hard drive!\",\n\t\tstatus: \"backlog\",\n\t\tlabel: \"bug\",\n\t\tpriority: \"high\",\n\t},\n\t{\n\t\tid: \"TASK-9739\",\n\t\ttitle: \"We need to hack the multi-byte HDD bus!\",\n\t\tstatus: \"done\",\n\t\tlabel: \"documentation\",\n\t\tpriority: \"medium\",\n\t},\n\t{\n\t\tid: \"TASK-4424\",\n\t\ttitle: \"Try to hack the HEX alarm, maybe it will connect the optical pixel!\",\n\t\tstatus: \"in progress\",\n\t\tlabel: \"documentation\",\n\t\tpriority: \"medium\",\n\t},\n\t{\n\t\tid: \"TASK-3922\",\n\t\ttitle: \"You can't back up the capacitor without generating the wireless PCI program!\",\n\t\tstatus: \"backlog\",\n\t\tlabel: \"bug\",\n\t\tpriority: \"low\",\n\t},\n\t{\n\t\tid: \"TASK-4921\",\n\t\ttitle: \"I'll index the open-source IP feed, that should system the GB application!\",\n\t\tstatus: \"canceled\",\n\t\tlabel: \"bug\",\n\t\tpriority: \"low\",\n\t},\n\t{\n\t\tid: \"TASK-5814\",\n\t\ttitle: \"We need to calculate the 1080p AGP feed!\",\n\t\tstatus: \"backlog\",\n\t\tlabel: \"bug\",\n\t\tpriority: \"high\",\n\t},\n\t{\n\t\tid: \"TASK-2645\",\n\t\ttitle: \"Synthesizing the system won't do anything, we need to navigate the multi-byte HDD firewall!\",\n\t\tstatus: \"todo\",\n\t\tlabel: \"documentation\",\n\t\tpriority: \"medium\",\n\t},\n\t{\n\t\tid: \"TASK-4535\",\n\t\ttitle: \"Try to copy the JSON circuit, maybe it will connect the wireless feed!\",\n\t\tstatus: \"in progress\",\n\t\tlabel: \"feature\",\n\t\tpriority: \"low\",\n\t},\n\t{\n\t\tid: \"TASK-4463\",\n\t\ttitle: \"We need to copy the solid state AGP monitor!\",\n\t\tstatus: \"done\",\n\t\tlabel: \"documentation\",\n\t\tpriority: \"low\",\n\t},\n\t{\n\t\tid: \"TASK-9745\",\n\t\ttitle: \"If we connect the protocol, we can get to the GB system through the bluetooth PCI microchip!\",\n\t\tstatus: \"canceled\",\n\t\tlabel: \"feature\",\n\t\tpriority: \"high\",\n\t},\n\t{\n\t\tid: \"TASK-2080\",\n\t\ttitle: \"If we input the bus, we can get to the RAM matrix through the auxiliary RAM card!\",\n\t\tstatus: \"todo\",\n\t\tlabel: \"bug\",\n\t\tpriority: \"medium\",\n\t},\n\t{\n\t\tid: \"TASK-3838\",\n\t\ttitle: \"I'll bypass the online TCP application, that should panel the AGP system!\",\n\t\tstatus: \"backlog\",\n\t\tlabel: \"bug\",\n\t\tpriority: \"high\",\n\t},\n\t{\n\t\tid: \"TASK-1340\",\n\t\ttitle: \"We need to navigate the virtual PNG circuit!\",\n\t\tstatus: \"todo\",\n\t\tlabel: \"bug\",\n\t\tpriority: \"medium\",\n\t},\n\t{\n\t\tid: \"TASK-6665\",\n\t\ttitle: \"If we parse the monitor, we can get to the SSD hard drive through the cross-platform AGP alarm!\",\n\t\tstatus: \"canceled\",\n\t\tlabel: \"feature\",\n\t\tpriority: \"low\",\n\t},\n\t{\n\t\tid: \"TASK-7585\",\n\t\ttitle: \"If we calculate the hard drive, we can get to the SSL program through the multi-byte CSS microchip!\",\n\t\tstatus: \"backlog\",\n\t\tlabel: \"feature\",\n\t\tpriority: \"low\",\n\t},\n\t{\n\t\tid: \"TASK-6319\",\n\t\ttitle: \"We need to copy the multi-byte SCSI program!\",\n\t\tstatus: \"backlog\",\n\t\tlabel: \"bug\",\n\t\tpriority: \"high\",\n\t},\n\t{\n\t\tid: \"TASK-4369\",\n\t\ttitle: \"Try to input the SCSI bus, maybe it will generate the 1080p pixel!\",\n\t\tstatus: \"backlog\",\n\t\tlabel: \"bug\",\n\t\tpriority: \"high\",\n\t},\n\t{\n\t\tid: \"TASK-9035\",\n\t\ttitle: \"We need to override the solid state PNG array!\",\n\t\tstatus: \"canceled\",\n\t\tlabel: \"documentation\",\n\t\tpriority: \"low\",\n\t},\n\t{\n\t\tid: \"TASK-3970\",\n\t\ttitle: \"You can't index the transmitter without quantifying the haptic ASCII card!\",\n\t\tstatus: \"todo\",\n\t\tlabel: \"documentation\",\n\t\tpriority: \"medium\",\n\t},\n\t{\n\t\tid: \"TASK-4473\",\n\t\ttitle: \"You can't bypass the protocol without overriding the neural RSS program!\",\n\t\tstatus: \"todo\",\n\t\tlabel: \"documentation\",\n\t\tpriority: \"low\",\n\t},\n\t{\n\t\tid: \"TASK-4136\",\n\t\ttitle: \"You can't hack the hard drive without hacking the primary JSON program!\",\n\t\tstatus: \"canceled\",\n\t\tlabel: \"bug\",\n\t\tpriority: \"medium\",\n\t},\n\t{\n\t\tid: \"TASK-3939\",\n\t\ttitle: \"Use the back-end SQL firewall, then you can connect the neural hard drive!\",\n\t\tstatus: \"done\",\n\t\tlabel: \"feature\",\n\t\tpriority: \"low\",\n\t},\n\t{\n\t\tid: \"TASK-2007\",\n\t\ttitle: \"I'll input the back-end USB protocol, that should bandwidth the PCI system!\",\n\t\tstatus: \"backlog\",\n\t\tlabel: \"bug\",\n\t\tpriority: \"high\",\n\t},\n\t{\n\t\tid: \"TASK-7516\",\n\t\ttitle: \"Use the primary SQL program, then you can generate the auxiliary transmitter!\",\n\t\tstatus: \"done\",\n\t\tlabel: \"documentation\",\n\t\tpriority: \"medium\",\n\t},\n\t{\n\t\tid: \"TASK-6906\",\n\t\ttitle: \"Try to back up the DRAM system, maybe it will reboot the online transmitter!\",\n\t\tstatus: \"done\",\n\t\tlabel: \"feature\",\n\t\tpriority: \"high\",\n\t},\n\t{\n\t\tid: \"TASK-5207\",\n\t\ttitle: \"The SMS interface is down, copy the bluetooth bus so we can quantify the VGA card!\",\n\t\tstatus: \"in progress\",\n\t\tlabel: \"bug\",\n\t\tpriority: \"low\",\n\t},\n];\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/themes/+layout.svelte",
    "content": "<script lang=\"ts\">\n\timport Announcement from \"$lib/components/announcement.svelte\";\n\timport Metadata from \"$lib/components/metadata.svelte\";\n\timport PageActions from \"$lib/components/page-header/page-actions.svelte\";\n\timport PageHeaderDescription from \"$lib/components/page-header/page-header-description.svelte\";\n\timport PageHeaderHeading from \"$lib/components/page-header/page-header-heading.svelte\";\n\timport PageHeader from \"$lib/components/page-header/page-header.svelte\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\n\tlet { children } = $props();\n\n\tconst title = \"Pick a Color. Make it yours.\";\n\tconst description =\n\t\t\"Try our hand-picked themes. Copy and paste them into your project. New theme editor coming soon.\";\n</script>\n\n<Metadata\n\t{title}\n\t{description}\n\togImage={{\n\t\turl: `/og?title=${encodeURIComponent(title)}&description=${encodeURIComponent(description)}`,\n\t}}\n/>\n\n<div>\n\t<PageHeader>\n\t\t<Announcement />\n\t\t<PageHeaderHeading>{title}</PageHeaderHeading>\n\t\t<PageHeaderDescription>{description}</PageHeaderDescription>\n\t\t<PageActions>\n\t\t\t<Button href=\"#themes\" size=\"sm\">Browse Themes</Button>\n\t\t\t<Button href=\"/docs/theming\" variant=\"ghost\" size=\"sm\">Documentation</Button>\n\t\t</PageActions>\n\t</PageHeader>\n\t{@render children()}\n</div>\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/themes/+layout.ts",
    "content": "export const prerender = true;\n"
  },
  {
    "path": "docs/src/routes/(app)/(layout)/themes/+page.svelte",
    "content": "<script lang=\"ts\">\n\timport ThemeCustomizer from \"$lib/components/theme-customizer.svelte\";\n\timport CardsDemo from \"$lib/components/cards/cards-demo.svelte\";\n</script>\n\n<div id=\"themes\" class=\"container-wrapper scroll-mt-20\">\n\t<div class=\"container flex items-center justify-between gap-8 px-6 py-4 md:px-8\">\n\t\t<ThemeCustomizer />\n\t</div>\n</div>\n<div class=\"container-wrapper section-soft flex flex-1 flex-col pb-6\">\n\t<div class=\"theme-container container flex flex-1 flex-col\">\n\t\t<CardsDemo />\n\t</div>\n</div>\n"
  },
  {
    "path": "docs/src/routes/(app)/+layout.server.ts",
    "content": "import { USER_CONFIG_COOKIE_NAME, userConfigSchema } from \"$lib/user-config.svelte.js\";\nimport type { LayoutServerLoad } from \"./$types.js\";\n\nexport const load: LayoutServerLoad = async ({ cookies }) => {\n\tconst sidebarState = cookies.get(\"sidebar_state\") === \"true\" ? true : false;\n\n\tconst userConfigCookie = cookies.get(USER_CONFIG_COOKIE_NAME);\n\tconst parsedUserConfig = userConfigCookie ? JSON.parse(userConfigCookie) : {};\n\tconst userConfig = userConfigSchema.parse(parsedUserConfig);\n\n\treturn { sidebarState, userConfig };\n};\n"
  },
  {
    "path": "docs/src/routes/(app)/+layout.svelte",
    "content": "<script lang=\"ts\">\n\timport { UserConfig, UserConfigContext } from \"$lib/user-config.svelte.js\";\n\timport { ModeWatcher } from \"mode-watcher\";\n\timport { Toaster } from \"$lib/registry/ui/sonner/index.js\";\n\timport { DesignSystemProvider } from \"$lib/features/design-system/index.js\";\n\n\tlet { children, data } = $props();\n\n\t// svelte-ignore state_referenced_locally\n\tUserConfigContext.set(new UserConfig(data.userConfig));\n</script>\n\n<ModeWatcher defaultMode=\"system\" disableTransitions />\n<Toaster position=\"top-center\" />\n\n<DesignSystemProvider>\n\t{@render children()}\n</DesignSystemProvider>\n"
  },
  {
    "path": "docs/src/routes/(app)/+layout.ts",
    "content": "import { browser } from \"$app/environment\";\nimport { parseUserConfig } from \"$lib/user-config.svelte.js\";\nimport type { LayoutLoad } from \"./$types.js\";\n\nexport const load: LayoutLoad = ({ data }) => {\n\tif (!browser) return data;\n\n\treturn { ...data, userConfig: parseUserConfig(document.cookie) };\n};\n"
  },
  {
    "path": "docs/src/routes/(app)/preview/[item]/+page.svelte",
    "content": "<script lang=\"ts\">\n\timport { page } from \"$app/state\";\n\timport TailwindIndicator from \"$lib/components/tailwind-indicator.svelte\";\n\timport Button from \"$lib/registry/ui/button/button.svelte\";\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\timport type { Component } from \"svelte\";\n\n\tlet { data } = $props();\n\n\tconst createExampleComponents = import.meta.glob(\n\t\t\"/src/lib/registry/examples/create/*/*.svelte\"\n\t);\n\tconst exampleComponentPath = $derived(\n\t\t`/src/lib/registry/examples/create/${data.example.name}/${data.example.name}.svelte`\n\t);\n\tconst loadExampleComponent = $derived(createExampleComponents[exampleComponentPath]);\n\tconst ComponentPromise = $derived(\n\t\tloadExampleComponent\n\t\t\t? (loadExampleComponent() as Promise<{ default: Component }>)\n\t\t\t: Promise.reject(new Error(`Missing preview component: ${exampleComponentPath}`))\n\t);\n</script>\n\n{#if page.url.searchParams.get(\"fromPreview\") === \"true\"}\n\t<Button\n\t\tclass=\"absolute top-2 right-2 isolate z-10\"\n\t\thref=\"/create/{data.example.name}{page.url.search}\"\n\t\tvariant=\"ghost\"\n\t\tsize=\"icon-sm\"\n\t>\n\t\t<IconPlaceholder\n\t\t\tlucide=\"MinimizeIcon\"\n\t\t\ttabler=\"IconMinimize\"\n\t\t\thugeicons=\"ArrowShrinkIcon\"\n\t\t\tphosphor=\"CornersInIcon\"\n\t\t\tremixicon=\"RiExpandDiagonalLine\"\n\t\t/>\n\t</Button>\n{/if}\n{#await ComponentPromise then { default: Component }}\n\t<Component />\n{/await}\n<TailwindIndicator />\n"
  },
  {
    "path": "docs/src/routes/(app)/preview/[item]/+page.ts",
    "content": "import { error } from \"@sveltejs/kit\";\nimport { examples } from \"$lib/registry/examples/create/index.js\";\n\nexport function load({ params }) {\n\tconst { item } = params;\n\n\tconst example = examples.find((example) => example.name === item);\n\tif (!example) {\n\t\terror(404, \"Example not found\");\n\t}\n\n\treturn { example };\n}\n"
  },
  {
    "path": "docs/src/routes/(view)/+layout.svelte",
    "content": "<script lang=\"ts\">\n\timport { ModeWatcher } from \"mode-watcher\";\n\timport { DesignSystemProvider } from \"$lib/features/design-system/index.js\";\n\n\tlet { children } = $props();\n</script>\n\n<ModeWatcher />\n<DesignSystemProvider>\n\t{@render children()}\n</DesignSystemProvider>\n"
  },
  {
    "path": "docs/src/routes/(view)/view/[view=view]/+page.svelte",
    "content": "<script lang=\"ts\">\n\timport Metadata from \"$lib/components/metadata.svelte\";\n\timport { cn } from \"$lib/utils.js\";\n\timport type { PageProps } from \"./$types.js\";\n\n\tlet { data }: PageProps = $props();\n</script>\n\n<Metadata\n\ttitle={data.meta.name}\n\tdescription={data.meta.description}\n\togImage={{\n\t\turl: `/og?title=${encodeURIComponent(data.meta.name)}&description=${encodeURIComponent(data.meta.description)}`,\n\t}}\n\togType=\"article\"\n/>\n\n<div class={cn(\"bg-background\", data.meta?.className)}>\n\t<data.component />\n</div>\n"
  },
  {
    "path": "docs/src/routes/(view)/view/[view=view]/+page.ts",
    "content": "import { error } from \"@sveltejs/kit\";\nimport type { EntryGenerator } from \"./$types.js\";\nimport type { Component } from \"svelte\";\nimport { blocks } from \"../../../../__registry__/blocks.js\";\nimport { blockMeta } from \"$lib/registry/registry-block-meta.js\";\n\nexport const prerender = true;\n\nexport const entries: EntryGenerator = () => blocks.map((view) => ({ view }));\n\nexport async function load({ params }) {\n\tlet comp: { default: Component } | undefined;\n\n\tif (params.view.startsWith(\"demo-\") || params.view.startsWith(\"calendar-\")) {\n\t\tcomp = await import(`../../../../lib/registry/blocks/${params.view}.svelte`);\n\t} else {\n\t\tcomp = await import(`../../../../lib/registry/blocks/${params.view}/+page.svelte`);\n\t}\n\n\tif (!comp) error(404, \"Block not found\");\n\n\tconst meta = blockMeta[params.view as keyof typeof blockMeta];\n\n\treturn { component: comp.default, meta: { ...meta, name: params.view } };\n}\n"
  },
  {
    "path": "docs/src/routes/+error.svelte",
    "content": "<script lang=\"ts\">\n\timport { page } from \"$app/state\";\n\timport { ModeWatcher } from \"mode-watcher\";\n</script>\n\n<ModeWatcher />\n\n<h1>{page.status}</h1>\n<p>{page.error?.message}</p>\n"
  },
  {
    "path": "docs/src/routes/+layout.svelte",
    "content": "<script lang=\"ts\">\n\timport TailwindIndicator from \"$lib/components/tailwind-indicator.svelte\";\n\timport \"../app.css\";\n\n\tlet { children } = $props();\n</script>\n\n<TailwindIndicator />\n{@render children()}\n"
  },
  {
    "path": "docs/src/routes/api/block/[block]/+server.ts",
    "content": "import path from \"node:path\";\nimport { z } from \"zod\";\nimport { json } from \"@sveltejs/kit\";\nimport { registryItemSchema } from \"shadcn-svelte/schema\";\nimport { highlightCode } from \"$lib/highlight-code.js\";\nimport { blockMeta } from \"$lib/registry/registry-block-meta.js\";\nimport {\n\ttransformBlockPath,\n\ttransformDesignSystem,\n\ttransformImportPaths,\n} from \"$lib/registry/registry-utils.js\";\nimport type { RequestHandler } from \"./$types.js\";\nimport {\n\tDEFAULT_CONFIG,\n\tMENU_COLORS,\n\tgetIconLibrary,\n\tgetStyle,\n\ttype IconLibraryName,\n\ttype MenuColorValue,\n\ttype StyleName,\n} from \"$lib/registry/config.js\";\n\nexport interface HighlightedBlock {\n\tname: string;\n\tdescription?: string;\n\tmeta?: Record<string, unknown>;\n\ttype: string;\n\tfiles: HighlightedFile[];\n}\n\nexport interface HighlightedFile {\n\ttype:\n\t\t| \"registry:file\"\n\t\t| \"registry:page\"\n\t\t| \"registry:ui\"\n\t\t| \"registry:component\"\n\t\t| \"registry:lib\"\n\t\t| \"registry:hook\"\n\t\t| \"registry:theme\"\n\t\t| \"registry:style\";\n\ttarget: string;\n\thighlightedContent: string;\n}\n\nconst highlightedBlockSchema = z.object({\n\tname: z.string(),\n\tdescription: z.string().optional(),\n\tmeta: z.record(z.string(), z.unknown()).optional(),\n\ttype: z.string(),\n\tfiles: z.array(\n\t\tz.object({\n\t\t\ttype: z.enum([\n\t\t\t\t\"registry:file\",\n\t\t\t\t\"registry:page\",\n\t\t\t\t\"registry:ui\",\n\t\t\t\t\"registry:component\",\n\t\t\t\t\"registry:lib\",\n\t\t\t\t\"registry:hook\",\n\t\t\t\t\"registry:theme\",\n\t\t\t\t\"registry:style\",\n\t\t\t]),\n\t\t\ttarget: z.string(),\n\t\t\thighlightedContent: z.string(),\n\t\t})\n\t),\n});\n\nasync function loadItem(\n\tblock: string,\n\t{\n\t\tdesignSystem,\n\t}: {\n\t\tdesignSystem: {\n\t\t\tstyle: StyleName;\n\t\t\ticonLibrary: IconLibraryName;\n\t\t\tmenuColor?: MenuColorValue;\n\t\t};\n\t}\n): Promise<HighlightedBlock> {\n\tconst { default: mod } = await import(\n\t\t`../../../../__registry__/json/styles/${designSystem.style}/${block}.json`\n\t);\n\tconst item = registryItemSchema.parse(mod);\n\tconst meta = blockMeta[item.name as keyof typeof blockMeta];\n\tconst files = item.files?.map(async (file) => {\n\t\tconst lang = path.extname(file.target).slice(1);\n\n\t\tfile.content = transformImportPaths(file.content);\n\t\tfile.content = await transformDesignSystem(file.content, file.target, designSystem);\n\t\tconst highlightedContent = await highlightCode(file.content, lang);\n\t\tlet target;\n\t\tif (item.type === \"registry:ui\") {\n\t\t\ttarget = file.target;\n\t\t} else {\n\t\t\ttarget = transformBlockPath(file.target, file.type);\n\t\t}\n\t\treturn { ...file, highlightedContent, target };\n\t});\n\n\treturn highlightedBlockSchema.parse({\n\t\t...item,\n\t\tfiles: files ? await Promise.all(files) : [],\n\t\tdescription: meta?.description,\n\t\tmeta,\n\t});\n}\n\nconst menuColorValues = MENU_COLORS.map((m) => m.value);\n\nexport const GET: RequestHandler = async ({ params, url }) => {\n\t// Safely access searchParams during prerendering\n\tlet style: string | null = null;\n\tlet iconLibrary: string | null = null;\n\tlet menuColor: string | null = null;\n\ttry {\n\t\tstyle = url.searchParams.get(\"style\");\n\t\ticonLibrary = url.searchParams.get(\"iconLibrary\");\n\t\tmenuColor = url.searchParams.get(\"menuColor\");\n\t} catch {\n\t\t// TODO: Fix prerendering - During prerendering, searchParams is not available\n\t\t// Use default values\n\t}\n\n\tconst { block } = params;\n\tconst item = await loadItem(block, {\n\t\tdesignSystem: {\n\t\t\tstyle: getStyle((style ?? \"\") as StyleName)?.name ?? DEFAULT_CONFIG.style,\n\t\t\ticonLibrary:\n\t\t\t\tgetIconLibrary((iconLibrary ?? \"\") as IconLibraryName)?.name ??\n\t\t\t\tDEFAULT_CONFIG.iconLibrary,\n\t\t\tmenuColor: menuColorValues.includes((menuColor ?? \"\") as MenuColorValue)\n\t\t\t\t? (menuColor as MenuColorValue)\n\t\t\t\t: DEFAULT_CONFIG.menuColor,\n\t\t},\n\t});\n\treturn json(item);\n};\n\nexport const prerender = true;\n"
  },
  {
    "path": "docs/src/routes/init/+server.ts",
    "content": "import { buildRegistryBase } from \"$lib/registry/config.js\";\nimport { error, json } from \"@sveltejs/kit\";\nimport { decodePreset } from \"shadcn-svelte/preset\";\n\nexport async function GET({ request }) {\n\tconst url = new URL(request.url);\n\n\tconst preset = url.searchParams.get(\"preset\");\n\tconst presetConfig = decodePreset(preset ?? \"\");\n\n\tif (!preset || !presetConfig) {\n\t\treturn error(400, { message: \"Expected ?preset= parameter to be a valid preset\" });\n\t}\n\n\treturn json(buildRegistryBase(presetConfig));\n}\n"
  },
  {
    "path": "docs/src/routes/og/+server.ts",
    "content": "import { redirect } from \"@sveltejs/kit\";\nimport { OG_IMAGE_BASE_URL } from \"./og.js\";\n\nexport function GET({ url }) {\n\tconst destination = new URL(\"/og\", OG_IMAGE_BASE_URL);\n\t// append the query params to the destination\n\tconst destinationWithParams = new URL(destination);\n\tdestinationWithParams.search = url.search;\n\tredirect(302, destinationWithParams.toString());\n}\n"
  },
  {
    "path": "docs/src/routes/og/create/+server.ts",
    "content": "import { redirect } from \"@sveltejs/kit\";\nimport { OG_IMAGE_BASE_URL } from \"../og.js\";\n\nexport function GET({ url }) {\n\tconst destination = new URL(\"/create/og\", OG_IMAGE_BASE_URL);\n\t// append the query params to the destination\n\tconst destinationWithParams = new URL(destination);\n\tdestinationWithParams.search = url.search;\n\tredirect(302, destinationWithParams.toString());\n}\n"
  },
  {
    "path": "docs/src/routes/og/og.ts",
    "content": "export const OG_IMAGE_BASE_URL = \"https://og.shadcn-svelte.com\";\n"
  },
  {
    "path": "docs/src/routes/registry/+server.ts",
    "content": "import { redirect } from \"@sveltejs/kit\";\n\nexport function GET() {\n\tredirect(303, \"/registry/index.json\");\n}\n"
  },
  {
    "path": "docs/src/routes/repro/+server.ts",
    "content": "import { redirect } from \"@sveltejs/kit\";\n\nexport function GET() {\n\tredirect(303, \"https://stackblitz.com/github/huntabyte/shadcn-svelte/tree/main/repro\");\n}\n"
  },
  {
    "path": "docs/static/schema.json",
    "content": "{\n\t\"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n\t\"type\": \"object\",\n\t\"properties\": {\n\t\t\"$schema\": {\n\t\t\t\"type\": \"string\"\n\t\t},\n\t\t\"style\": {\n\t\t\t\"description\": \"DEPRECATED IN TAILWIND v4! The style for your components. This cannot be changed after initialization.\",\n\t\t\t\"type\": \"string\"\n\t\t},\n\t\t\"tailwind\": {\n\t\t\t\"type\": \"object\",\n\t\t\t\"properties\": {\n\t\t\t\t\"css\": {\n\t\t\t\t\t\"type\": \"string\",\n\t\t\t\t\t\"description\": \"Path to the CSS file that imports Tailwind CSS into your project.\"\n\t\t\t\t},\n\t\t\t\t\"baseColor\": {\n\t\t\t\t\t\"type\": \"string\",\n\t\t\t\t\t\"description\": \"Used to generate the default color palette for your components. This cannot be changed after initialization.\"\n\t\t\t\t},\n\t\t\t\t\"config\": {\n\t\t\t\t\t\"description\": \"DEPRECATED IN TAILWIND v4! The path to your `tailwind.config.[js|ts]` file.\",\n\t\t\t\t\t\"type\": \"string\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"required\": [\n\t\t\t\t\"css\",\n\t\t\t\t\"baseColor\"\n\t\t\t],\n\t\t\t\"additionalProperties\": false\n\t\t},\n\t\t\"aliases\": {\n\t\t\t\"type\": \"object\",\n\t\t\t\"properties\": {\n\t\t\t\t\"components\": {\n\t\t\t\t\t\"type\": \"string\",\n\t\t\t\t\t\"description\": \"Import alias for your components.\"\n\t\t\t\t},\n\t\t\t\t\"utils\": {\n\t\t\t\t\t\"type\": \"string\",\n\t\t\t\t\t\"description\": \"Import alias for your utility functions.\"\n\t\t\t\t},\n\t\t\t\t\"ui\": {\n\t\t\t\t\t\"description\": \"Import alias for your UI components. Defaults to `$lib/components/ui`.\",\n\t\t\t\t\t\"type\": \"string\"\n\t\t\t\t},\n\t\t\t\t\"hooks\": {\n\t\t\t\t\t\"description\": \"Import alias for your hooks. Defaults to `$lib/hooks`.\",\n\t\t\t\t\t\"type\": \"string\"\n\t\t\t\t},\n\t\t\t\t\"lib\": {\n\t\t\t\t\t\"description\": \"Import alias for your library, which is typically where you store your components, utils, hooks, etc. Defaults to `$lib`.\",\n\t\t\t\t\t\"type\": \"string\"\n\t\t\t\t}\n\t\t\t},\n\t\t\t\"required\": [\n\t\t\t\t\"components\",\n\t\t\t\t\"utils\"\n\t\t\t],\n\t\t\t\"additionalProperties\": false,\n\t\t\t\"description\": \"The CLI uses these values and the `alias` config from your `svelte.config.js` file to place generated components in the correct location.\"\n\t\t},\n\t\t\"registry\": {\n\t\t\t\"description\": \"The registry URL tells the CLI where to fetch the shadcn-svelte components/registry from. You can pin this to a specific preview release or your own fork of the registry.\",\n\t\t\t\"type\": \"string\"\n\t\t},\n\t\t\"typescript\": {\n\t\t\t\"description\": \"Used to determine if Typescript is used for this project. When set to `false`, `.js` files will be installed instead. Defaults to `true`.\",\n\t\t\t\"anyOf\": [\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"boolean\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"type\": \"object\",\n\t\t\t\t\t\"properties\": {\n\t\t\t\t\t\t\"config\": {\n\t\t\t\t\t\t\t\"type\": \"string\",\n\t\t\t\t\t\t\t\"description\": \"Path to the tsconfig/jsconfig file.\"\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\t\"required\": [\n\t\t\t\t\t\t\"config\"\n\t\t\t\t\t],\n\t\t\t\t\t\"additionalProperties\": false\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t},\n\t\"required\": [\n\t\t\"tailwind\",\n\t\t\"aliases\"\n\t],\n\t\"additionalProperties\": false\n}"
  },
  {
    "path": "docs/static/site.webmanifest",
    "content": "{\n\t\"name\": \"\",\n\t\"short_name\": \"\",\n\t\"icons\": [\n\t\t{\n\t\t\t\"src\": \"/android-chrome-192x192.png\",\n\t\t\t\"sizes\": \"192x192\",\n\t\t\t\"type\": \"image/png\"\n\t\t},\n\t\t{\n\t\t\t\"src\": \"/android-chrome-512x512.png\",\n\t\t\t\"sizes\": \"512x512\",\n\t\t\t\"type\": \"image/png\"\n\t\t}\n\t],\n\t\"display\": \"standalone\"\n}\n"
  },
  {
    "path": "docs/svelte.config.js",
    "content": "// @ts-check\nimport { mdsx } from \"mdsx\";\nimport adapter from \"@sveltejs/adapter-cloudflare\";\nimport MagicString from \"magic-string\";\nimport { mdsxConfig } from \"./mdsx.config.js\";\n\n/** @type {import('@sveltejs/kit').Config} */\nconst config = {\n\tpreprocess: [mdsx(mdsxConfig), componentPreviews()],\n\textensions: [\".svelte\", \".md\"],\n\n\tkit: {\n\t\t// https://kit.svelte.dev/docs/adapter-cloudflare#options\n\t\tadapter: adapter(),\n\t\tprerender: {\n\t\t\thandleMissingId: (details) => {\n\t\t\t\tif (details.id === \"#\") return;\n\t\t\t\tconsole.warn(details.message);\n\t\t\t},\n\t\t\thandleHttpError: (details) => {\n\t\t\t\t// TODO: remove once all referenced pages are added\n\t\t\t\tconsole.warn(details.message);\n\t\t\t},\n\t\t},\n\t\talias: {\n\t\t\t\"$content/*\": \".velite/*\",\n\t\t},\n\t},\n};\n\nexport default config;\n\n/**\n * Detects the `name` of the previewing component, imports it directly and\n * passes it to the `ComponentPreview` as a prop.\n * @returns {import(\"svelte/compiler\").PreprocessorGroup}\n */\nfunction componentPreviews() {\n\tconst TARGET = \"<ComponentPreview\";\n\tconst camelize = (/** @type {string} */ s) => s.replace(/-./g, (w) => w[1].toUpperCase());\n\n\treturn {\n\t\tname: \"inject-component-preview\",\n\t\tmarkup: ({ content, filename }) => {\n\t\t\tif (!filename?.endsWith(\".md\") || !content.includes(TARGET)) return;\n\n\t\t\tconst ms = new MagicString(content);\n\t\t\tconst results = content.matchAll(/<ComponentPreview name=[\"|']([^\\s]*)[\"|']/g);\n\t\t\tconst components = new Set();\n\t\t\tfor (const exec of results) {\n\t\t\t\tconst [, name] = exec;\n\t\t\t\tconst insertIndex = exec.index + TARGET.length;\n\t\t\t\tconst identifier = camelize(name);\n\t\t\t\tif (name.includes(\"sidebar\")) continue;\n\t\t\t\tconst prop = ` component={${identifier}}`;\n\t\t\t\tms.appendRight(insertIndex, prop);\n\n\t\t\t\tcomponents.add(name);\n\t\t\t}\n\n\t\t\tconst importIndex = content.search(\"import ComponentPreview\");\n\t\t\tfor (const name of components) {\n\t\t\t\tconst identifier = camelize(name);\n\t\t\t\tlet importStatement;\n\t\t\t\tif (name.startsWith(\"chart\") && !name.includes(\"demo\")) {\n\t\t\t\t\timportStatement = `import ${identifier} from \"$lib/registry/blocks/${name}.svelte\";`;\n\t\t\t\t} else if (name.includes(\"sidebar\") || name.includes(\"Sidebar\")) {\n\t\t\t\t\tcontinue;\n\t\t\t\t} else if (name.startsWith(\"calendar\") && !name.includes(\"demo\")) {\n\t\t\t\t\timportStatement = `import ${identifier} from \"$lib/registry/blocks/${name}.svelte\";`;\n\t\t\t\t} else {\n\t\t\t\t\timportStatement = `import ${identifier} from \"$lib/registry/examples/${name}.svelte\";`;\n\t\t\t\t}\n\n\t\t\t\tms.appendLeft(importIndex, importStatement);\n\t\t\t}\n\n\t\t\treturn { code: ms.toString(), map: ms.generateMap() };\n\t\t},\n\t};\n}\n"
  },
  {
    "path": "docs/tsconfig.json",
    "content": "{\n\t\"extends\": \"./.svelte-kit/tsconfig.json\",\n\t\"compilerOptions\": {\n\t\t\"allowJs\": true,\n\t\t\"checkJs\": true,\n\t\t\"esModuleInterop\": true,\n\t\t\"forceConsistentCasingInFileNames\": true,\n\t\t\"resolveJsonModule\": true,\n\t\t\"skipLibCheck\": true,\n\t\t\"sourceMap\": true,\n\t\t\"strict\": true,\n\t\t\"moduleResolution\": \"NodeNext\",\n\t\t\"module\": \"NodeNext\",\n\t\t\"verbatimModuleSyntax\": true,\n\t\t\"useDefineForClassFields\": true\n\t},\n\t\"include\": [\n\t\t// SvelteKit defaults\n\t\t\"./.svelte-kit/ambient.d.ts\",\n\t\t\"./.svelte-kit/non-ambient.d.ts\",\n\t\t\"./.svelte-kit/types/**/$types.d.ts\",\n\t\t\"./vite.config.js\",\n\t\t\"./vite.config.ts\",\n\t\t\"./src/**/*.js\",\n\t\t\"./src/**/*.ts\",\n\t\t\"./src/**/*.svelte\",\n\t\t\"./tests/**/*.js\",\n\t\t\"./tests/**/*.ts\",\n\t\t\"./tests/**/*.svelte\",\n\t\t// Additions\n\t\t\"./mdsx.config.js\",\n\t\t\"./velite.config.js\",\n\t\t\".velite/**/*\"\n\t],\n\t\"exclude\": [\n\t\t\"./node_modules/**\",\n\t\t\"./src/service-worker.js\",\n\t\t\"./src/service-worker.ts\",\n\t\t\"./src/service-worker.d.ts\"\n\t]\n}\n"
  },
  {
    "path": "docs/velite.config.js",
    "content": "// @ts-check\nimport { defineCollection, defineConfig, s } from \"velite\";\n\nconst docSchema = s\n\t.object({\n\t\ttitle: s.string(),\n\t\tdescription: s.string(),\n\t\tpath: s.path(),\n\t\tnavLabel: s.string().optional(),\n\t\tlinks: s\n\t\t\t.object({\n\t\t\t\tdoc: s.string().optional(),\n\t\t\t\tapi: s.string().optional(),\n\t\t\t\tsource: s.string().optional(),\n\t\t\t})\n\t\t\t.optional(),\n\t\tcomponent: s.boolean().default(false),\n\t\ttoc: s.toc(),\n\t})\n\t.transform((data) => {\n\t\treturn {\n\t\t\t...data,\n\t\t\tslug: data.path.split(\"/\").slice(1).join(\"/\"),\n\t\t\tslugFull: `/${data.path}`,\n\t\t};\n\t});\n\nconst gettingStarted = defineCollection({\n\tname: \"gettingStarted\",\n\tpattern: \"./*.md\",\n\tschema: docSchema,\n});\n\nconst migration = defineCollection({\n\tname: \"migration\",\n\tpattern: \"./migration/**/*.md\",\n\tschema: docSchema,\n});\n\nconst components = defineCollection({\n\tname: \"components\",\n\tpattern: \"./components/**/*.md\",\n\tschema: docSchema,\n});\n\nconst installation = defineCollection({\n\tname: \"installation\",\n\tpattern: \"./installation/**/*.md\",\n\tschema: docSchema,\n});\n\nconst darkMode = defineCollection({\n\tname: \"darkMode\",\n\tpattern: \"./dark-mode/**/*.md\",\n\tschema: docSchema,\n});\n\nconst registry = defineCollection({\n\tname: \"registry\",\n\tpattern: \"./registry/**/*.md\",\n\tschema: docSchema,\n});\n\nexport default defineConfig({\n\troot: \"./content\",\n\tcollections: {\n\t\tgettingStarted,\n\t\tmigration,\n\t\tcomponents,\n\t\tinstallation,\n\t\tdarkMode,\n\t\tregistry,\n\t},\n\toutput: { assets: \"static\" },\n});\n"
  },
  {
    "path": "docs/vite.config.ts",
    "content": "import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { defineConfig } from \"vite\";\nimport tailwindcss from \"@tailwindcss/vite\";\nimport { sveltekit } from \"@sveltejs/kit/vite\";\nimport { build } from \"./scripts/build-registry.js\";\nimport { visualizer } from \"rollup-plugin-visualizer\";\nimport { enhancedImages } from \"@sveltejs/enhanced-img\";\nimport packageJson from \"./package.json\" with { type: \"json\" };\n\n// don't build when we're running `vite preview`\nif (!process.argv.includes(\"preview\")) {\n\tconsole.log(\"Building registry...\");\n\tawait buildRegistry();\n\tconsole.log(\"Registry built.\");\n}\n\nconst __dirname = fileURLToPath(new URL(\".\", import.meta.url));\nexport const veliteDirPath = path.join(__dirname, \".velite\");\nexport const staticDirPath = path.join(__dirname, \"src/registry/json\");\nexport const contentDirPath = path.join(__dirname, \"content\");\nexport const ogDirPath = path.join(__dirname, \"src/routes/og\");\n\nexport default defineConfig({\n\tplugins: [\n\t\tvisualizer({\n\t\t\temitFile: true,\n\t\t\tfilename: \"stats.html\",\n\t\t}),\n\t\ttailwindcss(),\n\t\tenhancedImages(),\n\t\tsveltekit(),\n\t],\n\tserver: {\n\t\tfs: {\n\t\t\tallow: [veliteDirPath, staticDirPath, contentDirPath, ogDirPath],\n\t\t},\n\t},\n\tbuild: {\n\t\t// minify: false,\n\t\trolldownOptions: {\n\t\t\toutput: {\n\t\t\t\tcodeSplitting: {\n\t\t\t\t\tgroups: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttest: /node_modules\\/@lucide\\/svelte/,\n\t\t\t\t\t\t\tname: \"lucide-icons\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttest: /node_modules\\/@tabler\\/icons-svelte/,\n\t\t\t\t\t\t\tname: \"tabler-icons\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttest: /node_modules\\/@hugeicons\\/svelte/,\n\t\t\t\t\t\t\tname: \"hugeicons\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttest: /node_modules\\/@hugeicons\\/core-free-icons/,\n\t\t\t\t\t\t\tname: \"hugeicons-core-free-icons\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttest: /node_modules\\/phosphor-svelte/,\n\t\t\t\t\t\t\tname: \"phosphor-icons\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttest: /node_modules\\/remixicon-svelte/,\n\t\t\t\t\t\t\tname: \"remixicon-icons\",\n\t\t\t\t\t\t},\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t},\n\tssr: {\n\t\tnoExternal: Object.keys(packageJson.devDependencies),\n\t},\n});\n\nasync function buildRegistry() {\n\tawait build();\n\tfs.cpSync(path.resolve(\"static\", \"registry\"), path.resolve(\"src\", \"__registry__\", \"json\"), {\n\t\trecursive: true,\n\t});\n}\n"
  },
  {
    "path": "docs/wrangler.jsonc",
    "content": "/**\n * For more details on how to configure Wrangler, refer to:\n * https://developers.cloudflare.com/workers/wrangler/configuration/\n */\n{\n\t\"$schema\": \"../node_modules/wrangler/config-schema.json\",\n\t\"name\": \"shadcn-svelte\",\n\t\"main\": \".svelte-kit/cloudflare/_worker.js\",\n\t\"compatibility_date\": \"2025-05-13\",\n\t\"compatibility_flags\": [\"nodejs_compat\"],\n\t\"assets\": {\n\t\t\"binding\": \"ASSETS\",\n\t\t\"directory\": \".svelte-kit/cloudflare\",\n\t},\n\t\"observability\": {\n\t\t\"enabled\": true,\n\t},\n\t/**\n\t * Smart Placement\n\t * Docs: https://developers.cloudflare.com/workers/configuration/smart-placement/#smart-placement\n\t */\n\t// \"placement\": { \"mode\": \"smart\" },\n\n\t/**\n\t * Bindings\n\t * Bindings allow your Worker to interact with resources on the Cloudflare Developer Platform, including\n\t * databases, object storage, AI inference, real-time communication and more.\n\t * https://developers.cloudflare.com/workers/runtime-apis/bindings/\n\t */\n\n\t/**\n\t * Environment Variables\n\t * https://developers.cloudflare.com/workers/wrangler/configuration/#environment-variables\n\t */\n\t// \"vars\": { \"MY_VARIABLE\": \"production_value\" },\n\t/**\n\t * Note: Use secrets to store sensitive data.\n\t * https://developers.cloudflare.com/workers/configuration/secrets/\n\t */\n\n\t/**\n\t * Static Assets\n\t * https://developers.cloudflare.com/workers/static-assets/binding/\n\t */\n\t// \"assets\": { \"directory\": \"./public/\", \"binding\": \"ASSETS\" },\n\n\t/**\n\t * Service Bindings (communicate between multiple Workers)\n\t * https://developers.cloudflare.com/workers/wrangler/configuration/#service-bindings\n\t */\n\t// \"services\": [{ \"binding\": \"MY_SERVICE\", \"service\": \"my-service\" }]\n}\n"
  },
  {
    "path": "eslint.config.js",
    "content": "import prettier from \"eslint-config-prettier\";\nimport path from \"node:path\";\nimport { includeIgnoreFile } from \"@eslint/compat\";\nimport js from \"@eslint/js\";\nimport svelte from \"eslint-plugin-svelte\";\nimport { defineConfig } from \"eslint/config\";\nimport globals from \"globals\";\nimport ts from \"typescript-eslint\";\n\nconst gitignorePath = path.resolve(import.meta.dirname, \".gitignore\");\n\nexport default defineConfig(\n\tincludeIgnoreFile(gitignorePath),\n\tjs.configs.recommended,\n\t...ts.configs.recommended,\n\t...svelte.configs[\"flat/recommended\"],\n\tprettier,\n\t...svelte.configs[\"flat/prettier\"],\n\t{\n\t\tlanguageOptions: {\n\t\t\tglobals: {\n\t\t\t\t...globals.browser,\n\t\t\t\t...globals.node,\n\t\t\t},\n\t\t},\n\t\trules: {\n\t\t\t// typescript-eslint strongly recommend that you do not use the no-undef lint rule on TypeScript projects.\n\t\t\t// see: https://typescript-eslint.io/troubleshooting/faqs/eslint/#i-get-errors-from-the-no-undef-rule-about-global-variables-not-being-defined-even-though-there-are-no-typescript-errors\n\t\t\t\"no-undef\": \"off\",\n\t\t\t\"@typescript-eslint/no-unused-vars\": [\n\t\t\t\t\"error\",\n\t\t\t\t{\n\t\t\t\t\targsIgnorePattern: \"^_\",\n\t\t\t\t\tvarsIgnorePattern: \"^_\",\n\t\t\t\t},\n\t\t\t],\n\t\t\t\"@typescript-eslint/no-unused-expressions\": \"off\",\n\t\t},\n\t},\n\t{\n\t\tfiles: [\"**/*.svelte\", \"**/*.svelte.ts\", \"**/*.svelte.js\"],\n\t\tlanguageOptions: {\n\t\t\tparserOptions: {\n\t\t\t\t// Only uncomment this if you want it to take 3 minutes https://github.com/sveltejs/eslint-plugin-svelte/issues/1084\n\t\t\t\t// projectService: true,\n\t\t\t\textraFileExtensions: [\".svelte\"],\n\t\t\t\tparser: ts.parser,\n\t\t\t},\n\t\t},\n\t\trules: {\n\t\t\t\"svelte/no-useless-mustaches\": \"warn\",\n\t\t\t\"svelte/no-navigation-without-resolve\": \"off\",\n\t\t},\n\t},\n\t{\n\t\tignores: [\n\t\t\t\"build/\",\n\t\t\t\".svelte-kit/\",\n\t\t\t\"dist/\",\n\t\t\t\".svelte-kit/**/*\",\n\t\t\t\"docs/.svelte-kit/**/*\",\n\t\t\t\".svelte-kit\",\n\t\t\t\"playgrounds/**/*\",\n\t\t\t\"packages/cli/dist/**/*\",\n\t\t\t\"registry-template/**/*\",\n\t\t],\n\t}\n);\n"
  },
  {
    "path": "package.json",
    "content": "{\n\t\"name\": \"@shadcn-svelte/monorepo\",\n\t\"version\": \"0.0.1\",\n\t\"description\": \"monorepo for shadcn-svelte\",\n\t\"author\": {\n\t\t\"name\": \"huntabyte\",\n\t\t\"url\": \"https://twitter.com/huntabyte\"\n\t},\n\t\"private\": true,\n\t\"scripts\": {\n\t\t\"build\": \"pnpm build:docs\",\n\t\t\"build:cli\": \"pnpm -r -F \\\"./packages/**\\\" build\",\n\t\t\"build:docs\": \"pnpm -F docs build\",\n\t\t\"dev\": \"concurrently -n packages,apps --kill-others=false -c \\\"blue,green\\\" \\\"pnpm -r -parallel -F './packages/**' dev\\\" \\\"wait-on packages/cli/dist/index.mjs && pnpm -r -parallel -F docs dev\\\"\",\n\t\t\"dev:cli\": \"pnpm -F  \\\"./packages/**\\\" --parallel --reporter append-only --color dev\",\n\t\t\"preview\": \"pnpm -F docs preview\",\n\t\t\"test\": \"pnpm -F shadcn-svelte test\",\n\t\t\"build:registry-template\": \"pnpm build:cli && pnpm -F registry-template build:registry\",\n\t\t\"check\": \"pnpm -F docs check && pnpm -F \\\"./packages/**\\\" check\",\n\t\t\"lint\": \"prettier --check . && eslint . --no-config-lookup --config eslint.config.js\",\n\t\t\"format\": \"prettier --write .\",\n\t\t\"preinstall\": \"npx only-allow pnpm\",\n\t\t\"postinstall\": \"pnpm build:cli && pnpm -r sync\",\n\t\t\"ci:publish\": \"changeset publish\",\n\t\t\"ci:build\": \"pnpm build:cli\",\n\t\t\"ci:release\": \"pnpm ci:build && pnpm ci:publish\"\n\t},\n\t\"engines\": {\n\t\t\"pnpm\": \">=9\",\n\t\t\"node\": \">=20\"\n\t},\n\t\"packageManager\": \"pnpm@10.32.1\",\n\t\"repository\": {\n\t\t\"type\": \"git\",\n\t\t\"url\": \"https://github.com/huntabyte/shadcn-svelte.git\"\n\t},\n\t\"license\": \"MIT\",\n\t\"type\": \"module\",\n\t\"devDependencies\": {\n\t\t\"@changesets/cli\": \"^2.30.0\",\n\t\t\"@eslint/compat\": \"^2.0.3\",\n\t\t\"@eslint/js\": \"^10.0.1\",\n\t\t\"@svitejs/changesets-changelog-github-compact\": \"^1.2.0\",\n\t\t\"@types/node\": \"^25.5.0\",\n\t\t\"concurrently\": \"^9.2.1\",\n\t\t\"eslint\": \"^10.0.3\",\n\t\t\"eslint-config-prettier\": \"^10.1.8\",\n\t\t\"eslint-plugin-svelte\": \"^3.15.2\",\n\t\t\"globals\": \"^17.4.0\",\n\t\t\"minimatch\": \"^10.2.4\",\n\t\t\"prettier\": \"~3.8.1\",\n\t\t\"prettier-plugin-svelte\": \"^3.5.1\",\n\t\t\"prettier-plugin-tailwindcss\": \"^0.7.2\",\n\t\t\"pretty-quick\": \"^4.2.2\",\n\t\t\"svelte\": \"^5.54.0\",\n\t\t\"typescript\": \"5.9.3\",\n\t\t\"typescript-eslint\": \"^8.57.1\",\n\t\t\"wait-on\": \"^9.0.4\",\n\t\t\"wrangler\": \"^4.75.0\"\n\t},\n\t\"pnpm\": {\n\t\t\"onlyBuiltDependencies\": [\n\t\t\t\"@tailwindcss/oxide\",\n\t\t\t\"esbuild\",\n\t\t\t\"sharp\",\n\t\t\t\"workerd\"\n\t\t],\n\t\t\"overrides\": {\n\t\t\t\"brace-expansion@>=2.0.0 <=2.0.1\": \">=2.0.2\",\n\t\t\t\"cookie@<0.7.0\": \">=0.7.0\",\n\t\t\t\"glob@>=10.2.0 <10.5.0\": \">=10.5.0\",\n\t\t\t\"js-yaml@>=4.0.0 <4.1.1\": \">=4.1.1\",\n\t\t\t\"mdast-util-to-hast@>=13.0.0 <13.2.1\": \">=13.2.1\",\n\t\t\t\"tar@=7.5.1\": \">=7.5.11\"\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/cli/.gitignore",
    "content": ".DS_Store\nnode_modules\n/build\n/.svelte-kit\n/package\n.env\n.env.*\n!.env.example\n!test/**/*\nvite.config.js.timestamp-*\nvite.config.ts.timestamp-*\n.turbo\n\n# Logs\nlogs\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\nlerna-debug.log*\n.pnpm-debug.log*\n\n# Diagnostic reports (https://nodejs.org/api/report.html)\nreport.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json\n\n# Runtime data\npids\n*.pid\n*.seed\n*.pid.lock\n\n# Directory for instrumented libs generated by jscoverage/JSCover\nlib-cov\n\n# Coverage directory used by tools like istanbul\ncoverage\n*.lcov\n\n# nyc test coverage\n.nyc_output\n\n# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)\n.grunt\n\n# Bower dependency directory (https://bower.io/)\nbower_components\n\n# node-waf configuration\n.lock-wscript\n\n# Compiled binary addons (https://nodejs.org/api/addons.html)\nbuild/Release\n\n# Dependency directories\nnode_modules/\njspm_packages/\n\n# Snowpack dependency directory (https://snowpack.dev/)\nweb_modules/\n\n# TypeScript cache\n*.tsbuildinfo\n\n# Optional npm cache directory\n.npm\n\n# Optional eslint cache\n.eslintcache\n\n# Optional stylelint cache\n.stylelintcache\n\n# Microbundle cache\n.rpt2_cache/\n.rts2_cache_cjs/\n.rts2_cache_es/\n.rts2_cache_umd/\n\n# Optional REPL history\n.node_repl_history\n\n# Output of 'npm pack'\n*.tgz\n\n# Yarn Integrity file\n.yarn-integrity\n\n# dotenv environment variable files\n.env\n.env.development.local\n.env.test.local\n.env.production.local\n.env.local\n\n\n# Stores VSCode versions used for testing VSCode extensions\n.vscode-test\n\n# yarn v2\n.yarn/cache\n.yarn/unplugged\n.yarn/build-state.yml\n.yarn/install-state.gz\n.pnp.*\npackages/cli/dist\n\ndist"
  },
  {
    "path": "packages/cli/.prettierignore",
    "content": ".DS_Store\nnode_modules\n/build\n/.svelte-kit\n/package\n.env\n.env.*\n!.env.example\n\n# Ignore files for PNPM, NPM and YARN\npnpm-lock.yaml\npackage-lock.json\nyarn.lock\nCHANGELOG.md\n"
  },
  {
    "path": "packages/cli/CHANGELOG.md",
    "content": "# shadcn-svelte\n\n## 1.2.1\n\n### Patch Changes\n\n- fix: Ensure type stripping is only activated when in js mode ([#2574](https://github.com/huntabyte/shadcn-svelte/pull/2574))\n\n## 1.2.0\n\n### Minor Changes\n\n- feat: New project initialization options ([#2471](https://github.com/huntabyte/shadcn-svelte/pull/2471))\n\n## 1.1.1\n\n### Patch Changes\n\n- Improve error message when registry item not found to include the configured registry URL and suggest using the official registry ([#2466](https://github.com/huntabyte/shadcn-svelte/pull/2466))\n\n## 1.1.0\n\n### Minor Changes\n\n- feat: add `--skip-preflight` flag to bypass initialization preflight checks ([#2437](https://github.com/huntabyte/shadcn-svelte/pull/2437))\n\n- feat: add `--no-deps` flag to `update` command ([#2436](https://github.com/huntabyte/shadcn-svelte/pull/2436))\n\n### Patch Changes\n\n- fix: Fix an issue where dev dependencies were not shown in `--no-deps` prompt ([#2436](https://github.com/huntabyte/shadcn-svelte/pull/2436))\n\n## 1.0.12\n\n### Patch Changes\n\n- fix: ensure `layout.css` is detected during initialization ([#2412](https://github.com/huntabyte/shadcn-svelte/pull/2412))\n\n## 1.0.11\n\n### Patch Changes\n\n- fix: Ensure `filename` is provided when parsing ts code ([#2399](https://github.com/huntabyte/shadcn-svelte/pull/2399))\n\n## 1.0.10\n\n### Patch Changes\n\n- fix: Log `error.stack` and `error.cause` to disambiguate errors ([#2374](https://github.com/huntabyte/shadcn-svelte/pull/2374))\n\n## 1.0.9\n\n### Patch Changes\n\n- fix: improve error message when `svelte-kit` CLI cannot be found ([#2366](https://github.com/huntabyte/shadcn-svelte/pull/2366))\n\n## 1.0.8\n\n### Patch Changes\n\n- fix: prompt users before overwriting existing components when adding from external registry ([#2302](https://github.com/huntabyte/shadcn-svelte/pull/2302))\n\n## 1.0.7\n\n### Patch Changes\n\n- fix: Reorder `ALIASES` so that replacements run in a more sensical order ([#2262](https://github.com/huntabyte/shadcn-svelte/pull/2262))\n\n## 1.0.6\n\n### Patch Changes\n\n- fix: add `npm:` specifier when installing packages with Deno ([#2196](https://github.com/huntabyte/shadcn-svelte/pull/2196))\n\n## 1.0.5\n\n### Patch Changes\n\n- fix: bump `@svecosystem/strip-types` to strip `?` from optional params ([#2184](https://github.com/huntabyte/shadcn-svelte/pull/2184))\n\n## 1.0.4\n\n### Patch Changes\n\n- fix: ensure `meta` property from registry.json passes through to generated json ([#2164](https://github.com/huntabyte/shadcn-svelte/pull/2164))\n\n## 1.0.3\n\n### Patch Changes\n\n- chore: use `picocolors` for terminal color rendering ([#2107](https://github.com/huntabyte/shadcn-svelte/pull/2107))\n\n- fix: Update `components.json` registry before running `init` ([#2129](https://github.com/huntabyte/shadcn-svelte/pull/2129))\n\n## 1.0.2\n\n### Patch Changes\n\n- chore: update minimum supported Node version to v20 ([#2097](https://github.com/huntabyte/shadcn-svelte/pull/2097))\n\n- fix: don't throw on missing directories ([#2088](https://github.com/huntabyte/shadcn-svelte/pull/2088))\n\n## 1.0.1\n\n### Patch Changes\n\n- 6c4acfd: fix: `update` failing in Node 24+\n\n## 1.0.0\n\n### Major Changes\n\n- b479077: Svelte 5\n\n### Patch Changes\n\n- 61d98fd: chore: Add warning for incompatible dependency\n- 633a6de: fix: ensure path aliases resolve to the correct path\n- 8826014: feat: Improved error message when fetching the registry fails\n- d764bdf: fix(cli)(next): Add missing ui alias option\n- 44b2445: feat: allow import maps to be used as path aliases\n- 962d8be: fix: Improve error message when failing to fetch base colors.\n- e29f8f5: fix: Ensure `utils.(js|ts)` is not fetched from the registry on `update` command\n- 670a3e4: fix: respect `utils` path-alias\n- ad4cd6b: breaking: svelte 5 + tailwindcss v4\n- 9488a61: feat: add customizable `typescript.config` path option to `components.json`\n- ea9f77c: fix: remove dangling comma in 'components to install' list\n- 7669720: fix: workaround caching issue preventing the correct registry from being fetched\n- f932494: fix: ensure `ui` and `hooks` paths are normalized\n- dc196c3: chore: point to `tw3.shadcn-svelte.com` subdomain on `init`\n- 11d0ff3: fix: Ensure `svelte-kit sync` executes locally\n- 425edb7: fix: disable ES transformations when stripping types\n- 9c94564: feat: add support for registry-item type `registry:style`\n- 6c54fae: fix: always strip trailing slashes from path aliases\n- e29f8f5: fix: `update` command now properly updates components\n- 5bddbc6: fix: resolve deps from node_modules when evaluating their versions\n- 34d0a9f: chore: display the output of a package manager's `install` process during dependency installation\n- fb7c683: fix(next): add newline to end of `components.json`\n\n## 1.0.0-next.19\n\n### Patch Changes\n\n- 9c94564: feat: add support for registry-item type `registry:style`\n\n## 1.0.0-next.18\n\n### Patch Changes\n\n- 670a3e4: fix: respect `utils` path-alias\n\n## 1.0.0-next.17\n\n### Patch Changes\n\n- 44b2445: feat: allow import maps to be used as path aliases\n- 425edb7: fix: disable ES transformations when stripping types\n\n## 1.0.0-next.16\n\n### Patch Changes\n\n- 9488a61: feat: add customizable `typescript.config` path option to `components.json`\n\n## 1.0.0-next.15\n\n### Patch Changes\n\n- 6c54fae: fix: always strip trailing slashes from path aliases\n\n## 1.0.0-next.14\n\n### Patch Changes\n\n- 633a6de: fix: ensure path aliases resolve to the correct path\n\n## 1.0.0-next.13\n\n### Patch Changes\n\n- ea9f77c: fix: remove dangling comma in 'components to install' list\n\n## 1.0.0-next.12\n\n### Patch Changes\n\n- 5bddbc6: fix: resolve deps from node_modules when evaluating their versions\n- 34d0a9f: chore: display the output of a package manager's `install` process during dependency installation\n\n## 1.0.0-next.11\n\n### Patch Changes\n\n- ad4cd6b: breaking: svelte 5 + tailwindcss v4\n\n## 1.0.0-next.10\n\n### Patch Changes\n\n- dc196c3: chore: point to `tw3.shadcn-svelte.com` subdomain on `init`\n\n## 1.0.0-next.9\n\n### Patch Changes\n\n- 962d8be: fix: Improve error message when failing to fetch base colors.\n\n## 1.0.0-next.8\n\n### Patch Changes\n\n- d764bdf: fix(cli)(next): Add missing ui alias option\n\n## 1.0.0-next.7\n\n### Patch Changes\n\n- 8826014: feat: Improved error message when fetching the registry fails\n\n## 1.0.0-next.6\n\n### Patch Changes\n\n- 7669720: fix: workaround caching issue preventing the correct registry from being fetched\n\n## 1.0.0-next.5\n\n### Patch Changes\n\n- 61d98fd: chore: Add warning for incompatible dependency\n\n## 1.0.0-next.4\n\n### Patch Changes\n\n- f932494: fix: ensure `ui` and `hooks` paths are normalized\n\n## 1.0.0-next.3\n\n### Patch Changes\n\n- 11d0ff3: fix: Ensure `svelte-kit sync` executes locally\n\n## 1.0.0-next.2\n\n### Patch Changes\n\n- fb7c683: fix(next): add newline to end of `components.json`\n\n## 1.0.0-next.1\n\n### Patch Changes\n\n- e29f8f5: fix: Ensure `utils.(js|ts)` is not fetched from the registry on `update` command\n- e29f8f5: fix: `update` command now properly updates components\n\n## 1.0.0-next.0\n\n### Major Changes\n\n- b479077: Svelte 5\n\n## 0.14.3\n\n### Patch Changes\n\n- b36c8f8: chore: update default registry url\n\n## 0.14.2\n\n### Patch Changes\n\n- 9f96ae1: chore: remove `exports` and `main` fields\n\n## 0.14.1\n\n### Patch Changes\n\n- 283c5dc: chore: update `package-manager-detector`\n\n## 0.14.0\n\n### Minor Changes\n\n- bc787f3: Install all dependencies as dev dependencies\n\n## 0.13.0\n\n### Minor Changes\n\n- 06a19d8: feat: Added selection prompt for package managers if one cannot be detected\n\n## 0.12.2\n\n### Patch Changes\n\n- e67c1fd: chore: use `package-manager-detector`\n\n## 0.12.1\n\n### Patch Changes\n\n- d43d140: fix: Use correct cwd when syncing SvelteKit projects\n\n## 0.12.0\n\n### Minor Changes\n\n- b6b4601: feat: Added `--no-deps` flag to `init` command\n\n### Patch Changes\n\n- b6b4601: breaking: Changed `--nodep` flag to `--no-deps` for `add` command\n\n## 0.11.1\n\n### Patch Changes\n\n- c2d1ed6: fix: Fixes bug with incorrect flag assignments\n\n## 0.11.0\n\n### Minor Changes\n\n- 6c9b9ee: feat: Added CLI flags for each option for `init`\n- 6c9b9ee: feat: Removed TypeScript prompt in favor of auto detection\n\n## 0.10.7\n\n### Patch Changes\n\n- f201baa: chore: Replaced `node-fetch` for `node-fetch-native`\n\n## 0.10.6\n\n### Patch Changes\n\n- becb41d: chore: Added more http proxy options\n\n## 0.10.5\n\n### Patch Changes\n\n- 2d80e21: chore: Added an overwrite notice for the global stylesheet and tailwind config\n\n## 0.10.4\n\n### Patch Changes\n\n- ba14ef5: fix: Allow a registry dependency to optionally be overwritten\n\n## 0.10.3\n\n### Patch Changes\n\n- 6a30f8a: fix: Changed unsupported runtime error into a warning and fixed a Bun specific issue\n\n## 0.10.2\n\n### Patch Changes\n\n- 9c20e7a: fix: Added an error for unsupported runtimes\n\n## 0.10.1\n\n### Patch Changes\n\n- 7f487a5: fix: Updating `utils` in JS mode now updates with the proper syntax\n\n## 0.10.0\n\n### Minor Changes\n\n- 231f674: feat: Added TypeScript support for the tailwind config\n\n### Patch Changes\n\n- ebd04c4: chore: Added import path validators for the `init` command\n- c5afe89: chore: Improved printed error messages\n- c5afe89: chore: Certain config files can now be auto-detected and suggested during `init`\n\n## 0.9.4\n\n### Patch Changes\n\n- 226f09e: chore: Removed `typescript` as a peer dependency\n- 226f09e: chore: Provide a descriptive error when import aliases do not reference a valid `[tsconfig|jsconfig].json` path alias\n\n## 0.9.3\n\n### Patch Changes\n\n- 222f462: chore: Replaced `tsconfig-paths` for a custom path alias resolver\n\n## 0.9.2\n\n### Patch Changes\n\n- 7f39dbf: fix: Icons are now installed in the `add` command\n\n## 0.9.1\n\n### Patch Changes\n\n- 8c43ad3: chore: Optimized dependencies and minified package\n- 8c43ad3: chore: Replaced `zod` for `valibot`\n\n## 0.9.0\n\n### Minor Changes\n\n- 66931b3: feat: Added support for the `--proxy` flag to the `update` command\n- 66931b3: feat: Graphical overhaul, replacing `prompts` for `@clack/prompts`\n- 66931b3: feat: Added a prompt to overwrite existing components to the `add` command\n\n### Patch Changes\n\n- 66931b3: perf: Optimized dependency installation\n\n## 0.8.3\n\n### Patch Changes\n\n- 0b1836e: fix: Fixed component update warning and malformed filename for `utils`\n\n## 0.8.2\n\n### Patch Changes\n\n- 1f6ea79: chore: Simplified use of internal aliases\n\n## 0.8.1\n\n### Patch Changes\n\n- fd888487: chore: Added unused file warnings for the `update` command\n\n## 0.8.0\n\n### Minor Changes\n\n- d7ae8b54: feat: Replaced `radix-icons-svelte` with [svelte-radix](https://github.com/shinokada/svelte-radix) for New York style\n\n## 0.7.0\n\n### Minor Changes\n\n- bfdc861: feat: Add support for JS\n\n## 0.6.1\n\n### Patch Changes\n\n- 59dca2c: fix: Support use of `jsconfig.json`\n\n## 0.6.0\n\n### Minor Changes\n\n- 024cd2a: feat: Added support for non SvelteKit frameworks\n\n## 0.5.0\n\n### Minor Changes\n\n- dcceae8: feat: Added a `utils` option for `update`\n\n## 0.4.2\n\n### Patch Changes\n\n- 004f7f0: fix: Removed redundant overwrite warning in `add`\n\n## 0.4.1\n\n### Patch Changes\n\n- 3068583: fix: `tailwind.config.ts` is no longer mistakenly deleted on `init`\n\n## 0.4.0\n\n### Minor Changes\n\n- 3151474: feat: Added an `--all` flag to the `update` command\n\n### Patch Changes\n\n- d9cc40c: fix: If no lockfile is found, install dependencies with the current PM of the proccess\n\n## 0.3.8\n\n### Patch Changes\n\n- 744f149: Bump zod from 3.21.4 to 3.22.3 in /packages/cli\n\n## 0.3.7\n\n### Patch Changes\n\n- 9660a09: rename extension name from .postcss to .pcss\n\n## 0.3.6\n\n### Patch Changes\n\n- 614681f: feat: Ability to use a proxy when adding components\n- efb9694: Fix: destructive a11y contrast issues\n\n## 0.3.5\n\n### Patch Changes\n\n- 9456656: Feat: update add command with -a flag to install all components in the registry\n\n## 0.3.4\n\n### Patch Changes\n\n- 9c21525: safelist `\"dark\"` in tailwind config for out-of-the-box dark mode support\n\n## 0.3.3\n\n### Patch Changes\n\n- e218143: Update file overwrite warning to include the css file\n\n## 0.3.2\n\n### Patch Changes\n\n- 47b7008: - Strip unicode characters from CLI input\n\n## 0.3.1\n\n### Patch Changes\n\n- b791a75: - Remove `tailwindcss-animate` from dependencies\n\n## 0.3.0\n\n### Minor Changes\n\n- 8b72f01: - Add `flyAndScale` transitions util\n\n## 0.2.0\n\n### Minor Changes\n\n- c4e2a41: Refactored to use the new registry system\n\n## 0.1.2\n\n### Patch Changes\n\n- 9c10deb: fix: typo in svelte4 warnings\n\n## 0.1.1\n\n### Patch Changes\n\n- 78962e9: add warnings for svelte v4 support\n\n## 0.1.0\n\n### Minor Changes\n\n- 58a62ef: Added `update` command for updating existing components\n\n### Patch Changes\n\n- 58a62ef: Fixed select-all option during multiselect prompts\n\n## 0.0.13\n\n### Patch Changes\n\n- fa77377: Replaced `tailwind.config.cjs` for an ESM template\n\n## 0.0.12\n\n### Patch Changes\n\n- 5bc78d5: fix: properly order opts and args in `add` CLI command\n\n## 0.0.11\n\n### Patch Changes\n\n- ae47aa6: add --nodep flag to disable adding and installing dependencies (advanced)\n\n## 0.0.10\n\n### Patch Changes\n\n- 1b41d9c: Add parser to CLI prettier config\n\n## 0.0.9\n\n### Patch Changes\n\n- 2c0f259: Fixed dynamic import path error for Windows\n\n## 0.0.8\n\n### Patch Changes\n\n- d704098: Modify destructive background color to be meet AA contrast\n\n## 0.0.7\n\n### Patch Changes\n\n- fa06a5d: Displays the correct version number\n- edb3089: Preserve the content of `svelte.config.js` when running the `init` command\n\n## 0.0.6\n\n### Patch Changes\n\n- 86c696f: Add shadcn config to svelte.config.js to remember the component location after initial add\n- bc8cd90: Automatically add aliases to `svelte.config.js`\n\n## 0.0.5\n\n### Patch Changes\n\n- a5ddff2: Update link to shadcn-svelte in prompt\n\n## 0.0.4\n\n### Patch Changes\n\n- d4e0883: Add `type ClassValue` to import in `lib/utils.ts`\n\n## 0.0.3\n\n### Patch Changes\n\n- 4c3ff02: Change dark destructive color to meet contrast accessibility guidelines\n\n## 0.0.2\n\n### Patch Changes\n\n- Initial release\n"
  },
  {
    "path": "packages/cli/LICENSE.md",
    "content": "MIT License\n\nCopyright (c) 2023 Hunter Johnston <https://github.com/huntabyte>\nCopyright (c) 2023 CokaKoala <https://github.com/adriangonz97>\nCopyright (c) 2023 shadcn\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "packages/cli/README.md",
    "content": "# shadcn-svelte\n\nA CLI for adding shadcn components to your project.\n\n## Usage\n\nUse the `init` command to initialize dependencies for a new project.\n\nThe `init` command installs dependencies, adds the `cn` util, configures, and sets up CSS variables for the project.\n\n```bash\nnpx shadcn-svelte init\n```\n\n## add\n\nUse the `add` command to add components to your project.\n\nThe `add` command adds a component to your project and installs all required dependencies.\n\n```bash\nnpx shadcn-svelte add [component]\n```\n\n### Example\n\n```bash\nnpx shadcn-svelte add alert-dialog\n```\n\nYou can also run the command without any arguments to view a list of all available components:\n\n```bash\nnpx shadcn-svelte add\n```\n\n## Documentation\n\nVisit https://shadcn-svelte.com to view the documentation.\n\n## License\n\nLicensed under the [MIT license](https://github.com/huntabyte/shadcn-svelte/blob/main/LICENSE.md).\n"
  },
  {
    "path": "packages/cli/__mocks__/fs/promises.cjs",
    "content": "// we can also use `import`, but then\n// every export should be explicitly defined\n// eslint-disable-next-line @typescript-eslint/no-require-imports\nconst { fs } = require(\"memfs\");\nmodule.exports = fs.promises;\n"
  },
  {
    "path": "packages/cli/__mocks__/fs.cjs",
    "content": "// we can also use `import`, but then\n// every export should be explicitly defined\n// eslint-disable-next-line @typescript-eslint/no-require-imports\nconst { fs } = require(\"memfs\");\nmodule.exports = fs;\n"
  },
  {
    "path": "packages/cli/package.json",
    "content": "{\n\t\"name\": \"shadcn-svelte\",\n\t\"version\": \"1.2.1\",\n\t\"description\": \"Add components to your apps.\",\n\t\"license\": \"MIT\",\n\t\"author\": {\n\t\t\"name\": \"huntabyte & CokaKoala\",\n\t\t\"url\": \"https://twitter.com/huntabyte\"\n\t},\n\t\"repository\": {\n\t\t\"type\": \"git\",\n\t\t\"url\": \"https://github.com/huntabyte/shadcn-svelte.git\",\n\t\t\"directory\": \"packages/cli\"\n\t},\n\t\"type\": \"module\",\n\t\"bin\": \"./dist/index.mjs\",\n\t\"exports\": {\n\t\t\"./icons\": {\n\t\t\t\"types\": \"./dist/icons/index.d.mts\",\n\t\t\t\"default\": \"./dist/icons/index.mjs\"\n\t\t},\n\t\t\"./preset\": {\n\t\t\t\"types\": \"./dist/preset/index.d.mts\",\n\t\t\t\"default\": \"./dist/preset/index.mjs\"\n\t\t},\n\t\t\"./schema\": {\n\t\t\t\"types\": \"./dist/schema/index.d.mts\",\n\t\t\t\"default\": \"./dist/schema/index.mjs\"\n\t\t},\n\t\t\"./transformers\": {\n\t\t\t\"types\": \"./dist/utils/transformers/index.d.mts\",\n\t\t\t\"default\": \"./dist/utils/transformers/index.mjs\"\n\t\t},\n\t\t\"./transformers/icons\": {\n\t\t\t\"types\": \"./dist/utils/transformers/transform-icons.d.mts\",\n\t\t\t\"default\": \"./dist/utils/transformers/transform-icons.mjs\"\n\t\t},\n\t\t\"./transformers/imports\": {\n\t\t\t\"types\": \"./dist/utils/transformers/transform-imports.d.mts\",\n\t\t\t\"default\": \"./dist/utils/transformers/transform-imports.mjs\"\n\t\t},\n\t\t\"./transformers/menu\": {\n\t\t\t\"types\": \"./dist/utils/transformers/transform-menu.d.mts\",\n\t\t\t\"default\": \"./dist/utils/transformers/transform-menu.mjs\"\n\t\t},\n\t\t\"./transformers/strip-types\": {\n\t\t\t\"types\": \"./dist/utils/transformers/transform-strip-types.d.mts\",\n\t\t\t\"default\": \"./dist/utils/transformers/transform-strip-types.mjs\"\n\t\t}\n\t},\n\t\"files\": [\n\t\t\"dist\"\n\t],\n\t\"keywords\": [\n\t\t\"components\",\n\t\t\"ui\",\n\t\t\"tailwind\",\n\t\t\"radix-ui\",\n\t\t\"shadcn\",\n\t\t\"svelte\",\n\t\t\"sveltekit\",\n\t\t\"radix-svelte\"\n\t],\n\t\"scripts\": {\n\t\t\"dev\": \"tsdown --watch --sourcemap\",\n\t\t\"build\": \"tsdown --minify\",\n\t\t\"check\": \"tsc --noEmit\",\n\t\t\"start\": \"node dist/index.mjs\",\n\t\t\"start:dev\": \"cross-env REGISTRY_URL=http://localhost:5173/registry node dist/index.mjs\",\n\t\t\"start:proxy\": \"pnpm dlx straightforward@latest --port 9000\",\n\t\t\"test\": \"pnpm -w build:registry-template && vitest\"\n\t},\n\t\"peerDependencies\": {\n\t\t\"svelte\": \"^5.0.0\"\n\t},\n\t\"dependencies\": {\n\t\t\"commander\": \"^14.0.0\",\n\t\t\"node-fetch-native\": \"^1.6.4\",\n\t\t\"postcss\": \"^8.5.5\",\n\t\t\"tailwind-merge\": \"^3.0.0\"\n\t},\n\t\"devDependencies\": {\n\t\t\"@clack/prompts\": \"^1.1.0\",\n\t\t\"@svecosystem/strip-types\": \"^0.0.4\",\n\t\t\"@sveltejs/acorn-typescript\": \"^1.0.5\",\n\t\t\"@types/node\": \"^20.19.0\",\n\t\t\"@types/semver\": \"^7.5.8\",\n\t\t\"acorn\": \"^8.15.0\",\n\t\t\"cross-env\": \"^7.0.3\",\n\t\t\"deepmerge\": \"^4.3.1\",\n\t\t\"empathic\": \"^1.1.0\",\n\t\t\"estree-walker\": \"^3.0.3\",\n\t\t\"get-tsconfig\": \"^4.7.3\",\n\t\t\"ignore\": \"^7.0.4\",\n\t\t\"magic-string\": \"^0.30.21\",\n\t\t\"memfs\": \"^4.17.2\",\n\t\t\"open\": \"^11.0.0\",\n\t\t\"package-manager-detector\": \"^1.2.0\",\n\t\t\"picocolors\": \"^1.1.1\",\n\t\t\"resolve.exports\": \"^2.0.3\",\n\t\t\"semver\": \"^7.7.1\",\n\t\t\"sucrase\": \"^3.35.0\",\n\t\t\"tinyexec\": \"^1.0.1\",\n\t\t\"tsdown\": \"catalog:\",\n\t\t\"type-fest\": \"^4.41.0\",\n\t\t\"typescript\": \"catalog:\",\n\t\t\"vitest\": \"^3.2.3\",\n\t\t\"zod\": \"catalog:\"\n\t}\n}\n"
  },
  {
    "path": "packages/cli/src/commands/add/index.ts",
    "content": "import path from \"node:path\";\nimport process from \"node:process\";\nimport { existsSync } from \"node:fs\";\nimport color from \"picocolors\";\nimport { z } from \"zod\";\nimport { Command } from \"commander\";\nimport { ConfigError, error } from \"../../utils/errors.js\";\nimport * as cliConfig from \"../../utils/config/index.js\";\nimport { getEnvProxy } from \"../../utils/get-env-proxy.js\";\nimport { cancel, intro, prettifyList, handleError } from \"../../utils/prompt-helpers.js\";\nimport * as p from \"@clack/prompts\";\nimport * as registry from \"../../utils/registry/index.js\";\nimport { addRegistryItems } from \"../../utils/add-registry-items.js\";\nimport { highlight } from \"../../utils/colors.js\";\nimport { installDependencies } from \"../../utils/install-deps.js\";\nimport { checkPreconditions } from \"../../utils/preconditions.js\";\n\nconst addOptionsSchema = z.object({\n\tcomponents: z.string().array().optional(),\n\tyes: z.boolean(),\n\tall: z.boolean(),\n\toverwrite: z.boolean(),\n\tcwd: z.string(),\n\tdeps: z.boolean(),\n\tproxy: z.string().optional(),\n\tskipPreflight: z.boolean(),\n});\n\ntype AddOptions = z.infer<typeof addOptionsSchema>;\n\nexport const add = new Command()\n\t.command(\"add\")\n\t.description(\"add components to your project\")\n\t.argument(\"[components...]\", \"the components to add or a url to the component\")\n\t.option(\"-c, --cwd <path>\", \"the working directory\", process.cwd())\n\t.option(\"--no-deps\", \"skips adding & installing package dependencies\")\n\t.option(\"--skip-preflight\", \"ignore preflight checks and continue\", false)\n\t.option(\"-a, --all\", \"install all components to your project\", false)\n\t.option(\"-y, --yes\", \"skip confirmation prompt\", false)\n\t.option(\"-o, --overwrite\", \"overwrite existing files\", false)\n\t.option(\"--proxy <proxy>\", \"fetch components from registry using a proxy\", getEnvProxy())\n\t.action(async (components, opts) => {\n\t\ttry {\n\t\t\tintro();\n\t\t\tconst options = addOptionsSchema.parse({ components, ...opts });\n\n\t\t\tconst cwd = path.resolve(options.cwd);\n\n\t\t\tif (!existsSync(cwd)) {\n\t\t\t\tthrow error(`The path ${color.cyan(cwd)} does not exist. Please try again.`);\n\t\t\t}\n\n\t\t\tconst config = await cliConfig.getConfig(cwd);\n\t\t\tif (!config) {\n\t\t\t\tthrow new ConfigError(\n\t\t\t\t\t`Configuration file is missing. Please run ${color.green(\"init\")} to create a ${highlight(\"components.json\")} file.`\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst updatedConfig = checkPreconditions({\n\t\t\t\tconfig,\n\t\t\t\tcwd,\n\t\t\t\tskipPreflight: options.skipPreflight,\n\t\t\t});\n\n\t\t\tawait runAdd(cwd, updatedConfig, options);\n\n\t\t\tp.outro(`${color.green(\"Success!\")} Components added.`);\n\t\t} catch (e) {\n\t\t\thandleError(e);\n\t\t}\n\t});\n\nasync function runAdd(cwd: string, config: cliConfig.ResolvedConfig, options: AddOptions) {\n\tif (options.proxy !== undefined) {\n\t\tprocess.env.HTTP_PROXY = options.proxy;\n\t\tp.log.info(`You are using the provided proxy: ${color.green(options.proxy)}`);\n\t}\n\n\tconst registryUrl = registry.getRegistryUrl(config);\n\tconst shadcnIndex = await registry.getRegistryIndex(registryUrl);\n\tconst uiOnly = shadcnIndex.filter((f) => f.type === \"registry:ui\");\n\n\tlet selectedComponents = new Set(\n\t\toptions.all ? uiOnly.map(({ name }) => name) : options.components\n\t);\n\n\t// if the user hasn't passed any components prompt them to select components\n\tif (selectedComponents.size === 0) {\n\t\tconst components = await p.multiselect({\n\t\t\tmessage: `Which ${highlight(\"components\")} would you like to add?`,\n\t\t\tmaxItems: 10,\n\t\t\toptions: uiOnly.map((item) => {\n\t\t\t\tlet deps = [...(item.registryDependencies ?? [])];\n\t\t\t\tif (options.deps) {\n\t\t\t\t\tdeps = deps.concat(item.dependencies ?? []).concat(item.devDependencies ?? []);\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\tlabel: item.name,\n\t\t\t\t\tvalue: item.name,\n\t\t\t\t\thint: deps.length ? `also adds: ${deps.join(\", \")}` : undefined,\n\t\t\t\t};\n\t\t\t}),\n\t\t});\n\n\t\tif (p.isCancel(components)) cancel();\n\t\tselectedComponents = new Set(components);\n\t} else {\n\t\tconst prettyList = prettifyList(Array.from(selectedComponents));\n\t\tp.log.step(`Components to install:\\n${color.gray(prettyList)}`);\n\t}\n\n\tif (options.yes === false) {\n\t\tconst proceed = await p.confirm({\n\t\t\tmessage: `Ready to install ${highlight(\"components\")}${options.deps ? ` and ${highlight(\"dependencies\")}?` : \"?\"}`,\n\t\t\tinitialValue: true,\n\t\t});\n\n\t\tif (p.isCancel(proceed) || proceed === false) cancel();\n\t}\n\n\tconst result = await addRegistryItems({\n\t\tconfig,\n\t\tdeps: options.deps,\n\t\toverwrite: options.overwrite,\n\t\tselectedItems: Array.from(selectedComponents),\n\t});\n\n\tif (options.deps) {\n\t\tawait installDependencies({\n\t\t\tcwd,\n\t\t\tprompt: options.deps,\n\t\t\tdependencies: Array.from(result.dependencies),\n\t\t\tdevDependencies: Array.from(result.devDependencies),\n\t\t});\n\t} else if (result.skippedDeps.size) {\n\t\tconst prettyList = prettifyList([...result.skippedDeps], 7);\n\t\tp.log.warn(\n\t\t\t`Components have been installed ${color.bold(color.red(\"without\"))} the following ${highlight(\"dependencies\")}:\\n${color.gray(prettyList)}`\n\t\t);\n\t}\n}\n"
  },
  {
    "path": "packages/cli/src/commands/index.ts",
    "content": "export { add } from \"./add/index.js\";\nexport { init } from \"./init/index.js\";\nexport { update } from \"./update/index.js\";\nexport { registry } from \"./registry/index.js\";\n"
  },
  {
    "path": "packages/cli/src/commands/init/index.ts",
    "content": "import color from \"picocolors\";\nimport { Command, Option } from \"commander\";\nimport { existsSync, promises as fs } from \"node:fs\";\nimport path from \"node:path\";\nimport process from \"node:process\";\nimport { z } from \"zod\";\nimport * as p from \"@clack/prompts\";\nimport type { TsConfigResult } from \"get-tsconfig\";\nimport { detectConfigs } from \"../../utils/auto-detect.js\";\nimport { error } from \"../../utils/errors.js\";\nimport * as cliConfig from \"../../utils/config/index.js\";\nimport { cancel, intro, prettifyList, handleError } from \"../../utils/prompt-helpers.js\";\nimport * as registry from \"../../utils/registry/index.js\";\nimport { preflightInit } from \"./preflight.js\";\nimport { addRegistryItems } from \"../../utils/add-registry-items.js\";\nimport { getEnvProxy } from \"../../utils/get-env-proxy.js\";\nimport { highlight } from \"../../utils/colors.js\";\nimport { installDependencies } from \"../../utils/install-deps.js\";\nimport { checkPreconditions } from \"../../utils/preconditions.js\";\nimport { type PresetConfig, decodePreset, encodePreset } from \"../../preset/index.js\";\nimport { promptForPreset } from \"../../preset/presets.js\";\nimport * as project from \"../../utils/project.js\";\n\nconst baseColors = registry.getBaseColors();\n\nconst initOptionsSchema = z.object({\n\tcwd: z.string(),\n\tbaseColor: z.string().optional(),\n\t// TODO: Add additional options for the preset\n\tpreset: z.string().optional(),\n\tcss: z.string().optional(),\n\tcomponentsAlias: z.string().optional(),\n\tutilsAlias: z.string().optional(),\n\tlibAlias: z.string().optional(),\n\thooksAlias: z.string().optional(),\n\tuiAlias: z.string().optional(),\n\tdeps: z.boolean(),\n\toverwrite: z.boolean(),\n\tproxy: z.string().optional(),\n\tskipPreflight: z.boolean(),\n});\n\ntype InitOptions = z.infer<typeof initOptionsSchema>;\n\nexport const init = new Command()\n\t.command(\"init\")\n\t.description(\"initialize your project and install dependencies\")\n\t.option(\"--preset <preset>\", \"the preset to use\")\n\t.option(\"-c, --cwd <path>\", \"the working directory\", process.cwd())\n\t.option(\"-o, --overwrite\", \"overwrite existing files\", false)\n\t.option(\"--no-deps\", \"disable adding & installing dependencies\")\n\t.option(\"--skip-preflight\", \"ignore preflight checks and continue\", false)\n\t.addOption(\n\t\tnew Option(\"--base-color <name>\", \"the base color for the components\").choices(\n\t\t\tbaseColors.map((color) => color.name)\n\t\t)\n\t)\n\t.addOption(new Option(\"--design-system-url\"))\n\t.option(\"--css <path>\", \"path to the global CSS file\")\n\t.option(\"--components-alias <path>\", \"import alias for components\")\n\t.option(\"--lib-alias <path>\", \"import alias for lib\")\n\t.option(\"--utils-alias <path>\", \"import alias for utils\")\n\t.option(\"--hooks-alias <path>\", \"import alias for hooks\")\n\t.option(\"--ui-alias <path>\", \"import alias for ui\")\n\t.option(\"--proxy <proxy>\", \"fetch items from registry using a proxy\", getEnvProxy())\n\t.action(async (opts) => {\n\t\tintro();\n\t\tconst options = initOptionsSchema.parse(opts);\n\t\tconst cwd = path.resolve(options.cwd);\n\n\t\ttry {\n\t\t\t// Ensure target directory exists.\n\t\t\tif (!existsSync(cwd)) {\n\t\t\t\tthrow error(`The path ${color.cyan(cwd)} does not exist. Please try again.`);\n\t\t\t}\n\n\t\t\tlet presetConfig: PresetConfig | null = null;\n\t\t\tif (options.preset !== undefined) {\n\t\t\t\tpresetConfig = decodePreset(options.preset);\n\t\t\t\tif (presetConfig === null) {\n\t\t\t\t\tp.log.warn(`${color.dim(`--preset ${options.preset}`)} is not a valid preset.`);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tpreflightInit(cwd, { skipPreflight: options.skipPreflight });\n\n\t\t\tlet existingConfig = cliConfig.loadConfig(cwd);\n\t\t\tif (existingConfig) {\n\t\t\t\texistingConfig = checkPreconditions({\n\t\t\t\t\tcwd,\n\t\t\t\t\tconfig: existingConfig,\n\t\t\t\t\tskipPreflight: options.skipPreflight,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tconst { resolvedConfig, decidedPresets, styleChanged } = await promptForConfig({\n\t\t\t\tcwd,\n\t\t\t\tpresetConfig,\n\t\t\t\texistingConfig,\n\t\t\t\toptions,\n\t\t\t});\n\n\t\t\tawait runInit({ cwd, config: resolvedConfig, decidedPresets, options, styleChanged });\n\n\t\t\tp.outro(`${color.green(\"Success!\")} Project initialization completed.`);\n\t\t} catch (e) {\n\t\t\thandleError(e);\n\t\t}\n\t});\n\nfunction validateOptions(cwd: string, options: InitOptions, tsconfig: TsConfigResult) {\n\tif (options.css) {\n\t\tif (!existsSync(path.resolve(cwd, options.css))) {\n\t\t\tthrow error(\n\t\t\t\t`The provided global CSS file path ${color.cyan(options.css)} does not exist. Please enter a valid path.`\n\t\t\t);\n\t\t}\n\t}\n\n\tfor (const [alias, path] of Object.entries(options)) {\n\t\tif (!alias.endsWith(\"Alias\")) continue;\n\t\tconst importPath = path as string;\n\t\tconst validationResult = cliConfig.validateImportAlias({ cwd, importPath, tsconfig });\n\t\tif (validationResult) {\n\t\t\tthrow error(validationResult);\n\t\t}\n\t}\n}\n\nasync function promptForConfig({\n\tcwd,\n\tpresetConfig,\n\texistingConfig,\n\toptions,\n}: {\n\tcwd: string;\n\tpresetConfig: PresetConfig | null;\n\texistingConfig: cliConfig.RawConfig | undefined;\n\toptions: InitOptions;\n}) {\n\tconst config: cliConfig.RawConfig = existingConfig ?? structuredClone(cliConfig.DEFAULT_CONFIG);\n\n\t// if it's a SvelteKit project, run sync so that the aliases are always up to date\n\tawait project.syncSvelteKit(cwd);\n\n\tconst { cssPath, tsconfigPath } = detectConfigs(cwd, { relative: true });\n\n\tlet tsconfig;\n\tif (existingConfig) {\n\t\ttsconfig = cliConfig.resolveTSConfig(cwd, existingConfig);\n\t} else {\n\t\tif (!tsconfigPath) {\n\t\t\tconst input = await p.text({\n\t\t\t\tmessage: `Where is your ${highlight(\"tsconfig/jsconfig\")} file?`,\n\t\t\t\t// initialValue: \"tsconfig.json\",\n\t\t\t\tplaceholder: \"tsconfig.json\",\n\t\t\t\tvalidate: (value) => {\n\t\t\t\t\tconst tsconfigPath = path.resolve(cwd, value ?? \"\");\n\t\t\t\t\tif (value && existsSync(tsconfigPath)) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\treturn `\"${color.bold(value)}\" does not exist. Please enter a valid path.`;\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tif (p.isCancel(input)) cancel();\n\n\t\t\tconfig.typescript = { config: input };\n\t\t} else {\n\t\t\tconfig.typescript = tsconfigPath.includes(\"tsconfig\");\n\t\t}\n\n\t\ttsconfig = cliConfig.resolveTSConfig(cwd, config);\n\t}\n\n\t// Validation for any paths provided by flags\n\tvalidateOptions(cwd, options, tsconfig);\n\n\t// Design system\n\tconst decidedPresets = presetConfig ?? (await promptForPreset(existingConfig));\n\n\t// Global CSS File\n\tlet globalCss = options.css;\n\tif (globalCss === undefined) {\n\t\tconst cssDefault = cliConfig.DEFAULT_CONFIG.tailwind.css;\n\t\tconst input = await p.text({\n\t\t\tmessage: `Where is your ${highlight(\"global CSS\")} file? ${color.gray(\"(this file will be overwritten)\")}`,\n\t\t\tinitialValue: existingConfig?.tailwind.css ?? cssPath ?? cssDefault,\n\t\t\tplaceholder: cssPath ?? cssDefault,\n\t\t\tvalidate: (value) => {\n\t\t\t\tif (value && existsSync(path.resolve(cwd, value))) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\treturn `\"${color.bold(value)}\" does not exist. Please enter a valid path.`;\n\t\t\t},\n\t\t});\n\n\t\tif (p.isCancel(input)) cancel();\n\n\t\tglobalCss = input;\n\t}\n\n\tconst { utilsAlias, libAlias, componentAlias, hooksAlias, uiAlias } =\n\t\tawait cliConfig.promptForAliases({\n\t\t\t...options,\n\t\t\ttsconfig,\n\t\t\tcwd,\n\t\t\texistingConfig,\n\t\t});\n\n\tconst rawConfig = cliConfig.parseRawConfig({\n\t\t...config,\n\t\ttailwind: {\n\t\t\tcss: globalCss,\n\t\t\tbaseColor: decidedPresets.baseColor,\n\t\t},\n\t\taliases: {\n\t\t\tutils: utilsAlias,\n\t\t\tlib: libAlias,\n\t\t\tcomponents: componentAlias,\n\t\t\thooks: hooksAlias,\n\t\t\tui: uiAlias,\n\t\t},\n\t\tstyle: decidedPresets.style,\n\t\ticonLibrary: decidedPresets.iconLibrary,\n\t\tmenuColor: decidedPresets.menuColor,\n\t\tmenuAccent: decidedPresets.menuAccent,\n\t});\n\n\tlet styleChanged;\n\tif (existingConfig) {\n\t\tstyleChanged =\n\t\t\texistingConfig.style !== decidedPresets.style ||\n\t\t\texistingConfig.menuColor !== decidedPresets.menuColor ||\n\t\t\texistingConfig.menuAccent !== decidedPresets.menuAccent;\n\t} else {\n\t\tstyleChanged = false;\n\t}\n\n\treturn {\n\t\tresolvedConfig: await cliConfig.resolveConfig(cwd, rawConfig),\n\t\tdecidedPresets,\n\t\tstyleChanged,\n\t};\n}\n\nexport async function runInit({\n\tcwd,\n\tconfig,\n\tdecidedPresets,\n\toptions,\n\tstyleChanged,\n}: {\n\tcwd: string;\n\tconfig: cliConfig.ResolvedConfig;\n\tdecidedPresets: PresetConfig;\n\toptions: InitOptions;\n\tstyleChanged: boolean;\n}) {\n\tif (options.proxy !== undefined) {\n\t\tprocess.env.HTTP_PROXY = options.proxy;\n\t\tp.log.info(`You are using the provided proxy: ${color.green(options.proxy)}`);\n\t}\n\n\tconst tasks: p.Task[] = [];\n\n\ttasks.push({\n\t\ttitle: \"Creating config file\",\n\t\tasync task() {\n\t\t\tcliConfig.writeConfig(cwd, config);\n\t\t\treturn `Config file ${highlight(\"components.json\")} created`;\n\t\t},\n\t});\n\n\ttasks.push({\n\t\ttitle: \"Validating alias paths\",\n\t\tasync task() {\n\t\t\t// Ensure all resolved paths directories exist.\n\t\t\tfor (const [key, resolvedPath] of Object.entries(config.resolvedPaths)) {\n\t\t\t\t// Determine if the path is a file or directory.\n\t\t\t\tlet dirname = path.extname(resolvedPath)\n\t\t\t\t\t? path.dirname(resolvedPath)\n\t\t\t\t\t: resolvedPath;\n\n\t\t\t\t// If the utils alias is set to something like \"@/lib/utils\",\n\t\t\t\t// assume this is a file and remove the \"utils\" file name.\n\t\t\t\t// TODO: In future releases we should add support for individual utils.\n\t\t\t\tif (key === \"utils\" && resolvedPath.endsWith(\"/utils\")) {\n\t\t\t\t\t// Remove /utils at the end.\n\t\t\t\t\tdirname = dirname.replace(/\\/utils$/, \"\");\n\t\t\t\t}\n\n\t\t\t\tif (!existsSync(dirname) && key !== \"utils\") {\n\t\t\t\t\tawait fs.mkdir(dirname, { recursive: true });\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn `Alias paths validated`;\n\t\t},\n\t});\n\n\tawait p.tasks(tasks);\n\n\t// we create a registry base item using the encoded preset at the /init endpoint in the docs\n\tconst registryUrl = registry.getRegistryUrl(config);\n\tconst encodedPreset = encodePreset(decidedPresets);\n\tconst presetUrl = new URL(`/init?preset=${encodedPreset}`, registryUrl).toString();\n\n\tlet selectedItems: string[] = [];\n\tlet overwrite = options.overwrite;\n\t// if the style has changed then we want to ask the user if they want to reinstall existing components to update their styles\n\tif (styleChanged) {\n\t\tconst registryIndex = await registry.getRegistryIndex(registryUrl);\n\t\tconst existingComponents = await project.getComponents({\n\t\t\tregistryIndex,\n\t\t\tconfig,\n\t\t});\n\n\t\tselectedItems = existingComponents\n\t\t\t.filter((component) => component.name !== \"utils\")\n\t\t\t.map((component) => component.name);\n\n\t\tif (selectedItems.length > 0 && !overwrite) {\n\t\t\tp.log.warn(\n\t\t\t\t`The registry style has changed to ${color.bold(color.yellow(decidedPresets.style))}.`\n\t\t\t);\n\n\t\t\tconst choice = await p.confirm({\n\t\t\t\tmessage: `Would you like to ${color.bold(color.red(\"overwrite\"))} your existing components?`,\n\t\t\t\tinitialValue: true,\n\t\t\t});\n\t\t\tif (p.isCancel(choice)) cancel();\n\t\t\toverwrite = choice;\n\t\t}\n\t}\n\n\tconst result = await addRegistryItems({\n\t\tselectedItems: [presetUrl, ...selectedItems],\n\t\tconfig,\n\t\tdeps: options.deps,\n\t\toverwrite,\n\t});\n\n\tif (options.deps) {\n\t\tawait installDependencies({\n\t\t\tcwd,\n\t\t\tprompt: options.deps,\n\t\t\tdependencies: Array.from(result.dependencies),\n\t\t\tdevDependencies: Array.from(result.devDependencies),\n\t\t});\n\t} else if (result.skippedDeps.size) {\n\t\tconst prettyList = prettifyList([...result.skippedDeps], 7);\n\t\tp.log.warn(\n\t\t\t`shadcn-svelte has been initialized ${color.bold(color.red(\"without\"))} the following ${highlight(\"dependencies\")}:\\n${color.gray(prettyList)}`\n\t\t);\n\t}\n}\n"
  },
  {
    "path": "packages/cli/src/commands/init/preflight.ts",
    "content": "import * as p from \"@clack/prompts\";\nimport color from \"picocolors\";\nimport * as semver from \"semver\";\nimport { CLIError, error } from \"../../utils/errors.js\";\nimport { highlight } from \"../../utils/colors.js\";\nimport { TW3_SITE_BASE_URL, SITE_BASE_URL } from \"../../constants.js\";\nimport { getDependencyPackageInfo } from \"../../utils/get-package-info.js\";\nimport * as project from \"../../utils/project.js\";\n\n/**\n * Runs preflight checks for the `init` command.\n * `init` in this CLI version should only run if the user has a project that\n * is using Tailwind CSS v4 and Svelte v5.\n *\n * If the user is using Tailwind CSS v3 and/or Svelte v4, we need to let them\n * know that they need to upgrade their project in order to use this CLI.\n *\n * @param cwd - The current working directory.\n */\nexport function preflightInit(cwd: string, options: { skipPreflight: boolean }) {\n\tconst sveltePkg = getDependencyPackageInfo(cwd, \"svelte\")?.pkg;\n\tconst tailwindPkg = getDependencyPackageInfo(cwd, \"tailwindcss\")?.pkg;\n\n\tconst pkg = project.getPackageInfo(cwd);\n\tconst deps = { ...pkg.dependencies, ...pkg.devDependencies };\n\n\tconst svelte = sveltePkg?.version ?? deps[\"svelte\"];\n\tconst tailwindcss = tailwindPkg?.version ?? deps[\"tailwindcss\"];\n\n\tconst result = checkInitDependencies({ svelte, tailwindcss });\n\tif (result.ok) return;\n\n\tif (!options.skipPreflight) throw result.error;\n\n\tp.note(\n\t\t`${color.red(result.error.message)}\\nContinuing initialization with ${color.bold(\"--skip-preflight\")}.`\n\t);\n}\n\ntype CheckInitDependenciesResult =\n\t| {\n\t\t\tok: true;\n\t\t\terror?: null;\n\t  }\n\t| {\n\t\t\tok: false;\n\t\t\terror: CLIError;\n\t  };\n\nfunction checkInitDependencies(\n\tdependencies: Partial<Record<string, string>>\n): CheckInitDependenciesResult {\n\tif (!dependencies.tailwindcss || !dependencies.svelte) {\n\t\treturn {\n\t\t\tok: false,\n\t\t\terror: error(\n\t\t\t\t`This CLI version requires Tailwind CSS v4 and Svelte v5 to initialize a project.\\n`\n\t\t\t),\n\t\t};\n\t}\n\n\tconst isTailwind3 = semver.satisfies(semver.coerce(dependencies.tailwindcss) || \"\", \"^3.0.0\");\n\tconst isTailwind4 = semver.satisfies(semver.coerce(dependencies.tailwindcss) || \"\", \"^4.0.0\");\n\tconst isSvelte4 = semver.satisfies(semver.coerce(dependencies.svelte) || \"\", \"^4.0.0\");\n\tconst isSvelte5 = semver.satisfies(semver.coerce(dependencies.svelte) || \"\", \"^5.0.0\");\n\n\t// if running Tailwind v3 and Svelte v5, we throw an error with a helpful message because\n\t// `init` is only supported for Tailwind v4 and Svelte v5\n\tif (isTailwind3 && isSvelte5) {\n\t\treturn {\n\t\t\tok: false,\n\t\t\terror: error(\n\t\t\t\t`Initializing a project with Tailwind v3 is not supported.\\n\\n` +\n\t\t\t\t\t`This CLI version requires Tailwind v4 and Svelte v5 for the ` +\n\t\t\t\t\t`${highlight(\"init\")} command.\\n\\n` +\n\t\t\t\t\t`You have two options:\\n` +\n\t\t\t\t\t`1. Update Tailwind CSS to v4 and try again.\\n` +\n\t\t\t\t\t`2. Use ${highlight(\"shadcn-svelte@1.0.0-next.10\")} that supports initializing projects with Tailwind v3.\\n\\n` +\n\t\t\t\t\t`References:\\n` +\n\t\t\t\t\t`Tailwind v4 Guide: ${color.underline(`${SITE_BASE_URL}/docs/migration/tailwind-v4`)}\\n` +\n\t\t\t\t\t`Legacy Tailwind v3 Docs: ${color.underline(`${TW3_SITE_BASE_URL}/docs`)}\\n\\n`\n\t\t\t),\n\t\t};\n\t}\n\n\t// if running Tailwind v3 and Svelte v4, we throw a different message. This will be useful when\n\t// we move this branch into `main` to point people in the right direction.\n\t// TODO: add link to upgrade guide?\n\tif (isTailwind3 && isSvelte4) {\n\t\treturn {\n\t\t\tok: false,\n\t\t\terror: error(\n\t\t\t\t`Initializing a project with Tailwind v3 and Svelte v4 is not supported.\\n\\n` +\n\t\t\t\t\t`This CLI version requires Tailwind v4 and Svelte v5 for the ${highlight(\"init\")} command.\\n\\n` +\n\t\t\t\t\t`Please use ${highlight(\"shadcn-svelte@0.14\")} that supports Tailwind v3 + Svelte v4.\\n\\n`\n\t\t\t),\n\t\t};\n\t}\n\n\t// if not Tailwind v4 and Svelte v5 by this point, they are using Tailwind v4 and Svelte v4\n\t// which is kinda cursed\n\tif (!isTailwind4 || !isSvelte5) {\n\t\treturn {\n\t\t\tok: false,\n\t\t\terror: error(\n\t\t\t\t`This CLI version requires Tailwind CSS v4 and Svelte v5 to initialize a project.\\n`\n\t\t\t),\n\t\t};\n\t}\n\n\treturn {\n\t\tok: true,\n\t};\n}\n"
  },
  {
    "path": "packages/cli/src/commands/registry/build.ts",
    "content": "import path from \"node:path\";\nimport process from \"node:process\";\nimport { existsSync, promises as fs } from \"node:fs\";\nimport color from \"picocolors\";\nimport { z } from \"zod\";\nimport { Command } from \"commander\";\nimport * as schema from \"../../utils/registry/schema.js\";\nimport * as p from \"@clack/prompts\";\nimport { intro, handleError } from \"../../utils/prompt-helpers.js\";\nimport { error } from \"../../utils/errors.js\";\nimport { toArray } from \"../../utils/utils.js\";\nimport { ALIAS_DEFAULTS, ALIASES, SITE_BASE_URL } from \"../../constants.js\";\nimport { getFileDependencies, resolveProjectDeps } from \"./deps-resolver.js\";\nimport { parseDependency } from \"../../utils/install-deps.js\";\n\n// TODO: perhaps a `--mini` flag to remove spacing?\nconst SPACER = \"\\t\";\n\nconst buildOptionsSchema = z.object({\n\tregistry: z.string(),\n\tcwd: z.string(),\n\toutput: z.string(),\n});\n\ntype BuildOptions = z.infer<typeof buildOptionsSchema>;\n\nexport const build = new Command()\n\t.command(\"build\")\n\t.description(\"build components for a shadcn-svelte registry\")\n\t.argument(\"[registry]\", \"path to registry.json file\", \"./registry.json\")\n\t.option(\"-c, --cwd <path>\", \"the working directory\", process.cwd())\n\t.option(\"-o, --output <path>\", \"destination directory for json files\", \"./static/r\")\n\t.action(async (registryPath, opts) => {\n\t\ttry {\n\t\t\tintro();\n\t\t\tconst options = buildOptionsSchema.parse({ registry: registryPath, ...opts });\n\n\t\t\t// resolve paths\n\t\t\tconst cwd = path.resolve(options.cwd);\n\t\t\tconst output = path.resolve(options.cwd, options.output);\n\t\t\tconst registry = path.resolve(options.cwd, options.registry);\n\n\t\t\t// validate options\n\t\t\tfor (const [option, path] of Object.entries({ cwd, registry })) {\n\t\t\t\tif (!existsSync(path)) {\n\t\t\t\t\tthrow error(`The '${option}' path ${color.cyan(path)} does not exist.`);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tawait runBuild({ cwd, output, registry });\n\n\t\t\tp.outro(`${color.green(\"Success!\")} Registry build completed.`);\n\t\t} catch (e) {\n\t\t\thandleError(e);\n\t\t}\n\t});\n\nasync function runBuild(options: BuildOptions) {\n\tconst spinner = p.spinner();\n\n\tspinner.start(`Parsing registry schema`);\n\tconst registryJson = await fs.readFile(options.registry, \"utf8\");\n\tconst registry = schema.registrySchema.parse(JSON.parse(registryJson));\n\tspinner.stop(\n\t\t`Parsed registry schema at ${color.dim(path.relative(options.cwd, options.registry))}`\n\t);\n\n\tconst registryIndex: schema.RegistryIndex = registry.items.map((item) => {\n\t\treturn { ...item, relativeUrl: `${item.name}.json` };\n\t});\n\n\t// write to output\n\tif (!existsSync(options.output)) {\n\t\tawait fs.mkdir(options.output, { recursive: true });\n\t}\n\n\tconst tasks: p.Task[] = [];\n\n\t// Write registry index: `registry/index.json`\n\ttasks.push({\n\t\ttitle: \"Building registry index\",\n\t\tasync task() {\n\t\t\tconst indexPath = path.resolve(options.output, \"index.json\");\n\t\t\tconst parsedIndex = schema.registryIndexSchema.parse(registryIndex);\n\n\t\t\tawait fs.writeFile(indexPath, JSON.stringify(parsedIndex, null, SPACER), \"utf8\");\n\n\t\t\tconst relative = path.relative(options.cwd, indexPath);\n\t\t\treturn `Registry index written to ${color.dim(relative)}`;\n\t\t},\n\t});\n\n\t// Write registry items: `registry/[item].json`\n\ttasks.push({\n\t\ttitle: \"Building registry items\",\n\t\tasync task(message) {\n\t\t\tconst projectDeps = resolveProjectDeps(options.cwd);\n\n\t\t\t// apply overrides\n\t\t\tif (registry.overrideDependencies) {\n\t\t\t\ttype Dependencies = (typeof projectDeps)[\"dependencies\"];\n\t\t\t\tconst overrideDep = (override: string, deps: Dependencies) => {\n\t\t\t\t\tconst { name } = parseDependency(override);\n\t\t\t\t\tconst versioned = deps.versions[name];\n\t\t\t\t\tif (versioned) {\n\t\t\t\t\t\tconst peers = deps.deps[versioned];\n\t\t\t\t\t\tdelete deps.deps[versioned];\n\n\t\t\t\t\t\tdeps.versions[name] = override;\n\t\t\t\t\t\tdeps.deps[override] = peers ?? [];\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\tfor (const override of registry.overrideDependencies) {\n\t\t\t\t\toverrideDep(override, projectDeps.dependencies);\n\t\t\t\t\toverrideDep(override, projectDeps.devDependencies);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (const item of registry.items) {\n\t\t\t\tmessage(`Building item ${color.cyan(item.name)}`);\n\t\t\t\tconst singleFile = item.files.length === 1;\n\t\t\t\tconst nested: schema.RegistryItemFileType[] = [\n\t\t\t\t\t\"registry:page\",\n\t\t\t\t\t\"registry:ui\",\n\t\t\t\t\t\"registry:file\",\n\t\t\t\t];\n\t\t\t\tconst toResolve = item.files.map(async (file) => {\n\t\t\t\t\tlet content = await fs.readFile(file.path, \"utf8\");\n\t\t\t\t\tcontent = transformAliases((registry.aliases ??= {}), content);\n\n\t\t\t\t\tconst name = path.basename(file.path);\n\n\t\t\t\t\tlet target;\n\t\t\t\t\tif (singleFile) target = name;\n\t\t\t\t\telse if (nested.includes(file.type)) target = `${item.name}/${name}`;\n\t\t\t\t\telse target = name;\n\n\t\t\t\t\treturn { content, name, target, ...file };\n\t\t\t\t});\n\t\t\t\tconst files = await Promise.all(toResolve);\n\n\t\t\t\tconst dependencies = new Set(item.dependencies);\n\t\t\t\tconst devDependencies = new Set(item.devDependencies);\n\n\t\t\t\tconst registryDependencies = new Set(item.registryDependencies.map(transformLocal));\n\n\t\t\t\tconst predefinedDeps = dependencies.size > 0 && devDependencies.size > 0;\n\t\t\t\tif (!predefinedDeps) {\n\t\t\t\t\tfor (const file of files) {\n\t\t\t\t\t\tconst fileDeps = await getFileDependencies({\n\t\t\t\t\t\t\t...projectDeps,\n\t\t\t\t\t\t\tfilename: file.name,\n\t\t\t\t\t\t\tsource: file.content,\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\t// don't add detected deps if they're already predefined\n\t\t\t\t\t\tif (!item.dependencies)\n\t\t\t\t\t\t\tfileDeps.dependencies?.forEach((dep) => {\n\t\t\t\t\t\t\t\t// type def packages should be inserted into dev deps\n\t\t\t\t\t\t\t\tif (dep.startsWith(\"@types/\")) {\n\t\t\t\t\t\t\t\t\tdevDependencies.add(dep);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tdependencies.add(dep);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\tif (!item.devDependencies)\n\t\t\t\t\t\t\tfileDeps.devDependencies?.forEach((dep) => devDependencies.add(dep));\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst parsedItem = schema.registryItemSchema.parse(\n\t\t\t\t\t{\n\t\t\t\t\t\t...item,\n\t\t\t\t\t\t$schema: `${SITE_BASE_URL}/schema/registry-item.json`,\n\t\t\t\t\t\tregistryDependencies: toArray(registryDependencies),\n\t\t\t\t\t\tdependencies: toArray(dependencies),\n\t\t\t\t\t\tdevDependencies: toArray(devDependencies),\n\t\t\t\t\t\tfiles,\n\t\t\t\t\t},\n\t\t\t\t\t// maintains the schema defined property order\n\t\t\t\t\t{ jitless: true }\n\t\t\t\t);\n\n\t\t\t\tconst outputPath = path.resolve(options.output, `${item.name}.json`);\n\n\t\t\t\tawait fs.writeFile(outputPath, JSON.stringify(parsedItem, null, SPACER), \"utf8\");\n\t\t\t}\n\n\t\t\tconst relative = path.relative(options.cwd, options.output);\n\t\t\treturn `Registry items written to ${color.dim(relative)}`;\n\t\t},\n\t});\n\n\tawait p.tasks(tasks);\n}\n\n/**\n * Transforms registryDependencies that start with `local:` into a path\n * relative to the current registry-item's json file.\n *\n * ```\n * \"local:stepper\"\n *```\n * transforms into:\n * ```\n * \"./stepper.json\"\n * ```\n */\nexport function transformLocal(registryDep: string) {\n\tif (registryDep.startsWith(\"local:\")) {\n\t\tconst LOCAL_REGEX = /^local:(.*)/;\n\t\treturn registryDep.replace(LOCAL_REGEX, \"./$1.json\");\n\t}\n\treturn registryDep;\n}\n\n/**\n * Transforms registry import aliases into a standardized format.\n *\n * ```\n * import Button from \"$lib/registry/ui/button/index.js\"\n * ```\n * transforms into:\n * ```\n * import Button from \"$UI$/button/index.js\"\n * ```\n */\nexport function transformAliases(\n\taliases: NonNullable<schema.Registry[\"aliases\"]>,\n\tcontent: string\n) {\n\tfor (const alias of ALIASES) {\n\t\tconst defaults = ALIAS_DEFAULTS[alias];\n\t\tconst path = (aliases[alias] ??= defaults.defaultPath);\n\t\tcontent = content.replaceAll(path, defaults.placeholder);\n\t}\n\n\treturn content;\n}\n"
  },
  {
    "path": "packages/cli/src/commands/registry/deps-resolver.ts",
    "content": "import * as acorn from \"acorn\";\nimport * as svelte from \"svelte/compiler\";\nimport { walk, type Node } from \"estree-walker\";\nimport { tsPlugin } from \"@sveltejs/acorn-typescript\";\nimport type { PackageJson } from \"type-fest\";\nimport { toArray } from \"../../utils/utils.js\";\nimport * as project from \"../../utils/project.js\";\nimport { getDependencyPackageInfo } from \"../../utils/get-package-info.js\";\n\nexport type ResolvedDependencies = {\n\t/** `<Dep@Version, Peers[]>` */\n\tdeps: Record<string, string[]>;\n\t/** `<Dep, Dep@Version>` */\n\tversions: Record<string, string>;\n};\n\nexport type ProjectDependencies = {\n\tdependencies: ResolvedDependencies;\n\tdevDependencies: ResolvedDependencies;\n};\n\nconst tsParser = acorn.Parser.extend(tsPlugin());\n\nexport function resolveProjectDeps(cwd: string): ProjectDependencies {\n\tconst pkg = project.getPackageInfo(cwd);\n\n\t// Record<Dependency, [...PeerDependencies]>\n\tconst dependencies = resolvePeerDeps(pkg.dependencies, cwd);\n\tconst devDependencies = resolvePeerDeps(pkg.devDependencies, cwd);\n\n\tlet projectDeps = resolveTypeDeps({ dependencies, devDependencies });\n\tprojectDeps = resolvePeerVersions(projectDeps);\n\n\treturn projectDeps;\n}\n\n/**\n * Adds a dependency's type definition package to their respective peer list (if applicable).\n */\nexport function resolveTypeDeps(projectDeps: ProjectDependencies) {\n\tfor (const dependencies of Object.values(projectDeps)) {\n\t\tfor (const [name, versioned] of Object.entries(dependencies.versions)) {\n\t\t\tconst peers = dependencies.deps[versioned]!;\n\t\t\t// transforms orgs into the proper types package name (e.g. `@org/pkg-name` => `@types/org__pkg-name`)\n\t\t\tconst typesName = `@types/${name.replace(/^@(.*)\\/(.*)/, \"$1__$2\")}`;\n\t\t\tconst typesVersion =\n\t\t\t\tprojectDeps.dependencies.versions[typesName] ??\n\t\t\t\tprojectDeps.devDependencies.versions[typesName];\n\n\t\t\t// if the types package exists, we'll add it to the peers\n\t\t\tif (typesVersion) {\n\t\t\t\tpeers.push(typesName);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn projectDeps;\n}\n\n/**\n * Applies version tags to the peer dependencies in their respective lists.\n *\n * `dependencies.deps` goes from `<DepName@Version, PeerName[]>` to `<DepName@Version, PeerName@Version[]>`\n */\nexport function resolvePeerVersions(projectDeps: ProjectDependencies): ProjectDependencies {\n\tfor (const dependencies of Object.values(projectDeps)) {\n\t\tfor (const [name, peers] of Object.entries(dependencies.deps)) {\n\t\t\tdependencies.deps[name] = peers\n\t\t\t\t.map(\n\t\t\t\t\t(peer) =>\n\t\t\t\t\t\tprojectDeps.dependencies.versions[peer] ||\n\t\t\t\t\t\tprojectDeps.devDependencies.versions[peer]\n\t\t\t\t)\n\t\t\t\t.filter((peer) => peer !== undefined);\n\t\t}\n\t}\n\n\treturn projectDeps;\n}\n\nexport const IGNORE_DEPS = [\"svelte\", \"@sveltejs/kit\", \"tailwindcss\", \"vite\"];\n\n/**\n * Resolves peer dependencies from a given set of dependencies from a package.json.\n *\n * Optional peer dependencies are ignored.\n */\nfunction resolvePeerDeps(\n\tdependencies: PackageJson[\"dependencies\"],\n\tcwd: string\n): ResolvedDependencies {\n\tconst deps: ResolvedDependencies[\"deps\"] = {};\n\tconst versions: ResolvedDependencies[\"versions\"] = {};\n\n\tfor (const [name, version] of Object.entries(dependencies ?? {})) {\n\t\tconst versioned = version ? `${name}@${version}` : name;\n\t\tconst peers = (deps[versioned] ??= []);\n\n\t\tversions[name] = versioned;\n\n\t\tconst pkg = getDependencyPackageInfo(cwd, name)?.pkg;\n\t\tif (!pkg) continue;\n\n\t\tconst { peerDependencies = {}, peerDependenciesMeta = {} } = pkg;\n\t\tfor (const [peerName] of Object.entries(peerDependencies)) {\n\t\t\t// ignores certain peer deps and optional peer deps\n\t\t\tif (IGNORE_DEPS.includes(peerName) || peerDependenciesMeta[peerName]?.optional)\n\t\t\t\tcontinue;\n\t\t\tpeers.push(peerName);\n\t\t}\n\t}\n\treturn { deps, versions };\n}\n\ntype GetFileDepOpts = {\n\tfilename: string;\n\tsource: string;\n\tdependencies: ReturnType<typeof resolvePeerDeps>;\n\tdevDependencies: ReturnType<typeof resolvePeerDeps>;\n};\nexport async function getFileDependencies(opts: GetFileDepOpts) {\n\tconst { filename, source } = opts;\n\tlet ast: unknown;\n\tlet moduleAst: unknown;\n\n\tif (filename.endsWith(\".svelte\")) {\n\t\tconst { code } = await svelte.preprocess(source, [], { filename });\n\t\tconst result = svelte.parse(code, { filename });\n\t\tast = result.instance;\n\t\tif (result.module) {\n\t\t\tmoduleAst = result.module;\n\t\t}\n\t} else if (filename.endsWith(\".ts\") || filename.endsWith(\".js\")) {\n\t\tast = tsParser.parse(source, {\n\t\t\tecmaVersion: \"latest\",\n\t\t\tsourceType: \"module\",\n\t\t\tsourceFile: filename,\n\t\t});\n\t} else {\n\t\t// unknown file (e.g. `.env` or some config file)\n\t\treturn {};\n\t}\n\n\tconst dependencies = new Set<string>();\n\tconst devDependencies = new Set<string>();\n\n\tconst enter = (node: Node) => {\n\t\tif (node.type !== \"ImportDeclaration\") return;\n\t\tconst source = node.source.value as string;\n\n\t\tconst deps = resolveDepsFromImport(source, opts.dependencies);\n\t\tdeps.forEach((dep) => dependencies.add(dep));\n\n\t\tconst devDeps = resolveDepsFromImport(source, opts.devDependencies);\n\t\tdevDeps.forEach((dep) => devDependencies.add(dep));\n\t};\n\n\t// @ts-expect-error yea, stfu\n\twalk(ast, { enter });\n\n\tif (moduleAst) {\n\t\t// @ts-expect-error yea, stfu x2\n\t\twalk(moduleAst, { enter });\n\t}\n\n\treturn {\n\t\tdependencies: toArray(dependencies),\n\t\tdevDependencies: toArray(devDependencies),\n\t};\n}\n\n/** Returns an array of found deps. */\nexport function resolveDepsFromImport(source: string, dependencies: ResolvedDependencies) {\n\tconst depsFound: string[] = [];\n\tconst simple = dependencies.versions[source] ? source : undefined;\n\tconst depName =\n\t\tsimple ??\n\t\t// considers deep imports\n\t\tObject.keys(dependencies.versions).find((dep) => source.startsWith(dep));\n\n\tif (depName && !IGNORE_DEPS.includes(depName)) {\n\t\tconst versioned = dependencies.versions[depName]!;\n\t\tconst peers = dependencies.deps[versioned];\n\t\tdepsFound.push(versioned);\n\t\tpeers?.forEach((dep) => depsFound.push(dep));\n\t}\n\n\treturn depsFound;\n}\n"
  },
  {
    "path": "packages/cli/src/commands/registry/index.ts",
    "content": "import { Command } from \"commander\";\nimport { build } from \"./build.js\";\n\nexport const registry = new Command().command(\"registry\").addCommand(build);\n"
  },
  {
    "path": "packages/cli/src/commands/update/index.ts",
    "content": "import path from \"node:path\";\nimport process from \"node:process\";\nimport { existsSync, promises as fs } from \"node:fs\";\nimport color from \"picocolors\";\nimport { z } from \"zod\";\nimport merge from \"deepmerge\";\nimport { Command } from \"commander\";\nimport { error } from \"../../utils/errors.js\";\nimport * as cliConfig from \"../../utils/config/index.js\";\nimport { getEnvProxy } from \"../../utils/get-env-proxy.js\";\nimport { cancel, intro, prettifyList, handleError } from \"../../utils/prompt-helpers.js\";\nimport * as p from \"@clack/prompts\";\nimport * as registry from \"../../utils/registry/index.js\";\nimport { transformCss } from \"../../utils/transform-css.js\";\nimport { setupFonts, type Font } from \"../../utils/fonts.js\";\nimport { checkPreconditions } from \"../../utils/preconditions.js\";\nimport { highlight } from \"../../utils/colors.js\";\nimport { installDependencies } from \"../../utils/install-deps.js\";\nimport {\n\ttransform,\n\ttransformImports,\n\ttransformIcons,\n\ttransformMenu,\n\ttransformStripTypes,\n} from \"../../utils/transformers/index.js\";\nimport * as project from \"../../utils/project.js\";\n\nconst updateOptionsSchema = z.object({\n\tall: z.boolean(),\n\tcomponents: z.string().array().optional(),\n\tcwd: z.string(),\n\tproxy: z.string().optional(),\n\tyes: z.boolean(),\n\tskipPreflight: z.boolean(),\n\tdeps: z.boolean(),\n});\n\ntype UpdateOptions = z.infer<typeof updateOptionsSchema>;\n\nexport const update = new Command()\n\t.command(\"update\", { hidden: true })\n\t.description(\"update components in your project\")\n\t.argument(\"[components...]\", \"name of components\")\n\t.option(\"-c, --cwd <path>\", \"the working directory\", process.cwd())\n\t.option(\"--skip-preflight\", \"ignore preflight checks and continue\", false)\n\t.option(\"--no-deps\", \"skips adding & installing package dependencies\")\n\t.option(\"-a, --all\", \"update all existing components\", false)\n\t.option(\"-y, --yes\", \"skip confirmation prompt\", false)\n\t.option(\"--proxy <proxy>\", \"fetch components from registry using a proxy\", getEnvProxy())\n\t.action(async (components, opts) => {\n\t\tintro();\n\n\t\ttry {\n\t\t\tconst options = updateOptionsSchema.parse({\n\t\t\t\tcomponents,\n\t\t\t\t...opts,\n\t\t\t});\n\n\t\t\tconst cwd = path.resolve(options.cwd);\n\n\t\t\tif (!existsSync(cwd)) {\n\t\t\t\tthrow error(`The path ${color.cyan(cwd)} does not exist. Please try again.`);\n\t\t\t}\n\n\t\t\tconst config = await cliConfig.getConfig(cwd);\n\t\t\tif (!config) {\n\t\t\t\tthrow error(\n\t\t\t\t\t`Configuration file is missing. Please run ${color.green(\"init\")} to create a ${highlight(\"components.json\")} file.`\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst updatedConfig = checkPreconditions({\n\t\t\t\tconfig,\n\t\t\t\tcwd,\n\t\t\t\tskipPreflight: options.skipPreflight,\n\t\t\t});\n\t\t\tawait runUpdate(cwd, updatedConfig, options);\n\n\t\t\tp.outro(`${color.green(\"Success!\")} Component update completed.`);\n\t\t} catch (e) {\n\t\t\thandleError(e);\n\t\t}\n\t});\n\nasync function runUpdate(cwd: string, config: cliConfig.ResolvedConfig, options: UpdateOptions) {\n\tif (options.proxy !== undefined) {\n\t\tprocess.env.HTTP_PROXY = options.proxy;\n\t\tp.log.info(`You are using the provided proxy: ${color.green(options.proxy)}`);\n\t}\n\n\tconst components = options.components;\n\n\tconst registryUrl = registry.getRegistryUrl(config);\n\tconst registryIndex = await registry.getRegistryIndex(registryUrl);\n\n\t// Retrieve existing items in the user's project\n\tconst existingComponents = await project.getComponents({ registryIndex, config });\n\n\t// If the user specifies component args\n\tlet selectedComponents = options.all ? existingComponents : [];\n\tif (selectedComponents.length === 0 && components !== undefined) {\n\t\t// ...only add valid components to the list\n\t\tselectedComponents = existingComponents.filter((component) =>\n\t\t\tcomponents.includes(component.name)\n\t\t);\n\t}\n\n\t// If user didn't specify any component arguments\n\tif (selectedComponents.length === 0) {\n\t\tconst selected = await p.multiselect({\n\t\t\tmessage: \"Which components would you like to update?\",\n\t\t\tmaxItems: 10,\n\t\t\toptions: existingComponents.map((component) => ({\n\t\t\t\tlabel: component.name,\n\t\t\t\tvalue: component,\n\t\t\t\thint: component.registryDependencies?.length\n\t\t\t\t\t? `also updates: ${component.registryDependencies.join(\", \")}`\n\t\t\t\t\t: undefined,\n\t\t\t})),\n\t\t});\n\n\t\tif (p.isCancel(selected)) cancel();\n\n\t\tselectedComponents = selected;\n\t} else {\n\t\tconst prettyList = prettifyList(selectedComponents.map(({ name }) => name));\n\t\tp.log.step(`Components to update:\\n${color.gray(prettyList)}`);\n\t}\n\n\tif (options.yes === false) {\n\t\tconst proceed = await p.confirm({\n\t\t\tmessage: `Ready to update ${highlight(\"components\")}? ${color.gray(\"(Make sure you have committed your changes before proceeding!)\")}`,\n\t\t\tinitialValue: true,\n\t\t});\n\n\t\tif (p.isCancel(proceed) || proceed === false) cancel();\n\t}\n\n\tconst tasks: p.Task[] = [];\n\n\tconst resolvedItems = await registry.resolveRegistryItems({\n\t\tregistryUrl,\n\t\tregistryIndex,\n\t\titems: selectedComponents.map((comp) => comp.name),\n\t});\n\n\tconst payload = await registry.fetchRegistryItems({\n\t\tbaseUrl: registryUrl,\n\t\titems: resolvedItems,\n\t});\n\tpayload.sort((a, b) => a.name.localeCompare(b.name));\n\n\tconst componentsToRemove: Record<string, string[]> = {};\n\tconst dependencies = new Set<string>();\n\tconst devDependencies = new Set<string>();\n\tconst fonts: Font[] = [];\n\tlet cssVars = {};\n\tlet css = {};\n\tfor (const item of payload) {\n\t\tconst aliasDir = registry.getItemAliasDir(config, item.type);\n\n\t\t// Add dependencies to the install list\n\t\titem.dependencies?.forEach((dep) => dependencies.add(dep));\n\t\titem.devDependencies?.forEach((dep) => devDependencies.add(dep));\n\n\t\tif (item.type === \"registry:font\") {\n\t\t\tfonts.push({\n\t\t\t\tname: item.name,\n\t\t\t\t...item.font,\n\t\t\t});\n\t\t}\n\n\t\t// Update Components\n\t\ttasks.push({\n\t\t\ttitle: `Updating ${highlight(item.name)}`,\n\t\t\tasync task() {\n\t\t\t\tfor (const file of item.files ?? []) {\n\t\t\t\t\tconst filePath = registry.resolveItemFilePath(config, item, file);\n\n\t\t\t\t\tconst {\n\t\t\t\t\t\tcontent,\n\t\t\t\t\t\tdependencies: transformDependencies,\n\t\t\t\t\t\tdevDependencies: transformDevDependencies,\n\t\t\t\t\t\tfilePath: transformFilePath,\n\t\t\t\t\t} = await transform({ content: file.content, filePath, config }, [\n\t\t\t\t\t\ttransformImports,\n\t\t\t\t\t\ttransformIcons,\n\t\t\t\t\t\ttransformMenu,\n\t\t\t\t\t\t!config.typescript && transformStripTypes,\n\t\t\t\t\t]);\n\n\t\t\t\t\ttransformDependencies?.forEach((dep) => dependencies.add(dep));\n\t\t\t\t\ttransformDevDependencies?.forEach((dep) => devDependencies.add(dep));\n\n\t\t\t\t\tconst dir = path.parse(transformFilePath).dir;\n\t\t\t\t\tif (!existsSync(dir)) {\n\t\t\t\t\t\tawait fs.mkdir(dir, { recursive: true });\n\t\t\t\t\t}\n\n\t\t\t\t\tawait fs.writeFile(transformFilePath, content, \"utf8\");\n\t\t\t\t}\n\n\t\t\t\tif (item.css) {\n\t\t\t\t\tcss = merge(css, item.css);\n\t\t\t\t}\n\t\t\t\tif (item.cssVars) {\n\t\t\t\t\tcssVars = merge(cssVars, item.cssVars);\n\t\t\t\t}\n\n\t\t\t\tconst itemDir = path.resolve(aliasDir, item.name);\n\t\t\t\tif (item.files && item.files?.length > 1) {\n\t\t\t\t\tconst remoteFiles = item.files.map((file) => {\n\t\t\t\t\t\tconst filepath = registry.resolveItemFilePath(config, item, file);\n\t\t\t\t\t\tif (!config.typescript && filepath.endsWith(\".ts\")) {\n\t\t\t\t\t\t\treturn filepath.replace(\".ts\", \".js\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn filepath;\n\t\t\t\t\t});\n\n\t\t\t\t\tconst installedFiles = await fs.readdir(itemDir, { withFileTypes: true });\n\t\t\t\t\tconst filesToDelete = installedFiles\n\t\t\t\t\t\t.map((file) => path.resolve(file.parentPath, file.name))\n\t\t\t\t\t\t.filter((filepath) => !remoteFiles.includes(filepath));\n\n\t\t\t\t\tif (filesToDelete.length > 0) {\n\t\t\t\t\t\tcomponentsToRemove[item.name] = filesToDelete;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tconst componentPath = path.relative(options.cwd, itemDir);\n\t\t\t\treturn `${highlight(item.name)} updated at ${color.gray(componentPath)}`;\n\t\t\t},\n\t\t});\n\t}\n\n\tconst {\n\t\tcss: fontsCss,\n\t\tcssVars: fontsCssVars,\n\t\tdependencies: fontsDependencies,\n\t} = setupFonts(fonts);\n\n\tcss = merge(css, fontsCss);\n\tcssVars = merge(cssVars, fontsCssVars);\n\tfontsDependencies.forEach((dep) => devDependencies.add(dep));\n\n\tif (Object.keys(cssVars).length > 0 || Object.keys(css).length > 0) {\n\t\t// Update the stylesheet\n\t\ttasks.push({\n\t\t\ttitle: \"Updating stylesheet\",\n\t\t\tasync task() {\n\t\t\t\tconst cssPath = config.resolvedPaths.tailwindCss;\n\t\t\t\tconst cssSource = await fs.readFile(cssPath, \"utf8\");\n\n\t\t\t\tconst modifiedCss = transformCss(cssSource, { css, cssVars });\n\t\t\t\tawait fs.writeFile(cssPath, modifiedCss, \"utf8\");\n\n\t\t\t\tconst relative = path.relative(cwd, cssPath);\n\t\t\t\treturn `${highlight(\"Stylesheet\")} updated at ${color.dim(relative)}`;\n\t\t\t},\n\t\t});\n\t}\n\n\tawait p.tasks(tasks);\n\n\tif (options.deps) {\n\t\tawait installDependencies({\n\t\t\tcwd,\n\t\t\tdependencies: Array.from(dependencies),\n\t\t\tdevDependencies: Array.from(devDependencies),\n\t\t\tprompt: true,\n\t\t});\n\t} else if (dependencies.size > 0 || devDependencies.size > 0) {\n\t\tconst prettyList = prettifyList([...dependencies, ...devDependencies], 7);\n\t\tp.log.warn(\n\t\t\t`Components have been updated ${color.bold(color.red(\"without\"))} the following ${highlight(\"dependencies\")}:\\n${color.gray(prettyList)}`\n\t\t);\n\t}\n\n\tfor (const [component, files] of Object.entries(componentsToRemove)) {\n\t\tp.log.warn(\n\t\t\t`The ${highlight(component)} component does not use the following files:\\n${files.map((file) => color.white(`- ${color.gray(path.relative(cwd, file))}`)).join(\"\\n\")}`\n\t\t);\n\t}\n\tif (Object.keys(componentsToRemove).length > 0) {\n\t\tp.log.message(color.bold(\"You may want to delete them.\"));\n\t}\n}\n"
  },
  {
    "path": "packages/cli/src/constants.ts",
    "content": "// !! BROWSER SAFE !!\n\nexport const SITE_BASE_URL = \"https://shadcn-svelte.com\";\nexport const TW3_SITE_BASE_URL = \"https://tw3.shadcn-svelte.com\";\nexport const OFFICIAL_REGISTRY_URL = `${SITE_BASE_URL}/registry`;\n\nexport const ALIASES = [\"components\", \"ui\", \"hooks\", \"utils\", \"lib\"] as const;\n\nexport const ALIAS_DEFAULTS = ALIASES.reduce(\n\t(acc, a) => {\n\t\tacc[a] = {\n\t\t\tplaceholder: `$${a.toUpperCase()}$`,\n\t\t\tdefaultPath: a === \"utils\" ? \"$lib/utils\" : `$lib/registry/${a}`,\n\t\t};\n\t\treturn acc;\n\t},\n\t{} as Record<(typeof ALIASES)[number], { placeholder: string; defaultPath: string }>\n);\n"
  },
  {
    "path": "packages/cli/src/icons/index.ts",
    "content": "export * from \"./libraries.js\";\n"
  },
  {
    "path": "packages/cli/src/icons/libraries.ts",
    "content": "// !! BROWSER SAFE !!\n\nimport { pascalToKebab } from \"../utils/utils.js\";\n\nexport type IconLibraryName = keyof typeof iconLibraries;\n\nexport type IconLibrary = {\n\tname: string;\n\ttitle: string;\n\tpackages: string[];\n\timport: (icon: { name: string }) => string;\n\tusage: (icon: { name: string }, restProps: string) => string;\n\texport: (icon: { name: string }) => string;\n\tgetAdditionalImports?: () => string[];\n};\n\nexport const iconLibraries = {\n\tlucide: {\n\t\tname: \"lucide\",\n\t\ttitle: \"Lucide\",\n\t\tpackages: [\"@lucide/svelte\"],\n\t\timport: (icon) =>\n\t\t\t`import ${icon.name} from '@lucide/svelte/icons/${toLucideKebab(icon.name)}';`,\n\t\tusage: (icon, restProps) => `<${icon.name} ${restProps} />`,\n\t\texport: (icon) =>\n\t\t\t`export { default as ${icon.name} } from '@lucide/svelte/icons/${toLucideKebab(icon.name)}';`,\n\t},\n\ttabler: {\n\t\tname: \"tabler\",\n\t\ttitle: \"Tabler\",\n\t\tpackages: [\"@tabler/icons-svelte\"],\n\t\timport: (icon) => `import { ${icon.name} } from '@tabler/icons-svelte';`,\n\t\tusage: (icon, restProps) => `<${icon.name} ${restProps} />`,\n\t\texport: (icon) => `export { ${icon.name} } from '@tabler/icons-svelte';`,\n\t},\n\thugeicons: {\n\t\tname: \"hugeicons\",\n\t\ttitle: \"HugeIcons\",\n\t\tpackages: [\"@hugeicons/svelte\", \"@hugeicons/core-free-icons\"],\n\t\timport: (icon) => `import { ${icon.name} } from '@hugeicons/core-free-icons';`,\n\t\tusage: (icon, restProps) =>\n\t\t\t`<HugeiconsIcon icon={${icon.name}} strokeWidth={2} ${restProps} />`,\n\t\texport: (icon) => `export { ${icon.name} } from '@hugeicons/core-free-icons';`,\n\t\tgetAdditionalImports: () => ['import { HugeiconsIcon } from \"@hugeicons/svelte\"'],\n\t},\n\tphosphor: {\n\t\tname: \"phosphor\",\n\t\ttitle: \"Phosphor\",\n\t\tpackages: [\"phosphor-svelte\"],\n\t\timport: (icon) =>\n\t\t\t`import ${icon.name} from 'phosphor-svelte/lib/${toPhosphorName(icon.name)}';`,\n\t\tusage: (icon, restProps) => `<${icon.name} ${restProps} />`,\n\t\texport: (icon) =>\n\t\t\t`export { default as ${icon.name} } from 'phosphor-svelte/lib/${toPhosphorName(icon.name)}';`,\n\t},\n\tremixicon: {\n\t\tname: \"remixicon\",\n\t\ttitle: \"Remix Icon\",\n\t\tpackages: [\"remixicon-svelte\"],\n\t\timport: (icon) =>\n\t\t\t`import ${icon.name} from 'remixicon-svelte/icons/${toRemixKebab(icon.name)}';`,\n\t\tusage: (icon, restProps) => `<${icon.name} ${restProps} />`,\n\t\texport: (icon) =>\n\t\t\t`export { default as ${icon.name} } from 'remixicon-svelte/icons/${toRemixKebab(icon.name)}';`,\n\t},\n} as const satisfies Record<string, IconLibrary>;\n\nfunction toLucideKebab(name: string): string {\n\treturn pascalToKebab(name).replace(\"-icon\", \"\");\n}\n\nfunction toPhosphorName(name: string): string {\n\treturn name.endsWith(\"Icon\") ? name.slice(0, -4) : name;\n}\n\nfunction toRemixKebab(name: string): string {\n\tconst withoutPrefix = name.startsWith(\"Ri\") ? name.slice(2) : name;\n\treturn pascalToKebab(withoutPrefix);\n}\n"
  },
  {
    "path": "packages/cli/src/index.ts",
    "content": "#!/usr/bin/env node\nimport process from \"node:process\";\nimport { Command } from \"commander\";\nimport * as commands from \"./commands/index.js\";\nimport { getCLIPackageInfo } from \"./utils/get-package-info.js\";\n\nprocess.on(\"SIGINT\", () => process.exit(0));\nprocess.on(\"SIGTERM\", () => process.exit(0));\n\nconst MINIMUM_MAJOR = 20;\n\nconst version = process.versions.node;\nconst major = Number.parseInt(version.split(\".\").at(0)!);\n\nif (major < MINIMUM_MAJOR) {\n\tconsole.error(`Node.js v${version} is out of date and unsupported!`);\n\tconsole.error(`Please use Node.js v${MINIMUM_MAJOR} or higher.`);\n\tprocess.exit(1);\n}\n\nasync function main() {\n\tconst packageInfo = getCLIPackageInfo();\n\n\tconst program = new Command()\n\t\t.name(\"shadcn-svelte\")\n\t\t.description(\"Add shadcn-svelte components to your project\")\n\t\t.version(packageInfo.version || \"0.0.0\", \"-v, --version\", \"display the version number\");\n\n\t// register commands\n\tfor (const cmd of Object.values(commands)) {\n\t\tprogram.addCommand(cmd);\n\t}\n\n\tprogram.parse();\n}\n\nmain();\n"
  },
  {
    "path": "packages/cli/src/preset/index.ts",
    "content": "// Browser-safe re-export of preset utilities.\n// Use `shadcn/preset` for client-side code.\nexport {\n\tPRESET_STYLES,\n\tPRESET_BASE_COLORS,\n\tPRESET_BASE_COLOR_KEYS,\n\tPRESET_THEMES,\n\tPRESET_THEME_KEYS,\n\tPRESET_ICON_LIBRARIES,\n\tPRESET_FONTS,\n\tPRESET_RADII,\n\tPRESET_MENU_ACCENTS,\n\tPRESET_MENU_COLORS,\n\tDEFAULT_PRESET_CONFIG,\n\ttoBase62,\n\tfromBase62,\n\tencodePreset,\n\tdecodePreset,\n\tisPresetCode,\n\tisValidPreset,\n\tgenerateRandomConfig,\n\tgenerateRandomPreset,\n\ttype PresetConfig,\n} from \"./preset.js\";\n"
  },
  {
    "path": "packages/cli/src/preset/preset.ts",
    "content": "// !! BROWSER SAFE !!\n\nimport { iconLibraries } from \"../icons/libraries.js\";\nimport { keys } from \"../utils/utils.js\";\n\n// Preset encoding/decoding utilities.\n// Bit-packs design system params into a single integer,\n// then encodes as base62 with a version prefix character.\n//\n// Rules for backward compat:\n//   1. Never reorder existing value arrays — only append.\n//   2. New fields must have their default at index 0.\n//   3. Only append new fields to the end of PRESET_FIELDS.\n//   4. Stay under 53 bits total (JS safe integer limit).\n\n// Value arrays — order matters for backward compat. Never reorder, only append.\nexport const PRESET_STYLES = [\"nova\", \"vega\", \"maia\", \"lyra\", \"mira\"] as const;\n\nexport const PRESET_BASE_COLORS = {\n\tneutral: { name: \"Neutral\", color: \"#737373\" },\n\tstone: { name: \"Stone\", color: \"#79716B\" },\n\tzinc: { name: \"Zinc\", color: \"#71717B\" },\n\tmauve: { name: \"Mauve\", color: \"#79697B\" },\n\tolive: { name: \"Olive\", color: \"#7C7C67\" },\n\tmist: { name: \"Mist\", color: \"#67787C\" },\n\ttaupe: { name: \"Taupe\", color: \"#7C6D67\" },\n} as const;\n\nexport const PRESET_BASE_COLOR_KEYS = keys(PRESET_BASE_COLORS);\n\nexport const PRESET_THEMES = {\n\tneutral: { name: \"Neutral\", color: \"#737373\" },\n\tstone: { name: \"Stone\", color: \"#78716c\" },\n\tzinc: { name: \"Zinc\", color: \"#71717a\" },\n\tamber: { name: \"Amber\", color: \"#FD9A00\" },\n\tblue: { name: \"Blue\", color: \"#2B7FFF\" },\n\tcyan: { name: \"Cyan\", color: \"#00B8DB\" },\n\temerald: { name: \"Emerald\", color: \"#00BC7D\" },\n\tfuchsia: { name: \"Fuchsia\", color: \"#E12AFB\" },\n\tgreen: { name: \"Green\", color: \"#00C950\" },\n\tindigo: { name: \"Indigo\", color: \"#615FFF\" },\n\tlime: { name: \"Lime\", color: \"#7CCF00\" },\n\torange: { name: \"Orange\", color: \"#FF6900\" },\n\tpink: { name: \"Pink\", color: \"#F6339A\" },\n\tpurple: { name: \"Purple\", color: \"#AD46FF\" },\n\tred: { name: \"Red\", color: \"#FB2C36\" },\n\trose: { name: \"Rose\", color: \"#FF2056\" },\n\tsky: { name: \"Sky\", color: \"#00A6F4\" },\n\tteal: { name: \"Teal\", color: \"#00BBA7\" },\n\tviolet: { name: \"Violet\", color: \"#8E51FF\" },\n\tyellow: { name: \"Yellow\", color: \"#EFB100\" },\n\tmauve: { name: \"Mauve\", color: \"#79697b\" },\n\tolive: { name: \"Olive\", color: \"#7c7c67\" },\n\tmist: { name: \"Mist\", color: \"#67787c\" },\n\ttaupe: { name: \"Taupe\", color: \"#7c6d67\" },\n} as const;\n\nexport const PRESET_THEME_KEYS = keys(PRESET_THEMES);\n\nexport const PRESET_ICON_LIBRARIES = keys(iconLibraries);\n\nexport const PRESET_FONTS = [\n\t\"inter\",\n\t\"noto-sans\",\n\t\"nunito-sans\",\n\t\"figtree\",\n\t\"roboto\",\n\t\"raleway\",\n\t\"dm-sans\",\n\t\"public-sans\",\n\t\"outfit\",\n\t\"jetbrains-mono\",\n\t\"geist\",\n\t\"geist-mono\",\n\t\"lora\",\n\t\"merriweather\",\n\t\"playfair-display\",\n\t\"noto-serif\",\n\t\"roboto-slab\",\n] as const;\n\nexport const PRESET_RADII = {\n\tdefault: { name: \"default\", label: \"Default\", value: \"0.5rem\" },\n\tnone: { name: \"none\", label: \"None\", value: \"0rem\" },\n\tsmall: { name: \"small\", label: \"Small\", value: \"0.45rem\" },\n\tmedium: { name: \"medium\", label: \"Medium\", value: \"0.625rem\" },\n\tlarge: { name: \"large\", label: \"Large\", value: \"0.875rem\" },\n} as const;\n\nexport const PRESET_RADII_KEYS = keys(PRESET_RADII);\n\nexport const PRESET_MENU_ACCENTS = [\"subtle\", \"bold\"] as const;\nexport const PRESET_MENU_COLORS = [\n\t\"default\",\n\t\"inverted\",\n\t\"default-translucent\",\n\t\"inverted-translucent\",\n] as const;\n\n// Field definitions in pack order. Total: 43 bits, 10 bits headroom.\n// Note: `base` was removed (was bits 40-42). Old codes are backward-compatible\n// because `base` was the last field — decoder stops at bit 40 and ignores the rest.\nconst PRESET_FIELDS = [\n\t{ key: \"menuColor\", values: PRESET_MENU_COLORS, bits: 3 },\n\t{ key: \"menuAccent\", values: PRESET_MENU_ACCENTS, bits: 3 },\n\t{ key: \"radius\", values: PRESET_RADII_KEYS, bits: 4 },\n\t{ key: \"font\", values: PRESET_FONTS, bits: 6 },\n\t{ key: \"iconLibrary\", values: PRESET_ICON_LIBRARIES, bits: 6 },\n\t{ key: \"theme\", values: PRESET_THEME_KEYS, bits: 6 },\n\t{ key: \"baseColor\", values: PRESET_BASE_COLOR_KEYS, bits: 6 },\n\t{ key: \"style\", values: PRESET_STYLES, bits: 6 },\n] as const;\n\nexport type PresetConfig = {\n\tstyle: (typeof PRESET_STYLES)[number];\n\tbaseColor: (typeof PRESET_BASE_COLOR_KEYS)[number];\n\ttheme: (typeof PRESET_THEME_KEYS)[number];\n\ticonLibrary: (typeof PRESET_ICON_LIBRARIES)[number];\n\tfont: (typeof PRESET_FONTS)[number];\n\tradius: (typeof PRESET_RADII_KEYS)[number];\n\tmenuAccent: (typeof PRESET_MENU_ACCENTS)[number];\n\tmenuColor: (typeof PRESET_MENU_COLORS)[number];\n};\n\nexport const DEFAULT_PRESET_CONFIG: PresetConfig = Object.fromEntries(\n\tPRESET_FIELDS.map((f) => [f.key, f.values[0]])\n) as PresetConfig;\n\n// Base62 alphabet.\nconst BASE62 = \"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\";\n\n// Version prefix — 'a' = version 1.\nconst VERSION_CHAR = \"a\";\n\nexport function toBase62(num: number) {\n\tif (num === 0) return \"0\";\n\tlet result = \"\";\n\tlet n = num;\n\twhile (n > 0) {\n\t\tresult = BASE62[n % 62] + result;\n\t\tn = Math.floor(n / 62);\n\t}\n\treturn result;\n}\n\nexport function fromBase62(str: string) {\n\tlet result = 0;\n\tfor (let i = 0; i < str.length; i++) {\n\t\tconst idx = BASE62.indexOf(str[i]!);\n\t\tif (idx === -1) return -1;\n\t\tresult = result * 62 + idx;\n\t}\n\treturn result;\n}\n\n// Encode a PresetConfig into a short alphanumeric code.\nexport function encodePreset(config: Partial<PresetConfig>) {\n\tconst merged = { ...DEFAULT_PRESET_CONFIG, ...config };\n\n\t// Uses multiplication instead of bitwise ops (JS bitwise truncates to 32 bits).\n\tlet bits = 0;\n\tlet offset = 0;\n\tfor (const field of PRESET_FIELDS) {\n\t\tconst idx = (field.values as readonly string[]).indexOf(\n\t\t\tmerged[field.key as keyof PresetConfig]\n\t\t);\n\t\tbits += (idx === -1 ? 0 : idx) * 2 ** offset;\n\t\toffset += field.bits;\n\t}\n\n\treturn VERSION_CHAR + toBase62(bits);\n}\n\n// Decode a preset code back into a PresetConfig.\nexport function decodePreset(code: string): PresetConfig | null {\n\tif (!code || code.length < 2) {\n\t\treturn null;\n\t}\n\n\tif (code[0] !== VERSION_CHAR) {\n\t\treturn null;\n\t}\n\n\tconst bits = fromBase62(code.slice(1));\n\tif (bits < 0) return null;\n\n\tconst result = {} as Record<string, string>;\n\tlet offset = 0;\n\tfor (const field of PRESET_FIELDS) {\n\t\tconst idx = Math.floor(bits / 2 ** offset) % 2 ** field.bits;\n\t\tresult[field.key] = idx < field.values.length ? field.values[idx]! : field.values[0]!;\n\t\toffset += field.bits;\n\t}\n\n\treturn result as PresetConfig;\n}\n\n// Check if a string looks like a preset code (version char + base62).\nexport function isPresetCode(value: string) {\n\tif (!value || value.length < 2 || value.length > 10) {\n\t\treturn false;\n\t}\n\n\tif (value[0] !== VERSION_CHAR) {\n\t\treturn false;\n\t}\n\n\tfor (let i = 1; i < value.length; i++) {\n\t\tif (BASE62.indexOf(value[i]!) === -1) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\n}\n\n// Validate that a preset code decodes successfully.\nexport function isValidPreset(code: string) {\n\treturn decodePreset(code) !== null;\n}\n\n// Generate a random PresetConfig.\nexport function generateRandomConfig(): PresetConfig {\n\tconst pick = <T>(arr: readonly T[]) => arr[Math.floor(Math.random() * arr.length)];\n\n\treturn Object.fromEntries(PRESET_FIELDS.map((f) => [f.key, pick(f.values)])) as PresetConfig;\n}\n\n// Generate a random preset code.\nexport function generateRandomPreset() {\n\treturn encodePreset(generateRandomConfig());\n}\n"
  },
  {
    "path": "packages/cli/src/preset/presets.ts",
    "content": "import {\n\tdecodePreset,\n\tisValidPreset,\n\tPRESET_BASE_COLORS,\n\tPRESET_THEMES,\n\ttype PresetConfig,\n\tPRESET_RADII,\n\tPRESET_FONTS,\n} from \"./preset.js\";\nimport * as cliConfig from \"../utils/config/index.js\";\nimport * as p from \"@clack/prompts\";\nimport color from \"picocolors\";\nimport { cancel } from \"../utils/prompt-helpers.js\";\nimport * as registry from \"../utils/registry/index.js\";\nimport open from \"open\";\nimport { iconLibraries } from \"../icons/libraries.js\";\nimport { entries, kebabToPascal } from \"../utils/utils.js\";\nimport { hex } from \"../utils/colors.js\";\n\nexport const DEFAULT_PRESETS = {\n\tnova: {\n\t\ttitle: \"Nova\",\n\t\tdescription: \"Lucide / Geist\",\n\t\thint: \"Reduced spacing for compact layouts.\",\n\t\tstyle: \"nova\",\n\t\tbaseColor: \"neutral\",\n\t\ttheme: \"neutral\",\n\t\ticonLibrary: \"lucide\",\n\t\tfont: \"geist\",\n\t\tmenuAccent: \"subtle\" as const,\n\t\tmenuColor: \"default\" as const,\n\n\t\tradius: \"default\",\n\t},\n\tvega: {\n\t\ttitle: \"Vega\",\n\t\tdescription: \"Lucide / Inter\",\n\t\thint: \"The classic shadcn/ui look.\",\n\t\tstyle: \"vega\",\n\t\tbaseColor: \"neutral\",\n\t\ttheme: \"neutral\",\n\t\ticonLibrary: \"lucide\",\n\t\tfont: \"inter\",\n\t\tmenuAccent: \"subtle\" as const,\n\t\tmenuColor: \"default\" as const,\n\n\t\tradius: \"default\",\n\t},\n\tmaia: {\n\t\ttitle: \"Maia\",\n\t\tdescription: \"Hugeicons / Figtree\",\n\t\thint: \"Soft and rounded, with generous spacing.\",\n\t\tstyle: \"maia\",\n\t\tbaseColor: \"neutral\",\n\t\ttheme: \"neutral\",\n\t\ticonLibrary: \"hugeicons\",\n\t\tfont: \"figtree\",\n\t\tmenuAccent: \"subtle\" as const,\n\t\tmenuColor: \"default\" as const,\n\n\t\tradius: \"default\",\n\t},\n\tlyra: {\n\t\ttitle: \"Lyra\",\n\t\tdescription: \"Phosphor / JetBrains Mono\",\n\t\thint: \"Boxy and sharp. Pairs well with mono fonts.\",\n\t\tstyle: \"lyra\",\n\t\tbaseColor: \"neutral\",\n\t\ttheme: \"neutral\",\n\t\ticonLibrary: \"phosphor\",\n\t\tfont: \"jetbrains-mono\",\n\t\tmenuAccent: \"subtle\" as const,\n\t\tmenuColor: \"default\" as const,\n\n\t\tradius: \"default\",\n\t},\n\tmira: {\n\t\ttitle: \"Mira\",\n\t\tdescription: \"Hugeicons / Inter\",\n\t\thint: \"Compact. Made for dense interfaces.\",\n\t\tstyle: \"mira\",\n\t\tbaseColor: \"neutral\",\n\t\ttheme: \"neutral\",\n\t\ticonLibrary: \"hugeicons\",\n\t\tfont: \"inter\",\n\t\tmenuAccent: \"subtle\" as const,\n\t\tmenuColor: \"default\" as const,\n\n\t\tradius: \"default\",\n\t},\n} as const;\n\n/**\n * When the user doesn't provide a preset we want to give them some options for configuring the design system.\n * 1. Go to `/create`, customize, and paste the code back here when they are ready\n * 2. Choose from the list of presets\n * 3. Prompt for the presets\n *\n * @param existingConfig\n */\nexport async function promptForPreset(\n\texistingConfig: cliConfig.RawConfig | undefined\n): Promise<PresetConfig> {\n\tconst continuationChoice = await p.select({\n\t\tmessage:\n\t\t\t\"You didn't provide a preset for the design system, how would you like to continue?\",\n\t\tinitialValue: existingConfig?.style !== undefined ? \"prompt\" : \"presets\",\n\t\toptions: Object.entries(CONTINUATION_OPTIONS).map(([key, option]) => ({\n\t\t\tlabel: option.label,\n\t\t\tvalue: key,\n\t\t})),\n\t});\n\n\tif (p.isCancel(continuationChoice)) cancel();\n\n\treturn await CONTINUATION_OPTIONS[\n\t\tcontinuationChoice as keyof typeof CONTINUATION_OPTIONS\n\t].select(existingConfig);\n}\n\ntype ContinuationOption = {\n\tlabel: string;\n\tselect: (existingConfig: cliConfig.RawConfig | undefined) => Promise<PresetConfig>;\n};\n\nconst CONTINUATION_OPTIONS = {\n\tpresets: {\n\t\tlabel: \"Choose from a list of pre-configured presets\",\n\t\tselect: (existingConfig) => presets(existingConfig),\n\t},\n\tcustomize: {\n\t\tlabel: `Create my own preset at ${color.bold(\"shadcn-svelte.com/create\")}`,\n\t\tselect: (existingConfig) => customize(existingConfig),\n\t},\n\tprompt: {\n\t\tlabel: \"Prompt me for the preset\",\n\t\tselect: (existingConfig) => prompt(existingConfig),\n\t},\n} as const satisfies Record<string, ContinuationOption>;\n\nasync function customize(existingConfig: cliConfig.RawConfig | undefined): Promise<PresetConfig> {\n\tconst siteUrl = registry.getSiteUrl(existingConfig ?? cliConfig.DEFAULT_CONFIG);\n\tconst createUrl = new URL(\"/create\", siteUrl).toString();\n\n\tconst spinner = p.spinner();\n\n\tspinner.start(`Opening ${color.bold(createUrl)} in your browser`);\n\n\tawait open(createUrl);\n\n\tspinner.stop(`Opened ${color.bold(createUrl)} in your browser`);\n\n\tconst cleanPreset = (preset: string) => {\n\t\tconst flag = \"--preset \";\n\t\tif (preset.startsWith(flag)) {\n\t\t\tpreset = preset.slice(flag.length);\n\t\t}\n\t\treturn preset;\n\t};\n\n\tconst code = await p.text({\n\t\tmessage:\n\t\t\t\"When you're done, paste the code back here and we'll use it to configure your project.\",\n\t\tplaceholder: \"Click on the `--preset <code>` button and paste the code here\",\n\t\tvalidate: (v) => {\n\t\t\tconst cleaned = cleanPreset(v ?? \"\");\n\n\t\t\tif (isValidPreset(cleaned)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\treturn \"Invalid preset code\";\n\t\t},\n\t});\n\n\tif (p.isCancel(code)) cancel();\n\n\t// we already validated the preset code so we can safely assert it's not null\n\treturn decodePreset(cleanPreset(code as string))!;\n}\n\nasync function presets(existingConfig: cliConfig.RawConfig | undefined) {\n\tconst choice = await p.select({\n\t\tmessage: \"Choose from a list of pre-configured presets\",\n\t\tinitialValue: existingConfig?.style ?? \"vega\",\n\t\toptions: entries(DEFAULT_PRESETS).map(([key, preset]) => ({\n\t\t\tlabel: `${preset.title} - ${preset.description}`,\n\t\t\tvalue: key,\n\t\t\thint: preset.hint,\n\t\t})),\n\t});\n\n\tif (p.isCancel(choice)) cancel();\n\n\treturn DEFAULT_PRESETS[choice as keyof typeof DEFAULT_PRESETS];\n}\n\nasync function prompt(existingConfig: cliConfig.RawConfig | undefined): Promise<PresetConfig> {\n\tconst choices = await p.group(\n\t\t{\n\t\t\tstyle: () =>\n\t\t\t\tp.select({\n\t\t\t\t\tmessage: \"Choose a style\",\n\t\t\t\t\tinitialValue: existingConfig?.style ?? cliConfig.DEFAULT_CONFIG.style,\n\t\t\t\t\toptions: entries(DEFAULT_PRESETS).map(([key, preset]) => ({\n\t\t\t\t\t\tlabel: preset.title,\n\t\t\t\t\t\tvalue: key,\n\t\t\t\t\t\thint: preset.hint,\n\t\t\t\t\t})),\n\t\t\t\t}),\n\t\t\tradius: () =>\n\t\t\t\tp.select({\n\t\t\t\t\tmessage: \"Choose a radius\",\n\t\t\t\t\tinitialValue: \"default\",\n\t\t\t\t\toptions: entries(PRESET_RADII).map(([key, radius]) => ({\n\t\t\t\t\t\tlabel: `${radius.label} ${radius.value}`,\n\t\t\t\t\t\tvalue: key,\n\t\t\t\t\t})),\n\t\t\t\t}),\n\t\t\tbaseColor: () =>\n\t\t\t\tp.select({\n\t\t\t\t\tmessage: \"Choose a base color\",\n\t\t\t\t\tinitialValue:\n\t\t\t\t\t\texistingConfig?.tailwind.baseColor ??\n\t\t\t\t\t\tcliConfig.DEFAULT_CONFIG.tailwind.baseColor,\n\t\t\t\t\toptions: entries(PRESET_BASE_COLORS).map(([key, baseColor]) => ({\n\t\t\t\t\t\tlabel: `${hex(baseColor.color)(\"■\")} ${baseColor.name}`,\n\t\t\t\t\t\tvalue: key,\n\t\t\t\t\t})),\n\t\t\t\t}),\n\t\t\ttheme: ({ results }) =>\n\t\t\t\tp.select({\n\t\t\t\t\tmessage: \"Choose a theme\",\n\t\t\t\t\tinitialValue: results.baseColor,\n\t\t\t\t\toptions: entries(PRESET_THEMES).map(([key, theme]) => ({\n\t\t\t\t\t\tlabel: `${hex(theme.color)(\"■\")} ${theme.name}`,\n\t\t\t\t\t\tvalue: key,\n\t\t\t\t\t})),\n\t\t\t\t}),\n\t\t\ticonLibrary: () =>\n\t\t\t\tp.select({\n\t\t\t\t\tmessage: \"Choose an icon library\",\n\t\t\t\t\tinitialValue:\n\t\t\t\t\t\texistingConfig?.iconLibrary ?? cliConfig.DEFAULT_CONFIG.iconLibrary,\n\t\t\t\t\toptions: entries(iconLibraries).map(([_key, iconLibrary]) => ({\n\t\t\t\t\t\tlabel: iconLibrary.title,\n\t\t\t\t\t\tvalue: iconLibrary.name,\n\t\t\t\t\t\thint: iconLibrary.packages.join(\", \"),\n\t\t\t\t\t})),\n\t\t\t\t}),\n\t\t\tfont: () =>\n\t\t\t\tp.select({\n\t\t\t\t\tmessage: \"Choose a font\",\n\t\t\t\t\tinitialValue: \"inter\",\n\t\t\t\t\toptions: PRESET_FONTS.map((font) => ({\n\t\t\t\t\t\tlabel: kebabToPascal(font),\n\t\t\t\t\t\tvalue: font,\n\t\t\t\t\t})),\n\t\t\t\t}),\n\t\t},\n\t\t{\n\t\t\tonCancel: () => cancel(),\n\t\t}\n\t);\n\n\treturn {\n\t\tstyle: choices.style as PresetConfig[\"style\"],\n\t\tbaseColor: choices.baseColor as PresetConfig[\"baseColor\"],\n\t\ttheme: choices.theme as PresetConfig[\"theme\"],\n\t\ticonLibrary: choices.iconLibrary,\n\t\tfont: choices.font as PresetConfig[\"font\"],\n\t\tradius: choices.radius as PresetConfig[\"radius\"],\n\t\tmenuColor: existingConfig?.menuColor ?? cliConfig.DEFAULT_CONFIG.menuColor,\n\t\tmenuAccent: existingConfig?.menuAccent ?? cliConfig.DEFAULT_CONFIG.menuAccent,\n\t};\n}\n"
  },
  {
    "path": "packages/cli/src/schema/index.ts",
    "content": "export * from \"../utils/registry/schema.js\";\n"
  },
  {
    "path": "packages/cli/src/utils/add-registry-items.ts",
    "content": "import path from \"node:path\";\nimport { existsSync, promises as fs } from \"node:fs\";\nimport color from \"picocolors\";\nimport merge from \"deepmerge\";\nimport * as p from \"@clack/prompts\";\nimport * as registry from \"./registry/index.js\";\nimport { highlight } from \"./colors.js\";\nimport { cancel, prettifyList } from \"./prompt-helpers.js\";\nimport { transformCss } from \"./transform-css.js\";\nimport type { ResolvedConfig } from \"./config/index.js\";\nimport {\n\ttransform,\n\ttransformImports,\n\ttransformIcons,\n\ttransformMenu,\n\ttransformStripTypes,\n} from \"./transformers/index.js\";\nimport { setupFonts, type Font } from \"./fonts.js\";\n\nconst STYLE_TYPES = [\"registry:style\", \"registry:theme\"];\n\ntype AddRegistryItemsProps = {\n\tselectedItems: string[];\n\tconfig: ResolvedConfig;\n\toverwrite: boolean;\n\tdeps: boolean;\n};\n\n// this logic is shared between the `add` and `init` commands\nexport async function addRegistryItems(opts: AddRegistryItemsProps) {\n\tconst dependencies = new Set<string>();\n\tconst devDependencies = new Set<string>();\n\tconst skippedDeps = new Set<string>();\n\tconst selectedItems = new Set<string>(opts.selectedItems);\n\tconst tasks: p.Task[] = [];\n\tconst cwd = opts.config.resolvedPaths.cwd;\n\tconst registryUrl = registry.getRegistryUrl(opts.config);\n\tconst fonts: Font[] = [];\n\tlet cssVars = {};\n\tlet css = {};\n\n\tconst registryIndex = await registry.getRegistryIndex(registryUrl);\n\tconst resolvedItems = await registry.resolveRegistryItems({\n\t\tregistryUrl,\n\t\tregistryIndex,\n\t\titems: Array.from(selectedItems),\n\t});\n\n\tconst itemsWithContent = await registry.fetchRegistryItems({\n\t\tbaseUrl: registryUrl,\n\t\titems: resolvedItems,\n\t});\n\n\tif (itemsWithContent.length === 0) cancel(\"Selected items not found.\");\n\n\t// build a list of existing items\n\tconst existingItems: string[] = [];\n\n\tfor (const item of itemsWithContent) {\n\t\tselectedItems.add(item.name);\n\t\tfor (const regDep of item.registryDependencies ?? []) {\n\t\t\tselectedItems.add(regDep);\n\t\t}\n\n\t\tconst itemExists = item.files?.some((file) => {\n\t\t\tconst filePath = registry.resolveItemFilePath(opts.config, item, file);\n\t\t\treturn existsSync(filePath);\n\t\t});\n\t\tif (itemExists) {\n\t\t\texistingItems.push(item.name);\n\t\t}\n\t}\n\n\t// prompt if the user wants to overwrite ALL files or individually\n\tif (opts.overwrite === false && existingItems.length > 0) {\n\t\tconst prettyList = prettifyList(existingItems);\n\t\tp.log.warn(\n\t\t\t`The following items ${color.bold(color.yellow(\"already exist\"))}:\\n${color.gray(prettyList)}`\n\t\t);\n\n\t\tconst overwrite = await p.confirm({\n\t\t\tmessage: `Would you like to ${color.bold(color.red(\"overwrite\"))} all existing files?`,\n\t\t\tactive: \"Yes, overwrite everything\",\n\t\t\tinactive: \"No, let me decide individually\",\n\t\t\tinitialValue: false,\n\t\t});\n\n\t\tif (p.isCancel(overwrite)) cancel();\n\n\t\topts.overwrite = overwrite;\n\t}\n\n\tfor (const item of itemsWithContent) {\n\t\t// `theme`s and `style`s do the same thing, because why not?\n\t\tif (!STYLE_TYPES.includes(item.type)) {\n\t\t\tconst aliasDir = registry.getItemAliasDir(opts.config, item.type);\n\t\t\tif (!existsSync(aliasDir)) {\n\t\t\t\tawait fs.mkdir(aliasDir, { recursive: true });\n\t\t\t}\n\n\t\t\tconst itemPath = path.relative(cwd, path.resolve(aliasDir, item.name));\n\n\t\t\tif (!opts.overwrite && existingItems.includes(item.name)) {\n\t\t\t\tif (selectedItems.has(item.name)) {\n\t\t\t\t\tp.log.warn(\n\t\t\t\t\t\t`Item ${highlight(item.name)} already exists at ${color.gray(itemPath)}`\n\t\t\t\t\t);\n\n\t\t\t\t\tconst overwrite = await p.confirm({\n\t\t\t\t\t\tmessage: `Would you like to ${color.bold(color.red(\"overwrite\"))} your existing ${highlight(item.name)} ${item.type}?`,\n\t\t\t\t\t});\n\t\t\t\t\tif (p.isCancel(overwrite)) cancel();\n\t\t\t\t\tif (overwrite === false) continue;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (opts.deps) {\n\t\t\titem.dependencies?.forEach((dep) => dependencies.add(dep));\n\t\t\titem.devDependencies?.forEach((dep) => devDependencies.add(dep));\n\t\t} else {\n\t\t\titem.dependencies?.forEach((dep) => skippedDeps.add(dep));\n\t\t\titem.devDependencies?.forEach((dep) => skippedDeps.add(dep));\n\t\t}\n\n\t\tif (item.type === \"registry:font\") {\n\t\t\tfonts.push({\n\t\t\t\tname: item.name,\n\t\t\t\t...item.font,\n\t\t\t});\n\t\t}\n\n\t\ttasks.push({\n\t\t\ttitle:\n\t\t\t\titem.name === \"init\"\n\t\t\t\t\t? \"Setting up shadcn-svelte base configuration\"\n\t\t\t\t\t: `Adding ${highlight(item.name)}`,\n\t\t\t// @ts-expect-error this is intentional since we don't want to return a string during `init`\n\t\t\tasync task() {\n\t\t\t\tfor (const file of item.files ?? []) {\n\t\t\t\t\tconst filePath = registry.resolveItemFilePath(opts.config, item, file);\n\n\t\t\t\t\tconst {\n\t\t\t\t\t\tcontent,\n\t\t\t\t\t\tdependencies: transformDependencies,\n\t\t\t\t\t\tdevDependencies: transformDevDependencies,\n\t\t\t\t\t\tfilePath: transformFilePath,\n\t\t\t\t\t} = await transform(\n\t\t\t\t\t\t{ content: file.content, filePath: filePath, config: opts.config },\n\t\t\t\t\t\t[\n\t\t\t\t\t\t\ttransformImports,\n\t\t\t\t\t\t\ttransformIcons,\n\t\t\t\t\t\t\ttransformMenu,\n\t\t\t\t\t\t\t!opts.config.typescript && transformStripTypes,\n\t\t\t\t\t\t]\n\t\t\t\t\t);\n\n\t\t\t\t\ttransformDependencies?.forEach((dep) => dependencies.add(dep));\n\t\t\t\t\ttransformDevDependencies?.forEach((dep) => devDependencies.add(dep));\n\n\t\t\t\t\tconst dir = path.parse(transformFilePath).dir;\n\t\t\t\t\tif (!existsSync(dir)) {\n\t\t\t\t\t\tawait fs.mkdir(dir, { recursive: true });\n\t\t\t\t\t}\n\n\t\t\t\t\tawait fs.writeFile(transformFilePath, content, \"utf8\");\n\t\t\t\t}\n\n\t\t\t\tif (item.cssVars) {\n\t\t\t\t\tcssVars = merge(cssVars, item.cssVars);\n\t\t\t\t}\n\t\t\t\tif (item.css) {\n\t\t\t\t\tcss = merge(css, item.css);\n\t\t\t\t}\n\n\t\t\t\tif (item.name !== \"init\") {\n\t\t\t\t\tif (STYLE_TYPES.includes(item.type)) {\n\t\t\t\t\t\tconst itemPath = path.relative(cwd, opts.config.resolvedPaths.tailwindCss);\n\t\t\t\t\t\treturn `${highlight(item.name)} installed at ${color.gray(itemPath)}`;\n\t\t\t\t\t}\n\t\t\t\t\tconst aliasDir = registry.getItemAliasDir(opts.config, item.type);\n\t\t\t\t\tconst itemPath = path.relative(cwd, path.resolve(aliasDir, item.name));\n\t\t\t\t\treturn `${highlight(item.name)} installed at ${color.gray(itemPath)}`;\n\t\t\t\t}\n\t\t\t},\n\t\t});\n\t}\n\n\tawait p.tasks(tasks);\n\n\tconst {\n\t\tcss: fontsCss,\n\t\tcssVars: fontsCssVars,\n\t\tdependencies: fontsDependencies,\n\t} = setupFonts(fonts);\n\n\tcss = merge(css, fontsCss);\n\tcssVars = merge(cssVars, fontsCssVars);\n\tfontsDependencies.forEach((dep) => devDependencies.add(dep));\n\n\tif (Object.keys(cssVars).length || Object.keys(css).length) {\n\t\tconst cssPath = opts.config.resolvedPaths.tailwindCss;\n\t\tconst relative = path.relative(cwd, cssPath);\n\n\t\tif (!opts.overwrite) {\n\t\t\tconst overwrite = await p.confirm({\n\t\t\t\tmessage: `A new ${highlight(\"style\")} is ready to be installed. Existing CSS variables may be ${color.bold(color.red(\"overwritten\"))} in ${highlight(relative)}. Continue?`,\n\t\t\t\tinitialValue: true,\n\t\t\t});\n\t\t\tif (p.isCancel(overwrite)) cancel();\n\n\t\t\topts.overwrite = overwrite;\n\t\t}\n\n\t\tawait p.tasks([\n\t\t\t{\n\t\t\t\ttitle: \"Updating stylesheet\",\n\t\t\t\tenabled: opts.overwrite,\n\t\t\t\tasync task() {\n\t\t\t\t\tconst cssSource = await fs.readFile(cssPath, \"utf8\");\n\n\t\t\t\t\tconst modifiedCss = transformCss(cssSource, { css, cssVars });\n\t\t\t\t\tawait fs.writeFile(cssPath, modifiedCss, \"utf8\");\n\n\t\t\t\t\treturn `${highlight(\"Stylesheet\")} updated at ${color.dim(relative)}`;\n\t\t\t\t},\n\t\t\t},\n\t\t]);\n\t}\n\n\treturn {\n\t\tskippedDeps,\n\t\tdependencies,\n\t\tdevDependencies,\n\t};\n}\n"
  },
  {
    "path": "packages/cli/src/utils/auto-detect.ts",
    "content": "import fs from \"node:fs\";\nimport path from \"node:path\";\nimport * as p from \"@clack/prompts\";\nimport * as find from \"empathic/find\";\nimport ignore, { type Ignore } from \"ignore\";\nimport { AGENTS, detect, getUserAgent, type Agent, type AgentName } from \"package-manager-detector\";\nimport { cancel } from \"./prompt-helpers.js\";\n\nconst STYLESHEETS = [\"app.css\", \"main.css\", \"globals.css\", \"global.css\", \"layout.css\"];\n\n// commonly ignored\nconst IGNORE = [\"node_modules\", \".git\", \".svelte-kit\"];\n\n/**\n * Returns the auto-detected filepaths for the global css file and the typescript config.\n */\nexport function detectConfigs(cwd: string, config?: { relative: boolean }) {\n\tlet cssPath: string | undefined;\n\tconst paths = findFiles(cwd);\n\tfor (const filepath of paths) {\n\t\tconst filename = path.basename(filepath);\n\t\tif (STYLESHEETS.includes(filename)) {\n\t\t\tcssPath = config?.relative ? path.relative(cwd, filepath) : filepath;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tconst tsconfigPath = findTSConfig(cwd);\n\tconst resolvedTsconfigPath =\n\t\ttsconfigPath && config?.relative ? path.relative(cwd, tsconfigPath) : tsconfigPath;\n\n\treturn {\n\t\tcssPath,\n\t\ttsconfigPath: resolvedTsconfigPath,\n\t};\n}\n\n/**\n * Walks down the directory tree, returning file paths that are _not_ ignored from their respective `.gitignore`'s\n */\nfunction findFiles(dirPath: string) {\n\treturn walkDir(dirPath, []);\n}\n\nfunction walkDir(dirPath: string, ignores: { dirPath: string; ig: Ignore }[]): string[] {\n\tconst paths: string[] = [];\n\tconst files = fs.readdirSync(dirPath, { withFileTypes: true });\n\tconst ignorePath = path.join(dirPath, \".gitignore\");\n\tif (fs.existsSync(ignorePath)) {\n\t\tconst gitignore = fs.readFileSync(ignorePath, { encoding: \"utf8\" });\n\t\tconst ig = ignore().add(gitignore);\n\t\tignores.push({ dirPath, ig });\n\t}\n\n\tfor (const file of files) {\n\t\tconst filepath = path.join(dirPath, file.name);\n\t\t// ignore any of the common suspects\n\t\tif (IGNORE.some((name) => dirPath.includes(name))) continue;\n\n\t\t// check if file is ignored\n\t\tconst ignored = ignores.some((parent) => {\n\t\t\t// make the path relative to the parent\n\t\t\tconst relative = path.relative(parent.dirPath, filepath);\n\t\t\tif (ignore.isPathValid(relative) === false) return false;\n\n\t\t\treturn parent.ig.ignores(relative);\n\t\t});\n\t\tif (ignored) continue;\n\n\t\tif (file.isFile()) paths.push(filepath);\n\t\tif (file.isDirectory()) paths.push(...walkDir(filepath, ignores));\n\t}\n\n\treturn paths;\n}\n\n/**\n * Returns the absolute path to the nearest typescript config file.\n */\nfunction findTSConfig(cwd: string): string | undefined {\n\tfor (const type of [\"tsconfig.json\", \"jsconfig.json\"] as const) {\n\t\tconst path = find.up(type, { cwd });\n\t\tif (path) return path;\n\t}\n}\n\nconst AGENT_NAMES = AGENTS.filter((agent) => !agent.includes(\"@\")) as AgentName[];\ntype Options = Array<{ value: Agent | undefined; label: Agent | \"None\" }>;\nexport async function detectPM(cwd: string, prompt: boolean): Promise<Agent | undefined> {\n\tconst agent = (await detect({ cwd }))?.agent;\n\n\t// prompt for package manager\n\tif (!agent && prompt) {\n\t\tconst options: Options = AGENT_NAMES.map((pm) => ({ value: pm, label: pm }));\n\t\toptions.unshift({ label: \"None\", value: undefined });\n\n\t\tconst userAgent = getUserAgent() ?? undefined; // replaces `null` for `undefined`\n\t\tconst pm = await p.select({\n\t\t\toptions,\n\t\t\tinitialValue: userAgent,\n\t\t\tmessage: \"Which package manager do you want to use?\",\n\t\t});\n\t\tif (p.isCancel(pm)) {\n\t\t\tcancel();\n\t\t}\n\n\t\treturn pm;\n\t}\n\n\treturn agent;\n}\n"
  },
  {
    "path": "packages/cli/src/utils/colors.ts",
    "content": "import color from \"picocolors\";\n\nexport const highlight = (str: string) => color.bold(color.cyan(str));\n\n/**\n * Parses a hex color string to RGB. Supports 6-digit (#DEADED, DEADED) and 3-digit (#F00, F00) formats.\n */\nfunction hexToRgb(hex: string): [number, number, number] {\n\tconst normalized = hex.startsWith(\"#\") ? hex.slice(1) : hex;\n\tconst match = normalized.match(/^([a-f\\d]{6}|[a-f\\d]{3})$/i)?.[1];\n\tif (!match) return [0, 0, 0];\n\n\tconst colorString = match.length === 3 ? [...match].map((c) => c + c).join(\"\") : match;\n\tconst integer = Number.parseInt(colorString, 16);\n\treturn [(integer >> 16) & 0xff, (integer >> 8) & 0xff, integer & 0xff];\n}\n\n/** Applies truecolor foreground from a hex value. Use when picocolors doesn't support hex. */\nexport function hex(hexValue: string) {\n\tconst [r, g, b] = hexToRgb(hexValue);\n\tconst open = `\\x1b[38;2;${r};${g};${b}m`;\n\tconst close = \"\\x1b[39m\";\n\treturn (str: string) => (color.isColorSupported ? `${open}${str}${close}` : str);\n}\n\n/** Applies truecolor background from a hex value. Use when picocolors doesn't support hex. */\nexport function bgHex(hexValue: string) {\n\tconst [r, g, b] = hexToRgb(hexValue);\n\tconst open = `\\x1b[48;2;${r};${g};${b}m`;\n\tconst close = \"\\x1b[49m\";\n\treturn (str: string) => (color.isColorSupported ? `${open}${str}${close}` : str);\n}\n"
  },
  {
    "path": "packages/cli/src/utils/config/index.ts",
    "content": "export * from \"./schema.js\";\nexport * from \"./utils.js\";\n"
  },
  {
    "path": "packages/cli/src/utils/config/schema.ts",
    "content": "// !! BROWSER SAFE !!\n\nimport { z } from \"zod\";\nimport { SITE_BASE_URL } from \"../../constants.js\";\nimport {\n\tPRESET_STYLES,\n\tPRESET_BASE_COLOR_KEYS,\n\tPRESET_THEME_KEYS,\n\tPRESET_MENU_ACCENTS,\n\tPRESET_MENU_COLORS,\n} from \"../../preset/index.js\";\nimport { PRESET_ICON_LIBRARIES } from \"../../preset/preset.js\";\n\nexport const STYLES = PRESET_STYLES;\nexport type StyleName = (typeof STYLES)[number];\nexport const BASE_COLORS = PRESET_BASE_COLOR_KEYS;\nexport type BaseColorName = (typeof BASE_COLORS)[number];\nexport const THEMES = PRESET_THEME_KEYS;\nexport type ThemeName = (typeof THEMES)[number];\nexport const MENU_ACCENTS = PRESET_MENU_ACCENTS;\nexport type MenuAccent = (typeof MENU_ACCENTS)[number];\nexport const MENU_COLORS = PRESET_MENU_COLORS;\nexport type MenuColor = (typeof MENU_COLORS)[number];\n\nexport const DEFAULT_CONFIG = {\n\t$schema: `${SITE_BASE_URL}/schema.json`,\n\taliases: {\n\t\tlib: \"$lib\",\n\t\tutils: \"$lib/utils\",\n\t\thooks: \"$lib/hooks\",\n\t\tcomponents: \"$lib/components\",\n\t\tui: \"$lib/components/ui\",\n\t},\n\ttailwind: {\n\t\tbaseColor: \"slate\",\n\t\tcss: \"src/app.css\",\n\t},\n\ttypescript: true,\n\tregistry: `${SITE_BASE_URL}/registry`,\n\tstyle: \"nova\",\n\ticonLibrary: \"lucide\",\n\tmenuColor: \"default\",\n\tmenuAccent: \"subtle\",\n} as const;\n\nexport const stripTrailingSlash = (s: string) => (s.endsWith(\"/\") ? s.slice(0, -1) : s);\n\nconst aliasSchema = (alias: string) => z.string(`Missing aliases.${alias} alias`);\n\nconst baseConfigSchema = z.object({\n\t$schema: z.string().optional(),\n\ttailwind: z.object(\n\t\t{\n\t\t\tcss: z.string(`Missing tailwind.css path`),\n\t\t\tbaseColor: z.string(`Missing tailwind.baseColor field`),\n\t\t},\n\t\t`Missing tailwind object`\n\t),\n\taliases: z.object(\n\t\t{\n\t\t\tcomponents: aliasSchema(\"components\"),\n\t\t\tutils: aliasSchema(\"utils\"),\n\t\t},\n\t\t`Missing aliases object`\n\t),\n\ttypescript: z\n\t\t.union(\n\t\t\t[\n\t\t\t\tz.boolean(),\n\t\t\t\tz.object({\n\t\t\t\t\t// config: z.string(`Missing path to ${color.bold(\"tsconfig/jsconfig\")}`),\n\t\t\t\t\t// Not sure why, but I can't get the above error msg to appear during zod parsing\n\t\t\t\t\t// when `typescript` is set to an empty object: `\"typescript\": {}`\n\t\t\t\t\t// Possibly a zod bug with unions?\n\t\t\t\t\tconfig: z.string(),\n\t\t\t\t}),\n\t\t\t],\n\t\t\t`Invalid typescript field. Must either be 'true', 'false', or '{ \"config\": \"path/to/tsconfig.json\" }'`\n\t\t)\n\t\t.default(DEFAULT_CONFIG.typescript),\n});\n\nconst originalConfigSchema = baseConfigSchema.extend({ style: z.string().optional() });\n\nexport const newConfigSchema = baseConfigSchema.extend({\n\taliases: baseConfigSchema.shape.aliases.extend({\n\t\tui: aliasSchema(\"ui\").default(DEFAULT_CONFIG.aliases.ui),\n\t\thooks: aliasSchema(\"hooks\").default(DEFAULT_CONFIG.aliases.hooks),\n\t\tlib: aliasSchema(\"lib\").default(DEFAULT_CONFIG.aliases.lib),\n\t}),\n\tregistry: z.string().default(DEFAULT_CONFIG.registry),\n\t// design system\n\tstyle: z.string().optional(),\n\ticonLibrary: z.enum(PRESET_ICON_LIBRARIES).optional(),\n\tmenuColor: z.enum(MENU_COLORS).optional(),\n\tmenuAccent: z.enum(MENU_ACCENTS).optional(),\n});\n\nexport type RawConfig = z.infer<typeof rawConfigSchema>;\n// combines the old with the new\nexport const rawConfigSchema = z.object({\n\t...originalConfigSchema.shape,\n\t...newConfigSchema.shape,\n\taliases: z.object({\n\t\t...originalConfigSchema.shape.aliases.shape,\n\t\t...newConfigSchema.shape.aliases.shape,\n\t}),\n});\n\nexport type ResolvedConfig = z.infer<typeof resolvedConfigSchema>;\nexport const resolvedConfigSchema = rawConfigSchema.extend({\n\tsveltekit: z.boolean(),\n\tresolvedPaths: z.object({\n\t\tcwd: z.string(),\n\t\ttailwindCss: z.string(),\n\t\tutils: z.string(),\n\t\tcomponents: z.string(),\n\t\thooks: z.string(),\n\t\tui: z.string(),\n\t\tlib: z.string(),\n\t}),\n\tstyle: z.string().default(DEFAULT_CONFIG.style),\n\ticonLibrary: z.enum(PRESET_ICON_LIBRARIES).default(DEFAULT_CONFIG.iconLibrary),\n\tmenuColor: z.enum(MENU_COLORS).default(DEFAULT_CONFIG.menuColor),\n\tmenuAccent: z.enum(MENU_ACCENTS).default(DEFAULT_CONFIG.menuAccent),\n});\n"
  },
  {
    "path": "packages/cli/src/utils/config/utils.ts",
    "content": "import color from \"picocolors\";\nimport { getTsconfig, type TsConfigResult } from \"get-tsconfig\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nimport { z } from \"zod\";\nimport { highlight } from \"../colors.js\";\nimport { SITE_BASE_URL } from \"../../constants.js\";\nimport { ConfigError, error } from \"../errors.js\";\nimport { resolveImportAlias } from \"../resolve-imports.js\";\nimport * as project from \"../project.js\";\nimport * as p from \"@clack/prompts\";\nimport { cancel } from \"../prompt-helpers.js\";\nimport {\n\tDEFAULT_CONFIG,\n\tnewConfigSchema,\n\trawConfigSchema,\n\tresolvedConfigSchema,\n\tstripTrailingSlash,\n\ttype RawConfig,\n\ttype ResolvedConfig,\n} from \"./schema.js\";\n\nexport async function getConfig(cwd: string): Promise<ResolvedConfig | undefined> {\n\tconst config = loadConfig(cwd);\n\tif (!config) return;\n\n\treturn await resolveConfig(cwd, config);\n}\n\nexport async function resolveConfig(cwd: string, config: RawConfig): Promise<ResolvedConfig> {\n\t// if it's a SvelteKit project, run sync so that the aliases are always up to date\n\tawait project.syncSvelteKit(cwd);\n\n\tconst tsconfig = resolveTSConfig(cwd, config);\n\n\tconst tsconfigFilename = path.basename(tsconfig.path);\n\tif (!tsconfig.config.compilerOptions?.paths) {\n\t\tthrow error(\n\t\t\t`Missing ${highlight(\"paths\")} field in your ${highlight(tsconfigFilename)} for path aliases. See: ${color.underline(`${SITE_BASE_URL}/docs/installation/manual#configure-path-aliases`)}`\n\t\t);\n\t}\n\n\tconst aliasError = (type: string, alias: string) =>\n\t\tnew ConfigError(\n\t\t\t`Invalid import alias found: (${highlight(`\"${type}\": \"${alias}\"`)}) in ${highlight(\"components.json\")}.\n   - Import aliases ${color.underline(\"must use\")} existing path aliases defined in your ${highlight(tsconfigFilename)} (e.g. \"${type}\": \"$lib/${type}\").\n   - See: ${color.underline(`${SITE_BASE_URL}/docs/installation/manual#configure-path-aliases`)}.`\n\t\t);\n\n\tconst resolvedPaths: Record<string, string> = {\n\t\tcwd,\n\t\ttailwindCss: path.resolve(cwd, config.tailwind.css),\n\t};\n\n\tfor (const [alias, aliasPath] of Object.entries(config.aliases)) {\n\t\tconst resolvedPath = resolveImportAlias({ cwd, importPath: aliasPath, tsconfig });\n\t\tif (!resolvedPath) throw aliasError(alias, aliasPath);\n\t\tresolvedPaths[alias] = path.normalize(resolvedPath);\n\t}\n\n\tconst sveltekit = project.isUsingSvelteKit(cwd);\n\n\treturn resolvedConfigSchema.parse({ ...config, sveltekit, resolvedPaths });\n}\n\nexport function loadConfig(cwd: string): RawConfig | undefined {\n\tconst configPath = path.resolve(cwd, \"components.json\");\n\tif (!fs.existsSync(configPath)) return;\n\n\ttry {\n\t\tconst configResult = fs.readFileSync(configPath, { encoding: \"utf8\" });\n\t\tconst config = JSON.parse(configResult);\n\t\treturn parseRawConfig(config);\n\t} catch (e) {\n\t\tif (!(e instanceof z.ZodError)) throw e;\n\t\tconst formatted = z.prettifyError(e);\n\t\tthrow new ConfigError(\n\t\t\t`Invalid configuration found in ${highlight(configPath)}.\\n\\n${formatted}`\n\t\t);\n\t}\n}\n\nexport function parseRawConfig(config: unknown) {\n\tconst parsed = rawConfigSchema.parse(config);\n\n\t// clean aliases\n\tparsed.aliases = {\n\t\tcomponents: cleanAlias(parsed.aliases.components),\n\t\tutils: cleanAlias(parsed.aliases.utils),\n\t\tui: cleanAlias(parsed.aliases.ui),\n\t\thooks: cleanAlias(parsed.aliases.hooks),\n\t\tlib: cleanAlias(parsed.aliases.lib),\n\t};\n\n\treturn parsed;\n}\n\nexport function cleanAlias(alias: string) {\n\treturn stripTrailingSlash(alias.replace(/[\\u{0080}-\\u{FFFF}]/gu, \"\"));\n}\n\nexport function validateImportAlias(opts: Parameters<typeof resolveImportAlias>[0]) {\n\tconst resolvedPath = resolveImportAlias(opts);\n\tif (resolvedPath !== undefined) return;\n\n\treturn `\"${color.bold(opts.importPath)}\" does not use an existing path alias defined in your ${color.bold(path.basename(opts.tsconfig.path))}. See: ${color.underline(`${SITE_BASE_URL}/docs/installation/manual#configure-path-aliases`)}`;\n}\n\ntype PromptForAliasesOptions = {\n\ttsconfig: TsConfigResult;\n\tcwd: string;\n\tcomponentsAlias?: string | undefined;\n\texistingConfig: RawConfig | undefined;\n\tutilsAlias?: string | undefined;\n\tlibAlias?: string | undefined;\n\thooksAlias?: string | undefined;\n\tuiAlias?: string | undefined;\n};\nexport async function promptForAliases(options: PromptForAliasesOptions) {\n\tconst libAlias = await promptAlias(\"lib\", \"$lib\", options);\n\tconst componentAlias = await promptAlias(\"components\", `${libAlias}/components`, options);\n\tconst uiAlias = await promptAlias(\"ui\", `${componentAlias}/ui`, options);\n\tconst utilsAlias = await promptAlias(\"utils\", `${libAlias}/utils`, options);\n\tconst hooksAlias = await promptAlias(\"hooks\", `${libAlias}/hooks`, options);\n\n\treturn {\n\t\tlibAlias,\n\t\tcomponentAlias,\n\t\tuiAlias,\n\t\tutilsAlias,\n\t\thooksAlias,\n\t};\n}\n\nasync function promptAlias(\n\talias: keyof RawConfig[\"aliases\"],\n\tinitial: string,\n\toptions: PromptForAliasesOptions\n) {\n\tlet path = options[`${alias}Alias`];\n\tif (path === undefined) {\n\t\tconst input = await p.text({\n\t\t\tmessage: `Configure the import alias for ${highlight(alias)}:`,\n\t\t\tinitialValue: options.existingConfig?.aliases[alias] ?? initial,\n\t\t\tplaceholder: DEFAULT_CONFIG.aliases[alias],\n\t\t\tvalidate: (value) =>\n\t\t\t\tvalidateImportAlias({\n\t\t\t\t\tcwd: options.cwd,\n\t\t\t\t\ttsconfig: options.tsconfig,\n\t\t\t\t\timportPath: value ?? \"\",\n\t\t\t\t}),\n\t\t});\n\n\t\tif (p.isCancel(input)) cancel();\n\n\t\tpath = stripTrailingSlash(input as string);\n\t}\n\treturn path;\n}\n\nexport function writeConfig(cwd: string, config: RawConfig): void {\n\tconst targetPath = path.resolve(cwd, \"components.json\");\n\tconst conf = newConfigSchema.parse(config, { jitless: true }); // `jitless` to retain the property order\n\tfs.writeFileSync(targetPath, JSON.stringify(conf, null, \"\\t\") + \"\\n\", \"utf8\");\n}\n\ntype TSConfigName = \"tsconfig.json\" | \"jsconfig.json\" | (string & {});\nexport function resolveTSConfig(cwd: string, config: RawConfig) {\n\tlet tsconfig;\n\tlet tsconfigType: TSConfigName;\n\tif (typeof config.typescript === \"object\") {\n\t\tconst tsconfigPath = path.resolve(cwd, config.typescript.config);\n\t\ttsconfigType = path.basename(tsconfigPath);\n\t\ttsconfig = getTsconfig(tsconfigPath, tsconfigType);\n\t} else {\n\t\ttsconfigType = config.typescript ? \"tsconfig.json\" : \"jsconfig.json\";\n\t\ttsconfig = getTsconfig(path.resolve(cwd, \"package.json\"), tsconfigType);\n\t}\n\n\tif (!tsconfig) {\n\t\tlet msg = `Failed to find a ${highlight(tsconfigType)} file. `;\n\n\t\tif (config.typescript)\n\t\t\tmsg += `See: ${color.underline(`${SITE_BASE_URL}/docs/components-json#typescript`)}`;\n\t\telse\n\t\t\tmsg += `See: ${color.underline(`${SITE_BASE_URL}/docs/installation#opt-out-of-typescript`)}`;\n\n\t\tthrow error(msg);\n\t}\n\n\treturn tsconfig;\n}\n"
  },
  {
    "path": "packages/cli/src/utils/css.ts",
    "content": "export function createGlobalCssFile(): string {\n\treturn `\n@import \"tailwindcss\";\n\n@custom-variant dark (&:is(.dark *));\n`;\n}\n"
  },
  {
    "path": "packages/cli/src/utils/errors.ts",
    "content": "// !! BROWSER SAFE !!\n\nexport function error(msg: string, cause?: unknown) {\n\treturn new CLIError(msg, { cause });\n}\n\nexport class CLIError extends Error {\n\tname = \"CLI Error\";\n}\n\nexport class ConfigError extends Error {\n\tname = \"Config Error\";\n}\n"
  },
  {
    "path": "packages/cli/src/utils/fonts.ts",
    "content": "import type { CssSchema, CssVars, RegistryFont } from \"./registry/schema.js\";\n\nexport type Font = RegistryFont & { name: string };\n\nexport function setupFonts(fonts: Font[]): {\n\tcss: CssSchema;\n\tcssVars: CssVars;\n\tdependencies: string[];\n} {\n\tif (fonts.length === 0) return { css: {}, cssVars: {}, dependencies: [] };\n\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tconst css: Record<string, any> = {};\n\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\tconst cssVars: Record<string, any> = {};\n\tconst dependencies: string[] = [];\n\n\tfor (const font of fonts) {\n\t\tconst fontName = font.name.replace(\"font-\", \"\");\n\t\tconst fontSourceDependency = font.dependency ?? `@fontsource-variable/${fontName}`;\n\t\tdependencies.push(fontSourceDependency);\n\t\tcss[`@import \"${fontSourceDependency}\"`] = {};\n\t\tcssVars.theme ??= {};\n\t\tcssVars.theme[font.variable] = font.family;\n\t}\n\n\tconst groups = new Map<string, string[]>();\n\tfor (const font of fonts) {\n\t\tconst selector = font.selector ?? \"html\";\n\t\tconst cls = font.variable.replace(\"--\", \"\");\n\t\tif (!groups.has(selector)) {\n\t\t\tgroups.set(selector, []);\n\t\t}\n\t\tgroups.get(selector)!.push(cls);\n\t}\n\n\tcss[\"@layer base\"] ??= {};\n\n\tfor (const [selector, classes] of Array.from(groups.entries())) {\n\t\tconst fontClasses = classes.join(\" \");\n\t\tcss[\"@layer base\"][selector] ??= {};\n\t\t// Find existing @apply key and merge, or create new.\n\t\tconst existingApplyKey = Object.keys(css[\"@layer base\"][selector]).find((key) =>\n\t\t\tkey.startsWith(\"@apply \")\n\t\t);\n\t\tif (existingApplyKey) {\n\t\t\tdelete css[\"@layer base\"][selector][existingApplyKey];\n\t\t\tcss[\"@layer base\"][selector][`${existingApplyKey} ${fontClasses}`] = {};\n\t\t} else {\n\t\t\tcss[\"@layer base\"][selector][`@apply ${fontClasses}`] = {};\n\t\t}\n\t}\n\n\treturn { css, cssVars, dependencies };\n}\n"
  },
  {
    "path": "packages/cli/src/utils/get-env-proxy.ts",
    "content": "import process from \"node:process\";\n\nexport function getEnvProxy(): string | undefined {\n\tconst { env } = process;\n\treturn (\n\t\tenv.HTTP_PROXY ||\n\t\tenv.http_proxy ||\n\t\tenv.HTTPS_PROXY ||\n\t\tenv.https_proxy ||\n\t\tenv.npm_config_proxy ||\n\t\tenv.npm_config_https_proxy\n\t);\n}\n"
  },
  {
    "path": "packages/cli/src/utils/get-package-info.ts",
    "content": "import path from \"node:path\";\nimport fs from \"node:fs\";\nimport { fileURLToPath } from \"node:url\";\nimport { createRequire } from \"node:module\";\nimport type { PackageJson } from \"type-fest\";\n\nexport function getCLIPackageInfo(): PackageJson {\n\tconst packageJsonPath = getPackageFilePath(\"../package.json\");\n\treturn readJSONSync(packageJsonPath) as PackageJson;\n}\n\nfunction getPackageFilePath(filePath: string) {\n\tconst distPath = fileURLToPath(new URL(`.`, import.meta.url));\n\n\treturn path.resolve(distPath, filePath);\n}\n\nexport function readJSONSync(path: string): unknown {\n\tconst content = fs.readFileSync(path, { encoding: \"utf8\" });\n\treturn JSON.parse(content);\n}\n\nexport function getDependencyPackageInfo(cwd: string, depName: string) {\n\tconst require = createRequire(path.resolve(cwd, \"noop.js\"));\n\n\tconst paths = require.resolve.paths(depName);\n\tif (!paths) return;\n\n\tlet pkgPath: string | undefined;\n\tfor (const nodeModulesPath of paths) {\n\t\tconst check = path.join(nodeModulesPath, depName, \"package.json\");\n\t\tif (fs.existsSync(check)) {\n\t\t\tpkgPath = check;\n\t\t\tbreak;\n\t\t}\n\t}\n\n\tif (!pkgPath) return;\n\n\tconst json = fs.readFileSync(pkgPath, \"utf8\");\n\n\treturn { pkg: JSON.parse(json) as PackageJson, path: pkgPath };\n}\n"
  },
  {
    "path": "packages/cli/src/utils/install-deps.ts",
    "content": "import semver from \"semver\";\nimport * as p from \"@clack/prompts\";\nimport { detectPM } from \"./auto-detect.js\";\nimport * as project from \"./project.js\";\nimport { exec } from \"tinyexec\";\nimport { resolveCommand } from \"package-manager-detector\";\nimport { error } from \"./errors.js\";\n\ntype InstallOptions = {\n\tdependencies: string[];\n\tdevDependencies: string[];\n\tcwd: string;\n\tprompt: boolean;\n};\nexport async function installDependencies({\n\tcwd,\n\tprompt,\n\tdependencies,\n\tdevDependencies,\n}: InstallOptions): Promise<void> {\n\tconst pm = await detectPM(cwd, prompt);\n\tif (!pm) return;\n\n\t// Deno requires the `npm:` specifier\n\tconst pkgSpecifier = pm === \"deno\" ? \"npm:\" : \"\";\n\tconst pkg = project.getPackageInfo(cwd);\n\tconst projectDeps = { ...pkg.dependencies, ...pkg.devDependencies };\n\n\tconst validateDep = (dep: string) => {\n\t\tconst { name, version } = parseDependency(dep);\n\t\tconst depVersion = semver.coerce(projectDeps[name]);\n\t\tif (depVersion && semver.satisfies(depVersion, version, { loose: true })) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\treturn `${pkgSpecifier}${name}@${version}`;\n\t};\n\n\tconst devDeps = devDependencies.map(validateDep).filter((d) => d !== undefined);\n\tconst addDevDeps = resolveCommand(pm, \"add\", [\"-D\", ...devDeps]);\n\n\tconst deps = dependencies.map(validateDep).filter((d) => d !== undefined);\n\tconst addDeps = resolveCommand(pm, \"add\", deps);\n\n\tif (!addDevDeps || !addDeps) throw error(`Could not detect a package manager in ${cwd}.`);\n\n\tconst task = p.taskLog({\n\t\ttitle: `Installing dependencies with ${pm}...`,\n\t\tlimit: Math.ceil(process.stdout.rows / 2),\n\t\tspacing: 0,\n\t\tretainLog: true,\n\t});\n\n\tconst install = (cmd: string, args: string[]) => {\n\t\tconst proc = exec(cmd, args, { throwOnError: true, nodeOptions: { cwd } });\n\n\t\tproc.process?.stdout?.on(\"data\", (data) => task.message(data.toString(), { raw: true }));\n\t\tproc.process?.stderr?.on(\"data\", (data) => task.message(data.toString(), { raw: true }));\n\n\t\treturn proc;\n\t};\n\n\ttry {\n\t\tif (deps.length > 0) {\n\t\t\tawait install(addDeps.command, addDeps.args);\n\t\t}\n\n\t\tif (devDeps.length > 0) {\n\t\t\tawait install(addDevDeps.command, addDevDeps.args);\n\t\t}\n\n\t\ttask.success(\"Successfully installed dependencies\");\n\t} catch {\n\t\ttask.error(\"Failed to install dependencies\");\n\t\tp.cancel(\"Operation failed.\");\n\t\tprocess.exit(2);\n\t}\n}\n\nexport function parseDependency(dep: string) {\n\tlet name: string | undefined = dep;\n\tlet version: string | undefined = \"latest\";\n\n\tif (dep.startsWith(\"@\")) {\n\t\tif (dep.includes(\"@\", 1)) {\n\t\t\t[, name, version] = dep.split(/(.*)(?:@)(.*)/);\n\t\t}\n\t} else {\n\t\tif (dep.includes(\"@\", 1)) {\n\t\t\t[name, version] = dep.split(\"@\");\n\t\t}\n\t}\n\n\tif (!name || !version) throw error(`Failed to parse dependency: ${dep}`);\n\n\treturn { name, version };\n}\n"
  },
  {
    "path": "packages/cli/src/utils/preconditions.ts",
    "content": "import * as semver from \"semver\";\nimport color from \"picocolors\";\nimport * as p from \"@clack/prompts\";\nimport { getDependencyPackageInfo } from \"./get-package-info.js\";\nimport * as project from \"./project.js\";\nimport * as cliConfig from \"./config/index.js\";\nimport { CLIError, error } from \"./errors.js\";\nimport { highlight } from \"./colors.js\";\nimport { SITE_BASE_URL, TW3_SITE_BASE_URL } from \"../constants.js\";\n\n// accepts either a `RawConfig` or `ResolvedConfig`\ntype PreconditionOptions<Config extends cliConfig.RawConfig> = {\n\tcwd: string;\n\tconfig: Config;\n\tskipPreflight: boolean;\n};\n\n/** Checks preconditions and updates the config if necessary. */\nexport function checkPreconditions<Config extends cliConfig.RawConfig>({\n\tcwd,\n\tconfig,\n\tskipPreflight,\n}: PreconditionOptions<Config>): Config {\n\tconst sveltePkg = getDependencyPackageInfo(cwd, \"svelte\")?.pkg;\n\tconst tailwindPkg = getDependencyPackageInfo(cwd, \"tailwindcss\")?.pkg;\n\n\t// covers the case where `npm install` hasn't been executed yet\n\tconst pkg = project.getPackageInfo(cwd);\n\tconst fallback = { ...pkg.dependencies, ...pkg.devDependencies };\n\n\tconst svelte = sveltePkg?.version ?? fallback[\"svelte\"];\n\tconst tailwindcss = tailwindPkg?.version ?? fallback[\"tailwindcss\"];\n\n\tconst result = checkDependencies({ svelte, tailwindcss }, cwd, config);\n\tif (result.ok) return result.config;\n\n\tif (!skipPreflight) throw result.error;\n\n\tp.note(\n\t\t`${color.red(result.error.message)}\\nContinuing with ${color.bold(\"--skip-preflight\")}.`\n\t);\n\n\treturn result.config;\n}\n\ntype CheckDependenciesResult<Config extends cliConfig.RawConfig> =\n\t| {\n\t\t\tok: true;\n\t\t\tconfig: Config;\n\t\t\terror?: null;\n\t  }\n\t| {\n\t\t\tok: false;\n\t\t\tconfig: Config;\n\t\t\terror: CLIError;\n\t  };\n\n/** Checks dependencies and updates config if necessary. */\nfunction checkDependencies<Config extends cliConfig.RawConfig>(\n\tdependencies: Record<string, string | undefined>,\n\tcwd: string,\n\tconfig: Config\n): CheckDependenciesResult<Config> {\n\tif (!dependencies.tailwindcss || !dependencies.svelte) {\n\t\treturn {\n\t\t\tok: false,\n\t\t\tconfig,\n\t\t\terror: error(`This CLI requires Tailwind CSS and Svelte to be installed.\\n`),\n\t\t};\n\t}\n\n\tconst isTailwind3 = semver.satisfies(semver.coerce(dependencies.tailwindcss) ?? \"\", \"^3.0.0\");\n\tconst isTailwind4 = semver.satisfies(semver.coerce(dependencies.tailwindcss) ?? \"\", \"^4.0.0\");\n\tconst isSvelte5 = semver.satisfies(semver.coerce(dependencies.svelte) ?? \"\", \"^5.0.0\");\n\n\t// supported versions (tailwind v4 + svelte v5)\n\tif (isTailwind4 && isSvelte5) {\n\t\t// no config to update\n\t\tif (!config) return { ok: true, config };\n\n\t\tconst host = new URL(config.registry).host;\n\t\tif (host === \"next.shadcn-svelte.com\") {\n\t\t\t// update from `next` registry and schema urls\n\t\t\tconfig.$schema = cliConfig.DEFAULT_CONFIG.$schema;\n\t\t\tconfig.registry = cliConfig.DEFAULT_CONFIG.registry;\n\t\t\tcliConfig.writeConfig(cwd, config);\n\t\t\tp.log.step(`Config file ${highlight(\"components.json\")} updated`);\n\t\t}\n\t\treturn { ok: true, config };\n\t}\n\n\t// legacy (tailwind v3 + svelte v5)\n\tif (isTailwind3 && isSvelte5) {\n\t\t// no config to update\n\t\tif (!config) return config;\n\n\t\t// if no `style` field, then we can assume their components.json is already updated\n\t\tif (!config.style) return { ok: true, config };\n\n\t\tconfig.registry = `${TW3_SITE_BASE_URL}/registry/${config.style}`;\n\t\tcliConfig.writeConfig(cwd, config);\n\t\tp.log.step(`Config file ${highlight(\"components.json\")} updated`);\n\t\treturn { ok: true, config };\n\t}\n\n\t// incompatible\n\treturn {\n\t\tok: false,\n\t\tconfig,\n\t\terror: error(\n\t\t\t`This CLI version requires Tailwind CSS (v3 or v4) and Svelte v5.\\n\\n` +\n\t\t\t\t`If you are on Svelte v4, use ${highlight(\"shadcn-svelte@0.14 add\")} instead, or consider migrating to Svelte 5: ${SITE_BASE_URL}/docs/migration/svelte-5`\n\t\t),\n\t};\n}\n"
  },
  {
    "path": "packages/cli/src/utils/project.ts",
    "content": "import { existsSync, promises as fs } from \"node:fs\";\nimport path from \"node:path\";\nimport { exec } from \"tinyexec\";\nimport type { PackageJson } from \"type-fest\";\nimport { detect, resolveCommand } from \"package-manager-detector\";\nimport { readJSONSync } from \"./get-package-info.js\";\nimport { CLIError } from \"./errors.js\";\nimport type * as cliConfig from \"./config/schema.js\";\nimport type * as registry from \"./registry/index.js\";\n\nexport async function getComponents({\n\tregistryIndex,\n\tconfig,\n}: {\n\tregistryIndex: Awaited<ReturnType<typeof registry.getRegistryIndex>>;\n\tconfig: cliConfig.ResolvedConfig;\n}) {\n\tconst dirs = {\n\t\tui: config.resolvedPaths.ui,\n\t\tcomponents: config.resolvedPaths.components,\n\t\thooks: config.resolvedPaths.hooks,\n\t};\n\n\tconst existingComponents: typeof registryIndex = [];\n\tfor (const dir of Object.values(dirs)) {\n\t\tif (!existsSync(dir)) continue;\n\n\t\tconst files = await fs.readdir(dir, { withFileTypes: true });\n\t\tfor (const file of files) {\n\t\t\tif (file.isDirectory()) {\n\t\t\t\tconst item = registryIndex.find((item) => item.name === file.name);\n\t\t\t\t// is a valid shadcn item\n\t\t\t\tif (item) existingComponents.push(item);\n\t\t\t}\n\t\t}\n\t}\n\n\t// Always offer to update the `utils`\n\tconst utilsItem = registryIndex.find((item) => item.name === \"utils\");\n\tif (utilsItem) {\n\t\texistingComponents.push(utilsItem);\n\t}\n\n\treturn existingComponents;\n}\n\n// if it's a SvelteKit project, run `svelte-kit sync` if the `.svelte-kit` dir is missing\nexport async function syncSvelteKit(cwd: string) {\n\tconst isSvelteKit = isUsingSvelteKit(cwd);\n\tif (isSvelteKit) {\n\t\t// we'll exit early since syncing is rather slow\n\t\tif (existsSync(path.join(cwd, \".svelte-kit\"))) return;\n\n\t\tconst agent = (await detect({ cwd }))?.agent ?? \"npm\";\n\t\tconst cmd = resolveCommand(agent, \"execute-local\", [\"svelte-kit\", \"sync\"])!;\n\n\t\ttry {\n\t\t\tawait exec(cmd.command, cmd.args, { throwOnError: true, nodeOptions: { cwd } });\n\t\t} catch (e) {\n\t\t\tconst failedCmd = `${cmd.command} ${cmd.args.join(\" \")}`;\n\t\t\tconst install = resolveCommand(agent, \"install\", [])!;\n\t\t\tconst installCmd = `${install.command} ${install.args.join(\" \")}`;\n\n\t\t\tthrow new CLIError(\n\t\t\t\t`Failed to run '${failedCmd}'. Ensure that your dependencies have been installed first with '${installCmd}' and try again.`,\n\t\t\t\t{ cause: e }\n\t\t\t);\n\t\t}\n\t}\n}\n\n/**\n * Loads the user's `package.json` and check if `@sveltejs/kit` is a dependency.\n */\nexport function isUsingSvelteKit(cwd: string): boolean {\n\tconst packageJSON = getPackageInfo(cwd);\n\tconst deps = { ...packageJSON.devDependencies, ...packageJSON.dependencies };\n\treturn deps[\"@sveltejs/kit\"] !== undefined;\n}\n\nexport function getPackageInfo(cwd: string) {\n\tconst packageJsonPath = path.resolve(cwd, \"package.json\");\n\treturn readJSONSync(packageJsonPath) as PackageJson;\n}\n"
  },
  {
    "path": "packages/cli/src/utils/prompt-helpers.ts",
    "content": "import process from \"node:process\";\nimport color from \"picocolors\";\nimport * as p from \"@clack/prompts\";\nimport { bgHex } from \"./colors.js\";\nimport { getCLIPackageInfo } from \"./get-package-info.js\";\nimport { CLIError, ConfigError } from \"./errors.js\";\n\nexport function intro() {\n\tconst packageInfo = getCLIPackageInfo();\n\tconst title = bgHex(\"#FF5500\")(color.black(\" shadcn-svelte \"));\n\tconst version = color.gray(` v${packageInfo.version} `);\n\tp.intro(title + version);\n\n\t// @ts-expect-error types for these globals are not defined\n\tif (typeof Bun !== \"undefined\" || typeof Deno !== \"undefined\") {\n\t\tp.log.warn(\n\t\t\t`You are currently using an unsupported runtime. Only Node.js v22 or higher is officially supported. Continue at your own risk.`\n\t\t);\n\t}\n}\n\nexport function cancel(msg = \"Operation cancelled.\"): never {\n\tp.cancel(msg);\n\tprocess.exit(0);\n}\n\n/**\n * Prettifies the list by joining on `,` and printing a new line on every Nth element.\n *\n */\nexport function prettifyList(arr: string[], max: number = 9): string {\n\treturn arr.reduce((pre, curr, i) => {\n\t\tif (i % max === 0) return `${pre},\\n${curr}`;\n\t\treturn `${pre}, ${curr}`;\n\t});\n}\n\nexport function getPadding(lines: string[]) {\n\tconst lengths = lines.map((s) => s.length);\n\treturn Math.max(...lengths);\n}\n\nexport function handleError(error: unknown) {\n\t// provide a newline gap\n\tp.log.message();\n\n\tif (typeof error === \"string\") {\n\t\tp.cancel(error);\n\t\tprocess.exit(1);\n\t}\n\n\tif (error instanceof CLIError || error instanceof ConfigError) {\n\t\tp.cancel(printError(error));\n\t\tprocess.exit(1);\n\t}\n\n\t// unexpected error\n\tif (error instanceof Error) {\n\t\tp.cancel(printError(error));\n\t\tprocess.exit(1);\n\t}\n\n\tp.cancel(\"Something went wrong. Please try again.\");\n\tprocess.exit(1);\n}\n\nfunction printError(error: Error): string {\n\treturn `${error.stack ?? error.message}${error.cause ? `\\n   [cause]: ${error.cause instanceof Error ? printError(error.cause) : error.cause}` : \"\"}`;\n}\n"
  },
  {
    "path": "packages/cli/src/utils/registry/index.ts",
    "content": "import path from \"node:path\";\nimport { fetch } from \"node-fetch-native\";\nimport { createProxy } from \"node-fetch-native/proxy\";\nimport { isUrl, resolveURL } from \"../utils.js\";\nimport { CLIError, error } from \"../errors.js\";\nimport { BASE_COLORS, type ResolvedConfig } from \"../config/index.js\";\nimport { getEnvProxy } from \"../get-env-proxy.js\";\nimport { OFFICIAL_REGISTRY_URL } from \"../../constants.js\";\nimport * as schemas from \"../../schema/index.js\";\nimport { parse as parseCss } from \"postcss\";\n\nexport function getRegistryUrl(config: { registry: string; style?: string }) {\n\t// so old URL's will still work\n\tif (process.env.COMPONENTS_REGISTRY_URL) {\n\t\treturn process.env.COMPONENTS_REGISTRY_URL;\n\t}\n\tconst url = process.env.REGISTRY_URL ?? config.registry;\n\n\treturn new URL(url + `/styles/${config.style ?? \"vega\"}`).toString();\n}\n\nexport function getSiteUrl(config: { registry: string }) {\n\tconst registryUrl = getRegistryUrl(config);\n\treturn new URL(registryUrl).origin;\n}\n\nexport async function getRegistryIndex(registryUrl: string) {\n\ttry {\n\t\tconst url = resolveURL(registryUrl, \"index.json\");\n\t\tconst [result] = await fetchRegistry([url]);\n\t\treturn schemas.registryIndexSchema.parse(result);\n\t} catch (e) {\n\t\tif (e instanceof CLIError) throw e;\n\t\tthrow error(`Failed to fetch components from registry.`, e);\n\t}\n}\n\nexport function getBaseColors() {\n\treturn BASE_COLORS.map((color) => ({\n\t\tname: color,\n\t\tlabel: `${color.charAt(0).toUpperCase()}${color.slice(1)}`,\n\t}));\n}\n\nexport async function getRegistryTheme(baseUrl: string, theme: string) {\n\ttry {\n\t\tconst url = resolveURL(baseUrl, `colors/${theme}.json`);\n\t\tconst [result] = await fetchRegistry([url]);\n\n\t\treturn schemas.registryBaseColorSchema.parse(result);\n\t} catch (e) {\n\t\tthrow error(`Failed to fetch theme: ${theme} from registry.`, e);\n\t}\n}\n\n/** Parses a style CSS file and extracts the `@apply` styles for each class */\nexport function parseStyleCss(css: string): Record<string, string> {\n\tconst ast = parseCss(css);\n\tconst styles: Record<string, string> = {};\n\n\tast.walkRules((rule) => {\n\t\t// Extract class name from selector (e.g., \".cn-accordion-item\" -> \"cn-accordion-item\")\n\t\tconst selector = rule.selector;\n\t\tif (!selector.startsWith(\".cn-\")) return;\n\n\t\tconst className = selector.slice(1); // Remove leading \".\"\n\n\t\t// Find @apply rules within this rule\n\t\trule.walkAtRules(\"apply\", (atRule) => {\n\t\t\tconst applyValue = atRule.params.trim();\n\t\t\tif (applyValue) {\n\t\t\t\t// If there are multiple @apply rules, concatenate them\n\t\t\t\tif (styles[className]) {\n\t\t\t\t\tstyles[className] += ` ${applyValue}`;\n\t\t\t\t} else {\n\t\t\t\t\tstyles[className] = applyValue;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n\n\treturn styles;\n}\n\ntype ResolveRegistryItemsProps = {\n\tregistryUrl: string;\n\tregistryIndex: schemas.RegistryIndex;\n\titems: string[];\n\tparentUrl?: URL;\n};\n\ntype ResolvedRegistryItem = schemas.RegistryItem | schemas.RegistryIndexItem;\nexport async function resolveRegistryItems({\n\tregistryUrl,\n\tregistryIndex,\n\titems,\n\tparentUrl,\n}: ResolveRegistryItemsProps): Promise<ResolvedRegistryItem[]> {\n\tconst resolvedItems: ResolvedRegistryItem[] = [];\n\n\tfor (const item of items) {\n\t\tlet remoteUrl: URL | undefined;\n\t\tlet resolvedItem: ResolvedRegistryItem | undefined = registryIndex.find(\n\t\t\t(entry) => entry.name === item\n\t\t);\n\n\t\t/**\n\t\t * The `item` doesn't exist in the registry's `index`, so it can be one of two things:\n\t\t * 1. a remote registry item (URL)\n\t\t * 2. a `local:registryDep` of a _remote_  item (relative path from that item to the dep)\n\t\t */\n\t\tif (!resolvedItem) {\n\t\t\tconst isRelative = item.startsWith(\"./\") || item.startsWith(\"../\");\n\t\t\tif (isUrl(item) || (parentUrl && isRelative)) {\n\t\t\t\tremoteUrl = new URL(item, parentUrl);\n\t\t\t\tconst [result] = await fetchRegistry([remoteUrl]);\n\t\t\t\tresolvedItem = schemas.registryItemSchema.parse(result);\n\t\t\t} else {\n\t\t\t\t// diff error messages depending on whether we're resolving from the user's registry or a remote URL\n\t\t\t\tif (parentUrl) {\n\t\t\t\t\tthrow error(\n\t\t\t\t\t\t`Registry item '${item}' does not exist in the remote registry at '${parentUrl.origin}', nor is it a valid URL or relative path.`\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tlet message = `Registry item '${item}' does not exist in the registry at '${registryUrl}'.`;\n\t\t\t\tif (registryUrl !== OFFICIAL_REGISTRY_URL) {\n\t\t\t\t\tmessage += `\\n\\nIf you're trying to use shadcn-svelte components, ensure your 'registry' property in components.json is set to '${OFFICIAL_REGISTRY_URL}'.`;\n\t\t\t\t}\n\t\t\t\tthrow error(message);\n\t\t\t}\n\t\t}\n\n\t\tresolvedItems.push(resolvedItem);\n\n\t\tif (resolvedItem.registryDependencies?.length) {\n\t\t\tconst registryDeps = await resolveRegistryItems({\n\t\t\t\tregistryUrl,\n\t\t\t\tregistryIndex,\n\t\t\t\titems: resolvedItem.registryDependencies,\n\t\t\t\tparentUrl: remoteUrl,\n\t\t\t});\n\t\t\tresolvedItems.push(...registryDeps);\n\t\t}\n\t}\n\n\t// dedupes tree\n\treturn resolvedItems.filter(\n\t\t(component, index, self) => self.findIndex((c) => c.name === component.name) === index\n\t);\n}\n\ntype FetchTreeProps = { baseUrl: string; items: ResolvedRegistryItem[] };\nexport async function fetchRegistryItems({\n\tbaseUrl,\n\titems,\n}: FetchTreeProps): Promise<schemas.RegistryItem[]> {\n\tconst itemsWithContent = items.filter((item) => !(\"relativeUrl\" in item));\n\tconst itemsToFetch = items.filter((item) => \"relativeUrl\" in item);\n\n\ttry {\n\t\tconst itemUrls = itemsToFetch.map((item) => resolveURL(baseUrl, item.relativeUrl));\n\t\tconst result = (await fetchRegistry(itemUrls)).concat(itemsWithContent);\n\n\t\treturn schemas.registryItemSchema.array().parse(result);\n\t} catch (e) {\n\t\tif (e instanceof CLIError) throw e;\n\t\tthrow error(`Failed to fetch tree from registry.`, e);\n\t}\n}\n\nasync function fetchRegistry(urls: Array<URL | string>): Promise<unknown[]> {\n\tconst proxyUrl = getEnvProxy();\n\tconst proxy = proxyUrl ? createProxy({ url: proxyUrl }) : {};\n\n\tconst loaders = urls.map(async (url) => {\n\t\tconst response = await fetch(url, { ...proxy });\n\t\tif (!response.ok) {\n\t\t\tthrow error(\n\t\t\t\t`Failed to fetch registry from ${url}: ${response.status} ${response.statusText}`\n\t\t\t);\n\t\t}\n\n\t\ttry {\n\t\t\treturn await response.json();\n\t\t} catch (e) {\n\t\t\tthrow error(`Error parsing json response from ${url}: Error ${e}`);\n\t\t}\n\t});\n\n\ttry {\n\t\tconst results = await Promise.all(loaders);\n\t\treturn results;\n\t} catch (e) {\n\t\tif (e instanceof CLIError) throw e;\n\t\tthrow error(`Failed to fetch registry.`, e);\n\t}\n}\n\nexport function getItemAliasDir(config: ResolvedConfig, type: schemas.RegistryItemType) {\n\tif (type === \"registry:ui\") return config.resolvedPaths.ui;\n\tif (type === \"registry:lib\") return config.resolvedPaths.lib;\n\tif (type === \"registry:hook\") return config.resolvedPaths.hooks;\n\tif (type === \"registry:file\") return config.resolvedPaths.cwd;\n\tif (type === \"registry:font\") return config.resolvedPaths.cwd;\n\tif (type === \"registry:base\") return config.resolvedPaths.cwd;\n\n\tif (type === \"registry:style\" || type === \"registry:theme\") {\n\t\treturn path.basename(config.resolvedPaths.tailwindCss);\n\t}\n\n\tif (type === \"registry:block\" || type === \"registry:component\") {\n\t\treturn config.resolvedPaths.components;\n\t}\n\n\tif (type === \"registry:page\") {\n\t\tif (config.sveltekit) return path.resolve(config.resolvedPaths.cwd, \"src\", \"routes\");\n\n\t\t// we'll fallback to components alias\n\t\treturn config.resolvedPaths.components;\n\t}\n\n\tthrow new Error(`TODO: unhandled item type ${type}`);\n}\n\nexport function resolveItemFilePath(\n\tconfig: ResolvedConfig,\n\titem: schemas.RegistryItem,\n\tfile: schemas.RegistryItemFile\n): string {\n\t// resolves relative to the root (cwd)\n\tif (file.target.startsWith(\"~/\")) {\n\t\treturn path.resolve(config.resolvedPaths.cwd, file.target.replace(\"~/\", \"\"));\n\t}\n\n\tif (item.name === \"utils\") {\n\t\tconst utils = config.resolvedPaths.utils;\n\t\tif (utils.match(/.*\\.(ts|js)$/)) return utils;\n\t\telse return `${utils}.ts`;\n\t}\n\n\tlet aliasDir;\n\tif (file.type === \"registry:file\") {\n\t\t// resolves relative to the item-type's alias\n\t\taliasDir = getItemAliasDir(config, item.type);\n\t} else {\n\t\t// resolves relative to the file-type's alias\n\t\taliasDir = getItemAliasDir(config, file.type);\n\t}\n\n\treturn path.resolve(aliasDir, file.target);\n}\n"
  },
  {
    "path": "packages/cli/src/utils/registry/schema.ts",
    "content": "// !! BROWSER SAFE !!\n\nimport { z } from \"zod\";\nimport { rawConfigSchema } from \"../config/schema.js\";\n\nconst registryItemFileType = [\n\t\"registry:lib\",\n\t\"registry:block\",\n\t\"registry:component\",\n\t\"registry:ui\",\n\t\"registry:hook\",\n\t\"registry:page\",\n\t\"registry:file\",\n\t\"registry:theme\",\n\t\"registry:style\",\n\t\"registry:item\",\n\t\"registry:base\",\n\t\"registry:font\",\n] as const;\n\nconst registryItemComplexType = [\"registry:block\"] as const;\n\n/** Used for internal purposes only. */\nconst registryItemInternalType = [\"registry:example\", \"registry:internal\"] as const;\n\nexport type RegistryItemType = z.infer<typeof registryItemTypeSchema>;\nconst registryItemTypeSchema = z\n\t.enum([...registryItemFileType, ...registryItemComplexType, ...registryItemInternalType])\n\t.describe(\n\t\t\"The type of the item. Used to determine the type and target path of the item when resolved for a project.\"\n\t);\n\nexport type RegistryItemFileType = z.infer<typeof registryItemFileTypeSchema>;\nconst registryItemFileTypeSchema = z\n\t.enum(registryItemFileType)\n\t.describe(\"The type of the file. Used to resolve the file's path for a project.\");\n\nexport type RegistryItemFile = z.infer<typeof registryItemFileSchema>;\nexport const registryItemFileSchema = z\n\t.object({\n\t\tcontent: z.string().describe(\"The content of the file.\"),\n\t\ttype: registryItemFileTypeSchema,\n\t\ttarget: z\n\t\t\t.string()\n\t\t\t.describe(\"The target path of the file. This is where the file will be installed.\"),\n\t})\n\t.describe(\n\t\t\"The main payload of the registry item. This is an array of files that are part of the registry item. Each file is an object with a target, type, and content.\"\n\t);\n\nconst registryDependenciesSchema = z\n\t.string()\n\t.array()\n\t.describe(\n\t\t\"An array of registry items that this item depends on. Use the name of the item to reference shadcn/ui components and urls to reference other registries.\"\n\t);\n\nconst baseIndexItemSchema = z.object({\n\tname: z\n\t\t.string()\n\t\t.describe(\n\t\t\t\"The name of the item. Used to identify the item in the registry. It should be unique for your registry.\"\n\t\t),\n\ttitle: z\n\t\t.string()\n\t\t.optional()\n\t\t.describe(\n\t\t\t\"The human-readable title for your registry item. Keep it short and descriptive.\"\n\t\t),\n\ttype: registryItemTypeSchema,\n\tauthor: z\n\t\t.string()\n\t\t.min(2, \"Author name must be at least 2 characters\")\n\t\t.optional()\n\t\t.describe(\"The author of the item. Recommended format: username <url>\"),\n\tdescription: z\n\t\t.string()\n\t\t.optional()\n\t\t.describe(\"The description of the item. Used to provide a brief overview of the item.\"),\n\tdependencies: z\n\t\t.string()\n\t\t.array()\n\t\t.optional()\n\t\t.describe(\"An array of NPM dependencies required by the registry item.\"),\n\tdevDependencies: z\n\t\t.string()\n\t\t.array()\n\t\t.optional()\n\t\t.describe(\"An array of NPM dev dependencies required by the registry item.\"),\n\tregistryDependencies: z.optional(registryDependenciesSchema),\n\tmeta: z\n\t\t.record(z.string(), z.any())\n\t\t.optional()\n\t\t.describe(\n\t\t\t\"Additional metadata for the registry item. This is an object with any key value pairs.\"\n\t\t),\n});\n\nexport type RegistryIndexItem = z.infer<typeof registryIndexItemSchema>;\n/** Schema for registry items defined in the index */\nexport const registryIndexItemSchema = baseIndexItemSchema.extend({\n\trelativeUrl: z.string(),\n});\n\nexport type RegistryIndex = z.infer<typeof registryIndexSchema>;\n/** Schema for the registry's index (e.g. `https://example.com/registry/index.json`) */\nexport const registryIndexSchema = z.array(registryIndexItemSchema);\n\nconst colorSchema = z.record(z.string(), z.string());\n/** Schema for base color endpoints (e.g. `https://example.com/registry/colors/slate.json`) */\nexport const registryBaseColorSchema = z.object({\n\tcssVars: z.object({ light: colorSchema, dark: colorSchema }),\n});\n\nexport type CssVars = z.infer<typeof registryItemCssVarsSchema>;\nconst registryItemCssVarsSchema = z\n\t.object({\n\t\ttheme: z\n\t\t\t.optional(colorSchema)\n\t\t\t.describe(\n\t\t\t\t\"CSS variables for the @theme directive. For Tailwind v4 projects only. Use tailwind for older projects.\"\n\t\t\t),\n\t\tlight: z.optional(colorSchema).describe(\"CSS variables for the light theme.\"),\n\t\tdark: z.optional(colorSchema).describe(\"CSS variables for the dark theme.\"),\n\t})\n\t.describe(\n\t\t\"The css variables for the registry item. This will be merged with the project's css variables.\"\n\t);\n\nexport type CssSchema = { [x: string]: string | CssSchema };\nconst registryItemCssSchema: z.ZodType<CssSchema, CssSchema> = z\n\t.record(\n\t\tz\n\t\t\t.string()\n\t\t\t.describe(\"Direct CSS string (e.g., 'font-family: sans-serif; line-height: 1.5;')\"),\n\t\tz\n\t\t\t.lazy(() =>\n\t\t\t\tz.union([\n\t\t\t\t\tz\n\t\t\t\t\t\t.string()\n\t\t\t\t\t\t.describe(\"CSS property value (e.g., 'blue', 'var(--color-primary)')\"),\n\t\t\t\t\tregistryItemCssSchema.describe(\"CSS property value for nested rule\"),\n\t\t\t\t])\n\t\t\t)\n\t\t\t.describe(\"CSS properties or nested selectors\")\n\t)\n\t.describe(\n\t\t\"CSS definitions to be added to the project's CSS file. Supports at-rules, selectors, nested rules, utilities, layers, and more.\"\n\t);\n\nexport const registryItemCommonSchema = z.object({\n\t$schema: z.string().optional(),\n\t...baseIndexItemSchema.shape,\n\tdocs: z\n\t\t.string()\n\t\t.optional()\n\t\t.describe(\"The documentation for the registry item. This is a markdown string.\"),\n\tcategories: z\n\t\t.string()\n\t\t.array()\n\t\t.optional()\n\t\t.describe(\"The categories of the registry item. This is an array of strings.\"),\n\tcss: z.optional(registryItemCssSchema),\n\tcssVars: z.optional(registryItemCssVarsSchema),\n\n\tfiles: z.array(registryItemFileSchema).optional(),\n});\n\n// Font metadata schema for registry:font items.\nexport const registryItemFontSchema = z.object({\n\tfamily: z.string(),\n\tprovider: z.literal(\"google\"),\n\timport: z.string(),\n\tvariable: z.string(),\n\tweight: z.array(z.string()).optional(),\n\tsubsets: z.array(z.string()).optional(),\n\tselector: z.string().optional(),\n\tdependency: z.string().optional(),\n});\n\nexport type RegistryFont = z.infer<typeof registryItemFontSchema>;\n\nexport type RegistryItem = z.infer<typeof registryItemSchema>;\n\n/** Schema for registry item endpoints (e.g. `https://example.com/registry/item.json`) */\nexport const registryItemSchema = z.discriminatedUnion(\"type\", [\n\tregistryItemCommonSchema.extend({\n\t\ttype: z.literal(\"registry:base\"),\n\t\tconfig: naiveDeepPartialify(rawConfigSchema).optional(),\n\t}),\n\tregistryItemCommonSchema.extend({\n\t\ttype: z.literal(\"registry:font\"),\n\t\tfont: registryItemFontSchema,\n\t}),\n\tregistryItemCommonSchema.extend({\n\t\ttype: registryItemTypeSchema.exclude([\"registry:base\", \"registry:font\"]),\n\t}),\n]);\n\nexport type Registry = z.infer<typeof registrySchema>;\n\n/** Schema for `registry.json` */\nexport const registrySchema = z.object({\n\t$schema: z.string().optional(),\n\tname: z.string().describe(\"The name of the registry.\"),\n\thomepage: z.string().describe(\"The homepage of the registry.\"),\n\t// installs specified versions of dependencies during auto-detection\n\toverrideDependencies: z\n\t\t.string()\n\t\t.array()\n\t\t.optional()\n\t\t.describe(\n\t\t\t\"An array of NPM dependencies that should have their versions overridden during registry `build`.\"\n\t\t),\n\taliases: z\n\t\t.object({\n\t\t\tlib: z.string().optional(),\n\t\t\tui: z.string().optional(),\n\t\t\tcomponents: z.string().optional(),\n\t\t\tutils: z.string().optional(),\n\t\t\thooks: z.string().optional(),\n\t\t})\n\t\t.optional()\n\t\t.describe(\n\t\t\t\"Defines which internal import paths should be transformed during registry `build`.\"\n\t\t),\n\titems: baseIndexItemSchema\n\t\t.extend({\n\t\t\tfiles: registryItemFileSchema\n\t\t\t\t.partial()\n\t\t\t\t.extend({\n\t\t\t\t\tpath: z\n\t\t\t\t\t\t.string()\n\t\t\t\t\t\t.describe(\"The path to the file relative to the registry root.\"),\n\t\t\t\t\ttype: registryItemFileTypeSchema,\n\t\t\t\t})\n\t\t\t\t.array()\n\t\t\t\t.describe(\n\t\t\t\t\t\"An array of files that instructs the `build` command on how to locate and parse the registry files.\"\n\t\t\t\t),\n\t\t\tregistryDependencies: registryDependenciesSchema,\n\t\t\tcssVars: z.optional(registryItemCssVarsSchema),\n\t\t\tcss: z.optional(registryItemCssSchema),\n\t\t\tfont: z.optional(registryItemFontSchema),\n\t\t})\n\t\t.array()\n\t\t.describe(\"Defines a custom component registry.\"),\n});\n\n/** Schema for a project's `components.json` config file. */\nexport const componentsJsonSchema = z.object({\n\t$schema: z.string().optional(),\n\tstyle: z\n\t\t.string()\n\t\t.optional()\n\t\t.describe(\n\t\t\t\"DEPRECATED IN TAILWIND v4! The style for your components. This cannot be changed after initialization.\"\n\t\t),\n\ttailwind: z.object({\n\t\tcss: z\n\t\t\t.string()\n\t\t\t.describe(\"Path to the CSS file that imports Tailwind CSS into your project.\"),\n\t\tbaseColor: z\n\t\t\t.string()\n\t\t\t.describe(\n\t\t\t\t\"Used to generate the default color palette for your components. This cannot be changed after initialization.\"\n\t\t\t),\n\t\tconfig: z\n\t\t\t.string()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"DEPRECATED IN TAILWIND v4! The path to your `tailwind.config.[js|ts]` file.\"\n\t\t\t),\n\t\t// cssVariables: z.boolean().default(true)\n\t}),\n\taliases: z\n\t\t.object({\n\t\t\tcomponents: z.string().describe(\"Import alias for your components.\"),\n\t\t\tutils: z.string().describe(\"Import alias for your utility functions.\"),\n\t\t\tui: z\n\t\t\t\t.string()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Import alias for your UI components. Defaults to `$lib/components/ui`.\"),\n\t\t\thooks: z\n\t\t\t\t.string()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Import alias for your hooks. Defaults to `$lib/hooks`.\"),\n\t\t\tlib: z\n\t\t\t\t.string()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\n\t\t\t\t\t\"Import alias for your library, which is typically where you store your components, utils, hooks, etc. Defaults to `$lib`.\"\n\t\t\t\t),\n\t\t})\n\t\t.describe(\n\t\t\t\"The CLI uses these values and the `alias` config from your `svelte.config.js` file to place generated components in the correct location.\"\n\t\t),\n\tregistry: z\n\t\t.string()\n\t\t.optional()\n\t\t.describe(\n\t\t\t\"The registry URL tells the CLI where to fetch the shadcn-svelte components/registry from. You can pin this to a specific preview release or your own fork of the registry.\"\n\t\t),\n\ttypescript: z\n\t\t.union([\n\t\t\tz.boolean(),\n\t\t\tz.object({ config: z.string().describe(\"Path to the tsconfig/jsconfig file.\") }),\n\t\t])\n\t\t.optional()\n\t\t.describe(\n\t\t\t\"Used to determine if Typescript is used for this project. When set to `false`, `.js` files will be installed instead. Defaults to `true`.\"\n\t\t),\n});\n\n/**\n * A highly naive implementation of deep partialification. Unfortunately the latest version of zod doesn't support this at this time. If there ever comes a time where it does let's replace this method ASAP.\n *\n * @see https://github.com/colinhacks/zod/issues/2854\n *\n * @param schema\n * @returns\n */\nexport function naiveDeepPartialify(schema: z.ZodObject): z.ZodObject {\n\tconst newShape: Record<string, z.ZodType> = {};\n\n\tObject.entries(schema.shape).forEach(([key, value]) => {\n\t\tif (value instanceof z.ZodObject) {\n\t\t\tnewShape[key] = naiveDeepPartialify(value).optional();\n\t\t} else {\n\t\t\tnewShape[key] = z.optional(value);\n\t\t}\n\t});\n\n\treturn z.object(newShape);\n}\n"
  },
  {
    "path": "packages/cli/src/utils/resolve-imports.ts",
    "content": "import path from \"node:path\";\nimport { fileURLToPath, pathToFileURL } from \"node:url\";\nimport { type TsConfigResult, createPathsMatcher } from \"get-tsconfig\";\nimport * as resolve from \"resolve.exports\";\nimport { getDependencyPackageInfo } from \"./get-package-info.js\";\nimport * as project from \"./project.js\";\nimport type { PackageJson } from \"type-fest\";\n\nconst NOOP = \"/noop.js\";\n\ntype ResolveImportOpts = {\n\timportPath: string;\n\ttsconfig: TsConfigResult;\n\tcwd: string;\n};\n\n/**\n * Returns the absolute path for a given `components.json` import alias.\n */\nexport function resolveImportAlias(opts: ResolveImportOpts): string | undefined {\n\tconst matcher = createPathsMatcher(opts.tsconfig);\n\n\t// resolves the path if it's defined in the tsconfig\n\tconst resolvedPath = matcher?.(opts.importPath)?.[0];\n\tif (resolvedPath) return resolvedPath;\n\n\t// resolves the path if it's in the project's import map\n\tconst pkg = project.getPackageInfo(opts.cwd);\n\tif (opts.importPath.startsWith(\"#\")) {\n\t\tconst pkgPath = path.resolve(opts.cwd, \"package.json\");\n\t\tconst resolvedPath = resolveAlias(pkg, pkgPath, opts.importPath);\n\t\tif (resolvedPath) return resolvedPath;\n\t}\n\n\t// resolves the path if it's a workspace package\n\tconst deps = Object.keys({ ...pkg.dependencies, ...pkg.devDependencies });\n\tfor (const depName of deps) {\n\t\tif (!opts.importPath.startsWith(depName)) continue;\n\n\t\tconst depInfo = getDependencyPackageInfo(opts.cwd, depName);\n\t\tif (!depInfo) continue;\n\n\t\tconst resolvedPath = resolveAlias(depInfo.pkg, depInfo.path, opts.importPath);\n\t\tif (resolvedPath) return resolvedPath;\n\t}\n}\n\nfunction resolveAlias(pkg: PackageJson, pkgPath: string, aliasedPath: string) {\n\ttry {\n\t\tconst relativePath = resolve.resolve(pkg, aliasedPath + NOOP)?.[0];\n\t\tif (relativePath) {\n\t\t\tconst fileUrl = pathToFileURL(pkgPath);\n\t\t\tconst resolvedPath = new URL(relativePath.slice(0, -NOOP.length), fileUrl).href;\n\t\t\treturn fileURLToPath(resolvedPath);\n\t\t}\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n"
  },
  {
    "path": "packages/cli/src/utils/transform-css.ts",
    "content": "import { parse as parseCss } from \"postcss\";\nimport type { CssSchema, CssVars } from \"./registry/schema.js\";\nimport { updateCss, updateCssVars, updateTailwindPlugins } from \"./updaters/index.js\";\n\ntype TransformCssOptions = {\n\tcssVars?: CssVars;\n\tcss?: CssSchema;\n\t/** Array of plugin names to update */\n\tplugins?: string[];\n\t/** When true, overwrite existing CSS variables. When false (default), only add new ones. */\n\toverwriteCssVars?: boolean;\n};\n\nexport function transformCss(source: string, options?: TransformCssOptions): string {\n\tconst trailingNewline = source.endsWith(\"\\n\");\n\tconst opts = { plugins: [], ...options };\n\n\t// if no CSS variables are provided to update and no plugins,\n\t// we don't need to do anything so we can just return the source\n\tif (!opts.cssVars && !opts.css && !opts.plugins.length) return source;\n\n\tconst ast = parseCss(source);\n\n\t// add plugins if any\n\tif (opts.plugins.length) {\n\t\tupdateTailwindPlugins(ast, opts.plugins);\n\t}\n\n\t// update CSS variables/themes\n\tif (opts.cssVars) {\n\t\tupdateCssVars(ast, opts.cssVars, {\n\t\t\toverwriteCssVars: opts.overwriteCssVars,\n\t\t});\n\t}\n\n\tif (opts.css) updateCss(ast, opts.css);\n\n\tlet output = ast.toString();\n\n\t// PostCSS doesn't add semicolons to at-rules without bodies when they're the last node.\n\t// We need to manually ensure they have semicolons.\n\tif (ast.nodes && ast.nodes.length > 0) {\n\t\tconst lastNode = ast.nodes[ast.nodes.length - 1]!;\n\t\tif (lastNode.type === \"atrule\" && !lastNode.nodes && !output.trimEnd().endsWith(\";\")) {\n\t\t\toutput = output.trimEnd() + \";\";\n\t\t}\n\t}\n\n\toutput = output.replace(/\\/\\* ---break--- \\*\\//g, \"\");\n\toutput = output.replace(/(\\n\\s*\\n)+/g, \"\\n\\n\");\n\toutput = output.trimEnd();\n\n\t// adds the EOF new line, if it existed\n\tif (trailingNewline && !output.endsWith(\"\\n\")) {\n\t\toutput += \"\\n\";\n\t}\n\n\treturn output;\n}\n"
  },
  {
    "path": "packages/cli/src/utils/transformers/index.ts",
    "content": "import type { ResolvedConfig } from \"../config/index.js\";\n\nexport type TransformOptions = {\n\tcontent: string;\n\tfilePath: string;\n\tconfig: ResolvedConfig;\n};\n\nexport type TransformerResult = {\n\tcontent: string;\n\tdependencies: string[];\n\tdevDependencies: string[];\n\tfilePath: string;\n};\n\nexport type Transformer = (opts: TransformOptions) => Promise<Partial<TransformerResult>>;\n\nexport async function transform(\n\topts: TransformOptions,\n\ttransformers: (Transformer | false | undefined)[]\n): Promise<TransformerResult> {\n\tconst result = {\n\t\tcontent: opts.content,\n\t\tdependencies: new Set<string>(),\n\t\tdevDependencies: new Set<string>(),\n\t\tfilePath: opts.filePath,\n\t};\n\tfor (const transformer of transformers.filter(\n\t\t(transformer) => transformer !== undefined && transformer !== false\n\t)) {\n\t\tconst { content, dependencies, devDependencies, filePath } = await transformer({\n\t\t\tconfig: opts.config,\n\t\t\tcontent: result.content,\n\t\t\tfilePath: result.filePath,\n\t\t});\n\t\tresult.content = content ?? result.content;\n\t\tdependencies?.forEach((dep) => result.dependencies.add(dep));\n\t\tdevDependencies?.forEach((dep) => result.devDependencies.add(dep));\n\t\tresult.filePath = filePath ?? result.filePath;\n\t}\n\treturn {\n\t\tcontent: result.content,\n\t\tdependencies: Array.from(result.dependencies),\n\t\tdevDependencies: Array.from(result.devDependencies),\n\t\tfilePath: result.filePath,\n\t};\n}\n\nexport { transformStripTypes } from \"./transform-strip-types.js\";\nexport { transformIcons } from \"./transform-icons.js\";\nexport { transformImports } from \"./transform-imports.js\";\nexport { transformMenu } from \"./transform-menu.js\";\n"
  },
  {
    "path": "packages/cli/src/utils/transformers/transform-icons.ts",
    "content": "// !! BROWSER SAFE !!\n\nimport type { Transformer, TransformerResult } from \"./index.js\";\nimport { parse as parseSvelte } from \"svelte/compiler\";\nimport { walk, type Node } from \"estree-walker\";\nimport MagicString from \"magic-string\";\nimport { iconLibraries, type IconLibrary } from \"../../icons/libraries.js\";\nimport type { ImportDeclaration } from \"acorn\";\nimport { error } from \"../errors.js\";\n\nexport const transformIcons: Transformer = async ({ content, filePath, config }) => {\n\tif (!filePath.endsWith(\".svelte\")) return {};\n\n\tconst src = new MagicString(content);\n\n\tconst ast = parseSvelte(content, { filename: filePath, modern: true });\n\n\tconst iconLibrary = iconLibraries[config.iconLibrary];\n\n\tconst icons: { name: string }[] = [];\n\tlet placeholderImportNode: ImportDeclaration | null = null;\n\n\tconst enter = (node: Node) => {\n\t\t// @ts-expect-error wrong.\n\t\tif (node.type === \"Component\" && node.name === \"IconPlaceholder\") {\n\t\t\t// @ts-expect-error wrong\n\t\t\tconst otherAttributes = node.attributes.filter(\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\t\t(attr: any) => !Object.keys(iconLibraries).includes(attr.name)\n\t\t\t);\n\n\t\t\t// @ts-expect-error wrong\n\t\t\tconst iconNameAttr = node.attributes.find(\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\t\t(attr: any) => attr.name === config.iconLibrary\n\t\t\t);\n\n\t\t\tconst iconName = iconNameAttr?.value[0]?.data;\n\t\t\tif (!iconName) {\n\t\t\t\tthrow error(\n\t\t\t\t\t`Couldn't find icon name attribute for ${config.iconLibrary} in ${filePath}. This is a bug please report it here: https://github.com/huntabyte/shadcn-svelte/issues`\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tconst restProps = otherAttributes\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/no-explicit-any\n\t\t\t\t.map((attr: any) => src.slice(attr.start, attr.end))\n\t\t\t\t.join(\" \");\n\n\t\t\tconst iconSrc = iconLibrary.usage({ name: iconName }, restProps);\n\n\t\t\t// @ts-expect-error wrong\n\t\t\tsrc.overwrite(node.start, node.end, iconSrc);\n\n\t\t\ticons.push({ name: iconName });\n\t\t} else if (node.type === \"ImportDeclaration\") {\n\t\t\tconst specifier = node.specifiers[0];\n\t\t\tif (\n\t\t\t\tspecifier?.type === \"ImportDefaultSpecifier\" &&\n\t\t\t\tspecifier.local.name === \"IconPlaceholder\"\n\t\t\t) {\n\t\t\t\tplaceholderImportNode = node as ImportDeclaration;\n\t\t\t}\n\t\t}\n\t};\n\n\twalk(ast as never, { enter });\n\n\t// replace IconPlaceholder default import with the actual icon imports\n\tif (placeholderImportNode) {\n\t\tconst imports: string[] = (iconLibrary as IconLibrary).getAdditionalImports?.() ?? [];\n\t\tfor (const icon of icons) {\n\t\t\timports.push(iconLibrary.import(icon));\n\t\t}\n\n\t\t// @ts-expect-error wrong\n\t\tsrc.overwrite(placeholderImportNode.start, placeholderImportNode.end, imports.join(\"\\n\\t\"));\n\t}\n\n\treturn {\n\t\tcontent: src.toString(),\n\t\tdevDependencies: placeholderImportNode !== null ? [...iconLibrary.packages] : [],\n\t} satisfies Partial<TransformerResult>;\n};\n"
  },
  {
    "path": "packages/cli/src/utils/transformers/transform-imports.ts",
    "content": "import type { Transformer } from \"./index.js\";\nimport { ALIASES, ALIAS_DEFAULTS } from \"../../constants.js\";\n\nexport const transformImports: Transformer = async ({ content, config }) => {\n\tfor (const alias of ALIASES) {\n\t\tcontent = content.replaceAll(ALIAS_DEFAULTS[alias].placeholder, config.aliases[alias]);\n\t}\n\treturn {\n\t\tcontent,\n\t};\n};\n"
  },
  {
    "path": "packages/cli/src/utils/transformers/transform-menu.ts",
    "content": "// !! BROWSER SAFE !!\n\nimport type { Transformer } from \"./index.js\";\nimport { parse as parseSvelte } from \"svelte/compiler\";\nimport MagicString from \"magic-string\";\nimport { twMerge } from \"tailwind-merge\";\n\n// Hardcoded translucent classes inlined at install time.\nconst TRANSLUCENT_CLASSES =\n\t\"animate-none! relative bg-popover/70 before:pointer-events-none before:absolute before:inset-0 before:-z-1 before:rounded-[inherit] before:backdrop-blur-2xl before:backdrop-saturate-150 **:data-[slot$=-item]:focus:bg-foreground/10 **:data-[slot$=-item]:data-highlighted:bg-foreground/10 **:data-[slot$=-separator]:bg-foreground/5 **:data-[slot$=-trigger]:focus:bg-foreground/10 **:data-[slot$=-trigger]:aria-expanded:bg-foreground/10! **:data-[variant=destructive]:focus:bg-foreground/10! **:data-[variant=destructive]:text-accent-foreground! **:data-[variant=destructive]:**:text-accent-foreground!\";\n\ntype SvelteNode = {\n\ttype: string;\n\tstart?: number;\n\tend?: number;\n\tattributes?: Array<{\n\t\ttype: string;\n\t\tname: string;\n\t\tstart?: number;\n\t\tend?: number;\n\t\tvalue?: unknown;\n\t}>;\n\tfragment?: { nodes?: SvelteNode[] };\n\tnodes?: SvelteNode[];\n};\n\nfunction transformClassText(\n\ttext: string,\n\tmenuColor: string,\n\tisTranslucent: boolean\n): { newText: string } {\n\tlet newText = text;\n\n\tif (menuColor === \"inverted\" || menuColor === \"inverted-translucent\") {\n\t\tnewText = newText.replace(/cn-menu-target/g, \"dark\");\n\t} else {\n\t\tnewText = newText.replace(/cn-menu-target/g, \"\");\n\t}\n\n\tif (isTranslucent) {\n\t\tconst merged = twMerge(newText, TRANSLUCENT_CLASSES);\n\t\tnewText = merged.replace(/\\s*\\bcn-menu-translucent\\b\\s*/g, \" \").trim();\n\t} else {\n\t\tnewText = newText.replace(/cn-menu-translucent/g, \"\");\n\t}\n\n\tnewText = newText.replace(/\\s{2,}/g, \" \").replace(/^\\s+|\\s+$/g, \"\");\n\treturn { newText };\n}\n\nfunction walkNodes(nodes: SvelteNode[] | undefined, visit: (node: SvelteNode) => void): void {\n\tif (!nodes) return;\n\tfor (const node of nodes) {\n\t\tvisit(node);\n\t\twalkNodes(node.fragment?.nodes ?? node.nodes, visit);\n\t}\n}\n\n/**\n * Transforms cn-menu-target and cn-menu-translucent classes based on config.menuColor.\n * If menuColor is \"inverted\", replaces cn-menu-target with \"dark\" and removes cn-menu-translucent.\n * If menuColor is \"default-translucent\", removes cn-menu-target and inlines cn-menu-translucent styles.\n * If menuColor is \"inverted-translucent\", replaces cn-menu-target with \"dark\" and inlines cn-menu-translucent styles.\n * Otherwise, removes both cn-menu-target and cn-menu-translucent.\n */\nexport const transformMenu: Transformer = async ({ content, filePath, config }) => {\n\tconst menuColor = config.menuColor ?? \"default\";\n\tconst isTranslucent =\n\t\tmenuColor === \"default-translucent\" || menuColor === \"inverted-translucent\";\n\n\tif (!content.includes(\"cn-menu-target\") && !content.includes(\"cn-menu-translucent\")) {\n\t\treturn { content };\n\t}\n\n\tif (!filePath.endsWith(\".svelte\")) {\n\t\treturn { content };\n\t}\n\n\tlet ast: { fragment?: { nodes?: SvelteNode[] } };\n\ttry {\n\t\tast = parseSvelte(content, { filename: filePath, modern: true }) as typeof ast;\n\t} catch {\n\t\treturn { content };\n\t}\n\n\tconst src = new MagicString(content);\n\n\twalkNodes(ast.fragment?.nodes, (node) => {\n\t\tfor (const attr of node.attributes ?? []) {\n\t\t\tif (attr.name !== \"class\") continue;\n\n\t\t\tconst value = attr.value;\n\t\t\tif (!value) continue;\n\n\t\t\t// Static: class=\"...\"\n\t\t\tif (Array.isArray(value)) {\n\t\t\t\tconst textChunks = value\n\t\t\t\t\t.filter(\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\tchunk\n\t\t\t\t\t\t): chunk is { type: string; data?: string; start?: number; end?: number } =>\n\t\t\t\t\t\t\ttypeof chunk === \"object\" && chunk !== null && \"data\" in chunk\n\t\t\t\t\t)\n\t\t\t\t\t.map((c) => c.data ?? \"\")\n\t\t\t\t\t.join(\"\");\n\t\t\t\tif (\n\t\t\t\t\t!textChunks.includes(\"cn-menu-target\") &&\n\t\t\t\t\t!textChunks.includes(\"cn-menu-translucent\")\n\t\t\t\t) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst { newText } = transformClassText(textChunks, menuColor, isTranslucent);\n\t\t\t\tfor (const chunk of value as Array<{\n\t\t\t\t\ttype: string;\n\t\t\t\t\tdata?: string;\n\t\t\t\t\tstart?: number;\n\t\t\t\t\tend?: number;\n\t\t\t\t}>) {\n\t\t\t\t\tif (chunk.start != null && chunk.end != null) {\n\t\t\t\t\t\tsrc.overwrite(chunk.start, chunk.end, newText);\n\t\t\t\t\t\tbreak; // Single text chunk typically\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Dynamic: class={cn(...)}\n\t\t\tif (typeof value === \"object\" && value !== null && \"expression\" in value) {\n\t\t\t\tconst expr = (value as { expression?: { type: string; arguments?: unknown[] } })\n\t\t\t\t\t.expression;\n\t\t\t\tif (!expr || expr.type !== \"CallExpression\") continue;\n\t\t\t\tconst args = expr.arguments as {\n\t\t\t\t\ttype: string;\n\t\t\t\t\tvalue?: string;\n\t\t\t\t\traw?: string;\n\t\t\t\t\tstart?: number;\n\t\t\t\t\tend?: number;\n\t\t\t\t}[];\n\t\t\t\tif (!args) continue;\n\n\t\t\t\tconst exprStart = (expr as { start?: number }).start;\n\t\t\t\tconst exprEnd = (expr as { end?: number }).end;\n\t\t\t\tif (exprStart == null || exprEnd == null) continue;\n\n\t\t\t\tconst fullExpr = content.slice(exprStart, exprEnd);\n\t\t\t\tif (\n\t\t\t\t\t!fullExpr.includes(\"cn-menu-target\") &&\n\t\t\t\t\t!fullExpr.includes(\"cn-menu-translucent\")\n\t\t\t\t) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Collect edits; we'll apply in reverse order to preserve offsets\n\t\t\t\tconst edits: { start: number; end: number; replacement: string }[] = [];\n\t\t\t\tfor (const arg of args) {\n\t\t\t\t\tif (arg.type !== \"Literal\" || typeof arg.value !== \"string\") continue;\n\t\t\t\t\tconst text = arg.value;\n\t\t\t\t\tif (!text.includes(\"cn-menu-target\") && !text.includes(\"cn-menu-translucent\")) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tconst { newText } = transformClassText(text, menuColor, isTranslucent);\n\t\t\t\t\tif (arg.start != null && arg.end != null) {\n\t\t\t\t\t\tconst raw = arg.raw ?? JSON.stringify(text);\n\t\t\t\t\t\tconst quote = raw.startsWith(\"'\") ? \"'\" : '\"';\n\t\t\t\t\t\t// Use \"\" so post-processing can clean up empty args in cn()\n\t\t\t\t\t\tedits.push({\n\t\t\t\t\t\t\tstart: arg.start,\n\t\t\t\t\t\t\tend: arg.end,\n\t\t\t\t\t\t\treplacement: newText === \"\" ? '\"\"' : `${quote}${newText}${quote}`,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfor (const edit of edits) {\n\t\t\t\t\tsrc.overwrite(edit.start, edit.end, edit.replacement);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\tlet result = src.toString();\n\t// Clean up empty string arguments in cn() calls\n\tresult = result.replace(/,\\s*\"\"\\s*,/g, \",\");\n\tresult = result.replace(/\\(\\s*\"\"\\s*,\\s*/g, \"(\");\n\tresult = result.replace(/,\\s*\"\"\\s*\\)/g, \")\");\n\tresult = result.replace(/cn\\s*\\(\\s*\\)/g, \"cn()\");\n\n\treturn { content: result };\n};\n"
  },
  {
    "path": "packages/cli/src/utils/transformers/transform-strip-types.ts",
    "content": "import { strip } from \"@svecosystem/strip-types\";\nimport { transform as sucraseTransform } from \"sucrase\";\nimport type { Transformer } from \"./index.js\";\n\nconst CONSECUTIVE_NEWLINE_REGEX = new RegExp(/^\\s\\s*\\n+/gm);\n\nexport const transformStripTypes: Transformer = async ({ content, filePath }) => {\n\tif (filePath.endsWith(\".svelte\")) {\n\t\tcontent = strip(content, { filename: filePath });\n\t} else {\n\t\tcontent = sucraseTransform(content, {\n\t\t\ttransforms: [\"typescript\"],\n\t\t\tdisableESTransforms: true,\n\t\t}).code.trim();\n\t}\n\n\tif (filePath.endsWith(\".ts\")) {\n\t\tfilePath = filePath.replace(\".ts\", \".js\");\n\t}\n\n\t// cursed formatting\n\tcontent = content.replaceAll(CONSECUTIVE_NEWLINE_REGEX, \"\\n\");\n\n\treturn { content, filePath };\n};\n"
  },
  {
    "path": "packages/cli/src/utils/updaters/index.ts",
    "content": "export * from \"./update-css-vars.js\";\nexport * from \"./update-css.js\";\n"
  },
  {
    "path": "packages/cli/src/utils/updaters/update-css-vars.ts",
    "content": "import postcss, { Declaration, type AtRule, type Root, type Rule } from \"postcss\";\nimport type { CssVars } from \"../registry/schema.js\";\n\nconst DARK_SELECTOR = \".dark\";\nconst LIGHT_SELECTOR = \":root\";\nconst DARK_VARIANT_PARAMS = \"dark (&:is(.dark *))\";\n\nexport type UpdateCssVarsOptions = {\n\t/** When true, overwrite existing CSS variables. When false (default), only add new ones. */\n\toverwriteCssVars?: boolean;\n};\n\nexport function updateCssVars(\n\tast: Root,\n\tcssVars: CssVars,\n\toptions: UpdateCssVarsOptions = {}\n): void {\n\t// Default true for backward compatibility - original always overwrote existing vars\n\tconst opts = {\n\t\toverwriteCssVars: options.overwriteCssVars ?? true,\n\t};\n\n\t// Add @custom-variant for dark when dark vars exist (only for v4 structure)\n\tconst hasV4Structure =\n\t\tast.nodes?.some(\n\t\t\t(n) => n.type === \"atrule\" && (n.name === \"import\" || n.name === \"theme\")\n\t\t) ?? false;\n\tif (hasV4Structure && cssVars.dark && Object.keys(cssVars.dark).length > 0) {\n\t\taddCustomVariant(ast);\n\t}\n\n\t// Process light vars - walk to find existing :root, or create at root (v4 only)\n\tif (cssVars.light) {\n\t\tlet foundLight = false;\n\t\tast.walkRules((rule) => {\n\t\t\tif (rule.selectors.includes(LIGHT_SELECTOR)) {\n\t\t\t\tfoundLight = true;\n\t\t\t\tapplyVarsToRule(rule, cssVars.light!, opts.overwriteCssVars);\n\t\t\t}\n\t\t});\n\t\tif (!foundLight && hasV4Structure) {\n\t\t\tensureRootRule(ast, LIGHT_SELECTOR, cssVars.light, opts.overwriteCssVars);\n\t\t}\n\t}\n\n\t// Process dark vars - walk to find existing .dark, or create at root (v4 only)\n\tif (cssVars.dark) {\n\t\tlet foundDark = false;\n\t\tast.walkRules((rule) => {\n\t\t\tif (rule.selectors.includes(DARK_SELECTOR)) {\n\t\t\t\tfoundDark = true;\n\t\t\t\tapplyVarsToRule(rule, cssVars.dark!, opts.overwriteCssVars);\n\t\t\t}\n\t\t});\n\t\tif (!foundDark && hasV4Structure) {\n\t\t\tensureRootRule(ast, DARK_SELECTOR, cssVars.dark, opts.overwriteCssVars);\n\t\t}\n\t}\n\n\t// Process theme vars - upsert @theme inline and add/update vars (only when theme exists or v4)\n\tif (cssVars.theme && hasV4Structure) {\n\t\tupdateThemeVars(ast, cssVars.theme, opts.overwriteCssVars);\n\t}\n\n\t// Add derived theme vars (radius-*, --color-*) from light/dark\n\tif (hasV4Structure && (cssVars.light || cssVars.dark)) {\n\t\tupdateThemePlugin(ast, cssVars);\n\t}\n}\n\nfunction addCustomVariant(ast: Root): void {\n\tconst customVariant = ast.nodes?.find(\n\t\t(node): node is AtRule => node.type === \"atrule\" && node.name === \"custom-variant\"\n\t);\n\n\tif (!customVariant) {\n\t\tconst importNodes = ast.nodes?.filter(\n\t\t\t(node): node is AtRule => node.type === \"atrule\" && node.name === \"import\"\n\t\t);\n\n\t\tconst variantNode = postcss.atRule({\n\t\t\tname: \"custom-variant\",\n\t\t\tparams: DARK_VARIANT_PARAMS,\n\t\t\traws: { semicolon: true, before: \"\\n\" },\n\t\t});\n\n\t\tif (importNodes && importNodes.length > 0) {\n\t\t\tconst lastImport = importNodes[importNodes.length - 1]!;\n\t\t\tast.insertAfter(lastImport, variantNode);\n\t\t} else if (ast.nodes && ast.nodes.length > 0) {\n\t\t\tast.insertAfter(ast.nodes[0]!, variantNode);\n\t\t} else {\n\t\t\tast.append(variantNode);\n\t\t}\n\n\t\tast.insertBefore(variantNode, postcss.comment({ text: \"---break---\" }));\n\t}\n}\n\nfunction applyVarsToRule(\n\trule: Rule | AtRule,\n\tvars: Record<string, string>,\n\toverwrite: boolean\n): void {\n\tfor (const [key, value] of Object.entries(vars)) {\n\t\tlet prop = `--${key.replace(/^--/, \"\")}`;\n\t\tif (prop === \"--sidebar-background\") prop = \"--sidebar\";\n\n\t\tconst processedValue = isLocalHSLValue(value) ? `hsl(${value})` : value;\n\t\tconst newDecl = postcss.decl({ prop, value: processedValue, raws: { semicolon: true } });\n\n\t\tconst existingDecl = rule.nodes?.find(\n\t\t\t(node): node is Declaration => node.type === \"decl\" && node.prop === prop\n\t\t);\n\n\t\tif (overwrite) {\n\t\t\texistingDecl ? existingDecl.replaceWith(newDecl) : rule.append(newDecl);\n\t\t} else if (!existingDecl) {\n\t\t\trule.append(newDecl);\n\t\t}\n\t}\n}\n\nfunction ensureRootRule(\n\tast: Root,\n\tselector: string,\n\tvars: Record<string, string>,\n\toverwrite: boolean\n): void {\n\tconst ruleNode = postcss.rule({\n\t\tselector,\n\t\traws: { semicolon: true, between: \" \", before: \"\\n\" },\n\t});\n\tast.append(ruleNode);\n\tast.insertBefore(ruleNode, postcss.comment({ text: \"---break---\" }));\n\tapplyVarsToRule(ruleNode, vars, overwrite);\n}\n\nfunction updateThemeVars(ast: Root, vars: Record<string, string>, overwrite: boolean): void {\n\tconst themeNode = upsertThemeNode(ast);\n\n\tfor (const [key, value] of Object.entries(vars)) {\n\t\tconst prop = `--${key.replace(/^--/, \"\")}`;\n\t\tconst newDecl = postcss.decl({ prop, value, raws: { semicolon: true } });\n\n\t\tconst existingDecl = themeNode.nodes?.find(\n\t\t\t(node): node is Declaration => node.type === \"decl\" && node.prop === prop\n\t\t);\n\n\t\tif (overwrite) {\n\t\t\texistingDecl ? existingDecl.replaceWith(newDecl) : themeNode.append(newDecl);\n\t\t} else if (!existingDecl) {\n\t\t\tthemeNode.append(newDecl);\n\t\t}\n\t}\n}\n\nfunction updateThemePlugin(ast: Root, cssVars: CssVars): void {\n\tconst variables = Array.from(\n\t\tnew Set(\n\t\t\tObject.keys(cssVars).flatMap((key) =>\n\t\t\t\tObject.keys((cssVars as Record<string, Record<string, string>>)[key] ?? {})\n\t\t\t)\n\t\t)\n\t);\n\n\tif (variables.length === 0) return;\n\n\tconst themeNode = upsertThemeNode(ast);\n\n\tconst themeVarNodes = themeNode.nodes?.filter(\n\t\t(node): node is Declaration => node.type === \"decl\" && node.prop.startsWith(\"--\")\n\t);\n\n\tfor (const variable of variables) {\n\t\tconst value = Object.values(cssVars).find((vars) => vars?.[variable])?.[variable];\n\n\t\tif (!value) continue;\n\n\t\tif (variable === \"radius\") {\n\t\t\tconst radiusVariables: Record<string, string> = {\n\t\t\t\tsm: \"calc(var(--radius) * 0.6)\",\n\t\t\t\tmd: \"calc(var(--radius) * 0.8)\",\n\t\t\t\tlg: \"var(--radius)\",\n\t\t\t\txl: \"calc(var(--radius) * 1.4)\",\n\t\t\t\t\"2xl\": \"calc(var(--radius) * 1.8)\",\n\t\t\t\t\"3xl\": \"calc(var(--radius) * 2.2)\",\n\t\t\t\t\"4xl\": \"calc(var(--radius) * 2.6)\",\n\t\t\t};\n\t\t\tfor (const [key, radiusValue] of Object.entries(radiusVariables)) {\n\t\t\t\tconst cssVarNode = postcss.decl({\n\t\t\t\t\tprop: `--radius-${key}`,\n\t\t\t\t\tvalue: radiusValue,\n\t\t\t\t\traws: { semicolon: true },\n\t\t\t\t});\n\t\t\t\tif (\n\t\t\t\t\tthemeNode.nodes?.find(\n\t\t\t\t\t\t(node): node is Declaration =>\n\t\t\t\t\t\t\tnode.type === \"decl\" && node.prop === cssVarNode.prop\n\t\t\t\t\t)\n\t\t\t\t) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tthemeNode.append(cssVarNode);\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tlet prop =\n\t\t\tisLocalHSLValue(value) || isColorValue(value)\n\t\t\t\t? `--color-${variable.replace(/^--/, \"\")}`\n\t\t\t\t: `--${variable.replace(/^--/, \"\")}`;\n\t\tif (prop === \"--color-sidebar-background\") {\n\t\t\tprop = \"--color-sidebar\";\n\t\t}\n\n\t\tlet propValue = `var(--${variable})`;\n\t\tif (prop === \"--color-sidebar\") {\n\t\t\tpropValue = \"var(--sidebar)\";\n\t\t}\n\n\t\tconst cssVarNode = postcss.decl({\n\t\t\tprop,\n\t\t\tvalue: propValue,\n\t\t\traws: { semicolon: true },\n\t\t});\n\t\tconst existingDecl = themeNode.nodes?.find(\n\t\t\t(node): node is Declaration => node.type === \"decl\" && node.prop === cssVarNode.prop\n\t\t);\n\t\tif (!existingDecl) {\n\t\t\tif (themeVarNodes && themeVarNodes.length > 0) {\n\t\t\t\tthemeNode.insertAfter(themeVarNodes[themeVarNodes.length - 1]!, cssVarNode);\n\t\t\t} else {\n\t\t\t\tthemeNode.append(cssVarNode);\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction upsertThemeNode(ast: Root): AtRule {\n\tlet themeNode = ast.nodes?.find(\n\t\t(node): node is AtRule =>\n\t\t\tnode.type === \"atrule\" &&\n\t\t\tnode.name === \"theme\" &&\n\t\t\t(node.params === \"inline\" || node.params === \"\")\n\t);\n\n\tif (!themeNode) {\n\t\tthemeNode = postcss.atRule({\n\t\t\tname: \"theme\",\n\t\t\tparams: \"inline\",\n\t\t\traws: { semicolon: true, between: \" \", before: \"\\n\" },\n\t\t});\n\t\tast.append(themeNode);\n\t\tast.insertBefore(themeNode, postcss.comment({ text: \"---break---\" }));\n\t}\n\n\treturn themeNode;\n}\n\nexport function isLocalHSLValue(value: string): boolean {\n\tif (\n\t\tvalue.startsWith(\"hsl\") ||\n\t\tvalue.startsWith(\"rgb\") ||\n\t\tvalue.startsWith(\"#\") ||\n\t\tvalue.startsWith(\"oklch\")\n\t) {\n\t\treturn false;\n\t}\n\n\tconst chunks = value.split(\" \");\n\treturn chunks.length === 3 && chunks.slice(1, 3).every((chunk) => chunk.includes(\"%\"));\n}\n\nexport function isColorValue(value: string): boolean {\n\treturn (\n\t\tvalue.startsWith(\"hsl\") ||\n\t\tvalue.startsWith(\"rgb\") ||\n\t\tvalue.startsWith(\"#\") ||\n\t\tvalue.startsWith(\"oklch\") ||\n\t\tvalue.includes(\"--color-\")\n\t);\n}\n\nexport function updateTailwindPlugins(ast: Root, plugins: string[]): void {\n\tconst foundPlugins: string[] = [];\n\tlet lastImport: AtRule | undefined;\n\tlet lastPlugin: AtRule | undefined;\n\n\tast.walkAtRules((atRule: AtRule) => {\n\t\tif (atRule.name === \"import\") {\n\t\t\tlastImport = atRule;\n\t\t}\n\t\tif (atRule.name !== \"plugin\") return;\n\t\tconst pluginName = atRule.params.trim();\n\t\tlastPlugin = atRule;\n\t\tif (plugins.includes(pluginName.replace(/['\"]/g, \"\"))) {\n\t\t\tfoundPlugins.push(pluginName.replace(/['\"]/g, \"\"));\n\t\t}\n\t});\n\n\tfor (const plugin of plugins) {\n\t\tif (!foundPlugins.includes(plugin)) {\n\t\t\tconst atRule = postcss.atRule({ name: \"plugin\", params: `\"${plugin}\"` });\n\t\t\tif (lastPlugin) {\n\t\t\t\tlastPlugin.after(atRule);\n\t\t\t} else if (lastImport) {\n\t\t\t\tlastImport.after(atRule);\n\t\t\t} else {\n\t\t\t\tast.prepend(atRule);\n\t\t\t}\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/cli/src/utils/updaters/update-css.ts",
    "content": "import postcss, { AtRule, Declaration, Root, Rule } from \"postcss\";\nimport { twMerge } from \"tailwind-merge\";\nimport type { CssSchema } from \"../registry/schema.js\";\n\nconst TAB = \"\\t\";\n\n/**\n * Returns the same indent level as the parent + 1 tab.\n *\n * TODO: consider detecting the use of spaces and tabs\n */\nfunction inferBefore(parentBefore: string | undefined): string {\n\treturn \"\\n\" + (parentBefore?.replaceAll(\"\\n\", \"\") ?? \"\") + TAB;\n}\n\nexport function updateCss(root: Root, css: CssSchema): void {\n\tfor (const [selector, properties] of Object.entries(css)) {\n\t\tif (selector.startsWith(\"@\")) {\n\t\t\t// Handle at-rules (@layer, @utility, etc.)\n\t\t\tconst atRuleMatch = selector.match(/@([a-zA-Z-]+)\\s*(.*)/);\n\t\t\tif (!atRuleMatch) continue;\n\n\t\t\tconst [, name, params = \"\"] = atRuleMatch;\n\n\t\t\t// Special handling for imports - place them at the top.\n\t\t\tif (name === \"import\") {\n\t\t\t\t// Check if this import already exists.\n\t\t\t\tconst existingImport = root.nodes?.find(\n\t\t\t\t\t(node): node is AtRule =>\n\t\t\t\t\t\tnode.type === \"atrule\" && node.name === \"import\" && node.params === params\n\t\t\t\t);\n\n\t\t\t\tif (!existingImport) {\n\t\t\t\t\tconst importRule = postcss.atRule({\n\t\t\t\t\t\tname: \"import\",\n\t\t\t\t\t\tparams,\n\t\t\t\t\t\traws: { semicolon: true },\n\t\t\t\t\t});\n\n\t\t\t\t\t// Find the last import to insert after, or insert at beginning.\n\t\t\t\t\tconst importNodes = root.nodes?.filter(\n\t\t\t\t\t\t(node): node is AtRule => node.type === \"atrule\" && node.name === \"import\"\n\t\t\t\t\t);\n\n\t\t\t\t\tif (importNodes && importNodes.length > 0) {\n\t\t\t\t\t\t// Insert after the last existing import.\n\t\t\t\t\t\tconst lastImport = importNodes[importNodes.length - 1]!;\n\t\t\t\t\t\timportRule.raws.before = \"\\n\";\n\t\t\t\t\t\troot.insertAfter(lastImport, importRule);\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// No imports exist, insert at the very beginning.\n\t\t\t\t\t\timportRule.raws.before = \"\";\n\t\t\t\t\t\troot.prepend(importRule);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Special handling for plugins - place them after imports.\n\t\t\tif (name === \"plugin\") {\n\t\t\t\t// Ensure plugin name is quoted if not already.\n\t\t\t\tlet quotedParams = params;\n\t\t\t\tif (params && !params.startsWith('\"') && !params.startsWith(\"'\")) {\n\t\t\t\t\tquotedParams = `\"${params}\"`;\n\t\t\t\t}\n\n\t\t\t\t// Normalize params for comparison (remove quotes).\n\t\t\t\tconst normalizeParams = (p: string = \"\") => {\n\t\t\t\t\tif (p.startsWith('\"') && p.endsWith('\"')) {\n\t\t\t\t\t\treturn p.slice(1, -1);\n\t\t\t\t\t}\n\t\t\t\t\tif (p.startsWith(\"'\") && p.endsWith(\"'\")) {\n\t\t\t\t\t\treturn p.slice(1, -1);\n\t\t\t\t\t}\n\t\t\t\t\treturn p;\n\t\t\t\t};\n\n\t\t\t\t// Find existing plugin with same normalized params.\n\t\t\t\tconst existingPlugin = root.nodes?.find((node): node is AtRule => {\n\t\t\t\t\tif (node.type !== \"atrule\" || node.name !== \"plugin\") {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t\treturn normalizeParams(node.params) === normalizeParams(params);\n\t\t\t\t});\n\n\t\t\t\tif (!existingPlugin) {\n\t\t\t\t\tconst pluginRule = postcss.atRule({\n\t\t\t\t\t\tname: \"plugin\",\n\t\t\t\t\t\tparams: quotedParams,\n\t\t\t\t\t\traws: { semicolon: true, before: \"\\n\" },\n\t\t\t\t\t});\n\n\t\t\t\t\t// Find the last import or plugin node to insert after\n\t\t\t\t\tconst importNodes = root.nodes?.filter(\n\t\t\t\t\t\t(node): node is AtRule => node.type === \"atrule\" && node.name === \"import\"\n\t\t\t\t\t);\n\n\t\t\t\t\tconst pluginNodes = root.nodes?.filter(\n\t\t\t\t\t\t(node): node is AtRule => node.type === \"atrule\" && node.name === \"plugin\"\n\t\t\t\t\t);\n\n\t\t\t\t\tif (pluginNodes && pluginNodes.length > 0) {\n\t\t\t\t\t\t// Insert after the last existing plugin\n\t\t\t\t\t\tconst lastPlugin = pluginNodes[pluginNodes.length - 1]!;\n\t\t\t\t\t\troot.insertAfter(lastPlugin, pluginRule);\n\t\t\t\t\t} else if (importNodes && importNodes.length > 0) {\n\t\t\t\t\t\t// Insert after the last import if no plugins exist\n\t\t\t\t\t\tconst lastImport = importNodes[importNodes.length - 1]!;\n\t\t\t\t\t\troot.insertAfter(lastImport, pluginRule);\n\t\t\t\t\t\t// Add a break comment before the first plugin to create spacing\n\t\t\t\t\t\troot.insertBefore(pluginRule, postcss.comment({ text: \"---break---\" }));\n\t\t\t\t\t\t// Add a break comment after the plugin for spacing from other content\n\t\t\t\t\t\troot.insertAfter(pluginRule, postcss.comment({ text: \"---break---\" }));\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// If no imports or plugins, insert at the beginning\n\t\t\t\t\t\troot.prepend(pluginRule);\n\t\t\t\t\t\t// Add a break comment before the first plugin for spacing\n\t\t\t\t\t\troot.insertBefore(pluginRule, postcss.comment({ text: \"---break---\" }));\n\t\t\t\t\t\t// Add a break comment after the plugin for spacing from other content\n\t\t\t\t\t\troot.insertAfter(pluginRule, postcss.comment({ text: \"---break---\" }));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Check if this is any at-rule with no body (empty object).\n\t\t\tif (typeof properties === \"object\" && Object.keys(properties).length === 0) {\n\t\t\t\t// Handle any at-rule with no body (e.g., @apply, @tailwind, etc.).\n\t\t\t\tconst atRule = root.nodes?.find(\n\t\t\t\t\t(node): node is AtRule =>\n\t\t\t\t\t\tnode.type === \"atrule\" && node.name === name && node.params === params\n\t\t\t\t);\n\n\t\t\t\tif (!atRule) {\n\t\t\t\t\tconst newAtRule = postcss.atRule({\n\t\t\t\t\t\tname: name!,\n\t\t\t\t\t\tparams,\n\t\t\t\t\t\traws: { semicolon: true },\n\t\t\t\t\t});\n\n\t\t\t\t\troot.append(newAtRule);\n\t\t\t\t\troot.insertBefore(newAtRule, postcss.comment({ text: \"---break---\" }));\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Special handling for keyframes - place them under @theme inline.\n\t\t\tif (name === \"keyframes\") {\n\t\t\t\tlet themeInline = root.nodes?.find(\n\t\t\t\t\t(node): node is AtRule =>\n\t\t\t\t\t\tnode.type === \"atrule\" && node.name === \"theme\" && node.params === \"inline\"\n\t\t\t\t) as AtRule | undefined;\n\n\t\t\t\tif (!themeInline) {\n\t\t\t\t\tthemeInline = postcss.atRule({\n\t\t\t\t\t\tname: \"theme\",\n\t\t\t\t\t\tparams: \"inline\",\n\t\t\t\t\t\traws: { semicolon: true, between: \" \", before: \"\\n\" },\n\t\t\t\t\t});\n\t\t\t\t\troot.append(themeInline);\n\t\t\t\t\troot.insertBefore(themeInline, postcss.comment({ text: \"---break---\" }));\n\t\t\t\t}\n\n\t\t\t\t// Check if a keyframe with the same name already exists\n\t\t\t\tconst existingKeyframesRule = themeInline.nodes?.find(\n\t\t\t\t\t(node): node is AtRule =>\n\t\t\t\t\t\tnode.type === \"atrule\" &&\n\t\t\t\t\t\tnode.name === \"keyframes\" &&\n\t\t\t\t\t\tnode.params === params\n\t\t\t\t);\n\n\t\t\t\tlet keyframesRule: AtRule;\n\t\t\t\tif (existingKeyframesRule) {\n\t\t\t\t\t// Replace existing keyframe\n\t\t\t\t\tkeyframesRule = postcss.atRule({\n\t\t\t\t\t\tname: \"keyframes\",\n\t\t\t\t\t\tparams,\n\t\t\t\t\t\traws: {\n\t\t\t\t\t\t\tsemicolon: true,\n\t\t\t\t\t\t\tbetween: \" \",\n\t\t\t\t\t\t\tbefore: inferBefore(themeInline.raws.before),\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t\texistingKeyframesRule.replaceWith(keyframesRule);\n\t\t\t\t} else {\n\t\t\t\t\t// Create new keyframe\n\t\t\t\t\tkeyframesRule = postcss.atRule({\n\t\t\t\t\t\tname: \"keyframes\",\n\t\t\t\t\t\tparams,\n\t\t\t\t\t\traws: {\n\t\t\t\t\t\t\tsemicolon: true,\n\t\t\t\t\t\t\tbetween: \" \",\n\t\t\t\t\t\t\tbefore: inferBefore(themeInline.raws.before),\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\t\t\t\t\tthemeInline.append(keyframesRule);\n\t\t\t\t}\n\n\t\t\t\tif (typeof properties === \"object\") {\n\t\t\t\t\tfor (const [step, stepProps] of Object.entries(properties)) {\n\t\t\t\t\t\tprocessRule(keyframesRule, step, stepProps);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Special handling for utility classes to preserve property values\n\t\t\tif (name === \"utility\") {\n\t\t\t\tconst utilityAtRule = root.nodes?.find(\n\t\t\t\t\t(node): node is AtRule =>\n\t\t\t\t\t\tnode.type === \"atrule\" && node.name === name && node.params === params\n\t\t\t\t) as AtRule | undefined;\n\n\t\t\t\tif (!utilityAtRule) {\n\t\t\t\t\tconst atRule = postcss.atRule({\n\t\t\t\t\t\tname,\n\t\t\t\t\t\tparams,\n\t\t\t\t\t\traws: { semicolon: true, between: \" \", before: \"\\n\" },\n\t\t\t\t\t});\n\n\t\t\t\t\troot.append(atRule);\n\t\t\t\t\troot.insertBefore(atRule, postcss.comment({ text: \"---break---\" }));\n\n\t\t\t\t\t// Add declarations with their values preserved.\n\t\t\t\t\tif (typeof properties === \"object\") {\n\t\t\t\t\t\tfor (const [prop, value] of Object.entries(properties)) {\n\t\t\t\t\t\t\tif (typeof value === \"string\") {\n\t\t\t\t\t\t\t\tconst decl = postcss.decl({\n\t\t\t\t\t\t\t\t\tprop,\n\t\t\t\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\t\t\t\traws: {\n\t\t\t\t\t\t\t\t\t\tsemicolon: true,\n\t\t\t\t\t\t\t\t\t\tbefore: inferBefore(atRule.raws.before),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\tatRule.append(decl);\n\t\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\t\tprop.startsWith(\"@\") &&\n\t\t\t\t\t\t\t\ttypeof value === \"object\" &&\n\t\t\t\t\t\t\t\tvalue !== null &&\n\t\t\t\t\t\t\t\tObject.keys(value as Record<string, unknown>).length === 0\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t// Handle at-rules with no body (e.g., @apply).\n\t\t\t\t\t\t\t\tconst atRuleMatch = prop.match(/@([a-zA-Z-]+)\\s*(.*)/);\n\t\t\t\t\t\t\t\tif (atRuleMatch) {\n\t\t\t\t\t\t\t\t\tconst [, atRuleName = \"\", atRuleParams = \"\"] = atRuleMatch;\n\t\t\t\t\t\t\t\t\tconst existingAtRule = atRule.nodes?.find(\n\t\t\t\t\t\t\t\t\t\t(node): node is AtRule =>\n\t\t\t\t\t\t\t\t\t\t\tnode.type === \"atrule\" &&\n\t\t\t\t\t\t\t\t\t\t\tnode.name === atRuleName &&\n\t\t\t\t\t\t\t\t\t\t\tnode.params === atRuleParams\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\tif (!existingAtRule) {\n\t\t\t\t\t\t\t\t\t\tconst newAtRule = postcss.atRule({\n\t\t\t\t\t\t\t\t\t\t\tname: atRuleName,\n\t\t\t\t\t\t\t\t\t\t\tparams: atRuleParams,\n\t\t\t\t\t\t\t\t\t\t\traws: {\n\t\t\t\t\t\t\t\t\t\t\t\tsemicolon: true,\n\t\t\t\t\t\t\t\t\t\t\t\tbefore: inferBefore(atRule.raws.before),\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\tatRule.append(newAtRule);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if (typeof value === \"object\") {\n\t\t\t\t\t\t\t\tprocessRule(atRule, prop, value);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// Update existing utility class.\n\t\t\t\t\tif (typeof properties === \"object\") {\n\t\t\t\t\t\tfor (const [prop, value] of Object.entries(properties)) {\n\t\t\t\t\t\t\tif (typeof value === \"string\") {\n\t\t\t\t\t\t\t\tconst existingDecl = utilityAtRule.nodes?.find(\n\t\t\t\t\t\t\t\t\t(node): node is Declaration =>\n\t\t\t\t\t\t\t\t\t\tnode.type === \"decl\" && node.prop === prop\n\t\t\t\t\t\t\t\t);\n\n\t\t\t\t\t\t\t\tconst decl = postcss.decl({\n\t\t\t\t\t\t\t\t\tprop,\n\t\t\t\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\t\t\t\traws: {\n\t\t\t\t\t\t\t\t\t\tsemicolon: true,\n\t\t\t\t\t\t\t\t\t\tbefore: inferBefore(utilityAtRule.raws.before),\n\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t});\n\n\t\t\t\t\t\t\t\texistingDecl\n\t\t\t\t\t\t\t\t\t? existingDecl.replaceWith(decl)\n\t\t\t\t\t\t\t\t\t: utilityAtRule.append(decl);\n\t\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\t\tprop.startsWith(\"@\") &&\n\t\t\t\t\t\t\t\ttypeof value === \"object\" &&\n\t\t\t\t\t\t\t\tvalue !== null &&\n\t\t\t\t\t\t\t\tObject.keys(value as Record<string, unknown>).length === 0\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t// Handle at-rules with no body (e.g., @apply).\n\t\t\t\t\t\t\t\tconst atRuleMatch = prop.match(/@([a-zA-Z-]+)\\s*(.*)/);\n\t\t\t\t\t\t\t\tif (atRuleMatch) {\n\t\t\t\t\t\t\t\t\tconst [, atRuleName = \"\", atRuleParams = \"\"] = atRuleMatch;\n\t\t\t\t\t\t\t\t\tconst existingAtRule = utilityAtRule.nodes?.find(\n\t\t\t\t\t\t\t\t\t\t(node): node is AtRule =>\n\t\t\t\t\t\t\t\t\t\t\tnode.type === \"atrule\" &&\n\t\t\t\t\t\t\t\t\t\t\tnode.name === atRuleName &&\n\t\t\t\t\t\t\t\t\t\t\tnode.params === atRuleParams\n\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\tif (!existingAtRule) {\n\t\t\t\t\t\t\t\t\t\tconst newAtRule = postcss.atRule({\n\t\t\t\t\t\t\t\t\t\t\tname: atRuleName,\n\t\t\t\t\t\t\t\t\t\t\tparams: atRuleParams,\n\t\t\t\t\t\t\t\t\t\t\traws: {\n\t\t\t\t\t\t\t\t\t\t\t\tsemicolon: true,\n\t\t\t\t\t\t\t\t\t\t\t\tbefore: inferBefore(utilityAtRule.raws.before),\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t\t\t\tutilityAtRule.append(newAtRule);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if (typeof value === \"object\") {\n\t\t\t\t\t\t\t\tprocessRule(utilityAtRule, prop, value);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Handle at-property as regular CSS rules\n\t\t\tif (name === \"property\") {\n\t\t\t\tprocessRule(root, selector, properties);\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Handle other at-rules normally\n\t\t\tprocessAtRule(root, name!, params, properties);\n\t\t} else {\n\t\t\t// Handle regular CSS rules\n\t\t\tprocessRule(root, selector, properties);\n\t\t}\n\t}\n}\n\nfunction processAtRule(\n\troot: Root | AtRule,\n\tname: string,\n\tparams: string,\n\tproperties: string | CssSchema\n) {\n\t// Find or create the at-rule\n\tlet atRule = root.nodes?.find(\n\t\t(node): node is AtRule =>\n\t\t\tnode.type === \"atrule\" && node.name === name && node.params === params\n\t) as AtRule | undefined;\n\n\tif (!atRule) {\n\t\tconst isRoot = root.type === \"root\";\n\t\tatRule = postcss.atRule({\n\t\t\tname,\n\t\t\tparams,\n\t\t\traws: {\n\t\t\t\tsemicolon: true,\n\t\t\t\tbetween: \" \",\n\t\t\t\tbefore: isRoot ? \"\\n\" : inferBefore((root as AtRule).raws.before),\n\t\t\t},\n\t\t});\n\t\troot.append(atRule);\n\t\troot.insertBefore(atRule, postcss.comment({ text: \"---break---\" }));\n\t}\n\n\t// Process children of this at-rule\n\tif (typeof properties === \"object\") {\n\t\tfor (const [childSelector, childProps] of Object.entries(properties)) {\n\t\t\tif (childSelector.startsWith(\"@\")) {\n\t\t\t\t// Nested at-rule\n\t\t\t\tconst nestedMatch = childSelector.match(/@([a-zA-Z-]+)\\s*(.*)/);\n\t\t\t\tif (nestedMatch) {\n\t\t\t\t\tconst [, nestedName = \"\", nestedParams = \"\"] = nestedMatch;\n\t\t\t\t\tprocessAtRule(atRule!, nestedName, nestedParams, childProps);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// CSS rule within at-rule\n\t\t\t\tprocessRule(atRule!, childSelector, childProps);\n\t\t\t}\n\t\t}\n\t} else if (typeof properties === \"string\") {\n\t\t// Direct string content for the at-rule\n\t\ttry {\n\t\t\t// Parse the CSS string with PostCSS\n\t\t\tconst parsed = postcss.parse(`.temp{${properties}}`);\n\t\t\tconst tempRule = parsed.first as Rule;\n\n\t\t\tif (tempRule && tempRule.nodes) {\n\t\t\t\t// Create a rule for the at-rule if needed\n\t\t\t\tconst rule = postcss.rule({\n\t\t\t\t\tselector: \"temp\",\n\t\t\t\t\traws: {\n\t\t\t\t\t\tsemicolon: true,\n\t\t\t\t\t\tbetween: \" \",\n\t\t\t\t\t\tbefore: inferBefore(root.raws.before),\n\t\t\t\t\t},\n\t\t\t\t});\n\n\t\t\t\t// Copy all declarations from the temp rule to our actual rule\n\t\t\t\ttempRule.nodes.forEach((node) => {\n\t\t\t\t\tif (node.type === \"decl\") {\n\t\t\t\t\t\tconst clone = node.clone();\n\t\t\t\t\t\tclone.raws.before = inferBefore(rule.raws.before);\n\t\t\t\t\t\trule.append(clone);\n\t\t\t\t\t}\n\t\t\t\t});\n\n\t\t\t\t// Only add the rule if it has declarations\n\t\t\t\tif (rule.nodes?.length) {\n\t\t\t\t\tatRule!.append(rule);\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tconsole.error(\"Error parsing at-rule content:\", properties, err);\n\t\t\tthrow err;\n\t\t}\n\t}\n}\n\nfunction processRule(parent: Root | AtRule, selector: string, properties: CssSchema[string]) {\n\tlet rule = parent.nodes?.find(\n\t\t(node): node is Rule => node.type === \"rule\" && node.selector === selector\n\t) as Rule | undefined;\n\n\tif (!rule) {\n\t\trule = postcss.rule({\n\t\t\tselector,\n\t\t\traws: {\n\t\t\t\tsemicolon: true,\n\t\t\t\tbetween: \" \",\n\t\t\t\tbefore: inferBefore(parent.raws.before),\n\t\t\t},\n\t\t});\n\t\tparent.append(rule);\n\t}\n\n\tif (typeof properties === \"object\") {\n\t\tfor (const [prop, value] of Object.entries(properties)) {\n\t\t\t// Check if this is any at-rule with empty object (no body).\n\t\t\tif (\n\t\t\t\tprop.startsWith(\"@\") &&\n\t\t\t\ttypeof value === \"object\" &&\n\t\t\t\tvalue !== null &&\n\t\t\t\tObject.keys(value).length === 0\n\t\t\t) {\n\t\t\t\t// Parse the at-rule.\n\t\t\t\tconst atRuleMatch = prop.match(/@([a-zA-Z-]+)\\s*(.*)/);\n\t\t\t\tif (atRuleMatch) {\n\t\t\t\t\tconst [, atRuleName = \"\", atRuleParams = \"\"] = atRuleMatch;\n\n\t\t\t\t\t// Check if this at-rule already exists in the rule.\n\t\t\t\t\tconst existingAtRule = rule.nodes?.find(\n\t\t\t\t\t\t(node): node is AtRule =>\n\t\t\t\t\t\t\tnode.type === \"atrule\" &&\n\t\t\t\t\t\t\tnode.name === atRuleName &&\n\t\t\t\t\t\t\tnode.params === atRuleParams\n\t\t\t\t\t);\n\n\t\t\t\t\tif (!existingAtRule) {\n\t\t\t\t\t\t// For @apply, merge with existing @apply instead of creating a duplicate.\n\t\t\t\t\t\tif (atRuleName === \"apply\") {\n\t\t\t\t\t\t\tconst existingApply = rule.nodes?.find(\n\t\t\t\t\t\t\t\t(node): node is AtRule =>\n\t\t\t\t\t\t\t\t\tnode.type === \"atrule\" && node.name === \"apply\"\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tif (existingApply) {\n\t\t\t\t\t\t\t\texistingApply.params = twMerge(existingApply.params, atRuleParams);\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst atRule = postcss.atRule({\n\t\t\t\t\t\t\tname: atRuleName,\n\t\t\t\t\t\t\tparams: atRuleParams,\n\t\t\t\t\t\t\traws: {\n\t\t\t\t\t\t\t\tsemicolon: true,\n\t\t\t\t\t\t\t\tbefore: inferBefore(rule.raws.before),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t});\n\t\t\t\t\t\trule.append(atRule);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (typeof value === \"string\") {\n\t\t\t\tconst decl = postcss.decl({\n\t\t\t\t\tprop,\n\t\t\t\t\tvalue: value,\n\t\t\t\t\traws: {\n\t\t\t\t\t\tsemicolon: true,\n\t\t\t\t\t\tbefore: inferBefore(rule.raws.before),\n\t\t\t\t\t},\n\t\t\t\t});\n\n\t\t\t\t// Replace existing property or add new one.\n\t\t\t\tconst existingDecl = rule.nodes?.find(\n\t\t\t\t\t(node): node is Declaration => node.type === \"decl\" && node.prop === prop\n\t\t\t\t);\n\n\t\t\t\texistingDecl ? existingDecl.replaceWith(decl) : rule.append(decl);\n\t\t\t} else if (typeof value === \"object\") {\n\t\t\t\t// Nested selector (including & selectors).\n\t\t\t\tconst nestedSelector = prop.startsWith(\"&\")\n\t\t\t\t\t? selector.replace(/^([^:]+)/, `$1${prop.substring(1)}`)\n\t\t\t\t\t: prop; // Use the original selector for other nested elements.\n\t\t\t\tprocessRule(parent, nestedSelector, value);\n\t\t\t}\n\t\t}\n\t} else if (typeof properties === \"string\") {\n\t\t// Direct string content for the rule\n\t\ttry {\n\t\t\t// Parse the CSS string with PostCSS\n\t\t\tconst parsed = postcss.parse(`.temp{${properties}}`);\n\t\t\tconst tempRule = parsed.first as Rule;\n\n\t\t\tif (tempRule && tempRule.nodes) {\n\t\t\t\t// Copy all declarations from the temp rule to our actual rule\n\t\t\t\ttempRule.nodes.forEach((node) => {\n\t\t\t\t\tif (node.type === \"decl\") {\n\t\t\t\t\t\tconst clone = node.clone();\n\t\t\t\t\t\tclone.raws.before = inferBefore(rule?.raws.before);\n\t\t\t\t\t\trule?.append(clone);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t} catch (err) {\n\t\t\tconsole.error(\"Error parsing rule content:\", selector, properties, err);\n\t\t\tthrow err;\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/cli/src/utils/utils.ts",
    "content": "// !! BROWSER SAFE !!\n\nimport { z } from \"zod\";\n\nexport function isUrl(path: string) {\n\tconst result = z.url().safeParse(path);\n\treturn result.success;\n}\n\n/** Adds a trailing slash to the end of the URL, if missing. */\nfunction normalizeURL(url: URL | string): URL {\n\tif (!(url instanceof URL)) {\n\t\turl = new URL(url);\n\t}\n\n\tif (!url.pathname.endsWith(\"/\")) {\n\t\turl = new URL(url);\n\t\turl.pathname = url.pathname + \"/\";\n\t}\n\treturn url;\n}\n\nexport function resolveURL(base: URL | string, path: string): URL {\n\tconst url = normalizeURL(base);\n\treturn new URL(path, url);\n}\n\n/** Converts a `Set` into an array if its size is greater than 0. Otherwise, `undefined` is returned. */\nexport function toArray<T>(set: Set<T>): Array<T> | undefined {\n\tif (set.size > 0) {\n\t\treturn Array.from(set);\n\t}\n\treturn undefined;\n}\n\nexport function pascalToKebab(str: string): string {\n\treturn str\n\t\t.replace(/([A-Z]+)([A-Z][a-z])/g, \"$1-$2\")\n\t\t.replace(/([a-z])([A-Z])/g, \"$1-$2\")\n\t\t.replace(/([a-zA-Z])(\\d)/g, \"$1-$2\")\n\t\t.replace(/(\\d)([a-zA-Z])/g, \"$1-$2\")\n\t\t.toLowerCase();\n}\n\nexport function kebabToPascal(str: string): string {\n\treturn str.replace(/-/g, \" \").replace(/\\b\\w/g, (char) => char.toUpperCase());\n}\n\n/**\n * Type safe version of `Object.entries`.\n *\n * @param obj\n * @returns\n */\nexport function entries<T extends Record<string, unknown>>(obj: T): [keyof T, T[keyof T]][] {\n\treturn Object.entries(obj) as [keyof T, T[keyof T]][];\n}\n\n/**\n * Type safe version of `Object.keys`.\n *\n * @param obj\n * @returns\n */\nexport function keys<T extends Record<string, unknown>>(obj: T): (keyof T)[] {\n\treturn Object.keys(obj) as (keyof T)[];\n}\n"
  },
  {
    "path": "packages/cli/test/commands/init.test.ts",
    "content": "import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { exec } from \"tinyexec\";\nimport { afterEach, expect, it, vi } from \"vitest\";\nimport { runInit } from \"../../src/commands/init\";\nimport * as registry from \"../../src/utils/registry\";\nimport { getConfig } from \"../../src/utils/config/index\";\n\nvi.mock(\"fs/promises\", () => ({ writeFile: vi.fn(), mkdir: vi.fn(), readFile: vi.fn() }));\n\nvi.mock(\"tinyexec\", () => ({ exec: vi.fn(() => ({})) }));\n\nvi.mock(import(\"@clack/prompts\"), async (importOriginal) => {\n\tconst actual = await importOriginal();\n\treturn {\n\t\t...actual,\n\t\ttaskLog: vi.fn(() => ({ message: vi.fn(), error: vi.fn(), success: vi.fn() })),\n\t};\n});\n\nit(\"init (config-full)\", async () => {\n\tvi.spyOn(registry, \"getRegistryTheme\").mockResolvedValue({\n\t\tinlineColors: {\n\t\t\tlight: {},\n\t\t\tdark: {},\n\t\t},\n\t\tcssVars: {\n\t\t\tlight: {},\n\t\t\tdark: {},\n\t\t},\n\t});\n\n\tvi.spyOn(registry, \"resolveRegistryItems\").mockResolvedValue([\n\t\t{\n\t\t\tname: \"init\",\n\t\t\ttype: \"registry:style\",\n\t\t\tdevDependencies: [\"tailwind-variants\", \"@lucide/svelte\", \"tw-animate-css\"],\n\t\t\trelativeUrl: \"init.json\",\n\t\t},\n\t\t{\n\t\t\tname: \"utils\",\n\t\t\ttype: \"registry:lib\",\n\t\t\tdevDependencies: [\"clsx@latest\", \"tailwind-merge@latest\"],\n\t\t\tfiles: [\n\t\t\t\t{\n\t\t\t\t\tcontent: 'import { clsx, type ClassValue } from \"clsx\";',\n\t\t\t\t\ttype: \"registry:lib\",\n\t\t\t\t\ttarget: \"utils.ts\",\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t]);\n\n\tvi.spyOn(registry, \"getRegistryIndex\").mockResolvedValue([\n\t\t{\n\t\t\tname: \"init\",\n\t\t\ttype: \"registry:style\",\n\t\t\tregistryDependencies: [\"utils\"],\n\t\t\trelativeUrl: \"init.json\",\n\t\t},\n\t\t{\n\t\t\tname: \"utils\",\n\t\t\ttype: \"registry:lib\",\n\t\t\trelativeUrl: \"utils.json\",\n\t\t},\n\t]);\n\n\tvi.spyOn(registry, \"fetchRegistryItems\").mockResolvedValue([\n\t\t{\n\t\t\tname: \"init\",\n\t\t\ttype: \"registry:style\",\n\t\t\tdevDependencies: [\"tailwind-variants\", \"@lucide/svelte\", \"tw-animate-css\"],\n\t\t\tregistryDependencies: [\"utils\"],\n\t\t\tfiles: [],\n\t\t\tcss: { \"@import 'tailwindcss'\": {} },\n\t\t\t$schema: \"...\",\n\t\t},\n\t\t{\n\t\t\tname: \"utils\",\n\t\t\ttype: \"registry:lib\",\n\t\t\tdevDependencies: [\"clsx\", \"tailwind-merge\"],\n\t\t\tfiles: [{ content: \"<UTILS CONTENT>\", type: \"registry:lib\", target: \"utils.ts\" }],\n\t\t\t$schema: \"...\",\n\t\t},\n\t]);\n\n\tconst mockMkdir = vi.spyOn(fs.promises, \"mkdir\").mockResolvedValue(undefined);\n\tconst mockWriteFile = vi.spyOn(fs.promises, \"writeFile\").mockResolvedValue();\n\tconst mockWriteFileSync = vi.spyOn(fs, \"writeFileSync\").mockResolvedValue();\n\n\tconst targetDir = path.resolve(__dirname, \"../fixtures/config-full\");\n\tconst config = await getConfig(targetDir);\n\tif (!config) throw new Error(\"config is undefined\");\n\n\tawait runInit({\n\t\tcwd: targetDir,\n\t\tconfig,\n\t\tdecidedPresets: {\n\t\t\tstyle: \"vega\",\n\t\t\ttheme: \"neutral\",\n\t\t\tfont: \"inter\",\n\t\t\tradius: \"default\",\n\t\t\tbaseColor: \"zinc\",\n\t\t\ticonLibrary: \"lucide\",\n\t\t\tmenuColor: \"default\",\n\t\t\tmenuAccent: \"subtle\",\n\t\t},\n\t\toptions: {\n\t\t\tcwd: targetDir,\n\t\t\tdeps: true,\n\t\t\toverwrite: true,\n\t\t\tskipPreflight: false,\n\t\t},\n\t});\n\n\t// mkDir mocks\n\n\texpect(mockWriteFile).toHaveBeenNthCalledWith(\n\t\t1,\n\t\texpect.stringContaining(\"utils\"),\n\t\texpect.stringContaining(\"<UTILS CONTENT>\"),\n\t\t\"utf8\"\n\t);\n\texpect(mockWriteFile).toHaveBeenNthCalledWith(\n\t\t2,\n\t\texpect.stringContaining(\"app.css\"),\n\t\texpect.stringContaining(`@import 'tailwindcss'`),\n\t\t\"utf8\"\n\t);\n\n\t// Verify key directories were created (order may vary)\n\tconst mkdirCalls = mockMkdir.mock.calls.map((call) => call[0]);\n\texpect(mkdirCalls.some((p) => String(p).includes(path.join(\"src\", \"lib\")))).toBe(true);\n\texpect(mkdirCalls.some((p) => String(p).includes(path.join(\"src\", \"lib\", \"hooks\")))).toBe(true);\n\texpect(mkdirCalls.some((p) => String(p).includes(path.join(\"src\", \"lib\", \"components\")))).toBe(\n\t\ttrue\n\t);\n\n\texpect(mockWriteFileSync).toHaveBeenNthCalledWith(\n\t\t1,\n\t\texpect.stringContaining(\"components.json\"),\n\t\texpect.stringContaining('\"aliases\"'),\n\t\t\"utf8\"\n\t);\n\n\texpect(exec).toHaveBeenCalledWith(\n\t\t\"pnpm\",\n\t\t[\n\t\t\t\"add\",\n\t\t\t\"-D\",\n\t\t\t\"tailwind-variants@latest\",\n\t\t\t\"@lucide/svelte@latest\",\n\t\t\t\"tw-animate-css@latest\",\n\t\t\t\"clsx@latest\",\n\t\t\t\"tailwind-merge@latest\",\n\t\t],\n\t\t{ throwOnError: true, nodeOptions: { cwd: targetDir } }\n\t);\n\n\tmockMkdir.mockRestore();\n\tmockWriteFile.mockRestore();\n});\n\nafterEach(() => {\n\tvi.resetAllMocks();\n});\n"
  },
  {
    "path": "packages/cli/test/fixtures/colors/neutral.json",
    "content": "{\n\t\"inlineColors\": {\n\t\t\"light\": {\n\t\t\t\"background\": \"white\",\n\t\t\t\"foreground\": \"neutral-950\",\n\t\t\t\"muted\": \"neutral-100\",\n\t\t\t\"muted-foreground\": \"neutral-500\",\n\t\t\t\"popover\": \"white\",\n\t\t\t\"popover-foreground\": \"neutral-950\",\n\t\t\t\"border\": \"neutral-200\",\n\t\t\t\"input\": \"neutral-200\",\n\t\t\t\"card\": \"white\",\n\t\t\t\"card-foreground\": \"neutral-950\",\n\t\t\t\"primary\": \"neutral-900\",\n\t\t\t\"primary-foreground\": \"neutral-50\",\n\t\t\t\"secondary\": \"neutral-100\",\n\t\t\t\"secondary-foreground\": \"neutral-900\",\n\t\t\t\"accent\": \"neutral-100\",\n\t\t\t\"accent-foreground\": \"neutral-900\",\n\t\t\t\"destructive\": \"red-500\",\n\t\t\t\"destructive-foreground\": \"neutral-50\",\n\t\t\t\"ring\": \"neutral-400\"\n\t\t},\n\t\t\"dark\": {\n\t\t\t\"background\": \"neutral-950\",\n\t\t\t\"foreground\": \"neutral-50\",\n\t\t\t\"muted\": \"neutral-800\",\n\t\t\t\"muted-foreground\": \"neutral-400\",\n\t\t\t\"popover\": \"neutral-950\",\n\t\t\t\"popover-foreground\": \"neutral-50\",\n\t\t\t\"border\": \"neutral-800\",\n\t\t\t\"input\": \"neutral-800\",\n\t\t\t\"card\": \"neutral-950\",\n\t\t\t\"card-foreground\": \"neutral-50\",\n\t\t\t\"primary\": \"neutral-50\",\n\t\t\t\"primary-foreground\": \"neutral-900\",\n\t\t\t\"secondary\": \"neutral-800\",\n\t\t\t\"secondary-foreground\": \"neutral-50\",\n\t\t\t\"accent\": \"neutral-800\",\n\t\t\t\"accent-foreground\": \"neutral-50\",\n\t\t\t\"destructive\": \"red-900\",\n\t\t\t\"destructive-foreground\": \"red-50\",\n\t\t\t\"ring\": \"neutral-800\"\n\t\t}\n\t},\n\t\"cssVars\": {\n\t\t\"light\": {\n\t\t\t\"background\": \"0 0% 100%\",\n\t\t\t\"foreground\": \"0 0% 3.9%\",\n\t\t\t\"muted\": \"0 0% 96.1%\",\n\t\t\t\"muted-foreground\": \"0 0% 45.1%\",\n\t\t\t\"popover\": \"0 0% 100%\",\n\t\t\t\"popover-foreground\": \"0 0% 3.9%\",\n\t\t\t\"border\": \"0 0% 89.8%\",\n\t\t\t\"input\": \"0 0% 89.8%\",\n\t\t\t\"card\": \"0 0% 100%\",\n\t\t\t\"card-foreground\": \"0 0% 3.9%\",\n\t\t\t\"primary\": \"0 0% 9%\",\n\t\t\t\"primary-foreground\": \"0 0% 98%\",\n\t\t\t\"secondary\": \"0 0% 96.1%\",\n\t\t\t\"secondary-foreground\": \"0 0% 9%\",\n\t\t\t\"accent\": \"0 0% 96.1%\",\n\t\t\t\"accent-foreground\": \"0 0% 9%\",\n\t\t\t\"destructive\": \"0 84.2% 60.2%\",\n\t\t\t\"destructive-foreground\": \"0 0% 98%\",\n\t\t\t\"ring\": \"0 0% 63.9%\"\n\t\t},\n\t\t\"dark\": {\n\t\t\t\"background\": \"0 0% 3.9%\",\n\t\t\t\"foreground\": \"0 0% 98%\",\n\t\t\t\"muted\": \"0 0% 14.9%\",\n\t\t\t\"muted-foreground\": \"0 0% 63.9%\",\n\t\t\t\"popover\": \"0 0% 3.9%\",\n\t\t\t\"popover-foreground\": \"0 0% 98%\",\n\t\t\t\"border\": \"0 0% 14.9%\",\n\t\t\t\"input\": \"0 0% 14.9%\",\n\t\t\t\"card\": \"0 0% 3.9%\",\n\t\t\t\"card-foreground\": \"0 0% 98%\",\n\t\t\t\"primary\": \"0 0% 98%\",\n\t\t\t\"primary-foreground\": \"0 0% 9%\",\n\t\t\t\"secondary\": \"0 0% 14.9%\",\n\t\t\t\"secondary-foreground\": \"0 0% 98%\",\n\t\t\t\"accent\": \"0 0% 14.9%\",\n\t\t\t\"accent-foreground\": \"0 0% 98%\",\n\t\t\t\"destructive\": \"0 62.8% 30.6%\",\n\t\t\t\"destructive-foreground\": \"0 85.7% 97.3%\",\n\t\t\t\"ring\": \"0 0% 14.9%\"\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/cli/test/fixtures/colors/slate.json",
    "content": "{\n\t\"inlineColors\": {\n\t\t\"light\": {\n\t\t\t\"background\": \"white\",\n\t\t\t\"foreground\": \"slate-950\",\n\t\t\t\"muted\": \"slate-100\",\n\t\t\t\"muted-foreground\": \"slate-500\",\n\t\t\t\"popover\": \"white\",\n\t\t\t\"popover-foreground\": \"slate-950\",\n\t\t\t\"border\": \"slate-200\",\n\t\t\t\"input\": \"slate-200\",\n\t\t\t\"card\": \"white\",\n\t\t\t\"card-foreground\": \"slate-950\",\n\t\t\t\"primary\": \"slate-900\",\n\t\t\t\"primary-foreground\": \"slate-50\",\n\t\t\t\"secondary\": \"slate-100\",\n\t\t\t\"secondary-foreground\": \"slate-900\",\n\t\t\t\"accent\": \"slate-100\",\n\t\t\t\"accent-foreground\": \"slate-900\",\n\t\t\t\"destructive\": \"red-500\",\n\t\t\t\"destructive-foreground\": \"slate-50\",\n\t\t\t\"ring\": \"slate-400\"\n\t\t},\n\t\t\"dark\": {\n\t\t\t\"background\": \"slate-950\",\n\t\t\t\"foreground\": \"slate-50\",\n\t\t\t\"muted\": \"slate-800\",\n\t\t\t\"muted-foreground\": \"slate-400\",\n\t\t\t\"popover\": \"slate-950\",\n\t\t\t\"popover-foreground\": \"slate-50\",\n\t\t\t\"border\": \"slate-800\",\n\t\t\t\"input\": \"slate-800\",\n\t\t\t\"card\": \"slate-950\",\n\t\t\t\"card-foreground\": \"slate-50\",\n\t\t\t\"primary\": \"slate-50\",\n\t\t\t\"primary-foreground\": \"slate-900\",\n\t\t\t\"secondary\": \"slate-800\",\n\t\t\t\"secondary-foreground\": \"slate-50\",\n\t\t\t\"accent\": \"slate-800\",\n\t\t\t\"accent-foreground\": \"slate-50\",\n\t\t\t\"destructive\": \"red-900\",\n\t\t\t\"destructive-foreground\": \"red-50\",\n\t\t\t\"ring\": \"slate-800\"\n\t\t}\n\t},\n\t\"cssVars\": {\n\t\t\"light\": {\n\t\t\t\"background\": \"0 0% 100%\",\n\t\t\t\"foreground\": \"222.2 84% 4.9%\",\n\t\t\t\"muted\": \"210 40% 96.1%\",\n\t\t\t\"muted-foreground\": \"215.4 16.3% 46.9%\",\n\t\t\t\"popover\": \"0 0% 100%\",\n\t\t\t\"popover-foreground\": \"222.2 84% 4.9%\",\n\t\t\t\"border\": \"214.3 31.8% 91.4%\",\n\t\t\t\"input\": \"214.3 31.8% 91.4%\",\n\t\t\t\"card\": \"0 0% 100%\",\n\t\t\t\"card-foreground\": \"222.2 84% 4.9%\",\n\t\t\t\"primary\": \"222.2 47.4% 11.2%\",\n\t\t\t\"primary-foreground\": \"210 40% 98%\",\n\t\t\t\"secondary\": \"210 40% 96.1%\",\n\t\t\t\"secondary-foreground\": \"222.2 47.4% 11.2%\",\n\t\t\t\"accent\": \"210 40% 96.1%\",\n\t\t\t\"accent-foreground\": \"222.2 47.4% 11.2%\",\n\t\t\t\"destructive\": \"0 84.2% 60.2%\",\n\t\t\t\"destructive-foreground\": \"210 40% 98%\",\n\t\t\t\"ring\": \"215 20.2% 65.1%\"\n\t\t},\n\t\t\"dark\": {\n\t\t\t\"background\": \"222.2 84% 4.9%\",\n\t\t\t\"foreground\": \"210 40% 98%\",\n\t\t\t\"muted\": \"217.2 32.6% 17.5%\",\n\t\t\t\"muted-foreground\": \"215 20.2% 65.1%\",\n\t\t\t\"popover\": \"222.2 84% 4.9%\",\n\t\t\t\"popover-foreground\": \"210 40% 98%\",\n\t\t\t\"border\": \"217.2 32.6% 17.5%\",\n\t\t\t\"input\": \"217.2 32.6% 17.5%\",\n\t\t\t\"card\": \"222.2 84% 4.9%\",\n\t\t\t\"card-foreground\": \"210 40% 98%\",\n\t\t\t\"primary\": \"210 40% 98%\",\n\t\t\t\"primary-foreground\": \"222.2 47.4% 11.2%\",\n\t\t\t\"secondary\": \"217.2 32.6% 17.5%\",\n\t\t\t\"secondary-foreground\": \"210 40% 98%\",\n\t\t\t\"accent\": \"217.2 32.6% 17.5%\",\n\t\t\t\"accent-foreground\": \"210 40% 98%\",\n\t\t\t\"destructive\": \"0 62.8% 30.6%\",\n\t\t\t\"destructive-foreground\": \"0 85.7% 97.3%\",\n\t\t\t\"ring\": \"217.2 32.6% 17.5%\"\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/cli/test/fixtures/colors/stone.json",
    "content": "{\n\t\"inlineColors\": {\n\t\t\"light\": {\n\t\t\t\"background\": \"white\",\n\t\t\t\"foreground\": \"stone-950\",\n\t\t\t\"muted\": \"stone-100\",\n\t\t\t\"muted-foreground\": \"stone-500\",\n\t\t\t\"popover\": \"white\",\n\t\t\t\"popover-foreground\": \"stone-950\",\n\t\t\t\"border\": \"stone-200\",\n\t\t\t\"input\": \"stone-200\",\n\t\t\t\"card\": \"white\",\n\t\t\t\"card-foreground\": \"stone-950\",\n\t\t\t\"primary\": \"stone-900\",\n\t\t\t\"primary-foreground\": \"stone-50\",\n\t\t\t\"secondary\": \"stone-100\",\n\t\t\t\"secondary-foreground\": \"stone-900\",\n\t\t\t\"accent\": \"stone-100\",\n\t\t\t\"accent-foreground\": \"stone-900\",\n\t\t\t\"destructive\": \"red-500\",\n\t\t\t\"destructive-foreground\": \"stone-50\",\n\t\t\t\"ring\": \"stone-400\"\n\t\t},\n\t\t\"dark\": {\n\t\t\t\"background\": \"stone-950\",\n\t\t\t\"foreground\": \"stone-50\",\n\t\t\t\"muted\": \"stone-800\",\n\t\t\t\"muted-foreground\": \"stone-400\",\n\t\t\t\"popover\": \"stone-950\",\n\t\t\t\"popover-foreground\": \"stone-50\",\n\t\t\t\"border\": \"stone-800\",\n\t\t\t\"input\": \"stone-800\",\n\t\t\t\"card\": \"stone-950\",\n\t\t\t\"card-foreground\": \"stone-50\",\n\t\t\t\"primary\": \"stone-50\",\n\t\t\t\"primary-foreground\": \"stone-900\",\n\t\t\t\"secondary\": \"stone-800\",\n\t\t\t\"secondary-foreground\": \"stone-50\",\n\t\t\t\"accent\": \"stone-800\",\n\t\t\t\"accent-foreground\": \"stone-50\",\n\t\t\t\"destructive\": \"red-900\",\n\t\t\t\"destructive-foreground\": \"red-50\",\n\t\t\t\"ring\": \"stone-800\"\n\t\t}\n\t},\n\t\"cssVars\": {\n\t\t\"light\": {\n\t\t\t\"background\": \"0 0% 100%\",\n\t\t\t\"foreground\": \"20 14.3% 4.1%\",\n\t\t\t\"muted\": \"60 4.8% 95.9%\",\n\t\t\t\"muted-foreground\": \"25 5.3% 44.7%\",\n\t\t\t\"popover\": \"0 0% 100%\",\n\t\t\t\"popover-foreground\": \"20 14.3% 4.1%\",\n\t\t\t\"border\": \"20 5.9% 90%\",\n\t\t\t\"input\": \"20 5.9% 90%\",\n\t\t\t\"card\": \"0 0% 100%\",\n\t\t\t\"card-foreground\": \"20 14.3% 4.1%\",\n\t\t\t\"primary\": \"24 9.8% 10%\",\n\t\t\t\"primary-foreground\": \"60 9.1% 97.8%\",\n\t\t\t\"secondary\": \"60 4.8% 95.9%\",\n\t\t\t\"secondary-foreground\": \"24 9.8% 10%\",\n\t\t\t\"accent\": \"60 4.8% 95.9%\",\n\t\t\t\"accent-foreground\": \"24 9.8% 10%\",\n\t\t\t\"destructive\": \"0 84.2% 60.2%\",\n\t\t\t\"destructive-foreground\": \"60 9.1% 97.8%\",\n\t\t\t\"ring\": \"24 5.4% 63.9%\"\n\t\t},\n\t\t\"dark\": {\n\t\t\t\"background\": \"20 14.3% 4.1%\",\n\t\t\t\"foreground\": \"60 9.1% 97.8%\",\n\t\t\t\"muted\": \"12 6.5% 15.1%\",\n\t\t\t\"muted-foreground\": \"24 5.4% 63.9%\",\n\t\t\t\"popover\": \"20 14.3% 4.1%\",\n\t\t\t\"popover-foreground\": \"60 9.1% 97.8%\",\n\t\t\t\"border\": \"12 6.5% 15.1%\",\n\t\t\t\"input\": \"12 6.5% 15.1%\",\n\t\t\t\"card\": \"20 14.3% 4.1%\",\n\t\t\t\"card-foreground\": \"60 9.1% 97.8%\",\n\t\t\t\"primary\": \"60 9.1% 97.8%\",\n\t\t\t\"primary-foreground\": \"24 9.8% 10%\",\n\t\t\t\"secondary\": \"12 6.5% 15.1%\",\n\t\t\t\"secondary-foreground\": \"60 9.1% 97.8%\",\n\t\t\t\"accent\": \"12 6.5% 15.1%\",\n\t\t\t\"accent-foreground\": \"60 9.1% 97.8%\",\n\t\t\t\"destructive\": \"0 62.8% 30.6%\",\n\t\t\t\"destructive-foreground\": \"0 85.7% 97.3%\",\n\t\t\t\"ring\": \"12 6.5% 15.1%\"\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/cli/test/fixtures/colors/zinc.json",
    "content": "{\n\t\"inlineColors\": {\n\t\t\"light\": {\n\t\t\t\"background\": \"white\",\n\t\t\t\"foreground\": \"zinc-950\",\n\t\t\t\"muted\": \"zinc-100\",\n\t\t\t\"muted-foreground\": \"zinc-500\",\n\t\t\t\"popover\": \"white\",\n\t\t\t\"popover-foreground\": \"zinc-950\",\n\t\t\t\"border\": \"zinc-200\",\n\t\t\t\"input\": \"zinc-200\",\n\t\t\t\"card\": \"white\",\n\t\t\t\"card-foreground\": \"zinc-950\",\n\t\t\t\"primary\": \"zinc-900\",\n\t\t\t\"primary-foreground\": \"zinc-50\",\n\t\t\t\"secondary\": \"zinc-100\",\n\t\t\t\"secondary-foreground\": \"zinc-900\",\n\t\t\t\"accent\": \"zinc-100\",\n\t\t\t\"accent-foreground\": \"zinc-900\",\n\t\t\t\"destructive\": \"red-500\",\n\t\t\t\"destructive-foreground\": \"zinc-50\",\n\t\t\t\"ring\": \"zinc-400\"\n\t\t},\n\t\t\"dark\": {\n\t\t\t\"background\": \"zinc-950\",\n\t\t\t\"foreground\": \"zinc-50\",\n\t\t\t\"muted\": \"zinc-800\",\n\t\t\t\"muted-foreground\": \"zinc-400\",\n\t\t\t\"popover\": \"zinc-950\",\n\t\t\t\"popover-foreground\": \"zinc-50\",\n\t\t\t\"border\": \"zinc-800\",\n\t\t\t\"input\": \"zinc-800\",\n\t\t\t\"card\": \"zinc-950\",\n\t\t\t\"card-foreground\": \"zinc-50\",\n\t\t\t\"primary\": \"zinc-50\",\n\t\t\t\"primary-foreground\": \"zinc-900\",\n\t\t\t\"secondary\": \"zinc-800\",\n\t\t\t\"secondary-foreground\": \"zinc-50\",\n\t\t\t\"accent\": \"zinc-800\",\n\t\t\t\"accent-foreground\": \"zinc-50\",\n\t\t\t\"destructive\": \"red-900\",\n\t\t\t\"destructive-foreground\": \"red-50\",\n\t\t\t\"ring\": \"zinc-800\"\n\t\t}\n\t},\n\t\"cssVars\": {\n\t\t\"light\": {\n\t\t\t\"background\": \"0 0% 100%\",\n\t\t\t\"foreground\": \"240 10% 3.9%\",\n\t\t\t\"muted\": \"240 4.8% 95.9%\",\n\t\t\t\"muted-foreground\": \"240 3.8% 46.1%\",\n\t\t\t\"popover\": \"0 0% 100%\",\n\t\t\t\"popover-foreground\": \"240 10% 3.9%\",\n\t\t\t\"border\": \"240 5.9% 90%\",\n\t\t\t\"input\": \"240 5.9% 90%\",\n\t\t\t\"card\": \"0 0% 100%\",\n\t\t\t\"card-foreground\": \"240 10% 3.9%\",\n\t\t\t\"primary\": \"240 5.9% 10%\",\n\t\t\t\"primary-foreground\": \"0 0% 98%\",\n\t\t\t\"secondary\": \"240 4.8% 95.9%\",\n\t\t\t\"secondary-foreground\": \"240 5.9% 10%\",\n\t\t\t\"accent\": \"240 4.8% 95.9%\",\n\t\t\t\"accent-foreground\": \"240 5.9% 10%\",\n\t\t\t\"destructive\": \"0 84.2% 60.2%\",\n\t\t\t\"destructive-foreground\": \"0 0% 98%\",\n\t\t\t\"ring\": \"240 5% 64.9%\"\n\t\t},\n\t\t\"dark\": {\n\t\t\t\"background\": \"240 10% 3.9%\",\n\t\t\t\"foreground\": \"0 0% 98%\",\n\t\t\t\"muted\": \"240 3.7% 15.9%\",\n\t\t\t\"muted-foreground\": \"240 5% 64.9%\",\n\t\t\t\"popover\": \"240 10% 3.9%\",\n\t\t\t\"popover-foreground\": \"0 0% 98%\",\n\t\t\t\"border\": \"240 3.7% 15.9%\",\n\t\t\t\"input\": \"240 3.7% 15.9%\",\n\t\t\t\"card\": \"240 10% 3.9%\",\n\t\t\t\"card-foreground\": \"0 0% 98%\",\n\t\t\t\"primary\": \"0 0% 98%\",\n\t\t\t\"primary-foreground\": \"240 5.9% 10%\",\n\t\t\t\"secondary\": \"240 3.7% 15.9%\",\n\t\t\t\"secondary-foreground\": \"0 0% 98%\",\n\t\t\t\"accent\": \"240 3.7% 15.9%\",\n\t\t\t\"accent-foreground\": \"0 0% 98%\",\n\t\t\t\"destructive\": \"0 62.8% 30.6%\",\n\t\t\t\"destructive-foreground\": \"0 85.7% 97.3%\",\n\t\t\t\"ring\": \"240 3.7% 15.9%\"\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/cli/test/fixtures/config-custom-tsconfig/components.json",
    "content": "{\n\t\"tailwind\": {\n\t\t\"css\": \"src/app.css\",\n\t\t\"baseColor\": \"zinc\"\n\t},\n\t\"aliases\": {\n\t\t\"components\": \"$lib/components\",\n\t\t\"utils\": \"$lib/utils\",\n\t\t\"ui\": \"$lib/components/ui\",\n\t\t\"hooks\": \"$lib/hooks\",\n\t\t\"lib\": \"$lib\"\n\t},\n\t\"typescript\": {\n\t\t\"config\": \"tsconfig.base.json\"\n\t},\n\t\"registry\": \"https://shadcn-svelte.com/registry\"\n}\n"
  },
  {
    "path": "packages/cli/test/fixtures/config-custom-tsconfig/package.json",
    "content": "{\n\t\"name\": \"test-cli-config-full\",\n\t\"version\": \"0.0.0\",\n\t\"private\": true,\n\t\"devDependencies\": {\n\t\t\"@sveltejs/adapter-auto\": \"^3.0.0\",\n\t\t\"@sveltejs/kit\": \"^2.0.0\",\n\t\t\"@sveltejs/vite-plugin-svelte\": \"^3.0.0\",\n\t\t\"svelte\": \"^4.2.7\",\n\t\t\"svelte-check\": \"^3.6.0\",\n\t\t\"tslib\": \"^2.4.1\",\n\t\t\"typescript\": \"^5.0.0\",\n\t\t\"vite\": \"^5.0.3\"\n\t},\n\t\"type\": \"module\"\n}\n"
  },
  {
    "path": "packages/cli/test/fixtures/config-custom-tsconfig/tsconfig.base.json",
    "content": "{\n\t\"extends\": \"./.svelte-kit/tsconfig.json\",\n\t\"compilerOptions\": {\n\t\t\"allowJs\": true,\n\t\t\"checkJs\": true,\n\t\t\"esModuleInterop\": true,\n\t\t\"forceConsistentCasingInFileNames\": true,\n\t\t\"resolveJsonModule\": true,\n\t\t\"skipLibCheck\": true,\n\t\t\"sourceMap\": true,\n\t\t\"strict\": true,\n\t\t\"moduleResolution\": \"bundler\"\n\t}\n}\n"
  },
  {
    "path": "packages/cli/test/fixtures/config-full/components.json",
    "content": "{\n\t\"tailwind\": {\n\t\t\"css\": \"src/app.css\",\n\t\t\"baseColor\": \"zinc\"\n\t},\n\t\"aliases\": {\n\t\t\"components\": \"$lib/components\",\n\t\t\"utils\": \"$lib/utils\",\n\t\t\"ui\": \"$lib/components/ui\",\n\t\t\"hooks\": \"$lib/hooks\",\n\t\t\"lib\": \"$lib\"\n\t},\n\t\"designSystem\": {\n\t\t\"fonts\": [\n\t\t\t{\n\t\t\t\t\"font\": {\n\t\t\t\t\t\"cssImport\": \"@import \\\"@fontsource-variable/inter/index.css\\\";\",\n\t\t\t\t\t\"dependencies\": [\"@fontsource-variable/inter\"],\n\t\t\t\t\t\"family\": \"'Inter Variable', sans-serif\",\n\t\t\t\t\t\"variable\": \"--font-sans\"\n\t\t\t\t},\n\t\t\t\t\"name\": \"font-inter\",\n\t\t\t\t\"title\": \"Inter\",\n\t\t\t\t\"type\": \"registry:font\"\n\t\t\t}\n\t\t],\n\t\t\"iconLibrary\": \"lucide\",\n\t\t\"menuAccent\": \"subtle\",\n\t\t\"menuColor\": \"default\",\n\t\t\"radius\": \"0.5rem\",\n\t\t\"style\": \"vega\",\n\t\t\"theme\": \"neutral\"\n\t},\n\t\"typescript\": true,\n\t\"registry\": \"https://shadcn-svelte.com/registry\"\n}\n"
  },
  {
    "path": "packages/cli/test/fixtures/config-full/package.json",
    "content": "{\n\t\"name\": \"test-cli-config-full\",\n\t\"version\": \"0.0.0\",\n\t\"private\": true,\n\t\"devDependencies\": {\n\t\t\"@sveltejs/adapter-auto\": \"^3.0.0\",\n\t\t\"@sveltejs/kit\": \"^2.0.0\",\n\t\t\"@sveltejs/vite-plugin-svelte\": \"^3.0.0\",\n\t\t\"svelte\": \"^4.2.7\",\n\t\t\"svelte-check\": \"^3.6.0\",\n\t\t\"tslib\": \"^2.4.1\",\n\t\t\"typescript\": \"^5.0.0\",\n\t\t\"vite\": \"^5.0.3\"\n\t},\n\t\"type\": \"module\"\n}\n"
  },
  {
    "path": "packages/cli/test/fixtures/config-full/src/app.css",
    "content": ""
  },
  {
    "path": "packages/cli/test/fixtures/config-full/tsconfig.json",
    "content": "{\n\t\"extends\": \"./.svelte-kit/tsconfig.json\",\n\t\"compilerOptions\": {\n\t\t\"allowJs\": true,\n\t\t\"checkJs\": true,\n\t\t\"esModuleInterop\": true,\n\t\t\"forceConsistentCasingInFileNames\": true,\n\t\t\"resolveJsonModule\": true,\n\t\t\"skipLibCheck\": true,\n\t\t\"sourceMap\": true,\n\t\t\"strict\": true,\n\t\t\"moduleResolution\": \"bundler\"\n\t}\n}\n"
  },
  {
    "path": "packages/cli/test/fixtures/config-invalid/components.json",
    "content": "{\n\t\"tailwind\": {\n\t\t\"config\": \"tailwind.config.js\",\n\t\t\"css\": \"src/app.css\",\n\t\t\"baseColor\": \"zinc\"\n\t},\n\t\"alias\": {\n\t\t\"utils\": \"$lib/utils\",\n\t\t\"components\": \"$lib/components\"\n\t},\n\t\"typescript\": true\n}\n"
  },
  {
    "path": "packages/cli/test/fixtures/config-invalid/package.json",
    "content": "{\n\t\"name\": \"test-cli-config-full\",\n\t\"version\": \"0.0.0\",\n\t\"private\": true,\n\t\"devDependencies\": {\n\t\t\"@sveltejs/adapter-auto\": \"^3.0.0\",\n\t\t\"@sveltejs/kit\": \"^2.0.0\",\n\t\t\"@sveltejs/vite-plugin-svelte\": \"^3.0.0\",\n\t\t\"svelte\": \"^4.2.7\",\n\t\t\"svelte-check\": \"^3.6.0\",\n\t\t\"tslib\": \"^2.4.1\",\n\t\t\"typescript\": \"^5.0.0\",\n\t\t\"vite\": \"^5.0.3\"\n\t},\n\t\"type\": \"module\"\n}\n"
  },
  {
    "path": "packages/cli/test/fixtures/config-invalid/tsconfig.json",
    "content": "{\n\t\"extends\": \"./.svelte-kit/tsconfig.json\",\n\t\"compilerOptions\": {\n\t\t\"allowJs\": true,\n\t\t\"checkJs\": true,\n\t\t\"esModuleInterop\": true,\n\t\t\"forceConsistentCasingInFileNames\": true,\n\t\t\"resolveJsonModule\": true,\n\t\t\"skipLibCheck\": true,\n\t\t\"sourceMap\": true,\n\t\t\"strict\": true,\n\t\t\"moduleResolution\": \"bundler\"\n\t}\n}\n"
  },
  {
    "path": "packages/cli/test/fixtures/config-jsconfig/components.json",
    "content": "{\n\t\"tailwind\": {\n\t\t\"config\": \"tailwind.config.js\",\n\t\t\"css\": \"src/app.css\",\n\t\t\"baseColor\": \"zinc\"\n\t},\n\t\"aliases\": {\n\t\t\"components\": \"$lib/components\",\n\t\t\"utils\": \"$lib/utils\",\n\t\t\"ui\": \"$lib/components/ui\",\n\t\t\"hooks\": \"$lib/hooks\"\n\t},\n\t\"typescript\": false,\n\t\"registry\": \"https://shadcn-svelte.com/registry\"\n}\n"
  },
  {
    "path": "packages/cli/test/fixtures/config-jsconfig/jsconfig.json",
    "content": "{\n\t\"compilerOptions\": {\n\t\t\"allowJs\": true,\n\t\t\"checkJs\": true,\n\t\t\"esModuleInterop\": true,\n\t\t\"forceConsistentCasingInFileNames\": true,\n\t\t\"resolveJsonModule\": true,\n\t\t\"skipLibCheck\": true,\n\t\t\"sourceMap\": true,\n\t\t\"strict\": true,\n\t\t\"moduleResolution\": \"bundler\",\n\t\t\"paths\": {\n\t\t\t\"$lib\": [\"./src/lib\"],\n\t\t\t\"$lib/*\": [\"./src/lib/*\"]\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/cli/test/fixtures/config-jsconfig/package.json",
    "content": "{\n\t\"name\": \"test-cli-config-full\",\n\t\"version\": \"0.0.0\",\n\t\"private\": true,\n\t\"devDependencies\": {\n\t\t\"@sveltejs/vite-plugin-svelte\": \"^3.0.0\",\n\t\t\"svelte\": \"^4.2.7\",\n\t\t\"svelte-check\": \"^3.6.0\",\n\t\t\"tslib\": \"^2.4.1\",\n\t\t\"typescript\": \"^5.0.0\",\n\t\t\"vite\": \"^5.0.3\"\n\t},\n\t\"type\": \"module\"\n}\n"
  },
  {
    "path": "packages/cli/test/fixtures/config-none/package.json",
    "content": "{\n\t\"name\": \"test-cli-config-full\",\n\t\"version\": \"0.0.0\",\n\t\"private\": true,\n\t\"devDependencies\": {\n\t\t\"@sveltejs/adapter-auto\": \"^3.0.0\",\n\t\t\"@sveltejs/kit\": \"^2.0.0\",\n\t\t\"@sveltejs/vite-plugin-svelte\": \"^3.0.0\",\n\t\t\"svelte\": \"^4.2.7\",\n\t\t\"svelte-check\": \"^3.6.0\",\n\t\t\"tslib\": \"^2.4.1\",\n\t\t\"typescript\": \"^5.0.0\",\n\t\t\"vite\": \"^5.0.3\"\n\t},\n\t\"type\": \"module\"\n}\n"
  },
  {
    "path": "packages/cli/test/fixtures/config-none/tsconfig.json",
    "content": "{\n\t\"extends\": \"./.svelte-kit/tsconfig.json\",\n\t\"compilerOptions\": {\n\t\t\"allowJs\": true,\n\t\t\"checkJs\": true,\n\t\t\"esModuleInterop\": true,\n\t\t\"forceConsistentCasingInFileNames\": true,\n\t\t\"resolveJsonModule\": true,\n\t\t\"skipLibCheck\": true,\n\t\t\"sourceMap\": true,\n\t\t\"strict\": true,\n\t\t\"moduleResolution\": \"bundler\"\n\t}\n}\n"
  },
  {
    "path": "packages/cli/test/fixtures/config-partial/components.json",
    "content": "{\n\t\"tailwind\": {\n\t\t\"config\": \"tailwind.config.js\",\n\t\t\"css\": \"src/app.css\",\n\t\t\"baseColor\": \"zinc\"\n\t},\n\t\"aliases\": {\n\t\t\"utils\": \"$lib/utils\",\n\t\t\"components\": \"$lib/components\"\n\t},\n\t\"typescript\": true\n}\n"
  },
  {
    "path": "packages/cli/test/fixtures/config-partial/package.json",
    "content": "{\n\t\"name\": \"test-cli-config-full\",\n\t\"version\": \"0.0.0\",\n\t\"private\": true,\n\t\"devDependencies\": {\n\t\t\"@sveltejs/adapter-auto\": \"^3.0.0\",\n\t\t\"@sveltejs/kit\": \"^2.0.0\",\n\t\t\"@sveltejs/vite-plugin-svelte\": \"^3.0.0\",\n\t\t\"svelte\": \"^4.2.7\",\n\t\t\"svelte-check\": \"^3.6.0\",\n\t\t\"tslib\": \"^2.4.1\",\n\t\t\"typescript\": \"^5.0.0\",\n\t\t\"vite\": \"^5.0.3\"\n\t},\n\t\"type\": \"module\"\n}\n"
  },
  {
    "path": "packages/cli/test/fixtures/config-partial/tsconfig.json",
    "content": "{\n\t\"extends\": \"./.svelte-kit/tsconfig.json\",\n\t\"compilerOptions\": {\n\t\t\"allowJs\": true,\n\t\t\"checkJs\": true,\n\t\t\"esModuleInterop\": true,\n\t\t\"forceConsistentCasingInFileNames\": true,\n\t\t\"resolveJsonModule\": true,\n\t\t\"skipLibCheck\": true,\n\t\t\"sourceMap\": true,\n\t\t\"strict\": true,\n\t\t\"moduleResolution\": \"bundler\"\n\t}\n}\n"
  },
  {
    "path": "packages/cli/test/fixtures/config-trailing-slashes/components.json",
    "content": "{\n\t\"tailwind\": {\n\t\t\"css\": \"src/app.css\",\n\t\t\"baseColor\": \"zinc\"\n\t},\n\t\"aliases\": {\n\t\t\"components\": \"$lib/components/\",\n\t\t\"utils\": \"$lib/utils\",\n\t\t\"ui\": \"$lib/components/ui/\",\n\t\t\"hooks\": \"$lib/hooks/\",\n\t\t\"lib\": \"$lib/\"\n\t},\n\t\"typescript\": true,\n\t\"registry\": \"https://shadcn-svelte.com/registry\"\n}\n"
  },
  {
    "path": "packages/cli/test/fixtures/config-trailing-slashes/package.json",
    "content": "{\n\t\"name\": \"test-cli-config-full\",\n\t\"version\": \"0.0.0\",\n\t\"private\": true,\n\t\"devDependencies\": {\n\t\t\"@sveltejs/adapter-auto\": \"^3.0.0\",\n\t\t\"@sveltejs/kit\": \"^2.0.0\",\n\t\t\"@sveltejs/vite-plugin-svelte\": \"^3.0.0\",\n\t\t\"svelte\": \"^4.2.7\",\n\t\t\"svelte-check\": \"^3.6.0\",\n\t\t\"tslib\": \"^2.4.1\",\n\t\t\"typescript\": \"^5.0.0\",\n\t\t\"vite\": \"^5.0.3\"\n\t},\n\t\"type\": \"module\"\n}\n"
  },
  {
    "path": "packages/cli/test/fixtures/config-trailing-slashes/tsconfig.json",
    "content": "{\n\t\"extends\": \"./.svelte-kit/tsconfig.json\",\n\t\"compilerOptions\": {\n\t\t\"allowJs\": true,\n\t\t\"checkJs\": true,\n\t\t\"esModuleInterop\": true,\n\t\t\"forceConsistentCasingInFileNames\": true,\n\t\t\"resolveJsonModule\": true,\n\t\t\"skipLibCheck\": true,\n\t\t\"sourceMap\": true,\n\t\t\"strict\": true,\n\t\t\"moduleResolution\": \"bundler\"\n\t}\n}\n"
  },
  {
    "path": "packages/cli/test/fixtures/config-vite/components.json",
    "content": "{\n\t\"tailwind\": {\n\t\t\"config\": \"tailwind.config.js\",\n\t\t\"css\": \"src/app.css\",\n\t\t\"baseColor\": \"zinc\"\n\t},\n\t\"aliases\": {\n\t\t\"components\": \"$lib/components\",\n\t\t\"utils\": \"$lib/utils\",\n\t\t\"ui\": \"$lib/components/ui\",\n\t\t\"hooks\": \"$lib/hooks\"\n\t},\n\t\"typescript\": true\n}\n"
  },
  {
    "path": "packages/cli/test/fixtures/config-vite/package.json",
    "content": "{\n\t\"name\": \"test-cli-config-full\",\n\t\"version\": \"0.0.0\",\n\t\"private\": true,\n\t\"devDependencies\": {\n\t\t\"@sveltejs/vite-plugin-svelte\": \"^3.0.0\",\n\t\t\"svelte\": \"^4.2.7\",\n\t\t\"svelte-check\": \"^3.6.0\",\n\t\t\"tslib\": \"^2.4.1\",\n\t\t\"typescript\": \"^5.0.0\",\n\t\t\"vite\": \"^5.0.3\"\n\t},\n\t\"type\": \"module\"\n}\n"
  },
  {
    "path": "packages/cli/test/fixtures/config-vite/tsconfig.json",
    "content": "{\n\t\"compilerOptions\": {\n\t\t\"allowJs\": true,\n\t\t\"checkJs\": true,\n\t\t\"esModuleInterop\": true,\n\t\t\"forceConsistentCasingInFileNames\": true,\n\t\t\"resolveJsonModule\": true,\n\t\t\"skipLibCheck\": true,\n\t\t\"sourceMap\": true,\n\t\t\"strict\": true,\n\t\t\"moduleResolution\": \"bundler\",\n\t\t\"paths\": {\n\t\t\t\"$lib\": [\"./src/lib\"],\n\t\t\t\"$lib/*\": [\"./src/lib/*\"]\n\t\t}\n\t}\n}\n"
  },
  {
    "path": "packages/cli/test/fixtures/legacy/README.md",
    "content": "# Backward Compatibility Fixtures\n\nThis directory contains fixtures to ensure backward compatibility/continuity with users running Svelte v5 and Tailwind v3.\n\n## Scenarios\n\nThere are a few scenarios that we need to support:\n\n### 1. User has an already initialized shadcn-svelte project with Svelte v5 & Tailwind v3\n\nThis is going to be the most common scenario, as the `next` registry has been receiving a lot more traffic than the `main` registry over the past year, so it's important we don't break users trust in that old `next` registry.\n\nIn this scenario, we want to keep the existing project going as it is, meaning we keep installing the older versions of the components\nand their dependencies pinned to the last version of the Tailwind v3/Svelte v5 registry.\n\nThis will ensure that there is not inconsistency between the components that have already been added, and the ones that may be added in the future.\n\n#### How it works\n\nThese users will have a `components.json` file that looks like this:\n\n```json\n{\n\t\"style\": \"new-york\" // | \"default\",\n\t\"tailwind\": {\n\t\t\"config\": \"tailwind.config.js\",\n\t\t\"css\": \"src/app.pcss\",\n\t\t\"baseColor\": \"zinc\"\n\t},\n\t\"aliases\": {\n\t\t\"components\": \"$lib/components\",\n\t\t\"utils\": \"$lib/utils\",\n\t\t\"ui\": \"$lib/components/ui\",\n\t\t\"hooks\": \"$lib/hooks\"\n\t},\n\t\"typescript\": true,\n\t\"registry\": \"https://shadcn-svelte.com/registry\"\n}\n```\n\nWhen the user runs `npx shadcn-svelte@next add <component>`, this (should?) fail the schema validation, which we use as the signal to check if the user is running Tailwind v3 in their project. If so, the following should happen:\n\n1. Pull their `style` property from the `components.json` file, which will be used to point them to the correct registry.\n2. Update the `components.json` file to the new format, stripping anything that doesn't need to be there\n3. Update the registry URL to point to the appropriate \"legacy\" registry, which is `https://tw3.shadcn-svelte.com/registry/<style>`.\n\nThen we should be able to proceed with the rest of the adding process and future add commands should _just work_.\n\n### 2. User has a yet to be initialized shadcn-svelte project with Svelte v5 & Tailwind v3\n\nIn this scenario, they don't have a `components.json` file, so _in theory_ they shouldn't have any components added yet, meaning continuous compatibility is not an issue, but supporting Tailwind v3 is (think how Tailwind v4 uses some modern browser features).\n\nThis should ultimately fail to proceed with a `shadcn-svelte init` command, and we can give the user two options:\n\n1. Upgrade to Tailwind v4 and run `npx shadcn-svelte init` again, which should work as expected\n2. Continue using Tailwind v3, but use a pinned older version of the CLI to initialize/add components which will be pinned to a specific registry schema that aligns with that CLI version."
  },
  {
    "path": "packages/cli/test/fixtures/legacy/post-init-default/components.json",
    "content": "{\n\t\"style\": \"default\",\n\t\"tailwind\": {\n\t\t\"config\": \"tailwind.config.js\",\n\t\t\"css\": \"src/app.css\",\n\t\t\"baseColor\": \"zinc\"\n\t},\n\t\"aliases\": {\n\t\t\"components\": \"$lib/components\",\n\t\t\"utils\": \"$lib/utils\",\n\t\t\"ui\": \"$lib/components/ui\",\n\t\t\"hooks\": \"$lib/hooks\"\n\t},\n\t\"typescript\": true,\n\t\"registry\": \"https://shadcn-svelte.com/registry\"\n}\n"
  },
  {
    "path": "packages/cli/test/fixtures/legacy/post-init-default/package.json",
    "content": "{\n\t\"name\": \"test-cli-legacy-post-init-default\",\n\t\"version\": \"0.0.0\",\n\t\"private\": true,\n\t\"devDependencies\": {\n\t\t\"@sveltejs/adapter-auto\": \"^3.0.0\",\n\t\t\"@sveltejs/kit\": \"^2.0.0\",\n\t\t\"@sveltejs/vite-plugin-svelte\": \"^3.0.0\",\n\t\t\"svelte\": \"^5.0.0\",\n\t\t\"svelte-check\": \"^3.6.0\",\n\t\t\"tslib\": \"^2.4.1\",\n\t\t\"tailwindcss\": \"^3.0.0\",\n\t\t\"typescript\": \"^5.0.0\",\n\t\t\"vite\": \"^5.0.3\"\n\t},\n\t\"type\": \"module\"\n}\n"
  },
  {
    "path": "packages/cli/test/fixtures/legacy/post-init-default/tsconfig.json",
    "content": "{\n\t\"compilerOptions\": {\n\t\t\"allowJs\": true,\n\t\t\"checkJs\": true,\n\t\t\"esModuleInterop\": true,\n\t\t\"forceConsistentCasingInFileNames\": true,\n\t\t\"resolveJsonModule\": true,\n\t\t\"skipLibCheck\": true,\n\t\t\"sourceMap\": true,\n\t\t\"strict\": true,\n\t\t\"moduleResolution\": \"bundler\",\n\t\t\"paths\": {\n\t\t\t\"$lib\": [\"../src/lib\"],\n\t\t\t\"$lib/*\": [\"../src/lib/*\"]\n\t\t},\n\t},\n\t\n}\n"
  },
  {
    "path": "packages/cli/test/fixtures/legacy/post-init-new-york/components.json",
    "content": "{\n\t\"style\": \"new-york\",\n\t\"tailwind\": {\n\t\t\"css\": \"src/app.css\",\n\t\t\"baseColor\": \"zinc\"\n\t},\n\t\"aliases\": {\n\t\t\"components\": \"$lib/components\",\n\t\t\"utils\": \"$lib/utils\",\n\t\t\"ui\": \"$lib/components/ui\",\n\t\t\"hooks\": \"$lib/hooks\",\n\t\t\"lib\": \"$lib\"\n\t},\n\t\"typescript\": true,\n\t\"registry\": \"https://shadcn-svelte.com/registry\"\n}\n"
  },
  {
    "path": "packages/cli/test/fixtures/legacy/post-init-new-york/package.json",
    "content": "{\n\t\"name\": \"test-cli-legacy-post-init-new-york\",\n\t\"version\": \"0.0.0\",\n\t\"private\": true,\n\t\"devDependencies\": {\n\t\t\"@sveltejs/adapter-auto\": \"^3.0.0\",\n\t\t\"@sveltejs/kit\": \"^2.0.0\",\n\t\t\"@sveltejs/vite-plugin-svelte\": \"^3.0.0\",\n\t\t\"svelte\": \"^5.0.0\",\n\t\t\"svelte-check\": \"^3.6.0\",\n\t\t\"tslib\": \"^2.4.1\",\n\t\t\"tailwindcss\": \"^3.0.0\",\n\t\t\"typescript\": \"^5.0.0\",\n\t\t\"vite\": \"^5.0.3\"\n\t},\n\t\"type\": \"module\"\n}\n"
  },
  {
    "path": "packages/cli/test/fixtures/legacy/post-init-new-york/tsconfig.json",
    "content": "{\n\t\"extends\": \"./.svelte-kit/tsconfig.json\",\n\t\"compilerOptions\": {\n\t\t\"allowJs\": true,\n\t\t\"checkJs\": true,\n\t\t\"esModuleInterop\": true,\n\t\t\"forceConsistentCasingInFileNames\": true,\n\t\t\"resolveJsonModule\": true,\n\t\t\"skipLibCheck\": true,\n\t\t\"sourceMap\": true,\n\t\t\"strict\": true,\n\t\t\"moduleResolution\": \"bundler\"\n\t}\n}\n"
  },
  {
    "path": "packages/cli/test/fixtures/legacy/post-update-default/components.json",
    "content": "{\n\t\"tailwind\": {\n\t\t\"config\": \"tailwind.config.js\",\n\t\t\"css\": \"src/app.css\",\n\t\t\"baseColor\": \"zinc\"\n\t},\n\t\"aliases\": {\n\t\t\"components\": \"$lib/components\",\n\t\t\"utils\": \"$lib/utils\",\n\t\t\"ui\": \"$lib/components/ui\",\n\t\t\"hooks\": \"$lib/hooks\"\n\t},\n\t\"typescript\": true,\n\t\"registry\": \"https://shadcn-svelte.com/registry\"\n}\n"
  },
  {
    "path": "packages/cli/test/fixtures/legacy/post-update-default/package.json",
    "content": "{\n\t\"name\": \"test-cli-legacy-post-init-default\",\n\t\"version\": \"0.0.0\",\n\t\"private\": true,\n\t\"devDependencies\": {\n\t\t\"@sveltejs/adapter-auto\": \"^3.0.0\",\n\t\t\"@sveltejs/kit\": \"^2.0.0\",\n\t\t\"@sveltejs/vite-plugin-svelte\": \"^3.0.0\",\n\t\t\"svelte\": \"^5.0.0\",\n\t\t\"svelte-check\": \"^3.6.0\",\n\t\t\"tslib\": \"^2.4.1\",\n\t\t\"tailwindcss\": \"^3.0.0\",\n\t\t\"typescript\": \"^5.0.0\",\n\t\t\"vite\": \"^5.0.3\"\n\t},\n\t\"type\": \"module\"\n}\n"
  },
  {
    "path": "packages/cli/test/fixtures/legacy/post-update-default/tsconfig.json",
    "content": "{\n\t\"extends\": \"./.svelte-kit/tsconfig.json\",\n\t\"compilerOptions\": {\n\t\t\"allowJs\": true,\n\t\t\"checkJs\": true,\n\t\t\"esModuleInterop\": true,\n\t\t\"forceConsistentCasingInFileNames\": true,\n\t\t\"resolveJsonModule\": true,\n\t\t\"skipLibCheck\": true,\n\t\t\"sourceMap\": true,\n\t\t\"strict\": true,\n\t\t\"moduleResolution\": \"bundler\"\n\t}\n}\n"
  },
  {
    "path": "packages/cli/test/fixtures/legacy/post-update-new-york/components.json",
    "content": "{\n\t\"tailwind\": {\n\t\t\"css\": \"src/app.css\",\n\t\t\"baseColor\": \"zinc\"\n\t},\n\t\"aliases\": {\n\t\t\"components\": \"$lib/components\",\n\t\t\"utils\": \"$lib/utils\",\n\t\t\"ui\": \"$lib/components/ui\",\n\t\t\"hooks\": \"$lib/hooks\",\n\t\t\"lib\": \"$lib\"\n\t},\n\t\"typescript\": true,\n\t\"registry\": \"https://shadcn-svelte.com/registry\"\n}\n"
  },
  {
    "path": "packages/cli/test/fixtures/legacy/post-update-new-york/package.json",
    "content": "{\n\t\"name\": \"test-cli-legacy-post-init-new-york\",\n\t\"version\": \"0.0.0\",\n\t\"private\": true,\n\t\"devDependencies\": {\n\t\t\"@sveltejs/adapter-auto\": \"^3.0.0\",\n\t\t\"@sveltejs/kit\": \"^2.0.0\",\n\t\t\"@sveltejs/vite-plugin-svelte\": \"^3.0.0\",\n\t\t\"svelte\": \"^5.0.0\",\n\t\t\"svelte-check\": \"^3.6.0\",\n\t\t\"tslib\": \"^2.4.1\",\n\t\t\"tailwindcss\": \"^3.0.0\",\n\t\t\"typescript\": \"^5.0.0\",\n\t\t\"vite\": \"^5.0.3\"\n\t},\n\t\"type\": \"module\"\n}\n"
  },
  {
    "path": "packages/cli/test/fixtures/legacy/post-update-new-york/tsconfig.json",
    "content": "{\n\t\"extends\": \"./.svelte-kit/tsconfig.json\",\n\t\"compilerOptions\": {\n\t\t\"allowJs\": true,\n\t\t\"checkJs\": true,\n\t\t\"esModuleInterop\": true,\n\t\t\"forceConsistentCasingInFileNames\": true,\n\t\t\"resolveJsonModule\": true,\n\t\t\"skipLibCheck\": true,\n\t\t\"sourceMap\": true,\n\t\t\"strict\": true,\n\t\t\"moduleResolution\": \"bundler\"\n\t}\n}\n"
  },
  {
    "path": "packages/cli/test/fixtures/legacy/pre-init/package.json",
    "content": "{\n\t\"name\": \"test-cli-legacy-pre-init\",\n\t\"version\": \"0.0.0\",\n\t\"private\": true,\n\t\"devDependencies\": {\n\t\t\"@sveltejs/adapter-auto\": \"^3.0.0\",\n\t\t\"@sveltejs/kit\": \"^2.0.0\",\n\t\t\"@sveltejs/vite-plugin-svelte\": \"^3.0.0\",\n\t\t\"svelte\": \"^5.0.0\",\n\t\t\"svelte-check\": \"^3.6.0\",\n\t\t\"tslib\": \"^2.4.1\",\n\t\t\"tailwindcss\": \"^3.0.0\",\n\t\t\"typescript\": \"^5.0.0\",\n\t\t\"vite\": \"^5.0.3\"\n\t},\n\t\"type\": \"module\"\n}\n"
  },
  {
    "path": "packages/cli/test/fixtures/legacy/pre-init/tsconfig.json",
    "content": "{\n\t\"extends\": \"./.svelte-kit/tsconfig.json\",\n\t\"compilerOptions\": {\n\t\t\"allowJs\": true,\n\t\t\"checkJs\": true,\n\t\t\"esModuleInterop\": true,\n\t\t\"forceConsistentCasingInFileNames\": true,\n\t\t\"resolveJsonModule\": true,\n\t\t\"skipLibCheck\": true,\n\t\t\"sourceMap\": true,\n\t\t\"strict\": true,\n\t\t\"moduleResolution\": \"bundler\"\n\t}\n}\n"
  },
  {
    "path": "packages/cli/test/fixtures/project-bun/bun.lockb",
    "content": ""
  },
  {
    "path": "packages/cli/test/fixtures/project-bun/package.json",
    "content": "{\n\t\"name\": \"test-cli-config-full\",\n\t\"version\": \"0.0.0\",\n\t\"private\": true,\n\t\"devDependencies\": {\n\t\t\"@sveltejs/adapter-auto\": \"^3.0.0\",\n\t\t\"@sveltejs/kit\": \"^2.0.0\",\n\t\t\"@sveltejs/vite-plugin-svelte\": \"^3.0.0\",\n\t\t\"svelte\": \"^4.2.7\",\n\t\t\"svelte-check\": \"^3.6.0\",\n\t\t\"tslib\": \"^2.4.1\",\n\t\t\"typescript\": \"^5.0.0\",\n\t\t\"vite\": \"^5.0.3\"\n\t},\n\t\"type\": \"module\"\n}\n"
  },
  {
    "path": "packages/cli/test/fixtures/project-npm/package.json",
    "content": "{\n\t\"name\": \"test-cli-config-full\",\n\t\"version\": \"0.0.0\",\n\t\"private\": true,\n\t\"devDependencies\": {\n\t\t\"@sveltejs/adapter-auto\": \"^3.0.0\",\n\t\t\"@sveltejs/kit\": \"^2.0.0\",\n\t\t\"@sveltejs/vite-plugin-svelte\": \"^3.0.0\",\n\t\t\"svelte\": \"^4.2.7\",\n\t\t\"svelte-check\": \"^3.6.0\",\n\t\t\"tslib\": \"^2.4.1\",\n\t\t\"typescript\": \"^5.0.0\",\n\t\t\"vite\": \"^5.0.3\"\n\t},\n\t\"type\": \"module\"\n}\n"
  },
  {
    "path": "packages/cli/test/fixtures/project-pnpm/package.json",
    "content": "{\n\t\"name\": \"test-cli-config-full\",\n\t\"version\": \"0.0.0\",\n\t\"private\": true,\n\t\"devDependencies\": {\n\t\t\"@sveltejs/adapter-auto\": \"^3.0.0\",\n\t\t\"@sveltejs/kit\": \"^2.0.0\",\n\t\t\"@sveltejs/vite-plugin-svelte\": \"^3.0.0\",\n\t\t\"svelte\": \"^4.2.7\",\n\t\t\"svelte-check\": \"^3.6.0\",\n\t\t\"tslib\": \"^2.4.1\",\n\t\t\"typescript\": \"^5.0.0\",\n\t\t\"vite\": \"^5.0.3\"\n\t},\n\t\"type\": \"module\"\n}\n"
  },
  {
    "path": "packages/cli/test/fixtures/project-yarn/package.json",
    "content": "{\n\t\"name\": \"test-cli-config-full\",\n\t\"version\": \"0.0.0\",\n\t\"private\": true,\n\t\"devDependencies\": {\n\t\t\"@sveltejs/adapter-auto\": \"^3.0.0\",\n\t\t\"@sveltejs/kit\": \"^2.0.0\",\n\t\t\"@sveltejs/vite-plugin-svelte\": \"^3.0.0\",\n\t\t\"svelte\": \"^4.2.7\",\n\t\t\"svelte-check\": \"^3.6.0\",\n\t\t\"tslib\": \"^2.4.1\",\n\t\t\"typescript\": \"^5.0.0\",\n\t\t\"vite\": \"^5.0.3\"\n\t},\n\t\"type\": \"module\"\n}\n"
  },
  {
    "path": "packages/cli/test/preset.test.ts",
    "content": "import { describe, expect, it } from \"vitest\";\n\nimport {\n\tdecodePreset,\n\tDEFAULT_PRESET_CONFIG,\n\tencodePreset,\n\tfromBase62,\n\tgenerateRandomPreset,\n\tisPresetCode,\n\tisValidPreset,\n\tPRESET_BASE_COLOR_KEYS,\n\tPRESET_FONTS,\n\tPRESET_ICON_LIBRARIES,\n\tPRESET_MENU_ACCENTS,\n\tPRESET_MENU_COLORS,\n\tPRESET_RADII_KEYS,\n\tPRESET_STYLES,\n\tPRESET_THEME_KEYS,\n\ttoBase62,\n\ttype PresetConfig,\n} from \"../src/preset/preset.js\";\n\ndescribe(\"base62\", () => {\n\tit(\"should round-trip numbers\", () => {\n\t\tfor (const n of [0, 1, 61, 62, 100, 1000, 8388607]) {\n\t\t\texpect(fromBase62(toBase62(n))).toBe(n);\n\t\t}\n\t});\n\n\tit(\"should encode 0 as '0'\", () => {\n\t\texpect(toBase62(0)).toBe(\"0\");\n\t});\n\n\tit(\"should return -1 for invalid base62 characters\", () => {\n\t\texpect(fromBase62(\"!@#\")).toBe(-1);\n\t});\n});\n\ndescribe(\"encodePreset / decodePreset\", () => {\n\tit(\"should round-trip the default config\", () => {\n\t\tconst code = encodePreset(DEFAULT_PRESET_CONFIG);\n\t\tconst decoded = decodePreset(code);\n\t\texpect(decoded).toEqual(DEFAULT_PRESET_CONFIG);\n\t});\n\n\tit(\"should round-trip a custom config\", () => {\n\t\tconst config: PresetConfig = {\n\t\t\tstyle: \"lyra\",\n\t\t\tbaseColor: \"zinc\",\n\t\t\ttheme: \"blue\",\n\t\t\ticonLibrary: \"tabler\",\n\t\t\tfont: \"jetbrains-mono\",\n\t\t\tradius: \"large\",\n\t\t\tmenuAccent: \"bold\",\n\t\t\tmenuColor: \"inverted\",\n\t\t};\n\t\tconst code = encodePreset(config);\n\t\tconst decoded = decodePreset(code);\n\t\texpect(decoded).toEqual(config);\n\t});\n\n\tit(\"should produce short codes (max 9 chars)\", () => {\n\t\tconst code = encodePreset(DEFAULT_PRESET_CONFIG);\n\t\texpect(code.length).toBeLessThanOrEqual(9);\n\t});\n\n\tit(\"should start with the version character\", () => {\n\t\tconst code = encodePreset(DEFAULT_PRESET_CONFIG);\n\t\texpect(code[0]).toBe(\"a\");\n\t});\n\n\tit(\"should handle partial config by filling defaults\", () => {\n\t\tconst code = encodePreset({ style: \"lyra\" });\n\t\tconst decoded = decodePreset(code);\n\t\texpect(decoded).not.toBeNull();\n\t\texpect(decoded!.style).toBe(\"lyra\");\n\t\texpect(decoded!.theme).toBe(DEFAULT_PRESET_CONFIG.theme);\n\t});\n\n\tit(\"should round-trip all styles\", () => {\n\t\tfor (const style of PRESET_STYLES) {\n\t\t\tconst code = encodePreset({ style });\n\t\t\tconst decoded = decodePreset(code);\n\t\t\texpect(decoded).not.toBeNull();\n\t\t\texpect(decoded!.style).toBe(style);\n\t\t}\n\t});\n\n\tit(\"should round-trip all themes\", () => {\n\t\tfor (const theme of PRESET_THEME_KEYS) {\n\t\t\tconst code = encodePreset({ theme });\n\t\t\tconst decoded = decodePreset(code);\n\t\t\texpect(decoded!.theme).toBe(theme);\n\t\t}\n\t});\n\n\tit(\"should round-trip all fonts\", () => {\n\t\tfor (const font of PRESET_FONTS) {\n\t\t\tconst code = encodePreset({ font });\n\t\t\tconst decoded = decodePreset(code);\n\t\t\texpect(decoded!.font).toBe(font);\n\t\t}\n\t});\n\n\tit(\"should round-trip all icon libraries\", () => {\n\t\tfor (const iconLibrary of PRESET_ICON_LIBRARIES) {\n\t\t\tconst code = encodePreset({ iconLibrary });\n\t\t\tconst decoded = decodePreset(code);\n\t\t\texpect(decoded!.iconLibrary).toBe(iconLibrary);\n\t\t}\n\t});\n\n\tit(\"should round-trip all radii\", () => {\n\t\tfor (const radius of PRESET_RADII_KEYS) {\n\t\t\tconst code = encodePreset({ radius });\n\t\t\tconst decoded = decodePreset(code);\n\t\t\texpect(decoded!.radius).toBe(radius);\n\t\t}\n\t});\n\n\tit(\"should round-trip all base colors\", () => {\n\t\tfor (const baseColor of PRESET_BASE_COLOR_KEYS) {\n\t\t\tconst code = encodePreset({ baseColor });\n\t\t\tconst decoded = decodePreset(code);\n\t\t\texpect(decoded!.baseColor).toBe(baseColor);\n\t\t}\n\t});\n\n\tit(\"should round-trip all menu accents and colors\", () => {\n\t\tfor (const menuAccent of PRESET_MENU_ACCENTS) {\n\t\t\tfor (const menuColor of PRESET_MENU_COLORS) {\n\t\t\t\tconst code = encodePreset({ menuAccent, menuColor });\n\t\t\t\tconst decoded = decodePreset(code);\n\t\t\t\texpect(decoded!.menuAccent).toBe(menuAccent);\n\t\t\t\texpect(decoded!.menuColor).toBe(menuColor);\n\t\t\t}\n\t\t}\n\t});\n\n\tit(\"should round-trip default-translucent menu color\", () => {\n\t\tconst code = encodePreset({ menuColor: \"default-translucent\" });\n\t\tconst decoded = decodePreset(code);\n\t\texpect(decoded!.menuColor).toBe(\"default-translucent\");\n\t});\n});\n\ndescribe(\"decodePreset edge cases\", () => {\n\tit(\"should return null for empty string\", () => {\n\t\texpect(decodePreset(\"\")).toBeNull();\n\t});\n\n\tit(\"should return null for single character\", () => {\n\t\texpect(decodePreset(\"A\")).toBeNull();\n\t});\n\n\tit(\"should return null for wrong version prefix\", () => {\n\t\texpect(decodePreset(\"b123\")).toBeNull();\n\t});\n\n\tit(\"should return null for invalid base62 characters\", () => {\n\t\texpect(decodePreset(\"A!@#\")).toBeNull();\n\t});\n});\n\ndescribe(\"isPresetCode\", () => {\n\tit(\"should return true for valid preset codes\", () => {\n\t\tconst code = encodePreset(DEFAULT_PRESET_CONFIG);\n\t\texpect(isPresetCode(code)).toBe(true);\n\t});\n\n\tit(\"should return false for empty string\", () => {\n\t\texpect(isPresetCode(\"\")).toBe(false);\n\t});\n\n\tit(\"should return false for URLs\", () => {\n\t\texpect(isPresetCode(\"https://ui.shadcn.com/init?foo=bar\")).toBe(false);\n\t});\n\n\tit(\"should return false for named presets\", () => {\n\t\texpect(isPresetCode(\"radix-nova\")).toBe(false);\n\t});\n\n\tit(\"should return false for strings that are too long\", () => {\n\t\texpect(isPresetCode(\"A1234567890\")).toBe(false);\n\t});\n\n\tit(\"should return false for invalid characters after version\", () => {\n\t\texpect(isPresetCode(\"A!@#\")).toBe(false);\n\t});\n});\n\ndescribe(\"isValidPreset\", () => {\n\tit(\"should return true for encodable presets\", () => {\n\t\tconst code = encodePreset(DEFAULT_PRESET_CONFIG);\n\t\texpect(isValidPreset(code)).toBe(true);\n\t});\n\n\tit(\"should return false for invalid codes\", () => {\n\t\texpect(isValidPreset(\"\")).toBe(false);\n\t\texpect(isValidPreset(\"b123\")).toBe(false);\n\t});\n});\n\ndescribe(\"generateRandomPreset\", () => {\n\tit(\"should produce a valid preset code\", () => {\n\t\tconst code = generateRandomPreset();\n\t\texpect(isPresetCode(code)).toBe(true);\n\t\texpect(isValidPreset(code)).toBe(true);\n\t});\n\n\tit(\"should round-trip through decode\", () => {\n\t\tconst code = generateRandomPreset();\n\t\tconst decoded = decodePreset(code);\n\t\texpect(decoded).not.toBeNull();\n\t\tconst reEncoded = encodePreset(decoded!);\n\t\texpect(reEncoded).toBe(code);\n\t});\n});\n"
  },
  {
    "path": "packages/cli/test/registry-template.test.ts",
    "content": "/**\n * This ensures that any changes we make to the registry build script that would affect the output\n * of this test are caught by CI and thus require a manual review of the snapshot outputs for the\n * time being.\n *\n * Whether this is a good idea or not, idk but seems like a good start.\n */\n\nimport { it, expect } from \"vitest\";\nimport fs from \"node:fs\";\nimport path from \"node:path\";\nconst registryTemplateStaticRegistryPath = path.join(\n\t__dirname,\n\t\"..\",\n\t\"..\",\n\t\"..\",\n\t\"registry-template\",\n\t\"static\",\n\t\"r\"\n);\n\nfunction getFile(name: string) {\n\treturn JSON.parse(\n\t\tfs.readFileSync(path.join(registryTemplateStaticRegistryPath, `${name}.json`), \"utf8\")\n\t);\n}\n\nit(\"should accurately build the registry template\", async () => {\n\tconst index = getFile(\"index\");\n\tconst checkoutSteps = getFile(\"checkout-steps\");\n\tconst complexComponent = getFile(\"complex-component\");\n\tconst exampleForm = getFile(\"example-form\");\n\tconst exampleWithCss = getFile(\"example-with-css\");\n\tconst helloWorld = getFile(\"hello-world\");\n\tconst stepper = getFile(\"stepper\");\n\n\texpect(index).toMatchInlineSnapshot(`\n\t\t[\n\t\t  {\n\t\t    \"description\": \"A simple hello world component\",\n\t\t    \"meta\": {\n\t\t      \"author\": \"huntabyte\",\n\t\t    },\n\t\t    \"name\": \"hello-world\",\n\t\t    \"registryDependencies\": [\n\t\t      \"button\",\n\t\t    ],\n\t\t    \"relativeUrl\": \"hello-world.json\",\n\t\t    \"title\": \"Hello World\",\n\t\t    \"type\": \"registry:component\",\n\t\t  },\n\t\t  {\n\t\t    \"dependencies\": [\n\t\t      \"zod\",\n\t\t    ],\n\t\t    \"description\": \"A contact form with Zod validation.\",\n\t\t    \"name\": \"example-form\",\n\t\t    \"registryDependencies\": [\n\t\t      \"button\",\n\t\t      \"input\",\n\t\t      \"label\",\n\t\t      \"textarea\",\n\t\t      \"card\",\n\t\t    ],\n\t\t    \"relativeUrl\": \"example-form.json\",\n\t\t    \"title\": \"Example Form\",\n\t\t    \"type\": \"registry:component\",\n\t\t  },\n\t\t  {\n\t\t    \"description\": \"A complex component showing hooks, libs and components.\",\n\t\t    \"name\": \"complex-component\",\n\t\t    \"registryDependencies\": [\n\t\t      \"card\",\n\t\t    ],\n\t\t    \"relativeUrl\": \"complex-component.json\",\n\t\t    \"title\": \"Complex Component\",\n\t\t    \"type\": \"registry:component\",\n\t\t  },\n\t\t  {\n\t\t    \"description\": \"A login form with a CSS file.\",\n\t\t    \"name\": \"example-with-css\",\n\t\t    \"registryDependencies\": [],\n\t\t    \"relativeUrl\": \"example-with-css.json\",\n\t\t    \"title\": \"Example with CSS\",\n\t\t    \"type\": \"registry:component\",\n\t\t  },\n\t\t  {\n\t\t    \"name\": \"stepper\",\n\t\t    \"registryDependencies\": [],\n\t\t    \"relativeUrl\": \"stepper.json\",\n\t\t    \"type\": \"registry:ui\",\n\t\t  },\n\t\t  {\n\t\t    \"description\": \"A checkout steps component.\",\n\t\t    \"name\": \"checkout-steps\",\n\t\t    \"registryDependencies\": [\n\t\t      \"local:stepper\",\n\t\t    ],\n\t\t    \"relativeUrl\": \"checkout-steps.json\",\n\t\t    \"title\": \"Checkout Steps\",\n\t\t    \"type\": \"registry:component\",\n\t\t  },\n\t\t]\n\t`);\n\n\texpect(checkoutSteps).toMatchInlineSnapshot(`\n\t\t{\n\t\t  \"$schema\": \"https://shadcn-svelte.com/schema/registry-item.json\",\n\t\t  \"description\": \"A checkout steps component.\",\n\t\t  \"files\": [\n\t\t    {\n\t\t      \"content\": \"<script lang=\"ts\">\n\t\t\t// We are using one of our custom/local \\`ui\\` components here\n\t\t\timport * as Stepper from \"$UI$/stepper/index.js\";\n\t\t</script>\n\n\t\t<Stepper.Root>\n\t\t\t{#each { length: 5 } as _, i (i)}\n\t\t\t\t<Stepper.Item step={i + 1} />\n\t\t\t{/each}\n\t\t</Stepper.Root>\n\t\t\",\n\t\t      \"target\": \"checkout-steps.svelte\",\n\t\t      \"type\": \"registry:component\",\n\t\t    },\n\t\t  ],\n\t\t  \"name\": \"checkout-steps\",\n\t\t  \"registryDependencies\": [\n\t\t    \"./stepper.json\",\n\t\t  ],\n\t\t  \"title\": \"Checkout Steps\",\n\t\t  \"type\": \"registry:component\",\n\t\t}\n\t`);\n\n\texpect(complexComponent).toMatchInlineSnapshot(`\n\t\t{\n\t\t  \"$schema\": \"https://shadcn-svelte.com/schema/registry-item.json\",\n\t\t  \"description\": \"A complex component showing hooks, libs and components.\",\n\t\t  \"devDependencies\": [\n\t\t    \"zod@^4.2.1\",\n\t\t  ],\n\t\t  \"files\": [\n\t\t    {\n\t\t      \"content\": \"<script lang=\"ts\">\n\t\t\timport PokemonCard from \"./components/pokemon-card.svelte\";\n\t\t\timport { getPokemonList } from \"./lib/pokemon.js\";\n\t\t</script>\n\n\t\t{#await getPokemonList({ limit: 12 })}\n\t\t\t<div>Loading pokemons...</div>\n\t\t{:then pokemons}\n\t\t\t{#if pokemons}\n\t\t\t\t<div class=\"mx-auto w-full max-w-2xl px-4\">\n\t\t\t\t\t<div class=\"grid grid-cols-2 gap-4 py-10 sm:grid-cols-3 md:grid-cols-4\">\n\t\t\t\t\t\t{#each pokemons.results as pokemon (pokemon.name)}\n\t\t\t\t\t\t\t<PokemonCard name={pokemon.name} />\n\t\t\t\t\t\t{/each}\n\t\t\t\t\t</div>\n\t\t\t\t</div>\n\t\t\t{/if}\n\t\t{:catch}\n\t\t\t<div class=\"mx-auto w-full max-w-2xl px-4\">\n\t\t\t\t<p>Error loading pokemons</p>\n\t\t\t</div>\n\t\t{/await}\n\t\t\",\n\t\t      \"target\": \"src/routes/pokemon/+page.svelte\",\n\t\t      \"type\": \"registry:page\",\n\t\t    },\n\t\t    {\n\t\t      \"content\": \"<script lang=\"ts\">\n\t\t\timport { getPokemon } from \"$lib/registry/blocks/complex-component/lib/pokemon.js\";\n\t\t\timport * as Card from \"$UI$/card/index.js\";\n\t\t\timport PokemonImage from \"$lib/registry/blocks/complex-component/components/pokemon-image.svelte\";\n\n\t\t\tlet { name }: { name: string } = $props();\n\t\t</script>\n\n\t\t{#await getPokemon(name)}\n\t\t\t<div>Loading...</div>\n\t\t{:then pokemon}\n\t\t\t{#if pokemon}\n\t\t\t\t<Card.Root>\n\t\t\t\t\t<Card.Content class=\"flex flex-col items-center p-2\">\n\t\t\t\t\t\t<div>\n\t\t\t\t\t\t\t<PokemonImage name={pokemon.name} number={pokemon.id} />\n\t\t\t\t\t\t</div>\n\t\t\t\t\t\t<div class=\"text-center font-medium\">{pokemon.name}</div>\n\t\t\t\t\t</Card.Content>\n\t\t\t\t</Card.Root>\n\t\t\t{/if}\n\t\t{:catch}\n\t\t\t<div>Error loading pokemon</div>\n\t\t{/await}\n\t\t\",\n\t\t      \"target\": \"pokemon-card.svelte\",\n\t\t      \"type\": \"registry:component\",\n\t\t    },\n\t\t    {\n\t\t      \"content\": \"<script lang=\"ts\">\n\t\t\timport { usePokemonImage } from \"$lib/registry/blocks/complex-component/hooks/use-pokemon.svelte\";\n\n\t\t\tlet { number, name }: { number: number; name: string } = $props();\n\n\t\t\tconst imageUrl = usePokemonImage(number);\n\t\t</script>\n\n\t\t{#if imageUrl}\n\t\t\t<img src={imageUrl} alt={name} />\n\t\t{/if}\n\t\t\",\n\t\t      \"target\": \"pokemon-image.svelte\",\n\t\t      \"type\": \"registry:component\",\n\t\t    },\n\t\t    {\n\t\t      \"content\": \"import { z } from \"zod\";\n\n\t\texport async function getPokemonList({ limit = 10 }: { limit?: number }) {\n\t\t\ttry {\n\t\t\t\tconst response = await fetch(\\`https://pokeapi.co/api/v2/pokemon?limit=\\${limit}\\`);\n\t\t\t\treturn z\n\t\t\t\t\t.object({\n\t\t\t\t\t\tresults: z.array(z.object({ name: z.string() })),\n\t\t\t\t\t})\n\t\t\t\t\t.parse(await response.json());\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(error);\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\n\t\texport async function getPokemon(name: string) {\n\t\t\ttry {\n\t\t\t\tconst response = await fetch(\\`https://pokeapi.co/api/v2/pokemon/\\${name}\\`);\n\t\t\t\tif (!response.ok) throw new Error(\"Failed to fetch pokemon\");\n\n\t\t\t\treturn z\n\t\t\t\t\t.object({\n\t\t\t\t\t\tname: z.string(),\n\t\t\t\t\t\tid: z.number(),\n\t\t\t\t\t\tsprites: z.object({\n\t\t\t\t\t\t\tfront_default: z.string(),\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tstats: z.array(\n\t\t\t\t\t\t\tz.object({\n\t\t\t\t\t\t\t\tbase_stat: z.number(),\n\t\t\t\t\t\t\t\tstat: z.object({\n\t\t\t\t\t\t\t\t\tname: z.string(),\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t),\n\t\t\t\t\t})\n\t\t\t\t\t.parse(await response.json());\n\t\t\t} catch (error) {\n\t\t\t\tconsole.error(error);\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\t\t\",\n\t\t      \"target\": \"pokemon.ts\",\n\t\t      \"type\": \"registry:lib\",\n\t\t    },\n\t\t    {\n\t\t      \"content\": \"// Unnecessary hook, but an example of how to add a hook to a custom registry.\n\n\t\texport function usePokemonImage(number: number) {\n\t\t\treturn \\`https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/\\${number}.png\\`;\n\t\t}\n\t\t\",\n\t\t      \"target\": \"use-pokemon.svelte.ts\",\n\t\t      \"type\": \"registry:hook\",\n\t\t    },\n\t\t  ],\n\t\t  \"name\": \"complex-component\",\n\t\t  \"registryDependencies\": [\n\t\t    \"card\",\n\t\t  ],\n\t\t  \"title\": \"Complex Component\",\n\t\t  \"type\": \"registry:component\",\n\t\t}\n\t`);\n\texpect(exampleForm).toMatchInlineSnapshot(`\n\t\t{\n\t\t  \"$schema\": \"https://shadcn-svelte.com/schema/registry-item.json\",\n\t\t  \"dependencies\": [\n\t\t    \"zod\",\n\t\t  ],\n\t\t  \"description\": \"A contact form with Zod validation.\",\n\t\t  \"devDependencies\": [\n\t\t    \"zod@^4.2.1\",\n\t\t  ],\n\t\t  \"files\": [\n\t\t    {\n\t\t      \"content\": \"<script lang=\"ts\">\n\t\t\timport * as Card from \"$UI$/card/index.js\";\n\t\t\timport { Input } from \"$UI$/input/index.js\";\n\t\t\timport { Label } from \"$UI$/label/index.js\";\n\t\t\timport { Button } from \"$UI$/button/index.js\";\n\t\t\timport { Textarea } from \"$UI$/textarea/index.js\";\n\t\t\timport { z } from \"zod\";\n\t\t\timport type { FormEventHandler } from \"svelte/elements\";\n\n\t\t\tconst exampleFormSchema = z.object({\n\t\t\t\tname: z.string().min(1),\n\t\t\t\temail: z.string().email(),\n\t\t\t\tmessage: z.string().min(1),\n\t\t\t});\n\n\t\t\tlet pending = $state(false);\n\t\t\tlet formState = $state({\n\t\t\t\tdefaultValues: {\n\t\t\t\t\tname: \"\",\n\t\t\t\t\temail: \"\",\n\t\t\t\t\tmessage: \"\",\n\t\t\t\t},\n\t\t\t\tsuccess: false,\n\t\t\t\terrors: {\n\t\t\t\t\tname: \"\",\n\t\t\t\t\temail: \"\",\n\t\t\t\t\tmessage: \"\",\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tconst handleSubmit: FormEventHandler<HTMLFormElement> = (e) => {\n\t\t\t\te.preventDefault();\n\t\t\t\tpending = true;\n\t\t\t\tconst formData = new FormData(e.currentTarget);\n\t\t\t\tconst data = Object.fromEntries(formData);\n\t\t\t\tconst result = exampleFormSchema.safeParse(data);\n\n\t\t\t\tif (!result.success) {\n\t\t\t\t\tformState = {\n\t\t\t\t\t\t...formState,\n\t\t\t\t\t\terrors: Object.fromEntries(\n\t\t\t\t\t\t\tObject.entries(result.error.flatten().fieldErrors).map(([key, value]) => [\n\t\t\t\t\t\t\t\tkey,\n\t\t\t\t\t\t\t\tvalue?.[0] ?? \"\",\n\t\t\t\t\t\t\t])\n\t\t\t\t\t\t) as Record<keyof typeof formState.errors, string>,\n\t\t\t\t\t};\n\t\t\t\t\tpending = false;\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tpending = false;\n\t\t\t};\n\t\t</script>\n\n\t\t<form onsubmit={handleSubmit} class=\"w-full max-w-sm\">\n\t\t\t<Card.Root>\n\t\t\t\t<Card.Header>\n\t\t\t\t\t<Card.Title>How can we help?</Card.Title>\n\t\t\t\t\t<Card.Description>\n\t\t\t\t\t\tNeed help with your project? We&apos;re here to assist you.\n\t\t\t\t\t</Card.Description>\n\t\t\t\t</Card.Header>\n\t\t\t\t<Card.Content class=\"flex flex-col gap-6\">\n\t\t\t\t\t<div class=\"group/field grid gap-2\" data-invalid={!!formState.errors?.name}>\n\t\t\t\t\t\t<Label for=\"name\" class=\"group-data-[invalid=true]/field:text-destructive\">\n\t\t\t\t\t\t\tName <span aria-hidden=\"true\">*</span>\n\t\t\t\t\t\t</Label>\n\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\tid=\"name\"\n\t\t\t\t\t\t\tname=\"name\"\n\t\t\t\t\t\t\tplaceholder=\"Lee Robinson\"\n\t\t\t\t\t\t\tclass=\"group-data-[invalid=true]/field:border-destructive focus-visible:group-data-[invalid=true]/field:ring-destructive\"\n\t\t\t\t\t\t\tdisabled={pending}\n\t\t\t\t\t\t\taria-invalid={!!formState.errors?.name}\n\t\t\t\t\t\t\taria-errormessage=\"error-name\"\n\t\t\t\t\t\t\tdefaultValue={formState.defaultValues.name}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t{#if formState.errors.name}\n\t\t\t\t\t\t\t<p id=\"error-name\" class=\"text-destructive text-sm\">\n\t\t\t\t\t\t\t\t{formState.errors.name}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"group/field grid gap-2\" data-invalid={!!formState.errors?.email}>\n\t\t\t\t\t\t<Label for=\"email\" class=\"group-data-[invalid=true]/field:text-destructive\">\n\t\t\t\t\t\t\tEmail <span aria-hidden=\"true\">*</span>\n\t\t\t\t\t\t</Label>\n\t\t\t\t\t\t<Input\n\t\t\t\t\t\t\tid=\"email\"\n\t\t\t\t\t\t\tname=\"email\"\n\t\t\t\t\t\t\tplaceholder=\"leerob@acme.com\"\n\t\t\t\t\t\t\tclass=\"group-data-[invalid=true]/field:border-destructive focus-visible:group-data-[invalid=true]/field:ring-destructive\"\n\t\t\t\t\t\t\tdisabled={pending}\n\t\t\t\t\t\t\taria-invalid={!!formState.errors?.email}\n\t\t\t\t\t\t\taria-errormessage=\"error-email\"\n\t\t\t\t\t\t\tdefaultValue={formState.defaultValues.email}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t{#if formState.errors.email}\n\t\t\t\t\t\t\t<p id=\"error-email\" class=\"text-destructive text-sm\">\n\t\t\t\t\t\t\t\t{formState.errors.email}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"group/field grid gap-2\" data-invalid={!!formState.errors?.message}>\n\t\t\t\t\t\t<Label for=\"message\" class=\"group-data-[invalid=true]/field:text-destructive\">\n\t\t\t\t\t\t\tMessage <span aria-hidden=\"true\">*</span>\n\t\t\t\t\t\t</Label>\n\t\t\t\t\t\t<Textarea\n\t\t\t\t\t\t\tid=\"message\"\n\t\t\t\t\t\t\tname=\"message\"\n\t\t\t\t\t\t\tplaceholder=\"Type your message here...\"\n\t\t\t\t\t\t\tclass=\"group-data-[invalid=true]/field:border-destructive focus-visible:group-data-[invalid=true]/field:ring-destructive\"\n\t\t\t\t\t\t\tdisabled={pending}\n\t\t\t\t\t\t\taria-invalid={!!formState.errors?.message}\n\t\t\t\t\t\t\taria-errormessage=\"error-message\"\n\t\t\t\t\t\t\tdefaultValue={formState.defaultValues.message}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t{#if formState.errors.message}\n\t\t\t\t\t\t\t<p id=\"error-message\" class=\"text-destructive text-sm\">\n\t\t\t\t\t\t\t\t{formState.errors.message}\n\t\t\t\t\t\t\t</p>\n\t\t\t\t\t\t{/if}\n\t\t\t\t\t</div>\n\t\t\t\t</Card.Content>\n\t\t\t\t<Card.Footer>\n\t\t\t\t\t<Button type=\"submit\" size=\"sm\" disabled={pending}>\n\t\t\t\t\t\t{pending ? \"Sending...\" : \"Send Message\"}\n\t\t\t\t\t</Button>\n\t\t\t\t</Card.Footer>\n\t\t\t</Card.Root>\n\t\t</form>\n\t\t\",\n\t\t      \"target\": \"example-form.svelte\",\n\t\t      \"type\": \"registry:component\",\n\t\t    },\n\t\t  ],\n\t\t  \"name\": \"example-form\",\n\t\t  \"registryDependencies\": [\n\t\t    \"button\",\n\t\t    \"input\",\n\t\t    \"label\",\n\t\t    \"textarea\",\n\t\t    \"card\",\n\t\t  ],\n\t\t  \"title\": \"Example Form\",\n\t\t  \"type\": \"registry:component\",\n\t\t}\n\t`);\n\texpect(exampleWithCss).toMatchInlineSnapshot(`\n\t\t{\n\t\t  \"$schema\": \"https://shadcn-svelte.com/schema/registry-item.json\",\n\t\t  \"description\": \"A login form with a CSS file.\",\n\t\t  \"files\": [\n\t\t    {\n\t\t      \"content\": \"<script lang=\"ts\">\n\t\t\timport \"./example-card.css\";\n\t\t</script>\n\n\t\t<div class=\"login-container\">\n\t\t\t<div class=\"login-card\">\n\t\t\t\t<h1 class=\"login-title\">Login</h1>\n\t\t\t\t<p class=\"login-subtitle\">Please enter your credentials to continue</p>\n\t\t\t\t<form class=\"login-form\">\n\t\t\t\t\t<div class=\"form-group\">\n\t\t\t\t\t\t<label for=\"field-email\">Email</label>\n\t\t\t\t\t\t<input id=\"field-email\" type=\"email\" placeholder=\"Enter your email\" required />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"form-group\">\n\t\t\t\t\t\t<label for=\"field-password\">Password</label>\n\t\t\t\t\t\t<input id=\"field-password\" type=\"password\" placeholder=\"Enter your password\" required />\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"form-actions\">\n\t\t\t\t\t\t<button type=\"submit\" class=\"login-button\"> Sign In </button>\n\t\t\t\t\t</div>\n\t\t\t\t\t<div class=\"form-footer\">\n\t\t\t\t\t\t<a href=\"##\" class=\"forgot-password\"> Forgot password? </a>\n\t\t\t\t\t</div>\n\t\t\t\t</form>\n\t\t\t</div>\n\t\t</div>\n\t\t\",\n\t\t      \"target\": \"example-card.svelte\",\n\t\t      \"type\": \"registry:component\",\n\t\t    },\n\t\t    {\n\t\t      \"content\": \".login-container {\n\t\t\t--primary-color: #111111;\n\t\t\t--primary-hover: #484747;\n\t\t\t--error-color: #ef4444;\n\t\t\t--text-color: #1f2937;\n\t\t\t--text-light: #6b7280;\n\t\t\t--border-color: #e5e7eb;\n\t\t\t--background-light: #f9fafb;\n\t\t\t--card-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);\n\n\t\t\tdisplay: flex;\n\t\t\tjustify-content: center;\n\t\t\talign-items: center;\n\t\t\tpadding: 1rem;\n\t\t\tbackground-color: var(--background-light);\n\t\t\twidth: 100%;\n\t\t}\n\n\t\t.login-card {\n\t\t\twidth: 100%;\n\t\t\tmax-width: 400px;\n\t\t\tpadding: 2rem;\n\t\t\tbackground-color: white;\n\t\t\tborder-radius: 8px;\n\t\t\tbox-shadow: var(--card-shadow);\n\t\t}\n\n\t\t.login-title {\n\t\t\tmargin: 0 0 0.5rem 0;\n\t\t\tfont-size: 1.5rem;\n\t\t\tfont-weight: 600;\n\t\t\tcolor: var(--text-color);\n\t\t}\n\n\t\t.login-subtitle {\n\t\t\tmargin: 0 0 1.5rem 0;\n\t\t\tfont-size: 0.875rem;\n\t\t\tcolor: var(--text-light);\n\t\t}\n\n\t\t.login-form {\n\t\t\tdisplay: flex;\n\t\t\tflex-direction: column;\n\t\t\tgap: 1.25rem;\n\t\t}\n\n\t\t.login-error {\n\t\t\tpadding: 0.75rem;\n\t\t\tmargin-bottom: 0.5rem;\n\t\t\tbackground-color: rgba(239, 68, 68, 0.1);\n\t\t\tborder-left: 3px solid var(--error-color);\n\t\t\tcolor: var(--error-color);\n\t\t\tfont-size: 0.875rem;\n\t\t\tborder-radius: 4px;\n\t\t}\n\n\t\t.form-group {\n\t\t\tdisplay: flex;\n\t\t\tflex-direction: column;\n\t\t\tgap: 0.5rem;\n\t\t}\n\n\t\t.form-group label {\n\t\t\tfont-size: 0.875rem;\n\t\t\tfont-weight: 500;\n\t\t\tcolor: var(--text-color);\n\t\t}\n\n\t\t.form-group input {\n\t\t\tpadding: 0.75rem;\n\t\t\tborder: 1px solid var(--border-color);\n\t\t\tborder-radius: 4px;\n\t\t\tfont-size: 1rem;\n\t\t\ttransition: border-color 0.15s ease;\n\t\t}\n\n\t\t.form-group input:focus {\n\t\t\toutline: none;\n\t\t\tborder-color: var(--primary-color);\n\t\t\tbox-shadow: 0 0 0 3px rgba(79, 70, 229, 0.1);\n\t\t}\n\n\t\t.form-group input::placeholder {\n\t\t\tcolor: var(--text-light);\n\t\t}\n\n\t\t.form-actions {\n\t\t\tmargin-top: 0.5rem;\n\t\t}\n\n\t\t.login-button {\n\t\t\twidth: 100%;\n\t\t\tpadding: 0.75rem;\n\t\t\tbackground-color: var(--primary-color);\n\t\t\tcolor: white;\n\t\t\tborder: none;\n\t\t\tborder-radius: 4px;\n\t\t\tfont-size: 1rem;\n\t\t\tfont-weight: 500;\n\t\t\tcursor: pointer;\n\t\t\ttransition: background-color 0.15s ease;\n\t\t}\n\n\t\t.login-button:hover {\n\t\t\tbackground-color: var(--primary-hover);\n\t\t}\n\n\t\t.login-button:focus {\n\t\t\toutline: none;\n\t\t\tbox-shadow: 0 0 0 3px rgba(79, 70, 229, 0.3);\n\t\t}\n\n\t\t.form-footer {\n\t\t\tdisplay: flex;\n\t\t\tjustify-content: center;\n\t\t\tmargin-top: 1rem;\n\t\t}\n\n\t\t.forgot-password {\n\t\t\tfont-size: 0.875rem;\n\t\t\tcolor: var(--primary-color);\n\t\t\ttext-decoration: none;\n\t\t}\n\n\t\t.forgot-password:hover {\n\t\t\ttext-decoration: underline;\n\t\t}\n\n\t\t@media (max-width: 480px) {\n\t\t\t.login-card {\n\t\t\t\tpadding: 1.5rem;\n\t\t\t}\n\t\t}\n\t\t\",\n\t\t      \"target\": \"example-card.css\",\n\t\t      \"type\": \"registry:component\",\n\t\t    },\n\t\t  ],\n\t\t  \"name\": \"example-with-css\",\n\t\t  \"title\": \"Example with CSS\",\n\t\t  \"type\": \"registry:component\",\n\t\t}\n\t`);\n\texpect(helloWorld).toMatchInlineSnapshot(`\n\t\t{\n\t\t  \"$schema\": \"https://shadcn-svelte.com/schema/registry-item.json\",\n\t\t  \"description\": \"A simple hello world component\",\n\t\t  \"files\": [\n\t\t    {\n\t\t      \"content\": \"<h1 class=\"text-2xl font-bold\">Hello world</h1>\n\t\t\",\n\t\t      \"target\": \"hello-world.svelte\",\n\t\t      \"type\": \"registry:component\",\n\t\t    },\n\t\t  ],\n\t\t  \"meta\": {\n\t\t    \"author\": \"huntabyte\",\n\t\t  },\n\t\t  \"name\": \"hello-world\",\n\t\t  \"registryDependencies\": [\n\t\t    \"button\",\n\t\t  ],\n\t\t  \"title\": \"Hello World\",\n\t\t  \"type\": \"registry:component\",\n\t\t}\n\t`);\n\texpect(stepper).toMatchInlineSnapshot(`\n\t\t{\n\t\t  \"$schema\": \"https://shadcn-svelte.com/schema/registry-item.json\",\n\t\t  \"files\": [\n\t\t    {\n\t\t      \"content\": \"<!--\n\t\tThis is a custom \\`ui\\` component that is not a part of the shadcn-svelte registry.\n\t\t-->\n\n\t\t<script lang=\"ts\">\n\t\t\timport { cn } from \"$UTILS$.js\";\n\t\t\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\t\t\tlet { class: className, children, ...restProps }: HTMLAttributes<HTMLDivElement> = $props();\n\t\t</script>\n\n\t\t<div class={cn(\"bg-background\", className)} {...restProps}>\n\t\t\t{@render children?.()}\n\t\t</div>\n\t\t\",\n\t\t      \"target\": \"stepper/stepper.svelte\",\n\t\t      \"type\": \"registry:file\",\n\t\t    },\n\t\t    {\n\t\t      \"content\": \"<!--\n\t\tThis is a custom \\`ui\\` component that is not a part of the shadcn-svelte registry.\n\t\t-->\n\n\t\t<script lang=\"ts\">\n\t\t\timport { cn } from \"$UTILS$\";\n\t\t\timport type { HTMLButtonAttributes } from \"svelte/elements\";\n\n\t\t\tlet { class: className, step, ...props }: HTMLButtonAttributes & { step: number } = $props();\n\t\t</script>\n\n\t\t<button class={cn(\"bg-blue-500\", className)} {...props}> {step} </button>\n\t\t\",\n\t\t      \"target\": \"stepper/stepper-item.svelte\",\n\t\t      \"type\": \"registry:file\",\n\t\t    },\n\t\t    {\n\t\t      \"content\": \"// This is a custom \\`ui\\` component that is not a part of the shadcn-svelte registry.\n\t\timport Stepper from \"./stepper.svelte\";\n\t\timport StepperItem from \"./stepper-item.svelte\";\n\n\t\texport { Stepper, StepperItem, Stepper as Root, StepperItem as Item };\n\t\t\",\n\t\t      \"target\": \"stepper/index.ts\",\n\t\t      \"type\": \"registry:file\",\n\t\t    },\n\t\t  ],\n\t\t  \"name\": \"stepper\",\n\t\t  \"type\": \"registry:ui\",\n\t\t}\n\t`);\n});\n"
  },
  {
    "path": "packages/cli/test/utils/add-registry-items.test.ts",
    "content": "import { existsSync } from \"node:fs\";\nimport * as p from \"@clack/prompts\";\nimport { describe, it, expect, vi, beforeEach } from \"vitest\";\nimport * as registry from \"../../src/utils/registry/index.js\";\nimport { addRegistryItems } from \"../../src/utils/add-registry-items.js\";\nimport type { ResolvedConfig } from \"../../src/utils/config/index\";\n\nvi.mock(\"node:fs\", () => ({\n\texistsSync: vi.fn(),\n\tpromises: {\n\t\tmkdir: vi.fn(),\n\t\twriteFile: vi.fn(),\n\t\treadFile: vi.fn().mockResolvedValue(\"\"),\n\t},\n}));\n\nvi.mock(\"@clack/prompts\", () => ({\n\tconfirm: vi.fn(),\n\ttasks: vi.fn(),\n\tisCancel: vi.fn().mockReturnValue(false),\n\tlog: {\n\t\twarn: vi.fn(),\n\t},\n}));\n\nvi.mock(\"../../src/utils/registry/index.js\", () => ({\n\tgetRegistryUrl: vi.fn().mockReturnValue(\"https://example.com/registry\"),\n\tgetRegistryIndex: vi.fn().mockResolvedValue([]),\n\tresolveRegistryItems: vi.fn(),\n\tfetchRegistryItems: vi.fn(),\n\tresolveItemFilePath: vi.fn(),\n\tgetItemAliasDir: vi.fn(),\n}));\n\nvi.mock(\"../../src/utils/prompt-helpers.js\", () => ({\n\tcancel: vi.fn(),\n\tprettifyList: vi.fn().mockImplementation((items) => items.join(\", \")),\n}));\n\nvi.mock(\"../../src/utils/transformers.js\", () => ({\n\ttransformContent: vi.fn().mockImplementation((content) => Promise.resolve(content)),\n\ttransformCss: vi.fn().mockImplementation((css) => css),\n}));\n\ntype ResolvedRegistryItem = Awaited<ReturnType<typeof registry.resolveRegistryItems>>[number];\n\ndescribe(\"addRegistryItems\", () => {\n\tconst mockConfig = {\n\t\tresolvedPaths: {\n\t\t\tcwd: \"/test\",\n\t\t\tui: \"/test/ui\",\n\t\t\tcomponents: \"/test/components\",\n\t\t\ttailwindCss: \"/test/app.css\",\n\t\t\thooks: \"/test/hooks\",\n\t\t\tutils: \"/test/utils\",\n\t\t\tlib: \"/test/lib\",\n\t\t},\n\t\taliases: {\n\t\t\tcomponents: \"/test/components\",\n\t\t\tutils: \"/test/utils\",\n\t\t\tui: \"/test/ui\",\n\t\t\thooks: \"/test/hooks\",\n\t\t\tlib: \"/test/lib\",\n\t\t},\n\t\ttailwind: {\n\t\t\tcss: \"/test/app.css\",\n\t\t\tbaseColor: \"zinc\",\n\t\t},\n\t\ttypescript: true,\n\t\tregistry: \"https://example.com/registry\",\n\t\tsveltekit: true,\n\t\tstyle: \"vega\",\n\t\ticonLibrary: \"lucide\",\n\t\tmenuColor: \"default\",\n\t\tmenuAccent: \"subtle\",\n\t} satisfies ResolvedConfig;\n\n\tbeforeEach(() => {\n\t\tvi.clearAllMocks();\n\t});\n\n\tit(\"should prompt for selective overwrite of registry dependencies from custom URL\", async () => {\n\t\tconst customComponent = {\n\t\t\tname: \"data-grid\",\n\t\t\ttype: \"registry:component\" as const,\n\t\t\tfiles: [{ target: \"data-grid.svelte\", type: \"registry:component\", content: \"\" }],\n\t\t\tregistryDependencies: [\"button\"],\n\t\t} satisfies ResolvedRegistryItem;\n\n\t\tconst buttonComponent = {\n\t\t\tname: \"button\",\n\t\t\ttype: \"registry:ui\",\n\t\t\tfiles: [{ target: \"button.svelte\", type: \"registry:ui\", content: \"\" }],\n\t\t\tregistryDependencies: [],\n\t\t} satisfies ResolvedRegistryItem;\n\n\t\tvi.mocked(existsSync).mockImplementation((path) => {\n\t\t\treturn path.toString().includes(\"button\");\n\t\t});\n\n\t\tvi.mocked(registry.resolveRegistryItems).mockResolvedValue([\n\t\t\tcustomComponent,\n\t\t\tbuttonComponent,\n\t\t]);\n\t\tvi.mocked(registry.fetchRegistryItems).mockResolvedValue([\n\t\t\tcustomComponent,\n\t\t\tbuttonComponent,\n\t\t]);\n\t\tvi.mocked(registry.resolveItemFilePath).mockImplementation((config, item, file) => {\n\t\t\treturn `/path/to/${item.name}/${file.target}`;\n\t\t});\n\t\tvi.mocked(registry.getItemAliasDir).mockReturnValue(\"/test/components\");\n\n\t\tvi.mocked(p.confirm).mockResolvedValue(false);\n\t\tvi.mocked(p.tasks).mockResolvedValue(undefined);\n\n\t\tawait addRegistryItems({\n\t\t\tselectedItems: [\"https://example.com/data-grid.json\"],\n\t\t\tconfig: mockConfig,\n\t\t\toverwrite: false,\n\t\t\tdeps: true,\n\t\t});\n\n\t\texpect(p.confirm).toHaveBeenCalledTimes(2);\n\t\texpect(p.log.warn).toHaveBeenCalledWith(expect.stringContaining(\"already exist\"));\n\t\texpect(p.log.warn).toHaveBeenCalledWith(expect.stringContaining(\"already exist\"));\n\t});\n\n\tit(\"should include all resolved dependencies in selectedItems for custom registry\", async () => {\n\t\tconst customComponent = {\n\t\t\tname: \"data-grid\",\n\t\t\ttype: \"registry:component\",\n\t\t\tfiles: [{ target: \"data-grid.svelte\", type: \"registry:component\", content: \"\" }],\n\t\t\tregistryDependencies: [\"button\", \"card\"],\n\t\t} satisfies ResolvedRegistryItem;\n\n\t\tconst buttonComponent = {\n\t\t\tname: \"button\",\n\t\t\ttype: \"registry:ui\",\n\t\t\tfiles: [{ target: \"button.svelte\", type: \"registry:ui\", content: \"\" }],\n\t\t\tregistryDependencies: [],\n\t\t} satisfies ResolvedRegistryItem;\n\n\t\tconst cardComponent = {\n\t\t\tname: \"card\",\n\t\t\ttype: \"registry:ui\",\n\t\t\tfiles: [{ target: \"card.svelte\", type: \"registry:ui\", content: \"\" }],\n\t\t\tregistryDependencies: [],\n\t\t} satisfies ResolvedRegistryItem;\n\n\t\tvi.mocked(existsSync).mockReturnValue(false);\n\n\t\tvi.mocked(registry.resolveRegistryItems).mockResolvedValue([\n\t\t\tcustomComponent,\n\t\t\tbuttonComponent,\n\t\t\tcardComponent,\n\t\t]);\n\t\tvi.mocked(registry.fetchRegistryItems).mockResolvedValue([\n\t\t\tcustomComponent,\n\t\t\tbuttonComponent,\n\t\t\tcardComponent,\n\t\t]);\n\t\tvi.mocked(registry.resolveItemFilePath).mockImplementation((_, item, file) => {\n\t\t\treturn `/path/to/${item.name}/${file.target}`;\n\t\t});\n\t\tvi.mocked(registry.getItemAliasDir).mockReturnValue(\"/test/components\");\n\n\t\tvi.mocked(p.tasks).mockResolvedValue(undefined);\n\n\t\tawait addRegistryItems({\n\t\t\tselectedItems: [\"https://example.com/data-grid.json\"],\n\t\t\tconfig: mockConfig,\n\t\t\toverwrite: false,\n\t\t\tdeps: true,\n\t\t});\n\n\t\texpect(p.tasks).toHaveBeenCalledWith(\n\t\t\texpect.arrayContaining([\n\t\t\t\texpect.objectContaining({\n\t\t\t\t\ttitle: expect.stringContaining(\"data-grid\"),\n\t\t\t\t}),\n\t\t\t\texpect.objectContaining({\n\t\t\t\t\ttitle: expect.stringContaining(\"button\"),\n\t\t\t\t}),\n\t\t\t\texpect.objectContaining({\n\t\t\t\t\ttitle: expect.stringContaining(\"card\"),\n\t\t\t\t}),\n\t\t\t])\n\t\t);\n\t});\n});\n"
  },
  {
    "path": "packages/cli/test/utils/auto-detect.test.ts",
    "content": "import fs from \"node:fs\";\nimport path from \"node:path\";\nimport { describe, it, expect, afterAll, beforeEach } from \"vitest\";\nimport { detectConfigs } from \"../../src/utils/auto-detect\";\n\ndescribe(\"detectConfigs\", () => {\n\tconst tmpDir = path.join(process.cwd(), \"test-fixtures\");\n\tfunction createCssFile(name: string) {\n\t\tfs.writeFileSync(path.join(tmpDir, name), \"/* test */\");\n\t}\n\n\tfunction cleanup() {\n\t\tif (!fs.existsSync(tmpDir)) {\n\t\t\tfs.mkdirSync(tmpDir, { recursive: true });\n\t\t\treturn;\n\t\t}\n\n\t\tconst files = fs.readdirSync(tmpDir);\n\t\tfor (const file of files) {\n\t\t\tconst filePath = path.join(tmpDir, file);\n\t\t\tconst stat = fs.statSync(filePath);\n\t\t\tif (stat.isDirectory()) {\n\t\t\t\tfs.rmSync(filePath, { recursive: true, force: true });\n\t\t\t} else {\n\t\t\t\tfs.unlinkSync(filePath);\n\t\t\t}\n\t\t}\n\t}\n\n\tbeforeEach(() => {\n\t\tcleanup();\n\t});\n\n\tafterAll(() => {\n\t\tfs.rmSync(tmpDir, { recursive: true, force: true });\n\t});\n\n\tit(\"should detect app.css when present\", () => {\n\t\tcreateCssFile(\"app.css\");\n\t\tconst result = detectConfigs(tmpDir);\n\t\texpect(result.cssPath).toBe(path.join(tmpDir, \"app.css\"));\n\t});\n\n\tit(\"should detect main.css when app.css is not present\", () => {\n\t\tcreateCssFile(\"main.css\");\n\t\tconst result = detectConfigs(tmpDir);\n\t\texpect(result.cssPath).toBe(path.join(tmpDir, \"main.css\"));\n\t});\n\n\tit(\"should detect globals.css when app.css and main.css are not present\", () => {\n\t\tcreateCssFile(\"globals.css\");\n\t\tconst result = detectConfigs(tmpDir);\n\t\texpect(result.cssPath).toBe(path.join(tmpDir, \"globals.css\"));\n\t});\n\n\tit(\"should detect CSS file with relative path\", () => {\n\t\tcreateCssFile(\"app.css\");\n\t\tconst result = detectConfigs(tmpDir, { relative: true });\n\t\texpect(result.cssPath).toBe(\"app.css\");\n\t});\n\n\tit(\"should return undefined when no CSS files are found\", () => {\n\t\tconst result = detectConfigs(tmpDir);\n\t\texpect(result.cssPath).toBeUndefined();\n\t});\n\n\tit(\"should respect .gitignore\", () => {\n\t\tconst ignoredDir = path.join(tmpDir, \"ignored\");\n\t\tfs.mkdirSync(ignoredDir, { recursive: true });\n\t\tfs.writeFileSync(path.join(ignoredDir, \"app.css\"), \"/* test */\");\n\t\tfs.writeFileSync(path.join(tmpDir, \".gitignore\"), \"ignored/\");\n\n\t\tconst result = detectConfigs(tmpDir);\n\t\texpect(result.cssPath).toBeUndefined();\n\t});\n});\n"
  },
  {
    "path": "packages/cli/test/utils/deps-resolver.test.ts",
    "content": "import { describe, it, expect, beforeEach, vi } from \"vitest\";\nimport {\n\tresolveDepsFromImport,\n\tIGNORE_DEPS,\n\tresolvePeerVersions,\n\tresolveTypeDeps,\n\tgetFileDependencies,\n\ttype ResolvedDependencies,\n\ttype ProjectDependencies,\n} from \"../../src/commands/registry/deps-resolver.js\";\n\nvi.mock(\"node:fs\");\n\ndescribe(\"resolveDepsFromImport\", () => {\n\tconst mockDeps: ResolvedDependencies = {\n\t\tversions: {\n\t\t\tfoo: \"foo@1.2.3\",\n\t\t\tbar: \"bar@4.5.6\",\n\t\t\tbaz: \"baz@7.8.9\",\n\t\t\t// intentionally include an ignored dep\n\t\t\tsvelte: \"svelte@3.0.0\",\n\t\t},\n\t\tdeps: {\n\t\t\t\"foo@1.2.3\": [\"peer-a\", \"peer-b\"],\n\t\t\t\"bar@4.5.6\": [],\n\t\t\t// baz with no entry to test undefined peers\n\t\t},\n\t};\n\tit(\"returns version + peers for a simple import\", () => {\n\t\tconst result = resolveDepsFromImport(\"foo\", mockDeps);\n\t\texpect(result).toEqual([\"foo@1.2.3\", \"peer-a\", \"peer-b\"]);\n\t});\n\n\tit(\"returns only version if there are no peers\", () => {\n\t\tconst result = resolveDepsFromImport(\"bar\", mockDeps);\n\t\texpect(result).toEqual([\"bar@4.5.6\"]);\n\t});\n\n\tit(\"returns only version when deps[version] is undefined\", () => {\n\t\tconst result = resolveDepsFromImport(\"baz\", mockDeps);\n\t\texpect(result).toEqual([\"baz@7.8.9\"]);\n\t});\n\n\tit(\"detects deep imports by prefix\", () => {\n\t\tconst result = resolveDepsFromImport(\"foo/utils\", mockDeps);\n\t\texpect(result).toEqual([\"foo@1.2.3\", \"peer-a\", \"peer-b\"]);\n\t});\n\n\tit(\"ignores deps listed in IGNORE_DEPS even if present\", () => {\n\t\tfor (const dep of IGNORE_DEPS) {\n\t\t\tconst src = dep;\n\t\t\t// force a matching version\n\t\t\tmockDeps.versions[dep] = `${dep}@0.0.1`;\n\t\t\tconst result = resolveDepsFromImport(src, mockDeps);\n\t\t\texpect(result).toEqual([]);\n\t\t}\n\t});\n\n\tit(\"returns empty array when no matching dep found\", () => {\n\t\tconst result = resolveDepsFromImport(\"unknown-package\", mockDeps);\n\t\texpect(result).toEqual([]);\n\t});\n});\n\ndescribe(\"resolvePeerVersions\", () => {\n\tlet projectDeps: ProjectDependencies;\n\n\tbeforeEach(() => {\n\t\tprojectDeps = {\n\t\t\tdependencies: {\n\t\t\t\tversions: {\n\t\t\t\t\tfoo: \"foo@1.0.0\",\n\t\t\t\t\tshared: \"shared@1.1.0\",\n\t\t\t\t},\n\t\t\t\tdeps: {\n\t\t\t\t\t\"foo@1.0.0\": [\"bar\", \"shared\", \"missing\"],\n\t\t\t\t},\n\t\t\t},\n\t\t\tdevDependencies: {\n\t\t\t\tversions: {\n\t\t\t\t\tbar: \"bar@2.0.0\",\n\t\t\t\t\t// shared also exists here but dependencies should take precedence\n\t\t\t\t\tshared: \"shared@2.2.0\",\n\t\t\t\t\textra: \"extra@3.0.0\",\n\t\t\t\t},\n\t\t\t\tdeps: {\n\t\t\t\t\t\"extra@3.0.0\": [\"foo\", \"unknown\"],\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\t});\n\tit(\"replaces dependency peers with their version strings from dependencies and devDependencies\", () => {\n\t\tconst result = resolvePeerVersions(projectDeps);\n\t\texpect(result.dependencies.deps[\"foo@1.0.0\"]).toEqual([\"bar@2.0.0\", \"shared@1.1.0\"]);\n\t});\n\n\tit(\"filters out peers not found in either versions map\", () => {\n\t\tconst deps = resolvePeerVersions(projectDeps).dependencies.deps[\"foo@1.0.0\"];\n\t\texpect(deps).not.toContain(\"missing\");\n\t\texpect(deps).toHaveLength(2);\n\t});\n\n\tit(\"uses devDependencies when dependency versions are missing\", () => {\n\t\t// 'bar' only exists in devDependencies\n\t\tconst deps = resolvePeerVersions(projectDeps).dependencies.deps[\"foo@1.0.0\"];\n\t\texpect(deps).toContain(\"bar@2.0.0\");\n\t});\n\n\tit(\"gives precedence to dependencies.versions over devDependencies.versions when both define a peer\", () => {\n\t\t// 'shared' exists in both; should pick dependencies.shared@1.1.0\n\t\tconst deps = resolvePeerVersions(projectDeps).dependencies.deps[\"foo@1.0.0\"];\n\t\texpect(deps).toContain(\"shared@1.1.0\");\n\t\texpect(deps).not.toContain(\"shared@2.2.0\");\n\t});\n\n\tit(\"also resolves peers for devDependencies.deps\", () => {\n\t\tconst devPeers = resolvePeerVersions(projectDeps).devDependencies.deps[\"extra@3.0.0\"];\n\t\texpect(devPeers).toEqual([\"foo@1.0.0\"]);\n\t});\n\n\tit(\"leaves empty peer arrays unchanged\", () => {\n\t\tprojectDeps.dependencies.deps[\"empty@0.0.1\"] = [];\n\t\tconst result = resolvePeerVersions(projectDeps);\n\t\texpect(result.dependencies.deps[\"empty@0.0.1\"]).toEqual([]);\n\t});\n\n\tit(\"returns the same object reference (mutates in place)\", () => {\n\t\tconst before = projectDeps;\n\t\tconst after = resolvePeerVersions(projectDeps);\n\t\texpect(after).toBe(before);\n\t});\n});\n\ndescribe(\"resolveTypeDeps\", () => {\n\tlet projectDeps: ProjectDependencies;\n\n\tbeforeEach(() => {\n\t\tprojectDeps = {\n\t\t\tdependencies: {\n\t\t\t\tversions: {\n\t\t\t\t\t// normal package\n\t\t\t\t\tfoo: \"foo@1.0.0\",\n\t\t\t\t\t// scoped package\n\t\t\t\t\t\"@org/pkg\": \"@org/pkg@2.3.4\",\n\t\t\t\t\t// its types package in dependencies\n\t\t\t\t\t\"@types/foo\": \"@types/foo@1.0.0\",\n\t\t\t\t},\n\t\t\t\tdeps: {\n\t\t\t\t\t\"foo@1.0.0\": [\"peer-x\"],\n\t\t\t\t\t\"@org/pkg@2.3.4\": [],\n\t\t\t\t},\n\t\t\t},\n\t\t\tdevDependencies: {\n\t\t\t\tversions: {\n\t\t\t\t\t\"@types/org__pkg\": \"@types/org__pkg@2.3.4\",\n\t\t\t\t},\n\t\t\t\tdeps: {\n\t\t\t\t\t\"unused@0.0.1\": [\"foo\"],\n\t\t\t\t},\n\t\t\t},\n\t\t};\n\t});\n\tit(\"adds a non-scoped package types name when found in dependencies\", () => {\n\t\tresolveTypeDeps(projectDeps);\n\t\tconst peers = projectDeps.dependencies.deps[\"foo@1.0.0\"];\n\t\texpect(peers).toContain(\"@types/foo\");\n\t});\n\n\tit(\"adds a scoped package types name when found in devDependencies\", () => {\n\t\tresolveTypeDeps(projectDeps);\n\t\tconst peers = projectDeps.dependencies.deps[\"@org/pkg@2.3.4\"];\n\t\t// types name for @org/pkg is '@types/org__pkg'\n\t\texpect(peers).toContain(\"@types/org__pkg\");\n\t});\n\n\tit(\"does not add a types name if no types version exists\", () => {\n\t\t// remove both entries\n\t\tdelete projectDeps.dependencies.versions[\"@types/foo\"];\n\t\tdelete projectDeps.devDependencies.versions[\"@types/foo\"];\n\t\tprojectDeps.dependencies.deps[\"foo@1.0.0\"] = [];\n\t\tresolveTypeDeps(projectDeps);\n\t\texpect(projectDeps.dependencies.deps[\"foo@1.0.0\"]).toEqual([]);\n\t});\n\n\tit(\"mutates peers in place and returns the same object\", () => {\n\t\tconst before = projectDeps;\n\t\tconst after = resolveTypeDeps(projectDeps);\n\t\texpect(after).toBe(before);\n\t});\n\n\tit(\"only pushes the package name, not the version string\", () => {\n\t\tresolveTypeDeps(projectDeps);\n\t\tconst peers = projectDeps.dependencies.deps[\"foo@1.0.0\"];\n\t\texpect(peers.includes(\"@types/foo@1.0.0\")).toBe(false);\n\t});\n});\n\nfunction mkResolved(input: Record<string, string[]>): ResolvedDependencies {\n\t// input: map from package name -> list of its peer deps (by package name)\n\tconst versions: Record<string, string> = {};\n\tconst deps: Record<string, string[]> = {};\n\n\tfor (const [name, peers] of Object.entries(input)) {\n\t\tconst versioned = `${name}@1.0.0`;\n\t\tversions[name] = versioned;\n\t\t// peers should themselves be versioned\n\t\tdeps[versioned] = peers.map((p) => `${p}@1.0.0`);\n\t}\n\n\treturn { versions, deps };\n}\n\nfunction mkOpts(\n\tfilename: string,\n\tsource: string,\n\tdepsMap: Record<string, string[]>,\n\tdevDepsMap: Record<string, string[]>\n) {\n\treturn {\n\t\tfilename,\n\t\tsource,\n\t\tdependencies: mkResolved(depsMap),\n\t\tdevDependencies: mkResolved(devDepsMap),\n\t} as const;\n}\n\ndescribe(\"getFileDependencies\", () => {\n\tit(\"returns {} for unknown extensions\", async () => {\n\t\tconst result = await getFileDependencies(mkOpts(\"config.env\", \"FOO=bar\", {}, {}));\n\t\texpect(result).toEqual({});\n\t});\n\n\tit(\"extracts versioned imports from a .js file\", async () => {\n\t\tconst src = `\n\t\timport fs from 'fs';\n\t\timport { join } from 'path';\n\t  `;\n\t\tconst result = await getFileDependencies(mkOpts(\"index.js\", src, { fs: [], path: [] }, {}));\n\n\t\texpect(result).toEqual({\n\t\t\tdependencies: [\"fs@1.0.0\", \"path@1.0.0\"],\n\t\t\tdevDependencies: undefined,\n\t\t});\n\t});\n\n\tit(\"extracts versioned imports + peers from a .ts file in import order\", async () => {\n\t\tconst src = `\n\t\timport type { Foo } from 'foo';\n\t\timport Bar from 'bar';\n\t  `;\n\t\tconst result = await getFileDependencies(\n\t\t\tmkOpts(\"index.ts\", src, { foo: [], bar: [\"bar-peer\"] }, {})\n\t\t);\n\n\t\t// foo import -> foo@1.0.0\n\t\t// bar import -> bar@1.0.0 then its peer bar-peer@1.0.0\n\t\texpect(result.dependencies).toEqual([\"foo@1.0.0\", \"bar@1.0.0\", \"bar-peer@1.0.0\"]);\n\t\texpect(result.devDependencies).toBeUndefined();\n\t});\n\n\tit('parses <script> and <script context=\"module\"> in .svelte', async () => {\n\t\tconst svelteSrc = `\n\t\t<script>\n\t\t  import A from 'a';\n\t\t</script>\n\t\t<script context=\"module\">\n\t\t  import B from 'b';\n\t\t</script>\n\t\t<div>{A}{B}</div>\n\t  `;\n\t\tconst result = await getFileDependencies(\n\t\t\tmkOpts(\"Component.svelte\", svelteSrc, { a: [], b: [] }, { b: [\"b-dev\"] })\n\t\t);\n\n\t\t// instance script: a@1.0.0\n\t\t// module script: b@1.0.0 then its peer b-dev@1.0.0 in devDependencies\n\t\texpect(result.dependencies).toEqual([\"a@1.0.0\", \"b@1.0.0\"]);\n\t\texpect(result.devDependencies).toEqual([\"b@1.0.0\", \"b-dev@1.0.0\"]);\n\t});\n});\n"
  },
  {
    "path": "packages/cli/test/utils/get-config.test.ts",
    "content": "import { describe, expect, it, vi } from \"vitest\";\nimport { SITE_BASE_URL } from \"../../src/constants\";\nimport { getConf, resolvePath } from \"./test-helpers\";\n\nvi.mock(\"tinyexec\");\n\ndescribe(\"getConfig\", () => {\n\tit(\"handles cases where no config is present\", async () => {\n\t\texpect(await getConf(\"config-none\")).toEqual(undefined);\n\t});\n\n\tit(\"handles invalid configurations\", async () => {\n\t\tawait expect(getConf(\"config-invalid\")).rejects.toThrowError();\n\t});\n\n\tit(\"handles trailing slashes in aliases\", async () => {\n\t\texpect(await getConf(\"config-trailing-slashes\")).toEqual({\n\t\t\ttailwind: {\n\t\t\t\tcss: \"src/app.css\",\n\t\t\t\tbaseColor: \"zinc\",\n\t\t\t},\n\t\t\taliases: {\n\t\t\t\tutils: \"$lib/utils\",\n\t\t\t\tcomponents: \"$lib/components\",\n\t\t\t\thooks: \"$lib/hooks\",\n\t\t\t\tui: \"$lib/components/ui\",\n\t\t\t\tlib: \"$lib\",\n\t\t\t},\n\t\t\tresolvedPaths: {\n\t\t\t\tcomponents: resolvePath(\"../fixtures/config-trailing-slashes/src/lib/components\"),\n\t\t\t\ttailwindCss: resolvePath(\"../fixtures/config-trailing-slashes/src/app.css\"),\n\t\t\t\tutils: resolvePath(\"../fixtures/config-trailing-slashes/src/lib/utils\"),\n\t\t\t\tcwd: resolvePath(\"../fixtures/config-trailing-slashes\"),\n\t\t\t\thooks: resolvePath(\"../fixtures/config-trailing-slashes/src/lib/hooks\"),\n\t\t\t\tui: resolvePath(\"../fixtures/config-trailing-slashes/src/lib/components/ui\"),\n\t\t\t\tlib: resolvePath(\"../fixtures/config-trailing-slashes/src/lib\"),\n\t\t\t},\n\t\t\ticonLibrary: \"lucide\",\n\t\t\tmenuAccent: \"subtle\",\n\t\t\tmenuColor: \"default\",\n\t\t\tstyle: \"nova\",\n\t\t\tsveltekit: true,\n\t\t\ttypescript: true,\n\t\t\tregistry: `${SITE_BASE_URL}/registry`,\n\t\t});\n\t});\n\n\tit(\"handles custom typescript config files\", async () => {\n\t\texpect(await getConf(\"config-custom-tsconfig\")).toEqual({\n\t\t\ttailwind: {\n\t\t\t\tcss: \"src/app.css\",\n\t\t\t\tbaseColor: \"zinc\",\n\t\t\t},\n\t\t\taliases: {\n\t\t\t\tutils: \"$lib/utils\",\n\t\t\t\tcomponents: \"$lib/components\",\n\t\t\t\thooks: \"$lib/hooks\",\n\t\t\t\tui: \"$lib/components/ui\",\n\t\t\t\tlib: \"$lib\",\n\t\t\t},\n\t\t\tresolvedPaths: {\n\t\t\t\tcomponents: resolvePath(\"../fixtures/config-custom-tsconfig/src/lib/components\"),\n\t\t\t\ttailwindCss: resolvePath(\"../fixtures/config-custom-tsconfig/src/app.css\"),\n\t\t\t\tutils: resolvePath(\"../fixtures/config-custom-tsconfig/src/lib/utils\"),\n\t\t\t\tcwd: resolvePath(\"../fixtures/config-custom-tsconfig\"),\n\t\t\t\thooks: resolvePath(\"../fixtures/config-custom-tsconfig/src/lib/hooks\"),\n\t\t\t\tui: resolvePath(\"../fixtures/config-custom-tsconfig/src/lib/components/ui\"),\n\t\t\t\tlib: resolvePath(\"../fixtures/config-custom-tsconfig/src/lib\"),\n\t\t\t},\n\t\t\ticonLibrary: \"lucide\",\n\t\t\tmenuAccent: \"subtle\",\n\t\t\tmenuColor: \"default\",\n\t\t\tstyle: \"nova\",\n\t\t\tsveltekit: true,\n\t\t\ttypescript: { config: \"tsconfig.base.json\" },\n\t\t\tregistry: `${SITE_BASE_URL}/registry`,\n\t\t});\n\t});\n\n\t// this case will be more important once we add support for\n\t// partial configs via tw prefixes, tw vars, etc.\n\tit(\"handles cases where a partial config is present\", async () => {\n\t\texpect(await getConf(\"config-partial\")).toEqual({\n\t\t\ttailwind: {\n\t\t\t\tcss: \"src/app.css\",\n\t\t\t\tbaseColor: \"zinc\",\n\t\t\t},\n\t\t\taliases: {\n\t\t\t\tutils: \"$lib/utils\",\n\t\t\t\tcomponents: \"$lib/components\",\n\t\t\t\thooks: \"$lib/hooks\",\n\t\t\t\tui: \"$lib/components/ui\",\n\t\t\t\tlib: \"$lib\",\n\t\t\t},\n\t\t\tresolvedPaths: {\n\t\t\t\tcomponents: resolvePath(\"../fixtures/config-partial/src/lib/components\"),\n\t\t\t\ttailwindCss: resolvePath(\"../fixtures/config-partial/src/app.css\"),\n\t\t\t\tutils: resolvePath(\"../fixtures/config-partial/src/lib/utils\"),\n\t\t\t\tcwd: resolvePath(\"../fixtures/config-partial\"),\n\t\t\t\thooks: resolvePath(\"../fixtures/config-partial/src/lib/hooks\"),\n\t\t\t\tui: resolvePath(\"../fixtures/config-partial/src/lib/components/ui\"),\n\t\t\t\tlib: resolvePath(\"../fixtures/config-partial/src/lib\"),\n\t\t\t},\n\t\t\ticonLibrary: \"lucide\",\n\t\t\tmenuAccent: \"subtle\",\n\t\t\tmenuColor: \"default\",\n\t\t\tstyle: \"nova\",\n\t\t\tsveltekit: true,\n\t\t\ttypescript: true,\n\t\t\tregistry: `${SITE_BASE_URL}/registry`,\n\t\t});\n\t});\n\n\tit(\"handles cases where a full config is present\", async () => {\n\t\texpect(await getConf(\"config-full\")).toEqual({\n\t\t\ttailwind: {\n\t\t\t\tcss: \"src/app.css\",\n\t\t\t\tbaseColor: \"zinc\",\n\t\t\t},\n\t\t\taliases: {\n\t\t\t\tutils: \"$lib/utils\",\n\t\t\t\tcomponents: \"$lib/components\",\n\t\t\t\thooks: \"$lib/hooks\",\n\t\t\t\tui: \"$lib/components/ui\",\n\t\t\t\tlib: \"$lib\",\n\t\t\t},\n\t\t\tresolvedPaths: {\n\t\t\t\tcomponents: resolvePath(\"../fixtures/config-full/src/lib/components\"),\n\t\t\t\ttailwindCss: resolvePath(\"../fixtures/config-full/src/app.css\"),\n\t\t\t\tutils: resolvePath(\"../fixtures/config-full/src/lib/utils\"),\n\t\t\t\tcwd: resolvePath(\"../fixtures/config-full\"),\n\t\t\t\thooks: resolvePath(\"../fixtures/config-full/src/lib/hooks\"),\n\t\t\t\tui: resolvePath(\"../fixtures/config-full/src/lib/components/ui\"),\n\t\t\t\tlib: resolvePath(\"../fixtures/config-full/src/lib\"),\n\t\t\t},\n\t\t\ticonLibrary: \"lucide\",\n\t\t\tmenuAccent: \"subtle\",\n\t\t\tmenuColor: \"default\",\n\t\t\tstyle: \"nova\",\n\t\t\tsveltekit: true,\n\t\t\ttypescript: true,\n\t\t\tregistry: `${SITE_BASE_URL}/registry`,\n\t\t});\n\t});\n\n\tit(\"handles cases where the project is not svelte-kit\", async () => {\n\t\texpect(await getConf(\"config-vite\")).toEqual({\n\t\t\ttailwind: {\n\t\t\t\tcss: \"src/app.css\",\n\t\t\t\tbaseColor: \"zinc\",\n\t\t\t},\n\t\t\taliases: {\n\t\t\t\tutils: \"$lib/utils\",\n\t\t\t\tcomponents: \"$lib/components\",\n\t\t\t\thooks: \"$lib/hooks\",\n\t\t\t\tui: \"$lib/components/ui\",\n\t\t\t\tlib: \"$lib\",\n\t\t\t},\n\t\t\tresolvedPaths: {\n\t\t\t\tcomponents: resolvePath(\"../fixtures/config-vite/src/lib/components\"),\n\t\t\t\ttailwindCss: resolvePath(\"../fixtures/config-vite/src/app.css\"),\n\t\t\t\tutils: resolvePath(\"../fixtures/config-vite/src/lib/utils\"),\n\t\t\t\thooks: resolvePath(\"../fixtures/config-vite/src/lib/hooks\"),\n\t\t\t\tui: resolvePath(\"../fixtures/config-vite/src/lib/components/ui\"),\n\t\t\t\tlib: resolvePath(\"../fixtures/config-vite/src/lib\"),\n\t\t\t\tcwd: resolvePath(\"../fixtures/config-vite\"),\n\t\t\t},\n\t\t\ticonLibrary: \"lucide\",\n\t\t\tmenuAccent: \"subtle\",\n\t\t\tmenuColor: \"default\",\n\t\t\tstyle: \"nova\",\n\t\t\tsveltekit: false,\n\t\t\ttypescript: true,\n\t\t\tregistry: `${SITE_BASE_URL}/registry`,\n\t\t});\n\t});\n\n\tit(\"handles cases where the project uses jsconfig.json\", async () => {\n\t\tconst config = await getConf(\"config-jsconfig\");\n\n\t\texpect(config).toEqual({\n\t\t\ttailwind: {\n\t\t\t\tcss: \"src/app.css\",\n\t\t\t\tbaseColor: \"zinc\",\n\t\t\t},\n\t\t\taliases: {\n\t\t\t\tcomponents: \"$lib/components\",\n\t\t\t\tutils: \"$lib/utils\",\n\t\t\t\tui: \"$lib/components/ui\",\n\t\t\t\thooks: \"$lib/hooks\",\n\t\t\t\tlib: \"$lib\",\n\t\t\t},\n\t\t\tresolvedPaths: {\n\t\t\t\tcomponents: resolvePath(\"../fixtures/config-jsconfig/src/lib/components\"),\n\t\t\t\ttailwindCss: resolvePath(\"../fixtures/config-jsconfig/src/app.css\"),\n\t\t\t\tutils: resolvePath(\"../fixtures/config-jsconfig/src/lib/utils\"),\n\t\t\t\thooks: resolvePath(\"../fixtures/config-jsconfig/src/lib/hooks\"),\n\t\t\t\tui: resolvePath(\"../fixtures/config-jsconfig/src/lib/components/ui\"),\n\t\t\t\tlib: resolvePath(\"../fixtures/config-jsconfig/src/lib\"),\n\t\t\t\tcwd: resolvePath(\"../fixtures/config-jsconfig\"),\n\t\t\t},\n\t\t\ticonLibrary: \"lucide\",\n\t\t\tmenuAccent: \"subtle\",\n\t\t\tmenuColor: \"default\",\n\t\t\tstyle: \"nova\",\n\t\t\tsveltekit: false,\n\t\t\ttypescript: false,\n\t\t\tregistry: `${SITE_BASE_URL}/registry`,\n\t\t});\n\t});\n\n\tit(\"handles legacy tailwind v3 configs\", async () => {\n\t\texpect(await getConf(\"legacy/post-init-default\")).toEqual({\n\t\t\tstyle: \"default\",\n\t\t\ttailwind: {\n\t\t\t\tcss: \"src/app.css\",\n\t\t\t\tbaseColor: \"zinc\",\n\t\t\t},\n\t\t\taliases: {\n\t\t\t\tcomponents: \"$lib/components\",\n\t\t\t\thooks: \"$lib/hooks\",\n\t\t\t\tutils: \"$lib/utils\",\n\t\t\t\tlib: \"$lib\",\n\t\t\t\tui: \"$lib/components/ui\",\n\t\t\t},\n\t\t\ticonLibrary: \"lucide\",\n\t\t\tmenuAccent: \"subtle\",\n\t\t\tmenuColor: \"default\",\n\t\t\ttypescript: true,\n\t\t\tsveltekit: true,\n\t\t\tregistry: `${SITE_BASE_URL}/registry`,\n\t\t\tresolvedPaths: {\n\t\t\t\tcwd: resolvePath(\"../fixtures/legacy/post-init-default\"),\n\t\t\t\tcomponents: resolvePath(\"../fixtures/legacy/src/lib/components\"),\n\t\t\t\thooks: resolvePath(\"../fixtures/legacy/src/lib/hooks\"),\n\t\t\t\tlib: resolvePath(\"../fixtures/legacy/src/lib\"),\n\t\t\t\ttailwindCss: resolvePath(\"../fixtures/legacy/post-init-default/src/app.css\"),\n\t\t\t\tui: resolvePath(\"../fixtures/legacy/src/lib/components/ui\"),\n\t\t\t\tutils: resolvePath(\"../fixtures/legacy/src/lib/utils\"),\n\t\t\t},\n\t\t});\n\t});\n});\n"
  },
  {
    "path": "packages/cli/test/utils/get-env-proxy.test.ts",
    "content": "import { describe, it, expect, vi, afterEach } from \"vitest\";\nimport { getEnvProxy } from \"../../src/utils/get-env-proxy\";\n\ndescribe(\"getEnvProxy\", () => {\n\tafterEach(() => {\n\t\tvi.unstubAllEnvs();\n\t});\n\n\tit(\"returns HTTP_PROXY if set\", () => {\n\t\tvi.stubEnv(\"HTTP_PROXY\", \"http://proxy.example.com\");\n\t\texpect(getEnvProxy()).toBe(\"http://proxy.example.com\");\n\t});\n\n\tit(\"returns http_proxy if HTTP_PROXY not set\", () => {\n\t\tvi.stubEnv(\"http_proxy\", \"http://proxy.example.com\");\n\t\texpect(getEnvProxy()).toBe(\"http://proxy.example.com\");\n\t});\n\n\tit(\"returns HTTPS_PROXY if HTTP_PROXY and http_proxy not set\", () => {\n\t\tvi.stubEnv(\"HTTPS_PROXY\", \"https://proxy.example.com\");\n\t\texpect(getEnvProxy()).toBe(\"https://proxy.example.com\");\n\t});\n\n\tit(\"returns https_proxy if higher priority proxies not set\", () => {\n\t\tvi.stubEnv(\"https_proxy\", \"https://proxy.example.com\");\n\t\texpect(getEnvProxy()).toBe(\"https://proxy.example.com\");\n\t});\n\n\tit(\"returns npm_config_proxy if higher priority proxies not set\", () => {\n\t\tvi.stubEnv(\"npm_config_proxy\", \"http://npm-proxy.example.com\");\n\t\texpect(getEnvProxy()).toBe(\"http://npm-proxy.example.com\");\n\t});\n\n\tit(\"returns npm_config_https_proxy if higher priority proxies not set\", () => {\n\t\tvi.stubEnv(\"npm_config_https_proxy\", \"https://npm-proxy.example.com\");\n\t\texpect(getEnvProxy()).toBe(\"https://npm-proxy.example.com\");\n\t});\n\n\tit(\"returns undefined if no proxy is set\", () => {\n\t\texpect(getEnvProxy()).toBeUndefined();\n\t});\n\n\tit(\"prioritizes HTTP_PROXY over other settings\", () => {\n\t\tvi.stubEnv(\"HTTP_PROXY\", \"http://proxy.example.com\");\n\t\tvi.stubEnv(\"https_proxy\", \"https://other-proxy.example.com\");\n\t\tvi.stubEnv(\"npm_config_proxy\", \"http://npm-proxy.example.com\");\n\t\texpect(getEnvProxy()).toBe(\"http://proxy.example.com\");\n\t});\n});\n"
  },
  {
    "path": "packages/cli/test/utils/get-package-info.test.ts",
    "content": "import path from \"node:path\";\nimport { vol } from \"memfs\";\nimport { describe, it, expect, vi, beforeEach } from \"vitest\";\nimport { getCLIPackageInfo } from \"../../src/utils/get-package-info\";\n\nvi.mock(\"node:path\");\nvi.mock(\"node:url\");\nvi.mock(\"node:fs\");\nvi.mock(\"node:fs/promises\");\nbeforeEach(() => {\n\tvol.reset();\n\tvi.resetAllMocks();\n});\n\ndescribe(\"getCLIPackageInfo\", () => {\n\tit(\"reads and parses package.json\", () => {\n\t\tconst mockPackageJson = { name: \"test-package\", version: \"1.0.0\" };\n\t\tvol.fromJSON(\n\t\t\t{\n\t\t\t\t\"./package.json\": JSON.stringify(mockPackageJson),\n\t\t\t},\n\t\t\t\"/tmp\"\n\t\t);\n\n\t\tvi.mocked(path.resolve).mockReturnValue(\"/tmp/package.json\");\n\n\t\tconst result = getCLIPackageInfo();\n\t\texpect(result).toEqual(mockPackageJson);\n\t});\n\n\tit(\"throws on invalid JSON\", () => {\n\t\tvol.fromJSON(\n\t\t\t{\n\t\t\t\t\"./package.json\": \"invalid json\",\n\t\t\t},\n\t\t\t\"/tmp\"\n\t\t);\n\t\tvi.mocked(path.resolve).mockReturnValue(\"/tmp/package.json\");\n\n\t\texpect(() => getCLIPackageInfo()).toThrow();\n\t});\n});\n"
  },
  {
    "path": "packages/cli/test/utils/preconditions.test.ts",
    "content": "import { describe, expect, it, vi, beforeEach } from \"vitest\";\nimport { TW3_SITE_BASE_URL } from \"../../src/constants.js\";\nimport { checkPreconditions } from \"../../src/utils/preconditions.js\";\nimport { getConfig, writeConfig } from \"../../src/utils/config/index.js\";\nimport { getDependencyPackageInfo } from \"../../src/utils/get-package-info.js\";\nimport * as project from \"../../src/utils/project.js\";\n\nconst resolvedPaths = {\n\tcwd: \"n/a\",\n\tcomponents: \"n/a\",\n\thooks: \"n/a\",\n\tlib: \"n/a\",\n\ttailwindCss: \"n/a\",\n\tui: \"n/a\",\n\tutils: \"n/a\",\n};\n\nconst configFull = {\n\ttailwind: {\n\t\tcss: \"src/app.css\",\n\t\tbaseColor: \"zinc\",\n\t},\n\taliases: {\n\t\tcomponents: \"$lib/components\",\n\t\tutils: \"$lib/utils\",\n\t\tui: \"$lib/components/ui\",\n\t\thooks: \"$lib/hooks\",\n\t\tlib: \"$lib\",\n\t},\n\tresolvedPaths,\n\ttypescript: true,\n\tregistry: \"https://shadcn-svelte.com/registry\",\n};\n\nconst configLegacy = {\n\tstyle: \"default\",\n\ttailwind: {\n\t\tcss: \"src/app.css\",\n\t\tbaseColor: \"zinc\",\n\t},\n\taliases: {\n\t\tcomponents: \"$lib/components\",\n\t\tutils: \"$lib/utils\",\n\t\tui: \"$lib/components/ui\",\n\t\thooks: \"$lib/hooks\",\n\t\tlib: \"$lib\",\n\t},\n\tresolvedPaths,\n\ttypescript: true,\n\tregistry: \"https://shadcn-svelte.com/registry\",\n};\n\nconst configLegacyUpdated = {\n\t...configLegacy,\n\tstyle: undefined,\n};\n\nvi.mock(\"../../src/utils/get-package-info.js\");\nvi.mock(\"../../src/utils/project.js\");\n\nvi.mock(\"../../src/utils/config/index.js\", async () => ({\n\t...(await vi.importActual<typeof import(\"../../src/utils/config/index.js\")>(\n\t\t\"../../src/utils/config/index.js\"\n\t)),\n\twriteConfig: vi.fn(),\n\tgetConfig: vi.fn(),\n}));\n\ndescribe(\"checkPreconditions\", () => {\n\tconst mockCwd = \"/test/cwd\";\n\n\tbeforeEach(() => {\n\t\tvi.resetAllMocks();\n\t\tvi.mocked(getDependencyPackageInfo).mockReturnValue(undefined);\n\t});\n\n\tit(\"should pass for Tailwind v4 + Svelte v5\", async () => {\n\t\t// @ts-expect-error - we're mocking the config\n\t\tvi.mocked(getConfig).mockResolvedValue(configFull);\n\n\t\tvi.mocked(project.getPackageInfo).mockReturnValue({\n\t\t\tdependencies: {\n\t\t\t\ttailwindcss: \"4.0.0\",\n\t\t\t\tsvelte: \"5.0.0\",\n\t\t\t},\n\t\t\tdevDependencies: {},\n\t\t});\n\n\t\tconst config = (await getConfig(mockCwd))!;\n\n\t\texpect(() =>\n\t\t\tcheckPreconditions({ cwd: mockCwd, config, skipPreflight: false })\n\t\t).not.toThrow();\n\t});\n\n\tit(\"should update legacy config for Tailwind v3 + Svelte v5\", async () => {\n\t\t// @ts-expect-error - we're mocking the config\n\t\tvi.mocked(getConfig).mockResolvedValue(configLegacy);\n\t\tvi.mocked(project.getPackageInfo).mockReturnValue({\n\t\t\tdependencies: {\n\t\t\t\ttailwindcss: \"3.0.0\",\n\t\t\t\tsvelte: \"5.0.0\",\n\t\t\t},\n\t\t\tdevDependencies: {},\n\t\t});\n\n\t\tconst config = (await getConfig(mockCwd))!;\n\t\tconst updatedConfig = checkPreconditions({ cwd: mockCwd, config, skipPreflight: false });\n\n\t\tconst expectedConfig = {\n\t\t\t...configLegacy,\n\t\t\tregistry: `${TW3_SITE_BASE_URL}/registry/default`,\n\t\t};\n\n\t\texpect(updatedConfig).toStrictEqual(expectedConfig);\n\t});\n\n\tit(\"should not update config for Tailwind v3 + Svelte v5 if no style field\", async () => {\n\t\t// @ts-expect-error - we're mocking the config\n\t\tvi.mocked(getConfig).mockResolvedValue(configLegacyUpdated);\n\t\tvi.mocked(getDependencyPackageInfo).mockReturnValue({\n\t\t\tpkg: {\n\t\t\t\tdependencies: {\n\t\t\t\t\ttailwindcss: \"3.0.0\",\n\t\t\t\t\tsvelte: \"5.0.0\",\n\t\t\t\t},\n\t\t\t\tdevDependencies: {},\n\t\t\t},\n\t\t\tpath: \"test/path\",\n\t\t});\n\t\tvi.mocked(project.getPackageInfo).mockReturnValue({\n\t\t\tdependencies: {\n\t\t\t\ttailwindcss: \"3.0.0\",\n\t\t\t\tsvelte: \"5.0.0\",\n\t\t\t},\n\t\t\tdevDependencies: {},\n\t\t});\n\n\t\tconst config = (await getConfig(mockCwd))!;\n\t\tcheckPreconditions({ cwd: mockCwd, config, skipPreflight: false });\n\n\t\texpect(writeConfig).not.toHaveBeenCalled();\n\t});\n\n\tit(\"should throw for incompatible versions\", async () => {\n\t\tconst testCases = [\n\t\t\t{ tailwindcss: \"2.0.0\", svelte: \"5.0.0\" },\n\t\t\t{ tailwindcss: \"4.0.0\", svelte: \"4.0.0\" },\n\t\t\t{ tailwindcss: \"3.0.0\", svelte: \"4.0.0\" },\n\t\t\t{ tailwindcss: \"5.0.0\", svelte: \"5.0.0\" },\n\t\t];\n\n\t\tfor (const deps of testCases) {\n\t\t\t// @ts-expect-error - we're mocking the config\n\t\t\tvi.mocked(getConfig).mockResolvedValue({ ...configFull, resolvedPaths });\n\t\t\tvi.mocked(project.getPackageInfo).mockReturnValue({\n\t\t\t\tdependencies: deps,\n\t\t\t\tdevDependencies: {},\n\t\t\t});\n\n\t\t\tconst config = (await getConfig(mockCwd))!;\n\t\t\texpect(() =>\n\t\t\t\tcheckPreconditions({ cwd: mockCwd, config, skipPreflight: false })\n\t\t\t).toThrow(\"requires Tailwind CSS (v3 or v4) and Svelte v5\");\n\t\t}\n\t});\n});\n"
  },
  {
    "path": "packages/cli/test/utils/preflight-init.test.ts",
    "content": "import color from \"picocolors\";\nimport { describe, it, expect, vi, beforeEach } from \"vitest\";\nimport { preflightInit } from \"../../src/commands/init/preflight.js\";\nimport { SITE_BASE_URL, TW3_SITE_BASE_URL } from \"../../src/constants\";\nimport { highlight } from \"../../src/utils/colors\";\nimport { getDependencyPackageInfo } from \"../../src/utils/get-package-info.js\";\nimport * as project from \"../../src/utils/project.js\";\n\nvi.mock(\"../../src/utils/project.js\");\nvi.mock(\"../../src/utils/get-package-info.js\");\nvi.mock(\"../../src/utils/colors\");\n\ndescribe(\"preflightInit\", () => {\n\tbeforeEach(() => {\n\t\tvi.clearAllMocks();\n\n\t\tvi.mocked(getDependencyPackageInfo).mockReturnValue(undefined);\n\t});\n\n\tit(\"should throw error for Tailwind v3 + Svelte v5\", () => {\n\t\tvi.mocked(project.getPackageInfo).mockReturnValue({\n\t\t\tdependencies: {\n\t\t\t\ttailwindcss: \"3.0.0\",\n\t\t\t\tsvelte: \"5.0.0\",\n\t\t\t},\n\t\t\tdevDependencies: {},\n\t\t});\n\n\t\texpect(() => preflightInit(\"/test\", { skipPreflight: false })).toThrow(\n\t\t\t`Initializing a project with Tailwind v3 is not supported.\\n\\n` +\n\t\t\t\t`This CLI version requires Tailwind v4 and Svelte v5 for the ` +\n\t\t\t\t`${highlight(\"init\")} command.\\n\\n` +\n\t\t\t\t`You have two options:\\n` +\n\t\t\t\t`1. Update Tailwind CSS to v4 and try again.\\n` +\n\t\t\t\t`2. Use ${highlight(\"shadcn-svelte@1.0.0-next.10\")} that supports initializing projects with Tailwind v3.\\n\\n` +\n\t\t\t\t`References:\\n` +\n\t\t\t\t`Tailwind v4 Guide: ${color.underline(`${SITE_BASE_URL}/docs/migration/tailwind-v4`)}\\n` +\n\t\t\t\t`Legacy Tailwind v3 Docs: ${color.underline(`${TW3_SITE_BASE_URL}/docs`)}\\n\\n`\n\t\t);\n\t});\n\n\tit(\"should throw error for Tailwind v3 + Svelte v4\", () => {\n\t\tvi.mocked(project.getPackageInfo).mockReturnValue({\n\t\t\tdependencies: {\n\t\t\t\ttailwindcss: \"3.0.0\",\n\t\t\t\tsvelte: \"4.0.0\",\n\t\t\t},\n\t\t\tdevDependencies: {},\n\t\t});\n\n\t\texpect(() => preflightInit(\"/test\", { skipPreflight: false })).toThrow(\n\t\t\t`Initializing a project with Tailwind v3 and Svelte v4 is not supported.\\n\\n` +\n\t\t\t\t`This CLI version requires Tailwind v4 and Svelte v5 for the ` +\n\t\t\t\t`${highlight(\"init\")} command.\\n\\n` +\n\t\t\t\t`Please use ${highlight(\"shadcn-svelte@0.14\")} that supports Tailwind v3 + Svelte v4.\\n\\n`\n\t\t);\n\t});\n\n\tit(\"should throw error for Tailwind v4 + Svelte v4\", () => {\n\t\tvi.mocked(project.getPackageInfo).mockReturnValue({\n\t\t\tdependencies: {\n\t\t\t\ttailwindcss: \"4.0.0\",\n\t\t\t\tsvelte: \"4.0.0\",\n\t\t\t},\n\t\t\tdevDependencies: {},\n\t\t});\n\n\t\texpect(() => preflightInit(\"/test\", { skipPreflight: false })).toThrow(\n\t\t\t`This CLI version requires Tailwind CSS v4 and Svelte v5 to initialize a project.\\n`\n\t\t);\n\t});\n\n\tit(\"should pass for Tailwind v4 + Svelte v5\", () => {\n\t\tvi.mocked(project.getPackageInfo).mockReturnValue({\n\t\t\tdependencies: {\n\t\t\t\ttailwindcss: \"4.0.0\",\n\t\t\t\tsvelte: \"5.0.0\",\n\t\t\t},\n\t\t\tdevDependencies: {},\n\t\t});\n\n\t\texpect(() => preflightInit(\"/test\", { skipPreflight: false })).not.toThrow();\n\t});\n\n\tit(\"should check both dependencies and devDependencies\", () => {\n\t\tvi.mocked(project.getPackageInfo).mockReturnValue({\n\t\t\tdependencies: {\n\t\t\t\ttailwindcss: \"4.0.0\",\n\t\t\t},\n\t\t\tdevDependencies: {\n\t\t\t\tsvelte: \"5.0.0\",\n\t\t\t},\n\t\t});\n\n\t\texpect(() => preflightInit(\"/test\", { skipPreflight: false })).not.toThrow();\n\t});\n\n\tit(\"should handle missing dependencies\", () => {\n\t\tvi.mocked(project.getPackageInfo).mockReturnValue({\n\t\t\tdependencies: {},\n\t\t\tdevDependencies: {},\n\t\t});\n\n\t\texpect(() => preflightInit(\"/test\", { skipPreflight: false })).toThrow(\n\t\t\t`This CLI version requires Tailwind CSS v4 and Svelte v5 to initialize a project.\\n`\n\t\t);\n\t});\n\n\tit(\"should continue with skip-preflight flag\", () => {\n\t\tvi.mocked(project.getPackageInfo).mockReturnValue({\n\t\t\tdependencies: {},\n\t\t\tdevDependencies: {},\n\t\t});\n\n\t\texpect(() => preflightInit(\"/test\", { skipPreflight: true })).not.toThrow();\n\t});\n});\n"
  },
  {
    "path": "packages/cli/test/utils/project.test.ts",
    "content": "import path from \"node:path\";\nimport { vol } from \"memfs\";\nimport { describe, it, expect, vi, beforeEach } from \"vitest\";\nimport * as project from \"../../src/utils/project.js\";\nimport type { ResolvedConfig } from \"../../src/utils/config/index.js\";\n\nvi.mock(\"node:path\");\nvi.mock(\"node:url\");\nvi.mock(\"node:fs\");\nvi.mock(\"node:fs/promises\");\n\nbeforeEach(() => {\n\tvol.reset();\n\tvi.resetAllMocks();\n});\n\nconst mockRegistryIndex = [\n\t{ name: \"button\", type: \"registry:ui\" as const, relativeUrl: \"button.json\" },\n\t{ name: \"card\", type: \"registry:ui\" as const, relativeUrl: \"card.json\" },\n\t{ name: \"utils\", type: \"registry:lib\" as const, relativeUrl: \"utils.json\" },\n\t{ name: \"use-mobile\", type: \"registry:hook\" as const, relativeUrl: \"use-mobile.json\" },\n];\n\nfunction createConfig(resolvedPaths: {\n\tui: string;\n\tcomponents: string;\n\thooks: string;\n}): ResolvedConfig {\n\treturn {\n\t\tresolvedPaths: {\n\t\t\t...resolvedPaths,\n\t\t\tcwd: \"/test\",\n\t\t\tlib: \"/test/lib\",\n\t\t\ttailwindCss: \"/test/app.css\",\n\t\t\tutils: \"/test/utils\",\n\t\t},\n\t\taliases: {\n\t\t\tcomponents: \"$lib/components\",\n\t\t\tutils: \"$lib/utils\",\n\t\t\tui: \"$lib/components/ui\",\n\t\t\thooks: \"$lib/hooks\",\n\t\t\tlib: \"$lib\",\n\t\t},\n\t\ttailwind: { css: \"src/app.css\", baseColor: \"zinc\" },\n\t\ttypescript: true,\n\t\tregistry: \"https://shadcn-svelte.com/registry\",\n\t\tstyle: \"vega\",\n\t\ticonLibrary: \"lucide\",\n\t\tmenuColor: \"default\",\n\t\tmenuAccent: \"subtle\",\n\t\tsveltekit: true,\n\t} satisfies ResolvedConfig;\n}\n\ndescribe(\"getPackageInfo\", () => {\n\tit(\"reads and parses project package.json\", () => {\n\t\tconst mockPackageJson = { name: \"project-package\", version: \"1.0.0\" };\n\n\t\tvol.fromJSON(\n\t\t\t{\n\t\t\t\t\"./package.json\": JSON.stringify(mockPackageJson),\n\t\t\t},\n\t\t\t\"/tmp\"\n\t\t);\n\t\tvi.mocked(path.resolve).mockReturnValue(\"/tmp/package.json\");\n\n\t\tconst result = project.getPackageInfo(\"/tmp\");\n\t\texpect(result).toEqual(mockPackageJson);\n\t\texpect(path.resolve).toHaveBeenCalledWith(\"/tmp\", \"package.json\");\n\t});\n\n\tit(\"throws on invalid JSON\", () => {\n\t\tvol.fromJSON(\n\t\t\t{\n\t\t\t\t\"./package.json\": \"invalid json\",\n\t\t\t},\n\t\t\t\"/tmp\"\n\t\t);\n\t\tvi.mocked(path.resolve).mockReturnValue(\"/tmp/package.json\");\n\n\t\texpect(() => project.getPackageInfo(\"/tmp\")).toThrow();\n\t});\n});\n\ndescribe(\"isUsingSvelteKit\", () => {\n\tit(\"returns true when @sveltejs/kit is in dependencies\", () => {\n\t\tvol.fromJSON(\n\t\t\t{\n\t\t\t\t\"./package.json\": JSON.stringify({\n\t\t\t\t\tdependencies: { \"@sveltejs/kit\": \"^2.0.0\" },\n\t\t\t\t\tdevDependencies: {},\n\t\t\t\t}),\n\t\t\t},\n\t\t\t\"/tmp\"\n\t\t);\n\t\tvi.mocked(path.resolve).mockReturnValue(\"/tmp/package.json\");\n\n\t\texpect(project.isUsingSvelteKit(\"/tmp\")).toBe(true);\n\t});\n\n\tit(\"returns true when @sveltejs/kit is in devDependencies\", () => {\n\t\tvol.fromJSON(\n\t\t\t{\n\t\t\t\t\"./package.json\": JSON.stringify({\n\t\t\t\t\tdependencies: {},\n\t\t\t\t\tdevDependencies: { \"@sveltejs/kit\": \"^2.0.0\" },\n\t\t\t\t}),\n\t\t\t},\n\t\t\t\"/tmp\"\n\t\t);\n\t\tvi.mocked(path.resolve).mockReturnValue(\"/tmp/package.json\");\n\n\t\texpect(project.isUsingSvelteKit(\"/tmp\")).toBe(true);\n\t});\n\n\tit(\"returns false when @sveltejs/kit is not a dependency\", () => {\n\t\tvol.fromJSON(\n\t\t\t{\n\t\t\t\t\"./package.json\": JSON.stringify({\n\t\t\t\t\tdependencies: { svelte: \"^5.0.0\" },\n\t\t\t\t\tdevDependencies: {},\n\t\t\t\t}),\n\t\t\t},\n\t\t\t\"/tmp\"\n\t\t);\n\t\tvi.mocked(path.resolve).mockReturnValue(\"/tmp/package.json\");\n\n\t\texpect(project.isUsingSvelteKit(\"/tmp\")).toBe(false);\n\t});\n});\n\ndescribe(\"getComponents\", () => {\n\tit(\"returns registry items that exist as directories in ui, components, and hooks paths\", async () => {\n\t\t// Create directory structure: /test/ui/button, /test/ui/card, /test/hooks/use-mobile\n\t\tvol.fromJSON(\n\t\t\t{\n\t\t\t\t\"./ui/button/.gitkeep\": \"\",\n\t\t\t\t\"./ui/card/.gitkeep\": \"\",\n\t\t\t\t\"./components/other/.gitkeep\": \"\", // not in registry\n\t\t\t\t\"./hooks/use-mobile/.gitkeep\": \"\",\n\t\t\t},\n\t\t\t\"/test\"\n\t\t);\n\n\t\tconst config = createConfig({\n\t\t\tui: \"/test/ui\",\n\t\t\tcomponents: \"/test/components\",\n\t\t\thooks: \"/test/hooks\",\n\t\t});\n\n\t\tconst result = await project.getComponents({\n\t\t\tregistryIndex: mockRegistryIndex,\n\t\t\tconfig,\n\t\t});\n\n\t\t// button, card from ui; use-mobile from hooks; utils always included\n\t\texpect(result).toHaveLength(4);\n\t\texpect(result.map((r) => r.name)).toContain(\"button\");\n\t\texpect(result.map((r) => r.name)).toContain(\"card\");\n\t\texpect(result.map((r) => r.name)).toContain(\"use-mobile\");\n\t\texpect(result.map((r) => r.name)).toContain(\"utils\");\n\t\texpect(result.map((r) => r.name)).not.toContain(\"other\");\n\t});\n\n\tit(\"always includes utils when it exists in registry index\", async () => {\n\t\tvol.fromJSON({}, \"/test\");\n\n\t\tconst config = createConfig({\n\t\t\tui: \"/test/ui\",\n\t\t\tcomponents: \"/test/components\",\n\t\t\thooks: \"/test/hooks\",\n\t\t});\n\n\t\tconst result = await project.getComponents({\n\t\t\tregistryIndex: mockRegistryIndex,\n\t\t\tconfig,\n\t\t});\n\n\t\texpect(result).toHaveLength(1);\n\t\texpect(result[0].name).toBe(\"utils\");\n\t});\n\n\tit(\"skips directories that do not exist\", async () => {\n\t\tvol.fromJSON(\n\t\t\t{\n\t\t\t\t\"./ui/button/.gitkeep\": \"\",\n\t\t\t},\n\t\t\t\"/test\"\n\t\t);\n\n\t\t// components and hooks dirs don't exist\n\t\tconst config = createConfig({\n\t\t\tui: \"/test/ui\",\n\t\t\tcomponents: \"/test/nonexistent/components\",\n\t\t\thooks: \"/test/nonexistent/hooks\",\n\t\t});\n\n\t\tconst result = await project.getComponents({\n\t\t\tregistryIndex: mockRegistryIndex,\n\t\t\tconfig,\n\t\t});\n\n\t\texpect(result.map((r) => r.name)).toContain(\"button\");\n\t\texpect(result.map((r) => r.name)).toContain(\"utils\");\n\t});\n\n\tit(\"returns only utils when no component directories exist\", async () => {\n\t\tvol.fromJSON({}, \"/test\");\n\n\t\tconst config = createConfig({\n\t\t\tui: \"/test/nonexistent/ui\",\n\t\t\tcomponents: \"/test/nonexistent/components\",\n\t\t\thooks: \"/test/nonexistent/hooks\",\n\t\t});\n\n\t\tconst result = await project.getComponents({\n\t\t\tregistryIndex: mockRegistryIndex,\n\t\t\tconfig,\n\t\t});\n\n\t\texpect(result).toHaveLength(1);\n\t\texpect(result[0].name).toBe(\"utils\");\n\t});\n});\n"
  },
  {
    "path": "packages/cli/test/utils/registry.test.ts",
    "content": "import path from \"node:path\";\nimport { describe, it, expect, vi, beforeEach } from \"vitest\";\nimport { fetch } from \"node-fetch-native\";\nimport {\n\tgetRegistryUrl,\n\tgetRegistryIndex,\n\tgetBaseColors,\n\tgetRegistryTheme,\n\tresolveRegistryItems,\n\tgetItemAliasDir,\n\tresolveItemFilePath,\n} from \"../../src/utils/registry/index.js\";\nimport { toPosixPath } from \"./test-helpers.js\";\nimport type { ResolvedConfig } from \"../../src/utils/config/index.js\";\nimport type { RegistryItem, RegistryIndex } from \"../../src/utils/registry/schema.js\";\n\nvi.mock(\"node-fetch-native\", () => ({\n\tfetch: vi.fn(),\n}));\n\ndescribe(\"Registry Utilities\", () => {\n\tconst cwd = \"/path/to/cwd\";\n\tconst mockConfig: ResolvedConfig = {\n\t\tregistry: \"https://example.com/registry\",\n\t\tresolvedPaths: {\n\t\t\tui: path.posix.normalize(`${cwd}/ui`),\n\t\t\thooks: path.posix.normalize(`${cwd}/hooks`),\n\t\t\tcomponents: path.posix.normalize(`${cwd}/components`),\n\t\t\tcwd: path.posix.normalize(cwd),\n\t\t\tlib: path.posix.normalize(`${cwd}/lib`),\n\t\t\tutils: path.posix.normalize(`${cwd}/utils`),\n\t\t},\n\t\tsveltekit: true,\n\t} as ResolvedConfig;\n\n\tconst mockRegistryIndex: RegistryIndex = [\n\t\t{\n\t\t\tname: \"button\",\n\t\t\ttitle: \"Button\",\n\t\t\ttype: \"registry:ui\",\n\t\t\trelativeUrl: \"button.json\",\n\t\t\tregistryDependencies: [\"theme\"],\n\t\t\tdependencies: [],\n\t\t\tdevDependencies: [],\n\t\t},\n\t\t{\n\t\t\tname: \"theme\",\n\t\t\ttitle: \"Theme\",\n\t\t\ttype: \"registry:theme\",\n\t\t\trelativeUrl: \"theme.json\",\n\t\t\tregistryDependencies: [],\n\t\t\tdependencies: [],\n\t\t\tdevDependencies: [],\n\t\t},\n\t];\n\n\tbeforeEach(() => {\n\t\tvi.clearAllMocks();\n\t});\n\n\tdescribe(\"getRegistryUrl\", () => {\n\t\tit(\"should return environment variable if set\", () => {\n\t\t\tprocess.env.COMPONENTS_REGISTRY_URL = \"https://custom.registry.com\";\n\t\t\texpect(getRegistryUrl(mockConfig)).toBe(\"https://custom.registry.com\");\n\t\t\tdelete process.env.COMPONENTS_REGISTRY_URL;\n\t\t});\n\n\t\tit(\"should return environment variable with style if set\", () => {\n\t\t\tprocess.env.REGISTRY_URL = \"https://custom.registry.com\";\n\t\t\texpect(\n\t\t\t\tgetRegistryUrl({ registry: \"https://example.com/registry\", style: \"vega\" })\n\t\t\t).toBe(\"https://custom.registry.com/styles/vega\");\n\t\t\tdelete process.env.REGISTRY_URL;\n\t\t});\n\n\t\tit(\"should return config registry URL if no env var\", () => {\n\t\t\texpect(getRegistryUrl(mockConfig)).toBe(\"https://example.com/registry/styles/vega\");\n\t\t});\n\n\t\tit(\"should return config registry URL with style if no env var\", () => {\n\t\t\texpect(\n\t\t\t\tgetRegistryUrl({ registry: \"https://example.com/registry\", style: \"nova\" })\n\t\t\t).toBe(\"https://example.com/registry/styles/nova\");\n\t\t});\n\t});\n\n\tdescribe(\"getRegistryIndex\", () => {\n\t\tit(\"should fetch and parse registry index\", async () => {\n\t\t\tconst mockResponse = {\n\t\t\t\tjson: () => Promise.resolve(mockRegistryIndex),\n\t\t\t\tok: true,\n\t\t\t\tstatus: 200,\n\t\t\t\tstatusText: \"OK\",\n\t\t\t};\n\t\t\tvi.mocked(fetch).mockResolvedValueOnce(mockResponse as Response);\n\n\t\t\tconst result = await getRegistryIndex(\"https://example.com/registry\");\n\t\t\texpect(result).toEqual(mockRegistryIndex);\n\t\t\texpect(fetch).toHaveBeenCalledWith(expect.any(URL), {});\n\t\t});\n\n\t\tit(\"should throw error on fetch failure\", async () => {\n\t\t\tvi.mocked(fetch).mockRejectedValueOnce(new Error(\"Network error\"));\n\t\t\tawait expect(getRegistryIndex(\"https://example.com/registry\")).rejects.toThrow(\n\t\t\t\t\"Failed to fetch registry.\"\n\t\t\t);\n\t\t});\n\t});\n\n\tdescribe(\"getBaseColors\", () => {\n\t\tit(\"should return array of base colors\", () => {\n\t\t\tconst colors = getBaseColors();\n\t\t\texpect(colors).toEqual([\n\t\t\t\t{ label: \"Neutral\", name: \"neutral\" },\n\t\t\t\t{ label: \"Stone\", name: \"stone\" },\n\t\t\t\t{ label: \"Zinc\", name: \"zinc\" },\n\t\t\t\t{ label: \"Mauve\", name: \"mauve\" },\n\t\t\t\t{ label: \"Olive\", name: \"olive\" },\n\t\t\t\t{ label: \"Mist\", name: \"mist\" },\n\t\t\t\t{ label: \"Taupe\", name: \"taupe\" },\n\t\t\t]);\n\t\t});\n\t});\n\n\tdescribe(\"getRegistryBaseColor\", () => {\n\t\tit(\"should fetch and parse base color\", async () => {\n\t\t\tconst mockColorData = {\n\t\t\t\tcssVars: { light: {}, dark: {} },\n\t\t\t};\n\t\t\tconst mockResponse = {\n\t\t\t\tjson: () => Promise.resolve(mockColorData),\n\t\t\t\tok: true,\n\t\t\t\tstatus: 200,\n\t\t\t\tstatusText: \"OK\",\n\t\t\t};\n\t\t\tvi.mocked(fetch).mockResolvedValueOnce(mockResponse as Response);\n\n\t\t\tconst result = await getRegistryTheme(\"https://example.com/registry\", \"slate\");\n\t\t\texpect(result).toEqual(mockColorData);\n\t\t\texpect(fetch).toHaveBeenCalledWith(expect.any(URL), {});\n\t\t});\n\n\t\tit(\"should throw error on base color fetch failure\", async () => {\n\t\t\tvi.mocked(fetch).mockRejectedValueOnce(new Error(\"Network error\"));\n\t\t\tawait expect(getRegistryTheme(\"https://example.com/registry\", \"slate\")).rejects.toThrow(\n\t\t\t\t\"Failed to fetch theme: slate from registry.\"\n\t\t\t);\n\t\t});\n\t});\n\n\tdescribe(\"resolveRegistryItems\", () => {\n\t\tconst registryUrl = \"https://shadcn-svelte.com/registry\";\n\n\t\tit(\"should resolve items from registry index\", async () => {\n\t\t\tconst result = await resolveRegistryItems({\n\t\t\t\tregistryUrl,\n\t\t\t\tregistryIndex: mockRegistryIndex,\n\t\t\t\titems: [\"button\"],\n\t\t\t});\n\n\t\t\texpect(result).toHaveLength(2); // button + theme dependency\n\t\t\texpect(result[0]?.name).toBe(\"button\");\n\t\t\texpect(result[1]?.name).toBe(\"theme\");\n\t\t});\n\n\t\tit(\"should handle remote items\", async () => {\n\t\t\tconst mockRemoteItem: RegistryItem = {\n\t\t\t\tname: \"remote-button\",\n\t\t\t\ttitle: \"Remote Button\",\n\t\t\t\ttype: \"registry:ui\",\n\t\t\t\tfiles: [],\n\t\t\t};\n\t\t\tconst mockResponse = {\n\t\t\t\tjson: () => Promise.resolve(mockRemoteItem),\n\t\t\t\tok: true,\n\t\t\t\tstatus: 200,\n\t\t\t\tstatusText: \"OK\",\n\t\t\t};\n\t\t\tvi.mocked(fetch).mockResolvedValueOnce(mockResponse as Response);\n\n\t\t\tconst result = await resolveRegistryItems({\n\t\t\t\tregistryUrl,\n\t\t\t\tregistryIndex: mockRegistryIndex,\n\t\t\t\titems: [\"https://remote.com/button.json\"],\n\t\t\t});\n\n\t\t\texpect(result).toHaveLength(1);\n\t\t\texpect(result[0]?.name).toBe(\"remote-button\");\n\t\t});\n\n\t\tit(\"should throw error on remote item fetch failure\", async () => {\n\t\t\tvi.mocked(fetch).mockRejectedValueOnce(new Error(\"Network error\"));\n\t\t\tawait expect(\n\t\t\t\tresolveRegistryItems({\n\t\t\t\t\tregistryUrl,\n\t\t\t\t\tregistryIndex: mockRegistryIndex,\n\t\t\t\t\titems: [\"https://remote.com/button.json\"],\n\t\t\t\t})\n\t\t\t).rejects.toThrow(\"Failed to fetch registry.\");\n\t\t});\n\n\t\tit(\"should show registry URL in error message when item not found\", async () => {\n\t\t\tawait expect(\n\t\t\t\tresolveRegistryItems({\n\t\t\t\t\tregistryUrl: \"https://custom-registry.com/registry\",\n\t\t\t\t\tregistryIndex: mockRegistryIndex,\n\t\t\t\t\titems: [\"nonexistent-item\"],\n\t\t\t\t})\n\t\t\t).rejects.toThrow(\n\t\t\t\t/Registry item 'nonexistent-item' does not exist in the registry at 'https:\\/\\/custom-registry\\.com\\/registry'/\n\t\t\t);\n\t\t});\n\n\t\tit(\"should suggest official registry URL when using custom registry\", async () => {\n\t\t\tawait expect(\n\t\t\t\tresolveRegistryItems({\n\t\t\t\t\tregistryUrl: \"https://custom-registry.com/registry\",\n\t\t\t\t\tregistryIndex: mockRegistryIndex,\n\t\t\t\t\titems: [\"nonexistent-item\"],\n\t\t\t\t})\n\t\t\t).rejects.toThrow(/https:\\/\\/shadcn-svelte\\.com\\/registry/);\n\t\t});\n\t});\n\n\tdescribe(\"getItemAliasDir\", () => {\n\t\tit(\"should return correct directory for each type\", () => {\n\t\t\texpect(toPosixPath(getItemAliasDir(mockConfig, \"registry:ui\"))).toBe(\"/path/to/cwd/ui\");\n\t\t\texpect(toPosixPath(getItemAliasDir(mockConfig, \"registry:hook\"))).toBe(\n\t\t\t\t\"/path/to/cwd/hooks\"\n\t\t\t);\n\t\t\texpect(toPosixPath(getItemAliasDir(mockConfig, \"registry:component\"))).toBe(\n\t\t\t\t\"/path/to/cwd/components\"\n\t\t\t);\n\t\t\texpect(toPosixPath(getItemAliasDir(mockConfig, \"registry:file\"))).toBe(\"/path/to/cwd\");\n\t\t});\n\t});\n\n\tdescribe(\"resolveItemFilePath\", () => {\n\t\tit(\"should resolve path with target starting with ~/\", () => {\n\t\t\tconst item: RegistryItem = {\n\t\t\t\tname: \"button\",\n\t\t\t\ttype: \"registry:ui\",\n\t\t\t\tfiles: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"registry:component\",\n\t\t\t\t\t\tcontent: \"\",\n\t\t\t\t\t\ttarget: \"~/src/components/button.svelte\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t};\n\t\t\texpect(toPosixPath(resolveItemFilePath(mockConfig, item, item.files![0]))).toBe(\n\t\t\t\t\"/path/to/cwd/src/components/button.svelte\"\n\t\t\t);\n\t\t});\n\n\t\tit(\"should resolve path for UI components\", () => {\n\t\t\tconst item: RegistryItem = {\n\t\t\t\tname: \"button\",\n\t\t\t\ttype: \"registry:ui\",\n\t\t\t\tfiles: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"registry:file\",\n\t\t\t\t\t\tcontent: \"\",\n\t\t\t\t\t\ttarget: \"button/button.svelte\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t};\n\t\t\texpect(toPosixPath(resolveItemFilePath(mockConfig, item, item.files![0]))).toBe(\n\t\t\t\t\"/path/to/cwd/ui/button/button.svelte\"\n\t\t\t);\n\t\t});\n\n\t\tit(\"should resolve path for components\", () => {\n\t\t\tconst item: RegistryItem = {\n\t\t\t\tname: \"button\",\n\t\t\t\ttype: \"registry:component\",\n\t\t\t\tfiles: [{ type: \"registry:component\", content: \"\", target: \"button.svelte\" }],\n\t\t\t};\n\t\t\texpect(toPosixPath(resolveItemFilePath(mockConfig, item, item.files![0]))).toBe(\n\t\t\t\t\"/path/to/cwd/components/button.svelte\"\n\t\t\t);\n\t\t});\n\n\t\tit(\"should resolve path for blocks\", () => {\n\t\t\tconst item: RegistryItem = {\n\t\t\t\tname: \"login\",\n\t\t\t\ttype: \"registry:block\",\n\t\t\t\tfiles: [\n\t\t\t\t\t{ type: \"registry:component\", content: \"\", target: \"complex-button.svelte\" },\n\t\t\t\t\t{ type: \"registry:ui\", content: \"\", target: \"button/button.svelte\" },\n\t\t\t\t\t{ type: \"registry:page\", content: \"\", target: \"login/+page.svelte\" },\n\t\t\t\t],\n\t\t\t};\n\t\t\texpect(toPosixPath(resolveItemFilePath(mockConfig, item, item.files![0]))).toBe(\n\t\t\t\t\"/path/to/cwd/components/complex-button.svelte\"\n\t\t\t);\n\t\t\texpect(toPosixPath(resolveItemFilePath(mockConfig, item, item.files![1]))).toBe(\n\t\t\t\t\"/path/to/cwd/ui/button/button.svelte\"\n\t\t\t);\n\t\t\texpect(toPosixPath(resolveItemFilePath(mockConfig, item, item.files![2]))).toBe(\n\t\t\t\t\"/path/to/cwd/src/routes/login/+page.svelte\"\n\t\t\t);\n\t\t});\n\n\t\tit(\"should resolve path for hooks\", () => {\n\t\t\tconst item: RegistryItem = {\n\t\t\t\tname: \"use-hook\",\n\t\t\t\ttitle: \"Use Hook\",\n\t\t\t\ttype: \"registry:hook\",\n\t\t\t\tfiles: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"registry:hook\",\n\t\t\t\t\t\ttarget: \"use-hook.svelte.ts\",\n\t\t\t\t\t\tcontent: \"\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t};\n\t\t\texpect(toPosixPath(resolveItemFilePath(mockConfig, item, item.files![0]))).toBe(\n\t\t\t\t\"/path/to/cwd/hooks/use-hook.svelte.ts\"\n\t\t\t);\n\t\t});\n\n\t\tit(\"should resolve path for utils\", () => {\n\t\t\tconst config = { ...mockConfig };\n\t\t\tconst item: RegistryItem = {\n\t\t\t\tname: \"utils\",\n\t\t\t\ttype: \"registry:lib\",\n\t\t\t\tfiles: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: \"registry:lib\",\n\t\t\t\t\t\ttarget: \"utils.ts\",\n\t\t\t\t\t\tcontent: \"\",\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t};\n\t\t\texpect(toPosixPath(resolveItemFilePath(config, item, item.files![0]))).toBe(\n\t\t\t\t\"/path/to/cwd/utils.ts\"\n\t\t\t);\n\n\t\t\t// points to some other path\n\t\t\tconfig.resolvedPaths = {\n\t\t\t\t...mockConfig.resolvedPaths,\n\t\t\t\tutils: `${cwd}/some-other-path/shadcn-utils`,\n\t\t\t};\n\n\t\t\texpect(toPosixPath(resolveItemFilePath(config, item, item.files![0]))).toBe(\n\t\t\t\t\"/path/to/cwd/some-other-path/shadcn-utils.ts\"\n\t\t\t);\n\n\t\t\t// includes a file extension\n\t\t\tconfig.resolvedPaths.utils += \".ts\";\n\t\t\texpect(toPosixPath(resolveItemFilePath(config, item, item.files![0]))).toBe(\n\t\t\t\t\"/path/to/cwd/some-other-path/shadcn-utils.ts\"\n\t\t\t);\n\t\t});\n\t});\n});\n"
  },
  {
    "path": "packages/cli/test/utils/resolve-imports.test.ts",
    "content": "import path from \"node:path\";\nimport { beforeEach, describe, it, expect, vi } from \"vitest\";\nimport type { TsConfigResult } from \"get-tsconfig\";\nimport { toPosixPath } from \"./test-helpers.js\";\nimport { resolveImportAlias } from \"../../src/utils/resolve-imports.js\";\nimport { getDependencyPackageInfo } from \"../../src/utils/get-package-info.js\";\nimport * as project from \"../../src/utils/project.js\";\n\nvi.mock(\"../../src/utils/project.js\");\nvi.mock(\"../../src/utils/get-package-info.js\");\n\nbeforeEach(() => {\n\tvi.resetAllMocks();\n\tvi.mocked(project.getPackageInfo).mockReturnValue({\n\t\tname: \"foo\",\n\t\timports: {\n\t\t\t\"#lib/*\": \"./src/*\",\n\t\t},\n\t\tdependencies: { \"@workspace/ui\": \"workspace:*\" },\n\t\tdevDependencies: {},\n\t});\n\tvi.mocked(getDependencyPackageInfo).mockReturnValue({\n\t\tpkg: {\n\t\t\tname: \"@workspace/ui\",\n\t\t\texports: {\n\t\t\t\t\"./components/*\": \"./src/components/*\",\n\t\t\t},\n\t\t},\n\t\tpath: \"/project/node_modules/@workspace/ui/package.json\",\n\t});\n});\n\ndescribe(\"resolveImportAlias\", () => {\n\tit(\"returns first path match from tsconfig\", () => {\n\t\tconst mockTsconfig: TsConfigResult = {\n\t\t\tconfig: {\n\t\t\t\tcompilerOptions: {\n\t\t\t\t\tpaths: {\n\t\t\t\t\t\t\"@/*\": [\"./src/*\"],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tpath: path.posix.normalize(\"/project/tsconfig.json\"),\n\t\t};\n\n\t\tconst result = resolveImportAlias({\n\t\t\timportPath: \"@/components/Button\",\n\t\t\ttsconfig: mockTsconfig,\n\t\t\tcwd: \"/project\",\n\t\t});\n\t\texpect(result).toBeDefined();\n\t\texpect(toPosixPath(result!)).toBe(\"/project/src/components/Button\");\n\t});\n\n\tit(\"returns first path match from import map\", () => {\n\t\tconst mockTsconfig: TsConfigResult = {\n\t\t\tconfig: { compilerOptions: {} },\n\t\t\tpath: path.posix.normalize(\"/project/tsconfig.json\"),\n\t\t};\n\n\t\tconst result = resolveImportAlias({\n\t\t\timportPath: \"#lib/components/Button\",\n\t\t\ttsconfig: mockTsconfig,\n\t\t\tcwd: \"/project\",\n\t\t});\n\t\texpect(result).toBeDefined();\n\t\texpect(toPosixPath(result!)).toBe(\"/project/src/components/Button\");\n\t});\n\n\tit(\"returns first path match from workspace dependencies\", () => {\n\t\tconst mockTsconfig: TsConfigResult = {\n\t\t\tconfig: { compilerOptions: {} },\n\t\t\tpath: path.posix.normalize(\"/project/tsconfig.json\"),\n\t\t};\n\n\t\tconst result = resolveImportAlias({\n\t\t\timportPath: \"@workspace/ui/components/Button\",\n\t\t\ttsconfig: mockTsconfig,\n\t\t\tcwd: \"/project\",\n\t\t});\n\t\texpect(result).toBeDefined();\n\t\texpect(toPosixPath(result!)).toBe(\n\t\t\t\"/project/node_modules/@workspace/ui/src/components/Button\"\n\t\t);\n\t});\n\n\tit(\"returns undefined when the path alias being used is not defined in the tsconfig\", () => {\n\t\tconst mockTsconfig: TsConfigResult = {\n\t\t\tconfig: {\n\t\t\t\tcompilerOptions: {},\n\t\t\t},\n\t\t\tpath: path.posix.normalize(\"/project/tsconfig.json\"),\n\t\t};\n\n\t\tconst result = resolveImportAlias({\n\t\t\timportPath: \"@/components/Button\",\n\t\t\ttsconfig: mockTsconfig,\n\t\t\tcwd: \"/project\",\n\t\t});\n\t\texpect(result).toBeUndefined();\n\t});\n\n\tit(\"returns undefined when no matching path is found\", () => {\n\t\tconst mockTsconfig: TsConfigResult = {\n\t\t\tconfig: {\n\t\t\t\tcompilerOptions: {\n\t\t\t\t\tpaths: {\n\t\t\t\t\t\t\"@/*\": [\"./src/*\"],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tpath: path.posix.normalize(\"/project/tsconfig.json\"),\n\t\t};\n\n\t\tconst result = resolveImportAlias({\n\t\t\timportPath: \"unknown/path\",\n\t\t\ttsconfig: mockTsconfig,\n\t\t\tcwd: \"/project\",\n\t\t});\n\t\texpect(result).toBeUndefined();\n\t});\n});\n"
  },
  {
    "path": "packages/cli/test/utils/test-helpers.ts",
    "content": "import { fileURLToPath } from \"node:url\";\nimport { getConfig } from \"../../src/utils/config/index\";\n\nexport function toPosixPath(p: string) {\n\treturn p.replace(/^[A-Z]:/, \"\").replace(/\\\\/g, \"/\");\n}\nexport const resolvePath = (path: string) => fileURLToPath(new URL(path, import.meta.url));\n\n// gets the config from a fixture directory\nexport async function getConf(fixtureDir: string) {\n\treturn await getConfig(resolvePath(`../fixtures/${fixtureDir}`));\n}\n"
  },
  {
    "path": "packages/cli/test/utils/transformers.test.ts",
    "content": "import { describe, it, expect } from \"vitest\";\nimport {\n\ttransform,\n\ttransformIcons,\n\ttransformImports,\n\ttransformMenu,\n\ttransformStripTypes,\n} from \"../../src/utils/transformers\";\nimport { transformCss } from \"../../src/utils/transform-css\";\nimport type { ResolvedConfig } from \"../../src/utils/config/index\";\n\nconst mockConfig: ResolvedConfig = {\n\ttailwind: {\n\t\tcss: \"src/app.css\",\n\t\tbaseColor: \"zinc\",\n\t},\n\taliases: {\n\t\tutils: \"$lib/utils\",\n\t\tcomponents: \"$lib/components\",\n\t\thooks: \"$lib/hooks\",\n\t\tui: \"$lib/components/ui\",\n\t\tlib: \"$lib\",\n\t},\n\tresolvedPaths: {\n\t\tcomponents: \"./src/lib/components\",\n\t\ttailwindCss: \"./src/app.css\",\n\t\tutils: \"./src/lib/utils\",\n\t\tcwd: \"./\",\n\t\thooks: \"./src/lib/hooks\",\n\t\tui: \"./src/lib/components/ui\",\n\t\tlib: \"./src/lib\",\n\t},\n\tstyle: \"vega\",\n\ticonLibrary: \"lucide\",\n\tmenuAccent: \"subtle\",\n\tmenuColor: \"default\",\n\tsveltekit: true,\n\ttypescript: true,\n\tregistry: \"https://shadcn-svelte.com/registry\",\n};\n\nconst singleIconInput = `\n<script lang=\"ts\">\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<IconPlaceholder\n\tlucide=\"ChevronDownIcon\"\n\ttabler=\"IconChevronDown\"\n\thugeicons=\"ArrowDown01Icon\"\n\tphosphor=\"CaretDownIcon\"\n\tremixicon=\"RiArrowDownSLine\"\n\tclass=\"cn-accordion-trigger-icon size-4\"\n/>\n`.trim();\n\nconst multipleIconsInput = `\n<script lang=\"ts\">\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n</script>\n\n<div>\n\t<IconPlaceholder\n\t\tlucide=\"ChevronDownIcon\"\n\t\ttabler=\"IconChevronDown\"\n\t\thugeicons=\"ArrowDown01Icon\"\n\t\tphosphor=\"CaretDownIcon\"\n\t\tremixicon=\"RiArrowDownSLine\"\n\t\tclass=\"cn-accordion-trigger-icon group-aria-expanded:hidden\"\n\t/>\n\t<IconPlaceholder\n\t\tlucide=\"ChevronUpIcon\"\n\t\ttabler=\"IconChevronUp\"\n\t\thugeicons=\"ArrowUp01Icon\"\n\t\tphosphor=\"CaretUpIcon\"\n\t\tremixicon=\"RiArrowUpSLine\"\n\t\tclass=\"cn-accordion-trigger-icon hidden group-aria-expanded:inline\"\n\t/>\n</div>\n`.trim();\n\nconst restPropsInput = `\n<script lang=\"ts\">\n\timport IconPlaceholder from \"$lib/components/icon-placeholder/icon-placeholder.svelte\";\n\n\tlet { ...restProps } = $props();\n</script>\n\n<IconPlaceholder\n\tlucide=\"ChevronDownIcon\"\n\ttabler=\"IconChevronDown\"\n\thugeicons=\"ArrowDown01Icon\"\n\tphosphor=\"CaretDownIcon\"\n\tremixicon=\"RiArrowDownSLine\"\n\tclass=\"cn-accordion-trigger-icon\"\n\tdata-slot=\"accordion-trigger-icon\"\n\t{...restProps}\n/>\n`.trim();\n\ndescribe(\"transformIcons\", () => {\n\tconst getConfig = (iconLibrary: ResolvedConfig[\"iconLibrary\"]): ResolvedConfig => ({\n\t\t...mockConfig,\n\t\ticonLibrary,\n\t});\n\n\tit(\"lucide: correctly adds 1 icon\", async () => {\n\t\tconst result = await transformIcons({\n\t\t\tcontent: singleIconInput,\n\t\t\tfilePath: \"accordion-trigger.svelte\",\n\t\t\tconfig: getConfig(\"lucide\"),\n\t\t});\n\n\t\texpect(result.content).toBe(\n\t\t\t`\n<script lang=\"ts\">\n\timport ChevronDownIcon from '@lucide/svelte/icons/chevron-down';\n</script>\n\n<ChevronDownIcon class=\"cn-accordion-trigger-icon size-4\" />\n`.trim()\n\t\t);\n\t\texpect(result.devDependencies).toEqual([\"@lucide/svelte\"]);\n\t});\n\n\tit(\"lucide: correctly adds multiple icons\", async () => {\n\t\tconst result = await transformIcons({\n\t\t\tcontent: multipleIconsInput,\n\t\t\tfilePath: \"accordion-trigger.svelte\",\n\t\t\tconfig: getConfig(\"lucide\"),\n\t\t});\n\n\t\texpect(result.content).toBe(\n\t\t\t`\n<script lang=\"ts\">\n\timport ChevronDownIcon from '@lucide/svelte/icons/chevron-down';\n\timport ChevronUpIcon from '@lucide/svelte/icons/chevron-up';\n</script>\n\n<div>\n\t<ChevronDownIcon class=\"cn-accordion-trigger-icon group-aria-expanded:hidden\" />\n\t<ChevronUpIcon class=\"cn-accordion-trigger-icon hidden group-aria-expanded:inline\" />\n</div>\n`.trim()\n\t\t);\n\t\texpect(result.devDependencies).toEqual([\"@lucide/svelte\"]);\n\t});\n\n\tit(\"lucide: correctly adds restProps\", async () => {\n\t\tconst result = await transformIcons({\n\t\t\tcontent: restPropsInput,\n\t\t\tfilePath: \"accordion-trigger.svelte\",\n\t\t\tconfig: getConfig(\"lucide\"),\n\t\t});\n\n\t\texpect(result.content).toBe(\n\t\t\t`\n<script lang=\"ts\">\n\timport ChevronDownIcon from '@lucide/svelte/icons/chevron-down';\n\n\tlet { ...restProps } = $props();\n</script>\n\n<ChevronDownIcon class=\"cn-accordion-trigger-icon\" data-slot=\"accordion-trigger-icon\" {...restProps} />\n`.trim()\n\t\t);\n\t\texpect(result.devDependencies).toEqual([\"@lucide/svelte\"]);\n\t});\n\n\tit(\"tabler: correctly adds 1 icon\", async () => {\n\t\tconst result = await transformIcons({\n\t\t\tcontent: singleIconInput,\n\t\t\tfilePath: \"accordion-trigger.svelte\",\n\t\t\tconfig: getConfig(\"tabler\"),\n\t\t});\n\n\t\texpect(result.content).toBe(\n\t\t\t`\n<script lang=\"ts\">\n\timport { IconChevronDown } from '@tabler/icons-svelte';\n</script>\n\n<IconChevronDown class=\"cn-accordion-trigger-icon size-4\" />\n`.trim()\n\t\t);\n\t\texpect(result.devDependencies).toEqual([\"@tabler/icons-svelte\"]);\n\t});\n\n\tit(\"tabler: correctly adds multiple icons\", async () => {\n\t\tconst result = await transformIcons({\n\t\t\tcontent: multipleIconsInput,\n\t\t\tfilePath: \"accordion-trigger.svelte\",\n\t\t\tconfig: getConfig(\"tabler\"),\n\t\t});\n\n\t\texpect(result.content).toBe(\n\t\t\t`\n<script lang=\"ts\">\n\timport { IconChevronDown } from '@tabler/icons-svelte';\n\timport { IconChevronUp } from '@tabler/icons-svelte';\n</script>\n\n<div>\n\t<IconChevronDown class=\"cn-accordion-trigger-icon group-aria-expanded:hidden\" />\n\t<IconChevronUp class=\"cn-accordion-trigger-icon hidden group-aria-expanded:inline\" />\n</div>\n`.trim()\n\t\t);\n\t\texpect(result.devDependencies).toEqual([\"@tabler/icons-svelte\"]);\n\t});\n\n\tit(\"tabler: correctly adds restProps\", async () => {\n\t\tconst result = await transformIcons({\n\t\t\tcontent: restPropsInput,\n\t\t\tfilePath: \"accordion-trigger.svelte\",\n\t\t\tconfig: getConfig(\"tabler\"),\n\t\t});\n\n\t\texpect(result.content).toBe(\n\t\t\t`\n<script lang=\"ts\">\n\timport { IconChevronDown } from '@tabler/icons-svelte';\n\n\tlet { ...restProps } = $props();\n</script>\n\n<IconChevronDown class=\"cn-accordion-trigger-icon\" data-slot=\"accordion-trigger-icon\" {...restProps} />\n`.trim()\n\t\t);\n\t\texpect(result.devDependencies).toEqual([\"@tabler/icons-svelte\"]);\n\t});\n\n\tit(\"hugeicons: correctly adds 1 icon\", async () => {\n\t\tconst result = await transformIcons({\n\t\t\tcontent: singleIconInput,\n\t\t\tfilePath: \"accordion-trigger.svelte\",\n\t\t\tconfig: getConfig(\"hugeicons\"),\n\t\t});\n\n\t\texpect(result.content).toBe(\n\t\t\t`\n<script lang=\"ts\">\n\timport { HugeiconsIcon } from \"@hugeicons/svelte\"\n\timport { ArrowDown01Icon } from '@hugeicons/core-free-icons';\n</script>\n\n<HugeiconsIcon icon={ArrowDown01Icon} strokeWidth={2} class=\"cn-accordion-trigger-icon size-4\" />\n`.trim()\n\t\t);\n\t\texpect(result.devDependencies).toEqual([\"@hugeicons/svelte\", \"@hugeicons/core-free-icons\"]);\n\t});\n\n\tit(\"hugeicons: correctly adds multiple icons\", async () => {\n\t\tconst result = await transformIcons({\n\t\t\tcontent: multipleIconsInput,\n\t\t\tfilePath: \"accordion-trigger.svelte\",\n\t\t\tconfig: getConfig(\"hugeicons\"),\n\t\t});\n\n\t\texpect(result.content).toBe(\n\t\t\t`\n<script lang=\"ts\">\n\timport { HugeiconsIcon } from \"@hugeicons/svelte\"\n\timport { ArrowDown01Icon } from '@hugeicons/core-free-icons';\n\timport { ArrowUp01Icon } from '@hugeicons/core-free-icons';\n</script>\n\n<div>\n\t<HugeiconsIcon icon={ArrowDown01Icon} strokeWidth={2} class=\"cn-accordion-trigger-icon group-aria-expanded:hidden\" />\n\t<HugeiconsIcon icon={ArrowUp01Icon} strokeWidth={2} class=\"cn-accordion-trigger-icon hidden group-aria-expanded:inline\" />\n</div>\n`.trim()\n\t\t);\n\t\texpect(result.devDependencies).toEqual([\"@hugeicons/svelte\", \"@hugeicons/core-free-icons\"]);\n\t});\n\n\tit(\"hugeicons: correctly adds restProps\", async () => {\n\t\tconst result = await transformIcons({\n\t\t\tcontent: restPropsInput,\n\t\t\tfilePath: \"accordion-trigger.svelte\",\n\t\t\tconfig: getConfig(\"hugeicons\"),\n\t\t});\n\n\t\texpect(result.content).toBe(\n\t\t\t`\n<script lang=\"ts\">\n\timport { HugeiconsIcon } from \"@hugeicons/svelte\"\n\timport { ArrowDown01Icon } from '@hugeicons/core-free-icons';\n\n\tlet { ...restProps } = $props();\n</script>\n\n<HugeiconsIcon icon={ArrowDown01Icon} strokeWidth={2} class=\"cn-accordion-trigger-icon\" data-slot=\"accordion-trigger-icon\" {...restProps} />\n`.trim()\n\t\t);\n\t\texpect(result.devDependencies).toEqual([\"@hugeicons/svelte\", \"@hugeicons/core-free-icons\"]);\n\t});\n\n\tit(\"phosphor: correctly adds 1 icon\", async () => {\n\t\tconst result = await transformIcons({\n\t\t\tcontent: singleIconInput,\n\t\t\tfilePath: \"accordion-trigger.svelte\",\n\t\t\tconfig: getConfig(\"phosphor\"),\n\t\t});\n\n\t\texpect(result.content).toBe(\n\t\t\t`\n<script lang=\"ts\">\n\timport CaretDownIcon from 'phosphor-svelte/lib/CaretDown';\n</script>\n\n<CaretDownIcon class=\"cn-accordion-trigger-icon size-4\" />\n`.trim()\n\t\t);\n\t\texpect(result.devDependencies).toEqual([\"phosphor-svelte\"]);\n\t});\n\n\tit(\"phosphor: correctly adds multiple icons\", async () => {\n\t\tconst result = await transformIcons({\n\t\t\tcontent: multipleIconsInput,\n\t\t\tfilePath: \"accordion-trigger.svelte\",\n\t\t\tconfig: getConfig(\"phosphor\"),\n\t\t});\n\n\t\texpect(result.content).toBe(\n\t\t\t`\n<script lang=\"ts\">\n\timport CaretDownIcon from 'phosphor-svelte/lib/CaretDown';\n\timport CaretUpIcon from 'phosphor-svelte/lib/CaretUp';\n</script>\n\n<div>\n\t<CaretDownIcon class=\"cn-accordion-trigger-icon group-aria-expanded:hidden\" />\n\t<CaretUpIcon class=\"cn-accordion-trigger-icon hidden group-aria-expanded:inline\" />\n</div>\n`.trim()\n\t\t);\n\t\texpect(result.devDependencies).toEqual([\"phosphor-svelte\"]);\n\t});\n\n\tit(\"phosphor: correctly adds restProps\", async () => {\n\t\tconst result = await transformIcons({\n\t\t\tcontent: restPropsInput,\n\t\t\tfilePath: \"accordion-trigger.svelte\",\n\t\t\tconfig: getConfig(\"phosphor\"),\n\t\t});\n\n\t\texpect(result.content).toBe(\n\t\t\t`\n<script lang=\"ts\">\n\timport CaretDownIcon from 'phosphor-svelte/lib/CaretDown';\n\n\tlet { ...restProps } = $props();\n</script>\n\n<CaretDownIcon class=\"cn-accordion-trigger-icon\" data-slot=\"accordion-trigger-icon\" {...restProps} />\n`.trim()\n\t\t);\n\t\texpect(result.devDependencies).toEqual([\"phosphor-svelte\"]);\n\t});\n\n\tit(\"remixicon: correctly adds 1 icon\", async () => {\n\t\tconst result = await transformIcons({\n\t\t\tcontent: singleIconInput,\n\t\t\tfilePath: \"accordion-trigger.svelte\",\n\t\t\tconfig: getConfig(\"remixicon\"),\n\t\t});\n\n\t\texpect(result.content).toBe(\n\t\t\t`\n<script lang=\"ts\">\n\timport RiArrowDownSLine from 'remixicon-svelte/icons/arrow-down-s-line';\n</script>\n\n<RiArrowDownSLine class=\"cn-accordion-trigger-icon size-4\" />\n`.trim()\n\t\t);\n\t\texpect(result.devDependencies).toEqual([\"remixicon-svelte\"]);\n\t});\n\n\tit(\"remixicon: correctly adds multiple icons\", async () => {\n\t\tconst result = await transformIcons({\n\t\t\tcontent: multipleIconsInput,\n\t\t\tfilePath: \"accordion-trigger.svelte\",\n\t\t\tconfig: getConfig(\"remixicon\"),\n\t\t});\n\n\t\texpect(result.content).toBe(\n\t\t\t`\n<script lang=\"ts\">\n\timport RiArrowDownSLine from 'remixicon-svelte/icons/arrow-down-s-line';\n\timport RiArrowUpSLine from 'remixicon-svelte/icons/arrow-up-s-line';\n</script>\n\n<div>\n\t<RiArrowDownSLine class=\"cn-accordion-trigger-icon group-aria-expanded:hidden\" />\n\t<RiArrowUpSLine class=\"cn-accordion-trigger-icon hidden group-aria-expanded:inline\" />\n</div>\n`.trim()\n\t\t);\n\t\texpect(result.devDependencies).toEqual([\"remixicon-svelte\"]);\n\t});\n\n\tit(\"remixicon: correctly adds restProps\", async () => {\n\t\tconst result = await transformIcons({\n\t\t\tcontent: restPropsInput,\n\t\t\tfilePath: \"accordion-trigger.svelte\",\n\t\t\tconfig: getConfig(\"remixicon\"),\n\t\t});\n\n\t\texpect(result.content).toBe(\n\t\t\t`\n<script lang=\"ts\">\n\timport RiArrowDownSLine from 'remixicon-svelte/icons/arrow-down-s-line';\n\n\tlet { ...restProps } = $props();\n</script>\n\n<RiArrowDownSLine class=\"cn-accordion-trigger-icon\" data-slot=\"accordion-trigger-icon\" {...restProps} />\n`.trim()\n\t\t);\n\t\texpect(result.devDependencies).toEqual([\"remixicon-svelte\"]);\n\t});\n});\n\ndescribe(\"transformMenu\", () => {\n\tdescribe(\"menuColor is inverted\", () => {\n\t\tit(\"replaces cn-menu-target with dark in string literal\", async () => {\n\t\t\tconst content = `\n<script lang=\"ts\">\n\tlet { class: className } = $props();\n</script>\n\n<div class=\"cn-menu-target p-4\">Content</div>\n`.trim();\n\t\t\tconst result = await transformMenu({\n\t\t\t\tcontent,\n\t\t\t\tfilePath: \"test.svelte\",\n\t\t\t\tconfig: { ...mockConfig, menuColor: \"inverted\" },\n\t\t\t});\n\t\t\texpect(result.content).toContain('class=\"dark p-4\"');\n\t\t});\n\n\t\tit(\"replaces cn-menu-target with dark in cn() call\", async () => {\n\t\t\tconst content = `\n<script lang=\"ts\">\n\timport { cn } from \"$lib/utils.js\";\n\tlet { class: className } = $props();\n</script>\n\n<div class={cn(\"cn-menu-target\", \"p-4\")}>Content</div>\n`.trim();\n\t\t\tconst result = await transformMenu({\n\t\t\t\tcontent,\n\t\t\t\tfilePath: \"test.svelte\",\n\t\t\t\tconfig: { ...mockConfig, menuColor: \"inverted\" },\n\t\t\t});\n\t\t\texpect(result.content).toContain('cn(\"dark\", \"p-4\")');\n\t\t});\n\t});\n\n\tdescribe(\"menuColor is default or not set\", () => {\n\t\tit(\"removes cn-menu-target from string literal\", async () => {\n\t\t\tconst content = `\n<script lang=\"ts\">\n\tlet { class: className } = $props();\n</script>\n\n<div class=\"cn-menu-target p-4\">Content</div>\n`.trim();\n\t\t\tconst result = await transformMenu({\n\t\t\t\tcontent,\n\t\t\t\tfilePath: \"test.svelte\",\n\t\t\t\tconfig: { ...mockConfig, menuColor: \"default\" },\n\t\t\t});\n\t\t\texpect(result.content).toContain('class=\"p-4\"');\n\t\t});\n\n\t\tit(\"removes cn-menu-target when menuColor is not set\", async () => {\n\t\t\tconst content = `\n<script lang=\"ts\">\n\tlet { class: className } = $props();\n</script>\n\n<div class=\"cn-menu-target p-4\">Content</div>\n`.trim();\n\t\t\tconst result = await transformMenu({\n\t\t\t\tcontent,\n\t\t\t\tfilePath: \"test.svelte\",\n\t\t\t\tconfig: mockConfig,\n\t\t\t});\n\t\t\texpect(result.content).toContain('class=\"p-4\"');\n\t\t});\n\n\t\tit(\"removes cn-menu-target from cn() call and cleans up empty string\", async () => {\n\t\t\tconst content = `\n<script lang=\"ts\">\n\timport { cn } from \"$lib/utils.js\";\n\tlet { class: className } = $props();\n</script>\n\n<div class={cn(\"cn-menu-target\", \"p-4\")}>Content</div>\n`.trim();\n\t\t\tconst result = await transformMenu({\n\t\t\t\tcontent,\n\t\t\t\tfilePath: \"test.svelte\",\n\t\t\t\tconfig: { ...mockConfig, menuColor: \"default\" },\n\t\t\t});\n\t\t\texpect(result.content).toContain('cn(\"p-4\")');\n\t\t});\n\n\t\tit(\"cleans up cn-menu-target at the end of cn() call\", async () => {\n\t\t\tconst content = `\n<script lang=\"ts\">\n\timport { cn } from \"$lib/utils.js\";\n\tlet { class: className } = $props();\n</script>\n\n<div class={cn(\"p-4\", \"cn-menu-target\")}>Content</div>\n`.trim();\n\t\t\tconst result = await transformMenu({\n\t\t\t\tcontent,\n\t\t\t\tfilePath: \"test.svelte\",\n\t\t\t\tconfig: { ...mockConfig, menuColor: \"default\" },\n\t\t\t});\n\t\t\texpect(result.content).toContain('cn(\"p-4\")');\n\t\t});\n\t});\n\n\tit(\"does not modify class without cn-menu-target or cn-menu-translucent\", async () => {\n\t\tconst content = `\n<script lang=\"ts\">\n\tlet { class: className } = $props();\n</script>\n\n<div class=\"p-4 mt-2\">Content</div>\n`.trim();\n\t\tconst result = await transformMenu({\n\t\t\tcontent,\n\t\t\tfilePath: \"test.svelte\",\n\t\t\tconfig: { ...mockConfig, menuColor: \"inverted\" },\n\t\t});\n\t\texpect(result.content).toBe(content);\n\t});\n\n\tdescribe(\"menuColor is default-translucent\", () => {\n\t\tit(\"inlines cn-menu-translucent styles\", async () => {\n\t\t\tconst content = `\n<script lang=\"ts\">\n\tlet { class: className } = $props();\n</script>\n\n<div class=\"cn-menu-target cn-menu-translucent p-4\">Content</div>\n`.trim();\n\t\t\tconst result = await transformMenu({\n\t\t\t\tcontent,\n\t\t\t\tfilePath: \"test.svelte\",\n\t\t\t\tconfig: { ...mockConfig, menuColor: \"default-translucent\" },\n\t\t\t});\n\t\t\texpect(result.content).toContain(\"animate-none!\");\n\t\t\texpect(result.content).toContain(\"bg-popover/70\");\n\t\t\texpect(result.content).not.toContain(\"cn-menu-translucent\");\n\t\t\texpect(result.content).not.toContain(\"cn-menu-target\");\n\t\t});\n\t});\n\n\tdescribe(\"menuColor is inverted-translucent\", () => {\n\t\tit(\"replaces cn-menu-target with dark and inlines cn-menu-translucent\", async () => {\n\t\t\tconst content = `\n<script lang=\"ts\">\n\tlet { class: className } = $props();\n</script>\n\n<div class=\"cn-menu-target cn-menu-translucent p-4\">Content</div>\n`.trim();\n\t\t\tconst result = await transformMenu({\n\t\t\t\tcontent,\n\t\t\t\tfilePath: \"test.svelte\",\n\t\t\t\tconfig: { ...mockConfig, menuColor: \"inverted-translucent\" },\n\t\t\t});\n\t\t\texpect(result.content).toContain(\"dark\");\n\t\t\texpect(result.content).toContain(\"animate-none!\");\n\t\t\texpect(result.content).not.toContain(\"cn-menu-translucent\");\n\t\t\texpect(result.content).not.toContain(\"cn-menu-target\");\n\t\t});\n\t});\n\n\tdescribe(\"menuColor is inverted removes cn-menu-translucent\", () => {\n\t\tit(\"replaces cn-menu-target with dark and removes cn-menu-translucent\", async () => {\n\t\t\tconst content = `\n<script lang=\"ts\">\n\tlet { class: className } = $props();\n</script>\n\n<div class=\"cn-menu-target cn-menu-translucent p-4\">Content</div>\n`.trim();\n\t\t\tconst result = await transformMenu({\n\t\t\t\tcontent,\n\t\t\t\tfilePath: \"test.svelte\",\n\t\t\t\tconfig: { ...mockConfig, menuColor: \"inverted\" },\n\t\t\t});\n\t\t\texpect(result.content).toContain('class=\"dark p-4\"');\n\t\t});\n\t});\n\n\tdescribe(\"menuColor is default removes cn-menu-translucent\", () => {\n\t\tit(\"removes both cn-menu-target and cn-menu-translucent\", async () => {\n\t\t\tconst content = `\n<script lang=\"ts\">\n\tlet { class: className } = $props();\n</script>\n\n<div class=\"cn-menu-target cn-menu-translucent p-4\">Content</div>\n`.trim();\n\t\t\tconst result = await transformMenu({\n\t\t\t\tcontent,\n\t\t\t\tfilePath: \"test.svelte\",\n\t\t\t\tconfig: { ...mockConfig, menuColor: \"default\" },\n\t\t\t});\n\t\t\texpect(result.content).toContain('class=\"p-4\"');\n\t\t});\n\t});\n});\n\ndescribe(\"transformImports\", () => {\n\tit(\"transforms component imports correctly\", async () => {\n\t\tconst content = 'import { Button } from \"$COMPONENTS$/button\";';\n\t\tconst expected = 'import { Button } from \"$lib/components/button\";';\n\t\tconst result = await transformImports({ content, filePath: \"test.ts\", config: mockConfig });\n\t\texpect(result.content).toBe(expected);\n\t});\n\n\tit(\"transforms UI imports correctly\", async () => {\n\t\tconst content = 'import { Button } from \"$UI$/button\";';\n\t\tconst expected = 'import { Button } from \"$lib/components/ui/button\";';\n\t\tconst result = await transformImports({ content, filePath: \"test.ts\", config: mockConfig });\n\t\texpect(result.content).toBe(expected);\n\t});\n\n\tit(\"transforms hook imports correctly\", async () => {\n\t\tconst content = 'import { IsMobile } from \"$HOOKS$/is-mobile.svelte.js\";';\n\t\tconst expected = 'import { IsMobile } from \"$lib/hooks/is-mobile.svelte.js\";';\n\t\tconst result = await transformImports({ content, filePath: \"test.ts\", config: mockConfig });\n\t\texpect(result.content).toBe(expected);\n\t});\n\n\tit(\"transforms utils imports correctly\", async () => {\n\t\tconst content = 'import { cn } from \"$UTILS$/index.js\";';\n\t\tconst expected = 'import { cn } from \"$lib/utils/index.js\";';\n\t\tconst result = await transformImports({ content, filePath: \"test.ts\", config: mockConfig });\n\t\texpect(result.content).toBe(expected);\n\t});\n\n\tit(\"handles multiple imports in the same file\", async () => {\n\t\tconst content = `\n      import { Button } from \"$COMPONENTS$/button\";\n      import { IsMobile } from \"$HOOKS$/is-mobile.svelte.js\";\n      import { cn } from \"$UTILS$\";\n    `;\n\t\tconst expected = `\n      import { Button } from \"$lib/components/button\";\n      import { IsMobile } from \"$lib/hooks/is-mobile.svelte.js\";\n      import { cn } from \"$lib/utils\";\n    `;\n\t\tconst result = await transformImports({ content, filePath: \"test.ts\", config: mockConfig });\n\t\texpect(result.content).toBe(expected);\n\t});\n});\n\ndescribe(\"transformStripTypes\", () => {\n\tit(\"strips types from TypeScript files\", async () => {\n\t\tconst content = `\n      interface Props {\n        name: string;\n      }\n      export function Component({ name }: Props) {\n        return name;\n      }\n    `;\n\t\tconst result = await transformStripTypes({\n\t\t\tcontent,\n\t\t\tfilePath: \"test.ts\",\n\t\t\tconfig: mockConfig,\n\t\t});\n\t\texpect(result.content).not.toContain(\"interface Props\");\n\t\texpect(result.content).not.toContain(\": Props\");\n\t});\n\n\tit(\"strips types from Svelte files\", async () => {\n\t\tconst content = `\n      <script lang=\"ts\">\n        interface Props {\n          name: string;\n        }\n        export let name: string;\n      </script>\n      <div>{name}</div>\n    `;\n\t\tconst result = await transformStripTypes({\n\t\t\tcontent,\n\t\t\tfilePath: \"test.svelte\",\n\t\t\tconfig: mockConfig,\n\t\t});\n\t\texpect(result.content).not.toContain(\"interface Props\");\n\t\texpect(result.content).not.toContain(\": string\");\n\t});\n\n\tit(\"removes consecutive newlines\", async () => {\n\t\tconst content = `\n      interface Props {\n        name: string;\n      }\n\n\n      export function Component({ name }: Props) {\n        return name;\n      }\n    `;\n\t\tconst result = await transformStripTypes({\n\t\t\tcontent,\n\t\t\tfilePath: \"test.ts\",\n\t\t\tconfig: mockConfig,\n\t\t});\n\t\texpect(result.content).not.toMatch(/\\n\\s*\\n\\s*\\n/);\n\t});\n});\n\ndescribe(\"transform\", () => {\n\tit(\"transforms content with TypeScript enabled\", async () => {\n\t\tconst content = `\n      import { Button } from \"$COMPONENTS$/button\";\n      interface Props {\n        name: string;\n      }\n      export function Component({ name }: Props) {\n        return name;\n      }\n    `;\n\t\tconst result = await transform({ content, filePath: \"test.ts\", config: mockConfig }, [\n\t\t\ttransformImports,\n\t\t]);\n\t\texpect(result.content).toContain('import { Button } from \"$lib/components/button\"');\n\t\texpect(result.content).toContain(\"interface Props\");\n\t});\n\n\tit(\"transforms content with TypeScript disabled\", async () => {\n\t\tconst content = `\n      import { Button } from \"$COMPONENTS$/button\";\n      interface Props {\n        name: string;\n      }\n      export function Component({ name }: Props) {\n        return name;\n      }\n    `;\n\t\tconst config = { ...mockConfig, typescript: false };\n\t\tconst result = await transform({ content, filePath: \"test.ts\", config }, [\n\t\t\ttransformImports,\n\t\t\ttransformStripTypes,\n\t\t]);\n\t\texpect(result.content).not.toContain(\"interface Props\");\n\t\texpect(result.content).not.toContain(\": Props\");\n\t\texpect(result.content).toContain(\"export function Component({ name })\");\n\t});\n});\n\ndescribe(\"transformImports with more custom paths\", () => {\n\tconst customConfig: ResolvedConfig = {\n\t\ttailwind: {\n\t\t\tcss: \"styles/global.css\",\n\t\t\tbaseColor: \"slate\",\n\t\t},\n\t\taliases: {\n\t\t\tutils: \"@lib/helpers\",\n\t\t\tcomponents: \"@components\",\n\t\t\thooks: \"@hooks\",\n\t\t\tui: \"@ui\",\n\t\t\tlib: \"@lib\",\n\t\t},\n\t\tresolvedPaths: {\n\t\t\tcomponents: \"./src/components\",\n\t\t\ttailwindCss: \"./styles/global.css\",\n\t\t\tutils: \"./src/helpers\",\n\t\t\tcwd: \"./\",\n\t\t\thooks: \"./src/hooks\",\n\t\t\tui: \"./src/ui\",\n\t\t\tlib: \"./src/lib\",\n\t\t},\n\t\tstyle: \"vega\",\n\t\ticonLibrary: \"lucide\",\n\t\tmenuAccent: \"subtle\",\n\t\tmenuColor: \"default\",\n\t\tsveltekit: true,\n\t\ttypescript: true,\n\t\tregistry: \"https://shadcn-svelte.com/registry\",\n\t};\n\n\tit(\"transforms component imports with custom paths\", async () => {\n\t\tconst content = 'import { Button } from \"$COMPONENTS$/button\";';\n\t\tconst expected = 'import { Button } from \"@components/button\";';\n\t\tconst result = await transformImports({\n\t\t\tcontent,\n\t\t\tfilePath: \"test.ts\",\n\t\t\tconfig: customConfig,\n\t\t});\n\t\texpect(result.content).toBe(expected);\n\t});\n\n\tit(\"transforms UI imports with custom paths\", async () => {\n\t\tconst content = 'import { Button } from \"$UI$/button\";';\n\t\tconst expected = 'import { Button } from \"@ui/button\";';\n\t\tconst result = await transformImports({\n\t\t\tcontent,\n\t\t\tfilePath: \"test.ts\",\n\t\t\tconfig: customConfig,\n\t\t});\n\t\texpect(result.content).toBe(expected);\n\t});\n\n\tit(\"transforms hook imports with custom paths\", async () => {\n\t\tconst content = 'import { IsMobile } from \"$HOOKS$/is-mobile.svelte.js\";';\n\t\tconst expected = 'import { IsMobile } from \"@hooks/is-mobile.svelte.js\";';\n\t\tconst result = await transformImports({\n\t\t\tcontent,\n\t\t\tfilePath: \"test.ts\",\n\t\t\tconfig: customConfig,\n\t\t});\n\t\texpect(result.content).toBe(expected);\n\t});\n\n\tit(\"transforms utils imports with custom paths\", async () => {\n\t\tconst content = 'import { cn } from \"$UTILS$/index.js\";';\n\t\tconst expected = 'import { cn } from \"@lib/helpers/index.js\";';\n\t\tconst result = await transformImports({\n\t\t\tcontent,\n\t\t\tfilePath: \"test.ts\",\n\t\t\tconfig: customConfig,\n\t\t});\n\t\texpect(result.content).toBe(expected);\n\t});\n\n\tit(\"handles multiple imports with custom paths\", async () => {\n\t\tconst content = `\n      import { Button } from \"$COMPONENTS$/button\";\n      import { IsMobile } from \"$HOOKS$/is-mobile.svelte.js\";\n      import { cn } from \"$UTILS$\";\n    `;\n\t\tconst expected = `\n      import { Button } from \"@components/button\";\n      import { IsMobile } from \"@hooks/is-mobile.svelte.js\";\n      import { cn } from \"@lib/helpers\";\n    `;\n\t\tconst result = await transformImports({\n\t\t\tcontent,\n\t\t\tfilePath: \"test.ts\",\n\t\t\tconfig: customConfig,\n\t\t});\n\t\texpect(result.content).toBe(expected);\n\t});\n});\n\ndescribe(\"updateCssVars\", () => {\n\tit(\"should return unchanged CSS when no vars are provided\", () => {\n\t\tconst source = \":root { --test: value; }\";\n\t\tconst result = transformCss(source, {});\n\t\texpect(result).toMatchInlineSnapshot(`\":root { --test: value; }\"`);\n\t});\n\n\tit(\"should update existing light theme variables\", () => {\n\t\tconst source = `\n:root {\n\t--primary: old;\n\t--secondary: old;\n\t--unrelated: value;\n}\n`.trim();\n\t\tconst cssVars = {\n\t\t\tlight: {\n\t\t\t\tprimary: \"new\",\n\t\t\t\tsecondary: \"new\",\n\t\t\t},\n\t\t};\n\t\tconst result = transformCss(source, { cssVars });\n\t\texpect(result).toMatchInlineSnapshot(`\n\t\t\t\":root {\n\t\t\t\t--primary: new;\n\t\t\t\t--secondary: new;\n\t\t\t\t--unrelated: value;\n\t\t\t}\"\n\t\t`);\n\t});\n\n\tit(\"should update existing dark theme variables\", () => {\n\t\tconst source = `\n.dark {\n\t--primary: old;\n\t--secondary: old;\n\t--unrelated: value;\n}\n`.trim();\n\t\tconst cssVars = {\n\t\t\tdark: {\n\t\t\t\tprimary: \"new\",\n\t\t\t\tsecondary: \"new\",\n\t\t\t},\n\t\t};\n\t\tconst result = transformCss(source, { cssVars });\n\t\texpect(result).toMatchInlineSnapshot(`\n\t\t\t\".dark {\n\t\t\t\t--primary: new;\n\t\t\t\t--secondary: new;\n\t\t\t\t--unrelated: value;\n\t\t\t}\"\n\t\t`);\n\t});\n\n\tit(\"should update existing theme variables\", () => {\n\t\tconst source = `\n@theme {\n\t--primary: old;\n\t--secondary: old;\n\t--unrelated: value;\n}\n`.trim();\n\t\tconst cssVars = {\n\t\t\ttheme: {\n\t\t\t\tprimary: \"new\",\n\t\t\t\tsecondary: \"new\",\n\t\t\t},\n\t\t};\n\t\tconst result = transformCss(source, { cssVars });\n\t\texpect(result).toMatchInlineSnapshot(`\n\t\t\t\"@theme {\n\t\t\t\t--primary: new;\n\t\t\t\t--secondary: new;\n\t\t\t\t--unrelated: value;\n\t\t\t}\"\n\t\t`);\n\t});\n\n\tit(\"should add new variables that don't exist\", () => {\n\t\tconst source = `\n:root {\n\t--existing: value;\n\t--unrelated: value;\n}\n`.trim();\n\t\tconst cssVars = {\n\t\t\tlight: {\n\t\t\t\texisting: \"new\",\n\t\t\t\tnewVar: \"value\",\n\t\t\t},\n\t\t};\n\t\tconst result = transformCss(source, { cssVars });\n\t\texpect(result).toMatchInlineSnapshot(`\n\t\t\t\":root {\n\t\t\t\t--existing: new;\n\t\t\t\t--unrelated: value;\n\t\t\t\t--newVar: value;\n\t\t\t}\"\n\t\t`);\n\t});\n\n\tit(\"should track skipped selectors\", () => {\n\t\tconst source = `\n:root {\n\t--test: value;\n}\n`.trim();\n\t\tconst cssVars = {\n\t\t\tdark: {\n\t\t\t\ttest: \"value\",\n\t\t\t},\n\t\t};\n\t\tconst result = transformCss(source, { cssVars });\n\t\texpect(result).toMatchInlineSnapshot(`\n\t\t\t\":root {\n\t\t\t\t--test: value;\n\t\t\t}\"\n\t\t`);\n\t});\n\n\tit(\"should handle missing selectors gracefully\", () => {\n\t\tconst source = `\n.some-other-class {\n\t--test: value;\n}\n`.trim();\n\t\tconst cssVars = {\n\t\t\tlight: { primary: \"new\" },\n\t\t\tdark: { secondary: \"new\" },\n\t\t\ttheme: { tertiary: \"new\" },\n\t\t};\n\t\tconst result = transformCss(source, { cssVars });\n\t\texpect(result).toMatchInlineSnapshot(`\n\t\t\t\".some-other-class {\n\t\t\t\t--test: value;\n\t\t\t}\"\n\t\t`);\n\t});\n\n\tit(\"should handle multiple theme updates simultaneously\", () => {\n\t\tconst source = `\n:root {\n\t--primary: old;\n\t--unrelated: value;\n}\n.dark {\n\t--secondary: old;\n\t--unrelated: value;\n}\n@theme {\n\t--tertiary: old;\n\t--unrelated: value;\n}\n`.trim();\n\t\tconst cssVars = {\n\t\t\tlight: { primary: \"new\" },\n\t\t\tdark: { secondary: \"new\" },\n\t\t\ttheme: { tertiary: \"new\" },\n\t\t};\n\t\tconst result = transformCss(source, { cssVars });\n\t\texpect(result).toMatchInlineSnapshot(`\n\t\t\t\":root {\n\t\t\t\t--primary: new;\n\t\t\t\t--unrelated: value;\n\t\t\t}\n\n\t\t\t@custom-variant dark (&:is(.dark *));\n\t\t\t.dark {\n\t\t\t\t--secondary: new;\n\t\t\t\t--unrelated: value;\n\t\t\t}\n\t\t\t@theme {\n\t\t\t\t--tertiary: new;\n\t\t\t\t--unrelated: value;\n\t\t\t\t--secondary: var(--secondary);\n\t\t\t\t--primary: var(--primary);\n\t\t\t}\"\n\t\t`);\n\t});\n\n\tit(\"should add plugins that don't exist\", () => {\n\t\tconst source = `\n:root {\n\t--primary: old;\n}\n`.trim();\n\t\tconst result = transformCss(source, { plugins: [\"my-plugin\"] });\n\t\texpect(result).toMatchInlineSnapshot(`\n\t\t\t\"@plugin \"my-plugin\";\n\t\t\t:root {\n\t\t\t\t--primary: old;\n\t\t\t}\"\n\t\t`);\n\t});\n\n\tit(\"should add multiple plugins\", () => {\n\t\tconst source = `\n@plugin \"unrelated-plugin\";\n:root {\n\t--primary: old;\n}\n`.trim();\n\t\tconst result = transformCss(source, { plugins: [\"plugin1\", \"plugin2\"] });\n\t\texpect(result).toMatchInlineSnapshot(`\n\t\t\t\"@plugin \"unrelated-plugin\";\n\t\t\t@plugin \"plugin2\";\n\t\t\t@plugin \"plugin1\";\n\t\t\t:root {\n\t\t\t\t--primary: old;\n\t\t\t}\"\n\t\t`);\n\t});\n\n\tit(\"should not add/duplicate plugins that already exist\", () => {\n\t\tconst source = `\n@plugin \"plugin1\";\n:root {\n\t--primary: old;\n}\n`.trim();\n\t\tconst result = transformCss(source, { plugins: [\"plugin1\"] });\n\t\texpect(result).toMatchInlineSnapshot(`\n\t\t\t\"@plugin \"plugin1\";\n\t\t\t:root {\n\t\t\t\t--primary: old;\n\t\t\t}\"\n\t\t`);\n\t});\n\n\tit(\"should add plugins after imports if imports exist and no other plugins exist\", () => {\n\t\tconst source = `\n@import \"tailwindcss\";\n:root {\n\t--primary: old;\n}\n`.trim();\n\t\tconst result = transformCss(source, { plugins: [\"plugin2\"] });\n\t\texpect(result).toMatchInlineSnapshot(`\n\t\t\t\"@import \"tailwindcss\";\n\t\t\t@plugin \"plugin2\";\n\t\t\t:root {\n\t\t\t\t--primary: old;\n\t\t\t}\"\n\t\t`);\n\t});\n\n\tit(\"should add plugins after other plugins if other plugins exist\", () => {\n\t\tconst source = `\n@plugin \"plugin1\";\n@plugin \"plugin2\";\n:root {\n\t--primary: old;\n}\n`.trim();\n\t\tconst result = transformCss(source, { plugins: [\"plugin3\"] });\n\t\texpect(result).toMatchInlineSnapshot(`\n\t\t\t\"@plugin \"plugin1\";\n\t\t\t@plugin \"plugin2\";\n\t\t\t@plugin \"plugin3\";\n\t\t\t:root {\n\t\t\t\t--primary: old;\n\t\t\t}\"\n\t\t`);\n\t});\n});\n\ndescribe(\"updateCss\", () => {\n\tit(\"should add utility classes\", async () => {\n\t\tconst input = `@import \"tailwindcss\";`;\n\n\t\tconst result = transformCss(input, {\n\t\t\tcss: {\n\t\t\t\t\"@utility content-auto\": {\n\t\t\t\t\t\"content-visibility\": \"auto\",\n\t\t\t\t},\n\t\t\t},\n\t\t});\n\n\t\texpect(result).toMatchInlineSnapshot(`\n\t\t\t\"@import \"tailwindcss\";\n\n\t\t\t@utility content-auto {\n\t\t\t\tcontent-visibility: auto;\n\t\t\t}\"\n\t\t`);\n\t});\n\n\tit(\"should add utility classes with pseudo-selectors\", async () => {\n\t\tconst input = `@import \"tailwindcss\";`;\n\n\t\tconst result = transformCss(input, {\n\t\t\tcss: {\n\t\t\t\t\"@utility scrollbar-hidden\": {\n\t\t\t\t\t\"&::-webkit-scrollbar\": {\n\t\t\t\t\t\tdisplay: \"none\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t});\n\n\t\texpect(result).toMatchInlineSnapshot(`\n\t\t\t\"@import \"tailwindcss\";\n\n\t\t\t@utility scrollbar-hidden {\n\t\t\t\t&::-webkit-scrollbar {\n\t\t\t\t\tdisplay: none;\n\t\t\t\t}\n\t\t\t}\"\n\t\t`);\n\t});\n\n\tit(\"should add parameterized utility classes\", async () => {\n\t\tconst input = `@import \"tailwindcss\";`;\n\n\t\tconst result = transformCss(input, {\n\t\t\tcss: {\n\t\t\t\t\"@utility tab-*\": {\n\t\t\t\t\t\"tab-size\": \"--value([integer])\",\n\t\t\t\t},\n\t\t\t},\n\t\t});\n\n\t\texpect(result).toMatchInlineSnapshot(`\n\t\t\t\"@import \"tailwindcss\";\n\n\t\t\t@utility tab-* {\n\t\t\t\ttab-size: --value([integer]);\n\t\t\t}\"\n\t\t`);\n\t});\n\n\tit(\"should add component styles\", async () => {\n\t\tconst input = `\n@tailwind base;\n@tailwind components;\n@tailwind utilities;\n`.trim();\n\n\t\tconst result = transformCss(input, {\n\t\t\tcss: {\n\t\t\t\t\"@layer components\": {\n\t\t\t\t\t\".card\": {\n\t\t\t\t\t\t\"background-color\": \"var(--color-white)\",\n\t\t\t\t\t\t\"border-radius\": \"var(--rounded-lg)\",\n\t\t\t\t\t\tpadding: \"var(--spacing-6)\",\n\t\t\t\t\t\t\"box-shadow\": \"var(--shadow-xl)\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t});\n\n\t\texpect(result).toMatchInlineSnapshot(`\n\t\t\t\"@tailwind base;\n\t\t\t@tailwind components;\n\t\t\t@tailwind utilities;\n\n\t\t\t@layer components {\n\t\t\t\t.card {\n\t\t\t\t\tbackground-color: var(--color-white);\n\t\t\t\t\tborder-radius: var(--rounded-lg);\n\t\t\t\t\tpadding: var(--spacing-6);\n\t\t\t\t\tbox-shadow: var(--shadow-xl);\n\t\t\t\t}\n\t\t\t}\"\n\t\t`);\n\t});\n\n\tit(\"should add base styles\", async () => {\n\t\tconst input = `\n@tailwind base;\n@tailwind components;\n@tailwind utilities;\n`.trim();\n\n\t\tconst result = transformCss(input, {\n\t\t\tcss: {\n\t\t\t\t\"@layer base\": {\n\t\t\t\t\th1: {\n\t\t\t\t\t\t\"font-size\": \"var(--text-2xl)\",\n\t\t\t\t\t},\n\t\t\t\t\th2: {\n\t\t\t\t\t\t\"font-size\": \"var(--text-xl)\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t});\n\n\t\texpect(result).toMatchInlineSnapshot(`\n\t\t\t\"@tailwind base;\n\t\t\t@tailwind components;\n\t\t\t@tailwind utilities;\n\n\t\t\t@layer base {\n\t\t\t\th1 {\n\t\t\t\t\tfont-size: var(--text-2xl);\n\t\t\t\t}\n\t\t\t\th2 {\n\t\t\t\t\tfont-size: var(--text-xl);\n\t\t\t\t}\n\t\t\t}\"\n    \t`);\n\t});\n\n\tit(\"should update existing rules\", async () => {\n\t\tconst input = `\n@import \"tailwindcss\";\n\n@layer components {\n\t.card {\n\t\tbackground-color: white;\n\t\tpadding: 1rem;\n\t}\n}\n`.trim();\n\n\t\tconst result = transformCss(input, {\n\t\t\tcss: {\n\t\t\t\t\"@layer components\": {\n\t\t\t\t\t\".card\": {\n\t\t\t\t\t\t\"background-color\": \"var(--color-white)\",\n\t\t\t\t\t\t\"border-radius\": \"var(--rounded-lg)\",\n\t\t\t\t\t\t\"box-shadow\": \"var(--shadow-xl)\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t});\n\n\t\texpect(result).toMatchInlineSnapshot(`\n\t\t\t\"@import \"tailwindcss\";\n\n\t\t\t@layer components {\n\t\t\t\t.card {\n\t\t\t\t\tbackground-color: var(--color-white);\n\t\t\t\t\tpadding: 1rem;\n\t\t\t\t\tborder-radius: var(--rounded-lg);\n\t\t\t\t\tbox-shadow: var(--shadow-xl);\n\t\t\t\t}\n\t\t\t}\"\n\t\t`);\n\t});\n\n\tit(\"should add multiple rules and types\", async () => {\n\t\tconst input = `\n@tailwind base;\n@tailwind components;\n@tailwind utilities;\n`.trim();\n\n\t\tconst result = transformCss(input, {\n\t\t\tcss: {\n\t\t\t\t\"@utility content-auto\": {\n\t\t\t\t\t\"content-visibility\": \"auto\",\n\t\t\t\t},\n\t\t\t\t\"@layer components\": {\n\t\t\t\t\t\".card\": {\n\t\t\t\t\t\t\"background-color\": \"var(--color-white)\",\n\t\t\t\t\t\t\"border-radius\": \"var(--rounded-lg)\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\"@layer base\": {\n\t\t\t\t\th1: {\n\t\t\t\t\t\t\"font-size\": \"var(--text-2xl)\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t});\n\n\t\texpect(result).toMatchInlineSnapshot(`\n\t\t\t\"@tailwind base;\n\t\t\t@tailwind components;\n\t\t\t@tailwind utilities;\n\n\t\t\t@utility content-auto {\n\t\t\t\tcontent-visibility: auto;\n\t\t\t}\n\n\t\t\t@layer components {\n\t\t\t\t.card {\n\t\t\t\t\tbackground-color: var(--color-white);\n\t\t\t\t\tborder-radius: var(--rounded-lg);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t@layer base {\n\t\t\t\th1 {\n\t\t\t\t\tfont-size: var(--text-2xl);\n\t\t\t\t}\n\t\t\t}\"\n\t\t`);\n\t});\n\n\tit(\"should handle nested selectors with &\", async () => {\n\t\tconst input = `\n@tailwind base;\n@tailwind components;\n@tailwind utilities;\n`.trim();\n\n\t\tconst result = transformCss(input, {\n\t\t\tcss: {\n\t\t\t\t\"@layer components\": {\n\t\t\t\t\t\".button\": {\n\t\t\t\t\t\t\"background-color\": \"var(--color-primary)\",\n\t\t\t\t\t\t\"&:hover\": {\n\t\t\t\t\t\t\t\"background-color\": \"var(--color-primary-dark)\",\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\"&:active\": {\n\t\t\t\t\t\t\t\"background-color\": \"var(--color-primary-darker)\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t});\n\n\t\texpect(result).toMatchInlineSnapshot(`\n\t\t\t\"@tailwind base;\n\t\t\t@tailwind components;\n\t\t\t@tailwind utilities;\n\n\t\t\t@layer components {\n\t\t\t\t.button {\n\t\t\t\t\tbackground-color: var(--color-primary);\n\t\t\t\t}\n\t\t\t\t.button:hover {\n\t\t\t\t\tbackground-color: var(--color-primary-dark);\n\t\t\t\t}\n\t\t\t\t.button:active {\n\t\t\t\t\tbackground-color: var(--color-primary-darker);\n\t\t\t\t}\n\t\t\t}\"\n\t\t`);\n\t});\n\n\tit(\"should handle direct string content\", async () => {\n\t\tconst input = `\n@tailwind base;\n@tailwind components;\n@tailwind utilities;\n`.trim();\n\n\t\tconst result = transformCss(input, {\n\t\t\tcss: {\n\t\t\t\t\"@layer base\": {\n\t\t\t\t\tbody: \"font-family: var(--font-sans); line-height: 1.5;\",\n\t\t\t\t},\n\t\t\t},\n\t\t});\n\n\t\texpect(result).toMatchInlineSnapshot(`\n\t\t\t\"@tailwind base;\n\t\t\t@tailwind components;\n\t\t\t@tailwind utilities;\n\n\t\t\t@layer base {\n\t\t\t\tbody {\n\t\t\t\t\tfont-family: var(--font-sans);\n\t\t\t\t\tline-height: 1.5;\n\t\t\t\t}\n\t\t\t}\"\n\t\t`);\n\t});\n\n\tit(\"should handle nested at-rules\", async () => {\n\t\tconst input = `\n@tailwind base;\n@tailwind components;\n@tailwind utilities;\n`.trim();\n\n\t\tconst result = transformCss(input, {\n\t\t\tcss: {\n\t\t\t\t\"@layer components\": {\n\t\t\t\t\t\"@media (min-width: 768px)\": {\n\t\t\t\t\t\t\".card\": {\n\t\t\t\t\t\t\tpadding: \"2rem\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t});\n\n\t\texpect(result).toMatchInlineSnapshot(`\n\t\t\t\"@tailwind base;\n\t\t\t@tailwind components;\n\t\t\t@tailwind utilities;\n\n\t\t\t@layer components {\n\n\t\t\t\t@media (min-width: 768px) {\n\t\t\t\t\t.card {\n\t\t\t\t\t\tpadding: 2rem;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\"\n\t\t`);\n\t});\n\n\tit(\"should place keyframes under @theme inline directive\", async () => {\n\t\tconst input = `@import \"tailwindcss\";`;\n\n\t\tconst result = transformCss(input, {\n\t\t\tcss: {\n\t\t\t\t\"@keyframes spin\": {\n\t\t\t\t\t\"0%\": {\n\t\t\t\t\t\ttransform: \"rotate(0deg)\",\n\t\t\t\t\t},\n\t\t\t\t\t\"100%\": {\n\t\t\t\t\t\ttransform: \"rotate(360deg)\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t});\n\n\t\texpect(result).toMatchInlineSnapshot(`\n\t\t\t\"@import \"tailwindcss\";\n\n\t\t\t@theme inline {\n\t\t\t\t@keyframes spin {\n\t\t\t\t\t0% {\n\t\t\t\t\t\ttransform: rotate(0deg);\n\t\t\t\t\t}\n\t\t\t\t\t100% {\n\t\t\t\t\t\ttransform: rotate(360deg);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\"\n\t\t`);\n\t});\n});\n"
  },
  {
    "path": "packages/cli/test/utils/utils.test.ts",
    "content": "import { describe, it, expect, beforeEach } from \"vitest\";\nimport { ALIAS_DEFAULTS, ALIASES } from \"../../src/constants\";\nimport { resolveURL } from \"../../src/utils/utils\";\nimport { transformAliases, transformLocal } from \"../../src/commands/registry/build\";\nimport { z } from \"zod\";\nimport { naiveDeepPartialify } from \"../../src/utils/registry/schema.js\";\nimport { parseDependency } from \"../../src/utils/install-deps.js\";\n\ndescribe(\"resolveURL\", () => {\n\tit(\"Correctly resolves the relative url path\", () => {\n\t\tconst base = \"https://example.com/registry\";\n\n\t\texpect(resolveURL(base, \"index.json\").href).toEqual(\n\t\t\t\"https://example.com/registry/index.json\"\n\t\t);\n\n\t\texpect(resolveURL(base, \"../index.json\").href).toEqual(\"https://example.com/index.json\");\n\n\t\texpect(resolveURL(base, \"./foo/bar/index.json\").href).toEqual(\n\t\t\t\"https://example.com/registry/foo/bar/index.json\"\n\t\t);\n\t});\n\n\tit(\"handles URLs that already a have trailing slash\", () => {\n\t\tconst base = \"https://example.com/\";\n\t\texpect(resolveURL(base, \"index.json\").href).toEqual(\"https://example.com/index.json\");\n\t});\n\n\tit(\"works with URL objects\", () => {\n\t\tconst base = new URL(\"https://example.com/registry\");\n\t\texpect(resolveURL(base, \"index.json\").href).toEqual(\n\t\t\t\"https://example.com/registry/index.json\"\n\t\t);\n\t});\n\n\tit(\"handles absolute paths\", () => {\n\t\tconst base = \"https://example.com/registry\";\n\t\texpect(resolveURL(base, \"/absolute/path\").href).toEqual(\n\t\t\t\"https://example.com/absolute/path\"\n\t\t);\n\t});\n\n\tit(\"handles empty paths\", () => {\n\t\tconst base = \"https://example.com/registry\";\n\t\texpect(resolveURL(base, \"\").href).toEqual(\"https://example.com/registry/\");\n\t});\n\n\tit(\"works with different protocols\", () => {\n\t\tconst base = \"http://example.com/registry\";\n\t\texpect(resolveURL(base, \"index.json\").href).toEqual(\n\t\t\t\"http://example.com/registry/index.json\"\n\t\t);\n\t});\n\n\tit(\"works with query parameters\", () => {\n\t\tconst base = \"http://example.com/registry?foo=bar\";\n\t\texpect(resolveURL(base, \"index.json\").href).toEqual(\n\t\t\t\"http://example.com/registry/index.json\"\n\t\t);\n\t});\n\n\tit(\"works with port numbers\", () => {\n\t\tconst base = \"https://example.com:8080/registry\";\n\t\texpect(resolveURL(base, \"index.json\").href).toEqual(\n\t\t\t\"https://example.com:8080/registry/index.json\"\n\t\t);\n\t});\n});\n\ndescribe(\"parseDependency\", () => {\n\tit(\"parses without tags\", () => {\n\t\texpect(parseDependency(\"foo\")).toEqual({ name: \"foo\", version: \"latest\" });\n\t\texpect(parseDependency(\"@foo/bar\")).toEqual({ name: \"@foo/bar\", version: \"latest\" });\n\t});\n\tit(\"parses with tags\", () => {\n\t\texpect(parseDependency(\"svelte@5.0.0\")).toEqual({ name: \"svelte\", version: \"5.0.0\" });\n\t\texpect(parseDependency(\"@foo/bar@1.0.0\")).toEqual({ name: \"@foo/bar\", version: \"1.0.0\" });\n\t});\n});\n\ndescribe(\"transformLocal\", () => {\n\tdescribe(\"transformLocal\", () => {\n\t\tit(\"should transform a local dependency string correctly\", () => {\n\t\t\tconst registryDep = \"local:my-package\";\n\t\t\tconst expectedOutput = \"./my-package.json\";\n\t\t\texpect(transformLocal(registryDep)).toBe(expectedOutput);\n\t\t});\n\n\t\tit('should return the original string if it does not start with \"local:\"', () => {\n\t\t\tconst registryDep = \"other-package\";\n\t\t\texpect(transformLocal(registryDep)).toBe(registryDep);\n\t\t});\n\n\t\tit(\"should handle local dependencies with hyphens and numbers\", () => {\n\t\t\tconst registryDep = \"local:my-package-123\";\n\t\t\tconst expectedOutput = \"./my-package-123.json\";\n\t\t\texpect(transformLocal(registryDep)).toBe(expectedOutput);\n\t\t});\n\n\t\tit(\"should handle local dependencies with underscores\", () => {\n\t\t\tconst registryDep = \"local:my_package\";\n\t\t\tconst expectedOutput = \"./my_package.json\";\n\t\t\texpect(transformLocal(registryDep)).toBe(expectedOutput);\n\t\t});\n\n\t\tit('should handle an empty string after \"local:\"', () => {\n\t\t\tconst registryDep = \"local:\";\n\t\t\tconst expectedOutput = \"./.json\";\n\t\t\texpect(transformLocal(registryDep)).toBe(expectedOutput);\n\t\t});\n\n\t\tit(\"should return an empty string if the input is an empty string\", () => {\n\t\t\tconst registryDep = \"\";\n\t\t\texpect(transformLocal(registryDep)).toBe(\"\");\n\t\t});\n\n\t\tit('should handle strings that contain \"local:\" but do not start with it', () => {\n\t\t\tconst registryDep = \"some-prefix-local:my-package\";\n\t\t\texpect(transformLocal(registryDep)).toBe(registryDep);\n\t\t});\n\t});\n});\n\ntype Aliases = NonNullable<Parameters<typeof transformAliases>[0]>;\n\ndescribe(\"transformAliases\", () => {\n\tlet aliases = {} as Aliases;\n\n\tbeforeEach(() => {\n\t\taliases = {} as Aliases;\n\t});\n\n\tit(\"replaces default paths with placeholders when aliases is empty\", () => {\n\t\tconst key = ALIASES[0];\n\t\tconst { defaultPath, placeholder } = ALIAS_DEFAULTS[key];\n\n\t\tconst content = `import X from \"${defaultPath}/foo.js\"`;\n\t\tconst out = transformAliases(aliases, content);\n\n\t\texpect(out).toBe(`import X from \"${placeholder}/foo.js\"`);\n\t\t// aliases object should now have the defaultPath set\n\t\texpect(aliases[key]).toBe(defaultPath);\n\t});\n\n\tit(\"replaces a single custom alias path\", () => {\n\t\tconst key = ALIASES[1];\n\t\tconst { placeholder } = ALIAS_DEFAULTS[key];\n\t\tconst customPath = \"/my/custom/path\";\n\t\taliases = { [key]: customPath };\n\n\t\tconst content = `import X from \"${customPath}/bar/index.js\"`;\n\t\tconst out = transformAliases(aliases, content);\n\n\t\texpect(out).toBe(`import X from \"${placeholder}/bar/index.js\"`);\n\t\texpect(aliases[key]).toBe(customPath);\n\t});\n\n\tit(\"replaces multiple occurrences of the same alias\", () => {\n\t\tconst key = ALIASES[2];\n\t\tconst { defaultPath, placeholder } = ALIAS_DEFAULTS[key];\n\n\t\tconst content = [\n\t\t\t`import A from \"${defaultPath}/a.js\";`,\n\t\t\t`import { B } from \"${defaultPath}/b.js\";`,\n\t\t].join(\"\\n\");\n\n\t\tconst out = transformAliases(aliases, content);\n\n\t\texpect(out).toContain(`${placeholder}/a.js`);\n\t\texpect(out).toContain(`${placeholder}/b.js`);\n\t});\n\n\tit(\"leaves content unchanged when no alias paths are present\", () => {\n\t\tconst content = `// nothing to transform here\\nconsole.log(\"hello world\");`;\n\n\t\tconst out = transformAliases(aliases, content);\n\t\texpect(out).toBe(content);\n\t\t// aliases should now have all defaults populated\n\t\tfor (const alias of ALIASES) {\n\t\t\texpect(aliases[alias]).toBe(ALIAS_DEFAULTS[alias].defaultPath);\n\t\t}\n\t});\n\n\tit(\"handles an already populated aliases object without modifying it\", () => {\n\t\tconst key = ALIASES[3];\n\t\tconst { placeholder } = ALIAS_DEFAULTS[key];\n\t\tconst preset = \"/existing/path\";\n\t\taliases = { [key]: preset };\n\n\t\tconst content = `import X from \"${preset}/thing.js\"`;\n\t\tconst out = transformAliases(aliases, content);\n\n\t\texpect(out).toBe(`import X from \"${placeholder}/thing.js\"`);\n\t\t// ensure preset remains untouched\n\t\texpect(aliases[key]).toBe(preset);\n\t});\n});\n\ndescribe(\"naiveDeepPartialify\", () => {\n\tit(\"should convert a zod object to a zod object with all fields optional\", () => {\n\t\tconst schema = z.object({\n\t\t\ta: z.string(),\n\t\t\tb: z.number(),\n\t\t\tc: z.boolean(),\n\t\t});\n\n\t\tconst partialSchema = naiveDeepPartialify(schema);\n\n\t\tconst parsed = partialSchema.safeParse({});\n\n\t\texpect(parsed.success).toBe(true);\n\t});\n\n\tit(\"should allow nested objects to be optional\", () => {\n\t\tconst schema = z.object({\n\t\t\ta: z.object({\n\t\t\t\tb: z.string(),\n\t\t\t}),\n\t\t});\n\n\t\tconst partialSchema = naiveDeepPartialify(schema);\n\n\t\tconst parsed = partialSchema.safeParse({});\n\n\t\texpect(parsed.success).toBe(true);\n\t});\n\n\tit(\"should allow nested objects properties to be optional\", () => {\n\t\tconst schema = z.object({\n\t\t\ta: z.object({\n\t\t\t\tb: z.string(),\n\t\t\t}),\n\t\t});\n\n\t\tconst partialSchema = naiveDeepPartialify(schema);\n\n\t\tconst parsed = partialSchema.safeParse({\n\t\t\ta: {},\n\t\t});\n\n\t\texpect(parsed.success).toBe(true);\n\t});\n});\n"
  },
  {
    "path": "packages/cli/tsconfig.json",
    "content": "{\n\t\"compilerOptions\": {\n\t\t\"strict\": true,\n\t\t\"module\": \"Node18\",\n\t\t\"esModuleInterop\": true,\n\t\t\"forceConsistentCasingInFileNames\": true,\n\t\t\"isolatedModules\": true,\n\t\t\"skipLibCheck\": true,\n\t\t\"noEmit\": true,\n\t\t\"verbatimModuleSyntax\": true,\n\t\t\"erasableSyntaxOnly\": true,\n\t\t\"noUncheckedIndexedAccess\": true\n\t},\n\t\"include\": [\"src\", \"test/preset.test.ts\"]\n}\n"
  },
  {
    "path": "packages/cli/tsdown.config.ts",
    "content": "import { defineConfig } from \"tsdown\";\n\nexport default defineConfig({\n\tentry: [\n\t\t\"src/index.ts\",\n\t\t\"src/schema/index.ts\",\n\t\t\"src/icons/index.ts\",\n\t\t\"src/preset/index.ts\",\n\t\t\"src/utils/transformers/index.ts\",\n\t\t\"src/utils/transformers/transform-icons.ts\",\n\t\t\"src/utils/transformers/transform-imports.ts\",\n\t\t\"src/utils/transformers/transform-menu.ts\",\n\t\t\"src/utils/transformers/transform-strip-types.ts\",\n\t],\n\ttarget: \"es2022\",\n\tdts: true,\n});\n"
  },
  {
    "path": "packages/registry/.gitignore",
    "content": ".DS_Store\nnode_modules\n/build\n/.svelte-kit\n/package\n.env\n.env.*\n!.env.example\nvite.config.js.timestamp-*\nvite.config.ts.timestamp-*\n.turbo\n\n# Logs\nlogs\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\nlerna-debug.log*\n.pnpm-debug.log*\n\n# Diagnostic reports (https://nodejs.org/api/report.html)\nreport.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json\n\n# Runtime data\npids\n*.pid\n*.seed\n*.pid.lock\n\n# Directory for instrumented libs generated by jscoverage/JSCover\nlib-cov\n\n# Coverage directory used by tools like istanbul\ncoverage\n*.lcov\n\n# nyc test coverage\n.nyc_output\n\n# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)\n.grunt\n\n# Bower dependency directory (https://bower.io/)\nbower_components\n\n# node-waf configuration\n.lock-wscript\n\n# Compiled binary addons (https://nodejs.org/api/addons.html)\nbuild/Release\n\n# Dependency directories\nnode_modules/\njspm_packages/\n\n# Snowpack dependency directory (https://snowpack.dev/)\nweb_modules/\n\n# TypeScript cache\n*.tsbuildinfo\n\n# Optional npm cache directory\n.npm\n\n# Optional eslint cache\n.eslintcache\n\n# Optional stylelint cache\n.stylelintcache\n\n# Microbundle cache\n.rpt2_cache/\n.rts2_cache_cjs/\n.rts2_cache_es/\n.rts2_cache_umd/\n\n# Optional REPL history\n.node_repl_history\n\n# Output of 'npm pack'\n*.tgz\n\n# Yarn Integrity file\n.yarn-integrity\n\n# dotenv environment variable files\n.env\n.env.development.local\n.env.test.local\n.env.production.local\n.env.local\n\n\n# Stores VSCode versions used for testing VSCode extensions\n.vscode-test\n\n# yarn v2\n.yarn/cache\n.yarn/unplugged\n.yarn/build-state.yml\n.yarn/install-state.gz\n.pnp.*\n\ndist"
  },
  {
    "path": "packages/registry/.prettierignore",
    "content": ".DS_Store\nnode_modules\n/build\n/.svelte-kit\n/package\n.env\n.env.*\n!.env.example\n\n# Ignore files for PNPM, NPM and YARN\npnpm-lock.yaml\npackage-lock.json\nyarn.lock\nCHANGELOG.md\n"
  },
  {
    "path": "packages/registry/CHANGELOG.md",
    "content": "# shadcn-svelte@registry\n\n## 0.0.2\n\n### Patch Changes\n\n- chore: Add deprecation notice. Use `shadcn-svelte/schema` instead ([#2471](https://github.com/huntabyte/shadcn-svelte/pull/2471))\n\n## 0.0.1\n\n### Patch Changes\n\n- initial release ([#2189](https://github.com/huntabyte/shadcn-svelte/pull/2189))\n\n## 0.0.1\n\n### Patch Changes\n\n- initial release ([#2164](https://github.com/huntabyte/shadcn-svelte/pull/2164))\n"
  },
  {
    "path": "packages/registry/LICENSE.md",
    "content": "MIT License\n\nCopyright (c) 2025 Hunter Johnston <https://github.com/huntabyte>\nCopyright (c) 2025 CokaKoala <https://github.com/adriangonz97>\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "packages/registry/README.md",
    "content": "# @shadcn-svelte/registry\n\n> [!WARNING]\n> This package is deprecated. Please use `shadcn-svelte/schema` instead.\n\nThis package provides TypeScript types and Zod schemas for building a custom shadcn-svelte registry.\n\n## Installation\n\n```bash\nnpm install @shadcn-svelte/registry\n```\n\n## License\n\nMIT\n"
  },
  {
    "path": "packages/registry/package.json",
    "content": "{\n\t\"name\": \"@shadcn-svelte/registry\",\n\t\"version\": \"0.0.2\",\n\t\"description\": \"Types, schemas, and utils for the shadcn-svelte registry.\",\n\t\"license\": \"MIT\",\n\t\"author\": {\n\t\t\"name\": \"huntabyte & CokaKoala\",\n\t\t\"url\": \"https://twitter.com/huntabyte\"\n\t},\n\t\"repository\": {\n\t\t\"type\": \"git\",\n\t\t\"url\": \"https://github.com/huntabyte/shadcn-svelte.git\",\n\t\t\"directory\": \"packages/registry\"\n\t},\n\t\"type\": \"module\",\n\t\"main\": \"dist/index.mjs\",\n\t\"types\": \"dist/index.d.mts\",\n\t\"private\": false,\n\t\"files\": [\n\t\t\"dist/**\"\n\t],\n\t\"exports\": {\n\t\t\".\": {\n\t\t\t\"types\": \"./dist/index.d.mts\",\n\t\t\t\"default\": \"./dist/index.mjs\"\n\t\t}\n\t},\n\t\"scripts\": {\n\t\t\"dev\": \"tsdown --watch --sourcemap\",\n\t\t\"build\": \"tsdown\",\n\t\t\"check\": \"tsc --noEmit\",\n\t\t\"release\": \"changeset version\",\n\t\t\"test\": \"vitest\"\n\t},\n\t\"peerDependencies\": {\n\t\t\"zod\": \"^4.0.0\"\n\t},\n\t\"devDependencies\": {\n\t\t\"tsdown\": \"catalog:\",\n\t\t\"zod\": \"catalog:\"\n\t}\n}\n"
  },
  {
    "path": "packages/registry/src/index.ts",
    "content": "export * from \"./schemas.js\";\n"
  },
  {
    "path": "packages/registry/src/schemas.ts",
    "content": "import { z } from \"zod/v4\";\n\nconst registryItemFileType = [\n\t\"registry:file\",\n\t\"registry:page\",\n\t\"registry:ui\",\n\t\"registry:component\",\n\t\"registry:lib\",\n\t\"registry:hook\",\n\t\"registry:theme\",\n\t\"registry:style\",\n] as const;\n\nconst registryItemComplexType = [\"registry:block\"] as const;\n\n/** Used for internal purposes only. */\nconst registryItemInternalType = [\"registry:example\", \"registry:internal\"] as const;\n\nexport type RegistryItemType = z.infer<typeof registryItemTypeSchema>;\nconst registryItemTypeSchema = z\n\t.enum([...registryItemFileType, ...registryItemComplexType, ...registryItemInternalType])\n\t.describe(\n\t\t\"The type of the item. Used to determine the type and target path of the item when resolved for a project.\"\n\t);\n\nexport type RegistryItemFileType = z.infer<typeof registryItemFileTypeSchema>;\nconst registryItemFileTypeSchema = z\n\t.enum(registryItemFileType)\n\t.describe(\"The type of the file. Used to resolve the file's path for a project.\");\n\nexport type RegistryItemFile = z.infer<typeof registryItemFileSchema>;\nexport const registryItemFileSchema = z\n\t.object({\n\t\tcontent: z.string().describe(\"The content of the file.\"),\n\t\ttype: registryItemFileTypeSchema,\n\t\ttarget: z\n\t\t\t.string()\n\t\t\t.describe(\"The target path of the file. This is where the file will be installed.\"),\n\t})\n\t.describe(\n\t\t\"The main payload of the registry item. This is an array of files that are part of the registry item. Each file is an object with a target, type, and content.\"\n\t);\n\nconst registryDependenciesSchema = z\n\t.string()\n\t.array()\n\t.describe(\n\t\t\"An array of registry items that this item depends on. Use the name of the item to reference shadcn/ui components and urls to reference other registries.\"\n\t);\n\nconst baseIndexItemSchema = z.object({\n\tname: z\n\t\t.string()\n\t\t.describe(\n\t\t\t\"The name of the item. Used to identify the item in the registry. It should be unique for your registry.\"\n\t\t),\n\ttitle: z\n\t\t.string()\n\t\t.optional()\n\t\t.describe(\n\t\t\t\"The human-readable title for your registry item. Keep it short and descriptive.\"\n\t\t),\n\ttype: registryItemTypeSchema,\n\tauthor: z\n\t\t.string()\n\t\t.min(2, \"Author name must be at least 2 characters\")\n\t\t.optional()\n\t\t.describe(\"The author of the item. Recommended format: username <url>\"),\n\tdescription: z\n\t\t.string()\n\t\t.optional()\n\t\t.describe(\"The description of the item. Used to provide a brief overview of the item.\"),\n\tdependencies: z\n\t\t.string()\n\t\t.array()\n\t\t.optional()\n\t\t.describe(\"An array of NPM dependencies required by the registry item.\"),\n\tdevDependencies: z\n\t\t.string()\n\t\t.array()\n\t\t.optional()\n\t\t.describe(\"An array of NPM dev dependencies required by the registry item.\"),\n\tregistryDependencies: z.optional(registryDependenciesSchema),\n\tmeta: z\n\t\t.record(z.string(), z.any())\n\t\t.optional()\n\t\t.describe(\n\t\t\t\"Additional metadata for the registry item. This is an object with any key value pairs.\"\n\t\t),\n});\n\nexport type RegistryIndexItem = z.infer<typeof registryIndexItemSchema>;\n/** Schema for registry items defined in the index */\nexport const registryIndexItemSchema = baseIndexItemSchema.extend({\n\trelativeUrl: z.string(),\n});\n\nexport type RegistryIndex = z.infer<typeof registryIndexSchema>;\n/** Schema for the registry's index (e.g. `https://example.com/registry/index.json`) */\nexport const registryIndexSchema = z.array(registryIndexItemSchema);\n\nconst colorSchema = z.record(z.string(), z.string());\n/** Schema for base color endpoints (e.g. `https://example.com/registry/colors/slate.json`) */\nexport const registryBaseColorSchema = z.object({\n\tinlineColors: z.object({ light: colorSchema, dark: colorSchema }),\n\tcssVars: z.object({ light: colorSchema, dark: colorSchema }),\n\tinlineColorsTemplate: z.string(),\n\tcssVarsTemplate: z.string(),\n});\n\nexport type CssVars = z.infer<typeof registryItemCssVarsSchema>;\nconst registryItemCssVarsSchema = z\n\t.object({\n\t\ttheme: z\n\t\t\t.optional(colorSchema)\n\t\t\t.describe(\n\t\t\t\t\"CSS variables for the @theme directive. For Tailwind v4 projects only. Use tailwind for older projects.\"\n\t\t\t),\n\t\tlight: z.optional(colorSchema).describe(\"CSS variables for the light theme.\"),\n\t\tdark: z.optional(colorSchema).describe(\"CSS variables for the dark theme.\"),\n\t})\n\t.describe(\n\t\t\"The css variables for the registry item. This will be merged with the project's css variables.\"\n\t);\n\nexport type CssSchema = { [x: string]: string | CssSchema };\nconst registryItemCssSchema: z.ZodType<CssSchema, CssSchema> = z\n\t.record(\n\t\tz\n\t\t\t.string()\n\t\t\t.describe(\"Direct CSS string (e.g., 'font-family: sans-serif; line-height: 1.5;')\"),\n\t\tz\n\t\t\t.lazy(() =>\n\t\t\t\tz.union([\n\t\t\t\t\tz\n\t\t\t\t\t\t.string()\n\t\t\t\t\t\t.describe(\"CSS property value (e.g., 'blue', 'var(--color-primary)')\"),\n\t\t\t\t\tregistryItemCssSchema.describe(\"CSS property value for nested rule\"),\n\t\t\t\t])\n\t\t\t)\n\t\t\t.describe(\"CSS properties or nested selectors\")\n\t)\n\t.describe(\n\t\t\"CSS definitions to be added to the project's CSS file. Supports at-rules, selectors, nested rules, utilities, layers, and more.\"\n\t);\n\nexport type RegistryItem = z.infer<typeof registryItemSchema>;\n/** Schema for registry item endpoints (e.g. `https://example.com/registry/item.json`) */\nexport const registryItemSchema = z.object({\n\t$schema: z.string().optional(),\n\t...baseIndexItemSchema.shape,\n\tdocs: z\n\t\t.string()\n\t\t.optional()\n\t\t.describe(\"The documentation for the registry item. This is a markdown string.\"),\n\tcategories: z\n\t\t.string()\n\t\t.array()\n\t\t.optional()\n\t\t.describe(\"The categories of the registry item. This is an array of strings.\"),\n\tcss: z.optional(registryItemCssSchema),\n\tcssVars: z.optional(registryItemCssVarsSchema),\n\n\tfiles: z.array(registryItemFileSchema).default([]),\n});\n\nexport type Registry = z.infer<typeof registrySchema>;\n\n/** Schema for `registry.json` */\nexport const registrySchema = z.object({\n\t$schema: z.string().optional(),\n\tname: z.string().describe(\"The name of the registry.\"),\n\thomepage: z.string().describe(\"The homepage of the registry.\"),\n\t// installs specified versions of dependencies during auto-detection\n\toverrideDependencies: z\n\t\t.string()\n\t\t.array()\n\t\t.optional()\n\t\t.describe(\n\t\t\t\"An array of NPM dependencies that should have their versions overridden during registry `build`.\"\n\t\t),\n\taliases: z\n\t\t.object({\n\t\t\tlib: z.string().optional(),\n\t\t\tui: z.string().optional(),\n\t\t\tcomponents: z.string().optional(),\n\t\t\tutils: z.string().optional(),\n\t\t\thooks: z.string().optional(),\n\t\t})\n\t\t.optional()\n\t\t.describe(\n\t\t\t\"Defines which internal import paths should be transformed during registry `build`.\"\n\t\t),\n\titems: baseIndexItemSchema\n\t\t.extend({\n\t\t\tfiles: registryItemFileSchema\n\t\t\t\t.partial()\n\t\t\t\t.extend({\n\t\t\t\t\tpath: z\n\t\t\t\t\t\t.string()\n\t\t\t\t\t\t.describe(\"The path to the file relative to the registry root.\"),\n\t\t\t\t\ttype: registryItemFileTypeSchema,\n\t\t\t\t})\n\t\t\t\t.array()\n\t\t\t\t.describe(\n\t\t\t\t\t\"An array of files that instructs the `build` command on how to locate and parse the registry files.\"\n\t\t\t\t),\n\t\t\tregistryDependencies: registryDependenciesSchema,\n\t\t\tcssVars: z.optional(registryItemCssVarsSchema),\n\t\t\tcss: z.optional(registryItemCssSchema),\n\t\t})\n\t\t.array()\n\t\t.describe(\"Defines a custom component registry.\"),\n});\n\n/** Schema for a project's `components.json` config file. */\nexport const componentsJsonSchema = z.object({\n\t$schema: z.string().optional(),\n\tstyle: z\n\t\t.string()\n\t\t.optional()\n\t\t.describe(\n\t\t\t\"DEPRECATED IN TAILWIND v4! The style for your components. This cannot be changed after initialization.\"\n\t\t),\n\ttailwind: z.object({\n\t\tcss: z\n\t\t\t.string()\n\t\t\t.describe(\"Path to the CSS file that imports Tailwind CSS into your project.\"),\n\t\tbaseColor: z\n\t\t\t.string()\n\t\t\t.describe(\n\t\t\t\t\"Used to generate the default color palette for your components. This cannot be changed after initialization.\"\n\t\t\t),\n\t\tconfig: z\n\t\t\t.string()\n\t\t\t.optional()\n\t\t\t.describe(\n\t\t\t\t\"DEPRECATED IN TAILWIND v4! The path to your `tailwind.config.[js|ts]` file.\"\n\t\t\t),\n\t\t// cssVariables: z.boolean().default(true)\n\t}),\n\taliases: z\n\t\t.object({\n\t\t\tcomponents: z.string().describe(\"Import alias for your components.\"),\n\t\t\tutils: z.string().describe(\"Import alias for your utility functions.\"),\n\t\t\tui: z\n\t\t\t\t.string()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Import alias for your UI components. Defaults to `$lib/components/ui`.\"),\n\t\t\thooks: z\n\t\t\t\t.string()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\"Import alias for your hooks. Defaults to `$lib/hooks`.\"),\n\t\t\tlib: z\n\t\t\t\t.string()\n\t\t\t\t.optional()\n\t\t\t\t.describe(\n\t\t\t\t\t\"Import alias for your library, which is typically where you store your components, utils, hooks, etc. Defaults to `$lib`.\"\n\t\t\t\t),\n\t\t})\n\t\t.describe(\n\t\t\t\"The CLI uses these values and the `alias` config from your `svelte.config.js` file to place generated components in the correct location.\"\n\t\t),\n\tregistry: z\n\t\t.string()\n\t\t.optional()\n\t\t.describe(\n\t\t\t\"The registry URL tells the CLI where to fetch the shadcn-svelte components/registry from. You can pin this to a specific preview release or your own fork of the registry.\"\n\t\t),\n\ttypescript: z\n\t\t.union([\n\t\t\tz.boolean(),\n\t\t\tz.object({ config: z.string().describe(\"Path to the tsconfig/jsconfig file.\") }),\n\t\t])\n\t\t.optional()\n\t\t.describe(\n\t\t\t\"Used to determine if Typescript is used for this project. When set to `false`, `.js` files will be installed instead. Defaults to `true`.\"\n\t\t),\n});\n"
  },
  {
    "path": "packages/registry/tsconfig.json",
    "content": "{\n\t\"compilerOptions\": {\n\t\t\"strict\": true,\n\t\t\"module\": \"Node18\",\n\t\t\"esModuleInterop\": true,\n\t\t\"forceConsistentCasingInFileNames\": true,\n\t\t\"isolatedModules\": true,\n\t\t\"skipLibCheck\": true,\n\t\t\"noEmit\": true,\n\t\t\"verbatimModuleSyntax\": true,\n\t\t\"erasableSyntaxOnly\": true,\n\t\t\"noUncheckedIndexedAccess\": true\n\t},\n\t\"include\": [\"src\"]\n}\n"
  },
  {
    "path": "packages/registry/tsdown.config.ts",
    "content": "import { defineConfig } from \"tsdown\";\n\nexport default defineConfig({\n\tentry: [\"src/index.ts\"],\n\tdts: true,\n});\n"
  },
  {
    "path": "pnpm-workspace.yaml",
    "content": "packages:\n    - packages/*\n    - docs\n    - registry-template\n\ncatalog:\n    \"@sveltejs/kit\": ^2.55.0\n    \"@sveltejs/vite-plugin-svelte\": ^6.2.4\n    svelte: ^5.54.0\n    svelte-check: ^4.4.5\n    tsdown: ^0.18.4\n    typescript: ^5.9.3\n    vite: ^7.3.1\n    zod: ^4.3.6\n"
  },
  {
    "path": "registry-template/.gitignore",
    "content": "node_modules\n\n# Output\n.output\n.vercel\n.netlify\n.wrangler\n/.svelte-kit\n/build\n\n# OS\n.DS_Store\nThumbs.db\n\n# Env\n.env\n.env.*\n!.env.example\n!.env.test\n\n# Vite\nvite.config.js.timestamp-*\nvite.config.ts.timestamp-*\n"
  },
  {
    "path": "registry-template/.npmrc",
    "content": "engine-strict=true\n"
  },
  {
    "path": "registry-template/.prettierignore",
    "content": "# Package Managers\npackage-lock.json\npnpm-lock.yaml\nyarn.lock\nbun.lock\nbun.lockb\n"
  },
  {
    "path": "registry-template/.prettierrc",
    "content": "{\n\t\"useTabs\": true,\n\t\"singleQuote\": false,\n\t\"trailingComma\": \"es5\",\n\t\"printWidth\": 100,\n\t\"plugins\": [\"prettier-plugin-svelte\", \"prettier-plugin-tailwindcss\"],\n\t\"overrides\": [\n\t\t{\n\t\t\t\"files\": \"*.svelte\",\n\t\t\t\"options\": {\n\t\t\t\t\"parser\": \"svelte\"\n\t\t\t}\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "registry-template/README.md",
    "content": "# registry-template\n\nYou can use the `shadcn-svelte` CLI to run your own component registry. Running your own\ncomponent registry allows you to distribute your custom components, hooks, pages, and\nother files to any Svelte project.\n\n## Getting Started\n\nThis is a template for creating a custom registry using SvelteKit.\n\n- The template uses a `registry.json` file to define components and their files.\n- The `shadcn-svelte build` command is used to build the registry.\n- The registry items are served as static files under `public/r/[name].json`.\n- Every registry item is compatible with the `shadcn-svelte` CLI.\n- The `card`, `button`, `input`, `label`, `textarea` components here would come from the `shadcn-svelte` registry, but the `stepper` component is a custom `ui` component you can use as a reference for creating and referencing \"local\" `ui` components.\n\n> [!IMPORTANT]\n> Don't forget to replace the version of `shadcn-svelte` in the `package.json` file with the version you want to use.\n\n## Documentation\n\nVisit the [shadcn-svelte documentation](https://shadcn-svelte.com/docs/registry) to view the full documentation.\n"
  },
  {
    "path": "registry-template/eslint.config.js",
    "content": "import prettier from \"eslint-config-prettier\";\nimport js from \"@eslint/js\";\nimport { includeIgnoreFile } from \"@eslint/compat\";\nimport svelte from \"eslint-plugin-svelte\";\nimport globals from \"globals\";\nimport { fileURLToPath } from \"node:url\";\nimport ts from \"typescript-eslint\";\nimport svelteConfig from \"./svelte.config.js\";\n\nconst gitignorePath = fileURLToPath(new URL(\"./.gitignore\", import.meta.url));\n\nexport default ts.config(\n\tincludeIgnoreFile(gitignorePath),\n\tjs.configs.recommended,\n\t...ts.configs.recommended,\n\t...svelte.configs.recommended,\n\tprettier,\n\t...svelte.configs.prettier,\n\t{\n\t\tlanguageOptions: {\n\t\t\tglobals: { ...globals.browser, ...globals.node },\n\t\t},\n\t\trules: { \"no-undef\": \"off\" },\n\t},\n\t{\n\t\tfiles: [\"**/*.svelte\", \"**/*.svelte.ts\", \"**/*.svelte.js\"],\n\t\tlanguageOptions: {\n\t\t\tparserOptions: {\n\t\t\t\tprojectService: true,\n\t\t\t\textraFileExtensions: [\".svelte\"],\n\t\t\t\tparser: ts.parser,\n\t\t\t\tsvelteConfig,\n\t\t\t},\n\t\t},\n\t}\n);\n"
  },
  {
    "path": "registry-template/package.json",
    "content": "{\n\t\"name\": \"@shadcn-svelte/registry-template\",\n\t\"private\": true,\n\t\"version\": \"0.0.0\",\n\t\"type\": \"module\",\n\t\"scripts\": {\n\t\t\"dev\": \"vite dev\",\n\t\t\"build\": \"vite build\",\n\t\t\"preview\": \"vite preview\",\n\t\t\"prepare\": \"svelte-kit sync || echo ''\",\n\t\t\"check\": \"svelte-kit sync && svelte-check --tsconfig ./tsconfig.json\",\n\t\t\"check:watch\": \"svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch\",\n\t\t\"format\": \"prettier --write .\",\n\t\t\"lint\": \"prettier --check . && eslint .\",\n\t\t\"build:registry\": \"pnpm shadcn-svelte registry build\"\n\t},\n\t\"devDependencies\": {\n\t\t\"@eslint/compat\": \"^1.3.0\",\n\t\t\"@eslint/js\": \"^9.29.0\",\n\t\t\"@sveltejs/adapter-auto\": \"^6.0.0\",\n\t\t\"@sveltejs/kit\": \"^2.21.5\",\n\t\t\"@sveltejs/vite-plugin-svelte\": \"^5.1.0\",\n\t\t\"@tailwindcss/vite\": \"^4.1.10\",\n\t\t\"bits-ui\": \"^2.7.0\",\n\t\t\"clsx\": \"^2.1.1\",\n\t\t\"eslint\": \"^9.18.0\",\n\t\t\"eslint-config-prettier\": \"^10.0.1\",\n\t\t\"eslint-plugin-svelte\": \"^3.9.2\",\n\t\t\"globals\": \"^16.0.0\",\n\t\t\"prettier\": \"^3.4.2\",\n\t\t\"prettier-plugin-svelte\": \"^3.3.3\",\n\t\t\"prettier-plugin-tailwindcss\": \"^0.6.11\",\n\t\t\"shadcn-svelte\": \"workspace:*\",\n\t\t\"svelte\": \"^5.34.1\",\n\t\t\"svelte-check\": \"^4.0.0\",\n\t\t\"tailwind-merge\": \"^3.3.1\",\n\t\t\"tailwind-variants\": \"^1.0.0\",\n\t\t\"tailwindcss\": \"^4.1.10\",\n\t\t\"tw-animate-css\": \"^1.3.3\",\n\t\t\"typescript\": \"^5.0.0\",\n\t\t\"typescript-eslint\": \"^8.34.0\",\n\t\t\"vite\": \"^6.3.5\",\n\t\t\"zod\": \"^4.2.1\"\n\t},\n\t\"pnpm\": {\n\t\t\"onlyBuiltDependencies\": [\n\t\t\t\"esbuild\"\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "registry-template/registry.json",
    "content": "{\n\t\"$schema\": \"../sites/docs/static/schema/registry.json\",\n\t\"name\": \"acme\",\n\t\"homepage\": \"https://acme.com\",\n\t\"items\": [\n\t\t{\n\t\t\t\"name\": \"hello-world\",\n\t\t\t\"type\": \"registry:component\",\n\t\t\t\"title\": \"Hello World\",\n\t\t\t\"description\": \"A simple hello world component\",\n\t\t\t\"registryDependencies\": [\"button\"],\n\t\t\t\"files\": [\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"src/lib/registry/blocks/hello-world/hello-world.svelte\",\n\t\t\t\t\t\"type\": \"registry:component\"\n\t\t\t\t}\n\t\t\t],\n\t\t\t\"meta\": {\n\t\t\t\t\"author\": \"huntabyte\"\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\t\"name\": \"example-form\",\n\t\t\t\"type\": \"registry:component\",\n\t\t\t\"title\": \"Example Form\",\n\t\t\t\"description\": \"A contact form with Zod validation.\",\n\t\t\t\"dependencies\": [\"zod\"],\n\t\t\t\"registryDependencies\": [\"button\", \"input\", \"label\", \"textarea\", \"card\"],\n\t\t\t\"files\": [\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"src/lib/registry/blocks/example-form/example-form.svelte\",\n\t\t\t\t\t\"type\": \"registry:component\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"name\": \"complex-component\",\n\t\t\t\"type\": \"registry:component\",\n\t\t\t\"title\": \"Complex Component\",\n\t\t\t\"description\": \"A complex component showing hooks, libs and components.\",\n\t\t\t\"registryDependencies\": [\"card\"],\n\t\t\t\"files\": [\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"src/lib/registry/blocks/complex-component/+page.svelte\",\n\t\t\t\t\t\"type\": \"registry:page\",\n\t\t\t\t\t\"target\": \"src/routes/pokemon/+page.svelte\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"src/lib/registry/blocks/complex-component/components/pokemon-card.svelte\",\n\t\t\t\t\t\"type\": \"registry:component\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"src/lib/registry/blocks/complex-component/components/pokemon-image.svelte\",\n\t\t\t\t\t\"type\": \"registry:component\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"src/lib/registry/blocks/complex-component/lib/pokemon.ts\",\n\t\t\t\t\t\"type\": \"registry:lib\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"src/lib/registry/blocks/complex-component/hooks/use-pokemon.svelte.ts\",\n\t\t\t\t\t\"type\": \"registry:hook\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"name\": \"example-with-css\",\n\t\t\t\"type\": \"registry:component\",\n\t\t\t\"title\": \"Example with CSS\",\n\t\t\t\"description\": \"A login form with a CSS file.\",\n\t\t\t\"registryDependencies\": [],\n\t\t\t\"files\": [\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"src/lib/registry/blocks/example-with-css/example-card.svelte\",\n\t\t\t\t\t\"type\": \"registry:component\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"src/lib/registry/blocks/example-with-css/example-card.css\",\n\t\t\t\t\t\"type\": \"registry:component\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"name\": \"stepper\",\n\t\t\t\"type\": \"registry:ui\",\n\t\t\t\"registryDependencies\": [],\n\t\t\t\"files\": [\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"src/lib/registry/ui/stepper/stepper.svelte\",\n\t\t\t\t\t\"type\": \"registry:file\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"src/lib/registry/ui/stepper/stepper-item.svelte\",\n\t\t\t\t\t\"type\": \"registry:file\"\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"src/lib/registry/ui/stepper/index.ts\",\n\t\t\t\t\t\"type\": \"registry:file\"\n\t\t\t\t}\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\t\"name\": \"checkout-steps\",\n\t\t\t\"type\": \"registry:component\",\n\t\t\t\"title\": \"Checkout Steps\",\n\t\t\t\"description\": \"A checkout steps component.\",\n\t\t\t\"registryDependencies\": [\"local:stepper\"],\n\t\t\t\"files\": [\n\t\t\t\t{\n\t\t\t\t\t\"path\": \"src/lib/registry/blocks/checkout-steps/checkout-steps.svelte\",\n\t\t\t\t\t\"type\": \"registry:component\"\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t]\n}\n"
  },
  {
    "path": "registry-template/src/app.css",
    "content": "@import \"tailwindcss\";\n@import \"tw-animate-css\";\n\n@custom-variant dark (&:is(.dark *));\n\n@theme inline {\n\t--color-background: var(--background);\n\t--color-foreground: var(--foreground);\n\t--font-sans: var(--font-geist-sans);\n\t--font-mono: var(--font-geist-mono);\n\t--color-sidebar-ring: var(--sidebar-ring);\n\t--color-sidebar-border: var(--sidebar-border);\n\t--color-sidebar-accent-foreground: var(--sidebar-accent-foreground);\n\t--color-sidebar-accent: var(--sidebar-accent);\n\t--color-sidebar-primary-foreground: var(--sidebar-primary-foreground);\n\t--color-sidebar-primary: var(--sidebar-primary);\n\t--color-sidebar-foreground: var(--sidebar-foreground);\n\t--color-sidebar: var(--sidebar);\n\t--color-chart-5: var(--chart-5);\n\t--color-chart-4: var(--chart-4);\n\t--color-chart-3: var(--chart-3);\n\t--color-chart-2: var(--chart-2);\n\t--color-chart-1: var(--chart-1);\n\t--color-ring: var(--ring);\n\t--color-input: var(--input);\n\t--color-border: var(--border);\n\t--color-destructive: var(--destructive);\n\t--color-accent-foreground: var(--accent-foreground);\n\t--color-accent: var(--accent);\n\t--color-muted-foreground: var(--muted-foreground);\n\t--color-muted: var(--muted);\n\t--color-secondary-foreground: var(--secondary-foreground);\n\t--color-secondary: var(--secondary);\n\t--color-primary-foreground: var(--primary-foreground);\n\t--color-primary: var(--primary);\n\t--color-popover-foreground: var(--popover-foreground);\n\t--color-popover: var(--popover);\n\t--color-card-foreground: var(--card-foreground);\n\t--color-card: var(--card);\n\t--radius-sm: calc(var(--radius) - 4px);\n\t--radius-md: calc(var(--radius) - 2px);\n\t--radius-lg: var(--radius);\n\t--radius-xl: calc(var(--radius) + 4px);\n}\n\n:root {\n\t--radius: 0.625rem;\n\t--background: oklch(1 0 0);\n\t--foreground: oklch(0.145 0 0);\n\t--card: oklch(1 0 0);\n\t--card-foreground: oklch(0.145 0 0);\n\t--popover: oklch(1 0 0);\n\t--popover-foreground: oklch(0.145 0 0);\n\t--primary: oklch(0.205 0 0);\n\t--primary-foreground: oklch(0.985 0 0);\n\t--secondary: oklch(0.97 0 0);\n\t--secondary-foreground: oklch(0.205 0 0);\n\t--muted: oklch(0.97 0 0);\n\t--muted-foreground: oklch(0.556 0 0);\n\t--accent: oklch(0.97 0 0);\n\t--accent-foreground: oklch(0.205 0 0);\n\t--destructive: oklch(0.577 0.245 27.325);\n\t--border: oklch(0.922 0 0);\n\t--input: oklch(0.922 0 0);\n\t--ring: oklch(0.708 0 0);\n\t--chart-1: oklch(0.646 0.222 41.116);\n\t--chart-2: oklch(0.6 0.118 184.704);\n\t--chart-3: oklch(0.398 0.07 227.392);\n\t--chart-4: oklch(0.828 0.189 84.429);\n\t--chart-5: oklch(0.769 0.188 70.08);\n\t--sidebar: oklch(0.985 0 0);\n\t--sidebar-foreground: oklch(0.145 0 0);\n\t--sidebar-primary: oklch(0.205 0 0);\n\t--sidebar-primary-foreground: oklch(0.985 0 0);\n\t--sidebar-accent: oklch(0.97 0 0);\n\t--sidebar-accent-foreground: oklch(0.205 0 0);\n\t--sidebar-border: oklch(0.922 0 0);\n\t--sidebar-ring: oklch(0.708 0 0);\n}\n\n.dark {\n\t--background: oklch(0.145 0 0);\n\t--foreground: oklch(0.985 0 0);\n\t--card: oklch(0.205 0 0);\n\t--card-foreground: oklch(0.985 0 0);\n\t--popover: oklch(0.205 0 0);\n\t--popover-foreground: oklch(0.985 0 0);\n\t--primary: oklch(0.922 0 0);\n\t--primary-foreground: oklch(0.205 0 0);\n\t--secondary: oklch(0.269 0 0);\n\t--secondary-foreground: oklch(0.985 0 0);\n\t--muted: oklch(0.269 0 0);\n\t--muted-foreground: oklch(0.708 0 0);\n\t--accent: oklch(0.269 0 0);\n\t--accent-foreground: oklch(0.985 0 0);\n\t--destructive: oklch(0.704 0.191 22.216);\n\t--border: oklch(1 0 0 / 10%);\n\t--input: oklch(1 0 0 / 15%);\n\t--ring: oklch(0.556 0 0);\n\t--chart-1: oklch(0.488 0.243 264.376);\n\t--chart-2: oklch(0.696 0.17 162.48);\n\t--chart-3: oklch(0.769 0.188 70.08);\n\t--chart-4: oklch(0.627 0.265 303.9);\n\t--chart-5: oklch(0.645 0.246 16.439);\n\t--sidebar: oklch(0.205 0 0);\n\t--sidebar-foreground: oklch(0.985 0 0);\n\t--sidebar-primary: oklch(0.488 0.243 264.376);\n\t--sidebar-primary-foreground: oklch(0.985 0 0);\n\t--sidebar-accent: oklch(0.269 0 0);\n\t--sidebar-accent-foreground: oklch(0.985 0 0);\n\t--sidebar-border: oklch(1 0 0 / 10%);\n\t--sidebar-ring: oklch(0.556 0 0);\n}\n\n@layer base {\n\t* {\n\t\t@apply border-border outline-ring/50;\n\t}\n\n\tbody {\n\t\t@apply bg-background text-foreground;\n\t}\n}\n"
  },
  {
    "path": "registry-template/src/app.d.ts",
    "content": "// See https://svelte.dev/docs/kit/types#app.d.ts\n// for information about these interfaces\ndeclare global {\n\tnamespace App {\n\t\t// interface Error {}\n\t\t// interface Locals {}\n\t\t// interface PageData {}\n\t\t// interface PageState {}\n\t\t// interface Platform {}\n\t}\n}\n\nexport {};\n"
  },
  {
    "path": "registry-template/src/app.html",
    "content": "<!doctype html>\n<html lang=\"en\">\n\t<head>\n\t\t<meta charset=\"utf-8\" />\n\t\t<link rel=\"icon\" href=\"%sveltekit.assets%/favicon.png\" />\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n\t\t%sveltekit.head%\n\t</head>\n\t<body data-sveltekit-preload-data=\"hover\">\n\t\t<div style=\"display: contents\">%sveltekit.body%</div>\n\t</body>\n</html>\n"
  },
  {
    "path": "registry-template/src/lib/index.ts",
    "content": "// place files you want to import through the `$lib` alias in this folder.\n"
  },
  {
    "path": "registry-template/src/lib/registry/blocks/checkout-steps/checkout-steps.svelte",
    "content": "<script lang=\"ts\">\n\t// We are using one of our custom/local `ui` components here\n\timport * as Stepper from \"$lib/registry/ui/stepper/index.js\";\n</script>\n\n<Stepper.Root>\n\t{#each { length: 5 } as _, i (i)}\n\t\t<Stepper.Item step={i + 1} />\n\t{/each}\n</Stepper.Root>\n"
  },
  {
    "path": "registry-template/src/lib/registry/blocks/complex-component/+page.svelte",
    "content": "<script lang=\"ts\">\n\timport PokemonCard from \"./components/pokemon-card.svelte\";\n\timport { getPokemonList } from \"./lib/pokemon.js\";\n</script>\n\n{#await getPokemonList({ limit: 12 })}\n\t<div>Loading pokemons...</div>\n{:then pokemons}\n\t{#if pokemons}\n\t\t<div class=\"mx-auto w-full max-w-2xl px-4\">\n\t\t\t<div class=\"grid grid-cols-2 gap-4 py-10 sm:grid-cols-3 md:grid-cols-4\">\n\t\t\t\t{#each pokemons.results as pokemon (pokemon.name)}\n\t\t\t\t\t<PokemonCard name={pokemon.name} />\n\t\t\t\t{/each}\n\t\t\t</div>\n\t\t</div>\n\t{/if}\n{:catch}\n\t<div class=\"mx-auto w-full max-w-2xl px-4\">\n\t\t<p>Error loading pokemons</p>\n\t</div>\n{/await}\n"
  },
  {
    "path": "registry-template/src/lib/registry/blocks/complex-component/components/pokemon-card.svelte",
    "content": "<script lang=\"ts\">\n\timport { getPokemon } from \"$lib/registry/blocks/complex-component/lib/pokemon.js\";\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport PokemonImage from \"$lib/registry/blocks/complex-component/components/pokemon-image.svelte\";\n\n\tlet { name }: { name: string } = $props();\n</script>\n\n{#await getPokemon(name)}\n\t<div>Loading...</div>\n{:then pokemon}\n\t{#if pokemon}\n\t\t<Card.Root>\n\t\t\t<Card.Content class=\"flex flex-col items-center p-2\">\n\t\t\t\t<div>\n\t\t\t\t\t<PokemonImage name={pokemon.name} number={pokemon.id} />\n\t\t\t\t</div>\n\t\t\t\t<div class=\"text-center font-medium\">{pokemon.name}</div>\n\t\t\t</Card.Content>\n\t\t</Card.Root>\n\t{/if}\n{:catch}\n\t<div>Error loading pokemon</div>\n{/await}\n"
  },
  {
    "path": "registry-template/src/lib/registry/blocks/complex-component/components/pokemon-image.svelte",
    "content": "<script lang=\"ts\">\n\timport { usePokemonImage } from \"$lib/registry/blocks/complex-component/hooks/use-pokemon.svelte\";\n\n\tlet { number, name }: { number: number; name: string } = $props();\n\n\tconst imageUrl = usePokemonImage(number);\n</script>\n\n{#if imageUrl}\n\t<img src={imageUrl} alt={name} />\n{/if}\n"
  },
  {
    "path": "registry-template/src/lib/registry/blocks/complex-component/hooks/use-pokemon.svelte.ts",
    "content": "// Unnecessary hook, but an example of how to add a hook to a custom registry.\n\nexport function usePokemonImage(number: number) {\n\treturn `https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/${number}.png`;\n}\n"
  },
  {
    "path": "registry-template/src/lib/registry/blocks/complex-component/lib/pokemon.ts",
    "content": "import { z } from \"zod\";\n\nexport async function getPokemonList({ limit = 10 }: { limit?: number }) {\n\ttry {\n\t\tconst response = await fetch(`https://pokeapi.co/api/v2/pokemon?limit=${limit}`);\n\t\treturn z\n\t\t\t.object({\n\t\t\t\tresults: z.array(z.object({ name: z.string() })),\n\t\t\t})\n\t\t\t.parse(await response.json());\n\t} catch (error) {\n\t\tconsole.error(error);\n\t\treturn null;\n\t}\n}\n\nexport async function getPokemon(name: string) {\n\ttry {\n\t\tconst response = await fetch(`https://pokeapi.co/api/v2/pokemon/${name}`);\n\t\tif (!response.ok) throw new Error(\"Failed to fetch pokemon\");\n\n\t\treturn z\n\t\t\t.object({\n\t\t\t\tname: z.string(),\n\t\t\t\tid: z.number(),\n\t\t\t\tsprites: z.object({\n\t\t\t\t\tfront_default: z.string(),\n\t\t\t\t}),\n\t\t\t\tstats: z.array(\n\t\t\t\t\tz.object({\n\t\t\t\t\t\tbase_stat: z.number(),\n\t\t\t\t\t\tstat: z.object({\n\t\t\t\t\t\t\tname: z.string(),\n\t\t\t\t\t\t}),\n\t\t\t\t\t})\n\t\t\t\t),\n\t\t\t})\n\t\t\t.parse(await response.json());\n\t} catch (error) {\n\t\tconsole.error(error);\n\t\treturn null;\n\t}\n}\n"
  },
  {
    "path": "registry-template/src/lib/registry/blocks/example-form/example-form.svelte",
    "content": "<script lang=\"ts\">\n\timport * as Card from \"$lib/registry/ui/card/index.js\";\n\timport { Input } from \"$lib/registry/ui/input/index.js\";\n\timport { Label } from \"$lib/registry/ui/label/index.js\";\n\timport { Button } from \"$lib/registry/ui/button/index.js\";\n\timport { Textarea } from \"$lib/registry/ui/textarea/index.js\";\n\timport { z } from \"zod\";\n\timport type { FormEventHandler } from \"svelte/elements\";\n\n\tconst exampleFormSchema = z.object({\n\t\tname: z.string().min(1),\n\t\temail: z.string().email(),\n\t\tmessage: z.string().min(1),\n\t});\n\n\tlet pending = $state(false);\n\tlet formState = $state({\n\t\tdefaultValues: {\n\t\t\tname: \"\",\n\t\t\temail: \"\",\n\t\t\tmessage: \"\",\n\t\t},\n\t\tsuccess: false,\n\t\terrors: {\n\t\t\tname: \"\",\n\t\t\temail: \"\",\n\t\t\tmessage: \"\",\n\t\t},\n\t});\n\n\tconst handleSubmit: FormEventHandler<HTMLFormElement> = (e) => {\n\t\te.preventDefault();\n\t\tpending = true;\n\t\tconst formData = new FormData(e.currentTarget);\n\t\tconst data = Object.fromEntries(formData);\n\t\tconst result = exampleFormSchema.safeParse(data);\n\n\t\tif (!result.success) {\n\t\t\tformState = {\n\t\t\t\t...formState,\n\t\t\t\terrors: Object.fromEntries(\n\t\t\t\t\tObject.entries(result.error.flatten().fieldErrors).map(([key, value]) => [\n\t\t\t\t\t\tkey,\n\t\t\t\t\t\tvalue?.[0] ?? \"\",\n\t\t\t\t\t])\n\t\t\t\t) as Record<keyof typeof formState.errors, string>,\n\t\t\t};\n\t\t\tpending = false;\n\t\t\treturn;\n\t\t}\n\n\t\tpending = false;\n\t};\n</script>\n\n<form onsubmit={handleSubmit} class=\"w-full max-w-sm\">\n\t<Card.Root>\n\t\t<Card.Header>\n\t\t\t<Card.Title>How can we help?</Card.Title>\n\t\t\t<Card.Description>\n\t\t\t\tNeed help with your project? We&apos;re here to assist you.\n\t\t\t</Card.Description>\n\t\t</Card.Header>\n\t\t<Card.Content class=\"flex flex-col gap-6\">\n\t\t\t<div class=\"group/field grid gap-2\" data-invalid={!!formState.errors?.name}>\n\t\t\t\t<Label for=\"name\" class=\"group-data-[invalid=true]/field:text-destructive\">\n\t\t\t\t\tName <span aria-hidden=\"true\">*</span>\n\t\t\t\t</Label>\n\t\t\t\t<Input\n\t\t\t\t\tid=\"name\"\n\t\t\t\t\tname=\"name\"\n\t\t\t\t\tplaceholder=\"Lee Robinson\"\n\t\t\t\t\tclass=\"group-data-[invalid=true]/field:border-destructive focus-visible:group-data-[invalid=true]/field:ring-destructive\"\n\t\t\t\t\tdisabled={pending}\n\t\t\t\t\taria-invalid={!!formState.errors?.name}\n\t\t\t\t\taria-errormessage=\"error-name\"\n\t\t\t\t\tdefaultValue={formState.defaultValues.name}\n\t\t\t\t/>\n\t\t\t\t{#if formState.errors.name}\n\t\t\t\t\t<p id=\"error-name\" class=\"text-destructive text-sm\">\n\t\t\t\t\t\t{formState.errors.name}\n\t\t\t\t\t</p>\n\t\t\t\t{/if}\n\t\t\t</div>\n\t\t\t<div class=\"group/field grid gap-2\" data-invalid={!!formState.errors?.email}>\n\t\t\t\t<Label for=\"email\" class=\"group-data-[invalid=true]/field:text-destructive\">\n\t\t\t\t\tEmail <span aria-hidden=\"true\">*</span>\n\t\t\t\t</Label>\n\t\t\t\t<Input\n\t\t\t\t\tid=\"email\"\n\t\t\t\t\tname=\"email\"\n\t\t\t\t\tplaceholder=\"leerob@acme.com\"\n\t\t\t\t\tclass=\"group-data-[invalid=true]/field:border-destructive focus-visible:group-data-[invalid=true]/field:ring-destructive\"\n\t\t\t\t\tdisabled={pending}\n\t\t\t\t\taria-invalid={!!formState.errors?.email}\n\t\t\t\t\taria-errormessage=\"error-email\"\n\t\t\t\t\tdefaultValue={formState.defaultValues.email}\n\t\t\t\t/>\n\t\t\t\t{#if formState.errors.email}\n\t\t\t\t\t<p id=\"error-email\" class=\"text-destructive text-sm\">\n\t\t\t\t\t\t{formState.errors.email}\n\t\t\t\t\t</p>\n\t\t\t\t{/if}\n\t\t\t</div>\n\t\t\t<div class=\"group/field grid gap-2\" data-invalid={!!formState.errors?.message}>\n\t\t\t\t<Label for=\"message\" class=\"group-data-[invalid=true]/field:text-destructive\">\n\t\t\t\t\tMessage <span aria-hidden=\"true\">*</span>\n\t\t\t\t</Label>\n\t\t\t\t<Textarea\n\t\t\t\t\tid=\"message\"\n\t\t\t\t\tname=\"message\"\n\t\t\t\t\tplaceholder=\"Type your message here...\"\n\t\t\t\t\tclass=\"group-data-[invalid=true]/field:border-destructive focus-visible:group-data-[invalid=true]/field:ring-destructive\"\n\t\t\t\t\tdisabled={pending}\n\t\t\t\t\taria-invalid={!!formState.errors?.message}\n\t\t\t\t\taria-errormessage=\"error-message\"\n\t\t\t\t\tdefaultValue={formState.defaultValues.message}\n\t\t\t\t/>\n\t\t\t\t{#if formState.errors.message}\n\t\t\t\t\t<p id=\"error-message\" class=\"text-destructive text-sm\">\n\t\t\t\t\t\t{formState.errors.message}\n\t\t\t\t\t</p>\n\t\t\t\t{/if}\n\t\t\t</div>\n\t\t</Card.Content>\n\t\t<Card.Footer>\n\t\t\t<Button type=\"submit\" size=\"sm\" disabled={pending}>\n\t\t\t\t{pending ? \"Sending...\" : \"Send Message\"}\n\t\t\t</Button>\n\t\t</Card.Footer>\n\t</Card.Root>\n</form>\n"
  },
  {
    "path": "registry-template/src/lib/registry/blocks/example-with-css/example-card.css",
    "content": ".login-container {\n\t--primary-color: #111111;\n\t--primary-hover: #484747;\n\t--error-color: #ef4444;\n\t--text-color: #1f2937;\n\t--text-light: #6b7280;\n\t--border-color: #e5e7eb;\n\t--background-light: #f9fafb;\n\t--card-shadow: 0 4px 6px -1px rgba(0, 0, 0, 0.1), 0 2px 4px -1px rgba(0, 0, 0, 0.06);\n\n\tdisplay: flex;\n\tjustify-content: center;\n\talign-items: center;\n\tpadding: 1rem;\n\tbackground-color: var(--background-light);\n\twidth: 100%;\n}\n\n.login-card {\n\twidth: 100%;\n\tmax-width: 400px;\n\tpadding: 2rem;\n\tbackground-color: white;\n\tborder-radius: 8px;\n\tbox-shadow: var(--card-shadow);\n}\n\n.login-title {\n\tmargin: 0 0 0.5rem 0;\n\tfont-size: 1.5rem;\n\tfont-weight: 600;\n\tcolor: var(--text-color);\n}\n\n.login-subtitle {\n\tmargin: 0 0 1.5rem 0;\n\tfont-size: 0.875rem;\n\tcolor: var(--text-light);\n}\n\n.login-form {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 1.25rem;\n}\n\n.login-error {\n\tpadding: 0.75rem;\n\tmargin-bottom: 0.5rem;\n\tbackground-color: rgba(239, 68, 68, 0.1);\n\tborder-left: 3px solid var(--error-color);\n\tcolor: var(--error-color);\n\tfont-size: 0.875rem;\n\tborder-radius: 4px;\n}\n\n.form-group {\n\tdisplay: flex;\n\tflex-direction: column;\n\tgap: 0.5rem;\n}\n\n.form-group label {\n\tfont-size: 0.875rem;\n\tfont-weight: 500;\n\tcolor: var(--text-color);\n}\n\n.form-group input {\n\tpadding: 0.75rem;\n\tborder: 1px solid var(--border-color);\n\tborder-radius: 4px;\n\tfont-size: 1rem;\n\ttransition: border-color 0.15s ease;\n}\n\n.form-group input:focus {\n\toutline: none;\n\tborder-color: var(--primary-color);\n\tbox-shadow: 0 0 0 3px rgba(79, 70, 229, 0.1);\n}\n\n.form-group input::placeholder {\n\tcolor: var(--text-light);\n}\n\n.form-actions {\n\tmargin-top: 0.5rem;\n}\n\n.login-button {\n\twidth: 100%;\n\tpadding: 0.75rem;\n\tbackground-color: var(--primary-color);\n\tcolor: white;\n\tborder: none;\n\tborder-radius: 4px;\n\tfont-size: 1rem;\n\tfont-weight: 500;\n\tcursor: pointer;\n\ttransition: background-color 0.15s ease;\n}\n\n.login-button:hover {\n\tbackground-color: var(--primary-hover);\n}\n\n.login-button:focus {\n\toutline: none;\n\tbox-shadow: 0 0 0 3px rgba(79, 70, 229, 0.3);\n}\n\n.form-footer {\n\tdisplay: flex;\n\tjustify-content: center;\n\tmargin-top: 1rem;\n}\n\n.forgot-password {\n\tfont-size: 0.875rem;\n\tcolor: var(--primary-color);\n\ttext-decoration: none;\n}\n\n.forgot-password:hover {\n\ttext-decoration: underline;\n}\n\n@media (max-width: 480px) {\n\t.login-card {\n\t\tpadding: 1.5rem;\n\t}\n}\n"
  },
  {
    "path": "registry-template/src/lib/registry/blocks/example-with-css/example-card.svelte",
    "content": "<script lang=\"ts\">\n\timport \"./example-card.css\";\n</script>\n\n<div class=\"login-container\">\n\t<div class=\"login-card\">\n\t\t<h1 class=\"login-title\">Login</h1>\n\t\t<p class=\"login-subtitle\">Please enter your credentials to continue</p>\n\t\t<form class=\"login-form\">\n\t\t\t<div class=\"form-group\">\n\t\t\t\t<label for=\"field-email\">Email</label>\n\t\t\t\t<input id=\"field-email\" type=\"email\" placeholder=\"Enter your email\" required />\n\t\t\t</div>\n\t\t\t<div class=\"form-group\">\n\t\t\t\t<label for=\"field-password\">Password</label>\n\t\t\t\t<input id=\"field-password\" type=\"password\" placeholder=\"Enter your password\" required />\n\t\t\t</div>\n\t\t\t<div class=\"form-actions\">\n\t\t\t\t<button type=\"submit\" class=\"login-button\"> Sign In </button>\n\t\t\t</div>\n\t\t\t<div class=\"form-footer\">\n\t\t\t\t<a href=\"##\" class=\"forgot-password\"> Forgot password? </a>\n\t\t\t</div>\n\t\t</form>\n\t</div>\n</div>\n"
  },
  {
    "path": "registry-template/src/lib/registry/blocks/hello-world/hello-world.svelte",
    "content": "<h1 class=\"text-2xl font-bold\">Hello world</h1>\n"
  },
  {
    "path": "registry-template/src/lib/registry/ui/button/button.svelte",
    "content": "<script lang=\"ts\" module>\n\timport { tv, type VariantProps } from \"tailwind-variants\";\n\n\texport const buttonVariants = tv({\n\t\tbase: \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n\t\tvariants: {\n\t\t\tvariant: {\n\t\t\t\tdefault: \"bg-primary text-primary-foreground shadow-xs hover:bg-primary/90\",\n\t\t\t\tdestructive:\n\t\t\t\t\t\"bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60\",\n\t\t\t\toutline:\n\t\t\t\t\t\"border bg-background shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-input dark:hover:bg-input/50\",\n\t\t\t\tsecondary: \"bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80\",\n\t\t\t\tghost: \"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50\",\n\t\t\t\tlink: \"text-primary underline-offset-4 hover:underline\",\n\t\t\t},\n\t\t\tsize: {\n\t\t\t\tdefault: \"h-9 px-4 py-2 has-[>svg]:px-3\",\n\t\t\t\tsm: \"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5\",\n\t\t\t\tlg: \"h-10 rounded-md px-6 has-[>svg]:px-4\",\n\t\t\t\ticon: \"size-9\",\n\t\t\t},\n\t\t},\n\t\tdefaultVariants: {\n\t\t\tvariant: \"default\",\n\t\t\tsize: \"default\",\n\t\t},\n\t});\n</script>\n\n<script lang=\"ts\">\n\timport { cn } from \"$lib/utils.js\";\n\timport type { HTMLButtonAttributes } from \"svelte/elements\";\n\timport type { Snippet } from \"svelte\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tvariant,\n\t\tsize,\n\t\tchild,\n\t\tchildren,\n\t\tclass: className,\n\t\t...restProps\n\t}: HTMLButtonAttributes &\n\t\tVariantProps<typeof buttonVariants> & {\n\t\t\tchild?: Snippet<[{ props: Record<string, unknown> }]>;\n\t\t\tref?: HTMLElement | null;\n\t\t} = $props();\n\n\tconst mergedProps = $derived({\n\t\t...restProps,\n\t\tclass: cn(buttonVariants({ variant, size }), className),\n\t\t\"data-slot\": \"button\",\n\t});\n</script>\n\n{#if child}\n\t{@render child({ props: mergedProps })}\n{:else if children}\n\t<button {...mergedProps} bind:this={ref}>\n\t\t{@render children?.()}\n\t</button>\n{/if}\n"
  },
  {
    "path": "registry-template/src/lib/registry/ui/button/index.ts",
    "content": "import Button from \"./button.svelte\";\nexport { buttonVariants } from \"./button.svelte\";\n\nexport { Button, Button as Root };\n"
  },
  {
    "path": "registry-template/src/lib/registry/ui/card/card-action.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet { class: className, children, ...restProps }: HTMLAttributes<HTMLDivElement> = $props();\n</script>\n\n<div\n\tdata-slot=\"card-action\"\n\tclass={cn(\"col-start-2 row-span-2 row-start-1 self-start justify-self-end\", className)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</div>\n"
  },
  {
    "path": "registry-template/src/lib/registry/ui/card/card-content.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet { class: className, children, ...restProps }: HTMLAttributes<HTMLDivElement> = $props();\n</script>\n\n<div data-slot=\"card-content\" class={cn(\"px-6\", className)} {...restProps}>\n\t{@render children?.()}\n</div>\n"
  },
  {
    "path": "registry-template/src/lib/registry/ui/card/card-description.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet { class: className, children, ...restProps }: HTMLAttributes<HTMLParagraphElement> = $props();\n</script>\n\n<div\n\tdata-slot=\"card-description\"\n\tclass={cn(\"text-muted-foreground text-sm\", className)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</div>\n"
  },
  {
    "path": "registry-template/src/lib/registry/ui/card/card-footer.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet { class: className, children, ...restProps }: HTMLAttributes<HTMLDivElement> = $props();\n</script>\n\n<div\n\tdata-slot=\"card-footer\"\n\tclass={cn(\"flex items-center px-6 [.border-t]:pt-6\", className)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</div>\n"
  },
  {
    "path": "registry-template/src/lib/registry/ui/card/card-header.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\tlet { class: className, children, ...restProps }: HTMLAttributes<HTMLDivElement> = $props();\n</script>\n\n<div\n\tdata-slot=\"card-header\"\n\tclass={cn(\n\t\t\"@container/card-header grid auto-rows-min grid-rows-[auto_auto] items-start gap-1.5 px-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6\",\n\t\tclassName\n\t)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</div>\n"
  },
  {
    "path": "registry-template/src/lib/registry/ui/card/card-title.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet { class: className, children, ...restProps }: HTMLAttributes<HTMLHeadingElement> = $props();\n</script>\n\n<div data-slot=\"card-title\" class={cn(\"leading-none font-semibold\", className)} {...restProps}>\n\t{@render children?.()}\n</div>\n"
  },
  {
    "path": "registry-template/src/lib/registry/ui/card/card.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet { class: className, children, ...restProps }: HTMLAttributes<HTMLDivElement> = $props();\n</script>\n\n<div\n\tdata-slot=\"card\"\n\tclass={cn(\n\t\t\"bg-card text-card-foreground flex flex-col gap-6 rounded-xl border py-6 shadow-sm\",\n\t\tclassName\n\t)}\n\t{...restProps}\n>\n\t{@render children?.()}\n</div>\n"
  },
  {
    "path": "registry-template/src/lib/registry/ui/card/index.ts",
    "content": "import Card from \"./card.svelte\";\nimport CardHeader from \"./card-header.svelte\";\nimport CardTitle from \"./card-title.svelte\";\nimport CardDescription from \"./card-description.svelte\";\nimport CardAction from \"./card-action.svelte\";\nimport CardFooter from \"./card-footer.svelte\";\nimport CardContent from \"./card-content.svelte\";\n\nexport {\n\tCard,\n\tCardHeader,\n\tCardTitle,\n\tCardDescription,\n\tCardAction,\n\tCardFooter,\n\tCardContent,\n\tCard as Root,\n\tCardHeader as Header,\n\tCardTitle as Title,\n\tCardDescription as Description,\n\tCardAction as Action,\n\tCardFooter as Footer,\n\tCardContent as Content,\n};\n"
  },
  {
    "path": "registry-template/src/lib/registry/ui/input/index.ts",
    "content": "import Input from \"./input.svelte\";\n\nexport { Input, Input as Root };\n"
  },
  {
    "path": "registry-template/src/lib/registry/ui/input/input.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn } from \"$lib/utils.js\";\n\timport type { HTMLInputAttributes } from \"svelte/elements\";\n\n\tlet { class: className, value = $bindable(), ...restProps }: HTMLInputAttributes = $props();\n</script>\n\n<input\n\tbind:value\n\tdata-slot=\"input\"\n\tclass={cn(\n\t\t\"file:text-foreground placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground dark:bg-input/30 border-input flex h-9 w-full min-w-0 rounded-md border bg-transparent px-3 py-1 text-base shadow-xs transition-[color,box-shadow] outline-none file:inline-flex file:h-7 file:border-0 file:bg-transparent file:text-sm file:font-medium disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n\t\t\"focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px]\",\n\t\t\"aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n\t\tclassName\n\t)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "registry-template/src/lib/registry/ui/label/index.ts",
    "content": "import Label from \"./label.svelte\";\n\nexport { Label, Label as Root };\n"
  },
  {
    "path": "registry-template/src/lib/registry/ui/label/label.svelte",
    "content": "<script lang=\"ts\">\n\timport { Label as LabelPrimitive } from \"bits-ui\";\n\timport { cn } from \"$lib/utils.js\";\n\timport type { ComponentProps } from \"svelte\";\n\n\tlet {\n\t\tref = $bindable(null),\n\t\tclass: className,\n\t\t...restProps\n\t}: ComponentProps<typeof LabelPrimitive.Root> = $props();\n</script>\n\n<LabelPrimitive.Root\n\tdata-slot=\"label\"\n\tclass={cn(\n\t\t\"flex items-center gap-2 text-sm leading-none font-medium select-none group-data-[disabled=true]:pointer-events-none group-data-[disabled=true]:opacity-50 peer-disabled:cursor-not-allowed peer-disabled:opacity-50\",\n\t\tclassName\n\t)}\n\t{...restProps}\n/>\n"
  },
  {
    "path": "registry-template/src/lib/registry/ui/stepper/index.ts",
    "content": "// This is a custom `ui` component that is not a part of the shadcn-svelte registry.\nimport Stepper from \"./stepper.svelte\";\nimport StepperItem from \"./stepper-item.svelte\";\n\nexport { Stepper, StepperItem, Stepper as Root, StepperItem as Item };\n"
  },
  {
    "path": "registry-template/src/lib/registry/ui/stepper/stepper-item.svelte",
    "content": "<!--\nThis is a custom `ui` component that is not a part of the shadcn-svelte registry.\n-->\n\n<script lang=\"ts\">\n\timport { cn } from \"$lib/utils\";\n\timport type { HTMLButtonAttributes } from \"svelte/elements\";\n\n\tlet { class: className, step, ...props }: HTMLButtonAttributes & { step: number } = $props();\n</script>\n\n<button class={cn(\"bg-blue-500\", className)} {...props}> {step} </button>\n"
  },
  {
    "path": "registry-template/src/lib/registry/ui/stepper/stepper.svelte",
    "content": "<!--\nThis is a custom `ui` component that is not a part of the shadcn-svelte registry.\n-->\n\n<script lang=\"ts\">\n\timport { cn } from \"$lib/utils.js\";\n\timport type { HTMLAttributes } from \"svelte/elements\";\n\n\tlet { class: className, children, ...restProps }: HTMLAttributes<HTMLDivElement> = $props();\n</script>\n\n<div class={cn(\"bg-background\", className)} {...restProps}>\n\t{@render children?.()}\n</div>\n"
  },
  {
    "path": "registry-template/src/lib/registry/ui/textarea/index.ts",
    "content": "import Textarea from \"./input.svelte\";\n\nexport { Textarea, Textarea as Root };\n"
  },
  {
    "path": "registry-template/src/lib/registry/ui/textarea/input.svelte",
    "content": "<script lang=\"ts\">\n\timport { cn } from \"$lib/utils.js\";\n\timport type { HTMLTextareaAttributes } from \"svelte/elements\";\n\n\tlet {\n\t\tclass: className,\n\t\tvalue = $bindable(),\n\t\t...restProps\n\t}: Omit<HTMLTextareaAttributes, \"children\"> = $props();\n</script>\n\n<textarea\n\tbind:value\n\tdata-slot=\"input\"\n\tclass={cn(\n\t\t\"border-input placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 flex field-sizing-content min-h-16 w-full rounded-md border bg-transparent px-3 py-2 text-base shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n\t\tclassName\n\t)}\n\t{...restProps}\n></textarea>\n"
  },
  {
    "path": "registry-template/src/lib/utils.ts",
    "content": "import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n\treturn twMerge(clsx(inputs));\n}\n"
  },
  {
    "path": "registry-template/src/routes/+layout.svelte",
    "content": "<script lang=\"ts\">\n\timport \"../app.css\";\n\n\tlet { children } = $props();\n</script>\n\n{@render children()}\n"
  },
  {
    "path": "registry-template/src/routes/+page.svelte",
    "content": "<script lang=\"ts\">\n\timport HelloWorld from \"$lib/registry/blocks/hello-world/hello-world.svelte\";\n\timport ExampleForm from \"$lib/registry/blocks/example-form/example-form.svelte\";\n\timport PokemonPage from \"$lib/registry/blocks/complex-component/+page.svelte\";\n\timport ExampleCard from \"$lib/registry/blocks/example-with-css/example-card.svelte\";\n\n\t// This page displays items from the custom registry.\n\t// You are free to implement this with your design as needed.\n</script>\n\n<div class=\"mx-auto flex min-h-svh max-w-3xl flex-col gap-8 px-4 py-8\">\n\t<header class=\"flex flex-col gap-1\">\n\t\t<h1 class=\"text-3xl font-bold tracking-tight\">Custom Registry</h1>\n\t\t<p class=\"text-muted-foreground\">\n\t\t\tA custom registry for distributing code using shadcn-svelte.\n\t\t</p>\n\t</header>\n\t<main class=\"flex flex-1 flex-col gap-8\">\n\t\t<div class=\"relative flex min-h-[450px] flex-col gap-4 rounded-lg border p-4\">\n\t\t\t<div class=\"flex items-center justify-between\">\n\t\t\t\t<h2 class=\"text-muted-foreground text-sm sm:ps-3\">A simple hello world component</h2>\n\t\t\t</div>\n\t\t\t<div class=\"relative flex min-h-[400px] items-center justify-center\">\n\t\t\t\t<HelloWorld />\n\t\t\t</div>\n\t\t</div>\n\n\t\t<div class=\"relative flex min-h-[450px] flex-col gap-4 rounded-lg border p-4\">\n\t\t\t<div class=\"flex items-center justify-between\">\n\t\t\t\t<h2 class=\"text-muted-foreground text-sm sm:ps-3\">A contact form with Zod validation.</h2>\n\t\t\t</div>\n\t\t\t<div class=\"relative flex min-h-[500px] items-center justify-center\">\n\t\t\t\t<ExampleForm />\n\t\t\t</div>\n\t\t</div>\n\n\t\t<div class=\"relative flex min-h-[450px] flex-col gap-4 rounded-lg border p-4\">\n\t\t\t<div class=\"flex items-center justify-between\">\n\t\t\t\t<h2 class=\"text-muted-foreground text-sm sm:ps-3\">\n\t\t\t\t\tA complex component showing hooks, libs and components.\n\t\t\t\t</h2>\n\t\t\t</div>\n\t\t\t<div class=\"relative flex min-h-[400px] items-center justify-center\">\n\t\t\t\t<PokemonPage />\n\t\t\t</div>\n\t\t</div>\n\n\t\t<div class=\"relative flex min-h-[450px] flex-col gap-4 rounded-lg border p-4\">\n\t\t\t<div class=\"flex items-center justify-between\">\n\t\t\t\t<h2 class=\"text-muted-foreground text-sm sm:ps-3\">A login form with a CSS file.</h2>\n\t\t\t</div>\n\t\t\t<div class=\"relative flex min-h-[400px] items-center justify-center\">\n\t\t\t\t<ExampleCard />\n\t\t\t</div>\n\t\t</div>\n\t</main>\n</div>\n"
  },
  {
    "path": "registry-template/svelte.config.js",
    "content": "import adapter from \"@sveltejs/adapter-auto\";\nimport { vitePreprocess } from \"@sveltejs/vite-plugin-svelte\";\n\n/** @type {import('@sveltejs/kit').Config} */\nconst config = {\n\t// Consult https://svelte.dev/docs/kit/integrations\n\t// for more information about preprocessors\n\tpreprocess: vitePreprocess(),\n\n\tkit: {\n\t\t// adapter-auto only supports some environments, see https://svelte.dev/docs/kit/adapter-auto for a list.\n\t\t// If your environment is not supported, or you settled on a specific environment, switch out the adapter.\n\t\t// See https://svelte.dev/docs/kit/adapters for more information about adapters.\n\t\tadapter: adapter(),\n\t},\n};\n\nexport default config;\n"
  },
  {
    "path": "registry-template/tsconfig.json",
    "content": "{\n\t\"extends\": \"./.svelte-kit/tsconfig.json\",\n\t\"compilerOptions\": {\n\t\t\"allowJs\": true,\n\t\t\"checkJs\": true,\n\t\t\"esModuleInterop\": true,\n\t\t\"forceConsistentCasingInFileNames\": true,\n\t\t\"resolveJsonModule\": true,\n\t\t\"skipLibCheck\": true,\n\t\t\"sourceMap\": true,\n\t\t\"strict\": true,\n\t\t\"moduleResolution\": \"bundler\"\n\t}\n\t// Path aliases are handled by https://svelte.dev/docs/kit/configuration#alias\n\t// except $lib which is handled by https://svelte.dev/docs/kit/configuration#files\n\t//\n\t// If you want to overwrite includes/excludes, make sure to copy over the relevant includes/excludes\n\t// from the referenced tsconfig.json - TypeScript does not merge them in\n}\n"
  },
  {
    "path": "registry-template/vite.config.ts",
    "content": "import tailwindcss from \"@tailwindcss/vite\";\nimport { sveltekit } from \"@sveltejs/kit/vite\";\nimport { defineConfig } from \"vite\";\n\nexport default defineConfig({\n\tplugins: [tailwindcss(), sveltekit()],\n});\n"
  },
  {
    "path": "repro/.gitignore",
    "content": "node_modules\n\n# Output\n.output\n.vercel\n.netlify\n.wrangler\n/.svelte-kit\n/build\n\n# OS\n.DS_Store\nThumbs.db\n\n# Env\n.env\n.env.*\n!.env.example\n!.env.test\n\n# Vite\nvite.config.js.timestamp-*\nvite.config.ts.timestamp-*\n"
  },
  {
    "path": "repro/.npmrc",
    "content": "engine-strict=true\n"
  },
  {
    "path": "repro/README.md",
    "content": "# shadcn-svelte repro template\n\nUse this template for issue reproductions.\n"
  },
  {
    "path": "repro/components.json",
    "content": "{\n\t\"$schema\": \"https://shadcn-svelte.com/schema.json\",\n\t\"tailwind\": {\n\t\t\"css\": \"src/app.css\",\n\t\t\"baseColor\": \"zinc\"\n\t},\n\t\"aliases\": {\n\t\t\"components\": \"$lib/components\",\n\t\t\"utils\": \"$lib/utils\",\n\t\t\"ui\": \"$lib/components/ui\",\n\t\t\"hooks\": \"$lib/hooks\",\n\t\t\"lib\": \"$lib\"\n\t},\n\t\"typescript\": true,\n\t\"registry\": \"http://localhost:5174/registry\",\n\t\"designSystem\": {\n\t\t\"style\": \"nova\",\n\t\t\"iconLibrary\": \"tabler\",\n\t\t\"theme\": \"pink\",\n\t\t\"menuAccent\": \"subtle\",\n\t\t\"menuColor\": \"default\",\n\t\t\"radius\": \"0.45rem\",\n\t\t\"fonts\": [\n\t\t\t{\n\t\t\t\t\"name\": \"font-figtree\",\n\t\t\t\t\"title\": \"Figtree\",\n\t\t\t\t\"type\": \"registry:font\",\n\t\t\t\t\"font\": {\n\t\t\t\t\t\"family\": \"'Figtree Variable', sans-serif\",\n\t\t\t\t\t\"cssImport\": \"@import \\\"@fontsource-variable/figtree/index.css\\\";\",\n\t\t\t\t\t\"variable\": \"--font-sans\",\n\t\t\t\t\t\"dependencies\": [\"@fontsource-variable/figtree\"]\n\t\t\t\t}\n\t\t\t}\n\t\t]\n\t}\n}\n"
  },
  {
    "path": "repro/package.json",
    "content": "{\n\t\"name\": \"repro\",\n\t\"private\": true,\n\t\"version\": \"0.0.1\",\n\t\"type\": \"module\",\n\t\"scripts\": {\n\t\t\"dev\": \"vite dev\",\n\t\t\"build\": \"vite build\",\n\t\t\"preview\": \"vite preview\",\n\t\t\"prepare\": \"svelte-kit sync || echo ''\",\n\t\t\"check\": \"svelte-kit sync && svelte-check --tsconfig ./tsconfig.json\",\n\t\t\"check:watch\": \"svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch\",\n\t\t\"postinstall\": \"pnpm dlx shadcn-svelte@latest add --all --yes --overwrite\"\n\t},\n\t\"devDependencies\": {\n\t\t\"@hugeicons/core-free-icons\": \"^3.1.0\",\n\t\t\"@hugeicons/svelte\": \"^1.0.2\",\n\t\t\"@internationalized/date\": \"^3.10.0\",\n\t\t\"@lucide/svelte\": \"^0.562.0\",\n\t\t\"@sveltejs/adapter-auto\": \"^6.1.0\",\n\t\t\"@sveltejs/kit\": \"2.42.1\",\n\t\t\"@sveltejs/vite-plugin-svelte\": \"^6.2.0\",\n\t\t\"@tabler/icons-svelte\": \"^3.36.0\",\n\t\t\"@tailwindcss/vite\": \"^4.1.13\",\n\t\t\"@tanstack/table-core\": \"^8.21.3\",\n\t\t\"bits-ui\": \"^2.14.4\",\n\t\t\"clsx\": \"^2.1.1\",\n\t\t\"embla-carousel-svelte\": \"^8.6.0\",\n\t\t\"formsnap\": \"^2.0.1\",\n\t\t\"layerchart\": \"2.0.0-next.27\",\n\t\t\"mode-watcher\": \"^1.1.0\",\n\t\t\"paneforge\": \"^1.0.2\",\n\t\t\"phosphor-svelte\": \"^3.0.1\",\n\t\t\"svelte\": \"^5.39.5\",\n\t\t\"svelte-check\": \"^4.3.2\",\n\t\t\"svelte-sonner\": \"^1.0.5\",\n\t\t\"sveltekit-superforms\": \"^2.26.1\",\n\t\t\"tailwind-merge\": \"^3.4.0\",\n\t\t\"tailwind-variants\": \"^3.2.2\",\n\t\t\"tailwindcss\": \"^4.1.13\",\n\t\t\"tw-animate-css\": \"^1.4.0\",\n\t\t\"typescript\": \"^5.9.2\",\n\t\t\"vaul-svelte\": \"1.0.0-next.7\",\n\t\t\"vite\": \"^7.1.7\",\n\t\t\"vite-plugin-devtools-json\": \"^1.0.0\"\n\t},\n\t\"dependencies\": {\n\t\t\"@fontsource-variable/figtree\": \"^5.2.10\"\n\t}\n}\n"
  },
  {
    "path": "repro/src/app.css",
    "content": "@import \"tailwindcss\";\n@import \"tw-animate-css\";\n\n@custom-variant dark (&:is(.dark *));\n\n@import \"@fontsource-variable/figtree/index.css\";\n\n@theme inline {\n\t--font-sans: \"Figtree Variable\", sans-serif;\n\t--font-mono: monospace;\n\t--color-background: var(--background);\n\t--color-foreground: var(--foreground);\n\t--color-card: var(--card);\n\t--color-card-foreground: var(--card-foreground);\n\t--color-popover: var(--popover);\n\t--color-popover-foreground: var(--popover-foreground);\n\t--color-primary: var(--primary);\n\t--color-primary-foreground: var(--primary-foreground);\n\t--color-secondary: var(--secondary);\n\t--color-secondary-foreground: var(--secondary-foreground);\n\t--color-muted: var(--muted);\n\t--color-muted-foreground: var(--muted-foreground);\n\t--color-accent: var(--accent);\n\t--color-accent-foreground: var(--accent-foreground);\n\t--color-destructive: var(--destructive);\n\t--color-destructive-foreground: var(--destructive-foreground);\n\t--color-border: var(--border);\n\t--color-input: var(--input);\n\t--color-ring: var(--ring);\n\t--color-chart-1: var(--chart-1);\n\t--color-chart-2: var(--chart-2);\n\t--color-chart-3: var(--chart-3);\n\t--color-chart-4: var(--chart-4);\n\t--color-chart-5: var(--chart-5);\n\t--color-sidebar: var(--sidebar);\n\t--color-sidebar-foreground: var(--sidebar-foreground);\n\t--color-sidebar-primary: var(--sidebar-primary);\n\t--color-sidebar-primary-foreground: var(--sidebar-primary-foreground);\n\t--color-sidebar-accent: var(--sidebar-accent);\n\t--color-sidebar-accent-foreground: var(--sidebar-accent-foreground);\n\t--color-sidebar-border: var(--sidebar-border);\n\t--color-sidebar-ring: var(--sidebar-ring);\n\t--radius-sm: calc(var(--radius) - 4px);\n\t--radius-md: calc(var(--radius) - 2px);\n\t--radius-lg: var(--radius);\n\t--radius-xl: calc(var(--radius) + 4px);\n\t--radius-2xl: calc(var(--radius) + 8px);\n\t--radius-3xl: calc(var(--radius) + 12px);\n\t--radius-4xl: calc(var(--radius) + 16px);\n}\n\n:root {\n\t--background: oklch(1 0 0);\n\t--foreground: oklch(0.141 0.005 285.823);\n\t--card: oklch(1 0 0);\n\t--card-foreground: oklch(0.141 0.005 285.823);\n\t--popover: oklch(1 0 0);\n\t--popover-foreground: oklch(0.141 0.005 285.823);\n\t--primary: oklch(0.21 0.006 285.885);\n\t--primary-foreground: oklch(0.985 0 0);\n\t--secondary: oklch(0.967 0.001 286.375);\n\t--secondary-foreground: oklch(0.21 0.006 285.885);\n\t--muted: oklch(0.967 0.001 286.375);\n\t--muted-foreground: oklch(0.552 0.016 285.938);\n\t--accent: oklch(0.967 0.001 286.375);\n\t--accent-foreground: oklch(0.21 0.006 285.885);\n\t--destructive: oklch(0.577 0.245 27.325);\n\t--border: oklch(0.92 0.004 286.32);\n\t--input: oklch(0.92 0.004 286.32);\n\t--ring: oklch(0.705 0.015 286.067);\n\t--chart-1: oklch(0.646 0.222 41.116);\n\t--chart-2: oklch(0.6 0.118 184.704);\n\t--chart-3: oklch(0.398 0.07 227.392);\n\t--chart-4: oklch(0.828 0.189 84.429);\n\t--chart-5: oklch(0.769 0.188 70.08);\n\t--radius: 0.625rem;\n\t--sidebar: oklch(0.985 0 0);\n\t--sidebar-foreground: oklch(0.141 0.005 285.823);\n\t--sidebar-primary: oklch(0.21 0.006 285.885);\n\t--sidebar-primary-foreground: oklch(0.985 0 0);\n\t--sidebar-accent: oklch(0.967 0.001 286.375);\n\t--sidebar-accent-foreground: oklch(0.21 0.006 285.885);\n\t--sidebar-border: oklch(0.92 0.004 286.32);\n\t--sidebar-ring: oklch(0.705 0.015 286.067);\n}\n\n.dark {\n\t--background: oklch(0.141 0.005 285.823);\n\t--foreground: oklch(0.985 0 0);\n\t--card: oklch(0.21 0.006 285.885);\n\t--card-foreground: oklch(0.985 0 0);\n\t--popover: oklch(0.21 0.006 285.885);\n\t--popover-foreground: oklch(0.985 0 0);\n\t--primary: oklch(0.92 0.004 286.32);\n\t--primary-foreground: oklch(0.21 0.006 285.885);\n\t--secondary: oklch(0.274 0.006 286.033);\n\t--secondary-foreground: oklch(0.985 0 0);\n\t--muted: oklch(0.274 0.006 286.033);\n\t--muted-foreground: oklch(0.705 0.015 286.067);\n\t--accent: oklch(0.274 0.006 286.033);\n\t--accent-foreground: oklch(0.985 0 0);\n\t--destructive: oklch(0.704 0.191 22.216);\n\t--border: oklch(1 0 0 / 10%);\n\t--input: oklch(1 0 0 / 15%);\n\t--ring: oklch(0.552 0.016 285.938);\n\t--chart-1: oklch(0.488 0.243 264.376);\n\t--chart-2: oklch(0.696 0.17 162.48);\n\t--chart-3: oklch(0.769 0.188 70.08);\n\t--chart-4: oklch(0.627 0.265 303.9);\n\t--chart-5: oklch(0.645 0.246 16.439);\n\t--sidebar: oklch(0.21 0.006 285.885);\n\t--sidebar-foreground: oklch(0.985 0 0);\n\t--sidebar-primary: oklch(0.488 0.243 264.376);\n\t--sidebar-primary-foreground: oklch(0.985 0 0);\n\t--sidebar-accent: oklch(0.274 0.006 286.033);\n\t--sidebar-accent-foreground: oklch(0.985 0 0);\n\t--sidebar-border: oklch(1 0 0 / 10%);\n\t--sidebar-ring: oklch(0.552 0.016 285.938);\n}\n\n@layer base {\n\t* {\n\t\t@apply border-border outline-ring/50;\n\t}\n\tbody {\n\t\t@apply bg-background text-foreground;\n\t}\n}\n\n/* Custom variants */\n@custom-variant data-open {\n\t&:where([data-state=\"open\"]),\n\t&:where([data-open]:not([data-open=\"false\"])) {\n\t\t@slot;\n\t}\n}\n\n@custom-variant data-closed {\n\t&:where([data-state=\"closed\"]),\n\t&:where([data-closed]:not([data-closed=\"false\"])) {\n\t\t@slot;\n\t}\n}\n\n@custom-variant data-checked {\n\t&:where([data-state=\"checked\"]),\n\t&:where([data-checked]:not([data-checked=\"false\"])) {\n\t\t@slot;\n\t}\n}\n\n@custom-variant data-unchecked {\n\t&:where([data-state=\"unchecked\"]),\n\t&:where([data-unchecked]:not([data-unchecked=\"false\"])) {\n\t\t@slot;\n\t}\n}\n\n@custom-variant data-selected {\n\t&:where([data-selected=\"true\"]) {\n\t\t@slot;\n\t}\n}\n\n@custom-variant data-disabled {\n\t&:where([data-disabled=\"true\"]),\n\t&:where([data-disabled]:not([data-disabled=\"false\"])) {\n\t\t@slot;\n\t}\n}\n\n@custom-variant data-active {\n\t&:where([data-state=\"active\"]),\n\t&:where([data-active]:not([data-active=\"false\"])) {\n\t\t@slot;\n\t}\n}\n\n@custom-variant data-horizontal {\n\t&:where([data-orientation=\"horizontal\"]) {\n\t\t@slot;\n\t}\n}\n\n@custom-variant data-vertical {\n\t&:where([data-orientation=\"vertical\"]) {\n\t\t@slot;\n\t}\n}\n\n@utility no-scrollbar {\n\t-ms-overflow-style: none;\n\tscrollbar-width: none;\n\n\t&::-webkit-scrollbar {\n\t\tdisplay: none;\n\t}\n}\n"
  },
  {
    "path": "repro/src/app.d.ts",
    "content": "// See https://svelte.dev/docs/kit/types#app.d.ts\n// for information about these interfaces\ndeclare global {\n\tnamespace App {\n\t\t// interface Error {}\n\t\t// interface Locals {}\n\t\t// interface PageData {}\n\t\t// interface PageState {}\n\t\t// interface Platform {}\n\t}\n}\n\nexport {};\n"
  },
  {
    "path": "repro/src/app.html",
    "content": "<!doctype html>\n<html lang=\"en\">\n\t<head>\n\t\t<meta charset=\"utf-8\" />\n\t\t<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\" />\n\t\t%sveltekit.head%\n\t</head>\n\t<body data-sveltekit-preload-data=\"hover\">\n\t\t<div style=\"display: contents\">%sveltekit.body%</div>\n\t</body>\n</html>\n"
  },
  {
    "path": "repro/src/lib/index.ts",
    "content": "// place files you want to import through the `$lib` alias in this folder.\n"
  },
  {
    "path": "repro/src/lib/utils.ts",
    "content": "import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n\treturn twMerge(clsx(inputs));\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type WithoutChild<T> = T extends { child?: any } ? Omit<T, \"child\"> : T;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport type WithoutChildren<T> = T extends { children?: any } ? Omit<T, \"children\"> : T;\nexport type WithoutChildrenOrChild<T> = WithoutChildren<WithoutChild<T>>;\nexport type WithElementRef<T, U extends HTMLElement = HTMLElement> = T & { ref?: U | null };\n"
  },
  {
    "path": "repro/src/routes/+layout.svelte",
    "content": "<script lang=\"ts\">\n\timport \"../app.css\";\n\timport favicon from \"$lib/assets/favicon.svg\";\n\timport { ModeWatcher } from \"mode-watcher\";\n\n\tlet { children } = $props();\n</script>\n\n<svelte:head>\n\t<link rel=\"icon\" href={favicon} />\n</svelte:head>\n\n<ModeWatcher />\n{@render children?.()}\n"
  },
  {
    "path": "repro/src/routes/+page.svelte",
    "content": "<script lang=\"ts\">\n\timport { Button } from \"$lib/components/ui/button\";\n\timport { LightSwitch } from \"$lib/components/ui/light-switch\";\n</script>\n\n<header class=\"sticky top-0 flex w-full items-center justify-end p-4\">\n\t<LightSwitch variant=\"outline\" size=\"icon\" />\n</header>\n\n<main class=\"flex h-screen flex-col place-items-center justify-center gap-2\">\n\t<h1 class=\"text-4xl font-bold\">shadcn-svelte repro template</h1>\n\t<p class=\"text-muted-foreground\">\n\t\tImport and use components here to create a minimal reproduction of your issue.\n\t</p>\n\t<Button variant=\"outline\" href=\"https://github.com/huntabyte/shadcn-svelte\">GitHub</Button>\n</main>\n"
  },
  {
    "path": "repro/static/robots.txt",
    "content": "# allow crawling everything by default\nUser-agent: *\nDisallow:\n"
  },
  {
    "path": "repro/svelte.config.js",
    "content": "import adapter from \"@sveltejs/adapter-auto\";\nimport { vitePreprocess } from \"@sveltejs/vite-plugin-svelte\";\n\n/** @type {import('@sveltejs/kit').Config} */\nconst config = {\n\tpreprocess: vitePreprocess(),\n\n\tkit: {\n\t\tadapter: adapter(),\n\t},\n};\n\nexport default config;\n"
  },
  {
    "path": "repro/tsconfig.json",
    "content": "{\n\t\"extends\": \"./.svelte-kit/tsconfig.json\",\n\t\"compilerOptions\": {\n\t\t\"allowJs\": true,\n\t\t\"checkJs\": true,\n\t\t\"esModuleInterop\": true,\n\t\t\"forceConsistentCasingInFileNames\": true,\n\t\t\"resolveJsonModule\": true,\n\t\t\"skipLibCheck\": true,\n\t\t\"sourceMap\": true,\n\t\t\"strict\": true,\n\t\t\"moduleResolution\": \"bundler\"\n\t}\n}\n"
  },
  {
    "path": "repro/vite.config.ts",
    "content": "import tailwindcss from \"@tailwindcss/vite\";\nimport { sveltekit } from \"@sveltejs/kit/vite\";\nimport { defineConfig } from \"vite\";\nimport devtoolsJson from \"vite-plugin-devtools-json\";\n\nexport default defineConfig({\n\tplugins: [tailwindcss(), sveltekit(), devtoolsJson()],\n});\n"
  }
]