[
  {
    "path": ".editorconfig",
    "content": "# editorconfig.org\nroot = true\n\n[*]\nindent_style = space\nindent_size = 2\nend_of_line = lf\ncharset = utf-8\ntrim_trailing_whitespace = true\ninsert_final_newline = true\n\n[*.md]\ntrim_trailing_whitespace = false\n\n"
  },
  {
    "path": ".eslintrc.js",
    "content": "module.exports = {\n  root: true,\n  extends: ['custom'],\n  settings: {\n    next: {\n      rootDir: ['apps/docs/*/'],\n    },\n  },\n}\n"
  },
  {
    "path": ".gitignore",
    "content": "# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.\n\n# dependencies\nnode_modules\n.pnp\n.pnp.js\n\n# testing\ncoverage\n\n# next.js\n.next/\nout/\n\n# production\nbuild\n\n# misc\n.DS_Store\n*.pem\n\n# debug\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n.pnpm-debug.log*\n\n# local env files\n.env*.local\n\n# vercel\n.vercel\n\n# typescript\n*.tsbuildinfo\nnext-env.d.ts\n\n# contentlayer\n.contentlayer\nstorybook-static/\n\n# turbo\n.turbo\n\n#ui\ndist/"
  },
  {
    "path": ".husky/pre-commit",
    "content": "#!/usr/bin/env sh\n. \"$(dirname -- \"$0\")/_/husky.sh\"\n\nnpx lint-staged\n"
  },
  {
    "path": ".npmrc",
    "content": "auto-install-peers=true\nlegacy-peer-deps=true\nnode-linker=hoisted"
  },
  {
    "path": ".vscode/settings.json",
    "content": "{\n  \"prettier.enable\": false,\n  \"editor.formatOnSave\": false,\n  \"editor.codeActionsOnSave\": {\n    \"source.fixAll.eslint\": \"explicit\",\n    \"source.organizeImports\": \"never\"\n  },\n  // The following is optional.\n  // It's better to put under project setting `.vscode/settings.json`\n  // to avoid conflicts with working with different eslint configs\n  // that does not support all formats.\n  \"eslint.validate\": [\n    \"javascript\",\n    \"javascriptreact\",\n    \"typescript\",\n    \"typescriptreact\",\n    // \"markdown\",\n    \"json\",\n    \"yaml\"\n  ],\n  \"files.associations\": {\n    \"*.mdx\": \"mdx\"\n  },\n  \"tailwindCSS.experimental.classRegex\": [\n    [\n      \"cva\\\\(([^)]*)\\\\)\",\n      \"[\\\"'`]([^\\\"'`]*).*?[\\\"'`]\"\n    ],\n    [\n      \"cx\\\\(([^)]*)\\\\)\",\n      \"(?:'|\\\"|`)([^']*)(?:'|\\\"|`)\"\n    ]\n  ],\n  \"typescript.tsdk\": \"node_modules/typescript/lib\"\n}\n"
  },
  {
    "path": "LICENSE.md",
    "content": "MIT License\n\nCopyright (c) 2024 Jonathan Hutchison\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": "apps/docs/.eslintrc.js",
    "content": "// eslint-disable-next-line @typescript-eslint/no-var-requires\nconst path = require('path')\n\nmodule.exports = {\n  root: true,\n  extends: ['custom'],\n  rules: {\n    '@next/next/no-html-link-for-pages': 'off',\n  },\n  settings: {\n    tailwindcss: {\n      config: path.join(__dirname, './tailwind.config.js'),\n    },\n  },\n  overrides: [\n    // MDX\n    {\n      files: ['*.md', '*.mdx'],\n      extends: ['plugin:mdx/recommended'],\n    },\n  ],\n  ignorePatterns: ['registry/**/*.tsx'],\n}\n"
  },
  {
    "path": "apps/docs/.gitignore",
    "content": ".vscode\n.env\n\n# contentlayer\n.contentlayer"
  },
  {
    "path": "apps/docs/README.md",
    "content": "This is a [Next.js](https://nextjs.org/) project bootstrapped with [`create-next-app`](https://github.com/vercel/next.js/tree/canary/packages/create-next-app).\n\n## Getting Started\n\nFirst, run the development server:\n\n```bash\nnpm run dev\n# or\nyarn dev\n# or\npnpm dev\n```\n\nOpen [http://localhost:3000](http://localhost:3000) with your browser to see the result.\n\nYou can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file.\n\n[API routes](https://nextjs.org/docs/api-routes/introduction) can be accessed on [http://localhost:3000/api/hello](http://localhost:3000/api/hello). This endpoint can be edited in `pages/api/hello.ts`.\n\nThe `pages/api` directory is mapped to `/api/*`. Files in this directory are treated as [API routes](https://nextjs.org/docs/api-routes/introduction) instead of React pages.\n\nThis project uses [`next/font`](https://nextjs.org/docs/basic-features/font-optimization) to automatically optimize and load Inter, a custom Google Font.\n\n## Learn More\n\nTo learn more about Next.js, take a look at the following resources:\n\n- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API.\n- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial.\n\nYou can check out [the Next.js GitHub repository](https://github.com/vercel/next.js/) - your feedback and contributions are welcome!\n\n## Deploy on Vercel\n\nThe easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js.\n\nCheck out our [Next.js deployment documentation](https://nextjs.org/docs/deployment) for more details.\n"
  },
  {
    "path": "apps/docs/__registry__/index.tsx",
    "content": "/* eslint-disable prettier/prettier */\n// @ts-nocheck\n// This file is autogenerated by scripts/build-registry.ts\n// Do not edit this file directly.\nimport * as React from \"react\"\n\ntype ComponentRegistry = Record<\n  string,\n  Record<\n    string,\n    {\n      name: string\n      story: string\n      component: string\n      file: string\n    }\n  >\n>\n\nexport const Index: ComponentRegistry = {\n  \"breadcrumbs\": {\n    \"default\": {\n      name: \"breadcrumbs-default\",\n      story: \"default\",\n      component: React.lazy(() => import(\"@/registry/breadcrumbs/default\")),\n      file: \"registry/breadcrumbs/default.tsx\"\n    },\n  },\n  \"button\": {\n    \"default\": {\n      name: \"button-default\",\n      story: \"default\",\n      component: React.lazy(() => import(\"@/registry/button/default\")),\n      file: \"registry/button/default.tsx\"\n    },\n    \"disabled\": {\n      name: \"button-disabled\",\n      story: \"disabled\",\n      component: React.lazy(() => import(\"@/registry/button/disabled\")),\n      file: \"registry/button/disabled.tsx\"\n    },\n    \"sizes\": {\n      name: \"button-sizes\",\n      story: \"sizes\",\n      component: React.lazy(() => import(\"@/registry/button/sizes\")),\n      file: \"registry/button/sizes.tsx\"\n    },\n    \"theme\": {\n      name: \"button-theme\",\n      story: \"theme\",\n      component: React.lazy(() => import(\"@/registry/button/theme\")),\n      file: \"registry/button/theme.tsx\"\n    },\n  },\n  \"calendar\": {\n    \"default\": {\n      name: \"calendar-default\",\n      story: \"default\",\n      component: React.lazy(() => import(\"@/registry/calendar/default\")),\n      file: \"registry/calendar/default.tsx\"\n    },\n  },\n  \"checkbox\": {\n    \"default\": {\n      name: \"checkbox-default\",\n      story: \"default\",\n      component: React.lazy(() => import(\"@/registry/checkbox/default\")),\n      file: \"registry/checkbox/default.tsx\"\n    },\n    \"disabled\": {\n      name: \"checkbox-disabled\",\n      story: \"disabled\",\n      component: React.lazy(() => import(\"@/registry/checkbox/disabled\")),\n      file: \"registry/checkbox/disabled.tsx\"\n    },\n    \"sizes\": {\n      name: \"checkbox-sizes\",\n      story: \"sizes\",\n      component: React.lazy(() => import(\"@/registry/checkbox/sizes\")),\n      file: \"registry/checkbox/sizes.tsx\"\n    },\n  },\n  \"checkbox-group\": {\n    \"default\": {\n      name: \"checkbox-group-default\",\n      story: \"default\",\n      component: React.lazy(() => import(\"@/registry/checkbox-group/default\")),\n      file: \"registry/checkbox-group/default.tsx\"\n    },\n    \"disabled\": {\n      name: \"checkbox-group-disabled\",\n      story: \"disabled\",\n      component: React.lazy(() => import(\"@/registry/checkbox-group/disabled\")),\n      file: \"registry/checkbox-group/disabled.tsx\"\n    },\n    \"horizontal\": {\n      name: \"checkbox-group-horizontal\",\n      story: \"horizontal\",\n      component: React.lazy(() => import(\"@/registry/checkbox-group/horizontal\")),\n      file: \"registry/checkbox-group/horizontal.tsx\"\n    },\n  },\n  \"combobox\": {\n    \"default\": {\n      name: \"combobox-default\",\n      story: \"default\",\n      component: React.lazy(() => import(\"@/registry/combobox/default\")),\n      file: \"registry/combobox/default.tsx\"\n    },\n    \"disabled-keys\": {\n      name: \"combobox-disabled-keys\",\n      story: \"disabled-keys\",\n      component: React.lazy(() => import(\"@/registry/combobox/disabled-keys\")),\n      file: \"registry/combobox/disabled-keys.tsx\"\n    },\n    \"disabled\": {\n      name: \"combobox-disabled\",\n      story: \"disabled\",\n      component: React.lazy(() => import(\"@/registry/combobox/disabled\")),\n      file: \"registry/combobox/disabled.tsx\"\n    },\n    \"with-button\": {\n      name: \"combobox-with-button\",\n      story: \"with-button\",\n      component: React.lazy(() => import(\"@/registry/combobox/with-button\")),\n      file: \"registry/combobox/with-button.tsx\"\n    },\n  },\n  \"date-field\": {\n    \"default\": {\n      name: \"date-field-default\",\n      story: \"default\",\n      component: React.lazy(() => import(\"@/registry/date-field/default\")),\n      file: \"registry/date-field/default.tsx\"\n    },\n    \"disabled\": {\n      name: \"date-field-disabled\",\n      story: \"disabled\",\n      component: React.lazy(() => import(\"@/registry/date-field/disabled\")),\n      file: \"registry/date-field/disabled.tsx\"\n    },\n  },\n  \"date-input\": {\n    \"default\": {\n      name: \"date-input-default\",\n      story: \"default\",\n      component: React.lazy(() => import(\"@/registry/date-input/default\")),\n      file: \"registry/date-input/default.tsx\"\n    },\n    \"sizes\": {\n      name: \"date-input-sizes\",\n      story: \"sizes\",\n      component: React.lazy(() => import(\"@/registry/date-input/sizes\")),\n      file: \"registry/date-input/sizes.tsx\"\n    },\n  },\n  \"date-picker\": {\n    \"default\": {\n      name: \"date-picker-default\",\n      story: \"default\",\n      component: React.lazy(() => import(\"@/registry/date-picker/default\")),\n      file: \"registry/date-picker/default.tsx\"\n    },\n    \"disabled\": {\n      name: \"date-picker-disabled\",\n      story: \"disabled\",\n      component: React.lazy(() => import(\"@/registry/date-picker/disabled\")),\n      file: \"registry/date-picker/disabled.tsx\"\n    },\n  },\n  \"date-range-picker\": {\n    \"default\": {\n      name: \"date-range-picker-default\",\n      story: \"default\",\n      component: React.lazy(() => import(\"@/registry/date-range-picker/default\")),\n      file: \"registry/date-range-picker/default.tsx\"\n    },\n    \"disabled\": {\n      name: \"date-range-picker-disabled\",\n      story: \"disabled\",\n      component: React.lazy(() => import(\"@/registry/date-range-picker/disabled\")),\n      file: \"registry/date-range-picker/disabled.tsx\"\n    },\n  },\n  \"grid-list\": {\n    \"default\": {\n      name: \"grid-list-default\",\n      story: \"default\",\n      component: React.lazy(() => import(\"@/registry/grid-list/default\")),\n      file: \"registry/grid-list/default.tsx\"\n    },\n  },\n  \"icon-button\": {\n    \"default\": {\n      name: \"icon-button-default\",\n      story: \"default\",\n      component: React.lazy(() => import(\"@/registry/icon-button/default\")),\n      file: \"registry/icon-button/default.tsx\"\n    },\n    \"disabled\": {\n      name: \"icon-button-disabled\",\n      story: \"disabled\",\n      component: React.lazy(() => import(\"@/registry/icon-button/disabled\")),\n      file: \"registry/icon-button/disabled.tsx\"\n    },\n    \"sizes\": {\n      name: \"icon-button-sizes\",\n      story: \"sizes\",\n      component: React.lazy(() => import(\"@/registry/icon-button/sizes\")),\n      file: \"registry/icon-button/sizes.tsx\"\n    },\n    \"theme\": {\n      name: \"icon-button-theme\",\n      story: \"theme\",\n      component: React.lazy(() => import(\"@/registry/icon-button/theme\")),\n      file: \"registry/icon-button/theme.tsx\"\n    },\n  },\n  \"input\": {\n    \"default\": {\n      name: \"input-default\",\n      story: \"default\",\n      component: React.lazy(() => import(\"@/registry/input/default\")),\n      file: \"registry/input/default.tsx\"\n    },\n    \"disabled\": {\n      name: \"input-disabled\",\n      story: \"disabled\",\n      component: React.lazy(() => import(\"@/registry/input/disabled\")),\n      file: \"registry/input/disabled.tsx\"\n    },\n    \"sizes\": {\n      name: \"input-sizes\",\n      story: \"sizes\",\n      component: React.lazy(() => import(\"@/registry/input/sizes\")),\n      file: \"registry/input/sizes.tsx\"\n    },\n  },\n  \"label\": {\n    \"default\": {\n      name: \"label-default\",\n      story: \"default\",\n      component: React.lazy(() => import(\"@/registry/label/default\")),\n      file: \"registry/label/default.tsx\"\n    },\n  },\n  \"menu\": {\n    \"as-checkbox\": {\n      name: \"menu-as-checkbox\",\n      story: \"as-checkbox\",\n      component: React.lazy(() => import(\"@/registry/menu/as-checkbox\")),\n      file: \"registry/menu/as-checkbox.tsx\"\n    },\n    \"as-radio\": {\n      name: \"menu-as-radio\",\n      story: \"as-radio\",\n      component: React.lazy(() => import(\"@/registry/menu/as-radio\")),\n      file: \"registry/menu/as-radio.tsx\"\n    },\n    \"default\": {\n      name: \"menu-default\",\n      story: \"default\",\n      component: React.lazy(() => import(\"@/registry/menu/default\")),\n      file: \"registry/menu/default.tsx\"\n    },\n    \"disabled\": {\n      name: \"menu-disabled\",\n      story: \"disabled\",\n      component: React.lazy(() => import(\"@/registry/menu/disabled\")),\n      file: \"registry/menu/disabled.tsx\"\n    },\n    \"with-sections\": {\n      name: \"menu-with-sections\",\n      story: \"with-sections\",\n      component: React.lazy(() => import(\"@/registry/menu/with-sections\")),\n      file: \"registry/menu/with-sections.tsx\"\n    },\n  },\n  \"meter\": {\n    \"default\": {\n      name: \"meter-default\",\n      story: \"default\",\n      component: React.lazy(() => import(\"@/registry/meter/default\")),\n      file: \"registry/meter/default.tsx\"\n    },\n  },\n  \"modal\": {\n    \"default\": {\n      name: \"modal-default\",\n      story: \"default\",\n      component: React.lazy(() => import(\"@/registry/modal/default\")),\n      file: \"registry/modal/default.tsx\"\n    },\n    \"dismissable-false\": {\n      name: \"modal-dismissable-false\",\n      story: \"dismissable-false\",\n      component: React.lazy(() => import(\"@/registry/modal/dismissable-false\")),\n      file: \"registry/modal/dismissable-false.tsx\"\n    },\n    \"set-autofocus\": {\n      name: \"modal-set-autofocus\",\n      story: \"set-autofocus\",\n      component: React.lazy(() => import(\"@/registry/modal/set-autofocus\")),\n      file: \"registry/modal/set-autofocus.tsx\"\n    },\n    \"sizes\": {\n      name: \"modal-sizes\",\n      story: \"sizes\",\n      component: React.lazy(() => import(\"@/registry/modal/sizes\")),\n      file: \"registry/modal/sizes.tsx\"\n    },\n  },\n  \"number-field\": {\n    \"default\": {\n      name: \"number-field-default\",\n      story: \"default\",\n      component: React.lazy(() => import(\"@/registry/number-field/default\")),\n      file: \"registry/number-field/default.tsx\"\n    },\n    \"disabled\": {\n      name: \"number-field-disabled\",\n      story: \"disabled\",\n      component: React.lazy(() => import(\"@/registry/number-field/disabled\")),\n      file: \"registry/number-field/disabled.tsx\"\n    },\n    \"with-mobile-stepper\": {\n      name: \"number-field-with-mobile-stepper\",\n      story: \"with-mobile-stepper\",\n      component: React.lazy(() => import(\"@/registry/number-field/with-mobile-stepper\")),\n      file: \"registry/number-field/with-mobile-stepper.tsx\"\n    },\n    \"with-stepper\": {\n      name: \"number-field-with-stepper\",\n      story: \"with-stepper\",\n      component: React.lazy(() => import(\"@/registry/number-field/with-stepper\")),\n      file: \"registry/number-field/with-stepper.tsx\"\n    },\n  },\n  \"progress-bar\": {\n    \"default\": {\n      name: \"progress-bar-default\",\n      story: \"default\",\n      component: React.lazy(() => import(\"@/registry/progress-bar/default\")),\n      file: \"registry/progress-bar/default.tsx\"\n    },\n  },\n  \"radio\": {\n    \"default\": {\n      name: \"radio-default\",\n      story: \"default\",\n      component: React.lazy(() => import(\"@/registry/radio/default\")),\n      file: \"registry/radio/default.tsx\"\n    },\n    \"disabled\": {\n      name: \"radio-disabled\",\n      story: \"disabled\",\n      component: React.lazy(() => import(\"@/registry/radio/disabled\")),\n      file: \"registry/radio/disabled.tsx\"\n    },\n    \"sizes\": {\n      name: \"radio-sizes\",\n      story: \"sizes\",\n      component: React.lazy(() => import(\"@/registry/radio/sizes\")),\n      file: \"registry/radio/sizes.tsx\"\n    },\n  },\n  \"radio-group\": {\n    \"default\": {\n      name: \"radio-group-default\",\n      story: \"default\",\n      component: React.lazy(() => import(\"@/registry/radio-group/default\")),\n      file: \"registry/radio-group/default.tsx\"\n    },\n    \"disabled\": {\n      name: \"radio-group-disabled\",\n      story: \"disabled\",\n      component: React.lazy(() => import(\"@/registry/radio-group/disabled\")),\n      file: \"registry/radio-group/disabled.tsx\"\n    },\n    \"horizontal\": {\n      name: \"radio-group-horizontal\",\n      story: \"horizontal\",\n      component: React.lazy(() => import(\"@/registry/radio-group/horizontal\")),\n      file: \"registry/radio-group/horizontal.tsx\"\n    },\n  },\n  \"range-calendar\": {\n    \"default\": {\n      name: \"range-calendar-default\",\n      story: \"default\",\n      component: React.lazy(() => import(\"@/registry/range-calendar/default\")),\n      file: \"registry/range-calendar/default.tsx\"\n    },\n  },\n  \"search-field\": {\n    \"default\": {\n      name: \"search-field-default\",\n      story: \"default\",\n      component: React.lazy(() => import(\"@/registry/search-field/default\")),\n      file: \"registry/search-field/default.tsx\"\n    },\n    \"with-clear-button\": {\n      name: \"search-field-with-clear-button\",\n      story: \"with-clear-button\",\n      component: React.lazy(() => import(\"@/registry/search-field/with-clear-button\")),\n      file: \"registry/search-field/with-clear-button.tsx\"\n    },\n  },\n  \"select\": {\n    \"default\": {\n      name: \"select-default\",\n      story: \"default\",\n      component: React.lazy(() => import(\"@/registry/select/default\")),\n      file: \"registry/select/default.tsx\"\n    },\n    \"disabled\": {\n      name: \"select-disabled\",\n      story: \"disabled\",\n      component: React.lazy(() => import(\"@/registry/select/disabled\")),\n      file: \"registry/select/disabled.tsx\"\n    },\n  },\n  \"slider\": {\n    \"default\": {\n      name: \"slider-default\",\n      story: \"default\",\n      component: React.lazy(() => import(\"@/registry/slider/default\")),\n      file: \"registry/slider/default.tsx\"\n    },\n    \"vertical\": {\n      name: \"slider-vertical\",\n      story: \"vertical\",\n      component: React.lazy(() => import(\"@/registry/slider/vertical\")),\n      file: \"registry/slider/vertical.tsx\"\n    },\n  },\n  \"switch\": {\n    \"alignment\": {\n      name: \"switch-alignment\",\n      story: \"alignment\",\n      component: React.lazy(() => import(\"@/registry/switch/alignment\")),\n      file: \"registry/switch/alignment.tsx\"\n    },\n    \"default\": {\n      name: \"switch-default\",\n      story: \"default\",\n      component: React.lazy(() => import(\"@/registry/switch/default\")),\n      file: \"registry/switch/default.tsx\"\n    },\n    \"disabled\": {\n      name: \"switch-disabled\",\n      story: \"disabled\",\n      component: React.lazy(() => import(\"@/registry/switch/disabled\")),\n      file: \"registry/switch/disabled.tsx\"\n    },\n    \"sizes\": {\n      name: \"switch-sizes\",\n      story: \"sizes\",\n      component: React.lazy(() => import(\"@/registry/switch/sizes\")),\n      file: \"registry/switch/sizes.tsx\"\n    },\n  },\n  \"tabs\": {\n    \"default\": {\n      name: \"tabs-default\",\n      story: \"default\",\n      component: React.lazy(() => import(\"@/registry/tabs/default\")),\n      file: \"registry/tabs/default.tsx\"\n    },\n    \"disabled-keys\": {\n      name: \"tabs-disabled-keys\",\n      story: \"disabled-keys\",\n      component: React.lazy(() => import(\"@/registry/tabs/disabled-keys\")),\n      file: \"registry/tabs/disabled-keys.tsx\"\n    },\n    \"disabled\": {\n      name: \"tabs-disabled\",\n      story: \"disabled\",\n      component: React.lazy(() => import(\"@/registry/tabs/disabled\")),\n      file: \"registry/tabs/disabled.tsx\"\n    },\n    \"vertical\": {\n      name: \"tabs-vertical\",\n      story: \"vertical\",\n      component: React.lazy(() => import(\"@/registry/tabs/vertical\")),\n      file: \"registry/tabs/vertical.tsx\"\n    },\n  },\n  \"text-field\": {\n    \"default\": {\n      name: \"text-field-default\",\n      story: \"default\",\n      component: React.lazy(() => import(\"@/registry/text-field/default\")),\n      file: \"registry/text-field/default.tsx\"\n    },\n    \"disabled\": {\n      name: \"text-field-disabled\",\n      story: \"disabled\",\n      component: React.lazy(() => import(\"@/registry/text-field/disabled\")),\n      file: \"registry/text-field/disabled.tsx\"\n    },\n    \"with-error\": {\n      name: \"text-field-with-error\",\n      story: \"with-error\",\n      component: React.lazy(() => import(\"@/registry/text-field/with-error\")),\n      file: \"registry/text-field/with-error.tsx\"\n    },\n  },\n  \"tooltip\": {\n    \"default\": {\n      name: \"tooltip-default\",\n      story: \"default\",\n      component: React.lazy(() => import(\"@/registry/tooltip/default\")),\n      file: \"registry/tooltip/default.tsx\"\n    },\n    \"placement\": {\n      name: \"tooltip-placement\",\n      story: \"placement\",\n      component: React.lazy(() => import(\"@/registry/tooltip/placement\")),\n      file: \"registry/tooltip/placement.tsx\"\n    },\n  },\n};\n"
  },
  {
    "path": "apps/docs/app/changelog/layout.tsx",
    "content": "import {\n  allChangelogDocuments,\n  allComponentDocuments,\n  allGeneralDocuments,\n} from 'contentlayer/generated'\nimport { notFound } from 'next/navigation'\n\nimport JumpToContentMenu from '@/components/docs/jump-to-content-menu'\nimport LinkList from '@/components/link-list'\nimport Navigation from '@/components/navigation'\n\nconst sortedComponents = allComponentDocuments\n  .filter((doc) => doc.isComponent === true)\n  .sort((a, b) => a.title.localeCompare(b.title))\n  .map((doc) => ({\n    isComing: doc?.isComing || false,\n    isWip: doc?.isWip || false,\n    slug: doc.slug,\n    title: doc.title,\n  }))\n\nconst sortedDocuments = [...allGeneralDocuments, ...allChangelogDocuments]\n  .sort((a, b) => a.order - b.order)\n  .map((doc) => ({\n    isNew: 'isNew' in doc ? doc.isNew : false,\n    slug: doc.slug,\n    title: doc.title,\n  }))\n\nexport default async function DocsLayout({\n  children,\n}: {\n  children: React.ReactNode\n}) {\n  const post = allChangelogDocuments[0]\n\n  if (!post) {\n    notFound()\n  }\n\n  return (\n    <div className=\"container mx-auto h-full px-4\">\n      <JumpToContentMenu toc={post.toc} />\n      <Navigation\n        gettingStartedList={sortedDocuments}\n        componentList={sortedComponents}\n      />\n      <aside className=\"fixed top-0 hidden h-full shrink-0 border-r pt-14 dark:border-slate-800 md:w-56 lg:block\">\n        <nav\n          className=\"-ml-3 h-full overflow-y-auto py-10 pl-3\"\n          id=\"site-navigation\"\n          tabIndex={-1}\n        >\n          <div className=\"mb-4\">\n            <h4 className=\"text-base font-semibold text-slate-900 dark:text-white\">\n              Getting Started\n            </h4>\n            <div className=\"mt-3 pr-3\">\n              <LinkList list={sortedDocuments} />\n            </div>\n          </div>\n          <div>\n            <h4 className=\"text-base font-semibold text-slate-900 dark:text-white\">\n              Components\n            </h4>\n            <div className=\"mt-3 pr-3\">\n              <LinkList list={sortedComponents} />\n            </div>\n          </div>\n        </nav>\n      </aside>\n      <div className=\"pt-16 lg:ml-56\">\n        <main className=\"flex\" id=\"page-content\" tabIndex={-1}>\n          {children}\n          {/* <Footer /> */}\n        </main>\n      </div>\n    </div>\n  )\n}\n"
  },
  {
    "path": "apps/docs/app/changelog/page.tsx",
    "content": "import * as React from 'react'\n\nimport { allChangelogDocuments } from 'contentlayer/generated'\nimport { type Metadata, type ResolvingMetadata } from 'next'\nimport { notFound } from 'next/navigation'\n\nimport Markdown from '@/components/docs/markdown'\nimport PageToc from '@/components/page-toc'\n\nexport function generateStaticParams() {\n  return allChangelogDocuments\n}\n\nexport async function generateMetadata(\n  _,\n  parent: ResolvingMetadata,\n): Promise<Metadata> {\n  const post = allChangelogDocuments[0]\n\n  if (!post) {\n    notFound()\n  }\n\n  const parentMeta = await parent\n\n  return {\n    title: post.title,\n    description: post.description || parentMeta?.openGraph?.description,\n    openGraph: {\n      siteName: parentMeta?.openGraph?.siteName,\n      title: post.title || parentMeta?.openGraph?.title,\n      description: post.description || parentMeta?.openGraph?.description,\n      images: parentMeta?.openGraph?.images || [],\n      url: post.slug,\n      locale: parentMeta?.openGraph?.locale,\n    },\n    twitter: {\n      title: post.title || parentMeta?.twitter?.title,\n      description: post.description || parentMeta?.twitter?.description || '',\n      images: parentMeta?.twitter?.images || [],\n      card: parentMeta?.twitter?.card,\n    },\n    alternates: {\n      canonical: '/changelog',\n    },\n  }\n}\n\nexport default function ChangelogPage() {\n  const post = allChangelogDocuments[0]\n\n  if (!post) {\n    notFound()\n  }\n\n  return (\n    <>\n      <div className=\"order-2 hidden shrink-0 lg:w-1/4 xl:block\">\n        <div className=\"fixed top-0 h-screen pt-16\">\n          <div className=\"h-full overflow-y-auto\">\n            <div className=\"my-12 px-4 md:pl-8\">\n              <PageToc headings={post.toc} />\n            </div>\n          </div>\n        </div>\n      </div>\n      <article className=\"my-12 w-full\">\n        <div className=\"prose prose-slate order-1 mx-auto dark:prose-invert\">\n          <h1>{post.title}</h1>\n          <p className=\"lead\">{post.description}</p>\n          <Markdown doc={post} />\n        </div>\n      </article>\n    </>\n  )\n}\n"
  },
  {
    "path": "apps/docs/app/docs/[[...slug]]/layout.tsx",
    "content": "import {\n  allChangelogDocuments,\n  allComponentDocuments,\n  allGeneralDocuments,\n} from 'contentlayer/generated'\nimport { notFound } from 'next/navigation'\n\nimport JumpToContentMenu from '@/components/docs/jump-to-content-menu'\nimport LinkList from '@/components/link-list'\nimport Navigation from '@/components/navigation'\n\nconst sortedComponents = allComponentDocuments\n  .filter((doc) => doc.isComponent === true)\n  .sort((a, b) => a.title.localeCompare(b.title))\n  .map((doc) => ({\n    isComing: doc?.isComing || false,\n    isWip: doc?.isWip || false,\n    slug: doc.slug,\n    title: doc.title,\n  }))\n\nconst sortedDocuments = [...allGeneralDocuments, ...allChangelogDocuments]\n  .sort((a, b) => a.order - b.order)\n  .map((doc) => ({\n    isNew: 'isNew' in doc ? doc.isNew : false,\n    slug: doc.slug,\n    title: doc.title,\n  }))\n\nexport default function DocsLayout({\n  params,\n  children,\n}: {\n  params: { slug: Array<string> }\n  children: React.ReactNode\n}) {\n  const post = allComponentDocuments.find((post) => {\n    return (\n      post._raw.flattenedPath.replace('docs/', '') === params.slug.join('/')\n    )\n  })\n\n  if (!post) {\n    notFound()\n  }\n\n  return (\n    <div className=\"container mx-auto h-full px-4\">\n      <JumpToContentMenu toc={post.toc} />\n      <Navigation\n        gettingStartedList={sortedDocuments}\n        componentList={sortedComponents}\n      />\n      <aside className=\"fixed top-0 hidden h-full shrink-0 border-r pt-14 dark:border-slate-800 md:w-56 lg:block\">\n        <nav\n          className=\"-ml-3 h-full overflow-y-auto py-10 pl-3\"\n          id=\"site-navigation\"\n          tabIndex={-1}\n        >\n          <div className=\"mb-4\">\n            <h4 className=\"text-base font-semibold text-slate-900 dark:text-white\">\n              Getting Started\n            </h4>\n            <div className=\"mt-3 pr-3\">\n              <LinkList list={sortedDocuments} />\n            </div>\n          </div>\n          <div>\n            <h4 className=\"text-base font-semibold text-slate-900 dark:text-white\">\n              Components\n            </h4>\n            <div className=\"mt-3 pr-3\">\n              <LinkList list={sortedComponents} />\n            </div>\n          </div>\n        </nav>\n      </aside>\n      <div className=\"pt-16 lg:ml-56\">\n        <div className=\"flex\">\n          {children}\n          {/* <Footer /> */}\n        </div>\n      </div>\n    </div>\n  )\n}\n"
  },
  {
    "path": "apps/docs/app/docs/[[...slug]]/page.tsx",
    "content": "import { allComponentDocuments } from 'contentlayer/generated'\nimport { type Metadata, type ResolvingMetadata } from 'next'\nimport { notFound } from 'next/navigation'\n\nimport Markdown from '@/components/docs/markdown'\nimport EditFeedbackLinks from '@/components/edit-feedback'\nimport PageToc from '@/components/page-toc'\n\nexport function generateStaticParams() {\n  return allComponentDocuments.map((post) => {\n    return {\n      slug: post._raw.flattenedPath.split('/'),\n    }\n  })\n}\n\nexport async function generateMetadata(\n  { params }: { params: { slug: string[] } },\n  parent: ResolvingMetadata,\n): Promise<Metadata> {\n  const post = allComponentDocuments.find((post) => {\n    return (\n      post._raw.flattenedPath.replace('docs/', '') === params.slug.join('/')\n    )\n  })\n\n  if (!post) {\n    notFound()\n  }\n\n  const parentMeta = await parent\n\n  return {\n    title: post.title,\n    description: post.description || parentMeta?.openGraph?.description,\n    openGraph: {\n      siteName: parentMeta?.openGraph?.siteName,\n      title: post.title || parentMeta?.openGraph?.title,\n      description: post.description || parentMeta?.openGraph?.description,\n      images: parentMeta?.openGraph?.images || [],\n      url: post.slug,\n      locale: parentMeta?.openGraph?.locale,\n    },\n    twitter: {\n      title: post.title || parentMeta?.twitter?.title,\n      description: post.description || parentMeta?.twitter?.description || '',\n      images: parentMeta?.twitter?.images || [],\n      card: parentMeta?.twitter?.card,\n    },\n    alternates: {\n      canonical: post.slug,\n    },\n  }\n}\n\nexport default function DocPage({\n  params,\n}: {\n  params: { slug: Array<string> }\n}) {\n  const post = allComponentDocuments.find((post) => {\n    return (\n      post._raw.flattenedPath.replace('docs/', '') === params.slug.join('/')\n    )\n  })\n\n  if (!post) {\n    notFound()\n  }\n\n  return (\n    <>\n      <div className=\"order-2 hidden shrink-0 lg:w-1/4 xl:block\">\n        <div className=\"fixed top-0 h-screen pt-16\">\n          <div className=\"h-full overflow-y-auto\">\n            <div className=\"my-12 px-4 md:pl-8\">\n              <PageToc headings={post.toc} />\n              <EditFeedbackLinks\n                title={post.title}\n                contentPath={post._raw.sourceFilePath}\n              />\n            </div>\n          </div>\n        </div>\n      </div>\n      <main\n        className=\"order-1 my-12 w-full scroll-mt-20\"\n        id=\"page-content\"\n        tabIndex={-1}\n      >\n        <div className=\"prose prose-slate mx-auto dark:prose-invert\">\n          <h1>{post.title}</h1>\n          <p className=\"lead\">{post.description}</p>\n          <Markdown doc={post} />\n        </div>\n      </main>\n    </>\n  )\n}\n"
  },
  {
    "path": "apps/docs/app/getting-started/[[...slug]]/layout.tsx",
    "content": "import {\n  allChangelogDocuments,\n  allComponentDocuments,\n  allGeneralDocuments,\n} from 'contentlayer/generated'\nimport { notFound } from 'next/navigation'\n\nimport JumpToContentMenu from '@/components/docs/jump-to-content-menu'\nimport LinkList from '@/components/link-list'\nimport Navigation from '@/components/navigation'\n\nconst sortedComponents = allComponentDocuments\n  .filter((doc) => doc.isComponent === true)\n  .sort((a, b) => a.title.localeCompare(b.title))\n  .map((doc) => ({\n    isComing: doc?.isComing || false,\n    isWip: doc?.isWip || false,\n    slug: doc.slug,\n    title: doc.title,\n  }))\n\nconst sortedDocuments = [...allGeneralDocuments, ...allChangelogDocuments]\n  .sort((a, b) => a.order - b.order)\n  .map((doc) => ({\n    isNew: 'isNew' in doc ? doc.isNew : false,\n    slug: doc.slug,\n    title: doc.title,\n  }))\n\nexport default function DocsLayout({\n  params,\n  children,\n}: {\n  params: { slug: Array<string> }\n  children: React.ReactNode\n}) {\n  const post = allGeneralDocuments.find((post) => {\n    return (\n      post._raw.flattenedPath.replace('getting-started/', '') ===\n      params.slug.join('/')\n    )\n  })\n\n  if (!post) {\n    notFound()\n  }\n\n  return (\n    <div className=\"container mx-auto h-full px-4\">\n      <JumpToContentMenu toc={post.toc} />\n      <Navigation\n        gettingStartedList={sortedDocuments}\n        componentList={sortedComponents}\n      />\n      <aside className=\"fixed top-0 hidden h-full shrink-0 border-r pt-14 dark:border-slate-800 md:w-56 lg:block\">\n        <nav\n          className=\"-ml-3 h-full overflow-y-auto py-10 pl-3\"\n          id=\"site-navigation\"\n          tabIndex={-1}\n        >\n          <div className=\"mb-4\">\n            <h4 className=\"text-base font-semibold text-slate-900 dark:text-white\">\n              Getting Started\n            </h4>\n            <div className=\"mt-3 pr-3\">\n              <LinkList list={sortedDocuments} />\n            </div>\n          </div>\n          <div>\n            <h4 className=\"text-base font-semibold text-slate-900 dark:text-white\">\n              Components\n            </h4>\n            <div className=\"mt-3 pr-3\">\n              <LinkList list={sortedComponents} />\n            </div>\n          </div>\n        </nav>\n      </aside>\n      <div className=\"pt-16 lg:ml-56\">\n        <main className=\"flex\" id=\"page-content\" tabIndex={-1}>\n          {children}\n          {/* <Footer /> */}\n        </main>\n      </div>\n    </div>\n  )\n}\n"
  },
  {
    "path": "apps/docs/app/getting-started/[[...slug]]/page.tsx",
    "content": "import * as React from 'react'\n\nimport { allGeneralDocuments } from 'contentlayer/generated'\nimport { type Metadata, type ResolvingMetadata } from 'next'\nimport { notFound } from 'next/navigation'\n\nimport Markdown from '@/components/docs/markdown'\nimport EditFeedbackLinks from '@/components/edit-feedback'\nimport PageToc from '@/components/page-toc'\n\nexport function generateStaticParams() {\n  return allGeneralDocuments.map((post) => {\n    return {\n      slug: post._raw.flattenedPath.split('/'),\n    }\n  })\n}\n\nexport async function generateMetadata(\n  { params }: { params: { slug: string[] } },\n  parent: ResolvingMetadata,\n): Promise<Metadata> {\n  const post = allGeneralDocuments.find((post) => {\n    return (\n      post._raw.flattenedPath.replace('getting-started/', '') ===\n      params.slug.join('/')\n    )\n  })\n\n  if (!post) {\n    notFound()\n  }\n\n  const parentMeta = await parent\n\n  return {\n    title: post.title,\n    description: post.description || parentMeta?.openGraph?.description,\n    openGraph: {\n      siteName: parentMeta?.openGraph?.siteName,\n      title: post.title || parentMeta?.openGraph?.title,\n      description: post.description || parentMeta?.openGraph?.description,\n      images: parentMeta?.openGraph?.images || [],\n      url: post.slug,\n      locale: parentMeta?.openGraph?.locale,\n    },\n    twitter: {\n      title: post.title || parentMeta?.twitter?.title,\n      description: post.description || parentMeta?.twitter?.description || '',\n      images: parentMeta?.twitter?.images || [],\n      card: parentMeta?.twitter?.card,\n    },\n    alternates: {\n      canonical: post.slug,\n    },\n  }\n}\n\nexport default function GettingStartedPage({\n  params,\n}: {\n  params: { slug: string[] }\n}) {\n  const post = allGeneralDocuments.find((post) => {\n    return (\n      post._raw.flattenedPath.replace('getting-started/', '') ===\n      params.slug.join('/')\n    )\n  })\n\n  if (!post) {\n    notFound()\n  }\n  return (\n    <>\n      <div className=\"order-2 hidden shrink-0 lg:w-1/4 xl:block\">\n        <div className=\"fixed top-0 h-screen pt-16\">\n          <div className=\"h-full overflow-y-auto\">\n            <div className=\"my-12 px-4 md:pl-8\">\n              {post.toc.length > 0 ? <PageToc headings={post.toc} /> : null}\n              <EditFeedbackLinks\n                contentPath={post._raw.sourceFilePath}\n                title={post.title}\n              />\n            </div>\n          </div>\n        </div>\n      </div>\n      <article className=\"my-12 w-full\">\n        <div className=\"prose prose-slate order-1 mx-auto dark:prose-invert\">\n          <h1>{post.title}</h1>\n          <p className=\"lead\">{post.description}</p>\n          <Markdown doc={post} />\n        </div>\n      </article>\n    </>\n  )\n}\n"
  },
  {
    "path": "apps/docs/app/layout.tsx",
    "content": "import '@/styles/globals.css'\n\nimport { type Metadata } from 'next'\nimport { Inter } from 'next/font/google'\n\nimport Analytics from '@/components/analytics'\nimport ThemeProvider from '@/components/theme-provider'\n\nimport { ClientProviders } from './provider'\n\ninterface DocsLayoutProps {\n  children: React.ReactNode\n}\n\nconst inter = Inter({\n  subsets: ['latin'],\n  display: 'swap',\n})\n\nexport function generateMetadata(): Metadata {\n  const siteName = 'Draft UI'\n  const siteUrl = 'https://draft-ui.com'\n  const description =\n    'A collection of simply designed React components focused on making web accessibility easier than ever. Built with React Aria and Tailwind CSS.'\n  const imageUrl = '/meta.jpg'\n  const imageAlt =\n    'The Draft UI name and logo overlaying a whisp of wofting smoke'\n  return {\n    metadataBase: new URL(siteUrl),\n    title: {\n      template: `%s · ${siteName}`,\n      default: siteName,\n    },\n    description,\n    openGraph: {\n      siteName,\n      title: {\n        template: `%s · ${siteName}`,\n        default: siteName,\n      },\n      description,\n      url: '/',\n      images: {\n        url: imageUrl,\n        alt: imageAlt,\n      },\n      type: 'website',\n      locale: 'US_en',\n    },\n    twitter: {\n      title: {\n        template: `%s · ${siteName}`,\n        default: siteName,\n      },\n      description,\n      images: {\n        url: imageUrl,\n        alt: imageAlt,\n      },\n      card: 'summary_large_image',\n    },\n    verification: {\n      google: 'hsAvKsU0gaaI6wN1wUtrHAEMVQORMU08rUqYQHMj1x0',\n    },\n    alternates: {\n      canonical: '/',\n    },\n  }\n}\n\nexport default function DocsLayout({ children }: DocsLayoutProps) {\n  return (\n    <html lang=\"en\" className=\"h-full\" suppressHydrationWarning>\n      {/*\n      <head /> will contain the components returned by the nearest parent\n      head.tsx. Find out more at https://beta.nextjs.org/docs/api-reference/file-conventions/head\n    */}\n      <link rel=\"icon\" href=\"/favicon.ico\" />\n      <link\n        rel=\"apple-touch-icon\"\n        sizes=\"180x180\"\n        href=\"/apple-touch-icon.png\"\n      />\n      <link\n        rel=\"icon\"\n        type=\"image/png\"\n        sizes=\"32x32\"\n        href=\"/favicon-32x32.png\"\n      />\n      <link\n        rel=\"icon\"\n        type=\"image/png\"\n        sizes=\"16x16\"\n        href=\"/favicon-16x16.png\"\n      />\n      <link rel=\"manifest\" href=\"/site.webmanifest\" />\n      <head />\n      <body\n        className={`h-full dark:bg-slate-900 dark:antialiased ${inter.className}`}\n      >\n        <ThemeProvider attribute=\"class\" defaultTheme=\"system\" enableSystem>\n          <ClientProviders>{children}</ClientProviders>\n        </ThemeProvider>\n        <Analytics />\n      </body>\n    </html>\n  )\n}\n"
  },
  {
    "path": "apps/docs/app/page.tsx",
    "content": "import {\n  allChangelogDocuments,\n  allComponentDocuments,\n  allGeneralDocuments,\n} from 'contentlayer/generated'\n\nimport CtaSection from '@/components/home-page/cta-section'\nimport ExampleSection from '@/components/home-page/example-section'\nimport Navigation from '@/components/navigation'\n\nexport default async function Home() {\n  const sortedComponents = allComponentDocuments\n    .filter((doc) => doc.isComponent === true)\n    .sort((a, b) => a.title.localeCompare(b.title))\n\n  const sortedDocuments = [\n    ...allGeneralDocuments,\n    ...allChangelogDocuments,\n  ].sort((a, b) => a.order - b.order)\n\n  return (\n    <div className=\"pt-14\">\n      <Navigation\n        gettingStartedList={sortedDocuments}\n        componentList={sortedComponents}\n      />\n      <div className=\"container mx-auto px-4 pb-8 pt-20\">\n        <div className=\"mx-auto max-w-[1024px] text-center\">\n          <h1 className=\"text-4xl font-extrabold md:text-7xl\">\n            Accessibility doesn&apos;t <br className=\"hidden lg:inline\" /> have\n            to be hard\n          </h1>\n          <div className=\"mx-auto mt-12 max-w-[768px]\">\n            <p className=\"text-lg leading-normal text-slate-600 dark:text-slate-400 md:text-2xl\">\n              Draft UI is a collection of simply designed React components\n              focused on making web accessibility as easy as copy & paste.\n            </p>\n            <CtaSection />\n            <p className=\"mt-32 text-sm text-slate-600 dark:text-slate-400 md:text-base\">\n              Built with{' '}\n              <a\n                href=\"https://react-spectrum.adobe.com/react-aria/react-aria-components.html\"\n                target=\"_blank\"\n                rel=\"noopener\"\n                className=\"font-medium text-black underline dark:text-white\"\n              >\n                React Aria Components\n              </a>{' '}\n              and{' '}\n              <a\n                href=\"https://tailwindcss.com/\"\n                target=\"_blank\"\n                rel=\"noopener\"\n                className=\"font-medium text-black underline dark:text-white\"\n              >\n                Tailwind CSS\n              </a>\n            </p>\n          </div>\n        </div>\n      </div>\n      <div className=\"bg-slate-50 py-24 dark:border-y dark:border-slate-800 dark:bg-slate-900\">\n        <div className=\"container mx-auto px-4\">\n          <div>\n            <div className=\"mx-auto text-center\">\n              <h2 className=\"text-center text-4xl font-extrabold md:text-5xl\">\n                25+ Accessible Components\n              </h2>\n            </div>\n          </div>\n          <div className=\"mt-12\">\n            <ExampleSection />\n          </div>\n        </div>\n      </div>\n      <footer className=\"container mx-auto justify-between px-4 py-8 text-center md:flex md:text-left\">\n        <p className=\"mb-4 text-sm text-slate-600 dark:text-slate-400 md:mb-0\">\n          Built with{' '}\n          <a\n            href=\"https://react-spectrum.adobe.com/react-aria/react-aria-components.html\"\n            target=\"_blank\"\n            rel=\"noopener\"\n            className=\"font-medium text-black underline dark:text-white\"\n          >\n            React Aria Components\n          </a>{' '}\n          and{' '}\n          <a\n            href=\"https://tailwindcss.com/\"\n            target=\"_blank\"\n            rel=\"noopener\"\n            className=\"font-medium text-black underline dark:text-white\"\n          >\n            Tailwind CSS\n          </a>\n        </p>\n        <p className=\"text-sm text-slate-600 dark:text-slate-400\">\n          Powered by{' '}\n          <a\n            href=\"https://vercel.com/\"\n            target=\"_blank\"\n            rel=\"noopener\"\n            className=\"font-medium text-black underline dark:text-white\"\n          >\n            Vercel\n          </a>\n        </p>\n      </footer>\n    </div>\n  )\n}\n"
  },
  {
    "path": "apps/docs/app/provider.tsx",
    "content": "'use client'\n\nimport { useRouter } from 'next/navigation'\nimport { RouterProvider } from 'react-aria-components'\n\nexport function ClientProviders({ children }) {\n  const router = useRouter()\n\n  return <RouterProvider navigate={router.push}>{children}</RouterProvider>\n}\n"
  },
  {
    "path": "apps/docs/app/robots.tsx",
    "content": "import { type MetadataRoute } from 'next'\n\nexport default function robots(): MetadataRoute.Robots {\n  return {\n    rules: {\n      userAgent: '*',\n      allow: '/',\n      disallow: '/private/',\n    },\n    sitemap: 'https://draft-ui.com/sitemap.xml',\n  }\n}\n"
  },
  {
    "path": "apps/docs/app/sitemap.tsx",
    "content": "import { allDocuments } from 'contentlayer/generated'\nimport { type MetadataRoute } from 'next'\n\nexport default function sitemap(): MetadataRoute.Sitemap {\n  const siteUrl = 'https://draft-ui.com'\n  const urls = allDocuments.map((post) => {\n    return { url: siteUrl + post.slug }\n  })\n\n  return [\n    {\n      url: siteUrl,\n    },\n    ...urls,\n  ]\n}\n"
  },
  {
    "path": "apps/docs/components/analytics.tsx",
    "content": "'use client'\n\nimport { Analytics as VercelAnalytics } from '@vercel/analytics/react'\n\nimport Fathom from './fathom-analytics'\n\nexport default function Analytics() {\n  return (\n    <>\n      <Fathom />\n      <VercelAnalytics />\n    </>\n  )\n}\n"
  },
  {
    "path": "apps/docs/components/copy-clipboard-button.tsx",
    "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { Copy } from 'lucide-react'\nimport { IconButton, Tooltip, TooltipContent } from 'ui'\n\nexport default function CopyClipboardButton({ text }: { text: string }) {\n  const [isOpen, setOpen] = useState(false)\n\n  const handleCopyToClipboard = () => {\n    setOpen(true)\n    navigator.clipboard.writeText(text)\n\n    setTimeout(() => {\n      setOpen(false)\n    }, 800)\n  }\n  return (\n    <Tooltip isOpen={isOpen}>\n      <TooltipContent>Code copied!</TooltipContent>\n      <IconButton\n        aria-label=\"Copy component source code\"\n        onPress={handleCopyToClipboard}\n        variant=\"link\"\n        size=\"xs\"\n        className=\"text-white\"\n      >\n        <Copy size=\"1em\" />\n      </IconButton>\n    </Tooltip>\n  )\n}\n"
  },
  {
    "path": "apps/docs/components/docs/callout.tsx",
    "content": "import * as React from 'react'\n\nimport { AlertTriangle, Info, MessageSquare } from 'lucide-react'\nimport { match } from 'ts-pattern'\n\nexport default function Callout({\n  type,\n  children,\n}: {\n  type: 'note' | 'warning' | 'important'\n  children: React.ReactNode\n}) {\n  return match(type)\n    .with('note', () => (\n      <div className=\"not-prose mb-[2em] flex flex-col gap-2 border-l-4 border-blue-600 bg-blue-50 px-3 py-2 text-sm dark:border-blue-300 dark:bg-blue-400/20\">\n        <div className=\"flex items-center gap-2 text-blue-600 dark:text-blue-300\">\n          <Info size=\"1rem\" />\n          <span className=\"font-semibold\">Info</span>\n        </div>\n        <div className=\"dark:text-white\">{children}</div>\n      </div>\n    ))\n    .with('important', () => (\n      <div className=\"not-prose mb-[2em] flex flex-col gap-2 border-l-4 border-purple-700 bg-purple-50 px-3 py-2 text-sm dark:border-purple-300 dark:bg-purple-400/20\">\n        <div className=\"flex items-center gap-2 text-purple-700 dark:text-purple-300\">\n          <MessageSquare size=\"1rem\" />\n          <span className=\"font-semibold\">Important</span>\n        </div>\n        <div className=\"dark:text-white\">{children}</div>\n      </div>\n    ))\n    .with('warning', () => (\n      <div className=\"not-prose mb-[2em] flex flex-col gap-2 border-l-4 border-yellow-700 bg-yellow-50 px-3 py-2 text-sm dark:border-yellow-300 dark:bg-yellow-400/20\">\n        <div className=\"flex items-center gap-2 text-yellow-700 dark:text-yellow-300\">\n          <AlertTriangle size=\"1rem\" />\n          <span className=\"font-semibold\">Warning</span>\n        </div>\n        <div className=\"dark:text-white\">{children}</div>\n      </div>\n    ))\n    .exhaustive()\n}\n"
  },
  {
    "path": "apps/docs/components/docs/component-example.tsx",
    "content": "'use client'\n\nimport * as React from 'react'\n\nimport { Tab, TabList, TabPanel, Tabs } from 'ui'\n\nimport { Index } from '@/__registry__'\nimport { cx } from '@/lib/cva.config'\n\nimport CopyClipboardButton from '../copy-clipboard-button'\n\ninterface ComponentExampleProps extends React.HTMLAttributes<HTMLDivElement> {\n  align?: 'center' | 'start' | 'end'\n  name: string\n  story: string\n}\n\nexport default function ComponentExample({\n  align = 'center',\n  name,\n  story,\n  children,\n}: ComponentExampleProps) {\n  const [Code] = React.Children.toArray(children) as React.ReactElement[]\n\n  const codeString = React.useMemo(() => {\n    if (\n      typeof Code?.props['data-rehype-pretty-code-fragment'] !== 'undefined'\n    ) {\n      const [codeToCopy] = React.Children.toArray(\n        Code.props.children,\n      ) as React.ReactElement[]\n\n      return codeToCopy?.props?.__rawString__ || null\n    }\n  }, [Code])\n\n  const Story = React.useMemo(() => {\n    const Component = Index[name]?.[story]?.component\n    if (!Component) {\n      return (\n        <p className=\"text-muted-foreground text-sm\">\n          {name}{' '}\n          <code className=\"bg-muted relative rounded px-[0.3rem] py-[0.2rem] font-mono text-sm\">\n            &quot;{story}&quot;\n          </code>{' '}\n          not found in registry.\n        </p>\n      )\n    }\n\n    return <Component />\n  }, [name, story])\n\n  return (\n    <div>\n      <Tabs>\n        <TabList aria-label=\"Preview and Code Tabs\">\n          <Tab id=\"example\">Example</Tab>\n          <Tab id=\"code\">Code</Tab>\n        </TabList>\n        <TabPanel id=\"example\" className=\"px-0\">\n          <div className=\"not-prose overflow-x-auto rounded-md border dark:border-slate-700 dark:bg-slate-800\">\n            <div\n              className={cx(\n                'flex min-h-[350px] min-w-[max-content] justify-center p-10',\n                {\n                  'items-center': align === 'center',\n                  'items-start': align === 'start',\n                  'items-end': align === 'end',\n                },\n              )}\n            >\n              <React.Suspense fallback={null}>{Story}</React.Suspense>\n            </div>\n          </div>\n        </TabPanel>\n        <TabPanel id=\"code\" className=\"px-0\">\n          <div className=\"relative [&_figure]:mt-0 [&_pre]:mt-0\">\n            <div className=\"absolute right-2 top-2 z-10\">\n              <CopyClipboardButton text={String(codeString)} />\n            </div>\n            {Code}\n          </div>\n        </TabPanel>\n      </Tabs>\n    </div>\n  )\n}\n"
  },
  {
    "path": "apps/docs/components/docs/component-source.tsx",
    "content": "'use client'\n\nimport * as React from 'react'\n\nimport CopyClipboardButton from '../copy-clipboard-button'\n\nexport default function ComponentSource({ children }) {\n  const [Code] = React.Children.toArray(children) as React.ReactElement[]\n\n  const codeString = React.useMemo(() => {\n    if (\n      typeof Code?.props['data-rehype-pretty-code-fragment'] !== 'undefined'\n    ) {\n      const [Button] = React.Children.toArray(\n        Code.props.children,\n      ) as React.ReactElement[]\n\n      return Button?.props?.value || Button?.props?.__rawString__ || null\n    }\n  }, [Code])\n\n  return (\n    <div className=\"relative [&_figure]:my-0 [&_pre]:my-0 [&_pre]:max-h-[350px] [&_pre]:overflow-auto\">\n      <div className=\"absolute right-2 top-2 z-10\">\n        <CopyClipboardButton text={String(codeString)} />\n      </div>\n      {Code}\n    </div>\n  )\n}\n"
  },
  {
    "path": "apps/docs/components/docs/heading.tsx",
    "content": "'use client'\n\nimport * as React from 'react'\n\nimport { type TocItemProps } from '@/types'\n\ninterface HeadingProps extends TocItemProps {\n  children: React.ReactNode\n}\n\nexport default function Heading({ slug, lvl, children }: HeadingProps) {\n  const headingEl = React.createElement(\n    `h${lvl}`,\n    {\n      id: slug,\n      className:\n        'mt-0 scroll-mt-20 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-slate-400 focus-visible:ring-offset-2 dark:focus-visible:ring-slate-400 dark:focus-visible:ring-offset-slate-900 rounded-sm',\n      tabIndex: -1,\n    },\n    children,\n  )\n\n  return <div className=\"mt-[2em]\">{headingEl}</div>\n}\n"
  },
  {
    "path": "apps/docs/components/docs/jump-to-content-menu.tsx",
    "content": "'use client'\n\nimport { ChevronDown } from 'lucide-react'\nimport { Button } from 'ui/src/button'\nimport {\n  Menu,\n  MenuContent,\n  MenuHeader,\n  MenuItem,\n  MenuSection,\n  MenuSeparator,\n} from 'ui/src/menu'\n\nimport { type TocItemProps } from '@/types'\n\nexport default function JumpToContentMenu({\n  toc,\n}: {\n  toc: Array<TocItemProps>\n}) {\n  const focusAnchorElement = (anchor: string) => {\n    const el = document?.getElementById(anchor)\n    if (el) el.focus()\n  }\n\n  return (\n    <Menu>\n      <Button\n        size=\"xs\"\n        className=\"absolute -top-16 left-0 z-50 items-center gap-2 opacity-0 aria-expanded:top-0 aria-expanded:opacity-100 focus-visible:top-0 focus-visible:opacity-100\"\n      >\n        <span>Skip to Content</span>\n        <ChevronDown aria-hidden size=\"16\" strokeWidth=\"3\" />\n      </Button>\n      <MenuContent\n        onAction={(slug: TocItemProps['slug']) => focusAnchorElement(slug)}\n      >\n        <MenuSection>\n          <MenuHeader>Landmark Regions</MenuHeader>\n          <MenuItem id=\"page-content\">Page Content</MenuItem>\n          <MenuItem id=\"site-navigation\">Site Navigation</MenuItem>\n          <MenuItem id=\"page-navigation\">Page Navigation</MenuItem>\n        </MenuSection>\n        <MenuSeparator />\n        {toc ? (\n          <MenuSection>\n            <MenuHeader>Headings</MenuHeader>\n            {toc.map((heading: TocItemProps, idx: number) => (\n              <MenuItem id={heading.slug} key={idx}>\n                {heading.content}\n              </MenuItem>\n            ))}\n          </MenuSection>\n        ) : null}\n      </MenuContent>\n    </Menu>\n  )\n}\n"
  },
  {
    "path": "apps/docs/components/docs/list-stepper.tsx",
    "content": "import * as React from 'react'\n\nexport function ListStepper({ children }: { children: React.ReactNode }) {\n  return (\n    <ol className=\"list-none space-y-16 pl-12 [counter-reset:step]\">\n      {children}\n    </ol>\n  )\n}\n\nexport function ListStep({ children }: { children: React.ReactNode }) {\n  return (\n    <li className=\"relative [counter-increment:step] before:absolute before:-left-12 before:flex before:h-8 before:w-8 before:items-center before:justify-center before:rounded-full before:bg-slate-100 before:font-semibold before:leading-none before:text-black before:content-[counter(step)] after:absolute after:-bottom-10 after:-left-8 after:top-14 after:border-l after:border-l-slate-200 last:after:border-l-0 dark:before:bg-slate-800 dark:before:text-slate-100 dark:after:border-l-slate-800\">\n      {children}\n    </li>\n  )\n}\n"
  },
  {
    "path": "apps/docs/components/docs/markdown.tsx",
    "content": "'use client'\n\nimport * as React from 'react'\n\nimport { type DocumentTypes } from 'contentlayer/generated'\nimport { useMDXComponent } from 'next-contentlayer/hooks'\nimport Link from 'next/link'\nimport { Tab, TabList, TabPanel, Tabs } from 'ui'\n\nimport Callout from '@/components/docs/callout'\nimport ComponentExample from '@/components/docs/component-example'\nimport ComponentSource from '@/components/docs/component-source'\nimport Heading from '@/components/docs/heading'\nimport { cx } from '@/lib/cva.config'\nimport { type NpmCommands } from '@/types'\n\nimport CopyClipboardButton from '../copy-clipboard-button'\nimport { ListStep, ListStepper } from './list-stepper'\n\ntype MarkdownProps = {\n  doc: DocumentTypes\n}\n\nexport default function Markdown(props: MarkdownProps) {\n  const { doc } = props\n  const MDXComponent = useMDXComponent(doc.body.code)\n  return (\n    <div>\n      <MDXComponent\n        components={{\n          ComponentSource,\n          ComponentExample,\n          Callout,\n          Heading,\n          Tabs,\n          TabList,\n          Tab,\n          TabPanel,\n          ListStepper,\n          ListStep,\n          //\n          Link,\n          //\n          code: ({\n            className,\n            ...props\n          }: React.HTMLAttributes<HTMLElement>) => (\n            <code className={cx(className)} {...props} />\n          ),\n          figure: ({\n            className,\n            __npmCommand__,\n            __yarnCommand__,\n            __pnpmCommand__,\n            __niCommand__,\n            __rawString__,\n            ...props\n          }: React.HTMLAttributes<HTMLElement> & {\n            __rawString__?: string\n          } & NpmCommands) => (\n            <>\n              {/* TODO: Introduce buttons that let you choose package manager */}\n              <div className=\"relative [&_figure]:mt-0 [&_pre]:mt-0 [&_pre]:max-h-[350px] [&_pre]:overflow-auto\">\n                <div className=\"absolute right-2 top-2 z-10\">\n                  <CopyClipboardButton text={__rawString__ || ''} />\n                </div>\n                <figure className={cx(className)} {...props} />\n              </div>\n            </>\n          ),\n        }}\n      />\n    </div>\n  )\n}\n"
  },
  {
    "path": "apps/docs/components/edit-feedback.tsx",
    "content": "export default function EditFeedbackLinks({\n  title,\n  contentPath,\n}: {\n  title: string\n  contentPath: string\n}) {\n  const pageEditUrl = `https://github.com/IHIutch/draft-ui/tree/main/apps/docs/content/${contentPath}`\n  const pageFeedbackUrl = new URL(\n    `https://github.com/IHIutch/draft-ui/issues/new`,\n  )\n  pageFeedbackUrl.searchParams.set('title', `Feedback for “${title}”`)\n  // Is this the right label to set? Do we need to make a new label for this?\n  pageFeedbackUrl.searchParams.set('labels', 'documentation')\n\n  return (\n    <ul className=\"mt-3\">\n      <LinkItem href={pageEditUrl}>Edit this page</LinkItem>\n      <LinkItem href={pageFeedbackUrl.toString()}>Give us feedback</LinkItem>\n    </ul>\n  )\n}\n\nconst LinkItem = ({\n  href,\n  children,\n}: {\n  href: string\n  children?: React.ReactNode\n}) => (\n  <li>\n    <a\n      className=\"block rounded-sm py-1 text-sm text-slate-600 no-underline transition hover:text-slate-900 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-slate-400 focus-visible:ring-offset-2 dark:text-slate-400 dark:hover:text-white dark:focus-visible:ring-slate-400 dark:focus-visible:ring-offset-slate-900\"\n      href={href}\n    >\n      {children}\n    </a>\n  </li>\n)\n"
  },
  {
    "path": "apps/docs/components/fathom-analytics.tsx",
    "content": "// Fathom.tsx\n'use client'\n\nimport { Suspense, useEffect } from 'react'\n\nimport { load, trackPageview } from 'fathom-client'\nimport { usePathname, useSearchParams } from 'next/navigation'\n\nfunction TrackPageView() {\n  const pathname = usePathname()\n  const searchParams = useSearchParams()\n  useEffect(() => {\n    load('ERIJKXRN', {\n      includedDomains: ['draft-ui.com'],\n      auto: false,\n    })\n  }, [])\n\n  // Record a pageview when route changes\n  useEffect(() => {\n    trackPageview()\n  }, [pathname, searchParams])\n\n  return null\n}\n\nexport default function Fathom() {\n  return (\n    <Suspense fallback={null}>\n      <TrackPageView />\n    </Suspense>\n  )\n}\n"
  },
  {
    "path": "apps/docs/components/home-page/cta-section.tsx",
    "content": "'use client'\n\nimport * as React from 'react'\n\nimport Link from 'next/link'\n\nimport { buttonVariants } from '@/components/ui'\n\nexport default function CtaSection() {\n  return (\n    <div className=\"mt-12 flex justify-center gap-4 max-sm:flex-col\">\n      <Link\n        href=\"/getting-started\"\n        className={buttonVariants({\n          size: 'lg',\n        })}\n      >\n        Get Started\n      </Link>\n      <Link\n        href=\"/docs/components\"\n        className={buttonVariants({\n          size: 'lg',\n          variant: 'outline',\n        })}\n      >\n        Components\n      </Link>\n    </div>\n  )\n}\n"
  },
  {
    "path": "apps/docs/components/home-page/example-section.tsx",
    "content": "'use client'\n\nimport * as React from 'react'\n\nimport BreadcrumbsDefault from '@/registry/breadcrumbs/default'\nimport CheckboxGroupDefault from '@/registry/checkbox-group/default'\nimport ComboBoxWithButton from '@/registry/combobox/with-button'\nimport DatePickerDefault from '@/registry/date-picker/default'\nimport ModalDefault from '@/registry/modal/default'\nimport NumberInputMobile from '@/registry/number-field/with-mobile-stepper'\nimport SelectDefault from '@/registry/select/default'\nimport SliderDefault from '@/registry/slider/default'\nimport SwitchDefault from '@/registry/switch/default'\nimport TabsDefault from '@/registry/tabs/default'\n\nexport default function ExampleSection() {\n  return (\n    <div className=\"g-4 grid grid-flow-dense grid-cols-1 gap-4 md:grid-cols-2 lg:grid-cols-4\">\n      <div className=\"flex items-center justify-center rounded-md border bg-white p-4 dark:border-slate-700 dark:bg-slate-800 md:col-span-2\">\n        <BreadcrumbsDefault />\n      </div>\n      <div className=\"flex items-center justify-center rounded-md border bg-white p-4 dark:border-slate-700 dark:bg-slate-800 md:col-span-1\">\n        <DatePickerDefault />\n      </div>\n      <div className=\"flex items-center justify-center rounded-md border bg-white p-4 dark:border-slate-700 dark:bg-slate-800 md:col-span-1\">\n        <SelectDefault />\n      </div>\n      <div className=\"flex items-center justify-center rounded-md border bg-white p-4 dark:border-slate-700 dark:bg-slate-800 md:col-span-1\">\n        <CheckboxGroupDefault />\n      </div>\n      <div className=\"flex items-center justify-center overflow-x-auto rounded-md border bg-white p-4 dark:border-slate-700 dark:bg-slate-800 md:col-span-2\">\n        <TabsDefault />\n      </div>\n      <div className=\"flex items-center justify-center rounded-md border bg-white p-4 dark:border-slate-700 dark:bg-slate-800 md:col-span-1\">\n        <ModalDefault />\n      </div>\n      <div className=\"flex items-center justify-center rounded-md border bg-white p-4 dark:border-slate-700 dark:bg-slate-800 md:col-span-1\">\n        <SwitchDefault />\n      </div>\n      <div className=\"flex items-center justify-center rounded-md border bg-white p-4 dark:border-slate-700 dark:bg-slate-800 md:col-span-1\">\n        <SliderDefault />\n      </div>\n      <div className=\"flex items-center justify-center rounded-md border bg-white p-4 dark:border-slate-700 dark:bg-slate-800 md:col-span-1\">\n        <ComboBoxWithButton />\n      </div>\n      <div className=\"flex items-center justify-center rounded-md border bg-white p-4 dark:border-slate-700 dark:bg-slate-800 md:col-span-1\">\n        <NumberInputMobile />\n      </div>\n    </div>\n  )\n}\n"
  },
  {
    "path": "apps/docs/components/link-list.tsx",
    "content": "'use client'\n\nimport Link from 'next/link'\nimport { usePathname } from 'next/navigation'\n\nimport { cx } from '@/lib/cva.config'\n\ntype LinkListItemProps = {\n  isComing?: boolean\n  isWip?: boolean\n  isNew?: boolean\n  slug: string\n  title: string\n}\n\nexport default function LinkList({ list }: { list: LinkListItemProps[] }) {\n  const pathname = usePathname()\n\n  return (\n    <ul>\n      {list.map((link, idx) => (\n        <li key={idx}>\n          <Link\n            role=\"link\"\n            aria-disabled={!!link?.isComing}\n            aria-current={pathname === link.slug ? 'page' : undefined}\n            // @ts-ignore\n            href={link?.isComing ? '' : link.slug}\n            onClick={(e) => {\n              if (!!link?.isComing) {\n                e.preventDefault()\n              }\n            }}\n            className={cx(\n              'flex items-center justify-between gap-2 rounded-sm py-1 text-sm transition',\n              // Focus\n              'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-slate-400 focus-visible:ring-offset-2 dark:focus-visible:ring-slate-400 dark:focus-visible:ring-offset-slate-900',\n              pathname === link.slug\n                ? 'font-medium text-slate-900 dark:text-white'\n                : 'text-slate-600 hover:text-slate-900 dark:text-slate-400 dark:hover:text-white',\n              link?.isComing &&\n                'cursor-not-allowed text-slate-400 hover:text-slate-400 dark:text-slate-600 dark:hover:text-slate-600',\n            )}\n          >\n            <span className=\"truncate\">{link.title}</span>\n\n            {link?.isComing ? (\n              <span className=\"rounded bg-slate-500 px-1 text-xs font-medium text-white dark:bg-slate-400 dark:text-slate-900\">\n                Coming Soon\n              </span>\n            ) : link?.isNew ? (\n              <span className=\"rounded bg-black px-1 text-xs font-medium text-white dark:bg-slate-100 dark:text-black\">\n                New!\n              </span>\n            ) : link?.isWip ? (\n              <span className=\"rounded bg-slate-200 px-1 text-xs font-medium text-slate-700 dark:bg-slate-700 dark:text-white\">\n                WIP\n              </span>\n            ) : null}\n          </Link>\n        </li>\n      ))}\n    </ul>\n  )\n}\n"
  },
  {
    "path": "apps/docs/components/mode-toggle.tsx",
    "content": "'use client'\n\nimport * as React from 'react'\n\nimport { LaptopIcon, MoonIcon, SunIcon } from 'lucide-react'\nimport { useTheme } from 'next-themes'\n\nimport { IconButton, Menu, MenuContent, MenuItem } from '@/components/ui'\n\nexport function ModeToggle() {\n  const { setTheme, resolvedTheme } = useTheme()\n\n  return (\n    <Menu>\n      <IconButton\n        aria-label={`Select a color theme, current theme is: ${resolvedTheme}`}\n        size=\"sm\"\n        variant=\"ghost\"\n        className=\"flex items-center gap-2\"\n      >\n        {resolvedTheme === 'dark' ? (\n          <MoonIcon size=\"20\" />\n        ) : (\n          <SunIcon size=\"20\" />\n        )}\n      </IconButton>\n      <MenuContent\n        onAction={(value: 'light' | 'dark' | 'system') => setTheme(value)}\n      >\n        <MenuItem id=\"light\">\n          <SunIcon aria-hidden=\"true\" size=\"16\" />\n          <span className=\"pl-2\">Light</span>\n        </MenuItem>\n        <MenuItem id=\"dark\">\n          <MoonIcon aria-hidden=\"true\" size=\"16\" />\n          <span className=\"pl-2\">Dark</span>\n        </MenuItem>\n        <MenuItem id=\"system\">\n          <LaptopIcon aria-hidden=\"true\" size=\"16\" />\n          <span className=\"pl-2\">System</span>\n        </MenuItem>\n      </MenuContent>\n    </Menu>\n  )\n}\n"
  },
  {
    "path": "apps/docs/components/navigation.tsx",
    "content": "'use client'\n\nimport { useEffect, useState } from 'react'\n\nimport { GithubIcon, MenuIcon, TwitterIcon, XIcon } from 'lucide-react'\nimport Image from 'next/image'\nimport Link from 'next/link'\nimport { usePathname } from 'next/navigation'\nimport {\n  IconButton,\n  iconButtonVariants,\n  ModalBody,\n  ModalContent,\n  ModalHeader,\n  ModalOverlay,\n} from 'ui'\n\nimport { cx } from '@/lib/cva.config'\n\nimport LinkList from './link-list'\nimport { ModeToggle } from './mode-toggle'\nimport SearchComponent from './search-component'\n\ntype LinkListItemProps = {\n  isComing?: boolean\n  isWip?: boolean\n  isNew?: boolean\n  slug: string\n  title: string\n}\n\nexport default function Navigation({\n  gettingStartedList,\n  componentList,\n}: {\n  gettingStartedList: LinkListItemProps[]\n  componentList: LinkListItemProps[]\n}) {\n  const pathname = usePathname()\n  const [isModalOpen, setIsModalOpen] = useState(false)\n\n  useEffect(() => {\n    setIsModalOpen(false)\n  }, [pathname])\n\n  return (\n    <div className=\"light:shadow-sm fixed inset-x-0 top-0 z-50 h-14 border-b bg-white dark:border-b dark:border-slate-800 dark:bg-slate-900\">\n      <div className=\"mx-auto flex h-full w-full items-center px-4\">\n        <Link\n          href=\"/\"\n          aria-label=\"Home\"\n          className=\"flex items-center gap-2 font-semibold\"\n        >\n          <Image\n            className=\"dark:invert\"\n            src=\"/draft_ui.svg\"\n            alt=\"\"\n            width={30}\n            height={30}\n          />\n          <span>Draft UI</span>\n        </Link>\n        {/* Desktop Nav */}\n        <div className=\"flex grow items-center\">\n          <div className=\"ml-14 hidden items-center gap-8 lg:flex\">\n            <Link\n              href=\"/getting-started\"\n              className=\"rounded-sm text-sm font-medium focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-slate-400 focus-visible:ring-offset-2 dark:focus-visible:ring-slate-400 dark:focus-visible:ring-offset-slate-900\"\n            >\n              Getting Started\n            </Link>\n            <Link\n              href=\"/docs/components\"\n              className=\"rounded-sm text-sm font-medium focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-slate-400 focus-visible:ring-offset-2 dark:focus-visible:ring-slate-400 dark:focus-visible:ring-offset-slate-900\"\n            >\n              Components\n            </Link>\n          </div>\n          <div className=\"mx-auto flex lg:mx-0 lg:ml-auto\">\n            <div className=\"flex gap-2\">\n              <div className=\"hidden pr-2 md:block lg:pr-0\">\n                <SearchComponent />\n              </div>\n              <div className=\"hidden gap-2 lg:flex\">\n                <div>\n                  <a\n                    className={cx(\n                      iconButtonVariants({ size: 'sm', variant: 'ghost' }),\n                    )}\n                    href=\"https://twitter.com/draft__ui\"\n                    target=\"_blank\"\n                    rel=\"noreferrer\"\n                    aria-label=\"Link to our Twitter account\"\n                  >\n                    <TwitterIcon size=\"20\" aria-hidden=\"true\" />\n                  </a>\n                </div>\n                <div>\n                  <a\n                    className={cx(\n                      iconButtonVariants({ size: 'sm', variant: 'ghost' }),\n                    )}\n                    href=\"https://github.com/IHIutch/draft-ui\"\n                    target=\"_blank\"\n                    rel=\"noreferrer\"\n                    aria-label=\"Link to GitHub repository\"\n                  >\n                    <GithubIcon size=\"20\" aria-hidden=\"true\" />\n                  </a>\n                </div>\n                <div>\n                  <ModeToggle />\n                </div>\n              </div>\n            </div>\n          </div>\n        </div>\n        {/* Mobile Nav */}\n        <div className=\"ml-auto flex lg:hidden\">\n          <div className=\"flex items-center gap-1 md:gap-2\">\n            <div>\n              <a\n                className={cx(\n                  iconButtonVariants({ size: 'sm', variant: 'ghost' }),\n                )}\n                href=\"https://twitter.com/draft__ui\"\n                target=\"_blank\"\n                rel=\"noreferrer\"\n                aria-label=\"Link to our Twitter account\"\n              >\n                <TwitterIcon size=\"20\" aria-hidden=\"true\" />\n              </a>\n            </div>\n            <div>\n              <a\n                className={cx(\n                  iconButtonVariants({ size: 'sm', variant: 'ghost' }),\n                )}\n                href=\"https://github.com/IHIutch/draft-ui\"\n                target=\"_blank\"\n                rel=\"noreferrer\"\n                aria-label=\"Link to GitHub repository\"\n              >\n                <GithubIcon size=\"20\" aria-hidden=\"true\" />\n              </a>\n            </div>\n            <div>\n              <ModeToggle />\n            </div>\n            <div className=\"h-6 border-l border-gray-300\" />\n            <div className=\"md:hidden\">\n              <SearchComponent />\n            </div>\n            <div>\n              <IconButton\n                aria-label=\"Open Navigation Menu\"\n                size=\"sm\"\n                variant=\"ghost\"\n                onPress={() => setIsModalOpen(true)}\n              >\n                <MenuIcon size=\"1em\" />\n              </IconButton>\n              <ModalOverlay\n                isDismissable\n                isOpen={isModalOpen}\n                onOpenChange={setIsModalOpen}\n              >\n                <ModalContent size=\"full\" className=\"max-h-full overflow-auto\">\n                  <ModalHeader>Menu</ModalHeader>\n                  <IconButton\n                    aria-label=\"Close Navigation Menu\"\n                    className=\"absolute right-3 top-2\"\n                    size=\"sm\"\n                    variant=\"ghost\"\n                    onPress={() => setIsModalOpen(false)}\n                    autoFocus\n                  >\n                    <XIcon size=\"1em\" />\n                  </IconButton>\n                  <ModalBody>\n                    <div className=\"mb-4\">\n                      <h4 className=\"text-base font-semibold text-slate-900 dark:text-white\">\n                        Getting Started\n                      </h4>\n                      <div className=\"mt-3 pr-3\">\n                        <LinkList list={gettingStartedList} />\n                      </div>\n                    </div>\n                    <div>\n                      <h4 className=\"text-base font-semibold text-slate-900 dark:text-white\">\n                        Components\n                      </h4>\n                      <div className=\"mt-3 pr-3\">\n                        <LinkList list={componentList} />\n                      </div>\n                    </div>\n                  </ModalBody>\n                </ModalContent>\n              </ModalOverlay>\n            </div>\n          </div>\n        </div>\n      </div>\n    </div>\n  )\n}\n"
  },
  {
    "path": "apps/docs/components/page-toc.tsx",
    "content": "'use client'\n\nimport { useEffect, useState } from 'react'\n\nimport { cx } from '@/lib/cva.config'\nimport { type TocItemProps } from '@/types'\n\nexport default function PageToc({\n  headings,\n}: {\n  headings?: Array<TocItemProps>\n}) {\n  const activeHeading = useActiveHeading((headings || []).map((h) => h.slug))\n\n  return (\n    <nav id=\"page-navigation\" tabIndex={-1}>\n      <div className=\"mb-3\">\n        <span className=\"text-base font-semibold text-slate-900 dark:text-white\">\n          On This Page\n        </span>\n      </div>\n      <ul>\n        {(headings || []).map((h, idx) => (\n          <li key={idx} className={cx(h.lvl === 3 && 'pl-3')}>\n            <a\n              href={'#' + h.slug}\n              className={cx(\n                'block rounded-sm py-1 text-sm no-underline transition',\n                'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-slate-400 focus-visible:ring-offset-2 dark:focus-visible:ring-slate-400 dark:focus-visible:ring-offset-slate-900',\n                h.slug === activeHeading\n                  ? 'text-slate-900 dark:text-white'\n                  : 'text-slate-600 hover:text-slate-900 dark:text-slate-400 dark:hover:text-white',\n              )}\n            >\n              {h.content}\n            </a>\n          </li>\n        ))}\n      </ul>\n    </nav>\n  )\n}\n\nfunction useActiveHeading(itemIds: string[]) {\n  const [activeId, setActiveId] = useState<null | string>(null)\n\n  useEffect(() => {\n    const observer = new IntersectionObserver(\n      (entries) => {\n        entries.forEach((entry) => {\n          if (entry.isIntersecting) {\n            setActiveId(entry.target.id)\n          }\n        })\n      },\n      { rootMargin: `0% 0% -80% 0%` },\n    )\n\n    itemIds?.forEach((id) => {\n      const element = document.getElementById(id)\n      if (element) {\n        observer.observe(element)\n      }\n    })\n\n    return () => {\n      itemIds?.forEach((id) => {\n        const element = document.getElementById(id)\n        if (element) {\n          observer.unobserve(element)\n        }\n      })\n    }\n  }, [itemIds])\n\n  return activeId\n}\n"
  },
  {
    "path": "apps/docs/components/search-component.tsx",
    "content": "'use client'\n\nimport { useState } from 'react'\n\nimport { Search } from 'lucide-react'\nimport Link from 'next/link'\n\nimport { DocSearchModal } from '@docsearch/react'\n\nimport '@docsearch/css/dist/style.css'\n\nimport { Button, IconButton } from 'ui'\n\nimport { cx } from '@/lib/cva.config'\n\nexport default function SearchComponent() {\n  const [isOpen, setIsOpen] = useState(false)\n\n  return (\n    <>\n      <Button\n        size=\"sm\"\n        variant=\"outline\"\n        onPress={() => setIsOpen(true)}\n        className=\"hidden items-center justify-start text-slate-600 md:flex md:w-72\"\n      >\n        <Search className=\"h-4 w-4\" />\n        <span className=\"ml-2 font-normal\">Search the docs...</span>\n      </Button>\n      <IconButton\n        onPress={() => setIsOpen(true)}\n        aria-label=\"Search\"\n        className=\"md:hidden\"\n        size=\"sm\"\n        variant=\"ghost\"\n      >\n        <Search size=\"20\" />\n      </IconButton>\n      {isOpen ? (\n        <DocSearchModal\n          initialScrollY={window.scrollY}\n          appId=\"PEODP0LKUU\"\n          indexName=\"draft-ui\"\n          apiKey=\"10b79ceff1a745560608f23d0fcca54a\"\n          onClose={() => setIsOpen(false)}\n          placeholder=\"Search the docs...\"\n          hitComponent={Hit}\n          transformItems={(items) => {\n            return items.map((item, index) => {\n              const a = document.createElement('a')\n              a.href = item.url\n\n              if (item.hierarchy?.lvl0) {\n                item.hierarchy.lvl0 = item.hierarchy.lvl0.replace(/&amp;/g, '&')\n              }\n\n              if (item._highlightResult?.hierarchy?.lvl0?.value) {\n                item._highlightResult.hierarchy.lvl0.value =\n                  item._highlightResult.hierarchy.lvl0.value.replace(\n                    /&amp;/g,\n                    '&',\n                  )\n              }\n\n              return {\n                ...item,\n                url: `${a.pathname}${a.hash}`,\n                __is_result: () => true,\n                // __is_parent: () =>\n                //   item.type === 'lvl1' && items.length > 1 && index === 0,\n                // __is_child: () =>\n                //   item.type !== 'lvl1' &&\n                //   items.length > 1 &&\n                //   items[0].type === 'lvl1' &&\n                //   index !== 0,\n                __is_first: () => index === 1,\n                __is_last: () => index === items.length - 1 && index !== 0,\n              }\n            })\n          }}\n        />\n      ) : null}\n    </>\n  )\n}\n\nconst Hit = ({ hit, children }) => {\n  return (\n    <Link\n      href={hit.url}\n      className={cx({\n        'DocSearch-Hit--Result': hit.__is_result?.(),\n        // 'DocSearch-Hit--Parent': hit.__is_parent?.(),\n        // 'DocSearch-Hit--Child': hit.__is_child?.(),\n        'DocSearch-Hit--FirstChild': hit.__is_first?.(),\n        'DocSearch-Hit--LastChild': hit.__is_last?.(),\n      })}\n    >\n      {children}\n    </Link>\n  )\n}\n"
  },
  {
    "path": "apps/docs/components/theme-provider.tsx",
    "content": "'use client'\n\nimport * as React from 'react'\n\nimport { ThemeProvider as NextThemesProvider } from 'next-themes'\nimport { type ThemeProviderProps } from 'next-themes/dist/types'\n\nexport default function ThemeProvider({\n  children,\n  ...props\n}: ThemeProviderProps) {\n  return <NextThemesProvider {...props}>{children}</NextThemesProvider>\n}\n"
  },
  {
    "path": "apps/docs/content/CHANGELOG.mdx",
    "content": "---\ntitle: Changelog\ndescription: Stay up to date on the latest changes and updates\norder: 5\n---\n\n## January 2024\n\n- We have a **CLI** tool!\n  - Thanks to [@jolbol1](https://github.com/jolbol1) and [@jacobparis](https://github.com/jacobparis) for getting this set up. And to [@kentcdodds](https://github.com/kentcdodds) for kicking this off and suggesting this approach.\n  - Docs and installation have been updated to show how to install components with [`@sly-cli/sly`](https://github.com/jacobparis-insiders/sly/blob/main/cli/README.md)\n- Update **React Aria Components** to `1.0.0`\n  - Breadcrumb now exposes `BreadcrumbLink` to correctly handle React Aria **`Link`** within components [@Littletonconnor](https://github.com/Littletonconnor) - [#20](https://github.com/IHIutch/draft-ui/pull/20)\n  - Updates to installation to show how to integrate React Aria **`Link`** with various frameworks using [`RouterProvider`](https://react-spectrum.adobe.com/react-aria/routing.html).\n  - No more `'use client'` needed. React Aria handles this automatically, behind the scenes.\n- Docs and code samples were tidied up significantly\n  - You can now copy directly from `bash` snippets\n  - Thanks to [@itsMapleLeaf's](https://github.com/itsMapleLeaf) [suggestion](https://twitter.com/heyImMapleLeaf/status/1723216226833346848), we're now using namespaced imports from React Aria Components. This has significantly increased readability and helps keep things simple.\n- Update Tailwind to `3.4.1`\n  - While there were several exciting updates in this release, we've not yet integrated things like `:has()` and `size-*`. Since this change is still fairly fresh, we're going hold off on introducing those features because, well, not changing them won't break anything.\n- Several spelling and text fixes:\n  - [@henrikvtcodes](https://github.com/henrikvtcodes) - [#3](https://github.com/IHIutch/draft-ui/pull/3),\n  - [@Littletonconnor](https://github.com/Littletonconnor) - [#6](https://github.com/IHIutch/draft-ui/pull/6),\n  - [@Littletonconnor](https://github.com/Littletonconnor) - [#8](https://github.com/IHIutch/draft-ui/pull/18)\n\n## November 2023\n\n- Update **React Aria Components** to RC (`1.0.0-rc.0`)!\n  - Breadcrumb **`Item`** becomes **`Breadcrumb`**\n  - ListBox **`Item`** becomes **`ListBoxItem`**\n  - Menu **`Item`** becomes **`MenuItem`**\n  - GridList **`Item`** becomes **`GridListItem`**\n  - Replace **`validationState`** with **`isInvalid`** for error handling\n- Add React Aria Components Tailwind config and update various classNames\n- Update Installation instructions with specific React Aria Components version\n- Update `Slider` example to destructure `state` key\n- Replaces `class-variance-authority` with [`cva@beta`](https://beta.cva.style/getting-started/whats-new/)\n  - Base component styles must now be located within the `base` property:\n  - Replace `cn(...)` helper function with `cx(...)` by using `CVA` config and including `twMerge`\n  - Removes `clsx` as a dependency because it is now included in CVA as `cx`\n- Updated red/error colors to be WCAG compliant\n- Added additional examples to the following components:\n  - `Checkbox`\n  - `CheckboxGroup`\n  - `ComboBox`\n  - `DatePicker`\n  - `DateRangePicker`\n  - `Input`\n  - `NumberField`\n  - `Radio`\n  - `RadioGroup`\n  - `Select`\n  - `Tabs`\n  - `TextField`\n\n## September 2023\n\n- Reordered components' classNames properly\n\n## August 2023\n\n- Doc updates\n- Update React imports in components\n- Add lots of new examples and variants:\n  - `Button` variants\n  - `Checkbox` variants\n  - `ComboBox` examples\n  - `DateInput` variants\n  - `Input` variants\n  - `Menu` examples\n  - `Meter` examples\n  - `NumberField` examples\n  - `Radio` variants\n  - `Switch` examples\n  - `Tooltip` examples\n- Fixed a bunch of component layouts\n  - Add `flex-col` to `Modal`\n  - Add `w-full` to `NumberField`\n  - Remove verbose classes from `RadioGroup`\n  - Add `w-full` to `Select`\n  - Remove `h-full` from vertical `Slider` variant\n\n## July 2023\n\nUsing `react-aria-components@1.0.0-alpha.5`\n\n- We have a logo and a homepage!\n- Docs updated; content pages are live including installation\n  instructions\n- Components and the rest of the site support dark mode.\n- Tabs now use `--border-width` variable to avoid issues\n  with nested tabs\n"
  },
  {
    "path": "apps/docs/content/components/breadcrumbs.mdx",
    "content": "---\ntitle: Breadcrumbs\ndescription: Breadcrumbs display a hierarchy of links to the current page or resource in an application.\nisComponent: true\n---\n\n<Callout type=\"important\">\n  By default, **`BreadcrumbLink`** uses a React Aria Component **`Link`**. To ensure this navigation works as expected with your framework, be sure to follow the <Link className=\"underline\" href=\"/getting-started/installation#configure-routing\">Configure Routing</Link> step of the Draft UI installation.\n</Callout>\n\n## Installation\n\n<Tabs>\n  <TabList aria-label=\"Preview and Code Tabs\">\n      <Tab id=\"cli-install\">CLI</Tab>\n      <Tab id=\"manual-install\">Copy & Paste</Tab>\n  </TabList>\n  <TabPanel id=\"cli-install\" className=\"px-0 [&_pre]:my-0 [&_figure]:my-0\">\n    ```bash title=\"bash\"\n    npx @sly-cli/sly add draft-ui breadcrumbs\n    ```\n  </TabPanel>\n  <TabPanel id=\"manual-install\" className=\"px-0\">\n    <ComponentSource src=\"../../packages/ui/src/breadcrumbs.tsx\" />\n  </TabPanel>\n</Tabs>\n\n## Examples\n\n\n### Default\n\nThis is an example of the default Breadcrumb component\n\n<ComponentExample name=\"breadcrumbs\" story=\"default\" />\n"
  },
  {
    "path": "apps/docs/content/components/button.mdx",
    "content": "---\ntitle: Button\ndescription: A button allows a user to perform an action, with mouse, touch, and keyboard interactions.\nisComponent: true\n---\n\n## Installation\n\n<Tabs>\n  <TabList aria-label=\"Preview and Code Tabs\">\n      <Tab id=\"cli-install\">CLI</Tab>\n      <Tab id=\"manual-install\">Copy & Paste</Tab>\n  </TabList>\n  <TabPanel id=\"cli-install\" className=\"px-0 [&_pre]:my-0 [&_figure]:my-0\">\n    ```bash title=\"bash\"\n    npx @sly-cli/sly add draft-ui button\n    ```\n  </TabPanel>\n  <TabPanel id=\"manual-install\" className=\"px-0\">\n    <ComponentSource src=\"../../packages/ui/src/button.tsx\" />\n  </TabPanel>\n</Tabs>\n\n## Examples\n\n### Default\n\nThe default **`Button`** uses variant `solid` and size `md`.\n\n<ComponentExample name=\"button\" story=\"default\" />\n\n### Themes\n\nYou can use the `variant` prop to alter the **`Button`** theme. Variants `solid`, `outline`, `subtle`, `ghost`, `destructive`, and `link` are included by default.\n\n<ComponentExample name=\"button\" story=\"theme\" />\n\n### Sizes\n\nYou can use the `size` prop to alter the **`Button`** size. Sizes `xs`, `sm`, `md`, and `lg` are included by default.\n\n<ComponentExample name=\"button\" story=\"sizes\" />\n\n### Disabled\n\nUse the `isDisabled` prop to make the **`Button`** disabled.\n\n<ComponentExample name=\"button\" story=\"disabled\" />\n"
  },
  {
    "path": "apps/docs/content/components/checkbox-group.mdx",
    "content": "---\ntitle: Checkbox Group\ndescription: A checkbox group allows a user to select multiple items from a list of options.\nisComponent: true\n---\n\n## Installation\n\n<Tabs>\n  <TabList aria-label=\"Preview and Code Tabs\">\n      <Tab id=\"cli-install\">CLI</Tab>\n      <Tab id=\"manual-install\">Copy & Paste</Tab>\n  </TabList>\n  <TabPanel id=\"cli-install\" className=\"px-0 [&_pre]:my-0 [&_figure]:my-0\">\n    ```bash title=\"bash\"\n    npx @sly-cli/sly add draft-ui checkbox-group\n    ```\n  </TabPanel>\n  <TabPanel id=\"manual-install\" className=\"px-0\">\n    <ComponentSource src=\"../../packages/ui/src/checkbox-group.tsx\" />\n  </TabPanel>\n</Tabs>\n\n## Examples\n\n### Default\n\nThe default **`CheckboxGroup`** uses orientation `vertical`.\n\n<ComponentExample name=\"checkbox-group\" story=\"default\" />\n\n### Horizontal\n\nSet the `orientation` prop to `horizontal` to use a horizontal **`CheckboxGroup`**.\n\n<ComponentExample name=\"checkbox-group\" story=\"horizontal\" />\n\n### Disabled\n\nUse the `isDisabled` prop to make the entire **`CheckboxGroup`** disabled.\n\n<ComponentExample name=\"checkbox-group\" story=\"disabled\" />\n"
  },
  {
    "path": "apps/docs/content/components/checkbox.mdx",
    "content": "---\ntitle: Checkbox\ndescription: A checkbox allows a user to select multiple items from a list of individual items, or to mark one individual item as selected.\nisComponent: true\n---\n\n## Installation\n\n<Tabs>\n  <TabList aria-label=\"Preview and Code Tabs\">\n      <Tab id=\"cli-install\">CLI</Tab>\n      <Tab id=\"manual-install\">Copy & Paste</Tab>\n  </TabList>\n  <TabPanel id=\"cli-install\" className=\"px-0 [&_pre]:my-0 [&_figure]:my-0\">\n    ```bash title=\"bash\"\n    npx @sly-cli/sly add draft-ui checkbox\n    ```\n  </TabPanel>\n  <TabPanel id=\"manual-install\" className=\"px-0\">\n    <ComponentSource src=\"../../packages/ui/src/checkbox.tsx\" />\n  </TabPanel>\n</Tabs>\n\n## Examples\n\n### Default\n\nThe default **`Checkbox`** uses size `md`.\n\n<ComponentExample name=\"checkbox\" story=\"default\" />\n\n### Sizes\n\nYou can use the `size` prop to alter the **`Checkbox`** size. Sizes `sm`, `md`, and `lg` are included by default.\n\n<ComponentExample name=\"checkbox\" story=\"sizes\" />\n\n### Disabled\n\nUse the `isDisabled` prop to make an individual **`Checkbox`** disabled.\n\n<ComponentExample name=\"checkbox\" story=\"disabled\" />\n"
  },
  {
    "path": "apps/docs/content/components/combo-box.mdx",
    "content": "---\ntitle: Combo Box\ndescription: A combo box combines a text input with a listbox, allowing users to filter a list of options to items matching a query.\nisComponent: true\n---\n\n## Installation\n\n<Tabs>\n  <TabList aria-label=\"Preview and Code Tabs\">\n      <Tab id=\"cli-install\">CLI</Tab>\n      <Tab id=\"manual-install\">Copy & Paste</Tab>\n  </TabList>\n  <TabPanel id=\"cli-install\" className=\"px-0 [&_pre]:my-0 [&_figure]:my-0\">\n    ```bash title=\"bash\"\n    npx @sly-cli/sly add draft-ui combobox\n    ```\n  </TabPanel>\n  <TabPanel id=\"manual-install\" className=\"px-0\">\n    <ComponentSource src=\"../../packages/ui/src/combobox.tsx\" />\n  </TabPanel>\n</Tabs>\n\n## Examples\n\n### Default\n\nThis is the default **`ComboBox`**\n\n<ComponentExample name=\"combobox\" story=\"default\" />\n\n### With Button\n\nAny React Aria Component **`Button`** placed inside **`ComboBox`**, will automatically toggle the appearance of **`ComboBoxContent`** when pressed.\n\n<ComponentExample name=\"combobox\" story=\"with-button\" />\n\n### Disabled Keys\n\nTo disable specific **`ComboBoxItem`**'s, add an array of `disabledKey`'s to **`ComboBox`**. Ensure the **`ComboBoxItem`**'s have appropriate, corresponding `id`'s.\n\n<ComponentExample name=\"combobox\" story=\"disabled-keys\" />\n\n### Disabled\n\nUse the `isDisabled` prop to disable the **`ComboxInput`** altogether.\n\n<ComponentExample name=\"combobox\" story=\"disabled\" />\n"
  },
  {
    "path": "apps/docs/content/components/date-picker.mdx",
    "content": "---\ntitle: Date Picker\ndescription: A date picker combines a DateField and a Calendar popover to allow users to enter or select a date and time value.\nisComponent: true\n---\n\n## Installation\n\n<Tabs>\n  <TabList aria-label=\"Preview and Code Tabs\">\n      <Tab id=\"cli-install\">CLI</Tab>\n      <Tab id=\"manual-install\">Copy & Paste</Tab>\n  </TabList>\n  <TabPanel id=\"cli-install\" className=\"px-0 [&_pre]:my-0 [&_figure]:my-0\">\n    ```bash title=\"bash\"\n    npx @sly-cli/sly add draft-ui date-picker\n    ```\n  </TabPanel>\n  <TabPanel id=\"manual-install\" className=\"px-0\">\n    <ComponentSource src=\"../../packages/ui/src/date-picker.tsx\" />\n  </TabPanel>\n</Tabs>\n\n## Examples\n\n### Default\n\nThis is the default **`DatePicker`** example.\n\n<ComponentExample name=\"date-picker\" story=\"default\" />\n\n### Disabled\n\nUse the `isDisabled` prop to disable the entire **`DatePicker`** including the **`DateInput`**.\n\n<ComponentExample name=\"date-picker\" story=\"disabled\" />\n"
  },
  {
    "path": "apps/docs/content/components/date-range-picker.mdx",
    "content": "---\ntitle: Date Range Picker\ndescription: A date range picker combines two DateFields and a RangeCalendar popover to allow users to enter or select a date and time range.\nisComponent: true\n---\n\n## Installation\n\n<Tabs>\n  <TabList aria-label=\"Preview and Code Tabs\">\n      <Tab id=\"cli-install\">CLI</Tab>\n      <Tab id=\"manual-install\">Copy & Paste</Tab>\n  </TabList>\n  <TabPanel id=\"cli-install\" className=\"px-0 [&_pre]:my-0 [&_figure]:my-0\">\n    ```bash title=\"bash\"\n    npx @sly-cli/sly add draft-ui date-range-picker\n    ```\n  </TabPanel>\n  <TabPanel id=\"manual-install\" className=\"px-0\">\n    <ComponentSource src=\"../../packages/ui/src/date-range-picker.tsx\" />\n  </TabPanel>\n</Tabs>\n\n## Examples\n\n### Default\n\nThis is the default **`DateRangePicker`**\n\n<ComponentExample name=\"date-range-picker\" story=\"default\" />\n\n### Disabled\n\nUse the `isDisabled` prop to disable the entire **`DateRangePicker`** including the **`DateInput`**'s.\n\n<ComponentExample name=\"date-range-picker\" story=\"disabled\" />\n"
  },
  {
    "path": "apps/docs/content/components/grid-list.mdx",
    "content": "---\ntitle: Grid List\ndescription: A grid list displays a list of interactive items, with support for keyboard navigation, single or multiple selection, and row actions.\nisComponent: true\nisWip: true\nisComing: true\n---\n\n## Installation\n\n<Tabs>\n  <TabList aria-label=\"Preview and Code Tabs\">\n      <Tab id=\"cli-install\">CLI</Tab>\n      <Tab id=\"manual-install\">Copy & Paste</Tab>\n  </TabList>\n  <TabPanel id=\"cli-install\" className=\"px-0 [&_pre]:my-0 [&_figure]:my-0\">\n    ```bash title=\"bash\"\n    npx @sly-cli/sly add draft-ui grid-list\n    ```\n  </TabPanel>\n  <TabPanel id=\"manual-install\" className=\"px-0\">\n    <ComponentSource src=\"../../packages/ui/src/grid-list.tsx\" />\n  </TabPanel>\n</Tabs>\n\n## Examples\n\n### Default\n\nThis is the default example\n\n---\n\n### Disabled\n\nThis is the disabled example\n\n---\n\n### With Label\n\nThis is an example with a label\n\n---\n\n### With Text\n\nThis is an example with text\n\n---\n\n### With Input\n\nThis is an example with a input\n"
  },
  {
    "path": "apps/docs/content/components/icon-button.mdx",
    "content": "---\ntitle: Icon Button\ndescription: Displays a form input field or a component that looks like an input field.\nisComponent: true\n---\n\n## Installation\n\n<Tabs>\n  <TabList aria-label=\"Preview and Code Tabs\">\n      <Tab id=\"cli-install\">CLI</Tab>\n      <Tab id=\"manual-install\">Copy & Paste</Tab>\n  </TabList>\n  <TabPanel id=\"cli-install\" className=\"px-0 [&_pre]:my-0 [&_figure]:my-0\">\n    ```bash title=\"bash\"\n    npx @sly-cli/sly add draft-ui icon-button\n    ```\n  </TabPanel>\n  <TabPanel id=\"manual-install\" className=\"px-0\">\n    <ComponentSource src=\"../../packages/ui/src/icon-button.tsx\" />\n  </TabPanel>\n</Tabs>\n\n## Examples\n\n### Default\n\nThe default **`IconButton`** uses variant `solid` and size `md`.\n\n<Callout type=\"note\">\n  When using an **`IconButton`** you should almost always use an `aria-label`.\n  In some components, however, React Aria Components will automatically assign\n  an `aria-label` to buttons.\n</Callout>\n\n<ComponentExample name=\"icon-button\" story=\"default\" />\n\n### Themes\n\nYou can use the `variant` prop to alter the button theme. Variants `solid`, `outline`, `subtle`, `ghost`, `destructive`, and `link` are included by default.\n\n<ComponentExample name=\"icon-button\" story=\"theme\" />\n\n### Sizes\n\nYou can use the `size` prop to alter the button size. Sizes `xs`, `sm`, `md`, and `lg` are included by default.\n\n<ComponentExample name=\"icon-button\" story=\"sizes\" />\n\n### Disabled\n\nUse the `isDisabled` prop to make the **`IconButton`** disabled.\n\n<ComponentExample name=\"icon-button\" story=\"disabled\" />\n"
  },
  {
    "path": "apps/docs/content/components/input.mdx",
    "content": "---\ntitle: Input\ndescription: Displays a form input field or a component that looks like an input field.\nisComponent: true\n---\n\n<Callout type=\"important\">\n  **`Input`** is a primitive component, it is not meant to be used on it's own.\n  Typically, it is used in any component that handles raw text, such as\n  **`TextField`**, **`NumberField`**, **`SearchField`**, and **`ComboxBox`**.\n</Callout>\n\n## Installation\n\n<Tabs>\n  <TabList aria-label=\"Preview and Code Tabs\">\n      <Tab id=\"cli-install\">CLI</Tab>\n      <Tab id=\"manual-install\">Copy & Paste</Tab>\n  </TabList>\n  <TabPanel id=\"cli-install\" className=\"px-0 [&_pre]:my-0 [&_figure]:my-0\">\n    ```bash title=\"bash\"\n    npx @sly-cli/sly add draft-ui input\n    ```\n  </TabPanel>\n  <TabPanel id=\"manual-install\" className=\"px-0\">\n    <ComponentSource src=\"../../packages/ui/src/input.tsx\" />\n  </TabPanel>\n</Tabs>\n\n## Examples\n\n### Default\n\nThe default **`Input`** uses size `md`.\n\n<ComponentExample name=\"input\" story=\"default\" />\n\n### Size\n\nYou can use the `size` prop to alter the input size. Sizes `xs`, `sm`, `md`, and `lg` are included by default.\n\n<ComponentExample name=\"input\" story=\"sizes\" />\n\n### Disabled\n\nUse the `disabled` prop to make the **`Input`** disabled.\n\n<Callout type=\"warning\">\n  Currently, the **`Input`** component uses the `disabled` prop rather than `isDisabled`.\n</Callout>\n\n<ComponentExample name=\"input\" story=\"disabled\" />\n"
  },
  {
    "path": "apps/docs/content/components/label.mdx",
    "content": "---\ntitle: Label\ndescription: Displays a form input field or a component that looks like an input field.\nisComponent: true\n---\n\n<Callout type=\"important\">\n  **`Label`** is a primitive component, it is not meant to be used on it's own.\n  Many components that behave as form inputs automatically handle linking labels\n  to their respective inputs, such as **`DatePicker`**, **`RadioGroup`**,\n  **`Select`**, **`TextField`**, **`Switch`**, etc.\n</Callout>\n\n## Installation\n\n<Tabs>\n  <TabList aria-label=\"Preview and Code Tabs\">\n      <Tab id=\"cli-install\">CLI</Tab>\n      <Tab id=\"manual-install\">Copy & Paste</Tab>\n  </TabList>\n  <TabPanel id=\"cli-install\" className=\"px-0 [&_pre]:my-0 [&_figure]:my-0\">\n    ```bash title=\"bash\"\n    npx @sly-cli/sly add draft-ui label\n    ```\n  </TabPanel>\n  <TabPanel id=\"manual-install\" className=\"px-0\">\n    <ComponentSource src=\"../../packages/ui/src/label.tsx\" />\n  </TabPanel>\n</Tabs>\n\n## Examples\n\n### Default\n\nThis is the default **`Label`**\n\n<ComponentExample name=\"label\" story=\"default\" />\n"
  },
  {
    "path": "apps/docs/content/components/menu.mdx",
    "content": "---\ntitle: Menu\ndescription: A menu displays a list of actions or options that a user can choose.\nisComponent: true\n---\n\n## Installation\n\n<Tabs>\n  <TabList aria-label=\"Preview and Code Tabs\">\n      <Tab id=\"cli-install\">CLI</Tab>\n      <Tab id=\"manual-install\">Copy & Paste</Tab>\n  </TabList>\n  <TabPanel id=\"cli-install\" className=\"px-0 [&_pre]:my-0 [&_figure]:my-0\">\n    ```bash title=\"bash\"\n    npx @sly-cli/sly add draft-ui menu\n    ```\n  </TabPanel>\n  <TabPanel id=\"manual-install\" className=\"px-0\">\n    <ComponentSource src=\"../../packages/ui/src/menu.tsx\" />\n  </TabPanel>\n</Tabs>\n\n## Examples\n\n### Default\n\nThis is the default **`Menu`** example.\n\n<ComponentExample name=\"menu\" story=\"default\" />\n\n### Disabled\n\nMake specific **`MenuItem`**'s disabled by adding their `id` to the **`MenuContent`**'s `disabledKeys` prop.\n\n<ComponentExample name=\"menu\" story=\"disabled\" />\n\n### With Sections\n\nAdd sections to the menu by using **`MenuSection`** and **`MenuHeader`**.\n\n<ComponentExample name=\"menu\" story=\"with-sections\" />\n\n### As Checkbox List\n\n**`MenuItem`** can act checkboxes by setting the **`MenuContent`**'s `selectionMode` prop to `multiple`.\n\n<ComponentExample name=\"menu\" story=\"as-checkbox\" />\n\n### As Radio List\n\n**`MenuItem`** can act radios by setting the **`MenuContent`**'s `selectionMode` prop to `single`.\n\n<ComponentExample name=\"menu\" story=\"as-radio\" />\n\n### Complex Menu Items\n\n**Coming Soon**: An example showing how to properly create **`MenuItem`**s with complex content.\n"
  },
  {
    "path": "apps/docs/content/components/meter.mdx",
    "content": "---\ntitle: Meter\ndescription: A meter represents a quantity within a known range, or a fractional value.\nisComponent: true\n---\n\n## Installation\n\n<Tabs>\n  <TabList aria-label=\"Preview and Code Tabs\">\n      <Tab id=\"cli-install\">CLI</Tab>\n      <Tab id=\"manual-install\">Copy & Paste</Tab>\n  </TabList>\n  <TabPanel id=\"cli-install\" className=\"px-0 [&_pre]:my-0 [&_figure]:my-0\">\n    ```bash title=\"bash\"\n    npx @sly-cli/sly add draft-ui meter\n    ```\n  </TabPanel>\n  <TabPanel id=\"manual-install\" className=\"px-0\">\n    <ComponentSource src=\"../../packages/ui/src/meter.tsx\" />\n  </TabPanel>\n</Tabs>\n\n## Examples\n\n<Callout type=\"note\">\n  Althought similar to **`ProgressBar`**, **`Meter`** is used to represent an\n  amount or quantity. For example: Storage space, download speed, or battery\n  life.\n</Callout>\n\n### Default\n\nThis is the default **`Meter`**\n\n<ComponentExample name=\"meter\" story=\"default\" />\n\n### With Custom Children\n\n{/* TODO */}\n\n**Coming soon:** An example of **`Meter`** with custom children\n"
  },
  {
    "path": "apps/docs/content/components/modal.mdx",
    "content": "---\ntitle: Modal\ndescription: A modal is an overlay element which blocks interaction with elements outside it.\nisComponent: true\n---\n\n## Installation\n\n<Tabs>\n  <TabList aria-label=\"Preview and Code Tabs\">\n      <Tab id=\"cli-install\">CLI</Tab>\n      <Tab id=\"manual-install\">Copy & Paste</Tab>\n  </TabList>\n  <TabPanel id=\"cli-install\" className=\"px-0 [&_pre]:my-0 [&_figure]:my-0\">\n    ```bash title=\"bash\"\n    npx @sly-cli/sly add draft-ui modal\n    ```\n  </TabPanel>\n  <TabPanel id=\"manual-install\" className=\"px-0\">\n    <ComponentSource src=\"../../packages/ui/src/modal.tsx\" />\n  </TabPanel>\n</Tabs>\n\n## Examples\n\n### Default\n\nThe default **`Modal`** uses size `md`.\n\n<ComponentExample name=\"modal\" story=\"default\" />\n\n### Sizes\n\nYou can use the `size` prop to alter the button size. Sizes `xs`, `sm`, `md`, `lg`, `xl`, and `full` are included by default.\n\n<ComponentExample name=\"modal\" story=\"sizes\" />\n\n### Set Autofocus\n\nYou can manually control which element recieves focus when the **`Modal`** opens by setting `autoFocus` on a focusable element.\n\n<ComponentExample name=\"modal\" story=\"set-autofocus\" />\n\n### Dismissable\n\nModals are dismissable by clicking outside by default or by pressing the <kdb>Esc</kdb> key. To prevent this, set `isDismissable` to `false` and/or `isKeyboardDismissDisabled` to `true`.\n\n<ComponentExample name=\"modal\" story=\"dismissable-false\" />\n"
  },
  {
    "path": "apps/docs/content/components/number-field.mdx",
    "content": "---\ntitle: Number Field\ndescription: A number field allows a user to enter a number, and increment or decrement the value using stepper buttons.\nisComponent: true\n---\n\n## Installation\n\n<Tabs>\n  <TabList aria-label=\"Preview and Code Tabs\">\n      <Tab id=\"cli-install\">CLI</Tab>\n      <Tab id=\"manual-install\">Copy & Paste</Tab>\n  </TabList>\n  <TabPanel id=\"cli-install\" className=\"px-0 [&_pre]:my-0 [&_figure]:my-0\">\n    ```bash title=\"bash\"\n    npx @sly-cli/sly add draft-ui number-field\n    ```\n  </TabPanel>\n  <TabPanel id=\"manual-install\" className=\"px-0\">\n    <ComponentSource src=\"../../packages/ui/src/number-field.tsx\" />\n  </TabPanel>\n</Tabs>\n\n## Examples\n\n### Default\n\nThis is the default **`NumberField`**\n\n<ComponentExample name=\"number-field\" story=\"default\" />\n\n### With Stepper\n\nThis is an example using the built-in **`NumberInputStepper`**.\n\n<ComponentExample name=\"number-field\" story=\"with-stepper\" />\n\n### With Mobile Stepper\n\nThis is an example of a custom **`NumberField`** that makes the stepper buttons easier to press on touch devices.\n\n<ComponentExample name=\"number-field\" story=\"with-mobile-stepper\" />\n\n### Disabled\n\nUse the `isDisabled` prop to make the **`NumberField`** disabled.\n\n<ComponentExample name=\"number-field\" story=\"disabled\" />\n"
  },
  {
    "path": "apps/docs/content/components/progress-bar.mdx",
    "content": "---\ntitle: Progress Bar\ndescription: Progress bars show either determinate or indeterminate progress of an operation over time.\nisComponent: true\n---\n\n## Installation\n\n<Tabs>\n  <TabList aria-label=\"Preview and Code Tabs\">\n      <Tab id=\"cli-install\">CLI</Tab>\n      <Tab id=\"manual-install\">Copy & Paste</Tab>\n  </TabList>\n  <TabPanel id=\"cli-install\" className=\"px-0 [&_pre]:my-0 [&_figure]:my-0\">\n    ```bash title=\"bash\"\n    npx @sly-cli/sly add draft-ui progress-bar\n    ```\n  </TabPanel>\n  <TabPanel id=\"manual-install\" className=\"px-0\">\n    <ComponentSource src=\"../../packages/ui/src/progress-bar.tsx\" />\n  </TabPanel>\n</Tabs>\n\n## Examples\n\n<Callout type=\"note\">\n  Althought similar to **`Meter`**, **`ProgressBar`** is used to represent\n  progress. In other words, it would typically be used in circumstances that\n  start at zero and tend toward completion. For example: Loading progress,\n  download progress, or battery charge progress.\n</Callout>\n\n### Default\n\nThis is the default **`ProgressBar`**\n\n<ComponentExample name=\"progress-bar\" story=\"default\" />\n\n### With Custom Children\n\n{/* TODO */}\n\n**Coming soon:** This is an example with custom children\n"
  },
  {
    "path": "apps/docs/content/components/radio-group.mdx",
    "content": "---\ntitle: Radio Group\ndescription: A radio group allows a user to select a single item from a list of mutually exclusive options.\nisComponent: true\n---\n\n## Installation\n\n<Tabs>\n  <TabList aria-label=\"Preview and Code Tabs\">\n      <Tab id=\"cli-install\">CLI</Tab>\n      <Tab id=\"manual-install\">Copy & Paste</Tab>\n  </TabList>\n  <TabPanel id=\"cli-install\" className=\"px-0 [&_pre]:my-0 [&_figure]:my-0\">\n    ```bash title=\"bash\"\n    npx @sly-cli/sly add draft-ui radio-group\n    ```\n  </TabPanel>\n  <TabPanel id=\"manual-install\" className=\"px-0\">\n    <ComponentSource src=\"../../packages/ui/src/radio-group.tsx\" />\n  </TabPanel>\n</Tabs>\n\n## Examples\n\n### Default\n\nThe default **`RadioGroup`** uses orientation `vertical`.\n\n<ComponentExample name=\"radio-group\" story=\"default\" />\n\n### Horizontal\n\nSet the `orientation` prop to `horizontal` to use a horizontal **`RadioGroup`**.\n\n<ComponentExample name=\"radio-group\" story=\"horizontal\" />\n\n### Disabled\n\nUse the `isDisabled` prop to make the entire **`RadioGroup`** disabled.\n\n<ComponentExample name=\"radio-group\" story=\"disabled\" />\n"
  },
  {
    "path": "apps/docs/content/components/radio.mdx",
    "content": "---\ntitle: Radio\ndescription: Displays a form input field or a component that looks like an input field.\nisComponent: true\n---\n\n## Installation\n\n<Tabs>\n  <TabList aria-label=\"Preview and Code Tabs\">\n      <Tab id=\"cli-install\">CLI</Tab>\n      <Tab id=\"manual-install\">Copy & Paste</Tab>\n  </TabList>\n  <TabPanel id=\"cli-install\" className=\"px-0 [&_pre]:my-0 [&_figure]:my-0\">\n    ```bash title=\"bash\"\n    npx @sly-cli/sly add draft-ui radio\n    ```\n  </TabPanel>\n  <TabPanel id=\"manual-install\" className=\"px-0\">\n    <ComponentSource src=\"../../packages/ui/src/radio.tsx\" />\n  </TabPanel>\n</Tabs>\n\n## Examples\n\n<Callout type=\"warning\">\n  **`Radio`** is a primitive component, it is not meant to be used on it's own. It must be wrapped in a **`RadioGroup`**.\n</Callout>\n\n### Default\n\nThe default **`Radio`** uses size `md`.\n\n<ComponentExample name=\"radio\" story=\"default\" />\n\n### Sizes\n\nYou can use the `size` prop to alter the **`Radio`** size. Sizes `sm`, `md`, and `lg` are included by default.\n\n<ComponentExample name=\"radio\" story=\"sizes\" />\n\n### Disabled\n\nUse the `isDisabled` prop to make an individual **`Radio`** disabled.\n\n<ComponentExample name=\"radio\" story=\"disabled\" />\n"
  },
  {
    "path": "apps/docs/content/components/search-field.mdx",
    "content": "---\ntitle: Search Field\ndescription: A search field allows a user to enter and clear a search query.\nisComponent: true\n---\n\n## Installation\n\n<Tabs>\n  <TabList aria-label=\"Preview and Code Tabs\">\n      <Tab id=\"cli-install\">CLI</Tab>\n      <Tab id=\"manual-install\">Copy & Paste</Tab>\n  </TabList>\n  <TabPanel id=\"cli-install\" className=\"px-0 [&_pre]:my-0 [&_figure]:my-0\">\n    ```bash title=\"bash\"\n    npx @sly-cli/sly add draft-ui search-field\n    ```\n  </TabPanel>\n  <TabPanel id=\"manual-install\" className=\"px-0\">\n    <ComponentSource src=\"../../packages/ui/src/search-field.tsx\" />\n  </TabPanel>\n</Tabs>\n\n## Examples\n\n### Default\n\nThis is the default **`SearchField`**\n\n<ComponentExample name=\"search-field\" story=\"default\" />\n\n### With Clear Button\n\nUse **`SearchFieldClearButton`** to display a button that clear the **`SearchField`** input. By default, it will only show up when the input is not empty.\n\n<ComponentExample name=\"search-field\" story=\"with-clear-button\" />\n"
  },
  {
    "path": "apps/docs/content/components/select.mdx",
    "content": "---\ntitle: Select\ndescription: A select displays a collapsible list of options and allows a user to select one of them.\nisComponent: true\n---\n\n## Installation\n\n<Tabs>\n  <TabList aria-label=\"Preview and Code Tabs\">\n      <Tab id=\"cli-install\">CLI</Tab>\n      <Tab id=\"manual-install\">Copy & Paste</Tab>\n  </TabList>\n  <TabPanel id=\"cli-install\" className=\"px-0 [&_pre]:my-0 [&_figure]:my-0\">\n    ```bash title=\"bash\"\n    npx @sly-cli/sly add draft-ui select\n    ```\n  </TabPanel>\n  <TabPanel id=\"manual-install\" className=\"px-0\">\n    <ComponentSource src=\"../../packages/ui/src/select.tsx\" />\n  </TabPanel>\n</Tabs>\n\n## Examples\n\n### Default\n\nThis is the default **`Select`**.\n\n<ComponentExample name=\"select\" story=\"default\" />\n\n### Disabled\n\nUse the `isDisabled` prop to make the **`Select`** disabled.\n\n<ComponentExample name=\"select\" story=\"disabled\" />\n"
  },
  {
    "path": "apps/docs/content/components/slider.mdx",
    "content": "---\ntitle: Slider\ndescription: A slider allows a user to select one or more values within a range.\nisComponent: true\n---\n\n## Installation\n\n<Tabs>\n  <TabList aria-label=\"Preview and Code Tabs\">\n      <Tab id=\"cli-install\">CLI</Tab>\n      <Tab id=\"manual-install\">Copy & Paste</Tab>\n  </TabList>\n  <TabPanel id=\"cli-install\" className=\"px-0 [&_pre]:my-0 [&_figure]:my-0\">\n    ```bash title=\"bash\"\n    npx @sly-cli/sly add draft-ui slider\n    ```\n  </TabPanel>\n  <TabPanel id=\"manual-install\" className=\"px-0\">\n    <ComponentSource src=\"../../packages/ui/src/slider.tsx\" />\n  </TabPanel>\n</Tabs>\n\n## Examples\n\n### Default\n\nThe default **`Slider`** uses orientation `horizontal`.\n\n<ComponentExample name=\"slider\" story=\"default\" />\n\n### Vertical\n\nSet the `orientation` prop to `vertical` to use a vertical **`Slider`**.\n\n<Callout type=\"important\">\n  `orientation` value passed to **`SliderFilledTrack`** must be set to `vertical` and you must give **`SliderTrack`** a specific height for this variation to be styled correctly.\n</Callout>\n\n<ComponentExample name=\"slider\" story=\"vertical\" />\n"
  },
  {
    "path": "apps/docs/content/components/switch.mdx",
    "content": "---\ntitle: Switch\ndescription: A text field allows a user to enter a plain text value with a keyboard.\nisComponent: true\n---\n\n## Installation\n\n<Tabs>\n  <TabList aria-label=\"Preview and Code Tabs\">\n      <Tab id=\"cli-install\">CLI</Tab>\n      <Tab id=\"manual-install\">Copy & Paste</Tab>\n  </TabList>\n  <TabPanel id=\"cli-install\" className=\"px-0 [&_pre]:my-0 [&_figure]:my-0\">\n    ```bash title=\"bash\"\n    npx @sly-cli/sly add draft-ui switch\n    ```\n  </TabPanel>\n  <TabPanel id=\"manual-install\" className=\"px-0\">\n    <ComponentSource src=\"../../packages/ui/src/switch.tsx\" />\n  </TabPanel>\n</Tabs>\n\n## Examples\n\n### Default\n\nThe default **`Switch`** uses size `md`.\n\n<ComponentExample name=\"switch\" story=\"default\" />\n\n### Alignment\n\nSwitches can be either left or right aligned.\n\n<ComponentExample name=\"switch\" story=\"alignment\" />\n\n### Sizes\n\nYou can use the `size` prop to alter the **`Switch`** size. Sizes `sm`, `md`, and `lg` are included by default.\n\n<ComponentExample name=\"switch\" story=\"sizes\" />\n\n### Disabled\n\nUse the `isDisabled` prop to make the **`Switch`** disabled.\n\n<ComponentExample name=\"switch\" story=\"disabled\" />\n"
  },
  {
    "path": "apps/docs/content/components/table.mdx",
    "content": "---\ntitle: Table\ndescription: A table displays data in rows and columns and enables a user to navigate its contents via directional navigation keys, and optionally supports row selection and sorting.\nisComponent: true\nisWip: true\nisComing: true\n---\n\n## Installation\n\n<Tabs>\n  <TabList aria-label=\"Preview and Code Tabs\">\n      <Tab id=\"cli-install\">CLI</Tab>\n      <Tab id=\"manual-install\">Copy & Paste</Tab>\n  </TabList>\n  <TabPanel id=\"cli-install\" className=\"px-0 [&_pre]:my-0 [&_figure]:my-0\">\n    ```bash title=\"bash\"\n    npx @sly-cli/sly add draft-ui table\n    ```\n  </TabPanel>\n  <TabPanel id=\"manual-install\" className=\"px-0\">\n    <ComponentSource src=\"../../packages/ui/src/table.tsx\" />\n  </TabPanel>\n</Tabs>\n\n## Examples\n\n### Default\n\nThis is the default example\n\n---\n\n### Disabled\n\nThis is the disabled example\n\n---\n\n### With Label\n\nThis is an example with a label\n\n---\n\n### With Text\n\nThis is an example with text\n\n---\n\n### With Input\n\nThis is an example with a input\n"
  },
  {
    "path": "apps/docs/content/components/tabs.mdx",
    "content": "---\ntitle: Tabs\ndescription: Tabs organize content into multiple sections and allow users to navigate between them.\nisComponent: true\n---\n\n## Installation\n\n<Tabs>\n  <TabList aria-label=\"Preview and Code Tabs\">\n      <Tab id=\"cli-install\">CLI</Tab>\n      <Tab id=\"manual-install\">Copy & Paste</Tab>\n  </TabList>\n  <TabPanel id=\"cli-install\" className=\"px-0 [&_pre]:my-0 [&_figure]:my-0\">\n    ```bash title=\"bash\"\n    npx @sly-cli/sly add draft-ui tabs\n    ```\n  </TabPanel>\n  <TabPanel id=\"manual-install\" className=\"px-0\">\n    <ComponentSource src=\"../../packages/ui/src/tabs.tsx\" />\n  </TabPanel>\n</Tabs>\n\n## Examples\n\n### Default\n\nThe default **`Tabs`** uses orientation `horizontal`.\n\n<ComponentExample name=\"tabs\" story=\"default\" />\n\n### Vertical\n\nSet the `orientation` prop to `vertical` to use vertical **`Tabs`**.\n\n<ComponentExample name=\"tabs\" story=\"vertical\" />\n\n### Disabled Keys\n\nUse `disabledKeys` prop to disable specific **`Tab`**'s **`ComboBox`**.\n\n<ComponentExample name=\"tabs\" story=\"disabled-keys\" />\n\n### Disabled\n\nUse the `isDisabled` prop to disable all **`Tab`**'s.\n\n<ComponentExample name=\"tabs\" story=\"disabled\" />\n"
  },
  {
    "path": "apps/docs/content/components/text-field.mdx",
    "content": "---\ntitle: Text Field\ndescription: Displays a form input field or a component that looks like an input field.\nisComponent: true\n---\n\n## Installation\n\n<Tabs>\n  <TabList aria-label=\"Preview and Code Tabs\">\n      <Tab id=\"cli-install\">CLI</Tab>\n      <Tab id=\"manual-install\">Copy & Paste</Tab>\n  </TabList>\n  <TabPanel id=\"cli-install\" className=\"px-0 [&_pre]:my-0 [&_figure]:my-0\">\n    ```bash title=\"bash\"\n    npx @sly-cli/sly add draft-ui text-field\n    ```\n  </TabPanel>\n  <TabPanel id=\"manual-install\" className=\"px-0\">\n    <ComponentSource src=\"../../packages/ui/src/text-field.tsx\" />\n  </TabPanel>\n</Tabs>\n\n## Examples\n\n### Default\n\nThis is the default **`TextField`**.\n\n<ComponentExample name=\"text-field\" story=\"default\" />\n\n### With Error\n\nUse the `isInvalid` prop to make an **`Input`** invalid. You can also include an error message to tell users why the `input` is invalid.\n\n<ComponentExample name=\"text-field\" story=\"with-error\" />\n\n### Disabled\n\nUse the `isDisabled` prop to make the **`Input`** disabled.\n\n<ComponentExample name=\"text-field\" story=\"disabled\" />\n"
  },
  {
    "path": "apps/docs/content/components/toggle-button.mdx",
    "content": "---\ntitle: Toggle Button\ndescription: A toggle button allows a user to toggle a selection on or off, for example switching between two states or modes.\nisComponent: true\nisWip: true\nisComing: true\n---\n\n## Installation\n\n<Tabs>\n  <TabList aria-label=\"Preview and Code Tabs\">\n      <Tab id=\"cli-install\">CLI</Tab>\n      <Tab id=\"manual-install\">Copy & Paste</Tab>\n  </TabList>\n  <TabPanel id=\"cli-install\" className=\"px-0 [&_pre]:my-0 [&_figure]:my-0\">\n    ```bash title=\"bash\"\n    npx @sly-cli/sly add draft-ui toggle-button\n    ```\n  </TabPanel>\n  <TabPanel id=\"manual-install\" className=\"px-0\">\n    <ComponentSource src=\"../../packages/ui/src/toggle-button.tsx\" />\n  </TabPanel>\n</Tabs>\n\n## Examples\n\n### Default\n\n**Coming soon:** This is the default example\n\n{/* TODO */}\n\n---\n\n### Disabled\n\n**Coming soon:** This is the disabled example\n\n{/* TODO */}\n"
  },
  {
    "path": "apps/docs/content/components/tooltip.mdx",
    "content": "---\ntitle: Tooltip\ndescription: A tooltip displays a description of an element on hover or focus.\nisComponent: true\n---\n\n## Installation\n\n<Tabs>\n  <TabList aria-label=\"Preview and Code Tabs\">\n      <Tab id=\"cli-install\">CLI</Tab>\n      <Tab id=\"manual-install\">Copy & Paste</Tab>\n  </TabList>\n  <TabPanel id=\"cli-install\" className=\"px-0 [&_pre]:my-0 [&_figure]:my-0\">\n    ```bash title=\"bash\"\n    npx @sly-cli/sly add draft-ui tooltip\n    ```\n  </TabPanel>\n  <TabPanel id=\"manual-install\" className=\"px-0\">\n    <ComponentSource src=\"../../packages/ui/src/tooltip.tsx\" />\n  </TabPanel>\n</Tabs>\n\n## Examples\n\n### Default\n\nThe default **`Tooltip`** uses placement `top`.\n\n<ComponentExample name=\"tooltip\" story=\"default\" />\n\n### Placement\n\nSet the `placement` prop to change the default **`Tooltip`** placement.\n\n<ComponentExample name=\"tooltip\" story=\"placement\" />\n"
  },
  {
    "path": "apps/docs/content/getting-started/about.mdx",
    "content": "---\ntitle: About\ndescription: The purpose of Draft UI is to make building accessible applications\n  faster and easier than ever\norder: 4\n---\n\n## Make It Your Own\n\nI've intentionally avoided using the Tailwind config and\narbitrary values as much as possible. While you are welcome to copy\nand paste these components and use them in your projects as-is, the\ngoal of this project is to get your projects up and running as quickly\nas possible without having to worry about accessibility and\ninteractivity.\n\n## Special Thanks\n\nThere are many OSS projects who have inspired and power the backbone\nof this project. This project is a combination of other folks really\nhard work so I'd like to recognize and thank them:\n\n- [shadcn/ui](https://ui.shadcn.com): Without the inspiration of shadcn/ui, this project would not\n  exist. The idea to create a beautiful, copy and paste library\n  opened my eyes on how to make a useful tool without having to\n  worry about bundling, distribution, and a bunch of other things I\n  don't know much about.\n\n- [React Aria Components](https://react-spectrum.adobe.com/react-aria/react-aria-components.html): The backbone of this project. I consider React Aria to be the de\n  facto accessibility library on the web. Creating React Aria\n  Components has made it easier than ever to build UI that is\n  functional and accessible to all users.\n\n  I'd especially like to acknowledge [@devongovett](https://twitter.com/devongovett)\n  who has been representing React Aria on Twitter and has been very\n  communicative about the team's progress and quick to respond\n  to feedback.\n\n- [Chakra UI](): Although not directly involved with this project, I leveraged\n  many of their styling decisions where I wanted additional\n  flexibility with components. I also heavily relied on their naming\n  to conventions to compose components.\n\n  I've also been heavily combing through their repo to better\n  understand how their Storybook and Docs are working together.\n"
  },
  {
    "path": "apps/docs/content/getting-started/cli.mdx",
    "content": "---\ntitle: CLI\ndescription: Get started using Draft UI faster than ever by installing components right from the command line\nisNew: true\norder: 3\n---\n\n## Install Sly CLI\n\nYou're able to install Draft UI components from the command line thanks to an awesome project by [Jacob Paris](https://twitter.com/jacobmparis), [`@sly-cli/sly`](https://sly-cli.fly.dev/).\n\nRun the following code to add Draft UI to your project. **`sly`** will show you a list of components available to download.\n\n```bash title=\"bash\"\nnpx @sly-cli/sly add draft-ui\n```\n\n## Configuration\n\n**`@sly-cli/sly`** let's you configure some specific settings about how you want to install components from the CLI. Assuming you've followed the initial Draft UI installation instructions, this is what your `sly.json` should look like.\n\n```json title=\"sly.json\"\n{\n  \"$schema\": \"https://sly-cli.fly.dev/registry/config.json\",\n  \"libraries\": [\n    {\n      \"name\": \"draft-ui\",\n      \"directory\": \"./components\",\n      \"transformers\": [\"transform-sly-install.ts\"], // optional, otherwise leave empty\n      \"postinstall\": [],\n    }\n  ]\n}\n```\n\nOf course, if you've made your own customizations, you should update your `sly.json` to match those changes.\n\n## Transformers\n\n**`sly`** also allows you to manipulate how you install your components via transformers.\n\nIn order to use transformers, you'll need to install **`sly`** into your project:\n```bash title=\"bash\"\nnpm install -D @sly-cli/sly\n```\n\nFor example, if you're using a different path alias for your directories, overwrite the default values automatically.\n\n```ts title=\"transform-sly-install.ts\"\nconst cvaConfig = '@/lib/cva.config'\n\n/**\n * @type {import('@sly-cli/sly/dist').Transformer}\n */\nexport default async function transformSlyInstall(input: string) {\n  input = input.replace('@/lib/cva.config', cvaConfig)\n\n  return input\n}\n```\n\nFor additional information on tranformers, go to the [`@sly-cli/sly` repo](https://github.com/jacobparis-insiders/sly/blob/main/cli/README.md#transformers).\n"
  },
  {
    "path": "apps/docs/content/getting-started/installation.mdx",
    "content": "---\ntitle: Installation\ndescription: Here's everything you need to get started\norder: 2\n---\n\n<ListStepper>\n\n<ListStep>\n## Install TailwindCSS\n\nDepending on your project, steps to install Tailwind may vary.\nCheck out [their installation page](https://tailwindcss.com/docs/installation/framework-guides) for guidance.\n</ListStep>\n\n<ListStep>\n## Install Required Dependencies\n\n```bash title=\"bash\"\nnpm install react-aria-components@1.0.0 cva@beta tailwind-merge tailwindcss-animate tailwindcss-react-aria-components@1.0.0\n```\n\nThis project requires the following packages:\n\n- [react-aria-components@1.0.0](https://github.com/adobe/react-spectrum/tree/main/packages/react-aria-components)\n- [cva@beta](https://github.com/joe-bell/cva)\n- [tailwind-merge](https://github.com/dcastil/tailwind-merge)\n- [tailwindcss-animate](https://github.com/jamiebuilds/tailwindcss-animate)\n- [tailwindcss-react-aria-components@1.0.0](https://github.com/adobe/react-spectrum/tree/main/packages/tailwindcss-react-aria-components)\n</ListStep>\n\n<ListStep>\n## Install Icons\n\nDraft UI uses [Lucide Icons](https://lucide.dev/guide/packages/lucide-react) by default. You can use whichever library you prefer, but\nyou'll need to replace the default icons manually.\n\n```bash title=\"bash\"\nnpm install lucide-react\n```\n</ListStep>\n\n<ListStep>\n## Configure Path Aliases\n\nDraft UI uses the path alias <code>@/\\*</code> by default. If you\nwant to use a different alias, you&apos;ll need to update your\ncomponents.\n\n```json {3-6} title=\"tsconfig.json\"\n// ...\n{\n  \"compilerOptions\": {\n    \"baseUrl\": \".\",\n    \"paths\": {\n      \"@/*\": [\"./*\"]\n    }\n  }\n}\n// ...\n```\n</ListStep>\n\n<ListStep>\n## Configure Tailwind\n\nMake sure to include the `tailwindcss-animate` plugin.\n\n```js title=\"tailwind.config.js\"\n/** @type {import('tailwindcss').Config} */\nmodule.exports = {\n  darkMode: ['class'],\n  content: ['app/**/*.{ts,tsx}', 'components/**/*.{ts,tsx}'],\n  plugins: [\n    require('tailwindcss-animate'),\n    require('tailwindcss-react-aria-components'),\n  ],\n}\n```\n</ListStep>\n\n<ListStep>\n## Configure CVA\n\nAdd **`twMerge`** to your `cva.config.ts`. This way, anytime you use the `cx(...)` function any conflicting Tailwind classes will be gracefully resolved.\n\n```ts title=\"cva.config.ts\"\nimport { defineConfig } from 'cva'\nimport { twMerge } from 'tailwind-merge'\n\nexport const { cva, cx, compose } = defineConfig({\n  hooks: {\n    onComplete: (className) => twMerge(className),\n  },\n})\n```\n</ListStep>\n\n<ListStep>\n## Configure Routing (recommended)\nMany components use built-in **`Link`** components to handle navigation. By default, these links perform native browser navigation when they are interacted with.\n\nIn order for these links to work as expected with whichever framework you're using, wrap your application using React Aria's `RouterProvider` component.\n\n<Tabs>\n  <TabList>\n    <Tab id=\"nextjs-app\">Next.js App</Tab>\n    <Tab id=\"nextjs-pages\">Next.js Pages</Tab>\n    <Tab id=\"remix\">Remix</Tab>\n    <Tab id=\"react-router\">React Router</Tab>\n  </TabList>\n  <TabPanel id=\"nextjs-app\" className=\"px-0\">\n  ```tsx title=\"app/provider.tsx\"\n  'use client'\n\n  import { useRouter } from 'next/navigation'\n  import { RouterProvider } from 'react-aria-components'\n\n  export function ClientProviders({ children }) {\n    const router = useRouter()\n\n    return (\n      <RouterProvider navigate={router.push}>\n        {children}\n      </RouterProvider>\n    )\n  }\n  ```\n\n  ```tsx title=\"app/layout.tsx\"\n  import { ClientProviders } from './provider';\n\n  export default function RootLayout({ children }) {\n    return (\n      <html>\n        <body>\n          <ClientProviders>{children}</ClientProviders>\n        </body>\n      </html>\n    );\n  }\n  ```\n  </TabPanel>\n  <TabPanel id=\"nextjs-pages\" className=\"px-0\">\n  ```tsx title=\"pages/_app.tsx\"\n  import type { AppProps } from 'next/app'\n  import { useRouter } from 'next/router'\n  import { RouterProvider } from 'react-aria-components'\n\n  export default function MyApp({ Component, pageProps }: AppProps) {\n    let router = useRouter()\n\n    return (\n      <RouterProvider navigate={router.push}>\n        <Component {...pageProps} />\n      </RouterProvider>\n    )\n  }\n  ```\n  </TabPanel>\n  <TabPanel id=\"remix\" className=\"px-0\">\n  ```tsx title=\"app/root.tsx\"\n  import { useNavigate, Outlet } from '@remix-run/react'\n  import { RouterProvider } from 'react-aria-components'\n\n  export default function App() {\n    let navigate = useNavigate()\n\n    return (\n      <html lang=\"en\">\n        <head>\n          {/* ... */}\n        </head>\n        <body>\n          <RouterProvider navigate={navigate}>\n            <Outlet />\n          </RouterProvider>\n          {/* ... */}\n        </body>\n      </html>\n    )\n  }\n  ```\n  </TabPanel>\n  <TabPanel id=\"react-router\" className=\"px-0\">\n    ```tsx\n    import { BrowserRouter, useNavigate } from 'react-router-dom'\n    import { RouterProvider } from 'react-aria-components'\n\n    function App() {\n      let navigate = useNavigate()\n\n      return (\n        <RouterProvider navigate={navigate}>\n          {/* Your app here... */}\n          <Routes>\n            <Route path=\"/\" element={<HomePage />} />\n            {/* ... */}\n          </Routes>\n        </RouterProvider>\n      )\n    }\n\n    <BrowserRouter>\n      <App />\n    </BrowserRouter>\n    ```\n  </TabPanel>\n</Tabs>\n\nFor more information, go to the React Aria [Client Side Routing](https://react-spectrum.adobe.com/react-aria/routing.html).\n\n</ListStep>\n\n\n<ListStep>\n## Configure @sly-cli/sly (optional)\n\nIf your installation varies from any of the configs described above (like if your components are in a different location) you'll want to update your `sly.json` to make sure your CLI installs work correctly.\n\nGo to the <Link href=\"/getting-started/cli\">CLI page</Link> to learn more.\n</ListStep>\n\n<ListStep>\n## All Done!\n\nNow you're ready to start building your application!\n</ListStep>\n\n</ListStepper>\n"
  },
  {
    "path": "apps/docs/content/getting-started/introduction.mdx",
    "content": "---\ntitle: Introduction\ndescription: Copy and paste-able components built with React Aria Components and\n  Tailwind CSS\norder: 1\n---\n\nDraft UI has been massively inspired by **`shadcn/ui`** so I encourage you to take a look at [their introduction page](https://ui.shadcn.com/docs).\n\n---\n\nLong story short, Draft UI follows all the same ideals:\n\n- Copy and paste components give you full control over the component\n  code, it is yours to use.\n- Modify and adapt to your hearts content, using these docs as a\n  starting point.\n- These components should be able to be used in any framework that\n  supports React.\n- Draft UI is free to use on any personal or commercial projects.\n  And if you do, [let me know!](https://twitter.com/draft__ui)\n"
  },
  {
    "path": "apps/docs/contentlayer.config.ts",
    "content": "import { defineDocumentType, makeSource } from 'contentlayer/source-files'\n// @ts-ignore\nimport toc from 'markdown-toc'\nimport rehypePrettyCode from 'rehype-pretty-code'\nimport remarkGfm from 'remark-gfm'\nimport { visit } from 'unist-util-visit'\n\nimport { rehypeComponent } from './lib/rehype-component'\nimport { withTableOfContents } from './lib/remark/with-table-of-contents'\nimport { type TocItemProps } from './types'\n\nexport const ComponentDocument = defineDocumentType(() => ({\n  name: 'ComponentDocument',\n  filePathPattern: 'components/**/*.mdx',\n  contentType: 'mdx',\n  fields: {\n    title: {\n      type: 'string',\n      required: true,\n    },\n    description: {\n      type: 'string',\n    },\n    isComponent: {\n      type: 'boolean',\n    },\n    isWip: {\n      type: 'boolean',\n    },\n    isComing: {\n      type: 'boolean',\n    },\n  },\n  computedFields: {\n    slug: {\n      type: 'string',\n      resolve: (post) => `/docs/${post._raw.flattenedPath}`,\n    },\n    toc: {\n      type: 'json',\n      resolve: (doc): TocItemProps => toc(doc.body.raw, { maxdepth: 3 }).json,\n    },\n  },\n}))\n\nexport const GeneralDocument = defineDocumentType(() => ({\n  name: 'GeneralDocument',\n  filePathPattern: 'getting-started/**/*.mdx',\n  contentType: 'mdx',\n  fields: {\n    title: {\n      type: 'string',\n      required: true,\n    },\n    description: {\n      type: 'string',\n      required: true,\n    },\n    isNew: {\n      type: 'boolean',\n    },\n    order: {\n      type: 'number',\n      required: true,\n    },\n  },\n  computedFields: {\n    slug: {\n      type: 'string',\n      resolve: (post) => `/${post._raw.flattenedPath}`,\n    },\n    toc: {\n      type: 'json',\n      resolve: (doc): TocItemProps => toc(doc.body.raw, { maxdepth: 3 }).json,\n    },\n  },\n}))\n\nexport const ChangelogDocument = defineDocumentType(() => ({\n  name: 'ChangelogDocument',\n  filePathPattern: 'CHANGELOG.mdx',\n  contentType: 'mdx',\n  fields: {\n    title: {\n      type: 'string',\n      required: true,\n    },\n    description: {\n      type: 'string',\n      required: true,\n    },\n    order: {\n      type: 'number',\n      required: true,\n    },\n  },\n  computedFields: {\n    slug: {\n      type: 'string',\n      resolve: () => '/changelog',\n    },\n    toc: {\n      type: 'json',\n      resolve: (doc): TocItemProps => toc(doc.body.raw, { maxdepth: 2 }).json,\n    },\n  },\n}))\n\nexport default makeSource({\n  contentDirPath: 'content',\n  documentTypes: [ComponentDocument, ChangelogDocument, GeneralDocument],\n  mdx: {\n    rehypePlugins: [\n      rehypeComponent,\n      () => (tree) => {\n        visit(tree, (node) => {\n          if (node?.type === 'element' && node?.tagName === 'pre') {\n            const [codeEl] = node.children\n            if (codeEl.tagName !== 'code') {\n              return\n            }\n\n            if (codeEl.data?.meta) {\n              // Extract event from meta and pass it down the tree.\n              const regex = /event=\"([^\"]*)\"/\n              const match = codeEl.data?.meta.match(regex)\n              if (match) {\n                node.__event__ = match ? match[1] : null\n                codeEl.data.meta = codeEl.data.meta.replace(regex, '')\n              }\n            }\n\n            node.__rawString__ = codeEl.children?.[0].value\n            node.__src__ = node.properties?.__src__\n            node.__style__ = node.properties?.__style__\n          }\n        })\n      },\n      [\n        // @ts-expect-error related: https://github.com/atomiks/rehype-pretty-code/issues/145\n        rehypePrettyCode,\n        {\n          theme: 'dracula',\n          onVisitLine(node) {\n            // Prevent lines from collapsing in `display: grid` mode, and allow empty\n            // lines to be copy/pasted\n            if (node.children.length === 0) {\n              node.children = [{ type: 'text', value: ' ' }]\n            }\n          },\n          onVisitHighlightedLine(node) {\n            node.properties?.className?.push('line--highlighted')\n          },\n          onVisitHighlightedWord(node) {\n            node.properties.className = ['word--highlighted']\n          },\n        },\n      ],\n      () => (tree) => {\n        visit(tree, (node) => {\n          if (node?.type === 'element' && node?.tagName === 'figure') {\n            if (!('data-rehype-pretty-code-figure' in node.properties)) {\n              return\n            }\n\n            // Pass code snippet to figure wrapper\n            if (node.__rawString__) {\n              node.properties['__rawString__'] = node.__rawString__\n            }\n\n            // npm install\n            if (node.__rawString__?.startsWith('npm install')) {\n              const npmCommand = node.__rawString__\n              node.properties['__npmCommand__'] = npmCommand\n              node.properties['__yarnCommand__'] = npmCommand.replace(\n                'npm install',\n                'yarn add',\n              )\n              node.properties['__pnpmCommand__'] = npmCommand.replace(\n                'npm install',\n                'pnpm add',\n              )\n              node.properties['__niCommand__'] = npmCommand.replace(\n                'npm install',\n                'ni',\n              )\n            }\n\n            // npx\n            if (node.__rawString__?.startsWith('npx')) {\n              const npmCommand = node.__rawString__\n              node.properties['__npmCommand__'] = npmCommand\n              node.properties['__yarnCommand__'] = npmCommand\n              node.properties['__pnpmCommand__'] = npmCommand.replace(\n                'npx',\n                'pnpm dlx',\n              )\n              node.properties['__niCommand__'] = npmCommand.replace(\n                'npx',\n                'nlx',\n              )\n            }\n          }\n        })\n      },\n    ],\n    remarkPlugins: [remarkGfm, withTableOfContents],\n  },\n})\n"
  },
  {
    "path": "apps/docs/lib/cva.config.ts",
    "content": "import { defineConfig } from 'cva'\nimport { twMerge } from 'tailwind-merge'\n\nexport const { cva, cx, compose } = defineConfig({\n  hooks: {\n    onComplete: (className) => twMerge(className),\n  },\n})\n"
  },
  {
    "path": "apps/docs/lib/rehype-component.ts",
    "content": "import fs from 'fs'\nimport path from 'path'\n\nimport { u } from 'unist-builder'\nimport { visit } from 'unist-util-visit'\n\nimport { type UnistNode, type UnistTree } from '@/types'\n\nimport { Index } from '../__registry__'\n\nexport function rehypeComponent() {\n  return async (tree: UnistTree) => {\n    visit(tree, (node: UnistNode) => {\n      if (node.name === 'ComponentSource') {\n        const src = getNodeAttributeByName(node, 'src')?.value as string\n        if (!src) {\n          return null\n        }\n\n        try {\n          // Read the source file.\n          const filePath = path.join(process.cwd(), src)\n          let source = fs.readFileSync(filePath, 'utf8')\n          source = source.replaceAll('export default', 'export')\n\n          node.children?.push(\n            u('element', {\n              tagName: 'pre',\n              properties: {\n                __src__: src,\n              },\n              children: [\n                u('element', {\n                  tagName: 'code',\n                  properties: {\n                    className: ['language-tsx'],\n                  },\n                  children: [\n                    {\n                      type: 'text',\n                      value: source,\n                    },\n                  ],\n                }),\n              ],\n            }),\n          )\n        } catch (error) {\n          console.error(error)\n        }\n      }\n\n      if (node.name === 'ComponentExample') {\n        const name = getNodeAttributeByName(node, 'name')?.value as string\n        const story = getNodeAttributeByName(node, 'story')?.value as string\n\n        if (!name || !story) {\n          console.log('❌ name or story prop not passed on ComponentExample')\n          return null\n        }\n\n        try {\n          const component = Index[name][story]\n          const src = component.file\n\n          // Read the source file.\n          const filePath = path.join(process.cwd(), src)\n          let source = fs.readFileSync(filePath, 'utf8')\n          source = source.replaceAll('export default', 'export')\n\n          node.children?.push(\n            u('element', {\n              tagName: 'pre',\n              properties: {\n                __src__: src,\n              },\n              children: [\n                u('element', {\n                  tagName: 'code',\n                  properties: {\n                    className: ['language-tsx'],\n                  },\n                  children: [\n                    {\n                      type: 'text',\n                      value: source,\n                    },\n                  ],\n                }),\n              ],\n            }),\n          )\n        } catch (error) {\n          console.error(error)\n        }\n      }\n    })\n  }\n}\n\nfunction getNodeAttributeByName(node: UnistNode, name: string) {\n  return node.attributes?.find((attribute) => attribute.name === name)\n}\n"
  },
  {
    "path": "apps/docs/lib/remark/with-table-of-contents.ts",
    "content": "import Slugger from 'github-slugger'\nimport { toString } from 'hast-util-to-string'\nimport { visit } from 'unist-util-visit'\n\nexport function withTableOfContents() {\n  const slugs = new Slugger()\n  return (tree) => {\n    visit(tree, 'heading', (node) => {\n      node.data = node.data || {}\n      node.data = { hName: 'Heading' }\n\n      node.data.hProperties = node.data.hProperties || {}\n      node.data.hProperties.lvl = node.depth\n      node.data.hProperties.slug = slugs.slug(toString(node))\n    })\n  }\n}\n"
  },
  {
    "path": "apps/docs/next.config.js",
    "content": "// eslint-disable-next-line @typescript-eslint/no-var-requires\nconst { withContentlayer } = require('next-contentlayer')\n\n/** @type {import('next').NextConfig} */\nconst nextConfig = {\n  experimental: {\n    typedRoutes: true,\n  },\n  reactStrictMode: true,\n  transpilePackages: ['ui'],\n  redirects() {\n    return [\n      {\n        source: '/docs/components',\n        destination: '/docs/components/breadcrumbs',\n        permanent: true,\n      },\n      // Old Links\n      {\n        source: '/getting-started',\n        destination: '/getting-started/introduction',\n        permanent: true,\n      },\n      {\n        source: '/docs/introduction',\n        destination: '/getting-started/introduction',\n        permanent: true,\n      },\n      {\n        source: '/docs/installation',\n        destination: '/getting-started/installation',\n        permanent: true,\n      },\n      {\n        source: '/docs/about',\n        destination: '/getting-started/about',\n        permanent: true,\n      },\n      {\n        source: '/docs/changelog',\n        destination: '/changelog',\n        permanent: true,\n      },\n    ]\n  },\n}\n\nmodule.exports = withContentlayer(nextConfig)\n"
  },
  {
    "path": "apps/docs/package.json",
    "content": "{\n  \"name\": \"docs\",\n  \"version\": \"0.1.0\",\n  \"private\": true,\n  \"main\": \"src/index.ts\",\n  \"types\": \"src/index.ts\",\n  \"scripts\": {\n    \"dev\": \"rm -rf .next & rm -rf .contentlayer && contentlayer build && next dev\",\n    \"build\": \"contentlayer build && next build\",\n    \"start\": \"next start\",\n    \"lint\": \"eslint --ignore-path .gitignore '**/*.{js,jsx,cjs,mjs,ts,tsx,json}'\",\n    \"typecheck\": \"tsc --noEmit --pretty\"\n  },\n  \"dependencies\": {\n    \"@docsearch/react\": \"^3.4.0\",\n    \"@vercel/analytics\": \"^1.0.1\",\n    \"contentlayer\": \"0.3.4\",\n    \"fathom-client\": \"^3.5.0\",\n    \"fs-extra\": \"11.1.1\",\n    \"gray-matter\": \"^4.0.3\",\n    \"hast-util-to-string\": \"^3.0.0\",\n    \"lucide-react\": \"^0.259.0\",\n    \"markdown-toc\": \"^1.2.0\",\n    \"next\": \"14.0.4\",\n    \"next-contentlayer\": \"0.3.4\",\n    \"next-themes\": \"^0.2.1\",\n    \"react\": \"18.2.0\",\n    \"react-aria-components\": \"1.0.0\",\n    \"react-dom\": \"18.2.0\",\n    \"react-stately\": \"^3.21.0\",\n    \"rehype-pretty-code\": \"^0.12.3\",\n    \"remark-gfm\": \"^3.0.1\",\n    \"shikiji\": \"^0.9.0\",\n    \"tailwind-merge\": \"^1.13.2\",\n    \"ui\": \"workspace:*\",\n    \"unist-util-visit\": \"^5.0.0\"\n  },\n  \"devDependencies\": {\n    \"@tailwindcss/typography\": \"^0.5.9\",\n    \"@types/node\": \"18.16.19\",\n    \"@types/react\": \"18.0.27\",\n    \"@types/react-dom\": \"18.0.10\",\n    \"@types/unist\": \"^3.0.2\",\n    \"autoprefixer\": \"^10.4.14\",\n    \"eslint\": \"^8.56.0\",\n    \"eslint-config-custom\": \"workspace:*\",\n    \"eslint-plugin-mdx\": \"^2.3.2\",\n    \"postcss\": \"^8.4.23\",\n    \"postcss-config\": \"workspace:*\",\n    \"tailwind-config\": \"workspace:*\",\n    \"tailwindcss\": \"^3.4.1\",\n    \"ts-config\": \"workspace:*\",\n    \"ts-pattern\": \"^5.0.6\",\n    \"typescript\": \"^5.1.6\",\n    \"unist-builder\": \"^4.0.0\"\n  }\n}\n"
  },
  {
    "path": "apps/docs/postcss.config.js",
    "content": "/** @type {import('postcss').Config} */\nmodule.exports = require('postcss-config/postcss.config.cjs')\n"
  },
  {
    "path": "apps/docs/public/site.webmanifest",
    "content": "{\"name\":\"\",\"short_name\":\"\",\"icons\":[{\"src\":\"/android-chrome-192x192.png\",\"sizes\":\"192x192\",\"type\":\"image/png\"},{\"src\":\"/android-chrome-512x512.png\",\"sizes\":\"512x512\",\"type\":\"image/png\"}],\"theme_color\":\"#ffffff\",\"background_color\":\"#ffffff\",\"display\":\"standalone\"}"
  },
  {
    "path": "apps/docs/registry/breadcrumbs/default.tsx",
    "content": "import { ChevronRight } from 'lucide-react'\nimport { BreadcrumbItem, BreadcrumbLink, Breadcrumbs } from 'ui'\n\nexport default function Default() {\n  return (\n    <Breadcrumbs>\n      <BreadcrumbItem separator={<ChevronRight size=\"1em\" />}>\n        <BreadcrumbLink href=\"#\">Home</BreadcrumbLink>\n      </BreadcrumbItem>\n      <BreadcrumbItem separator={<ChevronRight size=\"1em\" />}>\n        <BreadcrumbLink href=\"#\">React Aria</BreadcrumbLink>\n      </BreadcrumbItem>\n      <BreadcrumbItem>\n        <BreadcrumbLink>useBreadcrumbs</BreadcrumbLink>\n      </BreadcrumbItem>\n    </Breadcrumbs>\n  )\n}"
  },
  {
    "path": "apps/docs/registry/button/default.tsx",
    "content": "import { Button } from 'ui'\n\nexport default function Default() {\n  return <Button>Press Me</Button>\n}"
  },
  {
    "path": "apps/docs/registry/button/disabled.tsx",
    "content": "import { Button } from 'ui'\n\nexport default function Disabled() {\n  return (\n    <div className=\"flex flex-wrap justify-center gap-4\">\n      <Button variant=\"solid\" isDisabled>\n        Solid\n      </Button>\n      <Button variant=\"outline\" isDisabled>\n        Outline\n      </Button>\n      <Button variant=\"subtle\" isDisabled>\n        Subtle\n      </Button>\n      <Button variant=\"ghost\" isDisabled>\n        Ghost\n      </Button>\n      <Button variant=\"destructive\" isDisabled>\n        Destructive\n      </Button>\n      <Button variant=\"link\" isDisabled>\n        Link\n      </Button>\n    </div>\n  )\n}"
  },
  {
    "path": "apps/docs/registry/button/sizes.tsx",
    "content": "import { Button } from 'ui'\n\nexport default function Sizes() {\n  return (\n    <div className=\"flex flex-wrap justify-center gap-4\">\n      <Button size=\"xs\">X Small</Button>\n      <Button size=\"sm\">Small</Button>\n      <Button size=\"md\">Medium</Button>\n      <Button size=\"lg\">Large</Button>\n    </div>\n  )\n}"
  },
  {
    "path": "apps/docs/registry/button/theme.tsx",
    "content": "import { Button } from 'ui'\n\nexport default function Theme() {\n  return (\n    <div className=\"flex flex-wrap justify-center gap-4\">\n      <Button variant=\"solid\">Solid</Button>\n      <Button variant=\"outline\">Outline</Button>\n      <Button variant=\"subtle\">Subtle</Button>\n      <Button variant=\"ghost\">Ghost</Button>\n      <Button variant=\"destructive\">Destructive</Button>\n      <Button variant=\"link\">Link</Button>\n    </div>\n  )\n}"
  },
  {
    "path": "apps/docs/registry/calendar/default.tsx",
    "content": "import {\n  Calendar,\n  CalendarCell,\n  CalendarGrid,\n  CalendarGridBody,\n  CalendarGridHeader,\n  CalendarHeader,\n  CalendarHeaderCell,\n  CalendarHeading,\n  CalendarNextButton,\n  CalendarPrevButton,\n} from 'ui'\n\nexport default function Default() {\n  return (\n    <Calendar>\n      <CalendarHeader>\n        <CalendarPrevButton />\n        <CalendarHeading />\n        <CalendarNextButton />\n      </CalendarHeader>\n      <CalendarGrid>\n        <CalendarGridHeader>\n          {(day) => <CalendarHeaderCell>{day}</CalendarHeaderCell>}\n        </CalendarGridHeader>\n        <CalendarGridBody>\n          {(date) => <CalendarCell date={date} />}\n        </CalendarGridBody>\n      </CalendarGrid>\n    </Calendar>\n  )\n}"
  },
  {
    "path": "apps/docs/registry/checkbox/default.tsx",
    "content": "import { Checkbox } from 'ui'\n\nexport default function Default() {\n  return (\n    <div className=\"space-y-4\">\n      <Checkbox value=\"cat\">Cat</Checkbox>\n      <Checkbox value=\"dog\" defaultSelected>\n        Dog\n      </Checkbox>\n      <Checkbox value=\"reptile\" isIndeterminate>\n        Reptile\n      </Checkbox>\n    </div>\n  )\n}"
  },
  {
    "path": "apps/docs/registry/checkbox/disabled.tsx",
    "content": "import { Checkbox } from 'ui'\n\nexport default function Sizes() {\n  return (\n    <div className=\"space-y-4\">\n      <Checkbox value=\"cat\">Medium Cat</Checkbox>\n      <Checkbox value=\"dog\" isDisabled>\n        Medium Dog\n      </Checkbox>\n      <Checkbox value=\"reptile\" defaultSelected isDisabled>\n        Medium Reptile\n      </Checkbox>\n    </div>\n  )\n}"
  },
  {
    "path": "apps/docs/registry/checkbox/sizes.tsx",
    "content": "import { Checkbox } from 'ui'\n\nexport default function Sizes() {\n  return (\n    <div className=\"space-y-6\">\n      <div className=\"space-y-1\">\n        <Checkbox size=\"sm\" value=\"cat-sm\">\n          Small Cat\n        </Checkbox>\n        <Checkbox size=\"sm\" value=\"dog-sm\">\n          Small Dog\n        </Checkbox>\n        <Checkbox size=\"sm\" value=\"reptile-sm\" isIndeterminate>\n          Small Reptile\n        </Checkbox>\n      </div>\n      <div className=\"space-y-2\">\n        <Checkbox size=\"md\" value=\"cat-md\">\n          Medium Cat\n        </Checkbox>\n        <Checkbox size=\"md\" value=\"dog-md\">\n          Medium Dog\n        </Checkbox>\n        <Checkbox size=\"md\" value=\"reptile-md\" isIndeterminate>\n          Medium Reptile\n        </Checkbox>\n      </div>\n      <div className=\"space-y-2\">\n        <Checkbox size=\"lg\" value=\"cat-lg\">\n          Large Cat\n        </Checkbox>\n        <Checkbox size=\"lg\" value=\"dog-lg\">\n          Large Dog\n        </Checkbox>\n        <Checkbox size=\"lg\" value=\"reptile-lg\" isIndeterminate>\n          Large Reptile\n        </Checkbox>\n      </div>\n    </div>\n  )\n}"
  },
  {
    "path": "apps/docs/registry/checkbox-group/default.tsx",
    "content": "import { Checkbox, CheckboxGroup, CheckboxGroupContent, Label } from 'ui'\n\nexport default function Default() {\n  return (\n    <CheckboxGroup>\n      <Label>Favorite sports</Label>\n      <CheckboxGroupContent>\n        <Checkbox value=\"soccer\">Soccer</Checkbox>\n        <Checkbox value=\"baseball\">Baseball</Checkbox>\n        <Checkbox value=\"basketball\">Basketball</Checkbox>\n      </CheckboxGroupContent>\n    </CheckboxGroup>\n  )\n}"
  },
  {
    "path": "apps/docs/registry/checkbox-group/disabled.tsx",
    "content": "import { Checkbox, CheckboxGroup, CheckboxGroupContent, Label } from 'ui'\n\nexport default function Default() {\n  return (\n    <CheckboxGroup isDisabled defaultValue={['basketball']}>\n      <Label>Favorite sports</Label>\n      <CheckboxGroupContent>\n        <Checkbox value=\"soccer\">Soccer</Checkbox>\n        <Checkbox value=\"baseball\" isIndeterminate>\n          Baseball\n        </Checkbox>\n        <Checkbox value=\"basketball\">Basketball</Checkbox>\n      </CheckboxGroupContent>\n    </CheckboxGroup>\n  )\n}"
  },
  {
    "path": "apps/docs/registry/checkbox-group/horizontal.tsx",
    "content": "import { Checkbox, CheckboxGroup, CheckboxGroupContent, Label } from 'ui'\n\nexport default function Horizontal() {\n  return (\n    <CheckboxGroup orientation=\"horizontal\">\n      <Label>Favorite sports</Label>\n      <CheckboxGroupContent>\n        <Checkbox value=\"soccer\">Soccer</Checkbox>\n        <Checkbox value=\"baseball\">Baseball</Checkbox>\n        <Checkbox value=\"basketball\">Basketball</Checkbox>\n      </CheckboxGroupContent>\n    </CheckboxGroup>\n  )\n}"
  },
  {
    "path": "apps/docs/registry/combobox/default.tsx",
    "content": "import {\n  ComboBox,\n  ComboBoxContent,\n  ComboBoxInput,\n  ComboBoxItem,\n  Label,\n} from 'ui'\n\nexport default function Default() {\n  return (\n    <ComboBox>\n      <Label>Favorite Animal</Label>\n      <ComboBoxInput />\n      <ComboBoxContent>\n        <ComboBoxItem textValue=\"Aardvark\">Aardvark</ComboBoxItem>\n        <ComboBoxItem textValue=\"Cat\">Cat</ComboBoxItem>\n        <ComboBoxItem textValue=\"Dog\">Dog</ComboBoxItem>\n        <ComboBoxItem textValue=\"Kangaroo\">Kangaroo</ComboBoxItem>\n        <ComboBoxItem textValue=\"Panda\">Panda</ComboBoxItem>\n        <ComboBoxItem textValue=\"Snake\">Snake</ComboBoxItem>\n      </ComboBoxContent>\n    </ComboBox>\n  )\n}"
  },
  {
    "path": "apps/docs/registry/combobox/disabled-keys.tsx",
    "content": "import { ChevronDown } from 'lucide-react'\nimport {\n  ComboBox,\n  ComboBoxButton,\n  ComboBoxContent,\n  ComboBoxInput,\n  ComboBoxItem,\n  iconButtonVariants,\n  Label,\n} from 'ui'\n\nexport default function DisabledKeys() {\n  return (\n    <ComboBox disabledKeys={['cat', 'kangaroo']}>\n      <Label>Favorite Animal</Label>\n      <div className=\"relative\">\n        <ComboBoxInput />\n        <div className=\"absolute inset-y-0 right-0 flex items-center p-1\">\n          <ComboBoxButton\n            className={iconButtonVariants({\n              variant: 'subtle',\n              size: 'sm',\n              className: 'ml-auto shrink-0',\n            })}\n          >\n            <ChevronDown size=\"16\" strokeWidth=\"3\" />\n          </ComboBoxButton>\n        </div>\n      </div>\n      <ComboBoxContent>\n        <ComboBoxItem id=\"aardvark\" textValue=\"Aardvark\">\n          Aardvark\n        </ComboBoxItem>\n        <ComboBoxItem id=\"cat\" textValue=\"Cat\">\n          Cat\n        </ComboBoxItem>\n        <ComboBoxItem id=\"dog\" textValue=\"Dog\">\n          Dog\n        </ComboBoxItem>\n        <ComboBoxItem id=\"kangaroo\" textValue=\"Kangaroo\">\n          Kangaroo\n        </ComboBoxItem>\n        <ComboBoxItem id=\"panda\" textValue=\"Panda\">\n          Panda\n        </ComboBoxItem>\n        <ComboBoxItem id=\"snake\" textValue=\"Snake\">\n          Snake\n        </ComboBoxItem>\n      </ComboBoxContent>\n    </ComboBox>\n  )\n}"
  },
  {
    "path": "apps/docs/registry/combobox/disabled.tsx",
    "content": "import { ChevronDown } from 'lucide-react'\nimport {\n  ComboBox,\n  ComboBoxButton,\n  ComboBoxContent,\n  ComboBoxInput,\n  ComboBoxItem,\n  iconButtonVariants,\n  Label,\n} from 'ui'\n\nexport default function Disabled() {\n  return (\n    <ComboBox isDisabled>\n      <Label>Favorite Animal</Label>\n      <div className=\"relative\">\n        <ComboBoxInput />\n        <div className=\"absolute inset-y-0 right-0 flex items-center p-1\">\n          <ComboBoxButton\n            className={iconButtonVariants({\n              variant: 'subtle',\n              size: 'sm',\n              className: 'ml-auto shrink-0',\n            })}\n          >\n            <ChevronDown size=\"16\" strokeWidth=\"3\" />\n          </ComboBoxButton>\n        </div>\n      </div>\n      <ComboBoxContent>\n        <ComboBoxItem textValue=\"Aardvark\">Aardvark</ComboBoxItem>\n        <ComboBoxItem textValue=\"Cat\">Cat</ComboBoxItem>\n        <ComboBoxItem textValue=\"Dog\">Dog</ComboBoxItem>\n        <ComboBoxItem textValue=\"Kangaroo\">Kangaroo</ComboBoxItem>\n        <ComboBoxItem textValue=\"Panda\">Panda</ComboBoxItem>\n        <ComboBoxItem textValue=\"Snake\">Snake</ComboBoxItem>\n      </ComboBoxContent>\n    </ComboBox>\n  )\n}"
  },
  {
    "path": "apps/docs/registry/combobox/with-button.tsx",
    "content": "import { ChevronDown } from 'lucide-react'\nimport {\n  ComboBox,\n  ComboBoxButton,\n  ComboBoxContent,\n  ComboBoxInput,\n  ComboBoxItem,\n  iconButtonVariants,\n  Label,\n} from 'ui'\n\nexport default function WithButton() {\n  return (\n    <ComboBox>\n      <Label>Favorite Animal</Label>\n      <div className=\"relative\">\n        <ComboBoxInput />\n        <div className=\"absolute inset-y-0 right-0 flex items-center p-1\">\n          <ComboBoxButton\n            className={iconButtonVariants({\n              variant: 'subtle',\n              size: 'sm',\n              className: 'ml-auto shrink-0',\n            })}\n          >\n            <ChevronDown size=\"16\" strokeWidth=\"3\" />\n          </ComboBoxButton>\n        </div>\n      </div>\n      <ComboBoxContent>\n        <ComboBoxItem textValue=\"Aardvark\">Aardvark</ComboBoxItem>\n        <ComboBoxItem textValue=\"Cat\">Cat</ComboBoxItem>\n        <ComboBoxItem textValue=\"Dog\">Dog</ComboBoxItem>\n        <ComboBoxItem textValue=\"Kangaroo\">Kangaroo</ComboBoxItem>\n        <ComboBoxItem textValue=\"Panda\">Panda</ComboBoxItem>\n        <ComboBoxItem textValue=\"Snake\">Snake</ComboBoxItem>\n      </ComboBoxContent>\n    </ComboBox>\n  )\n}"
  },
  {
    "path": "apps/docs/registry/date-field/default.tsx",
    "content": "import { DateField, DateInput, DateInputGroup, DateSegment, Label } from 'ui'\n\nexport default function Default() {\n  return (\n    <DateField>\n      <Label>Date Label</Label>\n      <DateInputGroup>\n        <DateInput>{(segment) => <DateSegment segment={segment} />}</DateInput>\n      </DateInputGroup>\n    </DateField>\n  )\n}"
  },
  {
    "path": "apps/docs/registry/date-field/disabled.tsx",
    "content": "import { DateField, DateInput, DateInputGroup, DateSegment, Label } from 'ui'\n\nexport default function Disabled() {\n  return (\n    <DateField isDisabled>\n      <Label>Date Label</Label>\n      <DateInputGroup>\n        <DateInput>{(segment) => <DateSegment segment={segment} />}</DateInput>\n      </DateInputGroup>\n    </DateField>\n  )\n}"
  },
  {
    "path": "apps/docs/registry/date-input/default.tsx",
    "content": "import { DateField, DateInput, DateInputGroup, DateSegment } from 'ui'\n\nexport default function Default() {\n  return (\n    <DateField>\n      <DateInputGroup>\n        <DateInput>{(segment) => <DateSegment segment={segment} />}</DateInput>\n      </DateInputGroup>\n    </DateField>\n  )\n}"
  },
  {
    "path": "apps/docs/registry/date-input/sizes.tsx",
    "content": "import { DateField, DateInput, DateInputGroup, DateSegment } from 'ui'\n\nexport default function Sizes() {\n  return (\n    <div className=\"flex flex-col gap-4\">\n      <DateField>\n        <DateInputGroup size=\"xs\">\n          <DateInput>\n            {(segment) => <DateSegment segment={segment} />}\n          </DateInput>\n        </DateInputGroup>\n      </DateField>\n      <DateField>\n        <DateInputGroup size=\"sm\">\n          <DateInput>\n            {(segment) => <DateSegment segment={segment} />}\n          </DateInput>\n        </DateInputGroup>\n      </DateField>\n      <DateField>\n        <DateInputGroup size=\"md\">\n          <DateInput>\n            {(segment) => <DateSegment segment={segment} />}\n          </DateInput>\n        </DateInputGroup>\n      </DateField>\n      <DateField>\n        <DateInputGroup size=\"lg\">\n          <DateInput>\n            {(segment) => <DateSegment segment={segment} />}\n          </DateInput>\n        </DateInputGroup>\n      </DateField>\n    </div>\n  )\n}"
  },
  {
    "path": "apps/docs/registry/date-picker/default.tsx",
    "content": "import { ChevronDown, ChevronLeft, ChevronRight } from 'lucide-react'\nimport {\n  Calendar,\n  CalendarCell,\n  CalendarGrid,\n  CalendarGridBody,\n  CalendarGridHeader,\n  CalendarHeader,\n  CalendarHeaderCell,\n  CalendarHeading,\n  CalendarNextButton,\n  CalendarPrevButton,\n  DateInput,\n  DateInputGroup,\n  DatePicker,\n  DatePickerButton,\n  DatePickerContent,\n  DateSegment,\n  iconButtonVariants,\n  Label,\n} from 'ui'\n\nexport default function Default() {\n  return (\n    <DatePicker>\n      <Label>Date</Label>\n      <DateInputGroup className=\"relative pr-10\">\n        <DateInput>{(segment) => <DateSegment segment={segment} />}</DateInput>\n        <div className=\"absolute inset-y-0 right-0 flex items-center p-1\">\n          <DatePickerButton\n            className={iconButtonVariants({\n              variant: 'subtle',\n              size: 'sm',\n              className: 'ml-auto shrink-0',\n            })}\n          >\n            <ChevronDown size=\"16\" strokeWidth=\"3\" />\n          </DatePickerButton>\n        </div>\n      </DateInputGroup>\n      <DatePickerContent>\n        <Calendar>\n          <CalendarHeader>\n            <CalendarPrevButton\n              className={iconButtonVariants({\n                variant: 'outline',\n                size: 'sm',\n              })}\n            >\n              <ChevronLeft size=\"16\" strokeWidth=\"3\" />\n            </CalendarPrevButton>\n            <CalendarHeading />\n            <CalendarNextButton\n              className={iconButtonVariants({\n                variant: 'outline',\n                size: 'sm',\n              })}\n            >\n              <ChevronRight size=\"16\" strokeWidth=\"3\" />\n            </CalendarNextButton>\n          </CalendarHeader>\n          <CalendarGrid>\n            <CalendarGridHeader>\n              {(day) => <CalendarHeaderCell>{day}</CalendarHeaderCell>}\n            </CalendarGridHeader>\n            <CalendarGridBody>\n              {(date) => <CalendarCell date={date} />}\n            </CalendarGridBody>\n          </CalendarGrid>\n        </Calendar>\n      </DatePickerContent>\n    </DatePicker>\n  )\n}"
  },
  {
    "path": "apps/docs/registry/date-picker/disabled.tsx",
    "content": "import { ChevronDown, ChevronLeft, ChevronRight } from 'lucide-react'\nimport {\n  Calendar,\n  CalendarCell,\n  CalendarGrid,\n  CalendarGridBody,\n  CalendarGridHeader,\n  CalendarHeader,\n  CalendarHeaderCell,\n  CalendarHeading,\n  CalendarNextButton,\n  CalendarPrevButton,\n  DateInput,\n  DateInputGroup,\n  DatePicker,\n  DatePickerButton,\n  DatePickerContent,\n  DateSegment,\n  iconButtonVariants,\n  Label,\n} from 'ui'\n\nexport default function Default() {\n  return (\n    <DatePicker isDisabled>\n      <Label>Date</Label>\n      <DateInputGroup className=\"relative pr-10\">\n        <DateInput>{(segment) => <DateSegment segment={segment} />}</DateInput>\n        <div className=\"absolute inset-y-0 right-0 flex items-center p-1\">\n          <DatePickerButton\n            className={iconButtonVariants({\n              variant: 'subtle',\n              size: 'sm',\n              className: 'ml-auto shrink-0',\n            })}\n          >\n            <ChevronDown size=\"16\" strokeWidth=\"3\" />\n          </DatePickerButton>\n        </div>\n      </DateInputGroup>\n      <DatePickerContent>\n        <Calendar>\n          <CalendarHeader>\n            <CalendarPrevButton\n              className={iconButtonVariants({\n                variant: 'outline',\n                size: 'sm',\n              })}\n            >\n              <ChevronLeft size=\"16\" strokeWidth=\"3\" />\n            </CalendarPrevButton>\n            <CalendarHeading />\n            <CalendarNextButton\n              className={iconButtonVariants({\n                variant: 'outline',\n                size: 'sm',\n              })}\n            >\n              <ChevronRight size=\"16\" strokeWidth=\"3\" />\n            </CalendarNextButton>\n          </CalendarHeader>\n          <CalendarGrid>\n            <CalendarGridHeader>\n              {(day) => <CalendarHeaderCell>{day}</CalendarHeaderCell>}\n            </CalendarGridHeader>\n            <CalendarGridBody>\n              {(date) => <CalendarCell date={date} />}\n            </CalendarGridBody>\n          </CalendarGrid>\n        </Calendar>\n      </DatePickerContent>\n    </DatePicker>\n  )\n}"
  },
  {
    "path": "apps/docs/registry/date-range-picker/default.tsx",
    "content": "import { ChevronDown } from 'lucide-react'\nimport {\n  CalendarCell,\n  CalendarGrid,\n  CalendarGridBody,\n  CalendarGridHeader,\n  CalendarHeader,\n  CalendarHeaderCell,\n  CalendarHeading,\n  CalendarNextButton,\n  CalendarPrevButton,\n  DateInput,\n  DateInputGroup,\n  DatePickerButton,\n  DatePickerContent,\n  DateRangePicker,\n  DateSegment,\n  iconButtonVariants,\n  Label,\n  RangeCalendar,\n} from 'ui'\n\nexport default function Default() {\n  return (\n    <DateRangePicker>\n      <Label>Date Range</Label>\n      <DateInputGroup className=\"relative pr-10\">\n        <DateInput slot=\"start\">\n          {(segment) => <DateSegment segment={segment} />}\n        </DateInput>\n        <span aria-hidden=\"true\" className=\"px-2\">\n          –\n        </span>\n        <DateInput slot=\"end\">\n          {(segment) => <DateSegment segment={segment} />}\n        </DateInput>\n        <div className=\"absolute inset-y-0 right-0 flex items-center p-1\">\n          <DatePickerButton\n            className={iconButtonVariants({\n              variant: 'subtle',\n              size: 'sm',\n              className: 'ml-auto shrink-0',\n            })}\n          >\n            <ChevronDown size=\"16\" strokeWidth=\"3\" />\n          </DatePickerButton>\n        </div>\n      </DateInputGroup>\n      <DatePickerContent>\n        <RangeCalendar>\n          <CalendarHeader>\n            <CalendarPrevButton />\n            <CalendarHeading />\n            <CalendarNextButton />\n          </CalendarHeader>\n          <CalendarGrid>\n            <CalendarGridHeader>\n              {(day) => <CalendarHeaderCell>{day}</CalendarHeaderCell>}\n            </CalendarGridHeader>\n            <CalendarGridBody>\n              {(date) => <CalendarCell date={date} />}\n            </CalendarGridBody>\n          </CalendarGrid>\n        </RangeCalendar>\n      </DatePickerContent>\n    </DateRangePicker>\n  )\n}"
  },
  {
    "path": "apps/docs/registry/date-range-picker/disabled.tsx",
    "content": "import { ChevronDown } from 'lucide-react'\nimport {\n  CalendarCell,\n  CalendarGrid,\n  CalendarGridBody,\n  CalendarGridHeader,\n  CalendarHeader,\n  CalendarHeaderCell,\n  CalendarHeading,\n  CalendarNextButton,\n  CalendarPrevButton,\n  DateInput,\n  DateInputGroup,\n  DatePickerButton,\n  DatePickerContent,\n  DateRangePicker,\n  DateSegment,\n  iconButtonVariants,\n  Label,\n  RangeCalendar,\n} from 'ui'\n\nexport default function Default() {\n  return (\n    <DateRangePicker isDisabled>\n      <Label>Date Range</Label>\n      <DateInputGroup className=\"relative pr-10\">\n        <DateInput slot=\"start\">\n          {(segment) => <DateSegment segment={segment} />}\n        </DateInput>\n        <span aria-hidden=\"true\" className=\"px-2\">\n          –\n        </span>\n        <DateInput slot=\"end\">\n          {(segment) => <DateSegment segment={segment} />}\n        </DateInput>\n        <div className=\"absolute inset-y-0 right-0 flex items-center p-1\">\n          <DatePickerButton\n            className={iconButtonVariants({\n              variant: 'subtle',\n              size: 'sm',\n              className: 'ml-auto shrink-0',\n            })}\n          >\n            <ChevronDown size=\"16\" strokeWidth=\"3\" />\n          </DatePickerButton>\n        </div>\n      </DateInputGroup>\n      <DatePickerContent>\n        <RangeCalendar>\n          <CalendarHeader>\n            <CalendarPrevButton />\n            <CalendarHeading />\n            <CalendarNextButton />\n          </CalendarHeader>\n          <CalendarGrid>\n            <CalendarGridHeader>\n              {(day) => <CalendarHeaderCell>{day}</CalendarHeaderCell>}\n            </CalendarGridHeader>\n            <CalendarGridBody>\n              {(date) => <CalendarCell date={date} />}\n            </CalendarGridBody>\n          </CalendarGrid>\n        </RangeCalendar>\n      </DatePickerContent>\n    </DateRangePicker>\n  )\n}"
  },
  {
    "path": "apps/docs/registry/grid-list/default.tsx",
    "content": "import { Info } from 'lucide-react'\nimport { Checkbox, GridList, GridListItem, IconButton } from 'ui'\n\nexport default function Default() {\n  return (\n    <GridList aria-label=\"Favorite pokemon\" selectionMode=\"multiple\">\n      <GridListItem\n        className=\"[&_[role=gridcell]]:flex [&_[role=gridcell]]:items-center\"\n        textValue=\"Charizard\"\n      >\n        <Checkbox />\n        Charizard\n        <IconButton\n          className=\"ml-2\"\n          size=\"sm\"\n          variant=\"subtle\"\n          aria-label=\"Info\"\n        >\n          <Info size=\"1em\" />\n        </IconButton>\n      </GridListItem>\n      <GridListItem\n        className=\"[&_[role=gridcell]]:flex [&_[role=gridcell]]:items-center\"\n        textValue=\"Blastoise\"\n      >\n        <Checkbox />\n        Blastoise\n        <IconButton\n          className=\"ml-2\"\n          size=\"sm\"\n          variant=\"subtle\"\n          aria-label=\"Info\"\n        >\n          <Info size=\"1em\" />\n        </IconButton>\n      </GridListItem>\n      <GridListItem\n        className=\"[&_[role=gridcell]]:flex [&_[role=gridcell]]:items-center\"\n        textValue=\"Venusaur\"\n      >\n        <Checkbox />\n        Venusaur\n        <IconButton\n          className=\"ml-2\"\n          size=\"sm\"\n          variant=\"subtle\"\n          aria-label=\"Info\"\n        >\n          <Info size=\"1em\" />\n        </IconButton>\n      </GridListItem>\n      <GridListItem\n        className=\"[&_[role=gridcell]]:flex [&_[role=gridcell]]:items-center\"\n        textValue=\"Pikachu\"\n      >\n        <Checkbox />\n        Pikachu\n        <IconButton\n          className=\"ml-2\"\n          size=\"sm\"\n          variant=\"subtle\"\n          aria-label=\"Info\"\n        >\n          <Info size=\"1em\" />\n        </IconButton>\n      </GridListItem>\n    </GridList>\n  )\n}"
  },
  {
    "path": "apps/docs/registry/icon-button/default.tsx",
    "content": "import { AlertCircle } from 'lucide-react'\nimport { IconButton } from 'ui'\n\nexport default function Default() {\n  return (\n    <IconButton aria-label=\"alert\">\n      <AlertCircle size=\"1em\" />\n    </IconButton>\n  )\n}"
  },
  {
    "path": "apps/docs/registry/icon-button/disabled.tsx",
    "content": "import { AlertCircle } from 'lucide-react'\nimport { IconButton } from 'ui'\n\nexport default function Disabled() {\n  return (\n    <div className=\"flex flex-wrap justify-center gap-4\">\n      <IconButton variant=\"solid\" aria-label=\"alert\" isDisabled>\n        <AlertCircle size=\"1em\" />\n      </IconButton>\n      <IconButton variant=\"outline\" aria-label=\"alert\" isDisabled>\n        <AlertCircle size=\"1em\" />\n      </IconButton>\n      <IconButton variant=\"subtle\" aria-label=\"alert\" isDisabled>\n        <AlertCircle size=\"1em\" />\n      </IconButton>\n      <IconButton variant=\"ghost\" aria-label=\"alert\" isDisabled>\n        <AlertCircle size=\"1em\" />\n      </IconButton>\n      <IconButton variant=\"destructive\" aria-label=\"alert\" isDisabled>\n        <AlertCircle size=\"1em\" />\n      </IconButton>\n      <IconButton variant=\"link\" aria-label=\"alert\" isDisabled>\n        <AlertCircle size=\"1em\" />\n      </IconButton>\n    </div>\n  )\n}"
  },
  {
    "path": "apps/docs/registry/icon-button/sizes.tsx",
    "content": "import { AlertCircle } from 'lucide-react'\nimport { IconButton } from 'ui'\n\nexport default function Sizes() {\n  return (\n    <div className=\"flex flex-wrap justify-center gap-4\">\n      <IconButton aria-label=\"alert\" size=\"xs\">\n        <AlertCircle size=\"1em\" />\n      </IconButton>\n      <IconButton aria-label=\"alert\" size=\"sm\">\n        <AlertCircle size=\"1em\" />\n      </IconButton>\n      <IconButton aria-label=\"alert\" size=\"md\">\n        <AlertCircle size=\"1em\" />\n      </IconButton>\n      <IconButton aria-label=\"alert\" size=\"lg\">\n        <AlertCircle size=\"1em\" />\n      </IconButton>\n    </div>\n  )\n}"
  },
  {
    "path": "apps/docs/registry/icon-button/theme.tsx",
    "content": "import { AlertCircle } from 'lucide-react'\nimport { IconButton } from 'ui'\n\nexport default function Theme() {\n  return (\n    <div className=\"flex flex-wrap justify-center gap-4\">\n      <IconButton aria-label=\"alert\" variant=\"solid\">\n        <AlertCircle size=\"1em\" />\n      </IconButton>\n      <IconButton aria-label=\"alert\" variant=\"outline\">\n        <AlertCircle size=\"1em\" />\n      </IconButton>\n      <IconButton aria-label=\"alert\" variant=\"subtle\">\n        <AlertCircle size=\"1em\" />\n      </IconButton>\n      <IconButton aria-label=\"alert\" variant=\"ghost\">\n        <AlertCircle size=\"1em\" />\n      </IconButton>\n      <IconButton aria-label=\"alert\" variant=\"destructive\">\n        <AlertCircle size=\"1em\" />\n      </IconButton>\n      <IconButton aria-label=\"alert\" variant=\"link\">\n        <AlertCircle size=\"1em\" />\n      </IconButton>\n    </div>\n  )\n}"
  },
  {
    "path": "apps/docs/registry/input/default.tsx",
    "content": "import { Input } from 'ui'\n\nexport default function Default() {\n  return <Input />\n}"
  },
  {
    "path": "apps/docs/registry/input/disabled.tsx",
    "content": "import { Input } from 'ui'\n\nexport default function Disabled() {\n  return <Input disabled />\n}"
  },
  {
    "path": "apps/docs/registry/input/sizes.tsx",
    "content": "import { Input } from 'ui'\n\nexport default function Sizes() {\n  return (\n    <div className=\"flex flex-col gap-4\">\n      <Input size=\"xs\" />\n      <Input size=\"sm\" />\n      <Input size=\"md\" />\n      <Input size=\"lg\" />\n    </div>\n  )\n}"
  },
  {
    "path": "apps/docs/registry/label/default.tsx",
    "content": "import { Label } from 'ui'\n\nexport default function Default() {\n  return <Label>This is a label</Label>\n}"
  },
  {
    "path": "apps/docs/registry/menu/as-checkbox.tsx",
    "content": "import * as React from 'react'\n\nimport { ChevronDown } from 'lucide-react'\nimport { type Selection } from 'react-aria-components'\nimport { Button, Menu, MenuContent, MenuItem } from 'ui'\n\nexport default function AsCheckbox() {\n  const [selected, setSelected] = React.useState<Selection>(new Set(['bar1']))\n  return (\n    <Menu>\n      <Button className=\"flex items-center gap-2\">\n        <span>Menu</span>\n        <ChevronDown size=\"16\" strokeWidth=\"3\" />\n      </Button>\n      <MenuContent\n        selectionMode=\"multiple\"\n        onSelectionChange={setSelected}\n        selectedKeys={selected}\n      >\n        <MenuItem id=\"foo1\">Foo</MenuItem>\n        <MenuItem id=\"bar1\">Bar</MenuItem>\n        <MenuItem id=\"baz1\">Baz</MenuItem>\n      </MenuContent>\n    </Menu>\n  )\n}"
  },
  {
    "path": "apps/docs/registry/menu/as-radio.tsx",
    "content": "import * as React from 'react'\n\nimport { ChevronDown } from 'lucide-react'\nimport { type Selection } from 'react-aria-components'\nimport { Button, Menu, MenuContent, MenuItem } from 'ui'\n\nexport default function AsRadio() {\n  const [selected, setSelected] = React.useState<Selection>(new Set(['bar1']))\n  return (\n    <Menu>\n      <Button className=\"flex items-center gap-2\">\n        <span>Menu</span>\n        <ChevronDown size=\"16\" strokeWidth=\"3\" />\n      </Button>\n      <MenuContent\n        selectionMode=\"single\"\n        onSelectionChange={setSelected}\n        selectedKeys={selected}\n      >\n        <MenuItem id=\"foo1\">Foo</MenuItem>\n        <MenuItem id=\"bar1\">Bar</MenuItem>\n        <MenuItem id=\"baz1\">Baz</MenuItem>\n      </MenuContent>\n    </Menu>\n  )\n}"
  },
  {
    "path": "apps/docs/registry/menu/default.tsx",
    "content": "import { ChevronDown } from 'lucide-react'\nimport { Button, Menu, MenuContent, MenuItem } from 'ui'\n\nexport default function Default() {\n  return (\n    <Menu>\n      <Button className=\"flex items-center gap-2\">\n        <span>Menu</span>\n        <ChevronDown size=\"16\" strokeWidth=\"3\" />\n      </Button>\n      <MenuContent>\n        <MenuItem id=\"foo1\">Foo</MenuItem>\n        <MenuItem id=\"bar1\">Bar</MenuItem>\n        <MenuItem id=\"baz1\">Baz</MenuItem>\n      </MenuContent>\n    </Menu>\n  )\n}"
  },
  {
    "path": "apps/docs/registry/menu/disabled.tsx",
    "content": "import { ChevronDown } from 'lucide-react'\nimport { Button, Menu, MenuContent, MenuItem } from 'ui'\n\nexport default function Disabled() {\n  return (\n    <Menu>\n      <Button className=\"flex items-center gap-2\">\n        <span>Menu</span>\n        <ChevronDown size=\"16\" strokeWidth=\"3\" />\n      </Button>\n      <MenuContent disabledKeys={['baz1']}>\n        <MenuItem id=\"foo1\">Foo</MenuItem>\n        <MenuItem id=\"bar1\">Bar</MenuItem>\n        <MenuItem id=\"baz1\">Baz</MenuItem>\n      </MenuContent>\n    </Menu>\n  )\n}"
  },
  {
    "path": "apps/docs/registry/menu/with-sections.tsx",
    "content": "import { ChevronDown } from 'lucide-react'\nimport {\n  Button,\n  Menu,\n  MenuContent,\n  MenuHeader,\n  MenuItem,\n  MenuSection,\n  MenuSeparator,\n} from 'ui'\n\nexport default function WithSections() {\n  return (\n    <Menu>\n      <Button className=\"flex items-center gap-2\">\n        <span>Menu</span>\n        <ChevronDown size=\"16\" strokeWidth=\"3\" />\n      </Button>\n      <MenuContent>\n        <MenuSection>\n          <MenuHeader>Styles</MenuHeader>\n          <MenuItem id=\"foo1\">Foo</MenuItem>\n          <MenuItem id=\"bar1\">Bar</MenuItem>\n          <MenuItem id=\"baz1\">Baz</MenuItem>\n        </MenuSection>\n        <MenuSeparator />\n        <MenuSection>\n          <MenuHeader>Align</MenuHeader>\n          <MenuItem id=\"foo2\">Foo</MenuItem>\n          <MenuItem id=\"bar2\">Bar</MenuItem>\n          <MenuItem id=\"baz2\">Baz</MenuItem>\n        </MenuSection>\n      </MenuContent>\n    </Menu>\n  )\n}"
  },
  {
    "path": "apps/docs/registry/meter/default.tsx",
    "content": "import { Label, Meter, MeterFilledTrack, MeterTrack } from 'ui'\n\nexport default function Default() {\n  return (\n    <Meter value={75} minValue={0} maxValue={100}>\n      {({ percentage }) => (\n        <>\n          <Label>Meter Label</Label>\n          <MeterTrack>\n            <MeterFilledTrack percentage={percentage} />\n          </MeterTrack>\n        </>\n      )}\n    </Meter>\n  )\n}"
  },
  {
    "path": "apps/docs/registry/modal/default.tsx",
    "content": "import * as React from 'react'\n\nimport { X } from 'lucide-react'\nimport {\n  Button,\n  IconButton,\n  ModalBody,\n  ModalContent,\n  ModalFooter,\n  ModalHeader,\n  ModalOverlay,\n} from 'ui'\n\nexport default function Default() {\n  const [isOpen, setIsOpen] = React.useState(false)\n  return (\n    <>\n      <Button onPress={() => setIsOpen(true)}>Open Modal</Button>\n      <ModalOverlay isOpen={isOpen} onOpenChange={setIsOpen}>\n        <ModalContent>\n          <ModalHeader>Modal Title</ModalHeader>\n          <IconButton\n            className=\"absolute right-2 top-2\"\n            size=\"sm\"\n            variant=\"ghost\"\n            aria-label=\"close\"\n            onPress={() => setIsOpen(false)}\n          >\n            <X size=\"1em\" />\n          </IconButton>\n          <ModalBody>\n            <p className=\"text-black dark:text-white\">\n              Sit nulla est ex deserunt exercitation anim occaecat. Nostrud\n              ullamco deserunt aute id consequat veniam incididunt duis in sint\n              irure nisi. Mollit officia cillum Lorem ullamco minim nostrud elit\n              officia tempor esse quis.\n            </p>\n          </ModalBody>\n          <ModalFooter className=\"flex\">\n            <Button className=\"ml-auto\" onPress={() => setIsOpen(false)}>\n              Close\n            </Button>\n            <Button\n              className=\"ml-2\"\n              variant=\"outline\"\n              onPress={() => setIsOpen(false)}\n            >\n              Confirm\n            </Button>\n          </ModalFooter>\n        </ModalContent>\n      </ModalOverlay>\n    </>\n  )\n}"
  },
  {
    "path": "apps/docs/registry/modal/dismissable-false.tsx",
    "content": "import * as React from 'react'\n\nimport { X } from 'lucide-react'\nimport {\n  Button,\n  IconButton,\n  ModalBody,\n  ModalContent,\n  ModalFooter,\n  ModalHeader,\n  ModalOverlay,\n} from 'ui'\n\nexport default function DismissableFalse() {\n  const [isOpen, setIsOpen] = React.useState(false)\n  return (\n    <>\n      <Button onPress={() => setIsOpen(true)}>Open Modal</Button>\n      <ModalOverlay\n        isOpen={isOpen}\n        onOpenChange={setIsOpen}\n        isDismissable={false}\n        isKeyboardDismissDisabled={true}\n      >\n        <ModalContent>\n          <ModalHeader>Modal Title</ModalHeader>\n          <IconButton\n            className=\"absolute right-2 top-2\"\n            size=\"sm\"\n            variant=\"ghost\"\n            aria-label=\"close\"\n            onPress={() => setIsOpen(false)}\n          >\n            <X size=\"1em\" />\n          </IconButton>\n          <ModalBody>\n            <p className=\"text-black dark:text-white\">\n              Sit nulla est ex deserunt exercitation anim occaecat. Nostrud\n              ullamco deserunt aute id consequat veniam incididunt duis in sint\n              irure nisi. Mollit officia cillum Lorem ullamco minim nostrud elit\n              officia tempor esse quis.\n            </p>\n          </ModalBody>\n          <ModalFooter className=\"flex\">\n            <Button className=\"ml-auto\" onPress={() => setIsOpen(false)}>\n              Close\n            </Button>\n            <Button\n              className=\"ml-2\"\n              variant=\"outline\"\n              onPress={() => setIsOpen(false)}\n            >\n              Confirm\n            </Button>\n          </ModalFooter>\n        </ModalContent>\n      </ModalOverlay>\n    </>\n  )\n}"
  },
  {
    "path": "apps/docs/registry/modal/set-autofocus.tsx",
    "content": "import * as React from 'react'\n\nimport { X } from 'lucide-react'\nimport {\n  Button,\n  IconButton,\n  Input,\n  Label,\n  ModalBody,\n  ModalContent,\n  ModalFooter,\n  ModalHeader,\n  ModalOverlay,\n  TextField,\n} from 'ui'\n\nexport default function SetAutofocus() {\n  const [isOpen, setIsOpen] = React.useState(false)\n  return (\n    <>\n      <Button onPress={() => setIsOpen(true)}>Open Modal</Button>\n      <ModalOverlay isOpen={isOpen} onOpenChange={setIsOpen}>\n        <ModalContent>\n          <ModalHeader>Modal Title</ModalHeader>\n          <IconButton\n            className=\"absolute right-2 top-2\"\n            size=\"sm\"\n            variant=\"ghost\"\n            aria-label=\"close\"\n            onPress={() => setIsOpen(false)}\n          >\n            <X size=\"1em\" />\n          </IconButton>\n          <ModalBody className=\"flex flex-col gap-4\">\n            <TextField autoFocus>\n              <Label>First Name</Label>\n              <Input />\n            </TextField>\n            <TextField>\n              <Label>Last Name</Label>\n              <Input />\n            </TextField>\n          </ModalBody>\n          <ModalFooter className=\"flex\">\n            <Button className=\"ml-auto\" onPress={() => setIsOpen(false)}>\n              Close\n            </Button>\n            <Button\n              className=\"ml-2\"\n              variant=\"outline\"\n              onPress={() => setIsOpen(false)}\n            >\n              Confirm\n            </Button>\n          </ModalFooter>\n        </ModalContent>\n      </ModalOverlay>\n    </>\n  )\n}"
  },
  {
    "path": "apps/docs/registry/modal/sizes.tsx",
    "content": "import * as React from 'react'\n\nimport { X } from 'lucide-react'\nimport {\n  Button,\n  IconButton,\n  ModalBody,\n  ModalContent,\n  ModalFooter,\n  ModalHeader,\n  ModalOverlay,\n  type ModalContentProps,\n} from 'ui'\n\ntype Size = Pick<ModalContentProps, 'size'>['size']\nexport default function Default() {\n  const [isOpen, setIsOpen] = React.useState(false)\n  const [modalSize, setModalSize] = React.useState<Size>('md')\n\n  const sizes: Size[] = ['xs', 'sm', 'md', 'lg', 'xl', 'full']\n  const handlePress = (size: Size, open: boolean) => {\n    setModalSize(size)\n    setIsOpen(open)\n  }\n  return (\n    <>\n      <div className=\"grid grid-cols-3 gap-4\">\n        {sizes.map((size, idx) => (\n          <Button onPress={() => handlePress(size, true)} key={idx}>\n            Open {size}\n          </Button>\n        ))}\n      </div>\n\n      <ModalOverlay isOpen={isOpen} onOpenChange={setIsOpen}>\n        <ModalContent size={modalSize}>\n          <ModalHeader>Modal Title</ModalHeader>\n          <IconButton\n            className=\"absolute right-2 top-2\"\n            size=\"sm\"\n            variant=\"ghost\"\n            aria-label=\"close\"\n            onPress={() => setIsOpen(false)}\n          >\n            <X size=\"1em\" />\n          </IconButton>\n          <ModalBody>\n            <p className=\"text-black dark:text-white\">\n              Sit nulla est ex deserunt exercitation anim occaecat. Nostrud\n              ullamco deserunt aute id consequat veniam incididunt duis in sint\n              irure nisi. Mollit officia cillum Lorem ullamco minim nostrud elit\n              officia tempor esse quis.\n            </p>\n          </ModalBody>\n          <ModalFooter className=\"flex\">\n            <Button className=\"ml-auto\" onPress={() => setIsOpen(false)}>\n              Close\n            </Button>\n            <Button\n              className=\"ml-2\"\n              variant=\"outline\"\n              onPress={() => setIsOpen(false)}\n            >\n              Confirm\n            </Button>\n          </ModalFooter>\n        </ModalContent>\n      </ModalOverlay>\n    </>\n  )\n}"
  },
  {
    "path": "apps/docs/registry/number-field/default.tsx",
    "content": "import { Input, Label, NumberField } from 'ui'\n\nexport default function Default() {\n  return (\n    <NumberField defaultValue={50}>\n      <Label>Width</Label>\n      <Input />\n    </NumberField>\n  )\n}"
  },
  {
    "path": "apps/docs/registry/number-field/disabled.tsx",
    "content": "import * as React from 'react'\n\nimport { ChevronDown, ChevronUp } from 'lucide-react'\nimport {\n  Label,\n  NumberDecrementStepper,\n  NumberField,\n  NumberIncrementStepper,\n  NumberInput,\n  NumberInputGroup,\n  NumberInputStepper,\n} from 'ui'\n\nexport default function Default() {\n  return (\n    <NumberField defaultValue={50} isDisabled>\n      <Label>Width</Label>\n      <NumberInputGroup className=\"relative\">\n        <NumberInput />\n        <NumberInputStepper>\n          <NumberIncrementStepper>\n            <ChevronUp size=\"1em\" strokeWidth=\"3\" />\n          </NumberIncrementStepper>\n          <NumberDecrementStepper>\n            <ChevronDown size=\"1em\" strokeWidth=\"3\" />\n          </NumberDecrementStepper>\n        </NumberInputStepper>\n      </NumberInputGroup>\n    </NumberField>\n  )\n}"
  },
  {
    "path": "apps/docs/registry/number-field/with-mobile-stepper.tsx",
    "content": "import { ChevronDown, ChevronUp } from 'lucide-react'\nimport { IconButton, Input, Label, NumberField, NumberInputGroup } from 'ui'\n\nexport default function Mobile() {\n  return (\n    <NumberField defaultValue={50}>\n      <Label>Width</Label>\n      <NumberInputGroup className=\"flex gap-1\">\n        <IconButton className=\"shrink-0\" slot=\"decrement\" aria-label=\"Decrease\">\n          <ChevronDown size=\"16\" strokeWidth=\"3\" />\n        </IconButton>\n        <Input />\n        <IconButton className=\"shrink-0\" slot=\"increment\" aria-label=\"Increase\">\n          <ChevronUp size=\"16\" strokeWidth=\"3\" />\n        </IconButton>\n      </NumberInputGroup>\n    </NumberField>\n  )\n}"
  },
  {
    "path": "apps/docs/registry/number-field/with-stepper.tsx",
    "content": "import * as React from 'react'\n\nimport { ChevronDown, ChevronUp } from 'lucide-react'\nimport {\n  Label,\n  NumberDecrementStepper,\n  NumberField,\n  NumberIncrementStepper,\n  NumberInput,\n  NumberInputGroup,\n  NumberInputStepper,\n} from 'ui'\n\nexport default function Default() {\n  return (\n    <NumberField defaultValue={50}>\n      <Label>Width</Label>\n      <NumberInputGroup className=\"relative\">\n        <NumberInput />\n        <NumberInputStepper>\n          <NumberIncrementStepper>\n            <ChevronUp size=\"1em\" strokeWidth=\"3\" />\n          </NumberIncrementStepper>\n          <NumberDecrementStepper>\n            <ChevronDown size=\"1em\" strokeWidth=\"3\" />\n          </NumberDecrementStepper>\n        </NumberInputStepper>\n      </NumberInputGroup>\n    </NumberField>\n  )\n}"
  },
  {
    "path": "apps/docs/registry/progress-bar/default.tsx",
    "content": "import {\n  Label,\n  ProgressBar,\n  ProgressBarFilledTrack,\n  ProgressBarTrack,\n} from 'ui'\n\nexport default function Default() {\n  return (\n    <ProgressBar value={75} minValue={0} maxValue={100}>\n      {({ percentage }) => (\n        <>\n          <Label>Progress</Label>\n          <ProgressBarTrack>\n            <ProgressBarFilledTrack percentage={percentage} />\n          </ProgressBarTrack>\n        </>\n      )}\n    </ProgressBar>\n  )\n}"
  },
  {
    "path": "apps/docs/registry/radio/default.tsx",
    "content": "import { Radio, RadioGroup } from 'ui'\n\nexport default function Default() {\n  return (\n    <RadioGroup>\n      <Radio value=\"cat\">Cat</Radio>\n      <Radio value=\"dog\">Dog</Radio>\n    </RadioGroup>\n  )\n}"
  },
  {
    "path": "apps/docs/registry/radio/disabled.tsx",
    "content": "import { Radio, RadioGroup } from 'ui'\n\nexport default function Default() {\n  return (\n    <RadioGroup defaultValue=\"dog\">\n      <Radio value=\"cat\">Cat</Radio>\n      <Radio value=\"dog\" isDisabled>\n        Dog\n      </Radio>\n    </RadioGroup>\n  )\n}"
  },
  {
    "path": "apps/docs/registry/radio/sizes.tsx",
    "content": "import { Radio, RadioGroup } from 'ui'\n\nexport default function Sizes() {\n  return (\n    <div className=\"space-y-4\">\n      <RadioGroup>\n        <Radio size=\"sm\" value=\"sm-cat\">\n          Small Cat\n        </Radio>\n        <Radio size=\"sm\" value=\"sm-dog\">\n          Small Dog\n        </Radio>\n      </RadioGroup>\n      <RadioGroup>\n        <Radio size=\"md\" value=\"md-cat\">\n          Medium Cat\n        </Radio>\n        <Radio size=\"md\" value=\"md-dog\">\n          Medium Dog\n        </Radio>\n      </RadioGroup>\n      <RadioGroup>\n        <Radio size=\"lg\" value=\"lg-cat\">\n          Large Cat\n        </Radio>\n        <Radio size=\"lg\" value=\"lg-dog\">\n          Large Dog\n        </Radio>\n      </RadioGroup>\n    </div>\n  )\n}"
  },
  {
    "path": "apps/docs/registry/radio-group/default.tsx",
    "content": "import { Label, Radio, RadioGroup, RadioGroupContent } from 'ui'\n\nexport default function Default() {\n  return (\n    <RadioGroup>\n      <Label>Favorite animal</Label>\n      <RadioGroupContent>\n        <Radio value=\"dog\">Dog</Radio>\n        <Radio value=\"cat\">Cat</Radio>\n        <Radio value=\"dragon\">Dragon</Radio>\n      </RadioGroupContent>\n    </RadioGroup>\n  )\n}"
  },
  {
    "path": "apps/docs/registry/radio-group/disabled.tsx",
    "content": "import { Label, Radio, RadioGroup, RadioGroupContent } from 'ui'\n\nexport default function Disabled() {\n  return (\n    <RadioGroup isDisabled defaultValue=\"dragon\">\n      <Label>Favorite animal</Label>\n      <RadioGroupContent>\n        <Radio value=\"dog\">Dog</Radio>\n        <Radio value=\"cat\">Cat</Radio>\n        <Radio value=\"dragon\">Dragon</Radio>\n      </RadioGroupContent>\n    </RadioGroup>\n  )\n}"
  },
  {
    "path": "apps/docs/registry/radio-group/horizontal.tsx",
    "content": "import { Label, Radio, RadioGroup, RadioGroupContent } from 'ui'\n\nexport default function Horizontal() {\n  return (\n    <RadioGroup orientation=\"horizontal\">\n      <Label>Favorite animal</Label>\n      <RadioGroupContent>\n        <Radio value=\"dog\">Dog</Radio>\n        <Radio value=\"cat\">Cat</Radio>\n        <Radio value=\"dragon\">Dragon</Radio>\n      </RadioGroupContent>\n    </RadioGroup>\n  )\n}"
  },
  {
    "path": "apps/docs/registry/range-calendar/default.tsx",
    "content": "import * as React from 'react'\n\nimport {\n  CalendarCell,\n  CalendarGrid,\n  CalendarGridBody,\n  CalendarGridHeader,\n  CalendarHeader,\n  CalendarHeaderCell,\n  CalendarHeading,\n  CalendarNextButton,\n  CalendarPrevButton,\n  RangeCalendar,\n} from 'ui'\n\nexport default function Default() {\n  return (\n    <RangeCalendar aria-label=\"Example range calendar\">\n      <CalendarHeader>\n        <CalendarPrevButton />\n        <CalendarHeading />\n        <CalendarNextButton />\n      </CalendarHeader>\n      <CalendarGrid>\n        <CalendarGridHeader>\n          {(day) => <CalendarHeaderCell>{day}</CalendarHeaderCell>}\n        </CalendarGridHeader>\n        <CalendarGridBody>\n          {(date) => <CalendarCell date={date} />}\n        </CalendarGridBody>\n      </CalendarGrid>\n    </RangeCalendar>\n  )\n}"
  },
  {
    "path": "apps/docs/registry/search-field/default.tsx",
    "content": "import { Search } from 'lucide-react'\nimport { Label, SearchField, SearchFieldInput } from 'ui'\n\nexport default function Default() {\n  return (\n    <SearchField>\n      <Label>Search</Label>\n      <div className=\"relative\">\n        <div\n          aria-hidden=\"true\"\n          className=\"pointer-events-none absolute flex h-full w-10 items-center justify-center text-slate-500 dark:text-slate-400\"\n        >\n          <Search size=\"18\" />\n        </div>\n        <SearchFieldInput className=\"px-10\" />\n      </div>\n    </SearchField>\n  )\n}"
  },
  {
    "path": "apps/docs/registry/search-field/with-clear-button.tsx",
    "content": "import { Search } from 'lucide-react'\nimport {\n  Label,\n  SearchField,\n  SearchFieldClearButton,\n  SearchFieldInput,\n} from 'ui'\n\nexport default function WithClearButton() {\n  return (\n    <SearchField>\n      <Label>Search</Label>\n      <div className=\"relative\">\n        <div\n          aria-hidden=\"true\"\n          className=\"pointer-events-none absolute flex h-full w-10 items-center justify-center text-slate-500 dark:text-slate-400\"\n        >\n          <Search size=\"18\" />\n        </div>\n        <SearchFieldInput className=\"px-10\" />\n        <div className=\"absolute inset-y-0 right-0 flex items-center p-1\">\n          <SearchFieldClearButton\n            variant=\"subtle\"\n            size=\"sm\"\n            aria-label=\"Clear search\"\n          />\n        </div>\n      </div>\n    </SearchField>\n  )\n}"
  },
  {
    "path": "apps/docs/registry/select/default.tsx",
    "content": "import * as React from 'react'\n\nimport { ChevronDown } from 'lucide-react'\nimport {\n  Label,\n  Select,\n  SelectButton,\n  SelectContent,\n  SelectItem,\n  SelectValue,\n} from 'ui'\n\nexport default function Default() {\n  return (\n    <>\n      <Select>\n        <Label>Favorite Animal</Label>\n        <SelectButton variant=\"outline\">\n          <SelectValue>\n            {({ selectedText }) => (\n              <span>{selectedText || 'Select an item'}</span>\n            )}\n          </SelectValue>\n          <ChevronDown size=\"16\" strokeWidth=\"3\" />\n        </SelectButton>\n        <SelectContent>\n          <SelectItem textValue=\"Aardvark\">Aardvark</SelectItem>\n          <SelectItem textValue=\"Cat\">Cat</SelectItem>\n          <SelectItem textValue=\"Dog\">Dog</SelectItem>\n          <SelectItem textValue=\"Kangaroo\">Kangaroo</SelectItem>\n          <SelectItem textValue=\"Panda\">Panda</SelectItem>\n          <SelectItem textValue=\"Snake\">Snake</SelectItem>\n        </SelectContent>\n      </Select>\n    </>\n  )\n}"
  },
  {
    "path": "apps/docs/registry/select/disabled.tsx",
    "content": "import * as React from 'react'\n\nimport { ChevronDown } from 'lucide-react'\nimport {\n  Label,\n  Select,\n  SelectButton,\n  SelectContent,\n  SelectItem,\n  SelectValue,\n} from 'ui'\n\nexport default function Disabled() {\n  return (\n    <>\n      <Select isDisabled>\n        <Label>Favorite Animal</Label>\n        <SelectButton variant=\"outline\">\n          <SelectValue>\n            {({ selectedText }) => (\n              <span>{selectedText || 'Select an item'}</span>\n            )}\n          </SelectValue>\n          <ChevronDown size=\"16\" strokeWidth=\"3\" />\n        </SelectButton>\n        <SelectContent>\n          <SelectItem textValue=\"Aardvark\">Aardvark</SelectItem>\n          <SelectItem textValue=\"Cat\">Cat</SelectItem>\n          <SelectItem textValue=\"Dog\">Dog</SelectItem>\n          <SelectItem textValue=\"Kangaroo\">Kangaroo</SelectItem>\n          <SelectItem textValue=\"Panda\">Panda</SelectItem>\n          <SelectItem textValue=\"Snake\">Snake</SelectItem>\n        </SelectContent>\n      </Select>\n    </>\n  )\n}"
  },
  {
    "path": "apps/docs/registry/slider/default.tsx",
    "content": "import { Label, Slider, SliderFilledTrack, SliderThumb, SliderTrack } from 'ui'\n\nexport default function Default() {\n  return (\n    <Slider defaultValue={30}>\n      <Label>Opacity</Label>\n      <SliderTrack>\n        {({ state }) => (\n          <>\n            <SliderFilledTrack\n              percentage={state.getThumbPercent(0) * 100}\n              orientation={state.orientation}\n            />\n            <SliderThumb />\n          </>\n        )}\n      </SliderTrack>\n    </Slider>\n  )\n}"
  },
  {
    "path": "apps/docs/registry/slider/vertical.tsx",
    "content": "import { Label, Slider, SliderFilledTrack, SliderThumb, SliderTrack } from 'ui'\n\nexport default function Vertical() {\n  return (\n    <Slider orientation=\"vertical\" defaultValue={30}>\n      <Label>Vertical Slider</Label>\n      <SliderTrack className=\"h-72\">\n        {({ state }) => (\n          <>\n            <SliderFilledTrack\n              percentage={state.getThumbPercent(0) * 100}\n              orientation={state.orientation}\n            />\n            <SliderThumb />\n          </>\n        )}\n      </SliderTrack>\n    </Slider>\n  )\n}"
  },
  {
    "path": "apps/docs/registry/switch/alignment.tsx",
    "content": "import { Switch, SwitchIndicator } from 'ui'\n\nexport default function Alignment() {\n  return (\n    <div className=\"flex flex-col gap-4\">\n      <Switch>\n        <SwitchIndicator />\n        I&apos;m on the right\n      </Switch>\n      <Switch>\n        I&apos;m on the left\n        <SwitchIndicator />\n      </Switch>\n    </div>\n  )\n}"
  },
  {
    "path": "apps/docs/registry/switch/default.tsx",
    "content": "import { Switch, SwitchIndicator } from 'ui'\n\nexport default function Default() {\n  return (\n    <Switch>\n      <SwitchIndicator />\n      Low power mode\n    </Switch>\n  )\n}"
  },
  {
    "path": "apps/docs/registry/switch/disabled.tsx",
    "content": "import { Switch, SwitchIndicator } from 'ui'\n\nexport default function Default() {\n  return (\n    <Switch isDisabled>\n      <SwitchIndicator />\n      Low power mode\n    </Switch>\n  )\n}"
  },
  {
    "path": "apps/docs/registry/switch/sizes.tsx",
    "content": "import { Switch, SwitchIndicator } from 'ui'\n\nexport default function Default() {\n  return (\n    <div className=\"flex flex-col gap-4\">\n      <Switch>\n        <SwitchIndicator size=\"sm\" />\n      </Switch>\n      <Switch>\n        <SwitchIndicator size=\"md\" />\n      </Switch>\n      <Switch>\n        <SwitchIndicator size=\"lg\" />\n      </Switch>\n    </div>\n  )\n}"
  },
  {
    "path": "apps/docs/registry/tabs/default.tsx",
    "content": "import { Tab, TabList, TabPanel, Tabs } from 'ui'\n\nexport default function Default() {\n  return (\n    <Tabs>\n      <TabList aria-label=\"History of Ancient Rome\">\n        <Tab id=\"FoR\">Founding of Rome</Tab>\n        <Tab id=\"MaR\">Monarchy and Republic</Tab>\n        <Tab id=\"Emp\">Empire</Tab>\n      </TabList>\n      <TabPanel id=\"FoR\">\n        Arma virumque cano, Troiae qui primus ab oris.\n      </TabPanel>\n      <TabPanel id=\"MaR\">Senatus Populusque Romanus.</TabPanel>\n      <TabPanel id=\"Emp\">Alea jacta est.</TabPanel>\n    </Tabs>\n  )\n}"
  },
  {
    "path": "apps/docs/registry/tabs/disabled-keys.tsx",
    "content": "import { Tab, TabList, TabPanel, Tabs } from 'ui'\n\nexport default function DisabledKeys() {\n  return (\n    <Tabs disabledKeys={['MaR']}>\n      <TabList aria-label=\"History of Ancient Rome\">\n        <Tab id=\"FoR\">Founding of Rome</Tab>\n        <Tab id=\"MaR\">Monarchy and Republic</Tab>\n        <Tab id=\"Emp\">Empire</Tab>\n      </TabList>\n      <TabPanel id=\"FoR\">\n        Arma virumque cano, Troiae qui primus ab oris.\n      </TabPanel>\n      <TabPanel id=\"MaR\">Senatus Populusque Romanus.</TabPanel>\n      <TabPanel id=\"Emp\">Alea jacta est.</TabPanel>\n    </Tabs>\n  )\n}"
  },
  {
    "path": "apps/docs/registry/tabs/disabled.tsx",
    "content": "import { Tab, TabList, TabPanel, Tabs } from 'ui'\n\nexport default function Disabled() {\n  return (\n    <Tabs isDisabled>\n      <TabList aria-label=\"History of Ancient Rome\">\n        <Tab id=\"FoR\">Founding of Rome</Tab>\n        <Tab id=\"MaR\">Monarchy and Republic</Tab>\n        <Tab id=\"Emp\">Empire</Tab>\n      </TabList>\n      <TabPanel id=\"FoR\">\n        Arma virumque cano, Troiae qui primus ab oris.\n      </TabPanel>\n      <TabPanel id=\"MaR\">Senatus Populusque Romanus.</TabPanel>\n      <TabPanel id=\"Emp\">Alea jacta est.</TabPanel>\n    </Tabs>\n  )\n}"
  },
  {
    "path": "apps/docs/registry/tabs/vertical.tsx",
    "content": "import { Tab, TabList, TabPanel, Tabs } from 'ui'\n\nexport default function Vertical() {\n  return (\n    <Tabs orientation=\"vertical\" className=\"w-full\">\n      <TabList aria-label=\"History of Ancient Rome\">\n        <Tab id=\"FoR\">Founding of Rome</Tab>\n        <Tab id=\"MaR\">Monarchy and</Tab>\n        <Tab id=\"Emp\">Empire</Tab>\n      </TabList>\n      <TabPanel id=\"FoR\">\n        Arma virumque cano, Troiae qui primus ab oris.\n      </TabPanel>\n      <TabPanel id=\"MaR\">Senatus Populusque Romanus.</TabPanel>\n      <TabPanel id=\"Emp\">Alea jacta est.</TabPanel>\n    </Tabs>\n  )\n}"
  },
  {
    "path": "apps/docs/registry/text-field/default.tsx",
    "content": "import { Input, Label, TextField } from 'ui'\n\nexport default function Default() {\n  return (\n    <TextField>\n      <Label>Label</Label>\n      <Input />\n    </TextField>\n  )\n}"
  },
  {
    "path": "apps/docs/registry/text-field/disabled.tsx",
    "content": "import { Input, Label, TextField } from 'ui'\n\nexport default function Default() {\n  return (\n    <TextField isDisabled>\n      <Label>Label</Label>\n      <Input />\n    </TextField>\n  )\n}"
  },
  {
    "path": "apps/docs/registry/text-field/with-error.tsx",
    "content": "import { Input, Label, TextField, TextFieldErrorMessage } from 'ui'\n\nexport default function withError() {\n  return (\n    <TextField isInvalid>\n      <Label>Label</Label>\n      <Input size=\"md\" />\n      <TextFieldErrorMessage>This is an error message</TextFieldErrorMessage>\n    </TextField>\n  )\n}"
  },
  {
    "path": "apps/docs/registry/tooltip/default.tsx",
    "content": "import { Button, Tooltip, TooltipContent } from 'ui'\n\nexport default function Default() {\n  return (\n    <Tooltip>\n      <Button size=\"sm\" variant=\"outline\">\n        Hover Me\n      </Button>\n      <TooltipContent>Hello!</TooltipContent>\n    </Tooltip>\n  )\n}"
  },
  {
    "path": "apps/docs/registry/tooltip/placement.tsx",
    "content": "import { type TooltipProps } from 'react-aria-components'\nimport { Button, Tooltip, TooltipContent } from 'ui'\n\ntype Placement = Pick<TooltipProps, 'placement'>['placement']\nexport default function Placement() {\n  const placements: Placement[] = [\n    'bottom',\n    'bottom left',\n    'bottom right',\n    'bottom start',\n    'bottom end',\n    'top',\n    'top left',\n    'top right',\n    'top start',\n    'top end',\n    'left',\n    'left top',\n    'left bottom',\n    'start',\n    'start top',\n    'start bottom',\n    'right',\n    'right top',\n    'right bottom',\n    'end',\n    'end top',\n    'end bottom',\n  ]\n  return (\n    <div className=\"grid grid-cols-4 gap-4\">\n      {placements.map((placement, idx) => (\n        <Tooltip key={idx}>\n          <Button className=\"mx-auto\" size=\"sm\" variant=\"outline\">\n            {placement}\n          </Button>\n          <TooltipContent placement={placement}>Hello!</TooltipContent>\n        </Tooltip>\n      ))}\n    </div>\n  )\n}"
  },
  {
    "path": "apps/docs/styles/globals.css",
    "content": "@tailwind base;\n@tailwind components;\n@tailwind utilities;\n"
  },
  {
    "path": "apps/docs/tailwind.config.js",
    "content": "/** @type {import('tailwindcss').Config} */\n\n// eslint-disable-next-line @typescript-eslint/no-var-requires\nconst sharedConfig = require('tailwind-config/tailwind.config.cjs')\n\nmodule.exports = {\n  presets: [sharedConfig],\n  content: [\n    './app/**/*.{js,ts,jsx,tsx}',\n    './components/**/*.{js,ts,jsx,tsx}',\n    './registry/**/*.{js,ts,jsx,tsx}',\n    '../../packages/**/*.{js,ts,jsx,tsx}',\n  ],\n  theme: {\n    extend: {\n      typography: (theme) => ({\n        DEFAULT: {\n          css: {\n            'code::before': {\n              content: 'none',\n            },\n            'code::after': {\n              content: 'none',\n            },\n            'code:not([data-rehype-pretty-code-figure] code)': {\n              color: theme('colors.slate.800'),\n              fontWeight: 'normal',\n              backgroundColor: theme('colors.slate.100'),\n              paddingTop: '2px',\n              paddingRight: theme('spacing.1'),\n              paddingBottom: '2px',\n              paddingLeft: theme('spacing.1'),\n              borderRadius: theme('spacing.1'),\n              letterSpacing: theme('letterSpacing.wide'),\n            },\n            'strong code:not([data-rehype-pretty-code-figure] code)': {\n              fontWeight: 'bolder',\n            },\n            '[data-rehype-pretty-code-title]': {\n              backgroundColor: '#282a36',\n              borderTopLeftRadius: theme('borderRadius.md'),\n              borderTopRightRadius: theme('borderRadius.md'),\n              paddingLeft: theme('spacing.4'),\n              paddingRight: theme('spacing.4'),\n              paddingTop: theme('spacing.3'),\n              marginTop: theme('spacing.0'),\n              paddingBottom: theme('spacing.1'),\n              color: theme('colors.gray.400'),\n              userSelect: 'none',\n              '+ pre': {\n                borderTopLeftRadius: theme('borderRadius.none'),\n                borderTopRightRadius: theme('borderRadius.none'),\n                marginTop: theme('spacing.0'),\n              },\n            },\n            '[data-rehype-pretty-code-figure]': {\n              '> pre': {\n                paddingLeft: theme('spacing.0'),\n                paddingRight: theme('spacing.0'),\n                code: {\n                  paddingLeft: theme('spacing.0'),\n                  paddingRight: theme('spacing.0'),\n                  '[data-line]': {\n                    paddingLeft: theme('spacing.4'),\n                    paddingRight: theme('spacing.4'),\n                  },\n                },\n              },\n            },\n          },\n        },\n        invert: {\n          css: {\n            'code:not([data-rehype-pretty-code-figure] code)': {\n              color: theme('colors.white'),\n              backgroundColor: theme('colors.slate.800'),\n            },\n          },\n        },\n      }),\n    },\n  },\n  plugins: [require('@tailwindcss/typography')],\n}\n"
  },
  {
    "path": "apps/docs/tsconfig.json",
    "content": "{\n  \"extends\": \"ts-config/nextjs.json\",\n  \"compilerOptions\": {\n    \"plugins\": [\n      {\n        \"name\": \"next\",\n      },\n    ],\n    \"baseUrl\": \".\",\n    \"paths\": {\n      \"contentlayer/generated\": [\"./.contentlayer/generated\"],\n      \"@/components/ui\": [\n        \"./../../packages/ui/src\", // Mock importing as local components\n      ],\n      \"@/*\": [\"./*\"],\n    },\n    \"skipLibCheck\": true,\n    \"forceConsistentCasingInFileNames\": true,\n    \"esModuleInterop\": true,\n    \"moduleResolution\": \"node\",\n    \"isolatedModules\": true,\n    \"strictNullChecks\": true,\n  },\n  \"include\": [\n    \"next-env.d.ts\",\n    \"**/*.ts\",\n    \"**/*.tsx\",\n    \".next/types/**/*.ts\",\n    \".contentlayer/generated\",\n  ],\n  \"exclude\": [\"node_modules\"],\n}\n"
  },
  {
    "path": "apps/docs/types.ts",
    "content": "import { type Node } from 'unist'\n\nexport interface UnistNode extends Node {\n  type: string\n  name?: string\n  tagName?: string\n  value?: string\n  properties?: {\n    __rawString__?: string\n    __className__?: string\n    __event__?: string\n    [key: string]: unknown\n  } & NpmCommands\n  attributes?: {\n    name: string\n    value: unknown\n    type?: string\n  }[]\n  children?: UnistNode[]\n}\n\nexport interface UnistTree extends Node {\n  children: UnistNode[]\n}\n\nexport interface NpmCommands {\n  __npmCommand__?: string\n  __yarnCommand__?: string\n  __pnpmCommand__?: string\n  __niCommand__?: string\n}\n\nexport interface ExamplesListItem {\n  name: string\n  variant: string\n  text: string\n  functionName: string\n}\n\nexport interface TocItemProps {\n  slug: string\n  content: string\n  lvl: number\n}\n"
  },
  {
    "path": "apps/storybook/.eslintignore",
    "content": "!.storybook\n"
  },
  {
    "path": "apps/storybook/.eslintrc.js",
    "content": "// eslint-disable-next-line @typescript-eslint/no-var-requires\nconst path = require('path')\n\nmodule.exports = {\n  root: true,\n  extends: ['custom', 'plugin:storybook/recommended'],\n  settings: {\n    tailwindcss: {\n      config: path.join(__dirname, './tailwind.config.js'),\n    },\n  },\n}\n"
  },
  {
    "path": "apps/storybook/.gitignore",
    "content": ".turbo\nstorybook-static/"
  },
  {
    "path": "apps/storybook/.storybook/main.ts",
    "content": "import { dirname, join } from \"path\";\n/** @type { import('@storybook/react-vite').StorybookConfig } */\n\nimport { mergeConfig } from 'vite'\nimport tsconfigPaths from 'vite-tsconfig-paths'\n\nimport type { StorybookConfig } from '@storybook/react-vite'\n\nconst config: StorybookConfig = {\n  framework: getAbsolutePath(\"@storybook/react-vite\"),\n  stories: ['../src/**/*.stories.@(js|jsx|ts|tsx)'],\n  addons: [\n    getAbsolutePath(\"@storybook/addon-a11y\"),\n    getAbsolutePath(\"@storybook/addon-links\"),\n    getAbsolutePath(\"@storybook/addon-essentials\"),\n    {\n      name: '@storybook/addon-styling',\n    },\n  ],\n  typescript: {\n    reactDocgen: false,\n  },\n  viteFinal(config, { configType }) {\n    return mergeConfig(config, {\n      plugins: [tsconfigPaths()],\n    })\n  },\n}\nexport default config\n\nfunction getAbsolutePath(value: string): any {\n  return dirname(require.resolve(join(value, \"package.json\")));\n}\n"
  },
  {
    "path": "apps/storybook/.storybook/preview.ts",
    "content": "/** @type { import('@storybook/react').Preview } */\nimport { withThemeByClassName } from '@storybook/addon-styling'\n\nimport '../src/styles.css'\n\nimport { Preview } from '@storybook/react'\n\nconst preview: Preview = {\n  parameters: {\n    actions: { argTypesRegex: '^on[A-Z].*' },\n    controls: {\n      matchers: {\n        color: /(background|color)$/i,\n        date: /Date$/,\n      },\n    },\n  },\n}\n\nexport const decorators = [\n  withThemeByClassName({\n    themes: {\n      light: '',\n      dark: 'dark bg-slate-800',\n    },\n    defaultTheme: 'light',\n  }),\n]\n\nexport default preview\n"
  },
  {
    "path": "apps/storybook/package.json",
    "content": "{\n  \"name\": \"storybook\",\n  \"version\": \"0.1.0\",\n  \"private\": true,\n  \"main\": \"src/index.ts\",\n  \"types\": \"src/index.ts\",\n  \"scripts\": {\n    \"lint\": \"eslint --ignore-path .gitignore '**/*.{js,jsx,cjs,mjs,ts,tsx,json}'\",\n    \"storybook\": \"storybook dev -p 6006\",\n    \"build\": \"storybook build\",\n    \"upgrade\": \"pnpm dlx sb@latest upgrade\",\n    \"typecheck\": \"tsc --noEmit --pretty\"\n  },\n  \"dependencies\": {\n    \"@babel/preset-env\": \"^7.23.7\",\n    \"@babel/preset-react\": \"^7.23.3\",\n    \"@babel/preset-typescript\": \"^7.23.3\",\n    \"@storybook/addon-a11y\": \"^7.6.7\",\n    \"@storybook/addon-essentials\": \"^7.6.7\",\n    \"@storybook/addon-interactions\": \"^7.6.7\",\n    \"@storybook/addon-links\": \"^7.6.7\",\n    \"@storybook/addon-styling\": \"^1.3.7\",\n    \"@storybook/blocks\": \"^7.6.7\",\n    \"@storybook/react\": \"^7.6.7\",\n    \"@storybook/react-vite\": \"^7.6.7\",\n    \"@storybook/testing-library\": \"^0.2.2\",\n    \"autoprefixer\": \"^10.4.16\",\n    \"lucide-react\": \"^0.259.0\",\n    \"postcss-loader\": \"^7.3.4\",\n    \"prop-types\": \"^15.8.1\",\n    \"react\": \"^18.2.0\",\n    \"react-aria-components\": \"1.0.0\",\n    \"react-dom\": \"^18.2.0\",\n    \"storybook\": \"^7.6.7\",\n    \"tailwindcss\": \"^3.4.1\",\n    \"tailwindcss-animate\": \"^1.0.7\",\n    \"typescript\": \"^5.1.6\",\n    \"ui\": \"workspace:*\",\n    \"vite\": \"^4.5.1\",\n    \"vite-tsconfig-paths\": \"^4.2.3\"\n  },\n  \"devDependencies\": {\n    \"@storybook/manager-api\": \"^7.6.7\",\n    \"@storybook/theming\": \"^7.6.7\",\n    \"@types/react\": \"18.0.27\",\n    \"@types/react-dom\": \"18.0.10\",\n    \"@typescript-eslint/eslint-plugin\": \"^5.62.0\",\n    \"eslint\": \"^8.56.0\",\n    \"eslint-config-custom\": \"workspace:*\",\n    \"eslint-plugin-storybook\": \"^0.6.15\",\n    \"postcss\": \"^8.4.33\",\n    \"postcss-config\": \"workspace:*\",\n    \"tailwind-config\": \"workspace:*\",\n    \"ts-config\": \"workspace:*\"\n  }\n}\n"
  },
  {
    "path": "apps/storybook/postcss.config.cjs",
    "content": "/** @type {import('postcss').Config} */\nmodule.exports = require('postcss-config/postcss.config.cjs')\n"
  },
  {
    "path": "apps/storybook/src/components/breadcrumbs/breadcrumbs.stories.tsx",
    "content": "import { Breadcrumbs } from 'ui'\n\nimport { type Meta } from '@storybook/react'\n\nimport DefaultStory from './stories/default'\n\nconst meta: Meta<typeof Breadcrumbs> = {\n  title: 'Breadcrumbs',\n  component: Breadcrumbs,\n}\n\nexport default meta\n\nexport const Default = () => <DefaultStory />\n"
  },
  {
    "path": "apps/storybook/src/components/breadcrumbs/stories/default.tsx",
    "content": "import { ChevronRight } from 'lucide-react'\nimport { BreadcrumbItem, BreadcrumbLink, Breadcrumbs } from 'ui'\n\nexport default function Default() {\n  return (\n    <Breadcrumbs>\n      <BreadcrumbItem separator={<ChevronRight size=\"1em\" />}>\n        <BreadcrumbLink href=\"#\">Home</BreadcrumbLink>\n      </BreadcrumbItem>\n      <BreadcrumbItem separator={<ChevronRight size=\"1em\" />}>\n        <BreadcrumbLink href=\"#\">React Aria</BreadcrumbLink>\n      </BreadcrumbItem>\n      <BreadcrumbItem>\n        <BreadcrumbLink>useBreadcrumbs</BreadcrumbLink>\n      </BreadcrumbItem>\n    </Breadcrumbs>\n  )\n}\n"
  },
  {
    "path": "apps/storybook/src/components/button/button.stories.tsx",
    "content": "import { Button } from 'ui'\n\nimport { type Meta } from '@storybook/react'\n\nimport DefaultStory from './stories/default'\nimport DisabledStory from './stories/disabled'\nimport SizesStory from './stories/sizes'\nimport ThemeStory from './stories/theme'\n\nconst meta: Meta<typeof Button> = {\n  title: 'Button',\n  component: Button,\n}\n\nexport default meta\n\nexport const Default = () => <DefaultStory />\nexport const Sizes = () => <SizesStory />\nexport const Theme = () => <ThemeStory />\nexport const Disabled = () => <DisabledStory />\n"
  },
  {
    "path": "apps/storybook/src/components/button/stories/default.tsx",
    "content": "import { Button } from 'ui'\n\nexport default function Default() {\n  return <Button>Press Me</Button>\n}\n"
  },
  {
    "path": "apps/storybook/src/components/button/stories/disabled.tsx",
    "content": "import { Button } from 'ui'\n\nexport default function Disabled() {\n  return (\n    <div className=\"flex flex-wrap justify-center gap-4\">\n      <Button variant=\"solid\" isDisabled>\n        Solid\n      </Button>\n      <Button variant=\"outline\" isDisabled>\n        Outline\n      </Button>\n      <Button variant=\"subtle\" isDisabled>\n        Subtle\n      </Button>\n      <Button variant=\"ghost\" isDisabled>\n        Ghost\n      </Button>\n      <Button variant=\"destructive\" isDisabled>\n        Destructive\n      </Button>\n      <Button variant=\"link\" isDisabled>\n        Link\n      </Button>\n    </div>\n  )\n}\n"
  },
  {
    "path": "apps/storybook/src/components/button/stories/sizes.tsx",
    "content": "import { Button } from 'ui'\n\nexport default function Sizes() {\n  return (\n    <div className=\"flex flex-wrap justify-center gap-4\">\n      <Button size=\"xs\">X Small</Button>\n      <Button size=\"sm\">Small</Button>\n      <Button size=\"md\">Medium</Button>\n      <Button size=\"lg\">Large</Button>\n    </div>\n  )\n}\n"
  },
  {
    "path": "apps/storybook/src/components/button/stories/theme.tsx",
    "content": "import { Button } from 'ui'\n\nexport default function Theme() {\n  return (\n    <div className=\"flex flex-wrap justify-center gap-4\">\n      <Button variant=\"solid\">Solid</Button>\n      <Button variant=\"outline\">Outline</Button>\n      <Button variant=\"subtle\">Subtle</Button>\n      <Button variant=\"ghost\">Ghost</Button>\n      <Button variant=\"destructive\">Destructive</Button>\n      <Button variant=\"link\">Link</Button>\n    </div>\n  )\n}\n"
  },
  {
    "path": "apps/storybook/src/components/calendar/calendar.stories.tsx",
    "content": "import { Calendar } from 'ui'\n\nimport { type Meta } from '@storybook/react'\n\nimport DefaultStory from './stories/default'\n\nconst meta: Meta<typeof Calendar> = {\n  title: 'Calendar',\n  component: Calendar,\n}\n\nexport default meta\n\nexport const Default = () => <DefaultStory />\n"
  },
  {
    "path": "apps/storybook/src/components/calendar/stories/default.tsx",
    "content": "import {\n  Calendar,\n  CalendarCell,\n  CalendarGrid,\n  CalendarGridBody,\n  CalendarGridHeader,\n  CalendarHeader,\n  CalendarHeaderCell,\n  CalendarHeading,\n  CalendarNextButton,\n  CalendarPrevButton,\n} from 'ui'\n\nexport default function Default() {\n  return (\n    <Calendar>\n      <CalendarHeader>\n        <CalendarPrevButton />\n        <CalendarHeading />\n        <CalendarNextButton />\n      </CalendarHeader>\n      <CalendarGrid>\n        <CalendarGridHeader>\n          {(day) => <CalendarHeaderCell>{day}</CalendarHeaderCell>}\n        </CalendarGridHeader>\n        <CalendarGridBody>\n          {(date) => <CalendarCell date={date} />}\n        </CalendarGridBody>\n      </CalendarGrid>\n    </Calendar>\n  )\n}\n"
  },
  {
    "path": "apps/storybook/src/components/checkbox/checkbox.stories.tsx",
    "content": "import { Checkbox } from 'ui'\n\nimport { type Meta } from '@storybook/react'\n\nimport DefaultStory from './stories/default'\nimport DisabledStory from './stories/disabled'\nimport SizesStory from './stories/sizes'\n\nconst meta: Meta<typeof Checkbox> = {\n  title: 'Checkbox',\n  component: Checkbox,\n}\n\nexport default meta\n\nexport const Default = () => <DefaultStory />\nexport const Sizes = () => <SizesStory />\nexport const Disabled = () => <DisabledStory />\n"
  },
  {
    "path": "apps/storybook/src/components/checkbox/stories/default.tsx",
    "content": "import { Checkbox } from 'ui'\n\nexport default function Default() {\n  return (\n    <div className=\"space-y-4\">\n      <Checkbox value=\"cat\">Cat</Checkbox>\n      <Checkbox value=\"dog\" defaultSelected>\n        Dog\n      </Checkbox>\n      <Checkbox value=\"reptile\" isIndeterminate>\n        Reptile\n      </Checkbox>\n    </div>\n  )\n}\n"
  },
  {
    "path": "apps/storybook/src/components/checkbox/stories/disabled.tsx",
    "content": "import { Checkbox } from 'ui'\n\nexport default function Sizes() {\n  return (\n    <div className=\"space-y-4\">\n      <Checkbox value=\"cat\">Medium Cat</Checkbox>\n      <Checkbox value=\"dog\" isDisabled>\n        Medium Dog\n      </Checkbox>\n      <Checkbox value=\"reptile\" defaultSelected isDisabled>\n        Medium Reptile\n      </Checkbox>\n    </div>\n  )\n}\n"
  },
  {
    "path": "apps/storybook/src/components/checkbox/stories/sizes.tsx",
    "content": "import { Checkbox } from 'ui'\n\nexport default function Sizes() {\n  return (\n    <div className=\"space-y-6\">\n      <div className=\"space-y-1\">\n        <Checkbox size=\"sm\" value=\"cat-sm\">\n          Small Cat\n        </Checkbox>\n        <Checkbox size=\"sm\" value=\"dog-sm\">\n          Small Dog\n        </Checkbox>\n        <Checkbox size=\"sm\" value=\"reptile-sm\" isIndeterminate>\n          Small Reptile\n        </Checkbox>\n      </div>\n      <div className=\"space-y-2\">\n        <Checkbox size=\"md\" value=\"cat-md\">\n          Medium Cat\n        </Checkbox>\n        <Checkbox size=\"md\" value=\"dog-md\">\n          Medium Dog\n        </Checkbox>\n        <Checkbox size=\"md\" value=\"reptile-md\" isIndeterminate>\n          Medium Reptile\n        </Checkbox>\n      </div>\n      <div className=\"space-y-2\">\n        <Checkbox size=\"lg\" value=\"cat-lg\">\n          Large Cat\n        </Checkbox>\n        <Checkbox size=\"lg\" value=\"dog-lg\">\n          Large Dog\n        </Checkbox>\n        <Checkbox size=\"lg\" value=\"reptile-lg\" isIndeterminate>\n          Large Reptile\n        </Checkbox>\n      </div>\n    </div>\n  )\n}\n"
  },
  {
    "path": "apps/storybook/src/components/checkbox-group/checkbox-group.stories.tsx",
    "content": "import { CheckboxGroup } from 'ui'\n\nimport { type Meta } from '@storybook/react'\n\nimport DefaultStory from './stories/default'\nimport DisabledStory from './stories/disabled'\nimport HorizontalStory from './stories/horizontal'\n\nconst meta: Meta<typeof CheckboxGroup> = {\n  title: 'CheckboxGroup',\n  component: CheckboxGroup,\n}\n\nexport default meta\n\nexport const Default = () => <DefaultStory />\nexport const Horizontal = () => <HorizontalStory />\nexport const Disabled = () => <DisabledStory />\n"
  },
  {
    "path": "apps/storybook/src/components/checkbox-group/stories/default.tsx",
    "content": "import { Checkbox, CheckboxGroup, CheckboxGroupContent, Label } from 'ui'\n\nexport default function Default() {\n  return (\n    <CheckboxGroup>\n      <Label>Favorite sports</Label>\n      <CheckboxGroupContent>\n        <Checkbox value=\"soccer\">Soccer</Checkbox>\n        <Checkbox value=\"baseball\">Baseball</Checkbox>\n        <Checkbox value=\"basketball\">Basketball</Checkbox>\n      </CheckboxGroupContent>\n    </CheckboxGroup>\n  )\n}\n"
  },
  {
    "path": "apps/storybook/src/components/checkbox-group/stories/disabled.tsx",
    "content": "import { Checkbox, CheckboxGroup, CheckboxGroupContent, Label } from 'ui'\n\nexport default function Default() {\n  return (\n    <CheckboxGroup isDisabled defaultValue={['basketball']}>\n      <Label>Favorite sports</Label>\n      <CheckboxGroupContent>\n        <Checkbox value=\"soccer\">Soccer</Checkbox>\n        <Checkbox value=\"baseball\" isIndeterminate>\n          Baseball\n        </Checkbox>\n        <Checkbox value=\"basketball\">Basketball</Checkbox>\n      </CheckboxGroupContent>\n    </CheckboxGroup>\n  )\n}\n"
  },
  {
    "path": "apps/storybook/src/components/checkbox-group/stories/horizontal.tsx",
    "content": "import { Checkbox, CheckboxGroup, CheckboxGroupContent, Label } from 'ui'\n\nexport default function Horizontal() {\n  return (\n    <CheckboxGroup orientation=\"horizontal\">\n      <Label>Favorite sports</Label>\n      <CheckboxGroupContent>\n        <Checkbox value=\"soccer\">Soccer</Checkbox>\n        <Checkbox value=\"baseball\">Baseball</Checkbox>\n        <Checkbox value=\"basketball\">Basketball</Checkbox>\n      </CheckboxGroupContent>\n    </CheckboxGroup>\n  )\n}\n"
  },
  {
    "path": "apps/storybook/src/components/combobox/combo-box.stories.tsx",
    "content": "import { ComboBox } from 'ui'\n\nimport { type Meta } from '@storybook/react'\n\nimport DefaultStory from './stories/default'\nimport DisabledStory from './stories/disabled'\nimport DisabledKeysStory from './stories/disabled-keys'\nimport WithButtonStory from './stories/with-button'\n\nconst meta: Meta<typeof ComboBox> = {\n  title: 'ComboBox',\n  component: ComboBox,\n}\n\nexport default meta\n\nexport const Default = () => <DefaultStory />\nexport const WithButton = () => <WithButtonStory />\nexport const Disabled = () => <DisabledStory />\nexport const DisabledKeys = () => <DisabledKeysStory />\n"
  },
  {
    "path": "apps/storybook/src/components/combobox/stories/default.tsx",
    "content": "import {\n  ComboBox,\n  ComboBoxContent,\n  ComboBoxInput,\n  ComboBoxItem,\n  Label,\n} from 'ui'\n\nexport default function Default() {\n  return (\n    <ComboBox>\n      <Label>Favorite Animal</Label>\n      <ComboBoxInput />\n      <ComboBoxContent>\n        <ComboBoxItem textValue=\"Aardvark\">Aardvark</ComboBoxItem>\n        <ComboBoxItem textValue=\"Cat\">Cat</ComboBoxItem>\n        <ComboBoxItem textValue=\"Dog\">Dog</ComboBoxItem>\n        <ComboBoxItem textValue=\"Kangaroo\">Kangaroo</ComboBoxItem>\n        <ComboBoxItem textValue=\"Panda\">Panda</ComboBoxItem>\n        <ComboBoxItem textValue=\"Snake\">Snake</ComboBoxItem>\n      </ComboBoxContent>\n    </ComboBox>\n  )\n}\n"
  },
  {
    "path": "apps/storybook/src/components/combobox/stories/disabled-keys.tsx",
    "content": "import { ChevronDown } from 'lucide-react'\nimport {\n  ComboBox,\n  ComboBoxButton,\n  ComboBoxContent,\n  ComboBoxInput,\n  ComboBoxItem,\n  iconButtonVariants,\n  Label,\n} from 'ui'\n\nexport default function DisabledKeys() {\n  return (\n    <ComboBox disabledKeys={['cat', 'kangaroo']}>\n      <Label>Favorite Animal</Label>\n      <div className=\"relative\">\n        <ComboBoxInput />\n        <div className=\"absolute inset-y-0 right-0 flex items-center p-1\">\n          <ComboBoxButton\n            className={iconButtonVariants({\n              variant: 'subtle',\n              size: 'sm',\n              className: 'ml-auto shrink-0',\n            })}\n          >\n            <ChevronDown size=\"16\" strokeWidth=\"3\" />\n          </ComboBoxButton>\n        </div>\n      </div>\n      <ComboBoxContent>\n        <ComboBoxItem id=\"aardvark\" textValue=\"Aardvark\">\n          Aardvark\n        </ComboBoxItem>\n        <ComboBoxItem id=\"cat\" textValue=\"Cat\">\n          Cat\n        </ComboBoxItem>\n        <ComboBoxItem id=\"dog\" textValue=\"Dog\">\n          Dog\n        </ComboBoxItem>\n        <ComboBoxItem id=\"kangaroo\" textValue=\"Kangaroo\">\n          Kangaroo\n        </ComboBoxItem>\n        <ComboBoxItem id=\"panda\" textValue=\"Panda\">\n          Panda\n        </ComboBoxItem>\n        <ComboBoxItem id=\"snake\" textValue=\"Snake\">\n          Snake\n        </ComboBoxItem>\n      </ComboBoxContent>\n    </ComboBox>\n  )\n}\n"
  },
  {
    "path": "apps/storybook/src/components/combobox/stories/disabled.tsx",
    "content": "import { ChevronDown } from 'lucide-react'\nimport {\n  ComboBox,\n  ComboBoxButton,\n  ComboBoxContent,\n  ComboBoxInput,\n  ComboBoxItem,\n  iconButtonVariants,\n  Label,\n} from 'ui'\n\nexport default function Disabled() {\n  return (\n    <ComboBox isDisabled>\n      <Label>Favorite Animal</Label>\n      <div className=\"relative\">\n        <ComboBoxInput />\n        <div className=\"absolute inset-y-0 right-0 flex items-center p-1\">\n          <ComboBoxButton\n            className={iconButtonVariants({\n              variant: 'subtle',\n              size: 'sm',\n              className: 'ml-auto shrink-0',\n            })}\n          >\n            <ChevronDown size=\"16\" strokeWidth=\"3\" />\n          </ComboBoxButton>\n        </div>\n      </div>\n      <ComboBoxContent>\n        <ComboBoxItem textValue=\"Aardvark\">Aardvark</ComboBoxItem>\n        <ComboBoxItem textValue=\"Cat\">Cat</ComboBoxItem>\n        <ComboBoxItem textValue=\"Dog\">Dog</ComboBoxItem>\n        <ComboBoxItem textValue=\"Kangaroo\">Kangaroo</ComboBoxItem>\n        <ComboBoxItem textValue=\"Panda\">Panda</ComboBoxItem>\n        <ComboBoxItem textValue=\"Snake\">Snake</ComboBoxItem>\n      </ComboBoxContent>\n    </ComboBox>\n  )\n}\n"
  },
  {
    "path": "apps/storybook/src/components/combobox/stories/with-button.tsx",
    "content": "import { ChevronDown } from 'lucide-react'\nimport {\n  ComboBox,\n  ComboBoxButton,\n  ComboBoxContent,\n  ComboBoxInput,\n  ComboBoxItem,\n  iconButtonVariants,\n  Label,\n} from 'ui'\n\nexport default function WithButton() {\n  return (\n    <ComboBox>\n      <Label>Favorite Animal</Label>\n      <div className=\"relative\">\n        <ComboBoxInput />\n        <div className=\"absolute inset-y-0 right-0 flex items-center p-1\">\n          <ComboBoxButton\n            className={iconButtonVariants({\n              variant: 'subtle',\n              size: 'sm',\n              className: 'ml-auto shrink-0',\n            })}\n          >\n            <ChevronDown size=\"16\" strokeWidth=\"3\" />\n          </ComboBoxButton>\n        </div>\n      </div>\n      <ComboBoxContent>\n        <ComboBoxItem textValue=\"Aardvark\">Aardvark</ComboBoxItem>\n        <ComboBoxItem textValue=\"Cat\">Cat</ComboBoxItem>\n        <ComboBoxItem textValue=\"Dog\">Dog</ComboBoxItem>\n        <ComboBoxItem textValue=\"Kangaroo\">Kangaroo</ComboBoxItem>\n        <ComboBoxItem textValue=\"Panda\">Panda</ComboBoxItem>\n        <ComboBoxItem textValue=\"Snake\">Snake</ComboBoxItem>\n      </ComboBoxContent>\n    </ComboBox>\n  )\n}\n"
  },
  {
    "path": "apps/storybook/src/components/date-field/date-field.stories.tsx",
    "content": "import { DateField } from 'ui'\n\nimport { type Meta } from '@storybook/react'\n\nimport DefaultStory from './stories/default'\nimport DisabledStory from './stories/disabled'\n\nconst meta: Meta<typeof DateField> = {\n  title: 'DateField',\n  component: DateField,\n}\n\nexport default meta\n\nexport const Default = () => <DefaultStory />\nexport const Disabled = () => <DisabledStory />\n"
  },
  {
    "path": "apps/storybook/src/components/date-field/stories/default.tsx",
    "content": "import { DateField, DateInput, DateInputGroup, DateSegment, Label } from 'ui'\n\nexport default function Default() {\n  return (\n    <DateField>\n      <Label>Date Label</Label>\n      <DateInputGroup>\n        <DateInput>{(segment) => <DateSegment segment={segment} />}</DateInput>\n      </DateInputGroup>\n    </DateField>\n  )\n}\n"
  },
  {
    "path": "apps/storybook/src/components/date-field/stories/disabled.tsx",
    "content": "import { DateField, DateInput, DateInputGroup, DateSegment, Label } from 'ui'\n\nexport default function Disabled() {\n  return (\n    <DateField isDisabled>\n      <Label>Date Label</Label>\n      <DateInputGroup>\n        <DateInput>{(segment) => <DateSegment segment={segment} />}</DateInput>\n      </DateInputGroup>\n    </DateField>\n  )\n}\n"
  },
  {
    "path": "apps/storybook/src/components/date-input/date-input.stories.tsx",
    "content": "import { DateInput } from 'ui'\n\nimport { type Meta } from '@storybook/react'\n\nimport DefaultStory from './stories/default'\nimport SizesStory from './stories/sizes'\n\nconst meta: Meta<typeof DateInput> = {\n  title: 'DateInput',\n  component: DateInput,\n}\n\nexport default meta\n\nexport const Default = () => <DefaultStory />\nexport const Sizes = () => <SizesStory />\n"
  },
  {
    "path": "apps/storybook/src/components/date-input/stories/default.tsx",
    "content": "import { DateField, DateInput, DateInputGroup, DateSegment } from 'ui'\n\nexport default function Default() {\n  return (\n    <DateField>\n      <DateInputGroup>\n        <DateInput>{(segment) => <DateSegment segment={segment} />}</DateInput>\n      </DateInputGroup>\n    </DateField>\n  )\n}\n"
  },
  {
    "path": "apps/storybook/src/components/date-input/stories/sizes.tsx",
    "content": "import { DateField, DateInput, DateInputGroup, DateSegment } from 'ui'\n\nexport default function Sizes() {\n  return (\n    <div className=\"flex flex-col gap-4\">\n      <DateField>\n        <DateInputGroup size=\"xs\">\n          <DateInput>\n            {(segment) => <DateSegment segment={segment} />}\n          </DateInput>\n        </DateInputGroup>\n      </DateField>\n      <DateField>\n        <DateInputGroup size=\"sm\">\n          <DateInput>\n            {(segment) => <DateSegment segment={segment} />}\n          </DateInput>\n        </DateInputGroup>\n      </DateField>\n      <DateField>\n        <DateInputGroup size=\"md\">\n          <DateInput>\n            {(segment) => <DateSegment segment={segment} />}\n          </DateInput>\n        </DateInputGroup>\n      </DateField>\n      <DateField>\n        <DateInputGroup size=\"lg\">\n          <DateInput>\n            {(segment) => <DateSegment segment={segment} />}\n          </DateInput>\n        </DateInputGroup>\n      </DateField>\n    </div>\n  )\n}\n"
  },
  {
    "path": "apps/storybook/src/components/date-picker/date-picker.stories.tsx",
    "content": "import { DatePicker } from 'ui'\n\nimport { type Meta } from '@storybook/react'\n\nimport DefaultStory from './stories/default'\nimport DisabledStory from './stories/disabled'\n\nconst meta: Meta<typeof DatePicker> = {\n  title: 'DatePicker',\n  component: DatePicker,\n}\n\nexport default meta\n\nexport const Default = () => <DefaultStory />\nexport const Disabled = () => <DisabledStory />\n"
  },
  {
    "path": "apps/storybook/src/components/date-picker/stories/default.tsx",
    "content": "import { ChevronDown, ChevronLeft, ChevronRight } from 'lucide-react'\nimport {\n  Calendar,\n  CalendarCell,\n  CalendarGrid,\n  CalendarGridBody,\n  CalendarGridHeader,\n  CalendarHeader,\n  CalendarHeaderCell,\n  CalendarHeading,\n  CalendarNextButton,\n  CalendarPrevButton,\n  DateInput,\n  DateInputGroup,\n  DatePicker,\n  DatePickerButton,\n  DatePickerContent,\n  DateSegment,\n  iconButtonVariants,\n  Label,\n} from 'ui'\n\nexport default function Default() {\n  return (\n    <DatePicker>\n      <Label>Date</Label>\n      <DateInputGroup className=\"relative pr-10\">\n        <DateInput>{(segment) => <DateSegment segment={segment} />}</DateInput>\n        <div className=\"absolute inset-y-0 right-0 flex items-center p-1\">\n          <DatePickerButton\n            className={iconButtonVariants({\n              variant: 'subtle',\n              size: 'sm',\n              className: 'ml-auto shrink-0',\n            })}\n          >\n            <ChevronDown size=\"16\" strokeWidth=\"3\" />\n          </DatePickerButton>\n        </div>\n      </DateInputGroup>\n      <DatePickerContent>\n        <Calendar>\n          <CalendarHeader>\n            <CalendarPrevButton\n              className={iconButtonVariants({\n                variant: 'outline',\n                size: 'sm',\n              })}\n            >\n              <ChevronLeft size=\"16\" strokeWidth=\"3\" />\n            </CalendarPrevButton>\n            <CalendarHeading />\n            <CalendarNextButton\n              className={iconButtonVariants({\n                variant: 'outline',\n                size: 'sm',\n              })}\n            >\n              <ChevronRight size=\"16\" strokeWidth=\"3\" />\n            </CalendarNextButton>\n          </CalendarHeader>\n          <CalendarGrid>\n            <CalendarGridHeader>\n              {(day) => <CalendarHeaderCell>{day}</CalendarHeaderCell>}\n            </CalendarGridHeader>\n            <CalendarGridBody>\n              {(date) => <CalendarCell date={date} />}\n            </CalendarGridBody>\n          </CalendarGrid>\n        </Calendar>\n      </DatePickerContent>\n    </DatePicker>\n  )\n}\n"
  },
  {
    "path": "apps/storybook/src/components/date-picker/stories/disabled.tsx",
    "content": "import { ChevronDown, ChevronLeft, ChevronRight } from 'lucide-react'\nimport {\n  Calendar,\n  CalendarCell,\n  CalendarGrid,\n  CalendarGridBody,\n  CalendarGridHeader,\n  CalendarHeader,\n  CalendarHeaderCell,\n  CalendarHeading,\n  CalendarNextButton,\n  CalendarPrevButton,\n  DateInput,\n  DateInputGroup,\n  DatePicker,\n  DatePickerButton,\n  DatePickerContent,\n  DateSegment,\n  iconButtonVariants,\n  Label,\n} from 'ui'\n\nexport default function Default() {\n  return (\n    <DatePicker isDisabled>\n      <Label>Date</Label>\n      <DateInputGroup className=\"relative pr-10\">\n        <DateInput>{(segment) => <DateSegment segment={segment} />}</DateInput>\n        <div className=\"absolute inset-y-0 right-0 flex items-center p-1\">\n          <DatePickerButton\n            className={iconButtonVariants({\n              variant: 'subtle',\n              size: 'sm',\n              className: 'ml-auto shrink-0',\n            })}\n          >\n            <ChevronDown size=\"16\" strokeWidth=\"3\" />\n          </DatePickerButton>\n        </div>\n      </DateInputGroup>\n      <DatePickerContent>\n        <Calendar>\n          <CalendarHeader>\n            <CalendarPrevButton\n              className={iconButtonVariants({\n                variant: 'outline',\n                size: 'sm',\n              })}\n            >\n              <ChevronLeft size=\"16\" strokeWidth=\"3\" />\n            </CalendarPrevButton>\n            <CalendarHeading />\n            <CalendarNextButton\n              className={iconButtonVariants({\n                variant: 'outline',\n                size: 'sm',\n              })}\n            >\n              <ChevronRight size=\"16\" strokeWidth=\"3\" />\n            </CalendarNextButton>\n          </CalendarHeader>\n          <CalendarGrid>\n            <CalendarGridHeader>\n              {(day) => <CalendarHeaderCell>{day}</CalendarHeaderCell>}\n            </CalendarGridHeader>\n            <CalendarGridBody>\n              {(date) => <CalendarCell date={date} />}\n            </CalendarGridBody>\n          </CalendarGrid>\n        </Calendar>\n      </DatePickerContent>\n    </DatePicker>\n  )\n}\n"
  },
  {
    "path": "apps/storybook/src/components/date-range-picker/date-range-picker.stories.tsx",
    "content": "import { DateRangePicker } from 'ui'\n\nimport { type Meta } from '@storybook/react'\n\nimport DefaultStory from './stories/default'\nimport DisabledStory from './stories/disabled'\n\nconst meta: Meta<typeof DateRangePicker> = {\n  title: 'DateRangePicker',\n  component: DateRangePicker,\n}\n\nexport default meta\n\nexport const Default = () => <DefaultStory />\nexport const Disabled = () => <DisabledStory />\n"
  },
  {
    "path": "apps/storybook/src/components/date-range-picker/stories/default.tsx",
    "content": "import { ChevronDown } from 'lucide-react'\nimport {\n  CalendarCell,\n  CalendarGrid,\n  CalendarGridBody,\n  CalendarGridHeader,\n  CalendarHeader,\n  CalendarHeaderCell,\n  CalendarHeading,\n  CalendarNextButton,\n  CalendarPrevButton,\n  DateInput,\n  DateInputGroup,\n  DatePickerButton,\n  DatePickerContent,\n  DateRangePicker,\n  DateSegment,\n  iconButtonVariants,\n  Label,\n  RangeCalendar,\n} from 'ui'\n\nexport default function Default() {\n  return (\n    <DateRangePicker>\n      <Label>Date Range</Label>\n      <DateInputGroup className=\"relative pr-10\">\n        <DateInput slot=\"start\">\n          {(segment) => <DateSegment segment={segment} />}\n        </DateInput>\n        <span aria-hidden=\"true\" className=\"px-2\">\n          –\n        </span>\n        <DateInput slot=\"end\">\n          {(segment) => <DateSegment segment={segment} />}\n        </DateInput>\n        <div className=\"absolute inset-y-0 right-0 flex items-center p-1\">\n          <DatePickerButton\n            className={iconButtonVariants({\n              variant: 'subtle',\n              size: 'sm',\n              className: 'ml-auto shrink-0',\n            })}\n          >\n            <ChevronDown size=\"16\" strokeWidth=\"3\" />\n          </DatePickerButton>\n        </div>\n      </DateInputGroup>\n      <DatePickerContent>\n        <RangeCalendar>\n          <CalendarHeader>\n            <CalendarPrevButton />\n            <CalendarHeading />\n            <CalendarNextButton />\n          </CalendarHeader>\n          <CalendarGrid>\n            <CalendarGridHeader>\n              {(day) => <CalendarHeaderCell>{day}</CalendarHeaderCell>}\n            </CalendarGridHeader>\n            <CalendarGridBody>\n              {(date) => <CalendarCell date={date} />}\n            </CalendarGridBody>\n          </CalendarGrid>\n        </RangeCalendar>\n      </DatePickerContent>\n    </DateRangePicker>\n  )\n}\n"
  },
  {
    "path": "apps/storybook/src/components/date-range-picker/stories/disabled.tsx",
    "content": "import { ChevronDown } from 'lucide-react'\nimport {\n  CalendarCell,\n  CalendarGrid,\n  CalendarGridBody,\n  CalendarGridHeader,\n  CalendarHeader,\n  CalendarHeaderCell,\n  CalendarHeading,\n  CalendarNextButton,\n  CalendarPrevButton,\n  DateInput,\n  DateInputGroup,\n  DatePickerButton,\n  DatePickerContent,\n  DateRangePicker,\n  DateSegment,\n  iconButtonVariants,\n  Label,\n  RangeCalendar,\n} from 'ui'\n\nexport default function Default() {\n  return (\n    <DateRangePicker isDisabled>\n      <Label>Date Range</Label>\n      <DateInputGroup className=\"relative pr-10\">\n        <DateInput slot=\"start\">\n          {(segment) => <DateSegment segment={segment} />}\n        </DateInput>\n        <span aria-hidden=\"true\" className=\"px-2\">\n          –\n        </span>\n        <DateInput slot=\"end\">\n          {(segment) => <DateSegment segment={segment} />}\n        </DateInput>\n        <div className=\"absolute inset-y-0 right-0 flex items-center p-1\">\n          <DatePickerButton\n            className={iconButtonVariants({\n              variant: 'subtle',\n              size: 'sm',\n              className: 'ml-auto shrink-0',\n            })}\n          >\n            <ChevronDown size=\"16\" strokeWidth=\"3\" />\n          </DatePickerButton>\n        </div>\n      </DateInputGroup>\n      <DatePickerContent>\n        <RangeCalendar>\n          <CalendarHeader>\n            <CalendarPrevButton />\n            <CalendarHeading />\n            <CalendarNextButton />\n          </CalendarHeader>\n          <CalendarGrid>\n            <CalendarGridHeader>\n              {(day) => <CalendarHeaderCell>{day}</CalendarHeaderCell>}\n            </CalendarGridHeader>\n            <CalendarGridBody>\n              {(date) => <CalendarCell date={date} />}\n            </CalendarGridBody>\n          </CalendarGrid>\n        </RangeCalendar>\n      </DatePickerContent>\n    </DateRangePicker>\n  )\n}\n"
  },
  {
    "path": "apps/storybook/src/components/grid-list/grid-list.stories.tsx",
    "content": "import { GridList } from 'ui'\n\nimport { type Meta } from '@storybook/react'\n\nimport DefaultStory from './stories/default'\n\nconst meta: Meta<typeof GridList> = {\n  title: 'GridList',\n  component: GridList,\n}\n\nexport default meta\n\nexport const Default = () => <DefaultStory />\n"
  },
  {
    "path": "apps/storybook/src/components/grid-list/stories/default.tsx",
    "content": "import { Info } from 'lucide-react'\nimport { Checkbox, GridList, GridListItem, IconButton } from 'ui'\n\nexport default function Default() {\n  return (\n    <GridList aria-label=\"Favorite pokemon\" selectionMode=\"multiple\">\n      <GridListItem\n        className=\"[&_[role=gridcell]]:flex [&_[role=gridcell]]:items-center\"\n        textValue=\"Charizard\"\n      >\n        <Checkbox />\n        Charizard\n        <IconButton\n          className=\"ml-2\"\n          size=\"sm\"\n          variant=\"subtle\"\n          aria-label=\"Info\"\n        >\n          <Info size=\"1em\" />\n        </IconButton>\n      </GridListItem>\n      <GridListItem\n        className=\"[&_[role=gridcell]]:flex [&_[role=gridcell]]:items-center\"\n        textValue=\"Blastoise\"\n      >\n        <Checkbox />\n        Blastoise\n        <IconButton\n          className=\"ml-2\"\n          size=\"sm\"\n          variant=\"subtle\"\n          aria-label=\"Info\"\n        >\n          <Info size=\"1em\" />\n        </IconButton>\n      </GridListItem>\n      <GridListItem\n        className=\"[&_[role=gridcell]]:flex [&_[role=gridcell]]:items-center\"\n        textValue=\"Venusaur\"\n      >\n        <Checkbox />\n        Venusaur\n        <IconButton\n          className=\"ml-2\"\n          size=\"sm\"\n          variant=\"subtle\"\n          aria-label=\"Info\"\n        >\n          <Info size=\"1em\" />\n        </IconButton>\n      </GridListItem>\n      <GridListItem\n        className=\"[&_[role=gridcell]]:flex [&_[role=gridcell]]:items-center\"\n        textValue=\"Pikachu\"\n      >\n        <Checkbox />\n        Pikachu\n        <IconButton\n          className=\"ml-2\"\n          size=\"sm\"\n          variant=\"subtle\"\n          aria-label=\"Info\"\n        >\n          <Info size=\"1em\" />\n        </IconButton>\n      </GridListItem>\n    </GridList>\n  )\n}\n"
  },
  {
    "path": "apps/storybook/src/components/icon-button/icon-button.stories.tsx",
    "content": "import { IconButton } from 'ui'\n\nimport { type Meta } from '@storybook/react'\n\nimport DefaultStory from './stories/default'\nimport DisabledStory from './stories/disabled'\nimport SizesStory from './stories/sizes'\nimport ThemeStory from './stories/theme'\n\nconst meta: Meta<typeof IconButton> = {\n  title: 'IconButton',\n  component: IconButton,\n}\n\nexport default meta\n\nexport const Default = () => <DefaultStory />\nexport const Sizes = () => <SizesStory />\nexport const Theme = () => <ThemeStory />\nexport const Disabled = () => <DisabledStory />\n"
  },
  {
    "path": "apps/storybook/src/components/icon-button/stories/default.tsx",
    "content": "import { AlertCircle } from 'lucide-react'\nimport { IconButton } from 'ui'\n\nexport default function Default() {\n  return (\n    <IconButton aria-label=\"alert\">\n      <AlertCircle size=\"1em\" />\n    </IconButton>\n  )\n}\n"
  },
  {
    "path": "apps/storybook/src/components/icon-button/stories/disabled.tsx",
    "content": "import { AlertCircle } from 'lucide-react'\nimport { IconButton } from 'ui'\n\nexport default function Disabled() {\n  return (\n    <div className=\"flex flex-wrap justify-center gap-4\">\n      <IconButton variant=\"solid\" aria-label=\"alert\" isDisabled>\n        <AlertCircle size=\"1em\" />\n      </IconButton>\n      <IconButton variant=\"outline\" aria-label=\"alert\" isDisabled>\n        <AlertCircle size=\"1em\" />\n      </IconButton>\n      <IconButton variant=\"subtle\" aria-label=\"alert\" isDisabled>\n        <AlertCircle size=\"1em\" />\n      </IconButton>\n      <IconButton variant=\"ghost\" aria-label=\"alert\" isDisabled>\n        <AlertCircle size=\"1em\" />\n      </IconButton>\n      <IconButton variant=\"destructive\" aria-label=\"alert\" isDisabled>\n        <AlertCircle size=\"1em\" />\n      </IconButton>\n      <IconButton variant=\"link\" aria-label=\"alert\" isDisabled>\n        <AlertCircle size=\"1em\" />\n      </IconButton>\n    </div>\n  )\n}\n"
  },
  {
    "path": "apps/storybook/src/components/icon-button/stories/sizes.tsx",
    "content": "import { AlertCircle } from 'lucide-react'\nimport { IconButton } from 'ui'\n\nexport default function Sizes() {\n  return (\n    <div className=\"flex flex-wrap justify-center gap-4\">\n      <IconButton aria-label=\"alert\" size=\"xs\">\n        <AlertCircle size=\"1em\" />\n      </IconButton>\n      <IconButton aria-label=\"alert\" size=\"sm\">\n        <AlertCircle size=\"1em\" />\n      </IconButton>\n      <IconButton aria-label=\"alert\" size=\"md\">\n        <AlertCircle size=\"1em\" />\n      </IconButton>\n      <IconButton aria-label=\"alert\" size=\"lg\">\n        <AlertCircle size=\"1em\" />\n      </IconButton>\n    </div>\n  )\n}\n"
  },
  {
    "path": "apps/storybook/src/components/icon-button/stories/theme.tsx",
    "content": "import { AlertCircle } from 'lucide-react'\nimport { IconButton } from 'ui'\n\nexport default function Theme() {\n  return (\n    <div className=\"flex flex-wrap justify-center gap-4\">\n      <IconButton aria-label=\"alert\" variant=\"solid\">\n        <AlertCircle size=\"1em\" />\n      </IconButton>\n      <IconButton aria-label=\"alert\" variant=\"outline\">\n        <AlertCircle size=\"1em\" />\n      </IconButton>\n      <IconButton aria-label=\"alert\" variant=\"subtle\">\n        <AlertCircle size=\"1em\" />\n      </IconButton>\n      <IconButton aria-label=\"alert\" variant=\"ghost\">\n        <AlertCircle size=\"1em\" />\n      </IconButton>\n      <IconButton aria-label=\"alert\" variant=\"destructive\">\n        <AlertCircle size=\"1em\" />\n      </IconButton>\n      <IconButton aria-label=\"alert\" variant=\"link\">\n        <AlertCircle size=\"1em\" />\n      </IconButton>\n    </div>\n  )\n}\n"
  },
  {
    "path": "apps/storybook/src/components/input/input.stories.tsx",
    "content": "import { Input } from 'ui'\n\nimport { type Meta } from '@storybook/react'\n\nimport DefaultStory from './stories/default'\nimport DisabledStory from './stories/disabled'\nimport SizesStory from './stories/sizes'\n\nconst meta: Meta<typeof Input> = {\n  title: 'Input',\n  component: Input,\n}\n\nexport default meta\n\nexport const Default = () => <DefaultStory />\nexport const Sizes = () => <SizesStory />\nexport const Disabled = () => <DisabledStory />\n"
  },
  {
    "path": "apps/storybook/src/components/input/stories/default.tsx",
    "content": "import { Input } from 'ui'\n\nexport default function Default() {\n  return <Input />\n}\n"
  },
  {
    "path": "apps/storybook/src/components/input/stories/disabled.tsx",
    "content": "import { Input } from 'ui'\n\nexport default function Disabled() {\n  return <Input disabled />\n}\n"
  },
  {
    "path": "apps/storybook/src/components/input/stories/sizes.tsx",
    "content": "import { Input } from 'ui'\n\nexport default function Sizes() {\n  return (\n    <div className=\"flex flex-col gap-4\">\n      <Input size=\"xs\" />\n      <Input size=\"sm\" />\n      <Input size=\"md\" />\n      <Input size=\"lg\" />\n    </div>\n  )\n}\n"
  },
  {
    "path": "apps/storybook/src/components/label/label.stories.tsx",
    "content": "import { Label } from 'ui'\n\nimport { type Meta } from '@storybook/react'\n\nimport DefaultStory from './stories/default'\n\nconst meta: Meta<typeof Label> = {\n  title: 'Label',\n  component: Label,\n}\n\nexport default meta\n\nexport const Default = () => <DefaultStory />\n"
  },
  {
    "path": "apps/storybook/src/components/label/stories/default.tsx",
    "content": "import { Label } from 'ui'\n\nexport default function Default() {\n  return <Label>This is a label</Label>\n}\n"
  },
  {
    "path": "apps/storybook/src/components/menu/menu.stories.tsx",
    "content": "import { Menu } from 'ui'\n\nimport { type Meta } from '@storybook/react'\n\nimport AsCheckboxStory from './stories/as-checkbox'\nimport AsRadioStory from './stories/as-radio'\nimport DefaultStory from './stories/default'\nimport DisabledStory from './stories/disabled'\nimport WithSectionsStory from './stories/with-sections'\n\nconst meta: Meta<typeof Menu> = {\n  title: 'Menu',\n  component: Menu,\n}\n\nexport default meta\n\nexport const Default = () => <DefaultStory />\nexport const WithSections = () => <WithSectionsStory />\nexport const AsCheckbox = () => <AsCheckboxStory />\nexport const AsRadio = () => <AsRadioStory />\nexport const Disabled = () => <DisabledStory />\n"
  },
  {
    "path": "apps/storybook/src/components/menu/stories/as-checkbox.tsx",
    "content": "import * as React from 'react'\n\nimport { ChevronDown } from 'lucide-react'\nimport { type Selection } from 'react-aria-components'\nimport { Button, Menu, MenuContent, MenuItem } from 'ui'\n\nexport default function AsCheckbox() {\n  const [selected, setSelected] = React.useState<Selection>(new Set(['bar1']))\n  return (\n    <Menu>\n      <Button className=\"flex items-center gap-2\">\n        <span>Menu</span>\n        <ChevronDown size=\"16\" strokeWidth=\"3\" />\n      </Button>\n      <MenuContent\n        selectionMode=\"multiple\"\n        onSelectionChange={setSelected}\n        selectedKeys={selected}\n      >\n        <MenuItem id=\"foo1\">Foo</MenuItem>\n        <MenuItem id=\"bar1\">Bar</MenuItem>\n        <MenuItem id=\"baz1\">Baz</MenuItem>\n      </MenuContent>\n    </Menu>\n  )\n}\n"
  },
  {
    "path": "apps/storybook/src/components/menu/stories/as-radio.tsx",
    "content": "import * as React from 'react'\n\nimport { ChevronDown } from 'lucide-react'\nimport { type Selection } from 'react-aria-components'\nimport { Button, Menu, MenuContent, MenuItem } from 'ui'\n\nexport default function AsRadio() {\n  const [selected, setSelected] = React.useState<Selection>(new Set(['bar1']))\n  return (\n    <Menu>\n      <Button className=\"flex items-center gap-2\">\n        <span>Menu</span>\n        <ChevronDown size=\"16\" strokeWidth=\"3\" />\n      </Button>\n      <MenuContent\n        selectionMode=\"single\"\n        onSelectionChange={setSelected}\n        selectedKeys={selected}\n      >\n        <MenuItem id=\"foo1\">Foo</MenuItem>\n        <MenuItem id=\"bar1\">Bar</MenuItem>\n        <MenuItem id=\"baz1\">Baz</MenuItem>\n      </MenuContent>\n    </Menu>\n  )\n}\n"
  },
  {
    "path": "apps/storybook/src/components/menu/stories/default.tsx",
    "content": "import { ChevronDown } from 'lucide-react'\nimport { Button, Menu, MenuContent, MenuItem } from 'ui'\n\nexport default function Default() {\n  return (\n    <Menu>\n      <Button className=\"flex items-center gap-2\">\n        <span>Menu</span>\n        <ChevronDown size=\"16\" strokeWidth=\"3\" />\n      </Button>\n      <MenuContent>\n        <MenuItem id=\"foo1\">Foo</MenuItem>\n        <MenuItem id=\"bar1\">Bar</MenuItem>\n        <MenuItem id=\"baz1\">Baz</MenuItem>\n      </MenuContent>\n    </Menu>\n  )\n}\n"
  },
  {
    "path": "apps/storybook/src/components/menu/stories/disabled.tsx",
    "content": "import { ChevronDown } from 'lucide-react'\nimport { Button, Menu, MenuContent, MenuItem } from 'ui'\n\nexport default function Disabled() {\n  return (\n    <Menu>\n      <Button className=\"flex items-center gap-2\">\n        <span>Menu</span>\n        <ChevronDown size=\"16\" strokeWidth=\"3\" />\n      </Button>\n      <MenuContent disabledKeys={['baz1']}>\n        <MenuItem id=\"foo1\">Foo</MenuItem>\n        <MenuItem id=\"bar1\">Bar</MenuItem>\n        <MenuItem id=\"baz1\">Baz</MenuItem>\n      </MenuContent>\n    </Menu>\n  )\n}\n"
  },
  {
    "path": "apps/storybook/src/components/menu/stories/with-sections.tsx",
    "content": "import { ChevronDown } from 'lucide-react'\nimport {\n  Button,\n  Menu,\n  MenuContent,\n  MenuHeader,\n  MenuItem,\n  MenuSection,\n  MenuSeparator,\n} from 'ui'\n\nexport default function WithSections() {\n  return (\n    <Menu>\n      <Button className=\"flex items-center gap-2\">\n        <span>Menu</span>\n        <ChevronDown size=\"16\" strokeWidth=\"3\" />\n      </Button>\n      <MenuContent>\n        <MenuSection>\n          <MenuHeader>Styles</MenuHeader>\n          <MenuItem id=\"foo1\">Foo</MenuItem>\n          <MenuItem id=\"bar1\">Bar</MenuItem>\n          <MenuItem id=\"baz1\">Baz</MenuItem>\n        </MenuSection>\n        <MenuSeparator />\n        <MenuSection>\n          <MenuHeader>Align</MenuHeader>\n          <MenuItem id=\"foo2\">Foo</MenuItem>\n          <MenuItem id=\"bar2\">Bar</MenuItem>\n          <MenuItem id=\"baz2\">Baz</MenuItem>\n        </MenuSection>\n      </MenuContent>\n    </Menu>\n  )\n}\n"
  },
  {
    "path": "apps/storybook/src/components/meter/meter.stories.tsx",
    "content": "import { Meter } from 'ui'\n\nimport { type Meta } from '@storybook/react'\n\nimport DefaultStory from './stories/default'\n\nconst meta: Meta<typeof Meter> = {\n  title: 'Meter',\n  component: Meter,\n}\n\nexport default meta\n\nexport const Default = () => <DefaultStory />\n"
  },
  {
    "path": "apps/storybook/src/components/meter/stories/default.tsx",
    "content": "import { Label, Meter, MeterFilledTrack, MeterTrack } from 'ui'\n\nexport default function Default() {\n  return (\n    <Meter value={75} minValue={0} maxValue={100}>\n      {({ percentage }) => (\n        <>\n          <Label>Meter Label</Label>\n          <MeterTrack>\n            <MeterFilledTrack percentage={percentage} />\n          </MeterTrack>\n        </>\n      )}\n    </Meter>\n  )\n}\n"
  },
  {
    "path": "apps/storybook/src/components/modal/modal.stories.tsx",
    "content": "import { ModalContent } from 'ui'\n\nimport { type Meta } from '@storybook/react'\n\nimport DefaultStory from './stories/default'\nimport DismissableFalseStory from './stories/dismissable-false'\nimport SizesStory from './stories/sizes'\n\nconst meta: Meta<typeof ModalContent> = {\n  title: 'Modal',\n  component: ModalContent,\n}\n\nexport default meta\n\nexport const Default = () => <DefaultStory />\nexport const Sizes = () => <SizesStory />\nexport const DismissableFalse = () => <DismissableFalseStory />\n"
  },
  {
    "path": "apps/storybook/src/components/modal/stories/default.tsx",
    "content": "import * as React from 'react'\n\nimport { X } from 'lucide-react'\nimport {\n  Button,\n  IconButton,\n  ModalBody,\n  ModalContent,\n  ModalFooter,\n  ModalHeader,\n  ModalOverlay,\n} from 'ui'\n\nexport default function Default() {\n  const [isOpen, setIsOpen] = React.useState(false)\n  return (\n    <>\n      <Button onPress={() => setIsOpen(true)}>Open Modal</Button>\n      <ModalOverlay isOpen={isOpen} onOpenChange={setIsOpen}>\n        <ModalContent>\n          <ModalHeader>Modal Title</ModalHeader>\n          <IconButton\n            className=\"absolute right-2 top-2\"\n            size=\"sm\"\n            variant=\"ghost\"\n            aria-label=\"close\"\n            onPress={() => setIsOpen(false)}\n          >\n            <X size=\"1em\" />\n          </IconButton>\n          <ModalBody>\n            <p className=\"text-black dark:text-white\">\n              Sit nulla est ex deserunt exercitation anim occaecat. Nostrud\n              ullamco deserunt aute id consequat veniam incididunt duis in sint\n              irure nisi. Mollit officia cillum Lorem ullamco minim nostrud elit\n              officia tempor esse quis.\n            </p>\n          </ModalBody>\n          <ModalFooter className=\"flex\">\n            <Button className=\"ml-auto\" onPress={() => setIsOpen(false)}>\n              Close\n            </Button>\n            <Button\n              className=\"ml-2\"\n              variant=\"outline\"\n              onPress={() => setIsOpen(false)}\n            >\n              Confirm\n            </Button>\n          </ModalFooter>\n        </ModalContent>\n      </ModalOverlay>\n    </>\n  )\n}\n"
  },
  {
    "path": "apps/storybook/src/components/modal/stories/dismissable-false.tsx",
    "content": "import * as React from 'react'\n\nimport { X } from 'lucide-react'\nimport {\n  Button,\n  IconButton,\n  ModalBody,\n  ModalContent,\n  ModalFooter,\n  ModalHeader,\n  ModalOverlay,\n} from 'ui'\n\nexport default function DismissableFalse() {\n  const [isOpen, setIsOpen] = React.useState(false)\n  return (\n    <>\n      <Button onPress={() => setIsOpen(true)}>Open Modal</Button>\n      <ModalOverlay\n        isOpen={isOpen}\n        onOpenChange={setIsOpen}\n        isDismissable={false}\n        isKeyboardDismissDisabled={true}\n      >\n        <ModalContent>\n          <ModalHeader>Modal Title</ModalHeader>\n          <IconButton\n            className=\"absolute right-2 top-2\"\n            size=\"sm\"\n            variant=\"ghost\"\n            aria-label=\"close\"\n            onPress={() => setIsOpen(false)}\n          >\n            <X size=\"1em\" />\n          </IconButton>\n          <ModalBody>\n            <p className=\"text-black dark:text-white\">\n              Sit nulla est ex deserunt exercitation anim occaecat. Nostrud\n              ullamco deserunt aute id consequat veniam incididunt duis in sint\n              irure nisi. Mollit officia cillum Lorem ullamco minim nostrud elit\n              officia tempor esse quis.\n            </p>\n          </ModalBody>\n          <ModalFooter className=\"flex\">\n            <Button className=\"ml-auto\" onPress={() => setIsOpen(false)}>\n              Close\n            </Button>\n            <Button\n              className=\"ml-2\"\n              variant=\"outline\"\n              onPress={() => setIsOpen(false)}\n            >\n              Confirm\n            </Button>\n          </ModalFooter>\n        </ModalContent>\n      </ModalOverlay>\n    </>\n  )\n}\n"
  },
  {
    "path": "apps/storybook/src/components/modal/stories/set-autofocus.tsx",
    "content": "import * as React from 'react'\n\nimport { X } from 'lucide-react'\nimport {\n  Button,\n  IconButton,\n  Input,\n  Label,\n  ModalBody,\n  ModalContent,\n  ModalFooter,\n  ModalHeader,\n  ModalOverlay,\n  TextField,\n} from 'ui'\n\nexport default function SetAutofocus() {\n  const [isOpen, setIsOpen] = React.useState(false)\n  return (\n    <>\n      <Button onPress={() => setIsOpen(true)}>Open Modal</Button>\n      <ModalOverlay isOpen={isOpen} onOpenChange={setIsOpen}>\n        <ModalContent>\n          <ModalHeader>Modal Title</ModalHeader>\n          <IconButton\n            className=\"absolute right-2 top-2\"\n            size=\"sm\"\n            variant=\"ghost\"\n            aria-label=\"close\"\n            onPress={() => setIsOpen(false)}\n          >\n            <X size=\"1em\" />\n          </IconButton>\n          <ModalBody className=\"flex flex-col gap-4\">\n            <TextField autoFocus>\n              <Label>First Name</Label>\n              <Input />\n            </TextField>\n            <TextField>\n              <Label>Last Name</Label>\n              <Input />\n            </TextField>\n          </ModalBody>\n          <ModalFooter className=\"flex\">\n            <Button className=\"ml-auto\" onPress={() => setIsOpen(false)}>\n              Close\n            </Button>\n            <Button\n              className=\"ml-2\"\n              variant=\"outline\"\n              onPress={() => setIsOpen(false)}\n            >\n              Confirm\n            </Button>\n          </ModalFooter>\n        </ModalContent>\n      </ModalOverlay>\n    </>\n  )\n}\n"
  },
  {
    "path": "apps/storybook/src/components/modal/stories/sizes.tsx",
    "content": "import * as React from 'react'\n\nimport { X } from 'lucide-react'\nimport {\n  Button,\n  IconButton,\n  ModalBody,\n  ModalContent,\n  ModalFooter,\n  ModalHeader,\n  ModalOverlay,\n  type ModalContentProps,\n} from 'ui'\n\ntype Size = Pick<ModalContentProps, 'size'>['size']\nexport default function Default() {\n  const [isOpen, setIsOpen] = React.useState(false)\n  const [modalSize, setModalSize] = React.useState<Size>('md')\n\n  const sizes: Size[] = ['xs', 'sm', 'md', 'lg', 'xl', 'full']\n  const handlePress = (size: Size, open: boolean) => {\n    setModalSize(size)\n    setIsOpen(open)\n  }\n  return (\n    <>\n      <div className=\"grid grid-cols-3 gap-4\">\n        {sizes.map((size, idx) => (\n          <Button onPress={() => handlePress(size, true)} key={idx}>\n            Open {size}\n          </Button>\n        ))}\n      </div>\n\n      <ModalOverlay isOpen={isOpen} onOpenChange={setIsOpen}>\n        <ModalContent size={modalSize}>\n          <ModalHeader>Modal Title</ModalHeader>\n          <IconButton\n            className=\"absolute right-2 top-2\"\n            size=\"sm\"\n            variant=\"ghost\"\n            aria-label=\"close\"\n            onPress={() => setIsOpen(false)}\n          >\n            <X size=\"1em\" />\n          </IconButton>\n          <ModalBody>\n            <p className=\"text-black dark:text-white\">\n              Sit nulla est ex deserunt exercitation anim occaecat. Nostrud\n              ullamco deserunt aute id consequat veniam incididunt duis in sint\n              irure nisi. Mollit officia cillum Lorem ullamco minim nostrud elit\n              officia tempor esse quis.\n            </p>\n          </ModalBody>\n          <ModalFooter className=\"flex\">\n            <Button className=\"ml-auto\" onPress={() => setIsOpen(false)}>\n              Close\n            </Button>\n            <Button\n              className=\"ml-2\"\n              variant=\"outline\"\n              onPress={() => setIsOpen(false)}\n            >\n              Confirm\n            </Button>\n          </ModalFooter>\n        </ModalContent>\n      </ModalOverlay>\n    </>\n  )\n}\n"
  },
  {
    "path": "apps/storybook/src/components/number-field/number-field.stories.tsx",
    "content": "import { NumberField } from 'ui'\n\nimport { type Meta } from '@storybook/react'\n\nimport DefaultStory from './stories/default'\nimport DisabledStory from './stories/disabled'\nimport MobileStepperStory from './stories/with-mobile-stepper'\nimport StepperStory from './stories/with-stepper'\n\nconst meta: Meta<typeof NumberField> = {\n  title: 'NumberField',\n  component: NumberField,\n}\n\nexport default meta\n\nexport const Default = () => <DefaultStory />\nexport const Stepper = () => <StepperStory />\nexport const MobileStepper = () => <MobileStepperStory />\nexport const Disabled = () => <DisabledStory />\n"
  },
  {
    "path": "apps/storybook/src/components/number-field/stories/default.tsx",
    "content": "import { Input, Label, NumberField } from 'ui'\n\nexport default function Default() {\n  return (\n    <NumberField defaultValue={50}>\n      <Label>Width</Label>\n      <Input />\n    </NumberField>\n  )\n}\n"
  },
  {
    "path": "apps/storybook/src/components/number-field/stories/disabled.tsx",
    "content": "import * as React from 'react'\n\nimport { ChevronDown, ChevronUp } from 'lucide-react'\nimport {\n  Label,\n  NumberDecrementStepper,\n  NumberField,\n  NumberIncrementStepper,\n  NumberInput,\n  NumberInputGroup,\n  NumberInputStepper,\n} from 'ui'\n\nexport default function Default() {\n  return (\n    <NumberField defaultValue={50} isDisabled>\n      <Label>Width</Label>\n      <NumberInputGroup className=\"relative\">\n        <NumberInput />\n        <NumberInputStepper>\n          <NumberIncrementStepper>\n            <ChevronUp size=\"1em\" strokeWidth=\"3\" />\n          </NumberIncrementStepper>\n          <NumberDecrementStepper>\n            <ChevronDown size=\"1em\" strokeWidth=\"3\" />\n          </NumberDecrementStepper>\n        </NumberInputStepper>\n      </NumberInputGroup>\n    </NumberField>\n  )\n}\n"
  },
  {
    "path": "apps/storybook/src/components/number-field/stories/with-mobile-stepper.tsx",
    "content": "import { ChevronDown, ChevronUp } from 'lucide-react'\nimport { IconButton, Input, Label, NumberField, NumberInputGroup } from 'ui'\n\nexport default function Mobile() {\n  return (\n    <NumberField defaultValue={50}>\n      <Label>Width</Label>\n      <NumberInputGroup className=\"flex gap-1\">\n        <IconButton className=\"shrink-0\" slot=\"decrement\" aria-label=\"Decrease\">\n          <ChevronDown size=\"16\" strokeWidth=\"3\" />\n        </IconButton>\n        <Input />\n        <IconButton className=\"shrink-0\" slot=\"increment\" aria-label=\"Increase\">\n          <ChevronUp size=\"16\" strokeWidth=\"3\" />\n        </IconButton>\n      </NumberInputGroup>\n    </NumberField>\n  )\n}\n"
  },
  {
    "path": "apps/storybook/src/components/number-field/stories/with-stepper.tsx",
    "content": "import * as React from 'react'\n\nimport { ChevronDown, ChevronUp } from 'lucide-react'\nimport {\n  Label,\n  NumberDecrementStepper,\n  NumberField,\n  NumberIncrementStepper,\n  NumberInput,\n  NumberInputGroup,\n  NumberInputStepper,\n} from 'ui'\n\nexport default function Default() {\n  return (\n    <NumberField defaultValue={50}>\n      <Label>Width</Label>\n      <NumberInputGroup className=\"relative\">\n        <NumberInput />\n        <NumberInputStepper>\n          <NumberIncrementStepper>\n            <ChevronUp size=\"1em\" strokeWidth=\"3\" />\n          </NumberIncrementStepper>\n          <NumberDecrementStepper>\n            <ChevronDown size=\"1em\" strokeWidth=\"3\" />\n          </NumberDecrementStepper>\n        </NumberInputStepper>\n      </NumberInputGroup>\n    </NumberField>\n  )\n}\n"
  },
  {
    "path": "apps/storybook/src/components/progress-bar/progress-bar.stories.tsx",
    "content": "import { ProgressBar } from 'ui'\n\nimport { type Meta } from '@storybook/react'\n\nimport DefaultStory from './stories/default'\n\nconst meta: Meta<typeof ProgressBar> = {\n  title: 'ProgressBar',\n  component: ProgressBar,\n}\n\nexport default meta\n\nexport const Default = () => <DefaultStory />\n"
  },
  {
    "path": "apps/storybook/src/components/progress-bar/stories/default.tsx",
    "content": "import {\n  Label,\n  ProgressBar,\n  ProgressBarFilledTrack,\n  ProgressBarTrack,\n} from 'ui'\n\nexport default function Default() {\n  return (\n    <ProgressBar value={75} minValue={0} maxValue={100}>\n      {({ percentage }) => (\n        <>\n          <Label>Progress</Label>\n          <ProgressBarTrack>\n            <ProgressBarFilledTrack percentage={percentage} />\n          </ProgressBarTrack>\n        </>\n      )}\n    </ProgressBar>\n  )\n}\n"
  },
  {
    "path": "apps/storybook/src/components/radio/radio.stories.tsx",
    "content": "import { Radio } from 'ui'\n\nimport { type Meta } from '@storybook/react'\n\nimport DefaultStory from './stories/default'\nimport DisabledStory from './stories/disabled'\nimport SizesStory from './stories/sizes'\n\nconst meta: Meta<typeof Radio> = {\n  title: 'Radio',\n  component: Radio,\n}\n\nexport default meta\n\nexport const Default = () => <DefaultStory />\nexport const Sizes = () => <SizesStory />\nexport const Disabled = () => <DisabledStory />\n"
  },
  {
    "path": "apps/storybook/src/components/radio/stories/default.tsx",
    "content": "import { Radio, RadioGroup } from 'ui'\n\nexport default function Default() {\n  return (\n    <RadioGroup>\n      <Radio value=\"cat\">Cat</Radio>\n      <Radio value=\"dog\">Dog</Radio>\n    </RadioGroup>\n  )\n}\n"
  },
  {
    "path": "apps/storybook/src/components/radio/stories/disabled.tsx",
    "content": "import { Radio, RadioGroup } from 'ui'\n\nexport default function Default() {\n  return (\n    <RadioGroup defaultValue=\"dog\">\n      <Radio value=\"cat\">Cat</Radio>\n      <Radio value=\"dog\" isDisabled>\n        Dog\n      </Radio>\n    </RadioGroup>\n  )\n}\n"
  },
  {
    "path": "apps/storybook/src/components/radio/stories/sizes.tsx",
    "content": "import { Radio, RadioGroup } from 'ui'\n\nexport default function Sizes() {\n  return (\n    <div className=\"space-y-4\">\n      <RadioGroup>\n        <Radio size=\"sm\" value=\"sm-cat\">\n          Small Cat\n        </Radio>\n        <Radio size=\"sm\" value=\"sm-dog\">\n          Small Dog\n        </Radio>\n      </RadioGroup>\n      <RadioGroup>\n        <Radio size=\"md\" value=\"md-cat\">\n          Medium Cat\n        </Radio>\n        <Radio size=\"md\" value=\"md-dog\">\n          Medium Dog\n        </Radio>\n      </RadioGroup>\n      <RadioGroup>\n        <Radio size=\"lg\" value=\"lg-cat\">\n          Large Cat\n        </Radio>\n        <Radio size=\"lg\" value=\"lg-dog\">\n          Large Dog\n        </Radio>\n      </RadioGroup>\n    </div>\n  )\n}\n"
  },
  {
    "path": "apps/storybook/src/components/radio-group/radio-group.stories.tsx",
    "content": "import { RadioGroup } from 'ui'\n\nimport { type Meta } from '@storybook/react'\n\nimport DefaultStory from './stories/default'\nimport HorizontalStory from './stories/horizontal'\n\nconst meta: Meta<typeof RadioGroup> = {\n  title: 'RadioGroup',\n  component: RadioGroup,\n}\n\nexport default meta\n\nexport const Default = () => <DefaultStory />\nexport const Horizontal = () => <HorizontalStory />\n"
  },
  {
    "path": "apps/storybook/src/components/radio-group/stories/default.tsx",
    "content": "import { Label, Radio, RadioGroup, RadioGroupContent } from 'ui'\n\nexport default function Default() {\n  return (\n    <RadioGroup>\n      <Label>Favorite animal</Label>\n      <RadioGroupContent>\n        <Radio value=\"dog\">Dog</Radio>\n        <Radio value=\"cat\">Cat</Radio>\n        <Radio value=\"dragon\">Dragon</Radio>\n      </RadioGroupContent>\n    </RadioGroup>\n  )\n}\n"
  },
  {
    "path": "apps/storybook/src/components/radio-group/stories/disabled.tsx",
    "content": "import { Label, Radio, RadioGroup, RadioGroupContent } from 'ui'\n\nexport default function Disabled() {\n  return (\n    <RadioGroup isDisabled defaultValue=\"dragon\">\n      <Label>Favorite animal</Label>\n      <RadioGroupContent>\n        <Radio value=\"dog\">Dog</Radio>\n        <Radio value=\"cat\">Cat</Radio>\n        <Radio value=\"dragon\">Dragon</Radio>\n      </RadioGroupContent>\n    </RadioGroup>\n  )\n}\n"
  },
  {
    "path": "apps/storybook/src/components/radio-group/stories/horizontal.tsx",
    "content": "import { Label, Radio, RadioGroup, RadioGroupContent } from 'ui'\n\nexport default function Horizontal() {\n  return (\n    <RadioGroup orientation=\"horizontal\">\n      <Label>Favorite animal</Label>\n      <RadioGroupContent>\n        <Radio value=\"dog\">Dog</Radio>\n        <Radio value=\"cat\">Cat</Radio>\n        <Radio value=\"dragon\">Dragon</Radio>\n      </RadioGroupContent>\n    </RadioGroup>\n  )\n}\n"
  },
  {
    "path": "apps/storybook/src/components/range-calendar/range-calendar.stories.tsx",
    "content": "import { RangeCalendar } from 'ui'\n\nimport { type Meta } from '@storybook/react'\n\nimport DefaultStory from './stories/default'\n\nconst meta: Meta<typeof RangeCalendar> = {\n  title: 'RangeCalendar',\n  component: RangeCalendar,\n}\n\nexport default meta\n\nexport const Default = () => <DefaultStory />\n"
  },
  {
    "path": "apps/storybook/src/components/range-calendar/stories/default.tsx",
    "content": "import * as React from 'react'\n\nimport {\n  CalendarCell,\n  CalendarGrid,\n  CalendarGridBody,\n  CalendarGridHeader,\n  CalendarHeader,\n  CalendarHeaderCell,\n  CalendarHeading,\n  CalendarNextButton,\n  CalendarPrevButton,\n  RangeCalendar,\n} from 'ui'\n\nexport default function Default() {\n  return (\n    <RangeCalendar aria-label=\"Example range calendar\">\n      <CalendarHeader>\n        <CalendarPrevButton />\n        <CalendarHeading />\n        <CalendarNextButton />\n      </CalendarHeader>\n      <CalendarGrid>\n        <CalendarGridHeader>\n          {(day) => <CalendarHeaderCell>{day}</CalendarHeaderCell>}\n        </CalendarGridHeader>\n        <CalendarGridBody>\n          {(date) => <CalendarCell date={date} />}\n        </CalendarGridBody>\n      </CalendarGrid>\n    </RangeCalendar>\n  )\n}\n"
  },
  {
    "path": "apps/storybook/src/components/search-field/search-field.stories.tsx",
    "content": "import { SearchField } from 'ui'\n\nimport { type Meta } from '@storybook/react'\n\nimport DefaultStory from './stories/default'\nimport WithClearButtonStory from './stories/with-clear-button'\n\nconst meta: Meta<typeof SearchField> = {\n  title: 'SearchField',\n  component: SearchField,\n}\n\nexport default meta\n\nexport const Default = () => <DefaultStory />\nexport const WithClearButton = () => <WithClearButtonStory />\n"
  },
  {
    "path": "apps/storybook/src/components/search-field/stories/default.tsx",
    "content": "import { Search } from 'lucide-react'\nimport { Label, SearchField, SearchFieldInput } from 'ui'\n\nexport default function Default() {\n  return (\n    <SearchField>\n      <Label>Search</Label>\n      <div className=\"relative\">\n        <div\n          aria-hidden=\"true\"\n          className=\"pointer-events-none absolute flex h-full w-10 items-center justify-center text-slate-500 dark:text-slate-400\"\n        >\n          <Search size=\"18\" />\n        </div>\n        <SearchFieldInput className=\"px-10\" />\n      </div>\n    </SearchField>\n  )\n}\n"
  },
  {
    "path": "apps/storybook/src/components/search-field/stories/with-clear-button.tsx",
    "content": "import { Search } from 'lucide-react'\nimport {\n  Label,\n  SearchField,\n  SearchFieldClearButton,\n  SearchFieldInput,\n} from 'ui'\n\nexport default function WithClearButton() {\n  return (\n    <SearchField>\n      <Label>Search</Label>\n      <div className=\"relative\">\n        <div\n          aria-hidden=\"true\"\n          className=\"pointer-events-none absolute flex h-full w-10 items-center justify-center text-slate-500 dark:text-slate-400\"\n        >\n          <Search size=\"18\" />\n        </div>\n        <SearchFieldInput className=\"px-10\" />\n        <div className=\"absolute inset-y-0 right-0 flex items-center p-1\">\n          <SearchFieldClearButton\n            variant=\"subtle\"\n            size=\"sm\"\n            aria-label=\"Clear search\"\n          />\n        </div>\n      </div>\n    </SearchField>\n  )\n}\n"
  },
  {
    "path": "apps/storybook/src/components/select/select.stories.tsx",
    "content": "import { Select } from 'ui'\n\nimport { type Meta } from '@storybook/react'\n\nimport DefaultStory from './stories/default'\nimport DisabledStory from './stories/disabled'\n\nconst meta: Meta<typeof Select> = {\n  title: 'Select',\n  component: Select,\n}\n\nexport default meta\n\nexport const Default = () => <DefaultStory />\nexport const Disabled = () => <DisabledStory />\n"
  },
  {
    "path": "apps/storybook/src/components/select/stories/default.tsx",
    "content": "import * as React from 'react'\n\nimport { ChevronDown } from 'lucide-react'\nimport {\n  Label,\n  Select,\n  SelectButton,\n  SelectContent,\n  SelectItem,\n  SelectValue,\n} from 'ui'\n\nexport default function Default() {\n  return (\n    <>\n      <Select>\n        <Label>Favorite Animal</Label>\n        <SelectButton variant=\"outline\">\n          <SelectValue>\n            {({ selectedText }) => (\n              <span>{selectedText || 'Select an item'}</span>\n            )}\n          </SelectValue>\n          <ChevronDown size=\"16\" strokeWidth=\"3\" />\n        </SelectButton>\n        <SelectContent>\n          <SelectItem textValue=\"Aardvark\">Aardvark</SelectItem>\n          <SelectItem textValue=\"Cat\">Cat</SelectItem>\n          <SelectItem textValue=\"Dog\">Dog</SelectItem>\n          <SelectItem textValue=\"Kangaroo\">Kangaroo</SelectItem>\n          <SelectItem textValue=\"Panda\">Panda</SelectItem>\n          <SelectItem textValue=\"Snake\">Snake</SelectItem>\n        </SelectContent>\n      </Select>\n    </>\n  )\n}\n"
  },
  {
    "path": "apps/storybook/src/components/select/stories/disabled.tsx",
    "content": "import * as React from 'react'\n\nimport { ChevronDown } from 'lucide-react'\nimport {\n  Label,\n  Select,\n  SelectButton,\n  SelectContent,\n  SelectItem,\n  SelectValue,\n} from 'ui'\n\nexport default function Disabled() {\n  return (\n    <>\n      <Select isDisabled>\n        <Label>Favorite Animal</Label>\n        <SelectButton variant=\"outline\">\n          <SelectValue>\n            {({ selectedText }) => (\n              <span>{selectedText || 'Select an item'}</span>\n            )}\n          </SelectValue>\n          <ChevronDown size=\"16\" strokeWidth=\"3\" />\n        </SelectButton>\n        <SelectContent>\n          <SelectItem textValue=\"Aardvark\">Aardvark</SelectItem>\n          <SelectItem textValue=\"Cat\">Cat</SelectItem>\n          <SelectItem textValue=\"Dog\">Dog</SelectItem>\n          <SelectItem textValue=\"Kangaroo\">Kangaroo</SelectItem>\n          <SelectItem textValue=\"Panda\">Panda</SelectItem>\n          <SelectItem textValue=\"Snake\">Snake</SelectItem>\n        </SelectContent>\n      </Select>\n    </>\n  )\n}\n"
  },
  {
    "path": "apps/storybook/src/components/slider/slider.stories.tsx",
    "content": "import { Slider } from 'ui'\n\nimport { type Meta } from '@storybook/react'\n\nimport DefaultStory from './stories/default'\nimport VerticalStory from './stories/vertical'\n\nconst meta: Meta<typeof Slider> = {\n  title: 'Slider',\n  component: Slider,\n}\n\nexport default meta\n\nexport const Default = () => <DefaultStory />\nexport const Vertical = () => <VerticalStory />\n"
  },
  {
    "path": "apps/storybook/src/components/slider/stories/default.tsx",
    "content": "import { Label, Slider, SliderFilledTrack, SliderThumb, SliderTrack } from 'ui'\n\nexport default function Default() {\n  return (\n    <Slider defaultValue={30}>\n      <Label>Opacity</Label>\n      <SliderTrack>\n        {({ state }) => (\n          <>\n            <SliderFilledTrack\n              percentage={state.getThumbPercent(0) * 100}\n              orientation={state.orientation}\n            />\n            <SliderThumb />\n          </>\n        )}\n      </SliderTrack>\n    </Slider>\n  )\n}\n"
  },
  {
    "path": "apps/storybook/src/components/slider/stories/vertical.tsx",
    "content": "import { Label, Slider, SliderFilledTrack, SliderThumb, SliderTrack } from 'ui'\n\nexport default function Vertical() {\n  return (\n    <Slider orientation=\"vertical\" defaultValue={30}>\n      <Label>Vertical Slider</Label>\n      <SliderTrack className=\"h-72\">\n        {({ state }) => (\n          <>\n            <SliderFilledTrack\n              percentage={state.getThumbPercent(0) * 100}\n              orientation={state.orientation}\n            />\n            <SliderThumb />\n          </>\n        )}\n      </SliderTrack>\n    </Slider>\n  )\n}\n"
  },
  {
    "path": "apps/storybook/src/components/switch/stories/alignment.tsx",
    "content": "import { Switch, SwitchIndicator } from 'ui'\n\nexport default function Alignment() {\n  return (\n    <div className=\"flex flex-col gap-4\">\n      <Switch>\n        <SwitchIndicator />\n        I&apos;m on the right\n      </Switch>\n      <Switch>\n        I&apos;m on the left\n        <SwitchIndicator />\n      </Switch>\n    </div>\n  )\n}\n"
  },
  {
    "path": "apps/storybook/src/components/switch/stories/default.tsx",
    "content": "import { Switch, SwitchIndicator } from 'ui'\n\nexport default function Default() {\n  return (\n    <Switch>\n      <SwitchIndicator />\n      Low power mode\n    </Switch>\n  )\n}\n"
  },
  {
    "path": "apps/storybook/src/components/switch/stories/disabled.tsx",
    "content": "import { Switch, SwitchIndicator } from 'ui'\n\nexport default function Default() {\n  return (\n    <Switch isDisabled>\n      <SwitchIndicator />\n      Low power mode\n    </Switch>\n  )\n}\n"
  },
  {
    "path": "apps/storybook/src/components/switch/stories/sizes.tsx",
    "content": "import { Switch, SwitchIndicator } from 'ui'\n\nexport default function Default() {\n  return (\n    <div className=\"flex flex-col gap-4\">\n      <Switch>\n        <SwitchIndicator size=\"sm\" />\n      </Switch>\n      <Switch>\n        <SwitchIndicator size=\"md\" />\n      </Switch>\n      <Switch>\n        <SwitchIndicator size=\"lg\" />\n      </Switch>\n    </div>\n  )\n}\n"
  },
  {
    "path": "apps/storybook/src/components/switch/switch.stories.tsx",
    "content": "import { Switch } from 'ui'\n\nimport { type Meta } from '@storybook/react'\n\nimport AlignmentStory from './stories/alignment'\nimport DefaultStory from './stories/default'\nimport DisabledStory from './stories/disabled'\nimport SizesStory from './stories/sizes'\n\nconst meta: Meta<typeof Switch> = {\n  title: 'Switch',\n  component: Switch,\n}\n\nexport default meta\n\nexport const Default = () => <DefaultStory />\nexport const Alignment = () => <AlignmentStory />\nexport const Sizes = () => <SizesStory />\nexport const Disabled = () => <DisabledStory />\n"
  },
  {
    "path": "apps/storybook/src/components/tabs/stories/default.tsx",
    "content": "import { Tab, TabList, TabPanel, Tabs } from 'ui'\n\nexport default function Default() {\n  return (\n    <Tabs>\n      <TabList aria-label=\"History of Ancient Rome\">\n        <Tab id=\"FoR\">Founding of Rome</Tab>\n        <Tab id=\"MaR\">Monarchy and Republic</Tab>\n        <Tab id=\"Emp\">Empire</Tab>\n      </TabList>\n      <TabPanel id=\"FoR\">\n        Arma virumque cano, Troiae qui primus ab oris.\n      </TabPanel>\n      <TabPanel id=\"MaR\">Senatus Populusque Romanus.</TabPanel>\n      <TabPanel id=\"Emp\">Alea jacta est.</TabPanel>\n    </Tabs>\n  )\n}\n"
  },
  {
    "path": "apps/storybook/src/components/tabs/stories/disabled-keys.tsx",
    "content": "import { Tab, TabList, TabPanel, Tabs } from 'ui'\n\nexport default function DisabledKeys() {\n  return (\n    <Tabs disabledKeys={['MaR']}>\n      <TabList aria-label=\"History of Ancient Rome\">\n        <Tab id=\"FoR\">Founding of Rome</Tab>\n        <Tab id=\"MaR\">Monarchy and Republic</Tab>\n        <Tab id=\"Emp\">Empire</Tab>\n      </TabList>\n      <TabPanel id=\"FoR\">\n        Arma virumque cano, Troiae qui primus ab oris.\n      </TabPanel>\n      <TabPanel id=\"MaR\">Senatus Populusque Romanus.</TabPanel>\n      <TabPanel id=\"Emp\">Alea jacta est.</TabPanel>\n    </Tabs>\n  )\n}\n"
  },
  {
    "path": "apps/storybook/src/components/tabs/stories/disabled.tsx",
    "content": "import { Tab, TabList, TabPanel, Tabs } from 'ui'\n\nexport default function Disabled() {\n  return (\n    <Tabs isDisabled>\n      <TabList aria-label=\"History of Ancient Rome\">\n        <Tab id=\"FoR\">Founding of Rome</Tab>\n        <Tab id=\"MaR\">Monarchy and Republic</Tab>\n        <Tab id=\"Emp\">Empire</Tab>\n      </TabList>\n      <TabPanel id=\"FoR\">\n        Arma virumque cano, Troiae qui primus ab oris.\n      </TabPanel>\n      <TabPanel id=\"MaR\">Senatus Populusque Romanus.</TabPanel>\n      <TabPanel id=\"Emp\">Alea jacta est.</TabPanel>\n    </Tabs>\n  )\n}\n"
  },
  {
    "path": "apps/storybook/src/components/tabs/stories/vertical.tsx",
    "content": "import { Tab, TabList, TabPanel, Tabs } from 'ui'\n\nexport default function Vertical() {\n  return (\n    <Tabs orientation=\"vertical\" className=\"w-full\">\n      <TabList aria-label=\"History of Ancient Rome\">\n        <Tab id=\"FoR\">Founding of Rome</Tab>\n        <Tab id=\"MaR\">Monarchy and</Tab>\n        <Tab id=\"Emp\">Empire</Tab>\n      </TabList>\n      <TabPanel id=\"FoR\">\n        Arma virumque cano, Troiae qui primus ab oris.\n      </TabPanel>\n      <TabPanel id=\"MaR\">Senatus Populusque Romanus.</TabPanel>\n      <TabPanel id=\"Emp\">Alea jacta est.</TabPanel>\n    </Tabs>\n  )\n}\n"
  },
  {
    "path": "apps/storybook/src/components/tabs/tabs.stories.tsx",
    "content": "import { Tabs } from 'ui'\n\nimport { type Meta } from '@storybook/react'\n\nimport DefaultStory from './stories/default'\nimport DisabledStory from './stories/disabled'\nimport DisabledKeysStory from './stories/disabled-keys'\nimport VerticalStory from './stories/vertical'\n\nconst meta: Meta<typeof Tabs> = {\n  title: 'Tabs',\n  component: Tabs,\n}\n\nexport default meta\n\nexport const Default = () => <DefaultStory />\nexport const Vertical = () => <VerticalStory />\nexport const Disabled = () => <DisabledStory />\nexport const DisabledKeys = () => <DisabledKeysStory />\n"
  },
  {
    "path": "apps/storybook/src/components/text-field/stories/default.tsx",
    "content": "import { Input, Label, TextField } from 'ui'\n\nexport default function Default() {\n  return (\n    <TextField>\n      <Label>Label</Label>\n      <Input />\n    </TextField>\n  )\n}\n"
  },
  {
    "path": "apps/storybook/src/components/text-field/stories/disabled.tsx",
    "content": "import { Input, Label, TextField } from 'ui'\n\nexport default function Default() {\n  return (\n    <TextField isDisabled>\n      <Label>Label</Label>\n      <Input />\n    </TextField>\n  )\n}\n"
  },
  {
    "path": "apps/storybook/src/components/text-field/stories/with-error.tsx",
    "content": "import { Input, Label, TextField, TextFieldErrorMessage } from 'ui'\n\nexport default function withError() {\n  return (\n    <TextField isInvalid>\n      <Label>Label</Label>\n      <Input size=\"md\" />\n      <TextFieldErrorMessage>This is an error message</TextFieldErrorMessage>\n    </TextField>\n  )\n}\n"
  },
  {
    "path": "apps/storybook/src/components/text-field/text-field.stories.tsx",
    "content": "import { TextField } from 'ui'\n\nimport { type Meta } from '@storybook/react'\n\nimport DefaultStory from './stories/default'\nimport DisabledStory from './stories/disabled'\nimport WithErrorStory from './stories/with-error'\n\nconst meta: Meta<typeof TextField> = {\n  title: 'TextField',\n  component: TextField,\n}\n\nexport default meta\n\nexport const Default = () => <DefaultStory />\nexport const Disabled = () => <DisabledStory />\nexport const WithError = () => <WithErrorStory />\n"
  },
  {
    "path": "apps/storybook/src/components/tooltip/stories/default.tsx",
    "content": "import { Button, Tooltip, TooltipContent } from 'ui'\n\nexport default function Default() {\n  return (\n    <Tooltip>\n      <Button size=\"sm\" variant=\"outline\">\n        Hover Me\n      </Button>\n      <TooltipContent>Hello!</TooltipContent>\n    </Tooltip>\n  )\n}\n"
  },
  {
    "path": "apps/storybook/src/components/tooltip/stories/placement.tsx",
    "content": "import { type TooltipProps } from 'react-aria-components'\nimport { Button, Tooltip, TooltipContent } from 'ui'\n\ntype Placement = Pick<TooltipProps, 'placement'>['placement']\nexport default function Placement() {\n  const placements: Placement[] = [\n    'bottom',\n    'bottom left',\n    'bottom right',\n    'bottom start',\n    'bottom end',\n    'top',\n    'top left',\n    'top right',\n    'top start',\n    'top end',\n    'left',\n    'left top',\n    'left bottom',\n    'start',\n    'start top',\n    'start bottom',\n    'right',\n    'right top',\n    'right bottom',\n    'end',\n    'end top',\n    'end bottom',\n  ]\n  return (\n    <div className=\"grid grid-cols-4 gap-4\">\n      {placements.map((placement, idx) => (\n        <Tooltip key={idx}>\n          <Button className=\"mx-auto\" size=\"sm\" variant=\"outline\">\n            {placement}\n          </Button>\n          <TooltipContent placement={placement}>Hello!</TooltipContent>\n        </Tooltip>\n      ))}\n    </div>\n  )\n}\n"
  },
  {
    "path": "apps/storybook/src/components/tooltip/tooltip.stories.tsx",
    "content": "import { Tooltip } from 'ui'\n\nimport { type Meta } from '@storybook/react'\n\nimport DefaultStory from './stories/default'\nimport PlacementStory from './stories/placement'\n\nconst meta: Meta<typeof Tooltip> = {\n  title: 'Tooltip',\n  component: Tooltip,\n}\n\nexport default meta\n\nexport const Default = () => <DefaultStory />\nexport const Placement = () => <PlacementStory />\n"
  },
  {
    "path": "apps/storybook/src/styles.css",
    "content": "@tailwind base;\n@tailwind components;\n@tailwind utilities;\n"
  },
  {
    "path": "apps/storybook/tailwind.config.cjs",
    "content": "/** @type {import('tailwindcss').Config} */\n\n// eslint-disable-next-line @typescript-eslint/no-var-requires\nconst sharedConfig = require('tailwind-config/tailwind.config.cjs')\n\nmodule.exports = {\n  presets: [sharedConfig],\n  content: [\n    './.storybook/**/*.{js,ts,jsx,tsx}',\n    './src/**/*.{js,ts,jsx,tsx}',\n    '../../packages/**/*.{js,ts,jsx,tsx}',\n  ],\n}\n"
  },
  {
    "path": "apps/storybook/tsconfig.json",
    "content": "{\n  \"extends\": \"ts-config/base.json\",\n  \"include\": [\".\"],\n  \"exclude\": [\"node_modules\"],\n  \"compilerOptions\": {\n    \"jsx\": \"react-jsx\",\n  },\n}\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"draft-ui\",\n  \"scripts\": {\n    \"build\": \"turbo run build\",\n    \"dev\": \"turbo run dev\",\n    \"lint\": \"turbo run lint\",\n    \"storybook\": \"turbo run storybook\",\n    \"prepare\": \"husky install\",\n    \"build-registry\": \"turbo run build-registry\",\n    \"typecheck\": \"turbo run typecheck\"\n  },\n  \"devDependencies\": {\n    \"@ianvs/prettier-plugin-sort-imports\": \"^3.7.2\",\n    \"eslint\": \"^8.56.0\",\n    \"eslint-config-custom\": \"workspace:*\",\n    \"husky\": \"^8.0.3\",\n    \"lint-staged\": \"^15.2.0\",\n    \"prettier\": \"^2.8.8\",\n    \"ts-config\": \"workspace:*\",\n    \"turbo\": \"^1.11.3\"\n  },\n  \"lint-staged\": {\n    \"**/*.{js,jsx,cjs,mjs,ts,tsx,json}\": [\n      \"eslint --fix\"\n    ]\n  }\n}\n"
  },
  {
    "path": "packages/eslint-config-custom/index.js",
    "content": "module.exports = {\n  parser: '@typescript-eslint/parser',\n  extends: [\n    'next',\n    'turbo',\n    'plugin:@typescript-eslint/recommended',\n    'plugin:prettier/recommended',\n    'plugin:tailwindcss/recommended',\n  ],\n  parserOptions: {\n    ecmaVersion: 2018, // Allows for the parsing of modern ECMAScript features\n    sourceType: 'module', // Allows for the use of imports\n  },\n  plugins: ['@typescript-eslint/eslint-plugin'],\n  rules: {\n    '@next/next/no-html-link-for-pages': 'off',\n    '@typescript-eslint/explicit-function-return-type': 'off',\n    '@typescript-eslint/explicit-module-boundary-types': 'off',\n    '@typescript-eslint/ban-ts-comment': 'off',\n    'react/react-in-jsx-scope': 'off',\n    'react/prop-types': 'off',\n    'prettier/prettier': 'error',\n    '@typescript-eslint/no-unused-vars': [\n      'warn',\n      {\n        varsIgnorePattern: '^_',\n        argsIgnorePattern: '^_',\n        destructuredArrayIgnorePattern: '^_',\n      },\n    ],\n    '@typescript-eslint/no-explicit-any': 'off',\n    '@typescript-eslint/consistent-type-imports': [\n      'error',\n      { prefer: 'type-imports', fixStyle: 'inline-type-imports' },\n    ],\n    'tailwindcss/no-custom-classname': 'off',\n  },\n  settings: {\n    react: {\n      version: 'detect',\n    },\n    tailwindcss: {\n      callees: ['cva', 'cn', 'clsx'],\n    },\n  },\n}\n"
  },
  {
    "path": "packages/eslint-config-custom/package.json",
    "content": "{\n  \"name\": \"eslint-config-custom\",\n  \"version\": \"0.0.0\",\n  \"main\": \"index.js\",\n  \"publishConfig\": {\n    \"access\": \"public\"\n  },\n  \"devDependencies\": {\n    \"@typescript-eslint/eslint-plugin\": \"^5.59.2\",\n    \"@typescript-eslint/parser\": \"^5.59.2\",\n    \"eslint\": \"^8.39.0\",\n    \"eslint-config-next\": \"^13.3.4\",\n    \"eslint-config-prettier\": \"^9.0.0\",\n    \"eslint-config-turbo\": \"^1.9.3\",\n    \"eslint-plugin-prettier\": \"^5.0.0\",\n    \"eslint-plugin-react\": \"7.32.2\",\n    \"eslint-plugin-tailwindcss\": \"^3.13.0\",\n    \"typescript\": \"^5.1.6\"\n  }\n}\n"
  },
  {
    "path": "packages/postcss-config/package.json",
    "content": "{\n  \"name\": \"postcss-config\",\n  \"dependencies\": {\n    \"postcss\": \"^8.4.23\"\n  }\n}\n"
  },
  {
    "path": "packages/postcss-config/postcss.config.cjs",
    "content": "/** @type {import('postcss').Config} */\nmodule.exports = {\n  plugins: {\n    'tailwindcss/nesting': {},\n    tailwindcss: {},\n    autoprefixer: {},\n  },\n}\n"
  },
  {
    "path": "packages/tailwind-config/package.json",
    "content": "{\n  \"name\": \"tailwind-config\",\n  \"dependencies\": {\n    \"tailwindcss\": \"^3.4.1\",\n    \"tailwindcss-animate\": \"^1.0.7\",\n    \"tailwindcss-react-aria-components\": \"1.0.0\"\n  }\n}\n"
  },
  {
    "path": "packages/tailwind-config/tailwind.config.cjs",
    "content": "/** @type {import('tailwindcss').Config} */\nmodule.exports = {\n  darkMode: ['class'],\n  theme: {\n    extend: {},\n  },\n  plugins: [\n    require('tailwindcss-animate'),\n    require('tailwindcss-react-aria-components'),\n  ],\n  // safelist: [\n  //   {\n  //     pattern: /react-aria-.+/,\n  //   },\n  // ],\n}\n"
  },
  {
    "path": "packages/ts-config/base.json",
    "content": "{\n  \"$schema\": \"https://json.schemastore.org/tsconfig\",\n  \"display\": \"Default\",\n  \"compilerOptions\": {\n    \"composite\": false,\n    \"declaration\": true,\n    \"declarationMap\": true,\n    \"esModuleInterop\": true,\n    \"forceConsistentCasingInFileNames\": true,\n    \"inlineSources\": false,\n    \"isolatedModules\": true,\n    \"moduleResolution\": \"node\",\n    \"noUnusedLocals\": false,\n    \"noUnusedParameters\": false,\n    \"preserveWatchOutput\": true,\n    \"skipLibCheck\": true,\n    \"strict\": true\n  },\n  \"include\": [\"**/*.ts\", \"**/*.tsx\"],\n  \"exclude\": [\"node_modules\", \"**/*.cjs\"]\n}\n"
  },
  {
    "path": "packages/ts-config/nextjs.json",
    "content": "{\n  \"$schema\": \"https://json.schemastore.org/tsconfig\",\n  \"display\": \"Next.js\",\n  \"compilerOptions\": {\n    \"plugins\": [\n      {\n        \"name\": \"next\"\n      }\n    ],\n    \"allowJs\": true,\n    \"declaration\": false,\n    \"declarationMap\": false,\n    \"incremental\": true,\n    \"jsx\": \"preserve\",\n    \"lib\": [\"dom\", \"dom.iterable\", \"esnext\"],\n    \"module\": \"esnext\",\n    \"noEmit\": true,\n    \"resolveJsonModule\": true,\n    \"strict\": false,\n    \"target\": \"es5\"\n  },\n  \"include\": [\"src\", \"next-env.d.ts\"],\n  \"exclude\": [\"node_modules\"]\n}\n"
  },
  {
    "path": "packages/ts-config/package.json",
    "content": "{\n  \"name\": \"ts-config\",\n  \"version\": \"0.0.0\",\n  \"private\": true,\n  \"license\": \"MIT\",\n  \"publishConfig\": {\n    \"access\": \"public\"\n  }\n}\n"
  },
  {
    "path": "packages/ts-config/react-library.json",
    "content": "{\n  \"$schema\": \"https://json.schemastore.org/tsconfig\",\n  \"display\": \"React Library\",\n  \"extends\": \"./base.json\",\n  \"compilerOptions\": {\n    \"jsx\": \"react-jsx\",\n    \"lib\": [\"ES2015\", \"DOM\"],\n    \"module\": \"ESNext\",\n    \"target\": \"es6\"\n  }\n}\n"
  },
  {
    "path": "packages/ui/.eslintrc.js",
    "content": "module.exports = {\n  root: true,\n  extends: ['custom'],\n}\n"
  },
  {
    "path": "packages/ui/.gitignore",
    "content": ".turbo\ndist/"
  },
  {
    "path": "packages/ui/lib/cva.config.ts",
    "content": "import { defineConfig } from 'cva'\nimport { twMerge } from 'tailwind-merge'\n\nexport const { cva, cx, compose } = defineConfig({\n  hooks: {\n    onComplete: (className) => twMerge(className),\n  },\n})\n"
  },
  {
    "path": "packages/ui/package.json",
    "content": "{\n  \"name\": \"ui\",\n  \"version\": \"0.1.0\",\n  \"main\": \"./src/index.tsx\",\n  \"types\": \"./src/index.tsx\",\n  \"license\": \"MIT\",\n  \"scripts\": {\n    \"lint\": \"eslint --ignore-path .gitignore '**/*.{js,jsx,cjs,mjs,ts,tsx,json}'\",\n    \"typecheck\": \"tsc --noEmit --pretty\"\n  },\n  \"peerDependencies\": {\n    \"react\": \"^18.2.0\"\n  },\n  \"dependencies\": {\n    \"cva\": \"1.0.0-beta.1\",\n    \"lucide-react\": \"^0.259.0\",\n    \"react-aria-components\": \"1.0.0\",\n    \"tailwind-merge\": \"^1.13.2\"\n  },\n  \"devDependencies\": {\n    \"@types/react\": \"18.0.27\",\n    \"eslint\": \"^8.37.0\",\n    \"eslint-config-custom\": \"workspace:*\",\n    \"postcss\": \"^8.4.21\",\n    \"postcss-config\": \"workspace:*\",\n    \"react\": \"^18.2.0\",\n    \"tailwind-config\": \"workspace:*\",\n    \"ts-config\": \"workspace:*\",\n    \"typescript\": \"^5.1.6\"\n  }\n}\n"
  },
  {
    "path": "packages/ui/postcss.config.cjs",
    "content": "/** @type {import('postcss').Config} */\nmodule.exports = require('postcss-config/postcss.config.cjs')\n"
  },
  {
    "path": "packages/ui/src/breadcrumbs.tsx",
    "content": "import * as React from 'react'\n\nimport * as ReactAria from 'react-aria-components'\n\nimport { cx } from '../lib/cva.config'\n\nexport const Breadcrumbs = <T extends object>({\n  className,\n  ...props\n}: ReactAria.BreadcrumbsProps<T>) => {\n  return (\n    <ReactAria.Breadcrumbs\n      className={cx('flex flex-wrap gap-1', className)}\n      {...props}\n    />\n  )\n}\n\nexport interface BreadcrumbItemProps extends ReactAria.BreadcrumbProps {\n  separator?: React.ReactNode\n}\n\nexport const BreadcrumbItem = ({\n  separator,\n  children,\n  ...props\n}: BreadcrumbItemProps) => {\n  return (\n    <ReactAria.Breadcrumb className=\"flex items-center gap-1\" {...props}>\n      {children}\n      {separator ? (\n        <div aria-hidden=\"true\" className=\"text-slate-400 dark:text-slate-500\">\n          {separator}\n        </div>\n      ) : null}\n    </ReactAria.Breadcrumb>\n  )\n}\n\nexport const BreadcrumbLink = ({\n  children,\n  className,\n  ...props\n}: ReactAria.LinkProps) => {\n  return (\n    <ReactAria.Link\n      className={cx(\n        'text-slate-500 hover:underline current:text-black current:hover:no-underline dark:text-slate-300 dark:current:text-white',\n        className,\n      )}\n      {...props}\n    >\n      {children}\n    </ReactAria.Link>\n  )\n}\n"
  },
  {
    "path": "packages/ui/src/button.tsx",
    "content": "import { type VariantProps } from 'cva'\nimport * as ReactAria from 'react-aria-components'\n\nimport { cva, cx } from '../lib/cva.config'\n\nexport const buttonVariants = cva({\n  base: [\n    'inline-flex items-center justify-center rounded-md font-semibold outline-none transition-colors',\n    // Focus\n    'focus:ring-2 focus:ring-slate-400 focus:ring-offset-2 dark:focus:ring-slate-400 dark:focus:ring-offset-slate-900',\n    // Disabled\n    'disabled:pointer-events-none disabled:opacity-40',\n  ],\n  variants: {\n    variant: {\n      solid:\n        'bg-slate-900 text-white open:bg-slate-100 hover:bg-slate-700 dark:bg-slate-50 dark:text-slate-900 dark:open:bg-slate-800 dark:hover:bg-slate-200',\n      destructive:\n        'bg-red-600 text-white hover:bg-red-700 dark:hover:bg-red-700',\n      outline:\n        'border border-slate-200 bg-transparent hover:bg-slate-100 focus:bg-slate-100 dark:border-slate-700 dark:text-slate-100 dark:hover:bg-slate-700 dark:focus:bg-slate-700',\n      subtle:\n        'bg-slate-100 text-slate-900 hover:bg-slate-200 focus:bg-slate-200 dark:bg-slate-700 dark:text-slate-100 dark:hover:bg-slate-700 dark:focus:bg-slate-700',\n      ghost:\n        'bg-transparent open:bg-transparent hover:bg-slate-100 focus:bg-slate-100 dark:text-slate-100 dark:open:bg-transparent dark:hover:bg-slate-800 dark:hover:text-slate-100 dark:focus:bg-slate-800 dark:focus:text-slate-100',\n      link: 'bg-transparent text-slate-900 underline-offset-4 hover:bg-transparent hover:underline focus:bg-transparent focus:underline dark:bg-transparent dark:text-slate-100 dark:hover:bg-transparent dark:focus:bg-transparent',\n    },\n    size: {\n      lg: 'h-12 px-6 text-lg',\n      md: 'h-10 px-4 text-base',\n      sm: 'h-8 px-3 text-sm',\n      xs: 'h-6 px-2 text-xs',\n    },\n  },\n  defaultVariants: {\n    variant: 'solid',\n    size: 'md',\n  },\n})\n\nexport interface ButtonProps\n  extends ReactAria.ButtonProps,\n    VariantProps<typeof buttonVariants> {\n  className?: string\n}\n\nexport const Button = ({ className, variant, size, ...props }: ButtonProps) => {\n  return (\n    <ReactAria.Button\n      className={cx(\n        buttonVariants({\n          variant,\n          size,\n          className,\n        }),\n      )}\n      {...props}\n    />\n  )\n}\n"
  },
  {
    "path": "packages/ui/src/calendar.tsx",
    "content": "import * as React from 'react'\n\nimport * as ReactAria from 'react-aria-components'\n\nimport { cx } from '../lib/cva.config'\n\nexport const Calendar = <T extends ReactAria.DateValue>({\n  className,\n  ...props\n}: ReactAria.CalendarProps<T>) => {\n  return (\n    <ReactAria.Calendar\n      className={cx(\n        'w-fit [&_td:not([aria-selected])+td[aria-selected]_div]:rounded [&_td]:px-0',\n        '[&_td:not([aria-selected])+td[aria-selected]_div]:bg-black [&_td:not([aria-selected])+td[aria-selected]_div]:text-white',\n        'dark:[&_td:not([aria-selected])+td[aria-selected]_div]:bg-white dark:[&_td:not([aria-selected])+td[aria-selected]_div]:text-black',\n        className,\n      )}\n      {...props}\n    />\n  )\n}\n\nexport const RangeCalendar = <T extends ReactAria.DateValue>({\n  className,\n  ...props\n}: ReactAria.RangeCalendarProps<T>) => {\n  return (\n    <ReactAria.RangeCalendar\n      className={cx(\n        'w-fit [&_td]:px-0',\n        // First date of week\n        '[&_td[aria-selected]:first-of-type_div]:rounded-s',\n        // Last date of week\n        '[&_td[aria-selected]:last-of-type_div]:rounded-e',\n        className,\n      )}\n      {...props}\n    />\n  )\n}\n\nexport const CalendarGrid = ({\n  className,\n  ...props\n}: ReactAria.CalendarGridProps) => {\n  return <ReactAria.CalendarGrid className={cx('mt-3', className)} {...props} />\n}\n\nexport const CalendarGridHeader = (\n  props: ReactAria.CalendarGridHeaderProps,\n) => {\n  return <ReactAria.CalendarGridHeader {...props} />\n}\n\nexport const CalendarHeaderCell = ({\n  className,\n  ...props\n}: ReactAria.CalendarHeaderCellProps) => {\n  return (\n    <ReactAria.CalendarHeaderCell\n      className={cx(\n        'h-10 w-10 text-sm font-medium text-slate-500 dark:text-slate-400',\n        className,\n      )}\n      {...props}\n    />\n  )\n}\n\nexport const CalendarGridBody = ({\n  className,\n  ...props\n}: ReactAria.CalendarGridBodyProps) => {\n  return (\n    <ReactAria.CalendarGridBody\n      className={cx('relative pt-4', className)}\n      {...props}\n    />\n  )\n}\n\nexport const CalendarCell = ({\n  className,\n  ...props\n}: ReactAria.CalendarCellProps) => {\n  return (\n    <ReactAria.CalendarCell\n      className={cx(\n        'transition-color relative flex h-10 w-10 items-center justify-center text-sm text-black dark:text-white',\n        // Hover\n        'hover:bg-slate-100 dark:hover:bg-slate-700',\n        // Focus\n        'focus:outline-none focus:ring-2 focus:ring-slate-400 focus:ring-offset-2 dark:focus:ring-slate-400 dark:focus:ring-offset-slate-900',\n        // Date Outside Current Month\n        'outside-month:text-slate-300 dark:outside-month:text-slate-600',\n        // Selected\n        'selected:z-10 selected:bg-slate-100 dark:selected:bg-slate-700 [&:not([data-selected])]:rounded',\n        // Selection Start\n        'selection-start:text-white selected:selection-start:rounded-s selected:selection-start:bg-black dark:selection-start:text-black dark:selected:selection-start:bg-white',\n        // Selection End\n        'selection-end:text-white selected:selection-end:rounded-e selected:selection-end:bg-black dark:selection-end:text-black dark:selected:selection-end:bg-white',\n        // Disabled\n        'disabled:cursor-not-allowed disabled:hover:!bg-transparent',\n        className,\n      )}\n      {...props}\n    />\n  )\n}\n\nexport const CalendarHeading = ({\n  className,\n  ...props\n}: ReactAria.HeadingProps) => {\n  return (\n    <ReactAria.Heading\n      slot=\"title\"\n      className={cx(\n        'text-sm font-medium text-black dark:text-white',\n        className,\n      )}\n      {...props}\n    />\n  )\n}\n\nexport const CalendarHeader = ({\n  className,\n  ...props\n}: React.HTMLAttributes<HTMLDivElement>) => {\n  return (\n    <header\n      className={cx('flex h-full items-center justify-between', className)}\n      {...props}\n    />\n  )\n}\n\nexport const CalendarFooter = ({\n  className,\n  ...props\n}: React.HTMLAttributes<HTMLDivElement>) => {\n  return <footer className={cx(className)} {...props} />\n}\n\nexport const CalendarNextButton = ({\n  className,\n  ...props\n}: ReactAria.ButtonProps) => {\n  return <ReactAria.Button className={cx(className)} {...props} slot=\"next\" />\n}\n\nexport const CalendarPrevButton = ({\n  className,\n  ...props\n}: ReactAria.ButtonProps) => {\n  return (\n    <ReactAria.Button className={cx(className)} {...props} slot=\"previous\" />\n  )\n}\n"
  },
  {
    "path": "packages/ui/src/checkbox-group.tsx",
    "content": "import * as React from 'react'\n\nimport * as ReactAria from 'react-aria-components'\n\nimport { cx } from '../lib/cva.config'\n\ninterface CheckboxGroupProps extends ReactAria.CheckboxGroupProps {\n  orientation?: 'horizontal' | 'vertical'\n}\n\nexport const CheckboxGroup = ({\n  orientation = 'vertical',\n  ...props\n}: CheckboxGroupProps) => {\n  return (\n    <ReactAria.CheckboxGroup\n      data-orientation={orientation}\n      className=\"group\"\n      {...props}\n    />\n  )\n}\n\nexport const CheckboxGroupContent = (\n  props: React.HTMLAttributes<HTMLDivElement>,\n) => {\n  return (\n    <div\n      className={cx(\n        'flex flex-wrap gap-x-6 gap-y-2',\n        'group-orientation-horizontal:flex-row',\n        'group-orientation-vertical:flex-col',\n      )}\n      {...props}\n    />\n  )\n}\n"
  },
  {
    "path": "packages/ui/src/checkbox.tsx",
    "content": "import * as React from 'react'\n\nimport { type VariantProps } from 'cva'\nimport * as ReactAria from 'react-aria-components'\n\nimport { cva, cx } from '../lib/cva.config'\n\nconst checkboxVariants = cva({\n  base: [\n    'group flex cursor-pointer items-center gap-2',\n    // Disabled\n    'disabled:cursor-not-allowed',\n  ],\n  variants: {\n    size: {\n      lg: 'text-lg',\n      md: 'text-base',\n      sm: 'text-sm',\n    },\n  },\n  defaultVariants: {\n    size: 'md',\n  },\n})\n\nconst checkboxInnerVariants = cva({\n  base: [\n    'flex items-center justify-center rounded border-2 border-slate-300 text-white transition-colors dark:border-slate-600 dark:text-black',\n    // Focus\n    'group-focus:ring-2 group-focus:ring-slate-400 group-focus:ring-offset-2 dark:group-focus:ring-slate-400 dark:group-focus:ring-offset-slate-900',\n    // Selected\n    'group-selected:border-black group-selected:bg-black dark:group-selected:border-white dark:group-selected:bg-white',\n    // Disabled\n    'group-disabled:border-slate-100 group-disabled:bg-slate-100',\n    // Selected\n    'group-indeterminate:border-black group-indeterminate:bg-black dark:group-indeterminate:border-white dark:group-indeterminate:bg-white',\n    // Selected & Disabled\n    'group-[[data-selected][data-disabled]]:border-slate-100 group-[[data-selected][data-disabled]]:bg-slate-100 group-[[data-selected][data-disabled]]:text-slate-400',\n    // Indeterminate & Disabled\n    'group-[[data-indeterminate][data-disabled]]:border-slate-100 group-[[data-indeterminate][data-disabled]]:bg-slate-100 group-[[data-indeterminate][data-disabled]]:text-slate-400',\n  ],\n  variants: {\n    size: {\n      lg: 'h-5 w-5',\n      md: 'h-4 w-4',\n      sm: 'h-3 w-3',\n    },\n  },\n  defaultVariants: {\n    size: 'md',\n  },\n})\n\nexport interface CheckboxProps\n  extends ReactAria.CheckboxProps,\n    VariantProps<typeof checkboxVariants>,\n    VariantProps<typeof checkboxInnerVariants> {\n  className?: string\n  children?: React.ReactNode\n}\n\nexport const Checkbox = ({\n  className,\n  size,\n  children,\n  ...props\n}: CheckboxProps) => {\n  return (\n    <ReactAria.Checkbox\n      className={cx(\n        checkboxVariants({\n          size,\n          className,\n        }),\n      )}\n      {...props}\n    >\n      <>\n        <div className={cx(checkboxInnerVariants({ size }))}>\n          <svg\n            viewBox=\"0 0 12 10\"\n            className={cx(\n              'fill-none stroke-current stroke-2 transition-all duration-300 group-indeterminate:hidden',\n              'group-selected:block group-selected:[stroke-dasharray:28] [stroke-dasharray:22] [stroke-dashoffset:66]',\n            )}\n          >\n            <polyline points=\"1.5 6 4.5 9 10.5 1\" />\n          </svg>\n          <svg\n            viewBox=\"0 0 24 24\"\n            className=\"hidden stroke-current stroke-[4] group-indeterminate:block\"\n          >\n            <line x1=\"21\" x2=\"3\" y1=\"12\" y2=\"12\" />\n          </svg>\n        </div>\n        <div className=\"text-black group-disabled:opacity-40 dark:text-white\">\n          {children}\n        </div>\n      </>\n    </ReactAria.Checkbox>\n  )\n}\n"
  },
  {
    "path": "packages/ui/src/combobox.tsx",
    "content": "import { Check } from 'lucide-react'\nimport * as ReactAria from 'react-aria-components'\n\nimport { cx } from '../lib/cva.config'\nimport { type ButtonProps } from './button'\nimport { Input, type InputProps } from './input'\n\nexport const ComboBox = <T extends object>({\n  className,\n  ...props\n}: ReactAria.ComboBoxProps<T>) => {\n  return (\n    <ReactAria.ComboBox className={cx('group w-full', className)} {...props} />\n  )\n}\n\nexport const ComboBoxInput = (props: InputProps) => {\n  return <Input {...props} />\n}\n\nexport interface ComboBoxContentProps<T>\n  extends Omit<ReactAria.PopoverProps, 'children' | 'style' | 'className'>,\n    Omit<ReactAria.ListBoxProps<T>, 'style'> {\n  popoverClassName?: string\n}\n\nexport const ComboBoxContent = <T extends object>({\n  className,\n  popoverClassName,\n  ...props\n}: ComboBoxContentProps<T>) => {\n  return (\n    <ReactAria.Popover\n      className={cx(\n        'min-w-[--trigger-width] overflow-auto rounded-md border border-slate-200 bg-white p-1 shadow-md dark:border-slate-700 dark:bg-slate-800',\n        popoverClassName,\n      )}\n      {...props}\n    >\n      <ReactAria.ListBox className={cx('outline-none', className)} {...props} />\n    </ReactAria.Popover>\n  )\n}\n\nexport interface ListBoxItemProps extends ReactAria.ListBoxItemProps {\n  textValue: string\n}\n\nexport const ComboBoxItem = ({\n  className,\n  children,\n  ...props\n}: ListBoxItemProps) => {\n  return (\n    <ReactAria.ListBoxItem\n      className={cx(\n        'group',\n        'flex cursor-pointer items-center gap-2 rounded-sm px-2 py-1.5 text-black outline-none transition-colors dark:text-white',\n        // Focus\n        'focus:bg-slate-100 dark:focus:bg-slate-700',\n        // Disabled\n        'disabled:cursor-not-allowed disabled:opacity-40 disabled:hover:bg-transparent dark:disabled:hover:bg-transparent',\n        className,\n      )}\n      {...props}\n    >\n      <>\n        <Check\n          aria-hidden=\"true\"\n          strokeWidth=\"3\"\n          className=\"invisible h-4 w-4 group-selected:visible\"\n        />\n        {children}\n      </>\n    </ReactAria.ListBoxItem>\n  )\n}\n\nexport const ComboBoxButton = ({ className, ...props }: ButtonProps) => {\n  return <ReactAria.Button className={cx(className)} {...props} />\n}\n"
  },
  {
    "path": "packages/ui/src/date-input.tsx",
    "content": "import { type VariantProps } from 'cva'\nimport * as ReactAria from 'react-aria-components'\n\nimport { cva, cx } from '../lib/cva.config'\n\nexport const dateInputGroupVariants = cva({\n  base: [\n    'inline-flex w-full', // Using .inline-flex here, as opposed to .flex appears to fix this issue https://github.com/adobe/react-spectrum/issues/3164\n    'w-full items-center border border-slate-300 bg-transparent placeholder:text-slate-400 dark:border-slate-700 dark:text-slate-50',\n    // Focus\n    'focus:outline-none',\n    // Focus-visible\n    'focus-visible:ring-2 focus-visible:ring-slate-400 focus-visible:ring-offset-2 dark:focus-visible:ring-slate-400 dark:focus-visible:ring-offset-slate-900',\n    // Disabled\n    'disabled:cursor-not-allowed disabled:opacity-40',\n    // Invalid\n    'invalid:border-red-600 dark:invalid:border-red-400',\n  ],\n  variants: {\n    size: {\n      lg: 'h-12 rounded-lg px-3 py-2 text-lg',\n      md: 'h-10 rounded-md px-3 py-1 text-base',\n      sm: 'h-8 rounded px-2 py-1 text-sm',\n      xs: 'h-6 rounded px-1 py-0.5 text-xs',\n    },\n  },\n  defaultVariants: {\n    size: 'md',\n  },\n})\n\nexport interface DateInputGroupProps\n  extends ReactAria.GroupProps,\n    VariantProps<typeof dateInputGroupVariants> {\n  className?: string\n}\n\nexport const DateInputGroup = ({\n  className,\n  size,\n  ...props\n}: DateInputGroupProps) => {\n  return (\n    <ReactAria.Group\n      className={cx(\n        dateInputGroupVariants({\n          size,\n          className,\n        }),\n      )}\n      {...props}\n    />\n  )\n}\n\nexport const DateField = <T extends ReactAria.DateValue>(\n  props: ReactAria.DateFieldProps<T>,\n) => {\n  return <ReactAria.DateField {...props} />\n}\n\nexport const DateInput = ({\n  className,\n  ...props\n}: ReactAria.DateInputProps) => {\n  return (\n    <ReactAria.DateInput className={cx('flex gap-1', className)} {...props} />\n  )\n}\n\nexport const DateSegment = ({\n  className,\n  ...props\n}: ReactAria.DateSegmentProps) => {\n  return (\n    <ReactAria.DateSegment\n      className={cx(\n        'flex items-center rounded px-1 focus:outline-none',\n        // Placeholder\n        'placeholder-shown:text-slate-500 placeholder-shown:focus:text-black dark:placeholder-shown:focus:text-white',\n        // Focus\n        'focus:bg-slate-100 focus:text-black dark:focus:bg-slate-700 dark:focus:text-white',\n        // Date Separator\n        'type-literal:px-0',\n        className,\n      )}\n      {...props}\n    />\n  )\n}\n"
  },
  {
    "path": "packages/ui/src/date-picker.tsx",
    "content": "import * as ReactAria from 'react-aria-components'\n\nimport { cx } from '../lib/cva.config'\n\nexport const DatePicker = <T extends ReactAria.DateValue>({\n  className,\n  ...props\n}: ReactAria.DatePickerProps<T>) => {\n  return <ReactAria.DatePicker className={cx('w-full', className)} {...props} />\n}\n\nexport interface DatePickerContentProps\n  extends Omit<ReactAria.PopoverProps, 'children' | 'style'>,\n    ReactAria.DialogProps {\n  className?: string\n  popoverClassName?: string\n}\n\nexport const DatePickerContent = ({\n  popoverClassName,\n  ...props\n}: DatePickerContentProps) => {\n  return (\n    <ReactAria.Popover\n      className={cx(\n        'overflow-auto rounded-md border border-slate-200 bg-white p-3 shadow-md dark:border-slate-700 dark:bg-slate-800',\n        // Entering\n        'entering:animate-in entering:fade-in',\n        // Exiting\n        'exiting:animate-in exiting:fade-in exiting:direction-reverse',\n        // Top\n        'placement-top:slide-in-from-bottom-2',\n        // Bottom\n        'placement-bottom:slide-in-from-top-2',\n        popoverClassName,\n      )}\n    >\n      <ReactAria.Dialog {...props} />\n    </ReactAria.Popover>\n  )\n}\n\nexport const DatePickerButton = ({\n  className,\n  ...props\n}: ReactAria.ButtonProps) => {\n  return <ReactAria.Button className={cx(className)} {...props} />\n}\n"
  },
  {
    "path": "packages/ui/src/date-range-picker.tsx",
    "content": "import * as ReactAria from 'react-aria-components'\n\nimport { cx } from '../lib/cva.config'\n\nexport const DateRangePicker = <T extends ReactAria.DateValue>({\n  className,\n  ...props\n}: ReactAria.DateRangePickerProps<T>) => {\n  return (\n    <ReactAria.DateRangePicker className={cx('w-full', className)} {...props} />\n  )\n}\n\nexport interface DateRangePickerContentProps\n  extends Omit<ReactAria.PopoverProps, 'children' | 'style'>,\n    ReactAria.DialogProps {\n  className?: string\n  popoverClassName?: string\n}\n\nexport const DateRangePickerContent = ({\n  popoverClassName,\n  ...props\n}: DateRangePickerContentProps) => {\n  return (\n    <ReactAria.Popover\n      className={cx(\n        // Base\n        'overflow-auto rounded-md border border-slate-200 bg-white p-3 shadow-md',\n        // Entering\n        'entering:animate-in entering:fade-in',\n        // Exiting\n        'exiting:animate-in exiting:fade-in exiting:direction-reverse',\n        // Top\n        'placement-top:slide-in-from-bottom-2',\n        // Bottom\n        'placement-bottom:slide-in-from-top-2',\n        popoverClassName,\n      )}\n    >\n      <ReactAria.Dialog {...props} />\n    </ReactAria.Popover>\n  )\n}\n"
  },
  {
    "path": "packages/ui/src/grid-list.tsx",
    "content": "import * as ReactAria from 'react-aria-components'\n\nimport { cx } from '../lib/cva.config'\n\nexport const GridList = <T extends object>({\n  className,\n  ...props\n}: ReactAria.GridListProps<T>) => {\n  return (\n    <ReactAria.GridList\n      className={cx('flex flex-col gap-2', className)}\n      {...props}\n    />\n  )\n}\n\nexport const GridListItem = (props: ReactAria.GridListItemProps) => {\n  return <ReactAria.GridListItem {...props} />\n}\n"
  },
  {
    "path": "packages/ui/src/icon-button.tsx",
    "content": "import { type VariantProps } from 'cva'\nimport * as ReactAria from 'react-aria-components'\n\nimport { cva, cx } from '../lib/cva.config'\n\nexport const iconButtonVariants = cva({\n  base: [\n    'inline-flex items-center justify-center rounded-md font-semibold outline-none transition-colors',\n    // Focus\n    'focus:ring-2 focus:ring-slate-400 focus:ring-offset-2 dark:focus:ring-offset-slate-900',\n    // Disabled\n    'disabled:pointer-events-none disabled:opacity-40',\n  ],\n  variants: {\n    variant: {\n      solid: [\n        // Base\n        'bg-slate-900 text-white dark:bg-slate-50 dark:text-slate-900',\n        // Hover\n        'hover:bg-slate-700 dark:hover:bg-slate-200',\n        // Focus\n        'focus:bg-slate-700 dark:focus:bg-slate-200',\n        // Open\n        'open:bg-slate-100 dark:open:bg-slate-800',\n      ],\n      destructive: [\n        // Base\n        'bg-red-600 text-white',\n        // Hover\n        'hover:bg-red-600 dark:hover:bg-red-600',\n        // Focus\n        'focus:bg-red-600 dark:focus:bg-red-600',\n        // Open\n        '',\n      ],\n      outline: [\n        // Base\n        'border border-slate-200 bg-transparent dark:border-slate-700 dark:text-slate-100',\n        // Hover\n        'hover:bg-slate-100 dark:hover:bg-slate-700',\n        // Focus\n        'focus:bg-slate-100 dark:focus:bg-slate-700',\n        // Open\n        '',\n      ],\n      subtle: [\n        // Base\n        'bg-slate-100 text-slate-900 dark:bg-slate-700 dark:text-slate-100',\n        // Hover\n        'hover:bg-slate-200 dark:hover:bg-slate-600',\n        // Focus\n        'focus:bg-slate-200 dark:focus:bg-slate-600',\n        // Open\n        '',\n      ],\n      ghost: [\n        // Base\n        'bg-transparent dark:text-slate-100',\n        // Hover\n        'hover:bg-slate-100 dark:hover:bg-slate-800 dark:hover:text-slate-100',\n        // Focus\n        'focus:bg-slate-100 dark:focus:bg-slate-800 dark:focus:text-slate-100',\n        // Open\n        'open:bg-transparent dark:open:bg-transparent',\n      ],\n      link: [\n        // Base\n        'bg-transparent text-slate-900 underline-offset-4 dark:bg-transparent dark:text-slate-100',\n        // Hover\n        'hover:bg-transparent hover:underline dark:hover:bg-transparent',\n        // Focus\n        'focus:bg-transparent focus:underline dark:focus:bg-transparent',\n        // Open\n        '',\n      ],\n    },\n    size: {\n      lg: 'h-12 w-12 rounded-lg text-3xl',\n      md: 'h-10 w-10 rounded-md text-2xl',\n      sm: 'h-8 w-8 rounded px-1 text-xl',\n      xs: 'h-6 w-6 rounded px-1 text-lg',\n    },\n  },\n  defaultVariants: {\n    variant: 'solid',\n    size: 'md',\n  },\n})\n\nexport interface IconButtonProps\n  extends ReactAria.ButtonProps,\n    VariantProps<typeof iconButtonVariants> {\n  className?: string\n  'aria-label': string\n}\n\nexport const IconButton = ({\n  className,\n  variant,\n  size,\n  ...props\n}: IconButtonProps) => {\n  return (\n    <ReactAria.Button\n      className={cx(\n        iconButtonVariants({\n          variant,\n          size,\n          className,\n        }),\n      )}\n      {...props}\n    />\n  )\n}\n"
  },
  {
    "path": "packages/ui/src/index.tsx",
    "content": "import './styles.css'\n\nexport * from './breadcrumbs'\nexport * from './button'\nexport * from './calendar'\nexport * from './checkbox'\nexport * from './checkbox-group'\nexport * from './combobox'\nexport * from './date-input'\nexport * from './date-picker'\nexport * from './date-range-picker'\nexport * from './grid-list'\nexport * from './input'\nexport * from './icon-button'\nexport * from './label'\nexport * from './menu'\nexport * from './meter'\nexport * from './modal'\nexport * from './number-field'\nexport * from './progress-bar'\nexport * from './radio'\nexport * from './radio-group'\nexport * from './search-field'\nexport * from './select'\nexport * from './slider'\nexport * from './switch'\nexport * from './tabs'\n// export * from \"./table\";\nexport * from './text-field'\n// export * from \"./toggle-button\";\nexport * from './tooltip'\n"
  },
  {
    "path": "packages/ui/src/input.tsx",
    "content": "import { type VariantProps } from 'cva'\nimport * as ReactAria from 'react-aria-components'\n\nimport { cva, cx } from '../lib/cva.config'\n\nconst inputVariants = cva({\n  base: [\n    'flex w-full border border-slate-300 bg-transparent placeholder:text-slate-400',\n    // Focus\n    'focus:outline-none focus:ring-2 focus:ring-slate-400 focus:ring-offset-2',\n    // Dark\n    'dark:border-slate-700 dark:text-slate-50 dark:focus:ring-slate-400 dark:focus:ring-offset-slate-900',\n    // Disabled\n    'disabled:cursor-not-allowed disabled:opacity-40',\n    // Invalid\n    'invalid:border-red-600 dark:invalid:border-red-400',\n  ],\n  variants: {\n    size: {\n      lg: 'h-12 rounded-lg px-4 text-lg',\n      md: 'h-10 rounded-md px-4 text-base',\n      sm: 'h-8 rounded px-3 text-sm',\n      xs: 'h-6 rounded px-2 text-xs',\n    },\n  },\n  defaultVariants: {\n    size: 'md',\n  },\n})\n\nexport interface InputProps\n  extends Omit<ReactAria.InputProps, 'size'>,\n    VariantProps<typeof inputVariants> {\n  className?: string\n}\n\nexport const Input = ({ className, size, ...props }: InputProps) => {\n  return (\n    <ReactAria.Input\n      className={cx(\n        inputVariants({\n          size,\n          className,\n        }),\n      )}\n      {...props}\n    />\n  )\n}\n"
  },
  {
    "path": "packages/ui/src/label.tsx",
    "content": "import * as ReactAria from 'react-aria-components'\n\nimport { cx } from '../lib/cva.config'\n\nexport const Label = ({ className, ...props }: ReactAria.LabelProps) => {\n  return (\n    <ReactAria.Label\n      className={cx(\n        'mb-2 mr-3 block font-medium text-black peer-disabled:cursor-not-allowed peer-disabled:opacity-40 dark:text-white',\n        className,\n      )}\n      {...props}\n    />\n  )\n}\n"
  },
  {
    "path": "packages/ui/src/menu.tsx",
    "content": "import * as React from 'react'\n\nimport { Check, Circle } from 'lucide-react'\nimport * as ReactAria from 'react-aria-components'\n\nimport { cx } from '../lib/cva.config'\n\nexport const Menu = (props: ReactAria.MenuTriggerProps) => {\n  return <ReactAria.MenuTrigger {...props} />\n}\nexport interface MenuContentProps<T>\n  extends Omit<ReactAria.PopoverProps, 'children' | 'style'>,\n    ReactAria.MenuProps<T> {\n  className?: string\n  popoverClassName?: string\n}\n\nexport const MenuContent = <T extends object>({\n  className,\n  popoverClassName,\n  ...props\n}: MenuContentProps<T>) => {\n  return (\n    <ReactAria.Popover\n      className={cx(\n        // Base\n        'min-w-[150px] overflow-auto rounded-md border bg-white p-1 shadow dark:border-slate-700 dark:bg-slate-800',\n        // Entering\n        'entering:animate-in entering:fade-in',\n        // Exiting\n        'exiting:animate-in exiting:fade-in exiting:direction-reverse',\n        // Top\n        'placement-top:slide-in-from-bottom-2',\n        // Bottom\n        'placement-bottom:slide-in-from-top-2',\n        popoverClassName,\n      )}\n      {...props}\n    >\n      <ReactAria.Menu className={cx('outline-none', className)} {...props} />\n    </ReactAria.Popover>\n  )\n}\n\nexport const MenuItem = ({\n  className,\n  children,\n  ...props\n}: ReactAria.MenuItemProps) => {\n  return (\n    <ReactAria.MenuItem\n      className={cx(\n        'group',\n        'flex cursor-pointer items-center gap-2 rounded-sm px-2 py-1.5 text-black outline-none transition-colors dark:text-white',\n        // Hover\n        'hover:bg-slate-100 dark:hover:bg-slate-700',\n        // Focus\n        'focus:bg-slate-100 dark:focus:bg-slate-700',\n        // Disabled\n        'disabled:cursor-not-allowed disabled:opacity-40 disabled:hover:bg-transparent dark:disabled:hover:bg-transparent',\n        className,\n      )}\n      {...props}\n    >\n      {({ selectionMode }) => (\n        <>\n          {selectionMode === 'single' ? (\n            <Circle\n              aria-hidden=\"true\"\n              strokeWidth=\"3\"\n              className=\"invisible h-2 w-2 fill-current group-selected:visible\"\n            />\n          ) : selectionMode === 'multiple' ? (\n            <Check\n              aria-hidden=\"true\"\n              strokeWidth=\"3\"\n              className=\"invisible h-4 w-4 group-selected:visible\"\n            />\n          ) : null}\n          {children}\n        </>\n      )}\n    </ReactAria.MenuItem>\n  )\n}\n\nexport const MenuSection = <T extends object>(\n  props: ReactAria.SectionProps<T>,\n) => {\n  return <ReactAria.Section {...props} />\n}\n\nexport const MenuHeader = ({\n  className,\n  ...props\n}: React.HTMLAttributes<HTMLElement>) => {\n  return (\n    <ReactAria.Header\n      className={cx(\n        'px-2 py-1 text-sm font-medium text-slate-500 dark:text-slate-400',\n        className,\n      )}\n      {...props}\n    />\n  )\n}\n\nexport const MenuSeparator = ({\n  className,\n  ...props\n}: ReactAria.SeparatorProps) => {\n  return (\n    <ReactAria.Separator\n      className={cx('-mx-1 my-1 border-t dark:border-slate-700', className)}\n      {...props}\n    />\n  )\n}\n"
  },
  {
    "path": "packages/ui/src/meter.tsx",
    "content": "import * as React from 'react'\n\nimport * as ReactAria from 'react-aria-components'\n\nimport { cx } from '../lib/cva.config'\n\nexport const Meter = ({ className, ...props }: ReactAria.MeterProps) => {\n  return <ReactAria.Meter className={cx('w-full', className)} {...props} />\n}\n\nexport const MeterTrack = ({\n  className,\n  children,\n  ...props\n}: React.HTMLAttributes<HTMLDivElement>) => {\n  return (\n    <div\n      className={cx(\n        'h-2 w-full overflow-hidden rounded bg-slate-200 dark:bg-slate-700',\n        className,\n      )}\n      {...props}\n    >\n      {children}\n    </div>\n  )\n}\n\nexport interface MeterFilledTrackProps\n  extends React.HTMLAttributes<HTMLDivElement> {\n  percentage: number\n}\n\nexport const MeterFilledTrack = ({\n  className,\n  percentage,\n  ...props\n}: MeterFilledTrackProps) => {\n  return (\n    <div\n      className={cx('h-full bg-black dark:bg-white', className)}\n      style={{ width: percentage + '%' }}\n      {...props}\n    />\n  )\n}\n"
  },
  {
    "path": "packages/ui/src/modal.tsx",
    "content": "import * as React from 'react'\n\nimport { type VariantProps } from 'cva'\nimport * as ReactAria from 'react-aria-components'\n\nimport { cva, cx } from '../lib/cva.config'\n\nexport const modalVariants = cva({\n  base: [\n    'mx-auto w-full flex-col rounded bg-white outline-none dark:bg-slate-800',\n    // Entering\n    'entering:animate-in entering:zoom-in-95',\n    // Exiting\n    'exiting:animate-in exiting:zoom-in-95 exiting:direction-reverse',\n  ],\n  variants: {\n    size: {\n      full: 'h-full',\n      xl: 'my-16 max-w-[36rem]',\n      lg: 'my-16 max-w-[32rem]',\n      md: 'my-16 max-w-[28rem]',\n      sm: 'my-16 max-w-[24rem]',\n      xs: 'my-16 max-w-[20rem]',\n    },\n  },\n  defaultVariants: {\n    size: 'md',\n  },\n})\n\nexport const Modal = (props: ReactAria.DialogTriggerProps) => {\n  return <ReactAria.DialogTrigger {...props} />\n}\n\nexport interface ModalContentProps\n  extends ReactAria.ModalOverlayProps,\n    VariantProps<typeof modalVariants> {\n  className?: string\n  children?: React.ReactNode\n}\n\nexport const ModalContent = ({\n  className,\n  size,\n  children,\n  ...props\n}: ModalContentProps) => {\n  return (\n    <ReactAria.Modal\n      className={cx(\n        modalVariants({\n          size,\n          className,\n        }),\n      )}\n      {...props}\n    >\n      <ReactAria.Dialog className=\"relative flex h-full flex-col outline-none\">\n        {children}\n      </ReactAria.Dialog>\n    </ReactAria.Modal>\n  )\n}\n\nexport const ModalOverlay = ({\n  isDismissable = true,\n  className,\n  ...props\n}: ReactAria.ModalOverlayProps) => {\n  return (\n    <ReactAria.ModalOverlay\n      isDismissable={isDismissable}\n      className={cx(\n        'h-[--visual-viewport-height]',\n        'fixed inset-x-0 top-0 z-50 bg-black/60 backdrop-blur-sm transition-all',\n        // Entering\n        'entering:duration-75 entering:animate-in entering:fade-in',\n        // Exiting\n        'exiting:animate-in exiting:fade-in exiting:direction-reverse',\n        className,\n      )}\n      {...props}\n    />\n  )\n}\n\nexport const ModalHeader = ({\n  className,\n  ...props\n}: React.HTMLAttributes<HTMLElement>) => {\n  return (\n    <ReactAria.Heading\n      slot=\"title\"\n      className={cx(\n        'shrink-0 px-6 py-4 text-xl font-semibold text-black dark:text-white',\n        className,\n      )}\n      {...props}\n    />\n  )\n}\n\nexport const ModalBody = ({\n  className,\n  ...props\n}: React.HTMLAttributes<HTMLDivElement>) => {\n  return <div className={cx('flex-1 px-6 py-2', className)} {...props} />\n}\n\nexport const ModalFooter = ({\n  className,\n  ...props\n}: React.HTMLAttributes<HTMLElement>) => {\n  return <footer className={cx('px-6 py-4', className)} {...props} />\n}\n"
  },
  {
    "path": "packages/ui/src/number-field.tsx",
    "content": "import * as React from 'react'\n\nimport * as ReactAria from 'react-aria-components'\n\nimport { cx } from '../lib/cva.config'\nimport { type ButtonProps } from './button'\nimport { Input, type InputProps } from './input'\n\nexport const NumberField = ({\n  className,\n  ...props\n}: ReactAria.NumberFieldProps) => {\n  return (\n    <ReactAria.NumberField className={cx('w-full', className)} {...props} />\n  )\n}\n\nexport const NumberInputGroup = (props: ReactAria.GroupProps) => {\n  return <ReactAria.Group {...props} />\n}\n\nexport const NumberInputStepper = ({\n  className,\n  ...props\n}: React.HTMLAttributes<HTMLElement>) => {\n  return (\n    <div\n      className={cx(\n        'absolute right-0 top-0 z-10 m-px flex h-[calc(100%-2px)] w-6 flex-col',\n        className,\n      )}\n      {...props}\n    />\n  )\n}\n\nexport const NumberInput = ({ className, ...props }: InputProps) => {\n  return <Input className={cx('pr-6', className)} {...props} />\n}\n\nexport const NumberIncrementStepper = ({\n  className,\n  ...props\n}: ButtonProps) => {\n  return (\n    <ReactAria.Button\n      slot=\"increment\"\n      className={cx(\n        [\n          'flex flex-1 select-none items-center justify-center rounded-tr-md border-l border-gray-300 leading-none text-black transition-colors duration-100 dark:border-slate-700 dark:text-white',\n          // Pressed\n          'pressed:bg-slate-100 dark:pressed:bg-slate-700',\n          // Disabled\n          'disabled:opacity-40 disabled:cursor-not-allowed',\n        ],\n        className,\n      )}\n      {...props}\n    />\n  )\n}\n\nexport const NumberDecrementStepper = ({\n  className,\n  ...props\n}: ButtonProps) => {\n  return (\n    <ReactAria.Button\n      slot=\"decrement\"\n      className={cx(\n        [\n          'flex flex-1 select-none items-center justify-center rounded-br-md border-l border-t border-gray-300 leading-none text-black transition-colors duration-100 dark:border-slate-700 dark:text-white',\n          // Pressed\n          'pressed:bg-slate-100 dark:pressed:bg-slate-700',\n          // Disabled\n          'disabled:opacity-40 disabled:cursor-not-allowed',\n        ],\n        className,\n      )}\n      {...props}\n    />\n  )\n}\n"
  },
  {
    "path": "packages/ui/src/progress-bar.tsx",
    "content": "import * as React from 'react'\n\nimport * as ReactAria from 'react-aria-components'\n\nimport { cx } from '../lib/cva.config'\n\nexport const ProgressBar = ({\n  className,\n  ...props\n}: ReactAria.ProgressBarProps) => {\n  return (\n    <ReactAria.ProgressBar className={cx('w-full', className)} {...props} />\n  )\n}\n\nexport const ProgressBarTrack = ({\n  className,\n  children,\n  ...props\n}: React.HTMLAttributes<HTMLDivElement>) => {\n  return (\n    <div\n      className={cx(\n        'h-2 w-full overflow-hidden rounded bg-slate-200 dark:bg-slate-700',\n        className,\n      )}\n      {...props}\n    >\n      {children}\n    </div>\n  )\n}\n\nexport interface ProgressBarFilledTrackProps\n  extends React.HTMLAttributes<HTMLDivElement> {\n  percentage?: number\n}\n\nexport const ProgressBarFilledTrack = ({\n  className,\n  percentage = 0,\n  ...props\n}: ProgressBarFilledTrackProps) => {\n  return (\n    <div\n      className={cx('h-full bg-black dark:bg-white', className)}\n      style={{ width: percentage + '%' }}\n      {...props}\n    />\n  )\n}\n"
  },
  {
    "path": "packages/ui/src/radio-group.tsx",
    "content": "import * as React from 'react'\n\nimport * as ReactAria from 'react-aria-components'\n\nimport { cx } from '../lib/cva.config'\n\nexport const RadioGroup = (props: ReactAria.RadioGroupProps) => {\n  return <ReactAria.RadioGroup className=\"group\" {...props} />\n}\n\nexport const RadioGroupContent = (\n  props: React.HTMLAttributes<HTMLDivElement>,\n) => {\n  return (\n    <div\n      className={cx(\n        'flex flex-wrap gap-x-6 gap-y-2',\n        'group-orientation-horizontal:flex-row',\n        'group-orientation-vertical:flex-col',\n      )}\n      {...props}\n    />\n  )\n}\n"
  },
  {
    "path": "packages/ui/src/radio.tsx",
    "content": "import * as React from 'react'\n\nimport { type VariantProps } from 'cva'\nimport * as ReactAria from 'react-aria-components'\n\nimport { cva, cx } from '../lib/cva.config'\n\nconst radioVariants = cva({\n  base: [\n    'group flex cursor-pointer flex-row items-center gap-2',\n    // Disabled\n    'disabled:cursor-not-allowed',\n  ],\n  variants: {\n    size: {\n      lg: 'text-lg',\n      md: 'text-base',\n      sm: 'text-sm',\n    },\n  },\n  defaultVariants: {\n    size: 'md',\n  },\n})\n\nconst radioInnerVariants = cva({\n  base: [\n    'flex items-center justify-center rounded-full border-2 border-slate-300 transition-colors dark:border-slate-600',\n    // ::before\n    'before:block before:h-1/2 before:w-1/2 before:scale-0 before:rounded-full before:bg-white before:transition-transform before:duration-300 before:content-[\"\"] dark:before:bg-black',\n    // Selected\n    'group-selected:border-black group-selected:bg-black group-selected:text-white dark:group-selected:border-white dark:group-selected:bg-white dark:group-selected:text-black',\n    // ::before Selected\n    'group-selected:before:scale-100',\n    // Focus\n    'group-focus:ring-2 group-focus:ring-slate-400 group-focus:ring-offset-2 dark:group-focus:ring-slate-400 dark:group-focus:ring-offset-slate-900',\n    // Disabled\n    'group-disabled:border-slate-100',\n    // Selected & Disabled\n    'group-[[data-selected][data-disabled]]:border-slate-100 group-[[data-selected][data-disabled]]:bg-slate-100 group-[[data-selected][data-disabled]]:before:bg-slate-400',\n  ],\n  variants: {\n    size: {\n      lg: 'h-5 w-5',\n      md: 'h-4 w-4',\n      sm: 'h-3 w-3',\n    },\n  },\n  defaultVariants: {\n    size: 'md',\n  },\n})\n\nexport interface RadioProps\n  extends ReactAria.RadioProps,\n    VariantProps<typeof radioVariants>,\n    VariantProps<typeof radioInnerVariants> {\n  className?: string\n  children?: React.ReactNode\n}\n\nexport const Radio = ({ className, size, children, ...props }: RadioProps) => {\n  return (\n    <ReactAria.Radio\n      className={cx(\n        radioVariants({\n          size,\n          className,\n        }),\n      )}\n      {...props}\n    >\n      <>\n        <div className={cx(radioInnerVariants({ size }))} />\n        <div className=\"text-black group-disabled:opacity-40 dark:text-white\">\n          {children}\n        </div>\n      </>\n    </ReactAria.Radio>\n  )\n}\n"
  },
  {
    "path": "packages/ui/src/search-field.tsx",
    "content": "import { X } from 'lucide-react'\nimport * as ReactAria from 'react-aria-components'\n\nimport { cx } from '../lib/cva.config'\nimport { IconButton, type IconButtonProps } from './icon-button'\nimport { Input, type InputProps } from './input'\n\nexport const SearchField = ({\n  className,\n  ...props\n}: ReactAria.SearchFieldProps) => {\n  return (\n    <ReactAria.SearchField\n      className={cx('group w-full', className)}\n      {...props}\n    />\n  )\n}\n\nexport const SearchFieldInput = ({ className, ...props }: InputProps) => {\n  return (\n    <Input\n      className={cx(\n        '[&::-webkit-search-cancel-button]:appearance-none',\n        '[&::-webkit-search-decoration]:appearance-none',\n        className,\n      )}\n      {...props}\n    />\n  )\n}\n\nexport const SearchFieldClearButton = ({\n  className,\n  ...props\n}: IconButtonProps) => {\n  return (\n    <IconButton className={cx('group-empty:hidden', className)} {...props}>\n      <X size=\"1em\" />\n    </IconButton>\n  )\n}\n"
  },
  {
    "path": "packages/ui/src/select.tsx",
    "content": "import { Check } from 'lucide-react'\nimport * as ReactAria from 'react-aria-components'\n\nimport { cx } from '../lib/cva.config'\nimport { Button, type ButtonProps } from './button'\n\nexport const Select = <T extends object>({\n  className,\n  ...props\n}: ReactAria.SelectProps<T>) => {\n  return <ReactAria.Select className={cx('w-full', className)} {...props} />\n}\n\nexport interface SelectContentProps<T>\n  extends Omit<ReactAria.PopoverProps, 'children' | 'style'>,\n    Omit<ReactAria.ListBoxProps<T>, 'style'> {\n  className?: string\n  popoverClassName?: string\n}\n\nexport const SelectContent = <T extends object>({\n  className,\n  popoverClassName,\n  ...props\n}: SelectContentProps<T>) => {\n  return (\n    <ReactAria.Popover\n      className={cx(\n        'min-w-[--trigger-width] overflow-auto rounded-md border border-slate-200 bg-white p-1 shadow-md dark:border-slate-700 dark:bg-slate-800',\n        // Entering\n        'entering:animate-in entering:fade-in',\n        // Exiting\n        'exiting:animate-in exiting:fade-in exiting:direction-reverse',\n        // Top\n        'placement-top:slide-in-from-bottom-2',\n        // Bottom\n        'placement-bottom:slide-in-from-top-2',\n        popoverClassName,\n      )}\n      {...props}\n    >\n      <ReactAria.ListBox className={cx('outline-none', className)} {...props} />\n    </ReactAria.Popover>\n  )\n}\n\nexport const SelectItem = ({\n  className,\n  children,\n  ...props\n}: ReactAria.ListBoxItemProps) => {\n  return (\n    <ReactAria.ListBoxItem\n      className={cx(\n        'group',\n        'flex cursor-pointer items-center gap-2 rounded-sm px-2 py-1.5 text-black outline-none transition-colors dark:text-white',\n        // Focus\n        'focus:bg-slate-100 dark:focus:bg-slate-700',\n        className,\n      )}\n      {...props}\n    >\n      <>\n        <Check\n          aria-hidden=\"true\"\n          strokeWidth=\"3\"\n          className=\"invisible h-4 w-4 group-selected:visible\"\n        />\n        {children}\n      </>\n    </ReactAria.ListBoxItem>\n  )\n}\n\nexport const SelectValue = <T extends object>(\n  props: ReactAria.SelectValueProps<T>,\n) => {\n  return <ReactAria.SelectValue {...props} />\n}\n\nexport const SelectButton = ({ className, ...props }: ButtonProps) => {\n  return (\n    <Button\n      className={cx(\n        [\n          'flex w-full items-center justify-between font-normal',\n          // Disabled\n          'disabled:cursor-not-allowed disabled:pointer-events-auto',\n        ],\n        className,\n      )}\n      {...props}\n    />\n  )\n}\n"
  },
  {
    "path": "packages/ui/src/slider.tsx",
    "content": "import * as React from 'react'\n\nimport * as ReactAria from 'react-aria-components'\n\nimport { cx } from '../lib/cva.config'\n\nexport const Slider = ({ className, ...props }: ReactAria.SliderProps) => {\n  return (\n    <ReactAria.Slider {...props} className={cx('group w-full', className)} />\n  )\n}\n\nexport const SliderOutput = (props: ReactAria.SliderOutputProps) => {\n  return <ReactAria.SliderOutput {...props} />\n}\n\nexport const SliderTrack = ({\n  className,\n  ...props\n}: ReactAria.SliderTrackProps) => {\n  return (\n    <ReactAria.SliderTrack\n      {...props}\n      className={cx(\n        'relative cursor-pointer',\n        // Vertical\n        'group-orientation-vertical:w-6',\n        // Horizontal\n        'group-orientation-horizontal:h-6 group-orientation-horizontal:w-full',\n        // ::before\n        'before:absolute before:block before:rounded-full before:bg-slate-200 dark:before:bg-slate-700',\n        // ::before Vertical\n        'group-orientation-vertical:before:left-1/2 group-orientation-vertical:before:h-full group-orientation-vertical:before:w-2 group-orientation-vertical:before:-translate-x-1/2',\n        // ::before Horizontal\n        'group-orientation-horizontal:before:top-1/2 group-orientation-horizontal:before:h-2 group-orientation-horizontal:before:w-full group-orientation-horizontal:before:-translate-y-1/2',\n        className,\n      )}\n    />\n  )\n}\n\nexport interface SliderFilledTrackProps\n  extends React.HTMLAttributes<HTMLDivElement> {\n  percentage?: number\n  orientation: 'horizontal' | 'vertical'\n  className?: string\n}\n\nexport const SliderFilledTrack = ({\n  percentage = 0,\n  orientation,\n  className,\n  ...props\n}: SliderFilledTrackProps) => {\n  const dir = orientation === 'vertical' ? 'height' : 'width'\n  return (\n    <div\n      className={cx(\n        'absolute h-2 rounded-full bg-black dark:bg-white',\n        // Vertical\n        'group-orientation-vertical:bottom-0 group-orientation-vertical:left-1/2 group-orientation-vertical:h-full group-orientation-vertical:w-2 group-orientation-vertical:-translate-x-1/2',\n        // Horizontal\n        'group-orientation-horizontal:left-0 group-orientation-horizontal:top-1/2 group-orientation-horizontal:h-2 group-orientation-horizontal:w-full group-orientation-horizontal:-translate-y-1/2',\n        className,\n      )}\n      style={{\n        [dir]: percentage + '%',\n      }}\n      {...props}\n    />\n  )\n}\n\nexport const SliderThumb = ({\n  className,\n  ...props\n}: ReactAria.SliderThumbProps) => {\n  return (\n    <ReactAria.SliderThumb\n      className={cx(\n        'flex h-6 w-6 cursor-pointer items-center justify-center rounded-full border-2 border-black bg-white text-xs dark:border-white dark:bg-slate-900',\n        // Dragging\n        'dragging:outline-none dragging:ring-2 dragging:ring-slate-400 dragging:ring-offset-2 dark:dragging:ring-offset-slate-900',\n        // Focus Visible\n        'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-slate-400 focus-visible:ring-offset-2 dark:focus-visible:ring-offset-slate-900',\n        // Vertical\n        'group-orientation-vertical:left-1/2',\n        // Horizontal\n        'group-orientation-horizontal:top-1/2',\n        className,\n      )}\n      {...props}\n    />\n  )\n}\n"
  },
  {
    "path": "packages/ui/src/styles.css",
    "content": "@tailwind base;\n@tailwind components;\n@tailwind utilities;\n"
  },
  {
    "path": "packages/ui/src/switch.tsx",
    "content": "import * as React from 'react'\n\nimport { type VariantProps } from 'cva'\nimport * as ReactAria from 'react-aria-components'\n\nimport { cva, cx } from '../lib/cva.config'\n\nconst switchIndicatorVariants = cva({\n  base: [\n    'cursor-pointer rounded-full bg-gray-300 p-0.5 transition-colors dark:bg-slate-700',\n    // Focus\n    'group-focus:ring-2 group-focus:ring-slate-400 group-focus:ring-offset-2 dark:group-focus:ring-slate-400 dark:group-focus:ring-offset-slate-900',\n    // Selected\n    'group-selected:bg-black dark:group-selected:bg-slate-400',\n    // Disabled\n    'group-disabled:cursor-not-allowed group-disabled:opacity-40',\n  ],\n  variants: {\n    size: {\n      lg: 'h-7 w-12',\n      md: 'h-5 w-8',\n      sm: 'h-4 w-6',\n    },\n  },\n  defaultVariants: {\n    size: 'md',\n  },\n})\n\nconst switchIndicatorInnerVariants = cva({\n  base: 'rounded-full bg-white transition-transform',\n  variants: {\n    size: {\n      lg: 'h-6 w-6 group-selected:translate-x-5',\n      md: 'h-4 w-4 group-selected:translate-x-3',\n      sm: 'h-3 w-3 group-selected:translate-x-2',\n    },\n  },\n  defaultVariants: {\n    size: 'md',\n  },\n})\n\nexport interface SwitchProps\n  extends ReactAria.SwitchProps,\n    VariantProps<typeof switchIndicatorVariants> {\n  className?: string\n}\n\nexport const Switch = ({ children, className, ...props }: SwitchProps) => {\n  return (\n    <ReactAria.Switch\n      className={cx(\n        [\n          'group',\n          'flex items-center gap-2 font-medium text-black dark:text-white',\n        ],\n        className,\n      )}\n      {...props}\n    >\n      {children}\n    </ReactAria.Switch>\n  )\n}\n\nexport interface SwitchIndicatorProps\n  extends React.HTMLAttributes<HTMLDivElement>,\n    VariantProps<typeof switchIndicatorVariants> {\n  className?: string\n}\n\nexport const SwitchIndicator = ({\n  size,\n  className,\n  ...props\n}: SwitchIndicatorProps) => {\n  return (\n    <div\n      className={cx(switchIndicatorVariants({ size, className }))}\n      {...props}\n    >\n      <div className={cx(switchIndicatorInnerVariants({ size }))} />\n    </div>\n  )\n}\n"
  },
  {
    "path": "packages/ui/src/table.tsx",
    "content": "// TODO: Table\n\nexport const Table = () => {\n  return <div />\n}\n"
  },
  {
    "path": "packages/ui/src/tabs.tsx",
    "content": "import * as ReactAria from 'react-aria-components'\n\nimport { cx } from '../lib/cva.config'\n\nexport const Tabs = ({ className, ...props }: ReactAria.TabsProps) => {\n  return (\n    <ReactAria.Tabs\n      className={cx(\n        'flex',\n        // Horizontal\n        'orientation-horizontal:flex-col orientation-horizontal:[--border-width:0_0_2px_0]',\n        // Vertical\n        'orientation-vertical:[--border-width:0_2px_0_0]',\n        className,\n      )}\n      {...props}\n    />\n  )\n}\n\nexport const TabList = <T extends object>({\n  className,\n  ...props\n}: ReactAria.TabListProps<T>) => {\n  return (\n    <ReactAria.TabList\n      className={cx(\n        'group',\n        'flex border-[length:var(--border-width)] border-slate-200 dark:border-slate-700',\n        // Vertical\n        'orientation-vertical:flex-col',\n        className,\n      )}\n      {...props}\n    />\n  )\n}\n\nexport const Tab = ({ className, ...props }: ReactAria.TabProps) => {\n  return (\n    <ReactAria.Tab\n      className={cx(\n        'relative shrink-0 cursor-pointer border-[length:var(--border-width)] border-transparent px-4 py-2 text-slate-500 outline-none transition-colors dark:text-slate-400',\n        // Focus-visible\n        'focus-visible:ring-2 focus-visible:ring-slate-400',\n        // Disabled\n        'disabled:cursor-not-allowed disabled:opacity-40',\n        // Horizontal\n        'group-orientation-horizontal:border-[width:var(--border-width)] group-orientation-horizontal:top-[2px]',\n        // Vertical\n        'group-orientation-vertical:border-[width:var(--border-width)] group-orientation-vertical:left-[2px] group-orientation-vertical:inline-flex',\n        // Selected\n        'selected:border-[length:var(--border-width)] selected:border-black selected:text-black dark:selected:border-white dark:aria-selected:text-white',\n        className,\n      )}\n      {...props}\n    />\n  )\n}\n\nexport const TabPanel = ({ className, ...props }: ReactAria.TabPanelProps) => {\n  return <ReactAria.TabPanel className={cx('grow p-4', className)} {...props} />\n}\n"
  },
  {
    "path": "packages/ui/src/text-field.tsx",
    "content": "import * as ReactAria from 'react-aria-components'\n\nimport { cx } from '../lib/cva.config'\n\nexport const TextField = ({\n  className,\n  ...props\n}: ReactAria.TextFieldProps) => {\n  return <ReactAria.TextField className={cx('w-full', className)} {...props} />\n}\n\nexport const TextFieldDescription = ({\n  className,\n  ...props\n}: ReactAria.TextProps) => {\n  return (\n    <ReactAria.Text\n      elementType=\"div\"\n      slot=\"description\"\n      className={cx(\n        'mt-2 text-sm text-slate-500 dark:text-slate-400',\n        className,\n      )}\n      {...props}\n    />\n  )\n}\n\nexport const TextFieldErrorMessage = ({\n  className,\n  ...props\n}: ReactAria.TextProps) => {\n  return (\n    <ReactAria.Text\n      elementType=\"div\"\n      slot=\"errorMessage\"\n      className={cx('mt-2 text-sm text-red-600 dark:text-red-400', className)}\n      {...props}\n    />\n  )\n}\n"
  },
  {
    "path": "packages/ui/src/toggle-button.tsx",
    "content": "// TODO: ToggleButton\n\nexport const ToggleButton = () => {\n  return <div />\n}\n"
  },
  {
    "path": "packages/ui/src/tooltip.tsx",
    "content": "import * as ReactAria from 'react-aria-components'\n\nimport { cx } from '../lib/cva.config'\n\nexport const Tooltip = (props: ReactAria.TooltipTriggerComponentProps) => {\n  return <ReactAria.TooltipTrigger delay={0} closeDelay={0} {...props} />\n}\n\nexport const TooltipContent = ({\n  className,\n  children,\n  ...props\n}: ReactAria.TooltipProps) => {\n  return (\n    <ReactAria.Tooltip\n      offset={6}\n      className={cx(\n        [\n          'rounded-sm bg-slate-700 px-1 py-0.5 text-sm text-white dark:bg-slate-300 dark:text-black',\n          // Entering\n          'entering:animate-in entering:fade-in',\n          // Exiting\n          'exiting:animate-in exiting:fade-in exiting:direction-reverse',\n          // Placement\n          'placement-left:slide-in-from-right-1 placement-right:slide-in-from-left-1 placement-top:slide-in-from-bottom-1 placement-bottom:slide-in-from-top-1',\n        ],\n        className,\n      )}\n      {...props}\n    >\n      {children}\n    </ReactAria.Tooltip>\n  )\n}\n"
  },
  {
    "path": "packages/ui/tailwind.config.cjs",
    "content": "/** @type {import('tailwindcss').Config} */\n\n// eslint-disable-next-line @typescript-eslint/no-var-requires\nconst sharedConfig = require('tailwind-config/tailwind.config.cjs')\n\nmodule.exports = {\n  presets: [sharedConfig],\n  content: ['./src/**/*.{js,ts,jsx,tsx,mdx}'],\n}\n"
  },
  {
    "path": "packages/ui/tsconfig.json",
    "content": "{\n  \"extends\": \"ts-config/react-library.json\",\n  \"include\": [\".\"],\n  \"exclude\": [\"dist\", \"build\", \"node_modules\"],\n}\n"
  },
  {
    "path": "pnpm-workspace.yaml",
    "content": "packages:\n  - \"apps/*\"\n  - \"packages/*\"\n  - \"scripts\""
  },
  {
    "path": "prettier.config.cjs",
    "content": "/** @type {import('prettier').Config} */\n\nmodule.exports = {\n  semi: false,\n  singleQuote: true,\n  //\n  importOrder: [\n    '^react$',\n    '<THIRD_PARTY_MODULES>',\n    '',\n    '^[@/]',\n    '^[./]',\n    '',\n    '^(?!.*[.]css$)[./].*$',\n    '.css$',\n  ],\n  importOrderBuiltinModulesToTop: true,\n  importOrderCaseInsensitive: true,\n  importOrderParserPlugins: ['typescript', 'jsx', 'decorators-legacy'],\n  importOrderMergeDuplicateImports: true,\n  importOrderCombineTypeAndValueImports: true,\n  importOrderSeparation: true,\n  importOrderSortSpecifiers: true,\n  plugins: ['@ianvs/prettier-plugin-sort-imports'],\n}\n"
  },
  {
    "path": "scripts/package.json",
    "content": "{\n  \"name\": \"scripts\",\n  \"version\": \"1.0.0\",\n  \"type\": \"module\",\n  \"private\": true,\n  \"scripts\": {\n    \"migrate-stories\": \"ts-node src/migrate.ts\",\n    \"build-registry\": \"ts-node src/build-registry.ts\"\n  },\n  \"dependencies\": {\n    \"find-up\": \"6.3.0\",\n    \"fs-extra\": \"11.1.1\",\n    \"ts-morph\": \"19.0.0\",\n    \"ts-pattern\": \"5.0.3\"\n  },\n  \"devDependencies\": {\n    \"@types/fs-extra\": \"11.0.1\",\n    \"@types/node\": \"18.16.19\",\n    \"@types/prettier\": \"2.7.3\",\n    \"ts-node\": \"10.9.1\",\n    \"typescript\": \"5.1.6\",\n    \"ts-config\": \"workspace:*\"\n  }\n}\n"
  },
  {
    "path": "scripts/src/build-registry.ts",
    "content": "import { dirname, join } from 'path'\n\nimport { findUpSync } from 'find-up'\nimport { outputFile, remove } from 'fs-extra'\nimport { Project } from 'ts-morph'\n\n// eslint-disable-next-line @typescript-eslint/no-non-null-assertion\nconst root = dirname(findUpSync('pnpm-lock.yaml')!)\nprocess.chdir(join(root, 'apps', 'storybook'))\n\nconst project = new Project({})\nproject.addSourceFilesAtPaths('src/**/stories/*.tsx')\n\nconst sourceFiles = project.getSourceFiles()\n\n// ----------------------------------------------------------------------------\n// Build __registry__/index.tsx.\n// ----------------------------------------------------------------------------\ntype ComponentRegistry = Record<\n  string,\n  Record<\n    string,\n    {\n      name: string\n      story: string\n      component: string\n      file: string\n    }\n  >\n>\n\nfunction generateNested(registry: ComponentRegistry): string {\n  let nestedStory = '{\\n'\n  for (const component in registry) {\n    nestedStory += `  \"${component}\": {\\n`\n    for (const story in registry[component]) {\n      const entry = registry[component][story]\n      nestedStory += `    \"${story}\": {\\n`\n      nestedStory += `      name: \"${entry.name}\",\\n`\n      nestedStory += `      story: \"${entry.story}\",\\n`\n      nestedStory += `      component: ${entry.component},\\n`\n      nestedStory += `      file: \"${entry.file}\"\\n`\n      nestedStory += '    },\\n'\n    }\n    nestedStory += '  },\\n'\n  }\n  nestedStory += '}'\n  return nestedStory\n}\n\nconst buildRegistryIndex = async () => {\n  const registry: ComponentRegistry = {}\n\n  sourceFiles.forEach((file) => {\n    const component = file.getDirectory().getParent()?.getBaseName()\n    if (!component) {\n      console.log('Component not found')\n      return\n    }\n    const story = file.getBaseNameWithoutExtension()\n    if (!story) {\n      console.log(`Story not found for: ${component}`)\n      return\n    }\n\n    if (!registry[component]) {\n      registry[component] = {}\n    }\n\n    registry[component][story] = {\n      name: `${component}-${story}`,\n      story,\n      component: `React.lazy(() => import(\"@/registry/${component}/${story}\"))`,\n      file: `registry/${component}/${story}.tsx`,\n    }\n  })\n\n  const index = `/* eslint-disable prettier/prettier */\n// @ts-nocheck\n// This file is autogenerated by scripts/build-registry.ts\n// Do not edit this file directly.\nimport * as React from \"react\"\n\ntype ComponentRegistry = Record<\n  string,\n  Record<\n    string,\n    {\n      name: string\n      story: string\n      component: string\n      file: string\n    }\n  >\n>\n\nexport const Index: ComponentRegistry = ${generateNested(registry)};\n`\n\n  const outPath = join(root, 'apps', 'docs', '__registry__', 'index.tsx')\n  await remove(outPath)\n  await outputFile(outPath, index)\n}\n\n// ----------------------------------------------------------------------------\n// Build registry/[component]/[variant].tsx.\n// ----------------------------------------------------------------------------\n\nconst copyDemoComponents = async () => {\n  const registryDir = join(root, 'apps', 'docs', 'registry')\n  await remove(registryDir)\n\n  await Promise.all(\n    sourceFiles.map(async (file) => {\n      const component = file.getDirectory().getParent()?.getBaseName()\n      if (!component) {\n        console.log('Component baseName not found')\n        return\n      }\n      const variant = file.getBaseNameWithoutExtension()\n      if (!variant) {\n        console.log(`Variant not found for: ${component}`)\n        return\n      }\n\n      let fileContents = file.getText()\n      fileContents = fileContents.replace(/\\n$/, '').replace('../lib', '@/lib')\n      const newPath = join(registryDir, `${component}`, `${variant}.tsx`)\n\n      await outputFile(newPath, fileContents)\n    }),\n  )\n}\n\n// ----------------------------------------------------------------------------\n// Run\n// ----------------------------------------------------------------------------\n\nbuildRegistryIndex().catch((err) => {\n  console.error(err.message)\n  process.exit(1)\n})\n\ncopyDemoComponents().catch((err) => {\n  console.error(err.message)\n  process.exit(1)\n})\n\nconsole.log('✅ Done!')\n"
  },
  {
    "path": "scripts/tsconfig.json",
    "content": "{\n    \"extends\": \"ts-config/base.json\",\n    \"compilerOptions\": {\n        \"target\": \"esnext\",\n        \"module\": \"esnext\",\n    },\n    \"ts-node\": {\n        \"esm\": true\n    },\n    \"include\": [\n        \"src\"\n    ]\n}"
  },
  {
    "path": "tsconfig.json",
    "content": "{\n  \"extends\": \"ts-config/base.json\",\n  \"include\": [\".\"],\n  \"exclude\": [\"node_modules\"],\n  \"compilerOptions\": {\n    \"jsx\": \"react-jsx\",\n  },\n}\n"
  },
  {
    "path": "turbo.json",
    "content": "{\n  \"$schema\": \"https://turbo.build/schema.json\",\n  \"globalDependencies\": [\"**/.env.*local\"],\n  \"pipeline\": {\n    \"build\": {\n      \"outputs\": [\"storybook-static/**\", \".next/**\", \"!.next/cache/**\"]\n    },\n    \"build-registry\": {\n      \"cache\": false\n    },\n    \"dev\": {\n      \"cache\": false,\n      \"persistent\": true\n    },\n    \"lint\": {},\n    \"storybook\": {},\n    \"topo\": {\n      \"dependsOn\": [\"^topo\"]\n    },\n    \"typecheck\": {\n      \"dependsOn\": [\"topo\"]\n    }\n  }\n}\n"
  },
  {
    "path": "vercel.json",
    "content": "{\n  \"github\": {\n    \"silent\": true\n  }\n}\n"
  }
]