[
  {
    "path": ".github/CONTRIBUTING.md",
    "content": "# Contributing\n\n## Publishing\n\nThis section is intended only for the project maintainers.\n\n1. Increment the version number in the `package.json`, `./react/package.json` and `./vue/package.json` files, and run `npm install` from the project root to update `package-lock.json`.\n2. Update the changelog.\n3. Commit and tag those changes.\n4. Push the commit and tag to GitHub.\n5. Review the draft release generated by GitHub.\n6. Publish the new release on GitHub. This will automatically trigger a GitHub action to publish these packages to NPM.\n"
  },
  {
    "path": ".github/ISSUE_TEMPLATE/config.yml",
    "content": "blank_issues_enabled: false\ncontact_links:\n  - name: Get Help\n    url: https://github.com/tailwindlabs/heroicons/discussions/new?category=help\n    about: If you can't get something to work the way you expect, open a question in our discussion forums.\n  - name: Icon Suggestion\n    url: https://github.com/tailwindlabs/heroicons/discussions/new?category=ideas\n    about: 'Suggest any icon ideas you have using our discussion forums.'\n  - name: Bug Report\n    url: https://github.com/tailwindlabs/heroicons/issues/new\n    about: If you think you've found an actual bug, create a bug report.\n"
  },
  {
    "path": ".github/workflows/CI.yml",
    "content": "name: CI\n\non:\n  push:\n    branches: [master]\n  pull_request:\n    branches: [master]\n\npermissions:\n  contents: read\n\nenv:\n  CI: true\n\njobs:\n  build:\n    runs-on: ubuntu-latest\n\n    strategy:\n      matrix:\n        node-version: [18]\n\n    steps:\n      - uses: actions/checkout@v3\n\n      - name: Use Node.js ${{ matrix.node-version }}\n        uses: actions/setup-node@v3\n        with:\n          node-version: ${{ matrix.node-version }}\n          registry-url: 'https://registry.npmjs.org'\n\n      - name: Use cached node_modules\n        uses: actions/cache@v3\n        with:\n          path: node_modules\n          key: ${{ runner.os }}-${{ matrix.node-version }}-node_modules-${{ hashFiles('**/package-lock.json') }}\n\n      - name: Install dependencies\n        run: npm install\n\n      - name: Build\n        run: npm run build\n"
  },
  {
    "path": ".github/workflows/prepare-release.yml",
    "content": "name: Prepare Release\n\non:\n  workflow_dispatch:\n  push:\n    tags:\n      - 'v*'\n\nenv:\n  CI: true\n\npermissions:\n  contents: read\n\njobs:\n  build:\n    permissions:\n      contents: write # for softprops/action-gh-release to create GitHub release\n\n    runs-on: ubuntu-latest\n\n    strategy:\n      matrix:\n        node-version: [18]\n\n    steps:\n      - uses: actions/checkout@v3\n\n      - run: git fetch --tags -f\n\n      - name: Resolve version\n        id: vars\n        run: |\n          echo \"TAG_NAME=$(git describe --tags --abbrev=0)\" >> $GITHUB_ENV\n\n      - name: Get release notes\n        run: |\n          RELEASE_NOTES=$(npm run release-notes --silent)\n          echo \"RELEASE_NOTES<<EOF\" >> $GITHUB_ENV\n          echo \"$RELEASE_NOTES\" >> $GITHUB_ENV\n          echo \"EOF\" >> $GITHUB_ENV\n\n      - name: Use Node.js ${{ matrix.node-version }}\n        uses: actions/setup-node@v3\n        with:\n          node-version: ${{ matrix.node-version }}\n          registry-url: 'https://registry.npmjs.org'\n\n      - name: Release\n        uses: softprops/action-gh-release@v1\n        with:\n          draft: true\n          tag_name: ${{ env.TAG_NAME }}\n          body: |\n            ${{ env.RELEASE_NOTES }}\n"
  },
  {
    "path": ".github/workflows/release-insiders.yml",
    "content": "name: Release Insiders\n\non:\n  push:\n    branches: [master]\n\npermissions:\n  contents: read\n  id-token: write\n\nenv:\n  CI: true\n\njobs:\n  build:\n    runs-on: ubuntu-latest\n\n    strategy:\n      matrix:\n        node-version: [18]\n\n    steps:\n      - uses: actions/checkout@v3\n\n      - name: Use Node.js ${{ matrix.node-version }}\n        uses: actions/setup-node@v3\n        with:\n          node-version: ${{ matrix.node-version }}\n          registry-url: 'https://registry.npmjs.org'\n\n      - name: Use cached node_modules\n        id: cache\n        uses: actions/cache@v3\n        with:\n          path: node_modules\n          key: nodeModules-${{ hashFiles('**/package-lock.json') }}-${{ matrix.node-version }}\n          restore-keys: |\n            nodeModules-\n\n      - name: Install dependencies\n        if: steps.cache.outputs.cache-hit != 'true'\n        run: npm install\n\n      - name: Calculate environment variables\n        run: |\n          echo \"SHA_SHORT=$(git rev-parse --short HEAD)\" >> $GITHUB_ENV\n\n      - name: 'Version `heroicons` based on commit: 0.0.0-insiders.${{ env.SHA_SHORT }}'\n        run: npm version 0.0.0-insiders.${{ env.SHA_SHORT }} --force --no-git-tag-version\n\n      - name: 'Version `@heroicons/react` based on commit: 0.0.0-insiders.${{ env.SHA_SHORT }}'\n        run: npm version 0.0.0-insiders.${{ env.SHA_SHORT }} --force --no-git-tag-version --prefix react\n\n      - name: 'Version `@heroicons/vue` based on commit: 0.0.0-insiders.${{ env.SHA_SHORT }}'\n        run: npm version 0.0.0-insiders.${{ env.SHA_SHORT }} --force --no-git-tag-version --prefix vue\n\n      - name: Publish `heroicons`\n        run: npm publish --provenance --tag insiders\n        env:\n          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}\n\n      - name: Publish `@heroicons/react`\n        run: npm publish ./react --provenance --tag insiders\n        env:\n          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}\n\n      - name: Publish `@heroicons/vue`\n        run: npm publish ./vue --provenance --tag insiders\n        env:\n          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}\n"
  },
  {
    "path": ".github/workflows/release.yml",
    "content": "name: Release\n\non:\n  release:\n    types: [published]\n\npermissions:\n  contents: read\n  id-token: write\n\nenv:\n  CI: true\n\njobs:\n  build:\n    runs-on: ubuntu-latest\n\n    strategy:\n      matrix:\n        node-version: [18]\n\n    steps:\n      - uses: actions/checkout@v3\n\n      - name: Use Node.js ${{ matrix.node-version }}\n        uses: actions/setup-node@v3\n        with:\n          node-version: ${{ matrix.node-version }}\n          registry-url: 'https://registry.npmjs.org'\n\n      - name: Use cached node_modules\n        id: cache\n        uses: actions/cache@v3\n        with:\n          path: node_modules\n          key: nodeModules-${{ hashFiles('**/package-lock.json') }}-${{ matrix.node-version }}\n          restore-keys: |\n            nodeModules-\n\n      - name: Install dependencies\n        if: steps.cache.outputs.cache-hit != 'true'\n        run: npm install\n\n      - name: Calculate environment variables\n        run: |\n          echo \"RELEASE_CHANNEL=$(npm run release-channel --silent)\" >> $GITHUB_ENV\n\n      - name: Publish `heroicons`\n        run: npm publish --provenance --tag ${{ env.RELEASE_CHANNEL }}\n        env:\n          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}\n\n      - name: Publish `@heroicons/react`\n        run: npm publish ./react --provenance --tag ${{ env.RELEASE_CHANNEL }}\n        env:\n          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}\n\n      - name: Publish `@heroicons/vue`\n        run: npm publish ./vue --provenance --tag ${{ env.RELEASE_CHANNEL }}\n        env:\n          NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}\n"
  },
  {
    "path": ".gitignore",
    "content": ".DS_Store\n/node_modules\n/16\n/20\n/24\n"
  },
  {
    "path": "CHANGELOG.md",
    "content": "# Changelog\n\nAll notable changes to this project will be documented in this file.\n\nThe format is based on [Keep a Changelog](https://keepachangelog.com/),\nand this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).\n\n## [Unreleased]\n\n- Nothing yet!\n\n## [2.2.0] - 2024-11-18\n\n### Added\n\n- Add React 19 support ([#1247](https://github.com/tailwindlabs/heroicons/pull/1247))\n\n### Fixed\n\n- Removed unnecessary clipping path from `solid/arrow-left-circle` ([#1211](https://github.com/tailwindlabs/heroicons/pull/1211))\n\n## [2.1.5] - 2024-07-10\n\n### Added\n\n- Add new icons (`arrow-turn-*`, `bold`, `calendar-date-range`, `divide`, `document-currency-*`, `equals`, `h1`, `h2`, `h3`, `italic`, `link-slash`, `numbered-list`, `percent-badge`, `slash`, `strikethrough`, `underline`)\n\n## [2.1.4] - 2024-06-17\n\n### Fixed\n\n- Improve tree-shakability of React package ([#1192](https://github.com/tailwindlabs/heroicons/pull/1192))\n\n## [2.1.3] - 2024-03-22\n\n- Improve project READMEs ([#1152](https://github.com/tailwindlabs/heroicons/pull/1152))\n\n## [2.1.2] - 2024-03-22\n\n- Include license file with published packages ([#1151](https://github.com/tailwindlabs/heroicons/pull/1151))\n\n## [2.1.1] - 2023-12-18\n\n### Fixed\n\n- Fixed chevrons in mini set ([#1106](https://github.com/tailwindlabs/heroicons/pull/1106))\n\n## [2.1.0] - 2023-12-18\n\n### Added\n\n- Added micro icon set ([#1104](https://github.com/tailwindlabs/heroicons/pull/1104))\n- Rebuilt some icons for better clarity ([#1104](https://github.com/tailwindlabs/heroicons/pull/1104))\n\n## [2.0.18] - 2023-05-09\n\n### Fixed\n\n- Fix incorrect `esm` paths in package.json for both React and Vue ([#988](https://github.com/tailwindlabs/heroicons/pull/988))\n\n## [2.0.17] - 2023-03-30\n\n### Fixed\n\n- Fix React icon types ([#966](https://github.com/tailwindlabs/heroicons/pull/966))\n\n## [2.0.16] - 2023-02-17\n\n### Fixed\n\n- Add root-level import ([#936](https://github.com/tailwindlabs/heroicons/pull/936))\n\n## [2.0.15] - 2023-02-08\n\n### Fixed\n\n- Fix icon tree-shaking ([#929](https://github.com/tailwindlabs/heroicons/pull/929))\n\n## [2.0.14] - 2023-01-25\n\n### Fixed\n\n- Fix React ref types ([#903](https://github.com/tailwindlabs/heroicons/pull/903))\n\n### Changed\n\n- Specify explicit package exports ([#920](https://github.com/tailwindlabs/heroicons/pull/920))\n\n## [2.0.13] - 2022-11-02\n\n### Fixed\n\n- Fix `minus` icon alignment ([0a88242](https://github.com/tailwindlabs/heroicons/commit/0a88242ffddbd79177b8cd4cf954d3a54be121a6))\n\n## [2.0.12] - 2022-10-05\n\n### Fixed\n\n- Add `title` and `titleId` props to the React types ([#814](https://github.com/tailwindlabs/heroicons/pull/814))\n- Fix `information-circle` icon alignment ([#846](https://github.com/tailwindlabs/heroicons/pull/846))\n\n## [2.0.11] - 2022-09-12\n\n### Added\n\n- Add new icons (`bug-ant`, `eye-dropper`, `pause-circle`, `play-circle`, `power`, `rocket-launch`, `square-2-stack-3d`, `stop-circle`, `trophy`, `tv`, `viewfinder-circle`, `window`) ([#809](https://github.com/tailwindlabs/heroicons/pull/809))\n\n## [2.0.10] - 2022-08-30\n\n## Fixed\n\n- Fix `arrow-path` direction and fix optical alignment of `exclamation-triangle` ([#786](https://github.com/tailwindlabs/heroicons/pull/786))\n\n## [2.0.9] - 2022-08-30\n\n## Added\n\n- Add new icons (`arrow-small-down`, `arrow-small-left`, `arrow-small-right`, `arrow-small-up`, `battery-0`, `battery-100`, `battery-50`, `cube-transparent`, `currency-bangladeshi`, `minus-small`, `paint-brush`, `plus-small`, `variable`, `wallet`, `arrow-path-rounded-square`) and fix optical alignment and appearance of icons (`bookmark-slash`, `bookmark`, `exclamation-triangle`, `table-cells`, `view-columns`, `arrow-path`) ([#785](https://github.com/tailwindlabs/heroicons/pull/785))\n\n## [2.0.8] - 2022-08-26\n\n## Fixed\n\n- Fix optical alignment and size of icons (`heart`, `minus`, `pencil-square`, `user-plus`, `x-mark`, `hand-thumb-up`, `hand-thumb-down`) ([#767](https://github.com/tailwindlabs/heroicons/pull/767))\n- Fix size of icons (`arrow-down-left`, `arrow-down-right`, `arrow-down`, `arrow-left`, `arrow-right`, `arrow-up-left`, `arrow-up-right`, `arrow-up`) ([#768](https://github.com/tailwindlabs/heroicons/pull/768))\n- Fix optical alignment and size of `tag` icon ([#769](https://github.com/tailwindlabs/heroicons/pull/769))\n- Fix size of `check` icon ([#770](https://github.com/tailwindlabs/heroicons/pull/770))\n\n## Added\n\n- Add `user-minus` icon\n\n## [2.0.7] - 2022-08-25\n\n## Fixed\n\n- Improve optical alignment and sizing of icons (`hand-thumb-up`, `hand-thumb-down`, `plus`, `minus`) ([#746](https://github.com/tailwindlabs/heroicons/pull/746))\n\n## [2.0.6] - 2022-08-25\n\n## Fixed\n\n- Fix size of icons (`chevron-double-down`, `chevron-double-left`, `chevron-double-right`, `chevron-double-up`, `chevron-down`, `chevron-left`, `chevron-right`, `chevron-up`, `funnel`, `minus`, `plus`) ([#763](https://github.com/tailwindlabs/heroicons/pull/763))\n\n## [2.0.5] - 2022-08-25\n\n## Fixed\n\n- Modify the curved design of the `check-*` icons to a straight check ([#762](https://github.com/tailwindlabs/heroicons/pull/762))\n\n## [2.0.4] - 2022-08-24\n\n## Fixed\n\n- Remove additional stroke from outline icons (`bars-arrow-down`,`bars-arrow-up`,`chevron-up-down`, `rss`) ([#759](https://github.com/tailwindlabs/heroicons/pull/759))\n\n## [2.0.3] - 2022-08-24\n\n### Added\n\n- Add missing icons from v1 (`bars-arrow-down`,`bars-arrow-up`,`chevron-up-down`, `rss`) ([#758](https://github.com/tailwindlabs/heroicons/pull/758))\n\n### Fixed\n\n- Fix inconsistent naming for 'code-bracket' icons (#756)\n\n## [2.0.2] - 2022-08-24\n\n### Fixed\n\n- Fix typo in `exclamation-*` icons (#735)\n\n## [2.0.1] - 2022-08-23\n\n## Added\n\n- Warn when trying to import from v1 paths ([f508658](https://github.com/tailwindlabs/heroicons/commit/f5086588a9b25fd425578fbe185deb38d6b8505f))\n\n## [2.0.0] - 2022-08-23\n\n### Added\n\n- Completely new icon set, checkout the [release notes](https://github.com/tailwindlabs/heroicons/releases/tag/v2.0.0) for more info.\n\n## [1.0.6] - 2022-03-02\n\n### Added\n\n- Add `forwardRef` support for React components ([#614](https://github.com/tailwindlabs/heroicons/pull/614))\n\n### Fixed\n\n- Add `sideEffects` to `package.json` files ([#572](https://github.com/tailwindlabs/heroicons/pull/572))\n- Fix folder icons ([#598](https://github.com/tailwindlabs/heroicons/pull/598))\n- Fix Vue TypeScript declarations ([#608](https://github.com/tailwindlabs/heroicons/pull/608))\n- Move `stroke-width` from `path` to `svg` ([#631](https://github.com/tailwindlabs/heroicons/pull/631))\n\n## [1.0.5] - 2021-10-22\n\n### Fixed\n\n- Add MIT license to `package.json` files ([#317](https://github.com/tailwindlabs/heroicons/pull/317))\n- Add `aria-hidden=\"true\"` attribute ([#261](https://github.com/tailwindlabs/heroicons/pull/261))\n- Fix solid `arrows-expand` fill color ([#515](https://github.com/tailwindlabs/heroicons/pull/515))\n- Add `{\"type\": \"module\"}` to `esm` `package.json` files\n\n## [1.0.4] - 2021-08-17\n\n### Fixed\n\n- Fix Vue type declarations ([#322](https://github.com/tailwindlabs/heroicons/pull/322))\n\n## [1.0.3] - 2021-07-26\n\n### Added\n\n- Add Vue type declarations ([#254](https://github.com/tailwindlabs/heroicons/pull/254))\n\n## [1.0.2] - 2021-07-09\n\n### Fixed\n\n- Add correct `plus` icons\n\n## [1.0.1] - 2021-04-14\n\n### Added\n\n- Add small arrow icons (`arrow-sm-up`, `arrow-sm-right`, `arrow-sm-down`, `arrow-sm-left`)\n\n## [1.0.0] - 2021-03-29\n\n## [0.4.2] - 2020-09-02\n\n## [0.4.1] - 2020-08-26\n\n## [0.4.0] - 2020-08-25\n\n### Fixed\n\n- Don't run build scripts on install\n\n## [0.3.7] - 2020-07-23\n\n## [0.3.6] - 2020-06-02\n\n## [0.3.5] - 2020-06-01\n\n## [0.3.4] - 2020-06-01\n\n## [0.3.3] - 2020-06-01\n\n## [0.3.2] - 2020-06-01\n\n## [0.3.1] - 2020-06-01\n\n## [0.3.0] - 2020-06-01\n\n### Added\n\n- Add 22 new icons (`fire`, `shopping-bag`, `thumb-up`, `thumb-down`, `hand`, `arrows-expand`, `view-grid`, `puzzle`, `folder-download`, `folder-add`, `folder-remove`) ([60e6750](https://github.com/tailwindlabs/heroicons/commit/60e6750e1cee2477e62f62f54f4023690de7336c))\n- Add React and Vue components ([aa8fe98](https://github.com/tailwindlabs/heroicons/commit/aa8fe98dc1106fe0cfd68f0c91b2fa1c4f7a147a))\n\n## [0.2.0] - 2020-05-18\n\n### Added\n\n- Everything!\n\n[unreleased]: https://github.com/tailwindlabs/heroicons/compare/v2.2.0...HEAD\n[2.2.0]: https://github.com/tailwindlabs/heroicons/compare/v2.1.5...v2.2.0\n[2.1.5]: https://github.com/tailwindlabs/heroicons/compare/v2.1.4...v2.1.5\n[2.1.4]: https://github.com/tailwindlabs/heroicons/compare/v2.1.3...v2.1.4\n[2.1.3]: https://github.com/tailwindlabs/heroicons/compare/v2.1.2...v2.1.3\n[2.1.2]: https://github.com/tailwindlabs/heroicons/compare/v2.1.1...v2.1.2\n[2.1.1]: https://github.com/tailwindlabs/heroicons/compare/v2.1.0...v2.1.1\n[2.1.0]: https://github.com/tailwindlabs/heroicons/compare/v2.0.18...v2.1.0\n[2.0.18]: https://github.com/tailwindlabs/heroicons/compare/v2.0.17...v2.0.18\n[2.0.17]: https://github.com/tailwindlabs/heroicons/compare/v2.0.16...v2.0.17\n[2.0.16]: https://github.com/tailwindlabs/heroicons/compare/v2.0.15...v2.0.16\n[2.0.15]: https://github.com/tailwindlabs/heroicons/compare/v2.0.14...v2.0.15\n[2.0.14]: https://github.com/tailwindlabs/heroicons/compare/v2.0.13...v2.0.14\n[2.0.13]: https://github.com/tailwindlabs/heroicons/compare/v2.0.12...v2.0.13\n[2.0.12]: https://github.com/tailwindlabs/heroicons/compare/v2.0.11...v2.0.12\n[2.0.11]: https://github.com/tailwindlabs/heroicons/compare/v2.0.10...v2.0.11\n[2.0.10]: https://github.com/tailwindlabs/heroicons/compare/v2.0.9...v2.0.10\n[2.0.9]: https://github.com/tailwindlabs/heroicons/compare/v2.0.8...v2.0.9\n[2.0.8]: https://github.com/tailwindlabs/heroicons/compare/v2.0.7...v2.0.8\n[2.0.7]: https://github.com/tailwindlabs/heroicons/compare/v2.0.6...v2.0.7\n[2.0.6]: https://github.com/tailwindlabs/heroicons/compare/v2.0.5...v2.0.6\n[2.0.5]: https://github.com/tailwindlabs/heroicons/compare/v2.0.4...v2.0.5\n[2.0.4]: https://github.com/tailwindlabs/heroicons/compare/v2.0.3...v2.0.4\n[2.0.3]: https://github.com/tailwindlabs/heroicons/compare/v2.0.2...v2.0.3\n[2.0.2]: https://github.com/tailwindlabs/heroicons/compare/v2.0.1...v2.0.2\n[2.0.1]: https://github.com/tailwindlabs/heroicons/compare/v2.0.0...v2.0.1\n[2.0.0]: https://github.com/tailwindlabs/heroicons/compare/v1.0.6...v2.0.0\n[1.0.6]: https://github.com/tailwindlabs/heroicons/compare/v1.0.5...v1.0.6\n[1.0.5]: https://github.com/tailwindlabs/heroicons/compare/v1.0.4...v1.0.5\n[1.0.4]: https://github.com/tailwindlabs/heroicons/compare/v1.0.3...v1.0.4\n[1.0.3]: https://github.com/tailwindlabs/heroicons/compare/v1.0.2...v1.0.3\n[1.0.2]: https://github.com/tailwindlabs/heroicons/compare/v1.0.1...v1.0.2\n[1.0.1]: https://github.com/tailwindlabs/heroicons/compare/v1.0.0...v1.0.0\n[1.0.0]: https://github.com/tailwindlabs/heroicons/compare/v0.4.2...v1.0.0\n[0.4.2]: https://github.com/tailwindlabs/heroicons/compare/v0.4.1...v0.4.2\n[0.4.1]: https://github.com/tailwindlabs/heroicons/compare/v0.4.0...v0.4.1\n[0.4.0]: https://github.com/tailwindlabs/heroicons/compare/v0.3.7...v0.4.0\n[0.3.7]: https://github.com/tailwindlabs/heroicons/compare/v0.3.6...v0.3.7\n[0.3.6]: https://github.com/tailwindlabs/heroicons/compare/v0.3.5...v0.3.6\n[0.3.5]: https://github.com/tailwindlabs/heroicons/compare/v0.3.4...v0.3.5\n[0.3.4]: https://github.com/tailwindlabs/heroicons/compare/v0.3.3...v0.3.4\n[0.3.3]: https://github.com/tailwindlabs/heroicons/compare/v0.3.2...v0.3.3\n[0.3.2]: https://github.com/tailwindlabs/heroicons/compare/v0.3.1...v0.3.2\n[0.3.1]: https://github.com/tailwindlabs/heroicons/compare/v0.3.0...v0.3.1\n[0.3.0]: https://github.com/tailwindlabs/heroicons/compare/v0.2.0...v0.3.0\n[0.2.0]: https://github.com/tailwindlabs/heroicons/releases/tag/v0.2.0\n"
  },
  {
    "path": "LICENSE",
    "content": "MIT License\n\nCopyright (c) Tailwind Labs, Inc.\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n"
  },
  {
    "path": "README.md",
    "content": "<p align=\"center\">\n  <a href=\"https://heroicons.com\" target=\"_blank\">\n    <picture>\n      <source media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/tailwindlabs/heroicons/HEAD/.github/logo-dark.svg\">\n      <source media=\"(prefers-color-scheme: light)\" srcset=\"https://raw.githubusercontent.com/tailwindlabs/heroicons/HEAD/.github/logo-light.svg\">\n      <img alt=\"Heroicons\" width=\"315\" height=\"117\" style=\"max-width: 100%\" src=\"https://raw.githubusercontent.com/tailwindlabs/heroicons/HEAD/.github/logo-light.svg\">\n    </picture>\n  </a>\n</p>\n\n<p align=\"center\">\n  Beautiful hand-crafted SVG icons, by the makers of Tailwind CSS. <br>Available as basic SVG icons and via first-party <a href=\"#react\">React</a> and <a href=\"#vue\">Vue</a> libraries.\n<p>\n\n<p align=\"center\">\n  <a href=\"https://heroicons.com\"><strong>Browse at Heroicons.com &rarr;</strong></a>\n</p>\n\n<p align=\"center\">\n    <a href=\"https://github.com/tailwindlabs/heroicons/releases\"><img src=\"https://img.shields.io/npm/v/heroicons\" alt=\"Latest Release\"></a>\n    <a href=\"https://github.com/tailwindlabs/heroicons/blob/master/LICENSE\"><img src=\"https://img.shields.io/npm/l/heroicons.svg\" alt=\"License\"></a>\n</p>\n\n## Basic Usage\n\nThe quickest way to use these icons is to simply copy the source for the icon you need from [heroicons.com](https://heroicons.com) and inline it directly into your HTML:\n\n```html\n<svg\n  class=\"size-6 text-gray-500\"\n  fill=\"none\"\n  viewBox=\"0 0 24 24\"\n  stroke=\"currentColor\"\n  stroke-width=\"2\"\n>\n  <path\n    stroke-linecap=\"round\"\n    stroke-linejoin=\"round\"\n    d=\"M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z\"\n  />\n</svg>\n```\n\nBoth icon styles are preconfigured to be stylable by setting the `color` CSS property, either manually or using utility classes like `text-gray-500` in a framework like [Tailwind CSS](https://tailwindcss.com).\n\n## React\n\nFirst, install `@heroicons/react` from npm:\n\n```sh\nnpm install @heroicons/react\n```\n\nNow each icon can be imported individually as a React component:\n\n```js\nimport { BeakerIcon } from '@heroicons/react/24/solid'\n\nfunction MyComponent() {\n  return (\n    <div>\n      <BeakerIcon className=\"size-6 text-blue-500\" />\n      <p>...</p>\n    </div>\n  )\n}\n```\n\nThe 24x24 outline icons can be imported from `@heroicons/react/24/outline`, the 24x24 solid icons can be imported from `@heroicons/react/24/solid`, the 20x20 solid icons can be imported from `@heroicons/react/20/solid`, and 16x16 solid icons can be imported from `@heroicons/react/16/solid`.\n\nIcons use an upper camel case naming convention and are always suffixed with the word `Icon`.\n\n[Browse the full list of icon names on UNPKG &rarr;](https://unpkg.com/browse/@heroicons/react/24/outline/)\n\n## Vue\n\nFirst, install `@heroicons/vue` from npm:\n\n```sh\nnpm install @heroicons/vue\n```\n\nNow each icon can be imported individually as a Vue component:\n\n```vue\n<template>\n  <div>\n    <BeakerIcon class=\"size-6 text-blue-500\" />\n    <p>...</p>\n  </div>\n</template>\n\n<script setup>\nimport { BeakerIcon } from '@heroicons/vue/24/solid'\n</script>\n```\n\nThe 24x24 outline icons can be imported from `@heroicons/vue/24/outline`, the 24x24 solid icons can be imported from `@heroicons/vue/24/solid`, the 20x20 solid icons can be imported from `@heroicons/vue/20/solid`, and the 16x16 solid icons can be imported from `@heroicons/vue/16/solid`.\n\nIcons use an upper camel case naming convention and are always suffixed with the word `Icon`.\n\n[Browse the full list of icon names on UNPKG &rarr;](https://unpkg.com/browse/@heroicons/vue/24/outline/)\n\n## Contributing\n\nWhile we absolutely appreciate anyone's willingness to try and improve the project, we're currently only interested in contributions that fix bugs, for example things like incorrect TypeScript types, or fixing an icon that's been exported with a fill instead of a stroke, etc.\n\n**We're not accepting contributions for new icons or adding support for other frameworks like Svelte or SolidJS**. Instead we encourage you to release your own icons in your own library, and create your own packages for any other frameworks you'd like to see supported.\n\n## License\n\nThis library is MIT licensed.\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"name\": \"heroicons\",\n  \"license\": \"MIT\",\n  \"version\": \"2.2.0\",\n  \"description\": \"A set of free MIT-licensed high-quality SVG icons for UI development.\",\n  \"keywords\": [\n    \"icons\",\n    \"svg\",\n    \"tailwindcss\"\n  ],\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git+https://github.com/tailwindlabs/heroicons.git\"\n  },\n  \"files\": [\n    \"16/\",\n    \"20/\",\n    \"24/\",\n    \"README.md\",\n    \"LICENSE\"\n  ],\n  \"scripts\": {\n    \"prepublishOnly\": \"npm run build\",\n    \"lint\": \"node ./scripts/verify-names.js\",\n    \"prebuild\": \"rimraf ./{16,20,24} ./{vue,react}/{16,20,24} ./optimized/{16,20,24}\",\n    \"build\": \"npm run build-24-outline && npm run build-20-solid && npm run build-24-solid && npm run build-16-solid && npm run build-react && npm run build-vue\",\n    \"build-react\": \"node ./scripts/build.js react\",\n    \"build-vue\": \"node ./scripts/build.js vue\",\n    \"build-24-outline\": \"rimraf ./24/outline ./optimized/24/outline && svgo --config=svgo.24.outline.mjs -f ./src/24/outline -o ./optimized/24/outline --pretty --indent=2 && mkdir -p ./24 && cp -R ./optimized/24/outline ./24/outline\",\n    \"build-16-solid\": \"rimraf ./16/solid ./optimized/16/solid && svgo --config=svgo.16.solid.mjs -f ./src/16/solid -o ./optimized/16/solid --pretty --indent=2 && mkdir -p ./16 && cp -R ./optimized/16/solid ./16/solid\",\n    \"build-20-solid\": \"rimraf ./20/solid ./optimized/20/solid && svgo --config=svgo.20.solid.mjs -f ./src/20/solid -o ./optimized/20/solid --pretty --indent=2 && mkdir -p ./20 && cp -R ./optimized/20/solid ./20/solid\",\n    \"build-24-solid\": \"rimraf ./24/solid ./optimized/24/solid && svgo --config=svgo.24.solid.mjs -f ./src/24/solid -o ./optimized/24/solid --pretty --indent=2 && mkdir -p ./24 && cp -R ./optimized/24/solid ./24/solid\",\n    \"release-channel\": \"node ./scripts/release-channel.js\",\n    \"release-notes\": \"node ./scripts/release-notes.js\"\n  },\n  \"devDependencies\": {\n    \"@babel/core\": \"^7.27.3\",\n    \"@babel/plugin-transform-react-jsx\": \"^7.27.1\",\n    \"@svgr/core\": \"^5.5.0\",\n    \"@vue/compiler-dom\": \"^3.0.5\",\n    \"camelcase\": \"^6.0.0\",\n    \"prettier\": \"^2.8.7\",\n    \"rimraf\": \"^3.0.2\",\n    \"svgo\": \"^3.0.2\"\n  }\n}\n"
  },
  {
    "path": "prettier.config.js",
    "content": "module.exports = {\n  singleQuote: true,\n  semi: false,\n  printWidth: 100,\n}\n"
  },
  {
    "path": "react/.gitignore",
    "content": "*\n!*.js\n!.gitignore\n!package.json\n!outline\n!solid\n!LICENSE\n!README.md\n"
  },
  {
    "path": "react/LICENSE",
    "content": "MIT License\n\nCopyright (c) Tailwind Labs, Inc.\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": "react/README.md",
    "content": "<p align=\"center\">\n  <a href=\"https://heroicons.com\" target=\"_blank\">\n    <picture>\n      <source media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/tailwindlabs/heroicons/HEAD/.github/logo-dark.svg\">\n      <source media=\"(prefers-color-scheme: light)\" srcset=\"https://raw.githubusercontent.com/tailwindlabs/heroicons/HEAD/.github/logo-light.svg\">\n      <img alt=\"Heroicons\" width=\"315\" height=\"117\" style=\"max-width: 100%\" src=\"https://raw.githubusercontent.com/tailwindlabs/heroicons/HEAD/.github/logo-light.svg\">\n    </picture>\n  </a>\n</p>\n\n<p align=\"center\">Beautiful hand-crafted SVG icons, by the makers of Tailwind CSS.<p>\n\n<p align=\"center\">\n  <a href=\"https://heroicons.com\"><strong>Browse at Heroicons.com &rarr;</strong></a>\n</p>\n\n<p align=\"center\">\n    <a href=\"https://github.com/tailwindlabs/heroicons/releases\"><img src=\"https://img.shields.io/npm/v/@heroicons/react\" alt=\"Latest Release\"></a>\n    <a href=\"https://github.com/tailwindlabs/heroicons/blob/master/react/LICENSE\"><img src=\"https://img.shields.io/npm/l/@heroicons/react.svg\" alt=\"License\"></a>\n</p>\n\n## Basic Usage\n\nFirst, install `@heroicons/react` from npm:\n\n```sh\nnpm install @heroicons/react\n```\n\nNow each icon can be imported individually as a React component:\n\n```js\nimport { BeakerIcon } from '@heroicons/react/24/solid'\n\nfunction MyComponent() {\n  return (\n    <div>\n      <BeakerIcon className=\"size-6 text-blue-500\" />\n      <p>...</p>\n    </div>\n  )\n}\n```\n\nThe 24x24 outline icons can be imported from `@heroicons/react/24/outline`, the 24x24 solid icons can be imported from `@heroicons/react/24/solid`, the 20x20 solid icons can be imported from `@heroicons/react/20/solid`, and 16x16 solid icons can be imported from `@heroicons/react/16/solid`.\n\nIcons use an upper camel case naming convention and are always suffixed with the word `Icon`.\n\n[Browse the full list of icon names on UNPKG &rarr;](https://unpkg.com/browse/@heroicons/react/24/outline/)\n\n## Contributing\n\nWhile we absolutely appreciate anyone's willingness to try and improve the project, we're currently only interested in contributions that fix bugs, for example things like incorrect TypeScript types, or fixing an icon that's been exported with a fill instead of a stroke, etc.\n\n**We're not accepting contributions for new icons or adding support for other frameworks like Svelte or SolidJS**. Instead we encourage you to release your own icons in your own library, and create your own packages for any other frameworks you'd like to see supported.\n\n## License\n\nThis library is MIT licensed.\n"
  },
  {
    "path": "react/index.esm.js",
    "content": "// The only reason this file exists is to appease Vite's optimizeDeps feature which requires a root-level import.\n\nexport default new Proxy(\n  {},\n  {\n    get: (_, property) => {\n      if (property === '__esModule') {\n        return {}\n      }\n\n      throw new Error(\n        `Importing from \\`@heroicons/react\\` directly is not supported. Please import from either \\`@heroicons/react/16/solid\\`, \\`@heroicons/react/20/solid\\`, \\`@heroicons/react/24/solid\\`, or \\`@heroicons/react/24/outline\\` instead.`\n      )\n    },\n  }\n)\n"
  },
  {
    "path": "react/index.js",
    "content": "// The only reason this file exists is to appease Vite's optimizeDeps feature which requires a root-level import.\n\nmodule.exports = new Proxy(\n  {},\n  {\n    get: (_, property) => {\n      if (property === '__esModule') {\n        return {}\n      }\n\n      throw new Error(\n        `Importing from \\`@heroicons/react\\` directly is not supported. Please import from either \\`@heroicons/react/16/solid\\`, \\`@heroicons/react/20/solid\\`, \\`@heroicons/react/24/solid\\`, or \\`@heroicons/react/24/outline\\` instead.`\n      )\n    },\n  }\n)\n"
  },
  {
    "path": "react/outline/index.js",
    "content": "let proxy = new Proxy(\n  {},\n  {\n    get: (obj, property) => {\n      if (property === '__esModule') {\n        return {}\n      }\n\n      throw new Error(\n        `You\\'re trying to import \\`@heroicons/react/outline/${property}\\` from Heroicons v1 but have installed Heroicons v2. Install \\`@heroicons/react@v1\\` to resolve this error.`\n      )\n    },\n  }\n)\n\nmodule.exports = proxy\n"
  },
  {
    "path": "react/package.json",
    "content": "{\n  \"name\": \"@heroicons/react\",\n  \"license\": \"MIT\",\n  \"version\": \"2.2.0\",\n  \"description\": \"A set of free MIT-licensed high-quality SVG icons for UI development.\",\n  \"keywords\": [\n    \"icons\",\n    \"svg\",\n    \"react\",\n    \"tailwindcss\"\n  ],\n  \"homepage\": \"https://github.com/tailwindlabs/heroicons#readme\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/tailwindlabs/heroicons.git\"\n  },\n  \"files\": [\n    \"16\",\n    \"20\",\n    \"24\",\n    \"outline\",\n    \"solid\",\n    \"index.esm.js\",\n    \"index.js\",\n    \"LICENSE\",\n    \"README.md\"\n  ],\n  \"sideEffects\": false,\n  \"exports\": {\n    \".\": {\n      \"import\": \"./index.esm.js\",\n      \"require\": \"./index.js\"\n    },\n    \"./package.json\": {\n      \"default\": \"./package.json\"\n    },\n    \"./outline\": {\n      \"default\": \"./outline/index.js\"\n    },\n    \"./outline/index\": {\n      \"default\": \"./outline/index.js\"\n    },\n    \"./outline/index.js\": {\n      \"default\": \"./outline/index.js\"\n    },\n    \"./solid\": {\n      \"default\": \"./solid/index.js\"\n    },\n    \"./solid/index\": {\n      \"default\": \"./solid/index.js\"\n    },\n    \"./solid/index.js\": {\n      \"default\": \"./solid/index.js\"\n    },\n    \"./16/solid\": {\n      \"types\": \"./16/solid/index.d.ts\",\n      \"import\": \"./16/solid/esm/index.js\",\n      \"require\": \"./16/solid/index.js\"\n    },\n    \"./16/solid/*\": {\n      \"types\": \"./16/solid/*.d.ts\",\n      \"import\": \"./16/solid/esm/*.js\",\n      \"require\": \"./16/solid/*.js\"\n    },\n    \"./16/solid/*.js\": {\n      \"types\": \"./16/solid/*.d.ts\",\n      \"import\": \"./16/solid/esm/*.js\",\n      \"require\": \"./16/solid/*.js\"\n    },\n    \"./16/solid/esm/*\": {\n      \"types\": \"./16/solid/*.d.ts\",\n      \"import\": \"./16/solid/esm/*.js\"\n    },\n    \"./16/solid/esm/*.js\": {\n      \"types\": \"./16/solid/*.d.ts\",\n      \"import\": \"./16/solid/esm/*.js\"\n    },\n    \"./20/solid\": {\n      \"types\": \"./20/solid/index.d.ts\",\n      \"import\": \"./20/solid/esm/index.js\",\n      \"require\": \"./20/solid/index.js\"\n    },\n    \"./20/solid/*\": {\n      \"types\": \"./20/solid/*.d.ts\",\n      \"import\": \"./20/solid/esm/*.js\",\n      \"require\": \"./20/solid/*.js\"\n    },\n    \"./20/solid/*.js\": {\n      \"types\": \"./20/solid/*.d.ts\",\n      \"import\": \"./20/solid/esm/*.js\",\n      \"require\": \"./20/solid/*.js\"\n    },\n    \"./20/solid/esm/*\": {\n      \"types\": \"./20/solid/*.d.ts\",\n      \"import\": \"./20/solid/esm/*.js\"\n    },\n    \"./20/solid/esm/*.js\": {\n      \"types\": \"./20/solid/*.d.ts\",\n      \"import\": \"./20/solid/esm/*.js\"\n    },\n    \"./24/outline\": {\n      \"types\": \"./24/outline/index.d.ts\",\n      \"import\": \"./24/outline/esm/index.js\",\n      \"require\": \"./24/outline/index.js\"\n    },\n    \"./24/outline/*\": {\n      \"types\": \"./24/outline/*.d.ts\",\n      \"import\": \"./24/outline/esm/*.js\",\n      \"require\": \"./24/outline/*.js\"\n    },\n    \"./24/outline/*.js\": {\n      \"types\": \"./24/outline/*.d.ts\",\n      \"import\": \"./24/outline/esm/*.js\",\n      \"require\": \"./24/outline/*.js\"\n    },\n    \"./24/outline/esm/*\": {\n      \"types\": \"./24/outline/*.d.ts\",\n      \"import\": \"./24/outline/esm/*.js\"\n    },\n    \"./24/outline/esm/*.js\": {\n      \"types\": \"./24/outline/*.d.ts\",\n      \"import\": \"./24/outline/esm/*.js\"\n    },\n    \"./24/solid\": {\n      \"types\": \"./24/solid/index.d.ts\",\n      \"import\": \"./24/solid/esm/index.js\",\n      \"require\": \"./24/solid/index.js\"\n    },\n    \"./24/solid/*\": {\n      \"types\": \"./24/solid/*.d.ts\",\n      \"import\": \"./24/solid/esm/*.js\",\n      \"require\": \"./24/solid/*.js\"\n    },\n    \"./24/solid/*.js\": {\n      \"types\": \"./24/solid/*.d.ts\",\n      \"import\": \"./24/solid/esm/*.js\",\n      \"require\": \"./24/solid/*.js\"\n    },\n    \"./24/solid/esm/*\": {\n      \"types\": \"./24/solid/*.d.ts\",\n      \"import\": \"./24/solid/esm/*.js\"\n    },\n    \"./24/solid/esm/*.js\": {\n      \"types\": \"./24/solid/*.d.ts\",\n      \"import\": \"./24/solid/esm/*.js\"\n    }\n  },\n  \"publishConfig\": {\n    \"access\": \"public\"\n  },\n  \"peerDependencies\": {\n    \"react\": \">= 16 || ^19.0.0-rc\"\n  }\n}\n"
  },
  {
    "path": "react/solid/index.js",
    "content": "let proxy = new Proxy(\n  {},\n  {\n    get: (obj, property) => {\n      if (property === '__esModule') {\n        return {}\n      }\n\n      throw new Error(\n        `You\\'re trying to import \\`@heroicons/react/solid/${property}\\` from Heroicons v1 but have installed Heroicons v2. Install \\`@heroicons/react@v1\\` to resolve this error.`\n      )\n    },\n  }\n)\n\nmodule.exports = proxy\n"
  },
  {
    "path": "scripts/build.js",
    "content": "const fs = require('fs').promises\nconst camelcase = require('camelcase')\nconst { promisify } = require('util')\nconst rimraf = promisify(require('rimraf'))\nconst svgr = require('@svgr/core').default\nconst babel = require('@babel/core')\nconst { compile: compileVue } = require('@vue/compiler-dom')\nconst { dirname } = require('path')\nconst { deprecated } = require('./deprecated')\n\nlet transform = {\n  react: async (svg, componentName, format, isDeprecated) => {\n    let component = await svgr(svg, { ref: true, titleProp: true }, { componentName })\n    let { code } = await babel.transformAsync(component, {\n      plugins: [[require('@babel/plugin-transform-react-jsx'), { useBuiltIns: true }]],\n    })\n\n    // Add a deprecation warning to the component\n    if (isDeprecated) {\n      /** @type {string[]} */\n      let lines = code.split('\\n')\n      lines.splice(1, 0, `/** @deprecated */`)\n      code = lines.join('\\n')\n    }\n\n    code = code.replace('React.forwardRef(', '/*#__PURE__*/ React.forwardRef(')\n\n    if (format === 'esm') {\n      return code\n    }\n\n    return code\n      .replace('import * as React from \"react\"', 'const React = require(\"react\")')\n      .replace('export default', 'module.exports =')\n  },\n  vue: (svg, componentName, format, isDeprecated) => {\n    let { code } = compileVue(svg, {\n      mode: 'module',\n    })\n\n    // Add a deprecation warning to the component\n    if (isDeprecated) {\n      /** @type {string[]} */\n      let lines = code.split('\\n')\n      lines.splice(2, 0, `/** @deprecated */`)\n      code = lines.join('\\n')\n    }\n\n    if (format === 'esm') {\n      return code.replace('export function', 'export default function')\n    }\n\n    return code\n      .replace(\n        /import\\s+\\{\\s*([^}]+)\\s*\\}\\s+from\\s+(['\"])(.*?)\\2/,\n        (_match, imports, _quote, mod) => {\n          let newImports = imports\n            .split(',')\n            .map((i) => i.trim().replace(/\\s+as\\s+/, ': '))\n            .join(', ')\n\n          return `const { ${newImports} } = require(\"${mod}\")`\n        }\n      )\n      .replace('export function render', 'module.exports = function render')\n  },\n}\n\nasync function getIcons(style) {\n  let files = await fs.readdir(`./optimized/${style}`)\n  return Promise.all(\n    files.map(async (file) => ({\n      svg: await fs.readFile(`./optimized/${style}/${file}`, 'utf8'),\n      componentName: `${camelcase(file.replace(/\\.svg$/, ''), {\n        pascalCase: true,\n      })}Icon`,\n      isDeprecated: deprecated.includes(file),\n    }))\n  )\n}\n\nfunction exportAll(icons, format, includeExtension = true) {\n  return icons\n    .map(({ componentName }) => {\n      let extension = includeExtension ? '.js' : ''\n      if (format === 'esm') {\n        return `export { default as ${componentName} } from './${componentName}${extension}'`\n      }\n      return `module.exports.${componentName} = require(\"./${componentName}${extension}\")`\n    })\n    .join('\\n')\n}\n\nasync function ensureWrite(file, text) {\n  await fs.mkdir(dirname(file), { recursive: true })\n  await fs.writeFile(file, text, 'utf8')\n}\n\nasync function ensureWriteJson(file, json) {\n  await ensureWrite(file, JSON.stringify(json, null, 2) + '\\n')\n}\n\nasync function buildIcons(package, style, format) {\n  let outDir = `./${package}/${style}`\n  if (format === 'esm') {\n    outDir += '/esm'\n  }\n\n  let icons = await getIcons(style)\n\n  await Promise.all(\n    icons.flatMap(async ({ componentName, svg, isDeprecated }) => {\n      let content = await transform[package](svg, componentName, format, isDeprecated)\n\n      /** @type {string[]} */\n      let types = []\n\n      if (package === 'react') {\n        types.push(`import * as React from 'react';`)\n        if (isDeprecated) {\n          types.push(`/** @deprecated */`)\n        }\n        types.push(`declare const ${componentName}: React.ForwardRefExoticComponent<React.PropsWithoutRef<React.SVGProps<SVGSVGElement>> & { title?: string, titleId?: string } & React.RefAttributes<SVGSVGElement>>;`)\n        types.push(`export default ${componentName};`)\n      } else {\n        types.push(`import type { FunctionalComponent, HTMLAttributes, VNodeProps } from 'vue';`)\n        if (isDeprecated) {\n          types.push(`/** @deprecated */`)\n        }\n        types.push(`declare const ${componentName}: FunctionalComponent<HTMLAttributes & VNodeProps>;`)\n        types.push(`export default ${componentName};`)\n      }\n\n      return [\n        ensureWrite(`${outDir}/${componentName}.js`, content),\n        ...(types ? [ensureWrite(`${outDir}/${componentName}.d.ts`, types.join(\"\\n\") + \"\\n\")] : []),\n      ]\n    })\n  )\n\n  await ensureWrite(`${outDir}/index.js`, exportAll(icons, format))\n\n  await ensureWrite(`${outDir}/index.d.ts`, exportAll(icons, 'esm', false))\n}\n\n/**\n * @param {string[]} styles\n */\nasync function buildExports(styles) {\n  let pkg = {}\n\n  // To appease Vite's optimizeDeps feature which requires a root-level import\n  pkg[`.`] = {\n    import: `./index.esm.js`,\n    require: `./index.js`,\n  }\n\n  // For those that want to read the version from package.json\n  pkg[`./package.json`] = { default: './package.json' }\n\n  // Backwards compatibility with v1 imports (points to proxy that prints an error message):\n  pkg['./outline'] = { default: './outline/index.js' }\n  pkg['./outline/index'] = { default: './outline/index.js' }\n  pkg['./outline/index.js'] = { default: './outline/index.js' }\n  pkg['./solid'] = { default: './solid/index.js' }\n  pkg['./solid/index'] = { default: './solid/index.js' }\n  pkg['./solid/index.js'] = { default: './solid/index.js' }\n\n  // Explicit exports for each style:\n  for (let style of styles) {\n    pkg[`./${style}`] = {\n      types: `./${style}/index.d.ts`,\n      import: `./${style}/esm/index.js`,\n      require: `./${style}/index.js`,\n    }\n    pkg[`./${style}/*`] = {\n      types: `./${style}/*.d.ts`,\n      import: `./${style}/esm/*.js`,\n      require: `./${style}/*.js`,\n    }\n    pkg[`./${style}/*.js`] = {\n      types: `./${style}/*.d.ts`,\n      import: `./${style}/esm/*.js`,\n      require: `./${style}/*.js`,\n    }\n\n    // This dir is basically an implementation detail, but it's needed for\n    // backwards compatibility in case people were importing from it directly.\n    pkg[`./${style}/esm/*`] = {\n      types: `./${style}/*.d.ts`,\n      import: `./${style}/esm/*.js`,\n    }\n    pkg[`./${style}/esm/*.js`] = {\n      types: `./${style}/*.d.ts`,\n      import: `./${style}/esm/*.js`,\n    }\n  }\n\n  return pkg\n}\n\nasync function main(package) {\n  const cjsPackageJson = { module: './esm/index.js', sideEffects: false }\n  const esmPackageJson = { type: 'module', sideEffects: false }\n\n  console.log(`Building ${package} package...`)\n\n  await Promise.all([\n    rimraf(`./${package}/16/solid/*`),\n    rimraf(`./${package}/20/solid/*`),\n    rimraf(`./${package}/24/outline/*`),\n    rimraf(`./${package}/24/solid/*`),\n  ])\n\n  await Promise.all([\n    buildIcons(package, '16/solid', 'cjs'),\n    buildIcons(package, '16/solid', 'esm'),\n    buildIcons(package, '20/solid', 'cjs'),\n    buildIcons(package, '20/solid', 'esm'),\n    buildIcons(package, '24/outline', 'cjs'),\n    buildIcons(package, '24/outline', 'esm'),\n    buildIcons(package, '24/solid', 'cjs'),\n    buildIcons(package, '24/solid', 'esm'),\n    ensureWriteJson(`./${package}/16/solid/esm/package.json`, esmPackageJson),\n    ensureWriteJson(`./${package}/16/solid/package.json`, cjsPackageJson),\n    ensureWriteJson(`./${package}/20/solid/esm/package.json`, esmPackageJson),\n    ensureWriteJson(`./${package}/20/solid/package.json`, cjsPackageJson),\n    ensureWriteJson(`./${package}/24/outline/esm/package.json`, esmPackageJson),\n    ensureWriteJson(`./${package}/24/outline/package.json`, cjsPackageJson),\n    ensureWriteJson(`./${package}/24/solid/esm/package.json`, esmPackageJson),\n    ensureWriteJson(`./${package}/24/solid/package.json`, cjsPackageJson),\n  ])\n\n  let packageJson = JSON.parse(await fs.readFile(`./${package}/package.json`, 'utf8'))\n\n  packageJson.exports = await buildExports(['16/solid', '20/solid', '24/outline', '24/solid'])\n\n  await ensureWriteJson(`./${package}/package.json`, packageJson)\n\n  return console.log(`Finished building ${package} package.`)\n}\n\nlet [package] = process.argv.slice(2)\n\nif (!package) {\n  throw new Error('Please specify a package')\n}\n\nmain(package)\n"
  },
  {
    "path": "scripts/deprecated.js",
    "content": "module.exports.deprecated = [\n  'arrow-left-on-rectangle.svg',\n  'arrow-right-on-rectangle.svg',\n  'arrow-small-down.svg',\n  'arrow-small-left.svg',\n  'arrow-small-right.svg',\n  'arrow-small-up.svg',\n  'minus-small.svg',\n  'plus-small.svg',\n]\n"
  },
  {
    "path": "scripts/release-channel.js",
    "content": "// Given a version, figure out what the release channel is so that we can publish to the correct\n// channel on npm.\n//\n// E.g.:\n//\n//   1.2.3                  -> latest (default)\n//   0.0.0-insiders.ffaa88  -> insiders\n//   4.1.0-alpha.4          -> alpha\n\nlet version =\n  process.argv[2] || process.env.npm_package_version || require('../package.json').version\n\nlet match = /\\d+\\.\\d+\\.\\d+-(.*)\\.\\d+/g.exec(version)\nif (match) {\n  console.log(match[1])\n} else {\n  console.log('latest')\n}\n"
  },
  {
    "path": "scripts/release-notes.js",
    "content": "// Given a version, figure out what the release notes are so that we can use this to pre-fill the\n// relase notes on a GitHub release for the current version.\n\nlet path = require('path')\nlet fs = require('fs')\n\nlet version =\n  process.argv[2] || process.env.npm_package_version || require('../package.json').version\n\nlet changelog = fs.readFileSync(path.resolve(__dirname, '..', 'CHANGELOG.md'), 'utf8')\nlet match = new RegExp(\n  `## \\\\[${version}\\\\] - (.*)\\\\n\\\\n([\\\\s\\\\S]*?)\\\\n(?:(?:##\\\\s)|(?:\\\\[))`,\n  'g'\n).exec(changelog)\n\nif (match) {\n  let [, , notes] = match\n  console.log(notes.trim())\n} else {\n  console.log(`Placeholder release notes for version: v${version}`)\n}\n"
  },
  {
    "path": "scripts/verify-names.js",
    "content": "const fs = require('fs').promises\nconst path = require('path')\nconst { deprecated } = require('./deprecated')\n\nconst srcPaths = {\n  micro: path.resolve(__dirname, '../src/16/solid/'),\n  mini: path.resolve(__dirname, '../src/20/solid/'),\n  solid: path.resolve(__dirname, '../src/24/solid/'),\n  outline: path.resolve(__dirname, '../src/24/outline/'),\n}\n\nasync function main() {\n  let files = await Promise.all(\n    Object.entries(srcPaths).map(async ([name, path]) => {\n      return { name, files: (await fs.readdir(path)).filter((file) => file.endsWith('.svg')) }\n    })\n  )\n\n  let diffs = []\n  for (let current of files) {\n    for (let other of files) {\n      if (current === other) continue\n\n      for (let file of current.files) {\n        if (!other.files.includes(file)) {\n          // Ignore deprecated icons in micro\n          // They're not going to be added\n          if (other.name === 'micro' && deprecated.includes(file)) continue\n\n          diffs.push({\n            package: current.name,\n            file: file,\n            'Missing in?': other.name,\n          })\n        }\n      }\n    }\n  }\n  if (diffs.length > 0) {\n    console.table(diffs)\n  } else {\n    console.log('All good!')\n  }\n}\n\nmain()\n"
  },
  {
    "path": "svgo.16.solid.mjs",
    "content": "export default {\n  plugins: [\n    'preset-default',\n    'removeDimensions',\n    'sortAttrs',\n    'cleanupListOfValues',\n    {\n      name: 'removeAttrs',\n      params: {\n        attrs: ['fill'],\n      },\n    },\n    {\n      name: 'addAttributesToSVGElement',\n      params: {\n        attributes: [\n          {\n            fill: 'currentColor',\n            'aria-hidden': 'true',\n            'data-slot': 'icon',\n          },\n        ],\n      },\n    },\n  ],\n}\n"
  },
  {
    "path": "svgo.20.solid.mjs",
    "content": "export default {\n  plugins: [\n    'preset-default',\n    'removeDimensions',\n    'sortAttrs',\n    'cleanupListOfValues',\n    {\n      name: 'removeAttrs',\n      params: {\n        attrs: ['fill'],\n      },\n    },\n    {\n      name: 'addAttributesToSVGElement',\n      params: {\n        attributes: [\n          {\n            fill: 'currentColor',\n            'aria-hidden': 'true',\n            'data-slot': 'icon',\n          },\n        ],\n      },\n    },\n  ],\n}\n"
  },
  {
    "path": "svgo.24.outline.mjs",
    "content": "export default {\n  plugins: [\n    'preset-default',\n    'removeDimensions',\n    'sortAttrs',\n    'cleanupListOfValues',\n    {\n      name: 'removeAttrs',\n      params: {\n        attrs: ['stroke', 'path:stroke-width'],\n      },\n    },\n    {\n      name: 'addAttributesToSVGElement',\n      params: {\n        attributes: [\n          {\n            'stroke-width': '1.5',\n            stroke: 'currentColor',\n            'aria-hidden': 'true',\n            'data-slot': 'icon',\n          },\n        ],\n      },\n    },\n  ],\n}\n"
  },
  {
    "path": "svgo.24.solid.mjs",
    "content": "export default {\n  plugins: [\n    'preset-default',\n    'removeDimensions',\n    'sortAttrs',\n    'cleanupListOfValues',\n    {\n      name: 'removeAttrs',\n      params: {\n        attrs: ['fill'],\n      },\n    },\n    {\n      name: 'addAttributesToSVGElement',\n      params: {\n        attributes: [\n          {\n            fill: 'currentColor',\n            'aria-hidden': 'true',\n            'data-slot': 'icon',\n          },\n        ],\n      },\n    },\n  ],\n}\n"
  },
  {
    "path": "vue/.gitignore",
    "content": "*\n!*.js\n!.gitignore\n!package.json\n!outline\n!solid\n!LICENSE\n!README.md\n"
  },
  {
    "path": "vue/LICENSE",
    "content": "MIT License\n\nCopyright (c) Tailwind Labs, Inc.\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": "vue/README.md",
    "content": "<p align=\"center\">\n  <a href=\"https://heroicons.com\" target=\"_blank\">\n    <picture>\n      <source media=\"(prefers-color-scheme: dark)\" srcset=\"https://raw.githubusercontent.com/tailwindlabs/heroicons/HEAD/.github/logo-dark.svg\">\n      <source media=\"(prefers-color-scheme: light)\" srcset=\"https://raw.githubusercontent.com/tailwindlabs/heroicons/HEAD/.github/logo-light.svg\">\n      <img alt=\"Heroicons\" width=\"315\" height=\"117\" style=\"max-width: 100%\" src=\"https://raw.githubusercontent.com/tailwindlabs/heroicons/HEAD/.github/logo-light.svg\">\n    </picture>\n  </a>\n</p>\n\n<p align=\"center\">Beautiful hand-crafted SVG icons, by the makers of Tailwind CSS.<p>\n\n<p align=\"center\">\n  <a href=\"https://heroicons.com\"><strong>Browse at Heroicons.com &rarr;</strong></a>\n</p>\n\n<p align=\"center\">\n    <a href=\"https://github.com/tailwindlabs/heroicons/releases\"><img src=\"https://img.shields.io/npm/v/@heroicons/vue\" alt=\"Latest Release\"></a>\n    <a href=\"https://github.com/tailwindlabs/heroicons/blob/master/vue/LICENSE\"><img src=\"https://img.shields.io/npm/l/@heroicons/vue.svg\" alt=\"License\"></a>\n</p>\n\n## Basic Usage\n\nFirst, install `@heroicons/vue` from npm:\n\n```sh\nnpm install @heroicons/vue\n```\n\nNow each icon can be imported individually as a Vue component:\n\n```vue\n<template>\n  <div>\n    <BeakerIcon class=\"size-6 text-blue-500\" />\n    <p>...</p>\n  </div>\n</template>\n\n<script setup>\nimport { BeakerIcon } from '@heroicons/vue/24/solid'\n</script>\n```\n\nThe 24x24 outline icons can be imported from `@heroicons/vue/24/outline`, the 24x24 solid icons can be imported from `@heroicons/vue/24/solid`, the 20x20 solid icons can be imported from `@heroicons/vue/20/solid`, and the 16x16 solid icons can be imported from `@heroicons/vue/16/solid`.\n\nIcons use an upper camel case naming convention and are always suffixed with the word `Icon`.\n\n[Browse the full list of icon names on UNPKG &rarr;](https://unpkg.com/browse/@heroicons/vue/24/outline/)\n\n## Contributing\n\nWhile we absolutely appreciate anyone's willingness to try and improve the project, we're currently only interested in contributions that fix bugs, for example things like incorrect TypeScript types, or fixing an icon that's been exported with a fill instead of a stroke, etc.\n\n**We're not accepting contributions for new icons or adding support for other frameworks like Svelte or SolidJS**. Instead we encourage you to release your own icons in your own library, and create your own packages for any other frameworks you'd like to see supported.\n\n## License\n\nThis library is MIT licensed.\n"
  },
  {
    "path": "vue/index.esm.js",
    "content": "// The only reason this file exists is to appease Vite's optimizeDeps feature which requires a root-level import.\n\nexport default new Proxy(\n  {},\n  {\n    get: (_, property) => {\n      if (property === '__esModule') {\n        return {}\n      }\n\n      throw new Error(\n        `Importing from \\`@heroicons/vue\\` directly is not supported. Please import from either \\`@heroicons/vue/16/solid\\`, \\`@heroicons/vue/20/solid\\`, \\`@heroicons/vue/24/solid\\`, or \\`@heroicons/vue/24/outline\\` instead.`\n      )\n    },\n  }\n)\n"
  },
  {
    "path": "vue/index.js",
    "content": "// The only reason this file exists is to appease Vite's optimizeDeps feature which requires a root-level import.\n\nmodule.exports = new Proxy(\n  {},\n  {\n    get: (_, property) => {\n      if (property === '__esModule') {\n        return {}\n      }\n\n      throw new Error(\n        `Importing from \\`@heroicons/vue\\` directly is not supported. Please import from either \\`@heroicons/vue/16/solid\\`, \\`@heroicons/vue/20/solid\\`, \\`@heroicons/vue/24/solid\\`, or \\`@heroicons/vue/24/outline\\` instead.`\n      )\n    },\n  }\n)\n"
  },
  {
    "path": "vue/outline/index.js",
    "content": "let proxy = new Proxy(\n  {},\n  {\n    get: (obj, property) => {\n      if (property === '__esModule') {\n        return {}\n      }\n\n      throw new Error(\n        `You\\'re trying to import \\`@heroicons/vue/outline/${property}\\` from Heroicons v1 but have installed Heroicons v2. Install \\`@heroicons/vue@v1\\` to resolve this error.`\n      )\n    },\n  }\n)\n\nmodule.exports = proxy\n"
  },
  {
    "path": "vue/package.json",
    "content": "{\n  \"name\": \"@heroicons/vue\",\n  \"license\": \"MIT\",\n  \"version\": \"2.2.0\",\n  \"description\": \"A set of free MIT-licensed high-quality SVG icons for UI development.\",\n  \"keywords\": [\n    \"icons\",\n    \"svg\",\n    \"vue\",\n    \"tailwindcss\"\n  ],\n  \"homepage\": \"https://github.com/tailwindlabs/heroicons#readme\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"https://github.com/tailwindlabs/heroicons.git\"\n  },\n  \"files\": [\n    \"16\",\n    \"20\",\n    \"24\",\n    \"outline\",\n    \"solid\",\n    \"index.esm.js\",\n    \"index.js\",\n    \"LICENSE\",\n    \"README.md\"\n  ],\n  \"sideEffects\": false,\n  \"exports\": {\n    \".\": {\n      \"import\": \"./index.esm.js\",\n      \"require\": \"./index.js\"\n    },\n    \"./package.json\": {\n      \"default\": \"./package.json\"\n    },\n    \"./outline\": {\n      \"default\": \"./outline/index.js\"\n    },\n    \"./outline/index\": {\n      \"default\": \"./outline/index.js\"\n    },\n    \"./outline/index.js\": {\n      \"default\": \"./outline/index.js\"\n    },\n    \"./solid\": {\n      \"default\": \"./solid/index.js\"\n    },\n    \"./solid/index\": {\n      \"default\": \"./solid/index.js\"\n    },\n    \"./solid/index.js\": {\n      \"default\": \"./solid/index.js\"\n    },\n    \"./16/solid\": {\n      \"types\": \"./16/solid/index.d.ts\",\n      \"import\": \"./16/solid/esm/index.js\",\n      \"require\": \"./16/solid/index.js\"\n    },\n    \"./16/solid/*\": {\n      \"types\": \"./16/solid/*.d.ts\",\n      \"import\": \"./16/solid/esm/*.js\",\n      \"require\": \"./16/solid/*.js\"\n    },\n    \"./16/solid/*.js\": {\n      \"types\": \"./16/solid/*.d.ts\",\n      \"import\": \"./16/solid/esm/*.js\",\n      \"require\": \"./16/solid/*.js\"\n    },\n    \"./16/solid/esm/*\": {\n      \"types\": \"./16/solid/*.d.ts\",\n      \"import\": \"./16/solid/esm/*.js\"\n    },\n    \"./16/solid/esm/*.js\": {\n      \"types\": \"./16/solid/*.d.ts\",\n      \"import\": \"./16/solid/esm/*.js\"\n    },\n    \"./20/solid\": {\n      \"types\": \"./20/solid/index.d.ts\",\n      \"import\": \"./20/solid/esm/index.js\",\n      \"require\": \"./20/solid/index.js\"\n    },\n    \"./20/solid/*\": {\n      \"types\": \"./20/solid/*.d.ts\",\n      \"import\": \"./20/solid/esm/*.js\",\n      \"require\": \"./20/solid/*.js\"\n    },\n    \"./20/solid/*.js\": {\n      \"types\": \"./20/solid/*.d.ts\",\n      \"import\": \"./20/solid/esm/*.js\",\n      \"require\": \"./20/solid/*.js\"\n    },\n    \"./20/solid/esm/*\": {\n      \"types\": \"./20/solid/*.d.ts\",\n      \"import\": \"./20/solid/esm/*.js\"\n    },\n    \"./20/solid/esm/*.js\": {\n      \"types\": \"./20/solid/*.d.ts\",\n      \"import\": \"./20/solid/esm/*.js\"\n    },\n    \"./24/outline\": {\n      \"types\": \"./24/outline/index.d.ts\",\n      \"import\": \"./24/outline/esm/index.js\",\n      \"require\": \"./24/outline/index.js\"\n    },\n    \"./24/outline/*\": {\n      \"types\": \"./24/outline/*.d.ts\",\n      \"import\": \"./24/outline/esm/*.js\",\n      \"require\": \"./24/outline/*.js\"\n    },\n    \"./24/outline/*.js\": {\n      \"types\": \"./24/outline/*.d.ts\",\n      \"import\": \"./24/outline/esm/*.js\",\n      \"require\": \"./24/outline/*.js\"\n    },\n    \"./24/outline/esm/*\": {\n      \"types\": \"./24/outline/*.d.ts\",\n      \"import\": \"./24/outline/esm/*.js\"\n    },\n    \"./24/outline/esm/*.js\": {\n      \"types\": \"./24/outline/*.d.ts\",\n      \"import\": \"./24/outline/esm/*.js\"\n    },\n    \"./24/solid\": {\n      \"types\": \"./24/solid/index.d.ts\",\n      \"import\": \"./24/solid/esm/index.js\",\n      \"require\": \"./24/solid/index.js\"\n    },\n    \"./24/solid/*\": {\n      \"types\": \"./24/solid/*.d.ts\",\n      \"import\": \"./24/solid/esm/*.js\",\n      \"require\": \"./24/solid/*.js\"\n    },\n    \"./24/solid/*.js\": {\n      \"types\": \"./24/solid/*.d.ts\",\n      \"import\": \"./24/solid/esm/*.js\",\n      \"require\": \"./24/solid/*.js\"\n    },\n    \"./24/solid/esm/*\": {\n      \"types\": \"./24/solid/*.d.ts\",\n      \"import\": \"./24/solid/esm/*.js\"\n    },\n    \"./24/solid/esm/*.js\": {\n      \"types\": \"./24/solid/*.d.ts\",\n      \"import\": \"./24/solid/esm/*.js\"\n    }\n  },\n  \"publishConfig\": {\n    \"access\": \"public\"\n  },\n  \"peerDependencies\": {\n    \"vue\": \">= 3\"\n  }\n}\n"
  },
  {
    "path": "vue/solid/index.js",
    "content": "let proxy = new Proxy(\n  {},\n  {\n    get: (obj, property) => {\n      if (property === '__esModule') {\n        return {}\n      }\n\n      throw new Error(\n        `You\\'re trying to import \\`@heroicons/vue/solid/${property}\\` from Heroicons v1 but have installed Heroicons v2. Install \\`@heroicons/vue@v1\\` to resolve this error.`\n      )\n    },\n  }\n)\n\nmodule.exports = proxy\n"
  }
]