├── .all-contributorsrc ├── .eslintignore ├── .eslintrc.cjs ├── .github ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── DEVELOPMENT.md ├── ISSUE_TEMPLATE.md ├── ISSUE_TEMPLATE │ ├── 01-bug.yml │ ├── 02-documentation.yml │ ├── 03-feature.yml │ └── 04-tooling.yml ├── PULL_REQUEST_TEMPLATE.md ├── SECURITY.md ├── actions │ └── prepare │ │ └── action.yml ├── renovate.json └── workflows │ ├── build.yml │ ├── compliance.yml │ ├── contributors.yml │ ├── lint-knip.yml │ ├── lint-markdown.yml │ ├── lint-package-json.yml │ ├── lint-packages.yml │ ├── lint-spelling.yml │ ├── lint.yml │ ├── post-release.yml │ ├── pr-review-requested.yml │ ├── prettier.yml │ ├── release.yml │ └── tsc.yml ├── .gitignore ├── .husky ├── .gitignore └── pre-commit ├── .markdownlint.json ├── .markdownlintignore ├── .npmpackagejsonlintrc.json ├── .nvmrc ├── .prettierignore ├── .prettierrc ├── .release-it.json ├── .vscode ├── extensions.json ├── launch.json └── settings.json ├── CHANGELOG.md ├── LICENSE.md ├── README.md ├── cspell.json ├── docs ├── .gitignore ├── components │ ├── floatingButton.tsx │ └── mycart.tsx ├── next-env.d.ts ├── next.config.js ├── package.json ├── pages │ ├── _app.tsx │ ├── _meta.json │ ├── api-reference.mdx │ ├── index.mdx │ ├── installation.mdx │ └── usage │ │ ├── nextjs.mdx │ │ └── react.mdx ├── pnpm-lock.yaml ├── postcss.config.js ├── styles │ └── globals.css ├── tailwind.config.js ├── theme.config.tsx └── tsconfig.json ├── image └── cover.png ├── knip.jsonc ├── package.json ├── pnpm-lock.yaml ├── src ├── cart.ts └── index.ts ├── tsconfig.eslint.json ├── tsconfig.json ├── tsup.config.ts └── vitest.config.ts /.all-contributorsrc: -------------------------------------------------------------------------------- 1 | { 2 | "badgeTemplate": "\"All\" src=\"https://img.shields.io/badge/all_contributors-<%= contributors.length %>-21bb42.svg\" />", 3 | "commit": false, 4 | "commitConvention": "angular", 5 | "contributors": [ 6 | { 7 | "login": "mcnaveen", 8 | "name": "MC Naveen", 9 | "avatar_url": "https://avatars.githubusercontent.com/u/8493007?v=4", 10 | "profile": "https://github.com/mcnaveen", 11 | "contributions": [ 12 | "code", 13 | "content", 14 | "doc", 15 | "ideas", 16 | "infra", 17 | "maintenance", 18 | "projectManagement", 19 | "tool" 20 | ] 21 | }, 22 | { 23 | "login": "JoshuaKGoldberg", 24 | "name": "Josh Goldberg ✨", 25 | "avatar_url": "https://avatars.githubusercontent.com/u/3335181?v=4", 26 | "profile": "http://www.joshuakgoldberg.com/", 27 | "contributions": [ 28 | "tool" 29 | ] 30 | } 31 | ], 32 | "contributorsPerLine": 7, 33 | "contributorsSortAlphabetically": true, 34 | "files": [ 35 | "README.md" 36 | ], 37 | "imageSize": 100, 38 | "projectName": "Cart", 39 | "projectOwner": "mcnaveen", 40 | "repoHost": "https://github.com", 41 | "repoType": "github" 42 | } 43 | -------------------------------------------------------------------------------- /.eslintignore: -------------------------------------------------------------------------------- 1 | !.* 2 | coverage 3 | lib 4 | node_modules 5 | pnpm-lock.yaml 6 | docs -------------------------------------------------------------------------------- /.eslintrc.cjs: -------------------------------------------------------------------------------- 1 | /** @type {import("@types/eslint").Linter.Config} */ 2 | module.exports = { 3 | env: { 4 | es2022: true, 5 | node: true, 6 | }, 7 | extends: [ 8 | "eslint:recommended", 9 | "plugin:eslint-comments/recommended", 10 | "plugin:n/recommended", 11 | "plugin:perfectionist/recommended-natural", 12 | "plugin:regexp/recommended", 13 | ], 14 | overrides: [ 15 | { 16 | extends: ["plugin:markdown/recommended"], 17 | files: ["**/*.md"], 18 | processor: "markdown/markdown", 19 | }, 20 | { 21 | extends: [ 22 | "plugin:jsdoc/recommended-typescript-error", 23 | "plugin:@typescript-eslint/strict", 24 | "plugin:@typescript-eslint/stylistic", 25 | ], 26 | files: ["**/*.ts"], 27 | parser: "@typescript-eslint/parser", 28 | rules: { 29 | // These off-by-default rules work well for this repo and we like them on. 30 | "jsdoc/informative-docs": "error", 31 | "logical-assignment-operators": [ 32 | "error", 33 | "always", 34 | { enforceForIfStatements: true }, 35 | ], 36 | "operator-assignment": "error", 37 | 38 | // These on-by-default rules don't work well for this repo and we like them off. 39 | "jsdoc/require-jsdoc": "off", 40 | "jsdoc/require-param": "off", 41 | "jsdoc/require-property": "off", 42 | "jsdoc/require-returns": "off", 43 | }, 44 | }, 45 | { 46 | excludedFiles: ["**/*.md/*.ts"], 47 | extends: [ 48 | "plugin:@typescript-eslint/strict-type-checked", 49 | "plugin:@typescript-eslint/stylistic-type-checked", 50 | ], 51 | files: ["**/*.ts"], 52 | parser: "@typescript-eslint/parser", 53 | parserOptions: { 54 | project: "./tsconfig.eslint.json", 55 | }, 56 | rules: { 57 | // These off-by-default rules work well for this repo and we like them on. 58 | "deprecation/deprecation": "error", 59 | }, 60 | }, 61 | { 62 | excludedFiles: ["package.json"], 63 | extends: ["plugin:jsonc/recommended-with-json"], 64 | files: ["*.json", "*.jsonc"], 65 | parser: "jsonc-eslint-parser", 66 | rules: { 67 | "jsonc/sort-keys": "error", 68 | }, 69 | }, 70 | { 71 | files: ["*.jsonc"], 72 | rules: { 73 | "jsonc/no-comments": "off", 74 | }, 75 | }, 76 | { 77 | files: "**/*.test.ts", 78 | rules: { 79 | // These on-by-default rules aren't useful in test files. 80 | "@typescript-eslint/no-unsafe-assignment": "off", 81 | "@typescript-eslint/no-unsafe-call": "off", 82 | }, 83 | }, 84 | { 85 | extends: ["plugin:yml/standard", "plugin:yml/prettier"], 86 | files: ["**/*.{yml,yaml}"], 87 | parser: "yaml-eslint-parser", 88 | rules: { 89 | "yml/file-extension": ["error", { extension: "yml" }], 90 | "yml/sort-keys": [ 91 | "error", 92 | { 93 | order: { type: "asc" }, 94 | pathPattern: "^.*$", 95 | }, 96 | ], 97 | "yml/sort-sequence-values": [ 98 | "error", 99 | { 100 | order: { type: "asc" }, 101 | pathPattern: "^.*$", 102 | }, 103 | ], 104 | }, 105 | }, 106 | ], 107 | parser: "@typescript-eslint/parser", 108 | plugins: [ 109 | "@typescript-eslint", 110 | "deprecation", 111 | "jsdoc", 112 | "no-only-tests", 113 | "perfectionist", 114 | "regexp", 115 | "vitest", 116 | ], 117 | reportUnusedDisableDirectives: true, 118 | root: true, 119 | rules: { 120 | // These off/less-strict-by-default rules work well for this repo and we like them on. 121 | "@typescript-eslint/no-unused-vars": ["error", { caughtErrors: "all" }], 122 | "no-only-tests/no-only-tests": "error", 123 | 124 | // These on-by-default rules don't work well for this repo and we like them off. 125 | "no-case-declarations": "off", 126 | "no-constant-condition": "off", 127 | "no-inner-declarations": "off", 128 | "no-mixed-spaces-and-tabs": "off", 129 | 130 | // Stylistic concerns that don't interfere with Prettier 131 | "@typescript-eslint/padding-line-between-statements": [ 132 | "error", 133 | { blankLine: "always", next: "*", prev: "block-like" }, 134 | ], 135 | "perfectionist/sort-objects": [ 136 | "error", 137 | { 138 | order: "asc", 139 | "partition-by-comment": true, 140 | type: "natural", 141 | }, 142 | ], 143 | }, 144 | }; 145 | -------------------------------------------------------------------------------- /.github/CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Contributor Covenant Code of Conduct 2 | 3 | ## Our Pledge 4 | 5 | We as members, contributors, and leaders pledge to make participation in our 6 | community a harassment-free experience for everyone, regardless of age, body 7 | size, visible or invisible disability, ethnicity, sex characteristics, gender 8 | identity and expression, level of experience, education, socio-economic status, 9 | nationality, personal appearance, race, caste, color, religion, or sexual 10 | identity and orientation. 11 | 12 | We pledge to act and interact in ways that contribute to an open, welcoming, 13 | diverse, inclusive, and healthy community. 14 | 15 | ## Our Standards 16 | 17 | Examples of behavior that contributes to a positive environment for our 18 | community include: 19 | 20 | - Demonstrating empathy and kindness toward other people 21 | - Being respectful of differing opinions, viewpoints, and experiences 22 | - Giving and gracefully accepting constructive feedback 23 | - Accepting responsibility and apologizing to those affected by our mistakes, 24 | and learning from the experience 25 | - Focusing on what is best not just for us as individuals, but for the overall 26 | community 27 | 28 | Examples of unacceptable behavior include: 29 | 30 | - The use of sexualized language or imagery, and sexual attention or advances of 31 | any kind 32 | - Trolling, insulting or derogatory comments, and personal or political attacks 33 | - Public or private harassment 34 | - Publishing others' private information, such as a physical or email address, 35 | without their explicit permission 36 | - Other conduct which could reasonably be considered inappropriate in a 37 | professional setting 38 | 39 | ## Enforcement Responsibilities 40 | 41 | Community leaders are responsible for clarifying and enforcing our standards of 42 | acceptable behavior and will take appropriate and fair corrective action in 43 | response to any behavior that they deem inappropriate, threatening, offensive, 44 | or harmful. 45 | 46 | Community leaders have the right and responsibility to remove, edit, or reject 47 | comments, commits, code, wiki edits, issues, and other contributions that are 48 | not aligned to this Code of Conduct, and will communicate reasons for moderation 49 | decisions when appropriate. 50 | 51 | ## Scope 52 | 53 | This Code of Conduct applies within all community spaces, and also applies when 54 | an individual is officially representing the community in public spaces. 55 | Examples of representing our community include using an official e-mail address, 56 | posting via an official social media account, or acting as an appointed 57 | representative at an online or offline event. 58 | 59 | ## Enforcement 60 | 61 | Instances of abusive, harassing, or otherwise unacceptable behavior may be 62 | reported to the community leaders responsible for enforcement at 63 | 8493007+mcnaveen@users.noreply.github.com. 64 | All complaints will be reviewed and investigated promptly and fairly. 65 | 66 | All community leaders are obligated to respect the privacy and security of the 67 | reporter of any incident. 68 | 69 | ## Enforcement Guidelines 70 | 71 | Community leaders will follow these Community Impact Guidelines in determining 72 | the consequences for any action they deem in violation of this Code of Conduct: 73 | 74 | ### 1. Correction 75 | 76 | **Community Impact**: Use of inappropriate language or other behavior deemed 77 | unprofessional or unwelcome in the community. 78 | 79 | **Consequence**: A private, written warning from community leaders, providing 80 | clarity around the nature of the violation and an explanation of why the 81 | behavior was inappropriate. A public apology may be requested. 82 | 83 | ### 2. Warning 84 | 85 | **Community Impact**: A violation through a single incident or series of 86 | actions. 87 | 88 | **Consequence**: A warning with consequences for continued behavior. No 89 | interaction with the people involved, including unsolicited interaction with 90 | those enforcing the Code of Conduct, for a specified period of time. This 91 | includes avoiding interactions in community spaces as well as external channels 92 | like social media. Violating these terms may lead to a temporary or permanent 93 | ban. 94 | 95 | ### 3. Temporary Ban 96 | 97 | **Community Impact**: A serious violation of community standards, including 98 | sustained inappropriate behavior. 99 | 100 | **Consequence**: A temporary ban from any sort of interaction or public 101 | communication with the community for a specified period of time. No public or 102 | private interaction with the people involved, including unsolicited interaction 103 | with those enforcing the Code of Conduct, is allowed during this period. 104 | Violating these terms may lead to a permanent ban. 105 | 106 | ### 4. Permanent Ban 107 | 108 | **Community Impact**: Demonstrating a pattern of violation of community 109 | standards, including sustained inappropriate behavior, harassment of an 110 | individual, or aggression toward or disparagement of classes of individuals. 111 | 112 | **Consequence**: A permanent ban from any sort of public interaction within the 113 | community. 114 | 115 | ## Attribution 116 | 117 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], 118 | version 2.1, available at 119 | [https://www.contributor-covenant.org/version/2/1/code_of_conduct.html][v2.1]. 120 | 121 | Community Impact Guidelines were inspired by 122 | [Mozilla's code of conduct enforcement ladder][mozilla coc]. 123 | 124 | For answers to common questions about this code of conduct, see the FAQ at 125 | [https://www.contributor-covenant.org/faq][faq]. Translations are available at 126 | [https://www.contributor-covenant.org/translations][translations]. 127 | 128 | [homepage]: https://www.contributor-covenant.org 129 | [v2.1]: https://www.contributor-covenant.org/version/2/1/code_of_conduct.html 130 | [mozilla coc]: https://github.com/mozilla/diversity 131 | [faq]: https://www.contributor-covenant.org/faq 132 | [translations]: https://www.contributor-covenant.org/translations 133 | -------------------------------------------------------------------------------- /.github/CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing 2 | 3 | Thanks for your interest in contributing to `Cart`! 💖 4 | 5 | > After this page, see [DEVELOPMENT.md](./DEVELOPMENT.md) for local development instructions. 6 | 7 | ## Code of Conduct 8 | 9 | This project contains a [Contributor Covenant code of conduct](./CODE_OF_CONDUCT.md) all contributors are expected to follow. 10 | 11 | ## Reporting Issues 12 | 13 | Please do [report an issue on the issue tracker](https://github.com/mcnaveen/Cart/issues/new/choose) if there's any bugfix, documentation improvement, or general enhancement you'd like to see in the repository! Please fully fill out all required fields in the most appropriate issue form. 14 | 15 | ## Sending Contributions 16 | 17 | Sending your own changes as contribution is always appreciated! 18 | There are two steps involved: 19 | 20 | 1. [Finding an Issue](#finding-an-issue) 21 | 2. [Sending a Pull Request](#sending-a-pull-request) 22 | 23 | ### Finding an Issue 24 | 25 | With the exception of very small typos, all changes to this repository generally need to correspond to an [open issue marked as `accepting prs` on the issue tracker](https://github.com/mcnaveen/Cart/issues?q=is%3Aopen+is%3Aissue+label%3A%22accepting+prs%22). 26 | If this is your first time contributing, consider searching for [unassigned issues that also have the `good first issue` label](https://github.com/mcnaveen/Cart/issues?q=is%3Aopen+is%3Aissue+label%3A%22accepting+prs%22+label%3A%22good+first+issue%22+no%3Aassignee). 27 | If the issue you'd like to fix isn't found on the issue, see [Reporting Issues](#reporting-issues) for filing your own (please do!). 28 | 29 | #### Issue Claiming 30 | 31 | We don't use any kind of issue claiming system. 32 | We've found in the past that they result in accidental ["licked cookie"](https://devblogs.microsoft.com/oldnewthing/20091201-00/?p=15843) situations where contributors claim an issue but run out of time or energy trying before sending a PR. 33 | 34 | If an issue has been marked as `accepting prs` and an open PR does not exist, feel free to send a PR. 35 | You don't need to ask for permission. 36 | 37 | ### Sending a Pull Request 38 | 39 | Once you've identified an open issue accepting PRs that doesn't yet have a PR sent, you're free to send a pull request. 40 | Be sure to fill out the pull request template's requested information -- otherwise your PR will likely be closed. 41 | 42 | PRs are also expected to have a title that adheres to [commitlint](https://github.com/conventional-changelog/commitlint). 43 | Only PR titles need to be in that format, not individual commits. 44 | Don't worry if you get this wrong: you can always change the PR title after sending it. 45 | Check [previously merged PRs](https://github.com/mcnaveen/Cart/pulls?q=is%3Apr+is%3Amerged+-label%3Adependencies+) for reference. 46 | 47 | #### Draft PRs 48 | 49 | If you don't think your PR is ready for review, [set it as a draft](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/changing-the-stage-of-a-pull-request#converting-a-pull-request-to-a-draft). 50 | Draft PRs won't be reviewed. 51 | 52 | #### Granular PRs 53 | 54 | Please keep pull requests single-purpose: in other words, don't attempt to solve multiple unrelated problems in one pull request. 55 | Send one PR per area of concern. 56 | Multi-purpose pull requests are harder and slower to review, block all changes from being merged until the whole pull request is reviewed, and are difficult to name well with semantic PR titles. 57 | 58 | #### Pull Request Reviews 59 | 60 | When a PR is not in draft, it's considered ready for review. 61 | Please don't manually `@` tag anybody to request review. 62 | A maintainer will look at it when they're next able to. 63 | 64 | PRs should have passing [GitHub status checks](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/collaborating-on-repositories-with-code-quality-features/about-status-checks) before review is requested (unless there are explicit questions asked in the PR about any failures). 65 | 66 | #### Asking Questions 67 | 68 | If you need help and/or have a question, posting a comment in the PR is a great way to do so. 69 | There's no need to tag anybody individually. 70 | One of us will drop by and help when we can. 71 | 72 | Please post comments as [line comments](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/commenting-on-a-pull-request#adding-line-comments-to-a-pull-request) when possible, so that they can be threaded. 73 | You can [resolve conversations](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/commenting-on-a-pull-request#resolving-conversations) on your own when you feel they're resolved - no need to comment explicitly and/or wait for a maintainer. 74 | 75 | #### Requested Changes 76 | 77 | After a maintainer reviews your PR, they may request changes on it. 78 | Once you've made those changes, [re-request review on GitHub](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/about-pull-request-reviews#re-requesting-a-review). 79 | 80 | Please try not to force-push commits to PRs that have already been reviewed. 81 | Doing so makes it harder to review the changes. 82 | We squash merge all commits so there's no need to try to preserve Git history within a PR branch. 83 | 84 | Once you've addressed all our feedback by making code changes and/or started a followup discussion, [re-request review](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/reviewing-changes-in-pull-requests/about-pull-request-reviews#re-requesting-a-review) from each maintainer whose feedback you addressed. 85 | 86 | Once all feedback is addressed and the PR is approved, we'll ensure the branch is up to date with `main` and merge it for you. 87 | 88 | #### Post-Merge Recognition 89 | 90 | Once your PR is merged, if you haven't yet been added to the [_Contributors_ table in the README.md](../README.md#contributors) for its [type of contribution](https://allcontributors.org/docs/en/emoji-key "Allcontributors emoji key"), you should be soon. 91 | Please do ping the maintainer who merged your PR if that doesn't happen within 24 hours - it was likely an oversight on our end! 92 | 93 | ## Emojis & Appreciation 94 | 95 | If you made it all the way to the end, bravo dear user, we love you. 96 | Please include your favorite emoji in the bottom of your issues and PRs to signal to us that you did in fact read this file and are trying to conform to it as best as possible. 97 | 💖 is a good starter if you're not sure which to use. 98 | -------------------------------------------------------------------------------- /.github/DEVELOPMENT.md: -------------------------------------------------------------------------------- 1 | # Development 2 | 3 | After [forking the repo from GitHub](https://help.github.com/articles/fork-a-repo) and [installing pnpm](https://pnpm.io/installation): 4 | 5 | ```shell 6 | git clone https://github.com//Cart 7 | cd Cart 8 | pnpm install 9 | ``` 10 | 11 | > This repository includes a list of suggested VS Code extensions. 12 | > It's a good idea to use [VS Code](https://code.visualstudio.com) and accept its suggestion to install them, as they'll help with development. 13 | 14 | ## Building 15 | 16 | Run [**tsup**](https://tsup.egoist.dev) locally to build source files from `src/` into output files in `lib/`: 17 | 18 | ```shell 19 | pnpm build 20 | ``` 21 | 22 | Add `--watch` to run the builder in a watch mode that continuously cleans and recreates `lib/` as you save files: 23 | 24 | ```shell 25 | pnpm build --watch 26 | ``` 27 | 28 | ## Formatting 29 | 30 | [Prettier](https://prettier.io) is used to format code. 31 | It should be applied automatically when you save files in VS Code or make a Git commit. 32 | 33 | To manually reformat all files, you can run: 34 | 35 | ```shell 36 | pnpm format:write 37 | ``` 38 | 39 | ## Linting 40 | 41 | This package includes several forms of linting to enforce consistent code quality and styling. 42 | Each should be shown in VS Code, and can be run manually on the command-line: 43 | 44 | - `pnpm lint` ([ESLint](https://eslint.org) with [typescript-eslint](https://typescript-eslint.io)): Lints JavaScript and TypeScript source files 45 | - `pnpm lint:knip` ([knip](https://github.com/webpro/knip)): Detects unused files, dependencies, and code exports 46 | - `pnpm lint:md` ([Markdownlint](https://github.com/DavidAnson/markdownlint)): Checks Markdown source files 47 | - `pnpm lint:package-json` ([npm-package-json-lint](https://npmpackagejsonlint.org/)): Lints the `package.json` file 48 | - `pnpm lint:packages` ([pnpm dedupe --check](https://pnpm.io/cli/dedupe)): Checks for unnecessarily duplicated packages in the `pnpm-lock.yml` file 49 | - `pnpm lint:spelling` ([cspell](https://cspell.org)): Spell checks across all source files 50 | 51 | Read the individual documentation for each linter to understand how it can be configured and used best. 52 | 53 | For example, ESLint can be run with `--fix` to auto-fix some lint rule complaints: 54 | 55 | ```shell 56 | pnpm run lint --fix 57 | ``` 58 | 59 | ## Testing 60 | 61 | [Vitest](https://vitest.dev) is used for tests. 62 | You can run it locally on the command-line: 63 | 64 | ```shell 65 | pnpm run test 66 | ``` 67 | 68 | Add the `--coverage` flag to compute test coverage and place reports in the `coverage/` directory: 69 | 70 | ```shell 71 | pnpm run test --coverage 72 | ``` 73 | 74 | Note that [console-fail-test](https://github.com/JoshuaKGoldberg/console-fail-test) is enabled for all test runs. 75 | Calls to `console.log`, `console.warn`, and other console methods will cause a test to fail. 76 | 77 | ### Debugging Tests 78 | 79 | This repository includes a [VS Code launch configuration](https://code.visualstudio.com/docs/editor/debugging) for debugging unit tests. 80 | To launch it, open a test file, then run _Debug Current Test File_ from the VS Code Debug panel (or press F5). 81 | 82 | ## Type Checking 83 | 84 | You should be able to see suggestions from [TypeScript](https://typescriptlang.org) in your editor for all open files. 85 | 86 | However, it can be useful to run the TypeScript command-line (`tsc`) to type check all files in `src/`: 87 | 88 | ```shell 89 | pnpm tsc 90 | ``` 91 | 92 | Add `--watch` to keep the type checker running in a watch mode that updates the display as you save files: 93 | 94 | ```shell 95 | pnpm tsc --watch 96 | ``` 97 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | ## Overview 8 | 9 | ... 10 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/01-bug.yml: -------------------------------------------------------------------------------- 1 | body: 2 | - attributes: 3 | description: If any of these required steps are not taken, we may not be able to review your issue. Help us to help you! 4 | label: Bug Report Checklist 5 | options: 6 | - label: I have tried restarting my IDE and the issue persists. 7 | required: true 8 | - label: I have pulled the latest `main` branch of the repository. 9 | required: true 10 | - label: I have [searched for related issues](https://github.com/mcnaveen/Cart/issues?q=is%3Aissue) and found none that matched my issue. 11 | required: true 12 | type: checkboxes 13 | - attributes: 14 | description: What did you expect to happen? 15 | label: Expected 16 | type: textarea 17 | validations: 18 | required: true 19 | - attributes: 20 | description: What happened instead? 21 | label: Actual 22 | type: textarea 23 | validations: 24 | required: true 25 | - attributes: 26 | description: Any additional info you'd like to provide. 27 | label: Additional Info 28 | type: textarea 29 | description: Report a bug trying to run the code 30 | labels: 31 | - "type: bug" 32 | name: 🐛 Bug 33 | title: "🐛 Bug: " 34 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/02-documentation.yml: -------------------------------------------------------------------------------- 1 | body: 2 | - attributes: 3 | description: If any of these required steps are not taken, we may not be able to review your issue. Help us to help you! 4 | label: Bug Report Checklist 5 | options: 6 | - label: I have pulled the latest `main` branch of the repository. 7 | required: true 8 | - label: I have [searched for related issues](https://github.com/mcnaveen/Cart/issues?q=is%3Aissue) and found none that matched my issue. 9 | required: true 10 | type: checkboxes 11 | - attributes: 12 | description: What would you like to report? 13 | label: Overview 14 | type: textarea 15 | validations: 16 | required: true 17 | - attributes: 18 | description: Any additional info you'd like to provide. 19 | label: Additional Info 20 | type: textarea 21 | description: Report a typo or missing area of documentation 22 | labels: 23 | - "area: documentation" 24 | name: 📝 Documentation 25 | title: "📝 Documentation: " 26 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/03-feature.yml: -------------------------------------------------------------------------------- 1 | body: 2 | - attributes: 3 | description: If any of these required steps are not taken, we may not be able to review your issue. Help us to help you! 4 | label: Bug Report Checklist 5 | options: 6 | - label: I have tried restarting my IDE and the issue persists. 7 | required: true 8 | - label: I have pulled the latest `main` branch of the repository. 9 | required: true 10 | - label: I have [searched for related issues](https://github.com/mcnaveen/Cart/issues?q=is%3Aissue) and found none that matched my issue. 11 | required: true 12 | type: checkboxes 13 | - attributes: 14 | description: What did you expect to be able to do? 15 | label: Overview 16 | type: textarea 17 | validations: 18 | required: true 19 | - attributes: 20 | description: Any additional info you'd like to provide. 21 | label: Additional Info 22 | type: textarea 23 | description: Request that a new feature be added or an existing feature improved 24 | labels: 25 | - "type: feature" 26 | name: 🚀 Feature 27 | title: "🚀 Feature: " 28 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/04-tooling.yml: -------------------------------------------------------------------------------- 1 | body: 2 | - attributes: 3 | description: If any of these required steps are not taken, we may not be able to review your issue. Help us to help you! 4 | label: Bug Report Checklist 5 | options: 6 | - label: I have tried restarting my IDE and the issue persists. 7 | required: true 8 | - label: I have pulled the latest `main` branch of the repository. 9 | required: true 10 | - label: I have [searched for related issues](https://github.com/mcnaveen/Cart/issues?q=is%3Aissue) and found none that matched my issue. 11 | required: true 12 | type: checkboxes 13 | - attributes: 14 | description: What did you expect to be able to do? 15 | label: Overview 16 | type: textarea 17 | validations: 18 | required: true 19 | - attributes: 20 | description: Any additional info you'd like to provide. 21 | label: Additional Info 22 | type: textarea 23 | description: Report a bug or request an enhancement in repository tooling 24 | labels: 25 | - "area: tooling" 26 | name: 🛠 Tooling 27 | title: "🛠 Tooling: " 28 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | 4 | 5 | ## PR Checklist 6 | 7 | - [ ] Addresses an existing open issue: fixes #000 8 | - [ ] That issue was marked as [`status: accepting prs`](https://github.com/mcnaveen/Cart/issues?q=is%3Aopen+is%3Aissue+label%3A%22status%3A+accepting+prs%22) 9 | - [ ] Steps in [CONTRIBUTING.md](https://github.com/mcnaveen/Cart/blob/main/.github/CONTRIBUTING.md) were taken 10 | 11 | ## Overview 12 | 13 | 14 | -------------------------------------------------------------------------------- /.github/SECURITY.md: -------------------------------------------------------------------------------- 1 | # Security Policy 2 | 3 | We take all security vulnerabilities seriously. 4 | If you have a vulnerability or other security issues to disclose: 5 | 6 | - Thank you very much, please do! 7 | - Please send them to us by emailing `8493007+mcnaveen@users.noreply.github.com` 8 | 9 | We appreciate your efforts and responsible disclosure and will make every effort to acknowledge your contributions. 10 | -------------------------------------------------------------------------------- /.github/actions/prepare/action.yml: -------------------------------------------------------------------------------- 1 | description: Prepares the repo for a typical CI job 2 | 3 | name: Prepare 4 | 5 | runs: 6 | steps: 7 | - uses: pnpm/action-setup@v2 8 | - uses: actions/setup-node@v3 9 | with: 10 | cache: pnpm 11 | node-version: "18" 12 | - run: pnpm install --frozen-lockfile 13 | shell: bash 14 | using: composite 15 | -------------------------------------------------------------------------------- /.github/renovate.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://docs.renovatebot.com/renovate-schema.json", 3 | "automerge": true, 4 | "internalChecksFilter": "strict", 5 | "labels": ["dependencies"], 6 | "postUpdateOptions": ["pnpmDedupe"], 7 | "stabilityDays": 3 8 | } 9 | -------------------------------------------------------------------------------- /.github/workflows/build.yml: -------------------------------------------------------------------------------- 1 | jobs: 2 | build: 3 | runs-on: ubuntu-latest 4 | steps: 5 | - uses: actions/checkout@v4 6 | - uses: ./.github/actions/prepare 7 | - run: pnpm build 8 | - run: node ./lib/index.js 9 | 10 | name: Build 11 | 12 | on: 13 | pull_request: ~ 14 | push: 15 | branches: 16 | - main 17 | -------------------------------------------------------------------------------- /.github/workflows/compliance.yml: -------------------------------------------------------------------------------- 1 | jobs: 2 | compliance: 3 | runs-on: ubuntu-latest 4 | steps: 5 | - uses: mtfoley/pr-compliance-action@main 6 | with: 7 | body-auto-close: false 8 | ignore-authors: |- 9 | allcontributors 10 | allcontributors[bot] 11 | renovate 12 | renovate[bot] 13 | ignore-team-members: false 14 | 15 | name: Compliance 16 | 17 | on: 18 | pull_request: 19 | branches: 20 | - main 21 | types: 22 | - edited 23 | - opened 24 | - reopened 25 | - synchronize 26 | 27 | permissions: 28 | pull-requests: write 29 | -------------------------------------------------------------------------------- /.github/workflows/contributors.yml: -------------------------------------------------------------------------------- 1 | jobs: 2 | contributors: 3 | runs-on: ubuntu-latest 4 | steps: 5 | - uses: actions/checkout@v4 6 | with: 7 | fetch-depth: 0 8 | - uses: ./.github/actions/prepare 9 | - env: 10 | GITHUB_TOKEN: ${{ secrets.ACCESS_TOKEN }} 11 | uses: JoshuaKGoldberg/all-contributors-auto-action@v0.3.2 12 | 13 | name: Contributors 14 | 15 | on: 16 | push: 17 | branches: 18 | - main 19 | -------------------------------------------------------------------------------- /.github/workflows/lint-knip.yml: -------------------------------------------------------------------------------- 1 | jobs: 2 | lint_knip: 3 | runs-on: ubuntu-latest 4 | steps: 5 | - uses: actions/checkout@v4 6 | - uses: ./.github/actions/prepare 7 | - run: pnpm lint:knip 8 | 9 | name: Lint Knip 10 | 11 | on: 12 | pull_request: ~ 13 | push: 14 | branches: 15 | - main 16 | -------------------------------------------------------------------------------- /.github/workflows/lint-markdown.yml: -------------------------------------------------------------------------------- 1 | jobs: 2 | lint_markdown: 3 | runs-on: ubuntu-latest 4 | steps: 5 | - uses: actions/checkout@v4 6 | - uses: ./.github/actions/prepare 7 | - run: pnpm lint:md 8 | 9 | name: Lint Markdown 10 | 11 | on: 12 | pull_request: ~ 13 | push: 14 | branches: 15 | - main 16 | -------------------------------------------------------------------------------- /.github/workflows/lint-package-json.yml: -------------------------------------------------------------------------------- 1 | jobs: 2 | lint_package_json: 3 | runs-on: ubuntu-latest 4 | steps: 5 | - uses: actions/checkout@v4 6 | - uses: ./.github/actions/prepare 7 | - run: pnpm lint:package-json 8 | 9 | name: Lint Package JSON 10 | 11 | on: 12 | pull_request: ~ 13 | push: 14 | branches: 15 | - main 16 | -------------------------------------------------------------------------------- /.github/workflows/lint-packages.yml: -------------------------------------------------------------------------------- 1 | jobs: 2 | lint_packages: 3 | runs-on: ubuntu-latest 4 | steps: 5 | - uses: actions/checkout@v4 6 | - uses: ./.github/actions/prepare 7 | - run: pnpm lint:packages 8 | 9 | name: Lint Packages 10 | 11 | on: 12 | pull_request: ~ 13 | push: 14 | branches: 15 | - main 16 | -------------------------------------------------------------------------------- /.github/workflows/lint-spelling.yml: -------------------------------------------------------------------------------- 1 | jobs: 2 | lint_spelling: 3 | runs-on: ubuntu-latest 4 | steps: 5 | - uses: actions/checkout@v4 6 | - uses: ./.github/actions/prepare 7 | - run: pnpm lint:spelling 8 | 9 | name: Lint spelling 10 | 11 | on: 12 | pull_request: ~ 13 | push: 14 | branches: 15 | - main 16 | -------------------------------------------------------------------------------- /.github/workflows/lint.yml: -------------------------------------------------------------------------------- 1 | jobs: 2 | lint: 3 | runs-on: ubuntu-latest 4 | steps: 5 | - uses: actions/checkout@v4 6 | - uses: ./.github/actions/prepare 7 | - run: pnpm lint 8 | 9 | name: Lint 10 | 11 | on: 12 | pull_request: ~ 13 | push: 14 | branches: 15 | - main 16 | -------------------------------------------------------------------------------- /.github/workflows/post-release.yml: -------------------------------------------------------------------------------- 1 | jobs: 2 | post_release: 3 | runs-on: ubuntu-latest 4 | steps: 5 | - uses: actions/checkout@v4 6 | with: 7 | fetch-depth: 0 8 | - run: echo "npm_version=$(npm pkg get version | tr -d '"')" >> "$GITHUB_ENV" 9 | - uses: apexskier/github-release-commenter@v1 10 | with: 11 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 12 | comment-template: | 13 | :tada: This is included in version {release_link} :tada: 14 | 15 | The release is available on: 16 | 17 | * [GitHub releases](https://github.com/mcnaveen/Cart/releases/tag/{release_tag}) 18 | * [npm package (@latest dist-tag)](https://www.npmjs.com/package/Cart/v/${{ env.npm_version }}) 19 | 20 | Cheers! 📦🚀 21 | 22 | name: Post Release 23 | 24 | on: 25 | release: 26 | types: 27 | - published 28 | -------------------------------------------------------------------------------- /.github/workflows/pr-review-requested.yml: -------------------------------------------------------------------------------- 1 | jobs: 2 | pr_review_requested: 3 | runs-on: ubuntu-latest 4 | steps: 5 | - uses: actions-ecosystem/action-remove-labels@v1 6 | with: 7 | labels: "status: waiting for author" 8 | - if: failure() 9 | run: | 10 | echo "Don't worry if the previous step failed." 11 | echo "See https://github.com/actions-ecosystem/action-remove-labels/issues/221." 12 | 13 | name: PR Review Requested 14 | 15 | on: 16 | pull_request_target: 17 | types: 18 | - review_requested 19 | 20 | permissions: 21 | pull-requests: write 22 | -------------------------------------------------------------------------------- /.github/workflows/prettier.yml: -------------------------------------------------------------------------------- 1 | jobs: 2 | prettier: 3 | runs-on: ubuntu-latest 4 | steps: 5 | - uses: actions/checkout@v4 6 | - uses: ./.github/actions/prepare 7 | - run: pnpm format --list-different 8 | 9 | name: Prettier 10 | 11 | on: 12 | pull_request: ~ 13 | push: 14 | branches: 15 | - main 16 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | concurrency: 2 | group: ${{ github.workflow }} 3 | 4 | jobs: 5 | release: 6 | runs-on: ubuntu-latest 7 | steps: 8 | - uses: actions/checkout@v4 9 | with: 10 | fetch-depth: 0 11 | ref: main 12 | - uses: ./.github/actions/prepare 13 | - run: pnpm build 14 | - run: git config user.name "${GITHUB_ACTOR}" 15 | - run: git config user.email "${GITHUB_ACTOR}@users.noreply.github.com" 16 | - env: 17 | NPM_TOKEN: ${{ secrets.NPM_TOKEN }} 18 | run: npm config set //registry.npmjs.org/:_authToken $NPM_TOKEN 19 | - name: Delete branch protection on main 20 | uses: actions/github-script@v6.4.1 21 | with: 22 | github-token: ${{ secrets.ACCESS_TOKEN }} 23 | script: | 24 | try { 25 | await github.request( 26 | `DELETE /repos/mcnaveen/Cart/branches/main/protection`, 27 | ); 28 | } catch (error) { 29 | if (!error.message?.includes?.("Branch not protected")) { 30 | throw error; 31 | } 32 | } 33 | - env: 34 | GITHUB_TOKEN: ${{ secrets.ACCESS_TOKEN }} 35 | run: | 36 | if pnpm run should-semantic-release ; then 37 | pnpm release-it --verbose 38 | fi 39 | - if: always() 40 | name: Recreate branch protection on main 41 | uses: actions/github-script@v6.4.1 42 | with: 43 | github-token: ${{ secrets.ACCESS_TOKEN }} 44 | script: | 45 | github.request( 46 | `PUT /repos/mcnaveen/Cart/branches/main/protection`, 47 | { 48 | allow_deletions: false, 49 | allow_force_pushes: true, 50 | allow_fork_pushes: false, 51 | allow_fork_syncing: true, 52 | block_creations: false, 53 | branch: "main", 54 | enforce_admins: false, 55 | owner: "mcnaveen", 56 | repo: "Cart", 57 | required_conversation_resolution: true, 58 | required_linear_history: false, 59 | required_pull_request_reviews: null, 60 | required_status_checks: { 61 | checks: [ 62 | { context: "build" }, 63 | { context: "compliance" }, 64 | { context: "lint" }, 65 | { context: "lint_knip" }, 66 | { context: "lint_markdown" }, 67 | { context: "lint_package_json" }, 68 | { context: "lint_packages" }, 69 | { context: "lint_spelling" }, 70 | { context: "prettier" }, 71 | { context: "test" }, 72 | ], 73 | strict: false, 74 | }, 75 | restrictions: null, 76 | } 77 | ); 78 | 79 | name: Release 80 | 81 | on: 82 | push: 83 | branches: 84 | - main 85 | 86 | permissions: 87 | contents: write 88 | id-token: write 89 | -------------------------------------------------------------------------------- /.github/workflows/tsc.yml: -------------------------------------------------------------------------------- 1 | jobs: 2 | type_check: 3 | runs-on: ubuntu-latest 4 | steps: 5 | - uses: actions/checkout@v4 6 | - uses: ./.github/actions/prepare 7 | - run: pnpm tsc 8 | 9 | name: Type Check 10 | 11 | on: 12 | pull_request: ~ 13 | push: 14 | branches: 15 | - main 16 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | coverage/ 2 | lib/ 3 | node_modules/ 4 | -------------------------------------------------------------------------------- /.husky/.gitignore: -------------------------------------------------------------------------------- 1 | _ 2 | -------------------------------------------------------------------------------- /.husky/pre-commit: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | . "$(dirname "$0")/_/husky.sh" 3 | npx lint-staged 4 | -------------------------------------------------------------------------------- /.markdownlint.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "markdownlint/style/prettier", 3 | "first-line-h1": false, 4 | "no-inline-html": false 5 | } 6 | -------------------------------------------------------------------------------- /.markdownlintignore: -------------------------------------------------------------------------------- 1 | .github/CODE_OF_CONDUCT.md 2 | CHANGELOG.md 3 | lib/ 4 | node_modules/ 5 | docs/ -------------------------------------------------------------------------------- /.npmpackagejsonlintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "npm-package-json-lint-config-default", 3 | "rules": { "require-description": "error", "require-license": "error" } 4 | } 5 | -------------------------------------------------------------------------------- /.nvmrc: -------------------------------------------------------------------------------- 1 | 18.18.0 2 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | .all-contributorsrc 2 | coverage/ 3 | lib/ 4 | pnpm-lock.yaml 5 | docs/ -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "http://json.schemastore.org/prettierrc", 3 | "overrides": [ 4 | { "files": ".*rc", "options": { "parser": "json" } }, 5 | { "files": ".nvmrc", "options": { "parser": "yaml" } } 6 | ], 7 | "plugins": ["prettier-plugin-curly", "prettier-plugin-packagejson"], 8 | "useTabs": true 9 | } 10 | -------------------------------------------------------------------------------- /.release-it.json: -------------------------------------------------------------------------------- 1 | { 2 | "git": { 3 | "commitMessage": "chore: release v${version}", 4 | "requireCommits": true 5 | }, 6 | "github": { 7 | "autoGenerate": true, 8 | "release": true, 9 | "releaseName": "v${version}" 10 | }, 11 | "npm": { "publishArgs": ["--provenance"] }, 12 | "plugins": { 13 | "@release-it/conventional-changelog": { 14 | "infile": "CHANGELOG.md", 15 | "preset": "angular" 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": [ 3 | "DavidAnson.vscode-markdownlint", 4 | "dbaeumer.vscode-eslint", 5 | "esbenp.prettier-vscode", 6 | "streetsidesoftware.code-spell-checker" 7 | ] 8 | } 9 | -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | { 2 | "configurations": [ 3 | { 4 | "args": ["run", "${relativeFile}"], 5 | "autoAttachChildProcesses": true, 6 | "console": "integratedTerminal", 7 | "name": "Debug Current Test File", 8 | "program": "${workspaceRoot}/node_modules/vitest/vitest.mjs", 9 | "request": "launch", 10 | "skipFiles": ["/**", "**/node_modules/**"], 11 | "smartStep": true, 12 | "type": "node" 13 | } 14 | ], 15 | "version": "0.2.0" 16 | } 17 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "editor.codeActionsOnSave": { "source.fixAll.eslint": true }, 3 | "editor.defaultFormatter": "esbenp.prettier-vscode", 4 | "editor.formatOnSave": true, 5 | "editor.rulers": [80], 6 | "eslint.probe": [ 7 | "javascript", 8 | "javascriptreact", 9 | "json", 10 | "jsonc", 11 | "markdown", 12 | "typescript", 13 | "typescriptreact", 14 | "yaml" 15 | ], 16 | "eslint.rules.customizations": [{ "rule": "*", "severity": "warn" }], 17 | "typescript.tsdk": "node_modules/typescript/lib" 18 | } 19 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | ## [1.1.2](https://github.com/mcnaveen/cart/compare/1.1.1...1.1.2) (2023-10-27) 2 | 3 | ### Bug Fixes 4 | 5 | - **storage:** :bug: fix storage not working in react-native ([7337df9](https://github.com/mcnaveen/cart/commit/7337df933339cd1f70d76cf1aa067ecc0b18ab22)) 6 | 7 | ## [1.1.1](https://github.com/mcnaveen/cart/compare/1.1.0...1.1.1) (2023-09-23) 8 | 9 | # 1.1.0 (2023-09-22) 10 | 11 | ### Features 12 | 13 | - **core:** :sparkles: initial release ([fa3db1e](https://github.com/mcnaveen/cart/commit/fa3db1e6b0e719db44ee2c6c74cc049dd9cdb630)) 14 | -------------------------------------------------------------------------------- /LICENSE.md: -------------------------------------------------------------------------------- 1 | # MIT License 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining 4 | a copy of this software and associated documentation files (the 5 | 'Software'), to deal in the Software without restriction, including 6 | without limitation the rights to use, copy, modify, merge, publish, 7 | distribute, sublicense, and/or sell copies of the Software, and to 8 | permit persons to whom the Software is furnished to do so, subject to 9 | the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be 12 | included in all copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, 15 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 16 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 17 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 18 | CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 19 | TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 20 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

Cart

2 | 3 |

Headless cart management library

4 | 5 | ![npm i cart](image/cover.png) 6 | 7 |

8 | 9 | 10 | 11 | All Contributors: 2 12 | 13 | 14 | 15 | 16 | Codecov Test Coverage 17 | 18 | 19 | Contributor Covenant 20 | 21 | 22 | License: MIT 23 | 24 | Style: Prettier 25 | TypeScript: Strict 26 |

27 | 28 | > ⚠️ Expect some breaking changes, Use at your own risk 29 | 30 | ### 🛒 Demo 31 | 32 | - [View React Demo](https://stackblitz-starters-dt9zzc.stackblitz.io/) 33 | - [Nextjs App Directory Demo](https://stackblitzstarterskcruvd-uufb--3000--d6c42aca.local-credentialless.webcontainer.io/) 34 | 35 | ### :package: Requirements 36 | 37 | - React or Nextjs Project ⚛️ 38 | 39 | ### :sparkles: Installation 40 | 41 | - Install using the below command (with your package manager of choice) 42 | 43 | ```bash 44 | # npm 45 | npm install cart --save 46 | 47 | # yarn 48 | yarn add cart 49 | 50 | #pnpm 51 | pnpm add cart 52 | 53 | # bun 54 | bun install cart 55 | 56 | ``` 57 | 58 | --- 59 | 60 | ### :bulb: Usage Example 61 | 62 | ```jsx 63 | import React from "react"; 64 | import { useCart } from "cart"; 65 | 66 | const item = { 67 | productId: "123", 68 | name: "Product 1", 69 | quantity: 1, 70 | price: 10, 71 | }; 72 | 73 | function Cart() { 74 | const { 75 | addToCart, 76 | cartItems, 77 | clearCart, 78 | decreaseItem, 79 | toggleCart, 80 | isCartOpen, 81 | } = useCart(); 82 | 83 | return ( 84 |
85 |

{isCartOpen ? "Open" : "Closed"}

86 | 87 | 88 | 89 | 90 | 91 | 92 |

{JSON.stringify(cartItems)}

93 |
94 | ); 95 | } 96 | 97 | export default Cart; 98 | ``` 99 | 100 | ### :bulb: SSR Example 101 | 102 | ```jsx 103 | import { useCart, withSSR } from "cart"; 104 | import React from "react"; 105 | 106 | const item = { 107 | productId: "123", 108 | name: "Product 1", 109 | quantity: 1, 110 | price: 10, 111 | }; 112 | 113 | function MyCart() { 114 | const cart = withSSR(useCart, (state) => state); 115 | 116 | const handleToggle = () => { 117 | cart?.toggleCart(); 118 | }; 119 | 120 | const itemadd = () => { 121 | cart?.addToCart(item); 122 | }; 123 | 124 | return ( 125 |
126 |

{cart?.isCartOpen ? "Open" : "Closed"}

127 | 128 | 129 | 130 | 131 | 132 | 133 |

{JSON.stringify(cart?.cartItems)}

134 |
135 | ); 136 | } 137 | 138 | export default MyCart; 139 | ``` 140 | 141 | --- 142 | 143 | ### API Reference 144 | 145 | | Name | Type | Default Value | Description | Example | 146 | | ---------------- | ---------- | ------------- | -------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ | 147 | | `isCartOpen` | `boolean` | `false` | Indicates whether the cart is open or not. | `isCartOpen ? "Yes" : "No"` | 148 | | `toggleCart` | `function` | - | Toggles the visibility of the shopping cart. | `toggleCart();` | 149 | | `openCart` | `function` | - | Sets the cart open state to `true`. | `openCart();` | 150 | | `closeCart` | `function` | - | Sets the cart open state to `false`. | `closeCart();` | 151 | | `cartItems` | `array` | `[]` | An array of items in the cart. | `cartItems.map((item) => (

{item.name}

Quantity: {item.quantity}

Price: ${item.price}

))` | 152 | | `addToCart` | `function` | - | Adds an item to the shopping cart or updates its quantity if already in the cart. | `addToCart({ productId: 'product1', name: 'Product 1', quantity: 2, price: 20 });` | 153 | | `decreaseItem` | `function` | - | Decreases the quantity of an item in the shopping cart or removes it if the quantity becomes zero. | `decreaseItem('product1', 1);` | 154 | | `removeFromCart` | `function` | - | Removes an item from the shopping cart. | `removeFromCart('product1');` | 155 | | `clearCart` | `function` | - | Clears all items from the shopping cart. | `clearCart();` | 156 | 157 | #### :pray: Credits 158 | 159 | Huge thanks to [Peter Krumins](https://github.com/pkrumins) for the package name `cart`. 160 | Please checkout [Browserling](https://www.browserling.com/) - Online cross-browser testing platform. 161 | 162 | (Btw, This is not a sponsored message, Just my way of saying thank you) 163 | 164 | #### Contributors 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 |
Josh Goldberg ✨
Josh Goldberg ✨

🔧
MC Naveen
MC Naveen

💻 🖋 📖 🤔 🚇 🚧 📆 🔧
178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | #### :green_heart: Message 188 | 189 | I hope you find this useful. 190 | If you have any questions, please create an issue. 191 | 192 | --- 193 | 194 | > 💙 This package is based on [@JoshuaKGoldberg](https://github.com/JoshuaKGoldberg)'s [create-typescript-app](https://github.com/JoshuaKGoldberg/create-typescript-app). 195 | -------------------------------------------------------------------------------- /cspell.json: -------------------------------------------------------------------------------- 1 | { 2 | "dictionaries": ["typescript"], 3 | "ignorePaths": [ 4 | ".github", 5 | "CHANGELOG.md", 6 | "coverage", 7 | "lib", 8 | "node_modules", 9 | "pnpm-lock.yaml", 10 | "docs" 11 | ], 12 | "words": [ 13 | "Browserling", 14 | "cart", 15 | "cart-management", 16 | "Codecov", 17 | "codespace", 18 | "commitlint", 19 | "contributorsrc", 20 | "conventionalcommits", 21 | "floatingcart", 22 | "headless-cart", 23 | "imagesrc", 24 | "itemadd", 25 | "knip", 26 | "Krumins", 27 | "lcov", 28 | "markdownlintignore", 29 | "mcnaveen", 30 | "Nextjs", 31 | "npmpackagejsonlintrc", 32 | "outro", 33 | "packagejson", 34 | "quickstart", 35 | "react-cart", 36 | "tsup", 37 | "wontfix", 38 | "zustand" 39 | ] 40 | } 41 | -------------------------------------------------------------------------------- /docs/.gitignore: -------------------------------------------------------------------------------- 1 | .next 2 | node_modules 3 | .github 4 | .vercel 5 | -------------------------------------------------------------------------------- /docs/components/floatingButton.tsx: -------------------------------------------------------------------------------- 1 | import {useCart, withSSR} from 'cart' 2 | import { ShoppingCart } from "lucide-react"; 3 | import React from 'react'; 4 | 5 | export const FloatingButton = () => { 6 | const cart = withSSR(useCart, (state) => state); 7 | 8 | return ( 9 |
10 | {cart?.cartItems?.length! > 0 && ( 11 |
alert(cart?.cartItems?.length! > 0 ? "Items in the cart: " + JSON.stringify(cart?.cartItems, null, 2): "No Items in the cart")} 15 | > 16 | 17 | {cart?.cartItems?.length! > 0 && ( 18 |
19 | )} 20 |
21 | )} 22 |
23 | ) 24 | 25 | } 26 | -------------------------------------------------------------------------------- /docs/components/mycart.tsx: -------------------------------------------------------------------------------- 1 | 'use client'; 2 | 3 | import { type CartItems, type CartState, useCart, withSSR } from 'cart'; 4 | import React from 'react'; 5 | 6 | import {FloatingButton} from "./floatingButton" 7 | 8 | interface Product { 9 | name: string; 10 | price: number; 11 | productId: string; 12 | } 13 | 14 | const products: Product[] = [ 15 | { 16 | name: 'Product 1', 17 | price: 10, 18 | productId: '123', 19 | }, 20 | { 21 | name: 'Product 2', 22 | price: 15, 23 | productId: '456', 24 | }, 25 | { 26 | name: 'Product 3', 27 | price: 20, 28 | productId: '789', 29 | }, 30 | ]; 31 | 32 | export function MyCart() { 33 | const cart = withSSR(useCart, (state) => state); 34 | 35 | const handleToggle = () => { 36 | cart?.toggleCart?.(); 37 | }; 38 | 39 | const addItem = (product: CartItems) => { 40 | cart?.addToCart?.(product); 41 | }; 42 | 43 | const subtractItem = (productId: string) => { 44 | cart?.decreaseItem?.(productId, 1); 45 | }; 46 | 47 | return ( 48 | <> 49 | 50 |
51 |

52 | Cart Status: {cart?.isCartOpen ? 'Open' : 'Closed'} 53 |

54 |
55 | 56 | 62 | 68 | {products.map((product) => { 69 | const cartItem = cart?.cartItems?.find( 70 | (item) => item.productId === product.productId 71 | ); 72 | const quantity = cartItem ? cartItem.quantity : 0; 73 | const total = quantity * product.price; 74 | 75 | return ( 76 |
80 |
81 | {product.name} - ${product.price} (x{quantity}) - ${total} 82 |
83 |
84 | 91 | 97 |
98 |
99 | ); 100 | })} 101 |
102 |
103 | 104 | ); 105 | } 106 | -------------------------------------------------------------------------------- /docs/next-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | 4 | // NOTE: This file should not be edited 5 | // see https://nextjs.org/docs/basic-features/typescript for more information. 6 | -------------------------------------------------------------------------------- /docs/next.config.js: -------------------------------------------------------------------------------- 1 | const withNextra = require('nextra')({ 2 | theme: 'nextra-theme-docs', 3 | themeConfig: './theme.config.tsx', 4 | }) 5 | 6 | module.exports = withNextra() 7 | -------------------------------------------------------------------------------- /docs/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "nextra-docs-template", 3 | "version": "0.0.1", 4 | "description": "Nextra docs template", 5 | "scripts": { 6 | "dev": "next dev", 7 | "build": "next build", 8 | "start": "next start" 9 | }, 10 | "repository": { 11 | "type": "git", 12 | "url": "git+https://github.com/shuding/nextra-docs-template.git" 13 | }, 14 | "author": "Shu Ding ", 15 | "license": "MIT", 16 | "bugs": { 17 | "url": "https://github.com/shuding/nextra-docs-template/issues" 18 | }, 19 | "homepage": "https://github.com/shuding/nextra-docs-template#readme", 20 | "dependencies": { 21 | "cart": "^1.1.1", 22 | "lucide-react": "^0.279.0", 23 | "next": "^13.0.6", 24 | "nextra": "latest", 25 | "nextra-theme-docs": "latest", 26 | "react": "^18.2.0", 27 | "react-dom": "^18.2.0" 28 | }, 29 | "devDependencies": { 30 | "@types/node": "18.11.10", 31 | "autoprefixer": "^10.4.16", 32 | "postcss": "^8.4.30", 33 | "tailwindcss": "^3.3.3", 34 | "typescript": "^4.9.3" 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /docs/pages/_app.tsx: -------------------------------------------------------------------------------- 1 | import React from "react"; 2 | 3 | import "../styles/globals.css"; 4 | 5 | export default function MyApp({ Component, pageProps }) { 6 | const getLayout = Component.getLayout ?? ((page) => page); 7 | 8 | return getLayout(); 9 | } 10 | -------------------------------------------------------------------------------- /docs/pages/_meta.json: -------------------------------------------------------------------------------- 1 | { 2 | "index": "Introduction", 3 | "installation": "Installation", 4 | "api-reference": "API Reference", 5 | "usage": "Usage" 6 | } 7 | -------------------------------------------------------------------------------- /docs/pages/api-reference.mdx: -------------------------------------------------------------------------------- 1 | # API Reference 2 | See what are the API is being exposed by the cart library 3 | 4 | | Name | Type | Default Value | Description | Example | 5 | | ---------------- | ---------- | ------------- | -------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------ | 6 | | `isCartOpen` | `boolean` | `false` | Indicates whether the cart is open or not. | `isCartOpen ? "Yes" : "No"` | 7 | | `toggleCart` | `function` | - | Toggles the visibility of the shopping cart. | `toggleCart();` | 8 | | `openCart` | `function` | - | Sets the cart open state to `true`. | `openCart();` | 9 | | `closeCart` | `function` | - | Sets the cart open state to `false`. | `closeCart();` | 10 | | `cartItems` | `array` | `[]` | An array of items in the cart. | `cartItems.map((item) => (

{item.name}

Quantity: {item.quantity}

Price: ${item.price}

))` | 11 | | `addToCart` | `function` | - | Adds an item to the shopping cart or updates its quantity if already in the cart. | `addToCart({ productId: 'product1', name: 'Product 1', quantity: 2, price: 20 });` | 12 | | `decreaseItem` | `function` | - | Decreases the quantity of an item in the shopping cart or removes it if the quantity becomes zero. | `decreaseItem('product1', 1);` | 13 | | `removeFromCart` | `function` | - | Removes an item from the shopping cart. | `removeFromCart('product1');` | 14 | | `clearCart` | `function` | - | Clears all items from the shopping cart. | `clearCart();` | 15 | -------------------------------------------------------------------------------- /docs/pages/index.mdx: -------------------------------------------------------------------------------- 1 | # Introduction 2 | 3 | Welcome to Cart! 🛒 An Open Source Headless cart management library that does all the heavy lifting of managing the cart state, storing them in local storage, and even more. 4 | 5 | 6 | ## What is Cart? 7 | 8 | 9 | An online shopping cart is like a virtual basket for your online purchases. It helps you add items, review them, and make payments easily. However, building one from scratch can be tough and time-consuming. It requires a lot of coding and might have more bugs or security issues. 10 | 11 | 12 | ## Example 13 | 14 | > Please note that the cart library is a headless, means only the cart functions will be provided. No UI, No styles. Below one I created the UI for demo purpose. You can test using the below example. 15 | 16 | import {MyCart} from "../components/mycart.tsx" 17 | 18 | -------------------------------------------------------------------------------- /docs/pages/installation.mdx: -------------------------------------------------------------------------------- 1 | # Installation 2 | 3 | A Cart library can be installed on your JavaScript projects including Reactjs, Nextjs and so on just with a single line of command. 4 | 5 | - [View NPM](https://www.npmjs.com/package/cart) 6 | 7 | ```bash 8 | # npm 9 | npm install cart --save 10 | 11 | # yarn 12 | yarn add cart 13 | 14 | #pnpm 15 | pnpm add cart 16 | 17 | # bun 18 | bun install cart 19 | ``` -------------------------------------------------------------------------------- /docs/pages/usage/nextjs.mdx: -------------------------------------------------------------------------------- 1 | # Using with Nextjs 2 | 3 | ### Intro 4 | Once you have done with the Installation, All you have to do is to Import `useCart` hook and `withSSR` in your Cart Component 5 | 6 | Then create a new file called `mycart.jsx` and use the below example code. 7 | 8 | > If you're using App Directory, make sure you have `"use client"` directive at the top. 9 | 10 | Feel free to remove the `types` if you're using JavaScript. 11 | 12 | ### Example 13 | 14 | ```tsx filename="mycart.tsx" copy 15 | 'use client'; 16 | 17 | import React from 'react'; 18 | import { useCart, withSSR, type CartItems, type CartState } from 'cart'; 19 | interface Product { 20 | productId: string; 21 | name: string; 22 | price: number; 23 | } 24 | 25 | const products: Product[] = [ 26 | { 27 | productId: '123', 28 | name: 'Product 1', 29 | price: 10, 30 | }, 31 | { 32 | productId: '456', 33 | name: 'Product 2', 34 | price: 15, 35 | }, 36 | { 37 | productId: '789', 38 | name: 'Product 3', 39 | price: 20, 40 | }, 41 | ]; 42 | 43 | export function MyCart() { 44 | // For using with SSR, Wrap the useCart using withSSR like below 45 | const cart: CartState = withSSR(useCart, (state) => state); 46 | 47 | const handleToggle = () => { 48 | cart?.toggleCart?.(); 49 | }; 50 | 51 | const addItem = (product: CartItems) => { 52 | cart?.addToCart?.(product); 53 | }; 54 | 55 | const subtractItem = (productId: string) => { 56 | cart?.decreaseItem?.(productId, 1); 57 | }; 58 | 59 | return ( 60 |
61 |

62 | Cart Status: {cart?.isCartOpen ? 'Open' : 'Closed'} 63 |

64 |
65 | {cart?.isCartOpen && ( 66 |
67 |

Cart Items:

68 |
{JSON.stringify(cart?.cartItems, null, 2)}
69 |
70 | )} 71 | 76 | 81 | {products.map((product) => { 82 | const cartItem = cart?.cartItems?.find( 83 | (item) => item.productId === product.productId 84 | ); 85 | const quantity = cartItem ? cartItem.quantity : 0; 86 | const total = quantity * product.price; 87 | 88 | return ( 89 |
93 |
94 | {product.name} - ${product.price} (x{quantity}) - ${total} 95 |
96 | 101 | 106 |
107 | ); 108 | })} 109 |
110 |
111 | ); 112 | } 113 | ``` -------------------------------------------------------------------------------- /docs/pages/usage/react.mdx: -------------------------------------------------------------------------------- 1 | # Using with Reactjs 2 | 3 | ### Intro 4 | Once you have done with the Installation, All you have to do is to Import useCart hook in your Cart Component 5 | 6 | Then create a new file called mycart.jsx and use the below example code. 7 | 8 | ### Example 9 | 10 | ```jsx filename="mycart.jsx" copy 11 | import React from "react"; 12 | import { useCart } from "cart"; 13 | 14 | export default function Cart() { 15 | const { addToCart, decreaseItem, clearCart, cartItems } = useCart(); 16 | 17 | const products = [ 18 | { 19 | productId: "123", 20 | name: "Product 1", 21 | price: 10, 22 | }, 23 | { 24 | productId: "456", 25 | name: "Product 2", 26 | price: 15, 27 | }, 28 | // Add more products as needed 29 | ]; 30 | 31 | const addItem = (product) => { 32 | addToCart({ ...product, quantity: 1 }); 33 | }; 34 | 35 | const subtractItem = (productId) => { 36 | decreaseItem(productId, 1); 37 | }; 38 | 39 | const clear = () => { 40 | clearCart(); 41 | }; 42 | 43 | return ( 44 |
45 |

Cart Item Count: {cartItems.length}

46 |
    47 | {products.map((product) => { 48 | const cartItem = cartItems.find( 49 | (item) => item.productId === product.productId, 50 | ); 51 | const quantity = cartItem ? cartItem.quantity : 0; 52 | 53 | return ( 54 | <> 55 |
  • 56 | {product.name} - ${product.price} (x{quantity}) - $ 57 | {quantity * product.price} 58 | 59 | 62 |
  • 63 |
    64 | 65 | ); 66 | })} 67 |
68 |

69 | Total Price: $ 70 | {cartItems.reduce( 71 | (total, item) => total + item.quantity * item.price, 72 | 0, 73 | )} 74 |

75 | {cartItems.length > 0 && } 76 |
77 | ); 78 | } 79 | ``` 80 | 81 | Now, All you have to do is to import the Cart component you have just created. 82 | 83 | ```jsx filename="index.jsx" copy 84 | import { Cart } from "./mycart"; 85 | 86 | // and use it as component 87 | ; 88 | ``` -------------------------------------------------------------------------------- /docs/pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '6.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | dependencies: 8 | cart: 9 | specifier: ^1.1.1 10 | version: 1.1.1(react@18.2.0) 11 | lucide-react: 12 | specifier: ^0.279.0 13 | version: 0.279.0(react@18.2.0) 14 | next: 15 | specifier: ^13.0.6 16 | version: 13.0.6(react-dom@18.2.0)(react@18.2.0) 17 | nextra: 18 | specifier: latest 19 | version: 2.12.3(next@13.0.6)(react-dom@18.2.0)(react@18.2.0) 20 | nextra-theme-docs: 21 | specifier: latest 22 | version: 2.12.3(next@13.0.6)(nextra@2.12.3)(react-dom@18.2.0)(react@18.2.0) 23 | react: 24 | specifier: ^18.2.0 25 | version: 18.2.0 26 | react-dom: 27 | specifier: ^18.2.0 28 | version: 18.2.0(react@18.2.0) 29 | 30 | devDependencies: 31 | '@types/node': 32 | specifier: 18.11.10 33 | version: 18.11.10 34 | autoprefixer: 35 | specifier: ^10.4.16 36 | version: 10.4.16(postcss@8.4.30) 37 | postcss: 38 | specifier: ^8.4.30 39 | version: 8.4.30 40 | tailwindcss: 41 | specifier: ^3.3.3 42 | version: 3.3.3 43 | typescript: 44 | specifier: ^4.9.3 45 | version: 4.9.3 46 | 47 | packages: 48 | 49 | /@alloc/quick-lru@5.2.0: 50 | resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} 51 | engines: {node: '>=10'} 52 | dev: true 53 | 54 | /@babel/runtime@7.20.6: 55 | resolution: {integrity: sha512-Q+8MqP7TiHMWzSfwiJwXCjyf4GYA4Dgw3emg/7xmwsdLJOZUp+nMqcOwOzzYheuM1rhDu8FSj2l0aoMygEuXuA==} 56 | engines: {node: '>=6.9.0'} 57 | dependencies: 58 | regenerator-runtime: 0.13.11 59 | dev: false 60 | 61 | /@braintree/sanitize-url@6.0.4: 62 | resolution: {integrity: sha512-s3jaWicZd0pkP0jf5ysyHUI/RE7MHos6qlToFcGWXVp+ykHOy77OUMrfbgJ9it2C5bow7OIQwYYaHjk9XlBQ2A==} 63 | dev: false 64 | 65 | /@headlessui/react@1.7.10(react-dom@18.2.0)(react@18.2.0): 66 | resolution: {integrity: sha512-1m66h/5eayTEZVT2PI13/2PG3EVC7a9XalmUtVSC8X76pcyKYMuyX1XAL2RUtCr8WhoMa/KrDEyoeU5v+kSQOw==} 67 | engines: {node: '>=10'} 68 | peerDependencies: 69 | react: ^16 || ^17 || ^18 70 | react-dom: ^16 || ^17 || ^18 71 | dependencies: 72 | client-only: 0.0.1 73 | react: 18.2.0 74 | react-dom: 18.2.0(react@18.2.0) 75 | dev: false 76 | 77 | /@jridgewell/gen-mapping@0.3.3: 78 | resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==} 79 | engines: {node: '>=6.0.0'} 80 | dependencies: 81 | '@jridgewell/set-array': 1.1.2 82 | '@jridgewell/sourcemap-codec': 1.4.15 83 | '@jridgewell/trace-mapping': 0.3.19 84 | dev: true 85 | 86 | /@jridgewell/resolve-uri@3.1.1: 87 | resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==} 88 | engines: {node: '>=6.0.0'} 89 | dev: true 90 | 91 | /@jridgewell/set-array@1.1.2: 92 | resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==} 93 | engines: {node: '>=6.0.0'} 94 | dev: true 95 | 96 | /@jridgewell/sourcemap-codec@1.4.15: 97 | resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} 98 | dev: true 99 | 100 | /@jridgewell/trace-mapping@0.3.19: 101 | resolution: {integrity: sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==} 102 | dependencies: 103 | '@jridgewell/resolve-uri': 3.1.1 104 | '@jridgewell/sourcemap-codec': 1.4.15 105 | dev: true 106 | 107 | /@mdx-js/mdx@2.3.0: 108 | resolution: {integrity: sha512-jLuwRlz8DQfQNiUCJR50Y09CGPq3fLtmtUQfVrj79E0JWu3dvsVcxVIcfhR5h0iXu+/z++zDrYeiJqifRynJkA==} 109 | dependencies: 110 | '@types/estree-jsx': 1.0.0 111 | '@types/mdx': 2.0.3 112 | estree-util-build-jsx: 2.2.0 113 | estree-util-is-identifier-name: 2.0.1 114 | estree-util-to-js: 1.1.0 115 | estree-walker: 3.0.1 116 | hast-util-to-estree: 2.1.0 117 | markdown-extensions: 1.1.1 118 | periscopic: 3.0.4 119 | remark-mdx: 2.1.5 120 | remark-parse: 10.0.1 121 | remark-rehype: 10.1.0 122 | unified: 10.1.2 123 | unist-util-position-from-estree: 1.1.1 124 | unist-util-stringify-position: 3.0.2 125 | unist-util-visit: 4.1.1 126 | vfile: 5.3.6 127 | transitivePeerDependencies: 128 | - supports-color 129 | dev: false 130 | 131 | /@mdx-js/react@2.3.0(react@18.2.0): 132 | resolution: {integrity: sha512-zQH//gdOmuu7nt2oJR29vFhDv88oGPmVw6BggmrHeMI+xgEkp1B2dX9/bMBSYtK0dyLX/aOmesKS09g222K1/g==} 133 | peerDependencies: 134 | react: '>=16' 135 | dependencies: 136 | '@types/mdx': 2.0.3 137 | '@types/react': 18.0.25 138 | react: 18.2.0 139 | dev: false 140 | 141 | /@napi-rs/simple-git-android-arm-eabi@0.1.9: 142 | resolution: {integrity: sha512-9D4JnfePMpgL4pg9aMUX7/TIWEUQ+Tgx8n3Pf8TNCMGjUbImJyYsDSLJzbcv9wH7srgn4GRjSizXFJHAPjzEug==} 143 | engines: {node: '>= 10'} 144 | cpu: [arm] 145 | os: [android] 146 | requiresBuild: true 147 | dev: false 148 | optional: true 149 | 150 | /@napi-rs/simple-git-android-arm64@0.1.9: 151 | resolution: {integrity: sha512-Krilsw0gPrrASZzudNEl9pdLuNbhoTK0j7pUbfB8FRifpPdFB/zouwuEm0aSnsDXN4ftGrmGG82kuiR/2MeoPg==} 152 | engines: {node: '>= 10'} 153 | cpu: [arm64] 154 | os: [android] 155 | requiresBuild: true 156 | dev: false 157 | optional: true 158 | 159 | /@napi-rs/simple-git-darwin-arm64@0.1.9: 160 | resolution: {integrity: sha512-H/F09nDgYjv4gcFrZBgdTKkZEepqt0KLYcCJuUADuxkKupmjLdecMhypXLk13AzvLW4UQI7NlLTLDXUFLyr2BA==} 161 | engines: {node: '>= 10'} 162 | cpu: [arm64] 163 | os: [darwin] 164 | requiresBuild: true 165 | dev: false 166 | optional: true 167 | 168 | /@napi-rs/simple-git-darwin-x64@0.1.9: 169 | resolution: {integrity: sha512-jBR2xS9nVPqmHv0TWz874W0m/d453MGrMeLjB+boK5IPPLhg3AWIZj0aN9jy2Je1BGVAa0w3INIQJtBBeB6kFA==} 170 | engines: {node: '>= 10'} 171 | cpu: [x64] 172 | os: [darwin] 173 | requiresBuild: true 174 | dev: false 175 | optional: true 176 | 177 | /@napi-rs/simple-git-linux-arm-gnueabihf@0.1.9: 178 | resolution: {integrity: sha512-3n0+VpO4YfZxndZ0sCvsHIvsazd+JmbSjrlTRBCnJeAU1/sfos3skNZtKGZksZhjvd+3o+/GFM8L7Xnv01yggA==} 179 | engines: {node: '>= 10'} 180 | cpu: [arm] 181 | os: [linux] 182 | requiresBuild: true 183 | dev: false 184 | optional: true 185 | 186 | /@napi-rs/simple-git-linux-arm64-gnu@0.1.9: 187 | resolution: {integrity: sha512-lIzf0KHU2SKC12vMrWwCtysG2Sdt31VHRPMUiz9lD9t3xwVn8qhFSTn5yDkTeG3rgX6o0p5EKalfQN5BXsJq2w==} 188 | engines: {node: '>= 10'} 189 | cpu: [arm64] 190 | os: [linux] 191 | requiresBuild: true 192 | dev: false 193 | optional: true 194 | 195 | /@napi-rs/simple-git-linux-arm64-musl@0.1.9: 196 | resolution: {integrity: sha512-KQozUoNXrxrB8k741ncWXSiMbjl1AGBGfZV21PANzUM8wH4Yem2bg3kfglYS/QIx3udspsT35I9abu49n7D1/w==} 197 | engines: {node: '>= 10'} 198 | cpu: [arm64] 199 | os: [linux] 200 | requiresBuild: true 201 | dev: false 202 | optional: true 203 | 204 | /@napi-rs/simple-git-linux-x64-gnu@0.1.9: 205 | resolution: {integrity: sha512-O/Niui5mnHPcK3iYC3ui8wgERtJWsQ3Y74W/09t0bL/3dgzGMl4oQt0qTj9dWCsnoGsIEYHPzwCBp/2vqYp/pw==} 206 | engines: {node: '>= 10'} 207 | cpu: [x64] 208 | os: [linux] 209 | requiresBuild: true 210 | dev: false 211 | optional: true 212 | 213 | /@napi-rs/simple-git-linux-x64-musl@0.1.9: 214 | resolution: {integrity: sha512-L9n+e8Wn3hKr3RsIdY8GaB+ry4xZ4BaGwyKExgoB8nDGQuRUY9oP6p0WA4hWfJvJnU1H6hvo36a5UFPReyBO7A==} 215 | engines: {node: '>= 10'} 216 | cpu: [x64] 217 | os: [linux] 218 | requiresBuild: true 219 | dev: false 220 | optional: true 221 | 222 | /@napi-rs/simple-git-win32-arm64-msvc@0.1.9: 223 | resolution: {integrity: sha512-Z6Ja/SZK+lMvRWaxj7wjnvSbAsGrH006sqZo8P8nxKUdZfkVvoCaAWr1r0cfkk2Z3aijLLtD+vKeXGlUPH6gGQ==} 224 | engines: {node: '>= 10'} 225 | cpu: [arm64] 226 | os: [win32] 227 | requiresBuild: true 228 | dev: false 229 | optional: true 230 | 231 | /@napi-rs/simple-git-win32-x64-msvc@0.1.9: 232 | resolution: {integrity: sha512-VAZj1UvC+R2MjKOD3I/Y7dmQlHWAYy4omhReQJRpbCf+oGCBi9CWiIduGqeYEq723nLIKdxP7XjaO0wl1NnUww==} 233 | engines: {node: '>= 10'} 234 | cpu: [x64] 235 | os: [win32] 236 | requiresBuild: true 237 | dev: false 238 | optional: true 239 | 240 | /@napi-rs/simple-git@0.1.9: 241 | resolution: {integrity: sha512-qKzDS0+VjMvVyU28px+C6zlD1HKy83NIdYzfMQWa/g/V1iG/Ic8uwrS2ihHfm7mp7X0PPrmINLiTTi6ieUIKfw==} 242 | engines: {node: '>= 10'} 243 | optionalDependencies: 244 | '@napi-rs/simple-git-android-arm-eabi': 0.1.9 245 | '@napi-rs/simple-git-android-arm64': 0.1.9 246 | '@napi-rs/simple-git-darwin-arm64': 0.1.9 247 | '@napi-rs/simple-git-darwin-x64': 0.1.9 248 | '@napi-rs/simple-git-linux-arm-gnueabihf': 0.1.9 249 | '@napi-rs/simple-git-linux-arm64-gnu': 0.1.9 250 | '@napi-rs/simple-git-linux-arm64-musl': 0.1.9 251 | '@napi-rs/simple-git-linux-x64-gnu': 0.1.9 252 | '@napi-rs/simple-git-linux-x64-musl': 0.1.9 253 | '@napi-rs/simple-git-win32-arm64-msvc': 0.1.9 254 | '@napi-rs/simple-git-win32-x64-msvc': 0.1.9 255 | dev: false 256 | 257 | /@next/env@13.0.6: 258 | resolution: {integrity: sha512-yceT6DCHKqPRS1cAm8DHvDvK74DLIkDQdm5iV+GnIts8h0QbdHvkUIkdOvQoOODgpr6018skbmSQp12z5OWIQQ==} 259 | dev: false 260 | 261 | /@next/swc-android-arm-eabi@13.0.6: 262 | resolution: {integrity: sha512-FGFSj3v2Bluw8fD/X+1eXIEB0PhoJE0zfutsAauRhmNpjjZshLDgoXMWm1jTRL/04K/o9gwwO2+A8+sPVCH1uw==} 263 | engines: {node: '>= 10'} 264 | cpu: [arm] 265 | os: [android] 266 | requiresBuild: true 267 | dev: false 268 | optional: true 269 | 270 | /@next/swc-android-arm64@13.0.6: 271 | resolution: {integrity: sha512-7MgbtU7kimxuovVsd7jSJWMkIHBDBUsNLmmlkrBRHTvgzx5nDBXogP0hzZm7EImdOPwVMPpUHRQMBP9mbsiJYQ==} 272 | engines: {node: '>= 10'} 273 | cpu: [arm64] 274 | os: [android] 275 | requiresBuild: true 276 | dev: false 277 | optional: true 278 | 279 | /@next/swc-darwin-arm64@13.0.6: 280 | resolution: {integrity: sha512-AUVEpVTxbP/fxdFsjVI9d5a0CFn6NVV7A/RXOb0Y+pXKIIZ1V5rFjPwpYfIfyOo2lrqgehMNQcyMRoTrhq04xg==} 281 | engines: {node: '>= 10'} 282 | cpu: [arm64] 283 | os: [darwin] 284 | requiresBuild: true 285 | dev: false 286 | optional: true 287 | 288 | /@next/swc-darwin-x64@13.0.6: 289 | resolution: {integrity: sha512-SasCDJlshglsPnbzhWaIF6VEGkQy2NECcAOxPwaPr0cwbbt4aUlZ7QmskNzgolr5eAjFS/xTr7CEeKJtZpAAtQ==} 290 | engines: {node: '>= 10'} 291 | cpu: [x64] 292 | os: [darwin] 293 | requiresBuild: true 294 | dev: false 295 | optional: true 296 | 297 | /@next/swc-freebsd-x64@13.0.6: 298 | resolution: {integrity: sha512-6Lbxd9gAdXneTkwHyYW/qtX1Tdw7ND9UbiGsGz/SP43ZInNWnW6q0au4hEVPZ9bOWWRKzcVoeTBdoMpQk9Hx9w==} 299 | engines: {node: '>= 10'} 300 | cpu: [x64] 301 | os: [freebsd] 302 | requiresBuild: true 303 | dev: false 304 | optional: true 305 | 306 | /@next/swc-linux-arm-gnueabihf@13.0.6: 307 | resolution: {integrity: sha512-wNdi5A519e1P+ozEuYOhWPzzE6m1y7mkO6NFwn6watUwO0X9nZs7fT9THmnekvmFQpaZ6U+xf2MQ9poQoCh6jQ==} 308 | engines: {node: '>= 10'} 309 | cpu: [arm] 310 | os: [linux] 311 | requiresBuild: true 312 | dev: false 313 | optional: true 314 | 315 | /@next/swc-linux-arm64-gnu@13.0.6: 316 | resolution: {integrity: sha512-e8KTRnleQY1KLk5PwGV5hrmvKksCc74QRpHl5ffWnEEAtL2FE0ave5aIkXqErsPdXkiKuA/owp3LjQrP+/AH7Q==} 317 | engines: {node: '>= 10'} 318 | cpu: [arm64] 319 | os: [linux] 320 | requiresBuild: true 321 | dev: false 322 | optional: true 323 | 324 | /@next/swc-linux-arm64-musl@13.0.6: 325 | resolution: {integrity: sha512-/7RF03C3mhjYpHN+pqOolgME3guiHU5T3TsejuyteqyEyzdEyLHod+jcYH6ft7UZ71a6TdOewvmbLOtzHW2O8A==} 326 | engines: {node: '>= 10'} 327 | cpu: [arm64] 328 | os: [linux] 329 | requiresBuild: true 330 | dev: false 331 | optional: true 332 | 333 | /@next/swc-linux-x64-gnu@13.0.6: 334 | resolution: {integrity: sha512-kxyEXnYHpOEkFnmrlwB1QlzJtjC6sAJytKcceIyFUHbCaD3W/Qb5tnclcnHKTaFccizZRePXvV25Ok/eUSpKTw==} 335 | engines: {node: '>= 10'} 336 | cpu: [x64] 337 | os: [linux] 338 | requiresBuild: true 339 | dev: false 340 | optional: true 341 | 342 | /@next/swc-linux-x64-musl@13.0.6: 343 | resolution: {integrity: sha512-N0c6gubS3WW1oYYgo02xzZnNatfVQP/CiJq2ax+DJ55ePV62IACbRCU99TZNXXg+Kos6vNW4k+/qgvkvpGDeyA==} 344 | engines: {node: '>= 10'} 345 | cpu: [x64] 346 | os: [linux] 347 | requiresBuild: true 348 | dev: false 349 | optional: true 350 | 351 | /@next/swc-win32-arm64-msvc@13.0.6: 352 | resolution: {integrity: sha512-QjeMB2EBqBFPb/ac0CYr7GytbhUkrG4EwFWbcE0vsRp4H8grt25kYpFQckL4Jak3SUrp7vKfDwZ/SwO7QdO8vw==} 353 | engines: {node: '>= 10'} 354 | cpu: [arm64] 355 | os: [win32] 356 | requiresBuild: true 357 | dev: false 358 | optional: true 359 | 360 | /@next/swc-win32-ia32-msvc@13.0.6: 361 | resolution: {integrity: sha512-EQzXtdqRTcmhT/tCq81rIwE36Y3fNHPInaCuJzM/kftdXfa0F+64y7FAoMO13npX8EG1+SamXgp/emSusKrCXg==} 362 | engines: {node: '>= 10'} 363 | cpu: [ia32] 364 | os: [win32] 365 | requiresBuild: true 366 | dev: false 367 | optional: true 368 | 369 | /@next/swc-win32-x64-msvc@13.0.6: 370 | resolution: {integrity: sha512-pSkqZ//UP/f2sS9T7IvHLfEWDPTX0vRyXJnAUNisKvO3eF3e1xdhDX7dix/X3Z3lnN4UjSwOzclAI87JFbOwmQ==} 371 | engines: {node: '>= 10'} 372 | cpu: [x64] 373 | os: [win32] 374 | requiresBuild: true 375 | dev: false 376 | optional: true 377 | 378 | /@nodelib/fs.scandir@2.1.5: 379 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 380 | engines: {node: '>= 8'} 381 | dependencies: 382 | '@nodelib/fs.stat': 2.0.5 383 | run-parallel: 1.2.0 384 | dev: true 385 | 386 | /@nodelib/fs.stat@2.0.5: 387 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 388 | engines: {node: '>= 8'} 389 | dev: true 390 | 391 | /@nodelib/fs.walk@1.2.8: 392 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 393 | engines: {node: '>= 8'} 394 | dependencies: 395 | '@nodelib/fs.scandir': 2.1.5 396 | fastq: 1.15.0 397 | dev: true 398 | 399 | /@popperjs/core@2.11.6: 400 | resolution: {integrity: sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw==} 401 | dev: false 402 | 403 | /@swc/helpers@0.4.14: 404 | resolution: {integrity: sha512-4C7nX/dvpzB7za4Ql9K81xK3HPxCpHMgwTZVyf+9JQ6VUbn9jjZVN7/Nkdz/Ugzs2CSjqnL/UPXroiVBVHUWUw==} 405 | dependencies: 406 | tslib: 2.4.1 407 | dev: false 408 | 409 | /@theguild/remark-mermaid@0.0.4(react@18.2.0): 410 | resolution: {integrity: sha512-C1gssw07eURtCwzXqZZdvyV/eawQ/cXfARaXIgBU9orffox+/YQ+exxmNu9v16NSGzAVsGF4qEVHvCOcCR/FpQ==} 411 | peerDependencies: 412 | react: ^18.2.0 413 | dependencies: 414 | mermaid: 10.4.0 415 | react: 18.2.0 416 | unist-util-visit: 5.0.0 417 | transitivePeerDependencies: 418 | - supports-color 419 | dev: false 420 | 421 | /@theguild/remark-npm2yarn@0.1.1: 422 | resolution: {integrity: sha512-ZKwd/bjQ9V+pESLnu8+q8jqn15alXzJOuVckraebsXwqVBTw53Gmupiw9zCdLNHU829KTYNycJYea6m9HRLuOg==} 423 | dependencies: 424 | npm-to-yarn: 2.1.0 425 | unist-util-visit: 5.0.0 426 | dev: false 427 | 428 | /@types/acorn@4.0.6: 429 | resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==} 430 | dependencies: 431 | '@types/estree': 1.0.0 432 | dev: false 433 | 434 | /@types/d3-scale-chromatic@3.0.0: 435 | resolution: {integrity: sha512-dsoJGEIShosKVRBZB0Vo3C8nqSDqVGujJU6tPznsBJxNJNwMF8utmS83nvCBKQYPpjCzaaHcrf66iTRpZosLPw==} 436 | dev: false 437 | 438 | /@types/d3-scale@4.0.5: 439 | resolution: {integrity: sha512-w/C++3W394MHzcLKO2kdsIn5KKNTOqeQVzyPSGPLzQbkPw/jpeaGtSRlakcKevGgGsjJxGsbqS0fPrVFDbHrDA==} 440 | dependencies: 441 | '@types/d3-time': 3.0.1 442 | dev: false 443 | 444 | /@types/d3-time@3.0.1: 445 | resolution: {integrity: sha512-5j/AnefKAhCw4HpITmLDTPlf4vhi8o/dES+zbegfPb7LaGfNyqkLxBR6E+4yvTAgnJLmhe80EXFMzUs38fw4oA==} 446 | dev: false 447 | 448 | /@types/debug@4.1.7: 449 | resolution: {integrity: sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==} 450 | dependencies: 451 | '@types/ms': 0.7.31 452 | dev: false 453 | 454 | /@types/estree-jsx@1.0.0: 455 | resolution: {integrity: sha512-3qvGd0z8F2ENTGr/GG1yViqfiKmRfrXVx5sJyHGFu3z7m5g5utCQtGp/g29JnjflhtQJBv1WDQukHiT58xPcYQ==} 456 | dependencies: 457 | '@types/estree': 1.0.0 458 | dev: false 459 | 460 | /@types/estree@1.0.0: 461 | resolution: {integrity: sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==} 462 | dev: false 463 | 464 | /@types/hast@2.3.4: 465 | resolution: {integrity: sha512-wLEm0QvaoawEDoTRwzTXp4b4jpwiJDvR5KMnFnVodm3scufTlBOWRD6N1OBf9TZMhjlNsSfcO5V+7AF4+Vy+9g==} 466 | dependencies: 467 | '@types/unist': 3.0.0 468 | dev: false 469 | 470 | /@types/hast@3.0.1: 471 | resolution: {integrity: sha512-hs/iBJx2aydugBQx5ETV3ZgeSS0oIreQrFJ4bjBl0XvM4wAmDjFEALY7p0rTSLt2eL+ibjRAAs9dTPiCLtmbqQ==} 472 | dependencies: 473 | '@types/unist': 3.0.0 474 | dev: false 475 | 476 | /@types/js-yaml@4.0.5: 477 | resolution: {integrity: sha512-FhpRzf927MNQdRZP0J5DLIdTXhjLYzeUTmLAu69mnVksLH9CJY3IuSeEgbKUki7GQZm0WqDkGzyxju2EZGD2wA==} 478 | dev: false 479 | 480 | /@types/katex@0.11.1: 481 | resolution: {integrity: sha512-DUlIj2nk0YnJdlWgsFuVKcX27MLW0KbKmGVoUHmFr+74FYYNUDAaj9ZqTADvsbE8rfxuVmSFc7KczYn5Y09ozg==} 482 | dev: false 483 | 484 | /@types/katex@0.14.0: 485 | resolution: {integrity: sha512-+2FW2CcT0K3P+JMR8YG846bmDwplKUTsWgT2ENwdQ1UdVfRk3GQrh6Mi4sTopy30gI8Uau5CEqHTDZ6YvWIUPA==} 486 | dev: false 487 | 488 | /@types/mdast@3.0.10: 489 | resolution: {integrity: sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==} 490 | dependencies: 491 | '@types/unist': 3.0.0 492 | dev: false 493 | 494 | /@types/mdast@4.0.0: 495 | resolution: {integrity: sha512-YLeG8CujC9adtj/kuDzq1N4tCDYKoZ5l/bnjq8d74+t/3q/tHquJOJKUQXJrLCflOHpKjXgcI/a929gpmLOEng==} 496 | dependencies: 497 | '@types/unist': 3.0.0 498 | dev: false 499 | 500 | /@types/mdx@2.0.3: 501 | resolution: {integrity: sha512-IgHxcT3RC8LzFLhKwP3gbMPeaK7BM9eBH46OdapPA7yvuIUJ8H6zHZV53J8hGZcTSnt95jANt+rTBNUUc22ACQ==} 502 | dev: false 503 | 504 | /@types/ms@0.7.31: 505 | resolution: {integrity: sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==} 506 | dev: false 507 | 508 | /@types/node@18.11.10: 509 | resolution: {integrity: sha512-juG3RWMBOqcOuXC643OAdSA525V44cVgGV6dUDuiFtss+8Fk5x1hI93Rsld43VeJVIeqlP9I7Fn9/qaVqoEAuQ==} 510 | dev: true 511 | 512 | /@types/prop-types@15.7.5: 513 | resolution: {integrity: sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==} 514 | dev: false 515 | 516 | /@types/react@18.0.25: 517 | resolution: {integrity: sha512-xD6c0KDT4m7n9uD4ZHi02lzskaiqcBxf4zi+tXZY98a04wvc0hi/TcCPC2FOESZi51Nd7tlUeOJY8RofL799/g==} 518 | dependencies: 519 | '@types/prop-types': 15.7.5 520 | '@types/scheduler': 0.16.2 521 | csstype: 3.1.1 522 | dev: false 523 | 524 | /@types/scheduler@0.16.2: 525 | resolution: {integrity: sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==} 526 | dev: false 527 | 528 | /@types/unist@2.0.6: 529 | resolution: {integrity: sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==} 530 | dev: false 531 | 532 | /@types/unist@3.0.0: 533 | resolution: {integrity: sha512-MFETx3tbTjE7Uk6vvnWINA/1iJ7LuMdO4fcq8UfF0pRbj01aGLduVvQcRyswuACJdpnHgg8E3rQLhaRdNEJS0w==} 534 | dev: false 535 | 536 | /@ungap/structured-clone@1.2.0: 537 | resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} 538 | dev: false 539 | 540 | /acorn-jsx@5.3.2(acorn@8.8.1): 541 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 542 | peerDependencies: 543 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 544 | dependencies: 545 | acorn: 8.8.1 546 | dev: false 547 | 548 | /acorn@8.8.1: 549 | resolution: {integrity: sha512-7zFpHzhnqYKrkYdUjF1HI1bzd0VygEGX8lFk4k5zVMqHEoES+P+7TKI+EvLO9WVMJ8eekdO0aDEK044xTXwPPA==} 550 | engines: {node: '>=0.4.0'} 551 | hasBin: true 552 | dev: false 553 | 554 | /ansi-sequence-parser@1.1.1: 555 | resolution: {integrity: sha512-vJXt3yiaUL4UU546s3rPXlsry/RnM730G1+HkpKE012AN0sx1eOrxSu95oKDIonskeLTijMgqWZ3uDEe3NFvyg==} 556 | dev: false 557 | 558 | /ansi-styles@3.2.1: 559 | resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} 560 | engines: {node: '>=4'} 561 | dependencies: 562 | color-convert: 1.9.3 563 | dev: false 564 | 565 | /any-promise@1.3.0: 566 | resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} 567 | dev: true 568 | 569 | /anymatch@3.1.3: 570 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} 571 | engines: {node: '>= 8'} 572 | dependencies: 573 | normalize-path: 3.0.0 574 | picomatch: 2.3.1 575 | dev: true 576 | 577 | /arch@2.2.0: 578 | resolution: {integrity: sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==} 579 | dev: false 580 | 581 | /arg@1.0.0: 582 | resolution: {integrity: sha512-Wk7TEzl1KqvTGs/uyhmHO/3XLd3t1UeU4IstvPXVzGPM522cTjqjNZ99esCkcL52sjqjo8e8CTBcWhkxvGzoAw==} 583 | dev: false 584 | 585 | /arg@5.0.2: 586 | resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} 587 | dev: true 588 | 589 | /argparse@1.0.10: 590 | resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} 591 | dependencies: 592 | sprintf-js: 1.0.3 593 | dev: false 594 | 595 | /argparse@2.0.1: 596 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 597 | dev: false 598 | 599 | /astring@1.8.3: 600 | resolution: {integrity: sha512-sRpyiNrx2dEYIMmUXprS8nlpRg2Drs8m9ElX9vVEXaCB4XEAJhKfs7IcX0IwShjuOAjLR6wzIrgoptz1n19i1A==} 601 | hasBin: true 602 | dev: false 603 | 604 | /autoprefixer@10.4.16(postcss@8.4.30): 605 | resolution: {integrity: sha512-7vd3UC6xKp0HLfua5IjZlcXvGAGy7cBAXTg2lyQ/8WpNhd6SiZ8Be+xm3FyBSYJx5GKcpRCzBh7RH4/0dnY+uQ==} 606 | engines: {node: ^10 || ^12 || >=14} 607 | hasBin: true 608 | peerDependencies: 609 | postcss: ^8.1.0 610 | dependencies: 611 | browserslist: 4.21.11 612 | caniuse-lite: 1.0.30001538 613 | fraction.js: 4.3.6 614 | normalize-range: 0.1.2 615 | picocolors: 1.0.0 616 | postcss: 8.4.30 617 | postcss-value-parser: 4.2.0 618 | dev: true 619 | 620 | /bail@2.0.2: 621 | resolution: {integrity: sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==} 622 | dev: false 623 | 624 | /balanced-match@1.0.2: 625 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 626 | dev: true 627 | 628 | /binary-extensions@2.2.0: 629 | resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} 630 | engines: {node: '>=8'} 631 | dev: true 632 | 633 | /brace-expansion@1.1.11: 634 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 635 | dependencies: 636 | balanced-match: 1.0.2 637 | concat-map: 0.0.1 638 | dev: true 639 | 640 | /braces@3.0.2: 641 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} 642 | engines: {node: '>=8'} 643 | dependencies: 644 | fill-range: 7.0.1 645 | dev: true 646 | 647 | /browserslist@4.21.11: 648 | resolution: {integrity: sha512-xn1UXOKUz7DjdGlg9RrUr0GGiWzI97UQJnugHtH0OLDfJB7jMgoIkYvRIEO1l9EeEERVqeqLYOcFBW9ldjypbQ==} 649 | engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} 650 | hasBin: true 651 | dependencies: 652 | caniuse-lite: 1.0.30001538 653 | electron-to-chromium: 1.4.528 654 | node-releases: 2.0.13 655 | update-browserslist-db: 1.0.13(browserslist@4.21.11) 656 | dev: true 657 | 658 | /camelcase-css@2.0.1: 659 | resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} 660 | engines: {node: '>= 6'} 661 | dev: true 662 | 663 | /caniuse-lite@1.0.30001435: 664 | resolution: {integrity: sha512-kdCkUTjR+v4YAJelyiDTqiu82BDr4W4CP5sgTA0ZBmqn30XfS2ZghPLMowik9TPhS+psWJiUNxsqLyurDbmutA==} 665 | dev: false 666 | 667 | /caniuse-lite@1.0.30001538: 668 | resolution: {integrity: sha512-HWJnhnID+0YMtGlzcp3T9drmBJUVDchPJ08tpUGFLs9CYlwWPH2uLgpHn8fND5pCgXVtnGS3H4QR9XLMHVNkHw==} 669 | dev: true 670 | 671 | /cart@1.1.1(react@18.2.0): 672 | resolution: {integrity: sha512-PZo4CG/fCJpYF3rowBJ3i2wRIJvfXgK25GQMJX6kBsGWLUgJ80YWXOsu5xc/rpzyYsaKi3qikxDogkHDOVhKFQ==} 673 | engines: {node: '>=16'} 674 | peerDependencies: 675 | react: 16.x || 17.x || 18.x 676 | dependencies: 677 | react: 18.2.0 678 | zustand: 4.4.1(react@18.2.0) 679 | transitivePeerDependencies: 680 | - '@types/react' 681 | - immer 682 | dev: false 683 | 684 | /ccount@2.0.1: 685 | resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} 686 | dev: false 687 | 688 | /chalk@2.3.0: 689 | resolution: {integrity: sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==} 690 | engines: {node: '>=4'} 691 | dependencies: 692 | ansi-styles: 3.2.1 693 | escape-string-regexp: 1.0.5 694 | supports-color: 4.5.0 695 | dev: false 696 | 697 | /character-entities-html4@2.1.0: 698 | resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} 699 | dev: false 700 | 701 | /character-entities-legacy@3.0.0: 702 | resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} 703 | dev: false 704 | 705 | /character-entities@2.0.2: 706 | resolution: {integrity: sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==} 707 | dev: false 708 | 709 | /character-reference-invalid@2.0.1: 710 | resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} 711 | dev: false 712 | 713 | /chokidar@3.5.3: 714 | resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} 715 | engines: {node: '>= 8.10.0'} 716 | dependencies: 717 | anymatch: 3.1.3 718 | braces: 3.0.2 719 | glob-parent: 5.1.2 720 | is-binary-path: 2.1.0 721 | is-glob: 4.0.3 722 | normalize-path: 3.0.0 723 | readdirp: 3.6.0 724 | optionalDependencies: 725 | fsevents: 2.3.3 726 | dev: true 727 | 728 | /client-only@0.0.1: 729 | resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} 730 | dev: false 731 | 732 | /clipboardy@1.2.2: 733 | resolution: {integrity: sha512-16KrBOV7bHmHdxcQiCvfUFYVFyEah4FI8vYT1Fr7CGSA4G+xBWMEfUEQJS1hxeHGtI9ju1Bzs9uXSbj5HZKArw==} 734 | engines: {node: '>=4'} 735 | dependencies: 736 | arch: 2.2.0 737 | execa: 0.8.0 738 | dev: false 739 | 740 | /clsx@2.0.0: 741 | resolution: {integrity: sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==} 742 | engines: {node: '>=6'} 743 | dev: false 744 | 745 | /color-convert@1.9.3: 746 | resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} 747 | dependencies: 748 | color-name: 1.1.3 749 | dev: false 750 | 751 | /color-name@1.1.3: 752 | resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} 753 | dev: false 754 | 755 | /comma-separated-tokens@2.0.3: 756 | resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} 757 | dev: false 758 | 759 | /commander@4.1.1: 760 | resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} 761 | engines: {node: '>= 6'} 762 | dev: true 763 | 764 | /commander@7.2.0: 765 | resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} 766 | engines: {node: '>= 10'} 767 | dev: false 768 | 769 | /commander@8.3.0: 770 | resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==} 771 | engines: {node: '>= 12'} 772 | dev: false 773 | 774 | /compute-scroll-into-view@2.0.4: 775 | resolution: {integrity: sha512-y/ZA3BGnxoM/QHHQ2Uy49CLtnWPbt4tTPpEEZiEmmiWBFKjej7nEyH8Ryz54jH0MLXflUYA3Er2zUxPSJu5R+g==} 776 | dev: false 777 | 778 | /concat-map@0.0.1: 779 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 780 | dev: true 781 | 782 | /cose-base@1.0.3: 783 | resolution: {integrity: sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==} 784 | dependencies: 785 | layout-base: 1.0.2 786 | dev: false 787 | 788 | /cose-base@2.2.0: 789 | resolution: {integrity: sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==} 790 | dependencies: 791 | layout-base: 2.0.1 792 | dev: false 793 | 794 | /cross-spawn@5.1.0: 795 | resolution: {integrity: sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==} 796 | dependencies: 797 | lru-cache: 4.1.5 798 | shebang-command: 1.2.0 799 | which: 1.3.1 800 | dev: false 801 | 802 | /cssesc@3.0.0: 803 | resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} 804 | engines: {node: '>=4'} 805 | hasBin: true 806 | dev: true 807 | 808 | /csstype@3.1.1: 809 | resolution: {integrity: sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==} 810 | dev: false 811 | 812 | /cytoscape-cose-bilkent@4.1.0(cytoscape@3.26.0): 813 | resolution: {integrity: sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==} 814 | peerDependencies: 815 | cytoscape: ^3.2.0 816 | dependencies: 817 | cose-base: 1.0.3 818 | cytoscape: 3.26.0 819 | dev: false 820 | 821 | /cytoscape-fcose@2.2.0(cytoscape@3.26.0): 822 | resolution: {integrity: sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==} 823 | peerDependencies: 824 | cytoscape: ^3.2.0 825 | dependencies: 826 | cose-base: 2.2.0 827 | cytoscape: 3.26.0 828 | dev: false 829 | 830 | /cytoscape@3.26.0: 831 | resolution: {integrity: sha512-IV+crL+KBcrCnVVUCZW+zRRRFUZQcrtdOPXki+o4CFUWLdAEYvuZLcBSJC9EBK++suamERKzeY7roq2hdovV3w==} 832 | engines: {node: '>=0.10'} 833 | dependencies: 834 | heap: 0.2.7 835 | lodash: 4.17.21 836 | dev: false 837 | 838 | /d3-array@2.12.1: 839 | resolution: {integrity: sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==} 840 | dependencies: 841 | internmap: 1.0.1 842 | dev: false 843 | 844 | /d3-array@3.2.4: 845 | resolution: {integrity: sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==} 846 | engines: {node: '>=12'} 847 | dependencies: 848 | internmap: 2.0.3 849 | dev: false 850 | 851 | /d3-axis@3.0.0: 852 | resolution: {integrity: sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==} 853 | engines: {node: '>=12'} 854 | dev: false 855 | 856 | /d3-brush@3.0.0: 857 | resolution: {integrity: sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==} 858 | engines: {node: '>=12'} 859 | dependencies: 860 | d3-dispatch: 3.0.1 861 | d3-drag: 3.0.0 862 | d3-interpolate: 3.0.1 863 | d3-selection: 3.0.0 864 | d3-transition: 3.0.1(d3-selection@3.0.0) 865 | dev: false 866 | 867 | /d3-chord@3.0.1: 868 | resolution: {integrity: sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==} 869 | engines: {node: '>=12'} 870 | dependencies: 871 | d3-path: 3.1.0 872 | dev: false 873 | 874 | /d3-color@3.1.0: 875 | resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==} 876 | engines: {node: '>=12'} 877 | dev: false 878 | 879 | /d3-contour@4.0.2: 880 | resolution: {integrity: sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==} 881 | engines: {node: '>=12'} 882 | dependencies: 883 | d3-array: 3.2.4 884 | dev: false 885 | 886 | /d3-delaunay@6.0.4: 887 | resolution: {integrity: sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==} 888 | engines: {node: '>=12'} 889 | dependencies: 890 | delaunator: 5.0.0 891 | dev: false 892 | 893 | /d3-dispatch@3.0.1: 894 | resolution: {integrity: sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==} 895 | engines: {node: '>=12'} 896 | dev: false 897 | 898 | /d3-drag@3.0.0: 899 | resolution: {integrity: sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==} 900 | engines: {node: '>=12'} 901 | dependencies: 902 | d3-dispatch: 3.0.1 903 | d3-selection: 3.0.0 904 | dev: false 905 | 906 | /d3-dsv@3.0.1: 907 | resolution: {integrity: sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==} 908 | engines: {node: '>=12'} 909 | hasBin: true 910 | dependencies: 911 | commander: 7.2.0 912 | iconv-lite: 0.6.3 913 | rw: 1.3.3 914 | dev: false 915 | 916 | /d3-ease@3.0.1: 917 | resolution: {integrity: sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==} 918 | engines: {node: '>=12'} 919 | dev: false 920 | 921 | /d3-fetch@3.0.1: 922 | resolution: {integrity: sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==} 923 | engines: {node: '>=12'} 924 | dependencies: 925 | d3-dsv: 3.0.1 926 | dev: false 927 | 928 | /d3-force@3.0.0: 929 | resolution: {integrity: sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==} 930 | engines: {node: '>=12'} 931 | dependencies: 932 | d3-dispatch: 3.0.1 933 | d3-quadtree: 3.0.1 934 | d3-timer: 3.0.1 935 | dev: false 936 | 937 | /d3-format@3.1.0: 938 | resolution: {integrity: sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==} 939 | engines: {node: '>=12'} 940 | dev: false 941 | 942 | /d3-geo@3.1.0: 943 | resolution: {integrity: sha512-JEo5HxXDdDYXCaWdwLRt79y7giK8SbhZJbFWXqbRTolCHFI5jRqteLzCsq51NKbUoX0PjBVSohxrx+NoOUujYA==} 944 | engines: {node: '>=12'} 945 | dependencies: 946 | d3-array: 3.2.4 947 | dev: false 948 | 949 | /d3-hierarchy@3.1.2: 950 | resolution: {integrity: sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==} 951 | engines: {node: '>=12'} 952 | dev: false 953 | 954 | /d3-interpolate@3.0.1: 955 | resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==} 956 | engines: {node: '>=12'} 957 | dependencies: 958 | d3-color: 3.1.0 959 | dev: false 960 | 961 | /d3-path@1.0.9: 962 | resolution: {integrity: sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==} 963 | dev: false 964 | 965 | /d3-path@3.1.0: 966 | resolution: {integrity: sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==} 967 | engines: {node: '>=12'} 968 | dev: false 969 | 970 | /d3-polygon@3.0.1: 971 | resolution: {integrity: sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==} 972 | engines: {node: '>=12'} 973 | dev: false 974 | 975 | /d3-quadtree@3.0.1: 976 | resolution: {integrity: sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==} 977 | engines: {node: '>=12'} 978 | dev: false 979 | 980 | /d3-random@3.0.1: 981 | resolution: {integrity: sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==} 982 | engines: {node: '>=12'} 983 | dev: false 984 | 985 | /d3-sankey@0.12.3: 986 | resolution: {integrity: sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==} 987 | dependencies: 988 | d3-array: 2.12.1 989 | d3-shape: 1.3.7 990 | dev: false 991 | 992 | /d3-scale-chromatic@3.0.0: 993 | resolution: {integrity: sha512-Lx9thtxAKrO2Pq6OO2Ua474opeziKr279P/TKZsMAhYyNDD3EnCffdbgeSYN5O7m2ByQsxtuP2CSDczNUIZ22g==} 994 | engines: {node: '>=12'} 995 | dependencies: 996 | d3-color: 3.1.0 997 | d3-interpolate: 3.0.1 998 | dev: false 999 | 1000 | /d3-scale@4.0.2: 1001 | resolution: {integrity: sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==} 1002 | engines: {node: '>=12'} 1003 | dependencies: 1004 | d3-array: 3.2.4 1005 | d3-format: 3.1.0 1006 | d3-interpolate: 3.0.1 1007 | d3-time: 3.1.0 1008 | d3-time-format: 4.1.0 1009 | dev: false 1010 | 1011 | /d3-selection@3.0.0: 1012 | resolution: {integrity: sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==} 1013 | engines: {node: '>=12'} 1014 | dev: false 1015 | 1016 | /d3-shape@1.3.7: 1017 | resolution: {integrity: sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==} 1018 | dependencies: 1019 | d3-path: 1.0.9 1020 | dev: false 1021 | 1022 | /d3-shape@3.2.0: 1023 | resolution: {integrity: sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==} 1024 | engines: {node: '>=12'} 1025 | dependencies: 1026 | d3-path: 3.1.0 1027 | dev: false 1028 | 1029 | /d3-time-format@4.1.0: 1030 | resolution: {integrity: sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==} 1031 | engines: {node: '>=12'} 1032 | dependencies: 1033 | d3-time: 3.1.0 1034 | dev: false 1035 | 1036 | /d3-time@3.1.0: 1037 | resolution: {integrity: sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==} 1038 | engines: {node: '>=12'} 1039 | dependencies: 1040 | d3-array: 3.2.4 1041 | dev: false 1042 | 1043 | /d3-timer@3.0.1: 1044 | resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==} 1045 | engines: {node: '>=12'} 1046 | dev: false 1047 | 1048 | /d3-transition@3.0.1(d3-selection@3.0.0): 1049 | resolution: {integrity: sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==} 1050 | engines: {node: '>=12'} 1051 | peerDependencies: 1052 | d3-selection: 2 - 3 1053 | dependencies: 1054 | d3-color: 3.1.0 1055 | d3-dispatch: 3.0.1 1056 | d3-ease: 3.0.1 1057 | d3-interpolate: 3.0.1 1058 | d3-selection: 3.0.0 1059 | d3-timer: 3.0.1 1060 | dev: false 1061 | 1062 | /d3-zoom@3.0.0: 1063 | resolution: {integrity: sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==} 1064 | engines: {node: '>=12'} 1065 | dependencies: 1066 | d3-dispatch: 3.0.1 1067 | d3-drag: 3.0.0 1068 | d3-interpolate: 3.0.1 1069 | d3-selection: 3.0.0 1070 | d3-transition: 3.0.1(d3-selection@3.0.0) 1071 | dev: false 1072 | 1073 | /d3@7.8.5: 1074 | resolution: {integrity: sha512-JgoahDG51ncUfJu6wX/1vWQEqOflgXyl4MaHqlcSruTez7yhaRKR9i8VjjcQGeS2en/jnFivXuaIMnseMMt0XA==} 1075 | engines: {node: '>=12'} 1076 | dependencies: 1077 | d3-array: 3.2.4 1078 | d3-axis: 3.0.0 1079 | d3-brush: 3.0.0 1080 | d3-chord: 3.0.1 1081 | d3-color: 3.1.0 1082 | d3-contour: 4.0.2 1083 | d3-delaunay: 6.0.4 1084 | d3-dispatch: 3.0.1 1085 | d3-drag: 3.0.0 1086 | d3-dsv: 3.0.1 1087 | d3-ease: 3.0.1 1088 | d3-fetch: 3.0.1 1089 | d3-force: 3.0.0 1090 | d3-format: 3.1.0 1091 | d3-geo: 3.1.0 1092 | d3-hierarchy: 3.1.2 1093 | d3-interpolate: 3.0.1 1094 | d3-path: 3.1.0 1095 | d3-polygon: 3.0.1 1096 | d3-quadtree: 3.0.1 1097 | d3-random: 3.0.1 1098 | d3-scale: 4.0.2 1099 | d3-scale-chromatic: 3.0.0 1100 | d3-selection: 3.0.0 1101 | d3-shape: 3.2.0 1102 | d3-time: 3.1.0 1103 | d3-time-format: 4.1.0 1104 | d3-timer: 3.0.1 1105 | d3-transition: 3.0.1(d3-selection@3.0.0) 1106 | d3-zoom: 3.0.0 1107 | dev: false 1108 | 1109 | /dagre-d3-es@7.0.10: 1110 | resolution: {integrity: sha512-qTCQmEhcynucuaZgY5/+ti3X/rnszKZhEQH/ZdWdtP1tA/y3VoHJzcVrO9pjjJCNpigfscAtoUB5ONcd2wNn0A==} 1111 | dependencies: 1112 | d3: 7.8.5 1113 | lodash-es: 4.17.21 1114 | dev: false 1115 | 1116 | /dayjs@1.11.10: 1117 | resolution: {integrity: sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==} 1118 | dev: false 1119 | 1120 | /debug@4.3.4: 1121 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 1122 | engines: {node: '>=6.0'} 1123 | peerDependencies: 1124 | supports-color: '*' 1125 | peerDependenciesMeta: 1126 | supports-color: 1127 | optional: true 1128 | dependencies: 1129 | ms: 2.1.2 1130 | dev: false 1131 | 1132 | /decode-named-character-reference@1.0.2: 1133 | resolution: {integrity: sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==} 1134 | dependencies: 1135 | character-entities: 2.0.2 1136 | dev: false 1137 | 1138 | /delaunator@5.0.0: 1139 | resolution: {integrity: sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw==} 1140 | dependencies: 1141 | robust-predicates: 3.0.2 1142 | dev: false 1143 | 1144 | /dequal@2.0.3: 1145 | resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} 1146 | engines: {node: '>=6'} 1147 | dev: false 1148 | 1149 | /devlop@1.1.0: 1150 | resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} 1151 | dependencies: 1152 | dequal: 2.0.3 1153 | dev: false 1154 | 1155 | /didyoumean@1.2.2: 1156 | resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} 1157 | dev: true 1158 | 1159 | /diff@5.1.0: 1160 | resolution: {integrity: sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw==} 1161 | engines: {node: '>=0.3.1'} 1162 | dev: false 1163 | 1164 | /dlv@1.1.3: 1165 | resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} 1166 | dev: true 1167 | 1168 | /dompurify@3.0.5: 1169 | resolution: {integrity: sha512-F9e6wPGtY+8KNMRAVfxeCOHU0/NPWMSENNq4pQctuXRqqdEPW7q3CrLbR5Nse044WwacyjHGOMlvNsBe1y6z9A==} 1170 | dev: false 1171 | 1172 | /electron-to-chromium@1.4.528: 1173 | resolution: {integrity: sha512-UdREXMXzLkREF4jA8t89FQjA8WHI6ssP38PMY4/4KhXFQbtImnghh4GkCgrtiZwLKUKVD2iTVXvDVQjfomEQuA==} 1174 | dev: true 1175 | 1176 | /elkjs@0.8.2: 1177 | resolution: {integrity: sha512-L6uRgvZTH+4OF5NE/MBbzQx/WYpru1xCBE9respNj6qznEewGUIfhzmm7horWWxbNO2M0WckQypGctR8lH79xQ==} 1178 | dev: false 1179 | 1180 | /entities@4.5.0: 1181 | resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} 1182 | engines: {node: '>=0.12'} 1183 | dev: false 1184 | 1185 | /escalade@3.1.1: 1186 | resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} 1187 | engines: {node: '>=6'} 1188 | dev: true 1189 | 1190 | /escape-string-regexp@1.0.5: 1191 | resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} 1192 | engines: {node: '>=0.8.0'} 1193 | dev: false 1194 | 1195 | /escape-string-regexp@5.0.0: 1196 | resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} 1197 | engines: {node: '>=12'} 1198 | dev: false 1199 | 1200 | /esprima@4.0.1: 1201 | resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} 1202 | engines: {node: '>=4'} 1203 | hasBin: true 1204 | dev: false 1205 | 1206 | /estree-util-attach-comments@2.1.0: 1207 | resolution: {integrity: sha512-rJz6I4L0GaXYtHpoMScgDIwM0/Vwbu5shbMeER596rB2D1EWF6+Gj0e0UKzJPZrpoOc87+Q2kgVFHfjAymIqmw==} 1208 | dependencies: 1209 | '@types/estree': 1.0.0 1210 | dev: false 1211 | 1212 | /estree-util-build-jsx@2.2.0: 1213 | resolution: {integrity: sha512-apsfRxF9uLrqosApvHVtYZjISPvTJ+lBiIydpC+9wE6cF6ssbhnjyQLqaIjgzGxvC2Hbmec1M7g91PoBayYoQQ==} 1214 | dependencies: 1215 | '@types/estree-jsx': 1.0.0 1216 | estree-util-is-identifier-name: 2.0.1 1217 | estree-walker: 3.0.1 1218 | dev: false 1219 | 1220 | /estree-util-is-identifier-name@2.0.1: 1221 | resolution: {integrity: sha512-rxZj1GkQhY4x1j/CSnybK9cGuMFQYFPLq0iNyopqf14aOVLFtMv7Esika+ObJWPWiOHuMOAHz3YkWoLYYRnzWQ==} 1222 | dev: false 1223 | 1224 | /estree-util-to-js@1.1.0: 1225 | resolution: {integrity: sha512-490lbfCcpLk+ofK6HCgqDfYs4KAfq6QVvDw3+Bm1YoKRgiOjKiKYGAVQE1uwh7zVxBgWhqp4FDtp5SqunpUk1A==} 1226 | dependencies: 1227 | '@types/estree-jsx': 1.0.0 1228 | astring: 1.8.3 1229 | source-map: 0.7.4 1230 | dev: false 1231 | 1232 | /estree-util-value-to-estree@1.3.0: 1233 | resolution: {integrity: sha512-Y+ughcF9jSUJvncXwqRageavjrNPAI+1M/L3BI3PyLp1nmgYTGUXU6t5z1Y7OWuThoDdhPME07bQU+d5LxdJqw==} 1234 | engines: {node: '>=12.0.0'} 1235 | dependencies: 1236 | is-plain-obj: 3.0.0 1237 | dev: false 1238 | 1239 | /estree-util-visit@1.2.0: 1240 | resolution: {integrity: sha512-wdsoqhWueuJKsh5hqLw3j8lwFqNStm92VcwtAOAny8g/KS/l5Y8RISjR4k5W6skCj3Nirag/WUCMS0Nfy3sgsg==} 1241 | dependencies: 1242 | '@types/estree-jsx': 1.0.0 1243 | '@types/unist': 2.0.6 1244 | dev: false 1245 | 1246 | /estree-walker@3.0.1: 1247 | resolution: {integrity: sha512-woY0RUD87WzMBUiZLx8NsYr23N5BKsOMZHhu2hoNRVh6NXGfoiT1KOL8G3UHlJAnEDGmfa5ubNA/AacfG+Kb0g==} 1248 | dev: false 1249 | 1250 | /execa@0.8.0: 1251 | resolution: {integrity: sha512-zDWS+Rb1E8BlqqhALSt9kUhss8Qq4nN3iof3gsOdyINksElaPyNBtKUMTR62qhvgVWR0CqCX7sdnKe4MnUbFEA==} 1252 | engines: {node: '>=4'} 1253 | dependencies: 1254 | cross-spawn: 5.1.0 1255 | get-stream: 3.0.0 1256 | is-stream: 1.1.0 1257 | npm-run-path: 2.0.2 1258 | p-finally: 1.0.0 1259 | signal-exit: 3.0.7 1260 | strip-eof: 1.0.0 1261 | dev: false 1262 | 1263 | /extend-shallow@2.0.1: 1264 | resolution: {integrity: sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==} 1265 | engines: {node: '>=0.10.0'} 1266 | dependencies: 1267 | is-extendable: 0.1.1 1268 | dev: false 1269 | 1270 | /extend@3.0.2: 1271 | resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} 1272 | dev: false 1273 | 1274 | /fast-glob@3.3.1: 1275 | resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} 1276 | engines: {node: '>=8.6.0'} 1277 | dependencies: 1278 | '@nodelib/fs.stat': 2.0.5 1279 | '@nodelib/fs.walk': 1.2.8 1280 | glob-parent: 5.1.2 1281 | merge2: 1.4.1 1282 | micromatch: 4.0.5 1283 | dev: true 1284 | 1285 | /fastq@1.15.0: 1286 | resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} 1287 | dependencies: 1288 | reusify: 1.0.4 1289 | dev: true 1290 | 1291 | /fill-range@7.0.1: 1292 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} 1293 | engines: {node: '>=8'} 1294 | dependencies: 1295 | to-regex-range: 5.0.1 1296 | dev: true 1297 | 1298 | /flexsearch@0.7.31: 1299 | resolution: {integrity: sha512-XGozTsMPYkm+6b5QL3Z9wQcJjNYxp0CYn3U1gO7dwD6PAqU1SVWZxI9CCg3z+ml3YfqdPnrBehaBrnH2AGKbNA==} 1300 | dev: false 1301 | 1302 | /focus-visible@5.2.0: 1303 | resolution: {integrity: sha512-Rwix9pBtC1Nuy5wysTmKy+UjbDJpIfg8eHjw0rjZ1mX4GNLz1Bmd16uDpI3Gk1i70Fgcs8Csg2lPm8HULFg9DQ==} 1304 | dev: false 1305 | 1306 | /fraction.js@4.3.6: 1307 | resolution: {integrity: sha512-n2aZ9tNfYDwaHhvFTkhFErqOMIb8uyzSQ+vGJBjZyanAKZVbGUQ1sngfk9FdkBw7G26O7AgNjLcecLffD1c7eg==} 1308 | dev: true 1309 | 1310 | /fs.realpath@1.0.0: 1311 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 1312 | dev: true 1313 | 1314 | /fsevents@2.3.3: 1315 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 1316 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 1317 | os: [darwin] 1318 | requiresBuild: true 1319 | dev: true 1320 | optional: true 1321 | 1322 | /function-bind@1.1.1: 1323 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} 1324 | dev: true 1325 | 1326 | /get-stream@3.0.0: 1327 | resolution: {integrity: sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==} 1328 | engines: {node: '>=4'} 1329 | dev: false 1330 | 1331 | /git-up@7.0.0: 1332 | resolution: {integrity: sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ==} 1333 | dependencies: 1334 | is-ssh: 1.4.0 1335 | parse-url: 8.1.0 1336 | dev: false 1337 | 1338 | /git-url-parse@13.1.0: 1339 | resolution: {integrity: sha512-5FvPJP/70WkIprlUZ33bm4UAaFdjcLkJLpWft1BeZKqwR0uhhNGoKwlUaPtVb4LxCSQ++erHapRak9kWGj+FCA==} 1340 | dependencies: 1341 | git-up: 7.0.0 1342 | dev: false 1343 | 1344 | /github-slugger@2.0.0: 1345 | resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==} 1346 | dev: false 1347 | 1348 | /glob-parent@5.1.2: 1349 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 1350 | engines: {node: '>= 6'} 1351 | dependencies: 1352 | is-glob: 4.0.3 1353 | dev: true 1354 | 1355 | /glob-parent@6.0.2: 1356 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 1357 | engines: {node: '>=10.13.0'} 1358 | dependencies: 1359 | is-glob: 4.0.3 1360 | dev: true 1361 | 1362 | /glob@7.1.6: 1363 | resolution: {integrity: sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==} 1364 | dependencies: 1365 | fs.realpath: 1.0.0 1366 | inflight: 1.0.6 1367 | inherits: 2.0.4 1368 | minimatch: 3.1.2 1369 | once: 1.4.0 1370 | path-is-absolute: 1.0.1 1371 | dev: true 1372 | 1373 | /graceful-fs@4.2.11: 1374 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 1375 | dev: false 1376 | 1377 | /gray-matter@4.0.3: 1378 | resolution: {integrity: sha512-5v6yZd4JK3eMI3FqqCouswVqwugaA9r4dNZB1wwcmrD02QkV5H0y7XBQW8QwQqEaZY1pM9aqORSORhJRdNK44Q==} 1379 | engines: {node: '>=6.0'} 1380 | dependencies: 1381 | js-yaml: 3.14.1 1382 | kind-of: 6.0.3 1383 | section-matter: 1.0.0 1384 | strip-bom-string: 1.0.0 1385 | dev: false 1386 | 1387 | /has-flag@2.0.0: 1388 | resolution: {integrity: sha512-P+1n3MnwjR/Epg9BBo1KT8qbye2g2Ou4sFumihwt6I4tsUX7jnLcX4BTOSKg/B1ZrIYMN9FcEnG4x5a7NB8Eng==} 1389 | engines: {node: '>=0.10.0'} 1390 | dev: false 1391 | 1392 | /has@1.0.3: 1393 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} 1394 | engines: {node: '>= 0.4.0'} 1395 | dependencies: 1396 | function-bind: 1.1.1 1397 | dev: true 1398 | 1399 | /hash-obj@4.0.0: 1400 | resolution: {integrity: sha512-FwO1BUVWkyHasWDW4S8o0ssQXjvyghLV2rfVhnN36b2bbcj45eGiuzdn9XOvOpjV3TKQD7Gm2BWNXdE9V4KKYg==} 1401 | engines: {node: '>=12'} 1402 | dependencies: 1403 | is-obj: 3.0.0 1404 | sort-keys: 5.0.0 1405 | type-fest: 1.4.0 1406 | dev: false 1407 | 1408 | /hast-util-from-dom@4.2.0: 1409 | resolution: {integrity: sha512-t1RJW/OpJbCAJQeKi3Qrj1cAOLA0+av/iPFori112+0X7R3wng+jxLA+kXec8K4szqPRGI8vPxbbpEYvvpwaeQ==} 1410 | dependencies: 1411 | hastscript: 7.2.0 1412 | web-namespaces: 2.0.1 1413 | dev: false 1414 | 1415 | /hast-util-from-html-isomorphic@1.0.0: 1416 | resolution: {integrity: sha512-Yu480AKeOEN/+l5LA674a+7BmIvtDj24GvOt7MtQWuhzUwlaaRWdEPXAh3Qm5vhuthpAipFb2vTetKXWOjmTvw==} 1417 | dependencies: 1418 | '@types/hast': 2.3.4 1419 | hast-util-from-dom: 4.2.0 1420 | hast-util-from-html: 1.0.2 1421 | unist-util-remove-position: 4.0.1 1422 | dev: false 1423 | 1424 | /hast-util-from-html@1.0.2: 1425 | resolution: {integrity: sha512-LhrTA2gfCbLOGJq2u/asp4kwuG0y6NhWTXiPKP+n0qNukKy7hc10whqqCFfyvIA1Q5U5d0sp9HhNim9gglEH4A==} 1426 | dependencies: 1427 | '@types/hast': 2.3.4 1428 | hast-util-from-parse5: 7.1.1 1429 | parse5: 7.1.2 1430 | vfile: 5.3.6 1431 | vfile-message: 3.1.3 1432 | dev: false 1433 | 1434 | /hast-util-from-parse5@7.1.1: 1435 | resolution: {integrity: sha512-R6PoNcUs89ZxLJmMWsVbwSWuz95/9OriyQZ3e2ybwqGsRXzhA6gv49rgGmQvLbZuSNDv9fCg7vV7gXUsvtUFaA==} 1436 | dependencies: 1437 | '@types/hast': 2.3.4 1438 | '@types/unist': 2.0.6 1439 | hastscript: 7.2.0 1440 | property-information: 6.2.0 1441 | vfile: 5.3.6 1442 | vfile-location: 4.0.1 1443 | web-namespaces: 2.0.1 1444 | dev: false 1445 | 1446 | /hast-util-from-parse5@8.0.1: 1447 | resolution: {integrity: sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ==} 1448 | dependencies: 1449 | '@types/hast': 3.0.1 1450 | '@types/unist': 3.0.0 1451 | devlop: 1.1.0 1452 | hastscript: 8.0.0 1453 | property-information: 6.2.0 1454 | vfile: 6.0.1 1455 | vfile-location: 5.0.2 1456 | web-namespaces: 2.0.1 1457 | dev: false 1458 | 1459 | /hast-util-is-element@2.1.3: 1460 | resolution: {integrity: sha512-O1bKah6mhgEq2WtVMk+Ta5K7pPMqsBBlmzysLdcwKVrqzZQ0CHqUPiIVspNhAG1rvxpvJjtGee17XfauZYKqVA==} 1461 | dependencies: 1462 | '@types/hast': 2.3.4 1463 | '@types/unist': 2.0.6 1464 | dev: false 1465 | 1466 | /hast-util-parse-selector@3.1.1: 1467 | resolution: {integrity: sha512-jdlwBjEexy1oGz0aJ2f4GKMaVKkA9jwjr4MjAAI22E5fM/TXVZHuS5OpONtdeIkRKqAaryQ2E9xNQxijoThSZA==} 1468 | dependencies: 1469 | '@types/hast': 2.3.4 1470 | dev: false 1471 | 1472 | /hast-util-parse-selector@4.0.0: 1473 | resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==} 1474 | dependencies: 1475 | '@types/hast': 3.0.1 1476 | dev: false 1477 | 1478 | /hast-util-raw@9.0.1: 1479 | resolution: {integrity: sha512-5m1gmba658Q+lO5uqL5YNGQWeh1MYWZbZmWrM5lncdcuiXuo5E2HT/CIOp0rLF8ksfSwiCVJ3twlgVRyTGThGA==} 1480 | dependencies: 1481 | '@types/hast': 3.0.1 1482 | '@types/unist': 3.0.0 1483 | '@ungap/structured-clone': 1.2.0 1484 | hast-util-from-parse5: 8.0.1 1485 | hast-util-to-parse5: 8.0.0 1486 | html-void-elements: 3.0.0 1487 | mdast-util-to-hast: 13.0.2 1488 | parse5: 7.1.2 1489 | unist-util-position: 5.0.0 1490 | unist-util-visit: 5.0.0 1491 | vfile: 6.0.1 1492 | web-namespaces: 2.0.1 1493 | zwitch: 2.0.4 1494 | dev: false 1495 | 1496 | /hast-util-to-estree@2.1.0: 1497 | resolution: {integrity: sha512-Vwch1etMRmm89xGgz+voWXvVHba2iiMdGMKmaMfYt35rbVtFDq8JNwwAIvi8zHMkO6Gvqo9oTMwJTmzVRfXh4g==} 1498 | dependencies: 1499 | '@types/estree': 1.0.0 1500 | '@types/estree-jsx': 1.0.0 1501 | '@types/hast': 2.3.4 1502 | '@types/unist': 2.0.6 1503 | comma-separated-tokens: 2.0.3 1504 | estree-util-attach-comments: 2.1.0 1505 | estree-util-is-identifier-name: 2.0.1 1506 | hast-util-whitespace: 2.0.0 1507 | mdast-util-mdx-expression: 1.3.1 1508 | mdast-util-mdxjs-esm: 1.3.0 1509 | property-information: 6.2.0 1510 | space-separated-tokens: 2.0.2 1511 | style-to-object: 0.3.0 1512 | unist-util-position: 4.0.3 1513 | zwitch: 2.0.4 1514 | transitivePeerDependencies: 1515 | - supports-color 1516 | dev: false 1517 | 1518 | /hast-util-to-parse5@8.0.0: 1519 | resolution: {integrity: sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==} 1520 | dependencies: 1521 | '@types/hast': 3.0.1 1522 | comma-separated-tokens: 2.0.3 1523 | devlop: 1.1.0 1524 | property-information: 6.2.0 1525 | space-separated-tokens: 2.0.2 1526 | web-namespaces: 2.0.1 1527 | zwitch: 2.0.4 1528 | dev: false 1529 | 1530 | /hast-util-to-text@3.1.2: 1531 | resolution: {integrity: sha512-tcllLfp23dJJ+ju5wCCZHVpzsQQ43+moJbqVX3jNWPB7z/KFC4FyZD6R7y94cHL6MQ33YtMZL8Z0aIXXI4XFTw==} 1532 | dependencies: 1533 | '@types/hast': 2.3.4 1534 | '@types/unist': 2.0.6 1535 | hast-util-is-element: 2.1.3 1536 | unist-util-find-after: 4.0.1 1537 | dev: false 1538 | 1539 | /hast-util-whitespace@2.0.0: 1540 | resolution: {integrity: sha512-Pkw+xBHuV6xFeJprJe2BBEoDV+AvQySaz3pPDRUs5PNZEMQjpXJJueqrpcHIXxnWTcAGi/UOCgVShlkY6kLoqg==} 1541 | dev: false 1542 | 1543 | /hastscript@7.2.0: 1544 | resolution: {integrity: sha512-TtYPq24IldU8iKoJQqvZOuhi5CyCQRAbvDOX0x1eW6rsHSxa/1i2CCiptNTotGHJ3VoHRGmqiv6/D3q113ikkw==} 1545 | dependencies: 1546 | '@types/hast': 2.3.4 1547 | comma-separated-tokens: 2.0.3 1548 | hast-util-parse-selector: 3.1.1 1549 | property-information: 6.2.0 1550 | space-separated-tokens: 2.0.2 1551 | dev: false 1552 | 1553 | /hastscript@8.0.0: 1554 | resolution: {integrity: sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw==} 1555 | dependencies: 1556 | '@types/hast': 3.0.1 1557 | comma-separated-tokens: 2.0.3 1558 | hast-util-parse-selector: 4.0.0 1559 | property-information: 6.2.0 1560 | space-separated-tokens: 2.0.2 1561 | dev: false 1562 | 1563 | /heap@0.2.7: 1564 | resolution: {integrity: sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==} 1565 | dev: false 1566 | 1567 | /html-void-elements@3.0.0: 1568 | resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} 1569 | dev: false 1570 | 1571 | /iconv-lite@0.6.3: 1572 | resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} 1573 | engines: {node: '>=0.10.0'} 1574 | dependencies: 1575 | safer-buffer: 2.1.2 1576 | dev: false 1577 | 1578 | /inflight@1.0.6: 1579 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 1580 | dependencies: 1581 | once: 1.4.0 1582 | wrappy: 1.0.2 1583 | dev: true 1584 | 1585 | /inherits@2.0.4: 1586 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 1587 | dev: true 1588 | 1589 | /inline-style-parser@0.1.1: 1590 | resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==} 1591 | dev: false 1592 | 1593 | /internmap@1.0.1: 1594 | resolution: {integrity: sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==} 1595 | dev: false 1596 | 1597 | /internmap@2.0.3: 1598 | resolution: {integrity: sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==} 1599 | engines: {node: '>=12'} 1600 | dev: false 1601 | 1602 | /intersection-observer@0.12.2: 1603 | resolution: {integrity: sha512-7m1vEcPCxXYI8HqnL8CKI6siDyD+eIWSwgB3DZA+ZTogxk9I4CDnj4wilt9x/+/QbHI4YG5YZNmC6458/e9Ktg==} 1604 | dev: false 1605 | 1606 | /is-alphabetical@2.0.1: 1607 | resolution: {integrity: sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==} 1608 | dev: false 1609 | 1610 | /is-alphanumerical@2.0.1: 1611 | resolution: {integrity: sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==} 1612 | dependencies: 1613 | is-alphabetical: 2.0.1 1614 | is-decimal: 2.0.1 1615 | dev: false 1616 | 1617 | /is-binary-path@2.1.0: 1618 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} 1619 | engines: {node: '>=8'} 1620 | dependencies: 1621 | binary-extensions: 2.2.0 1622 | dev: true 1623 | 1624 | /is-buffer@2.0.5: 1625 | resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==} 1626 | engines: {node: '>=4'} 1627 | dev: false 1628 | 1629 | /is-core-module@2.13.0: 1630 | resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==} 1631 | dependencies: 1632 | has: 1.0.3 1633 | dev: true 1634 | 1635 | /is-decimal@2.0.1: 1636 | resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} 1637 | dev: false 1638 | 1639 | /is-extendable@0.1.1: 1640 | resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} 1641 | engines: {node: '>=0.10.0'} 1642 | dev: false 1643 | 1644 | /is-extglob@2.1.1: 1645 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 1646 | engines: {node: '>=0.10.0'} 1647 | dev: true 1648 | 1649 | /is-glob@4.0.3: 1650 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 1651 | engines: {node: '>=0.10.0'} 1652 | dependencies: 1653 | is-extglob: 2.1.1 1654 | dev: true 1655 | 1656 | /is-hexadecimal@2.0.1: 1657 | resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} 1658 | dev: false 1659 | 1660 | /is-number@7.0.0: 1661 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 1662 | engines: {node: '>=0.12.0'} 1663 | dev: true 1664 | 1665 | /is-obj@3.0.0: 1666 | resolution: {integrity: sha512-IlsXEHOjtKhpN8r/tRFj2nDyTmHvcfNeu/nrRIcXE17ROeatXchkojffa1SpdqW4cr/Fj6QkEf/Gn4zf6KKvEQ==} 1667 | engines: {node: '>=12'} 1668 | dev: false 1669 | 1670 | /is-plain-obj@3.0.0: 1671 | resolution: {integrity: sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==} 1672 | engines: {node: '>=10'} 1673 | dev: false 1674 | 1675 | /is-plain-obj@4.1.0: 1676 | resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} 1677 | engines: {node: '>=12'} 1678 | dev: false 1679 | 1680 | /is-reference@3.0.0: 1681 | resolution: {integrity: sha512-Eo1W3wUoHWoCoVM4GVl/a+K0IgiqE5aIo4kJABFyMum1ZORlPkC+UC357sSQUL5w5QCE5kCC9upl75b7+7CY/Q==} 1682 | dependencies: 1683 | '@types/estree': 1.0.0 1684 | dev: false 1685 | 1686 | /is-ssh@1.4.0: 1687 | resolution: {integrity: sha512-x7+VxdxOdlV3CYpjvRLBv5Lo9OJerlYanjwFrPR9fuGPjCiNiCzFgAWpiLAohSbsnH4ZAys3SBh+hq5rJosxUQ==} 1688 | dependencies: 1689 | protocols: 2.0.1 1690 | dev: false 1691 | 1692 | /is-stream@1.1.0: 1693 | resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==} 1694 | engines: {node: '>=0.10.0'} 1695 | dev: false 1696 | 1697 | /isexe@2.0.0: 1698 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 1699 | dev: false 1700 | 1701 | /jiti@1.20.0: 1702 | resolution: {integrity: sha512-3TV69ZbrvV6U5DfQimop50jE9Dl6J8O1ja1dvBbMba/sZ3YBEQqJ2VZRoQPVnhlzjNtU1vaXRZVrVjU4qtm8yA==} 1703 | hasBin: true 1704 | dev: true 1705 | 1706 | /js-tokens@4.0.0: 1707 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 1708 | dev: false 1709 | 1710 | /js-yaml@3.14.1: 1711 | resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} 1712 | hasBin: true 1713 | dependencies: 1714 | argparse: 1.0.10 1715 | esprima: 4.0.1 1716 | dev: false 1717 | 1718 | /js-yaml@4.1.0: 1719 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 1720 | hasBin: true 1721 | dependencies: 1722 | argparse: 2.0.1 1723 | dev: false 1724 | 1725 | /jsonc-parser@3.2.0: 1726 | resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} 1727 | dev: false 1728 | 1729 | /katex@0.13.24: 1730 | resolution: {integrity: sha512-jZxYuKCma3VS5UuxOx/rFV1QyGSl3Uy/i0kTJF3HgQ5xMinCQVF8Zd4bMY/9aI9b9A2pjIBOsjSSm68ykTAr8w==} 1731 | hasBin: true 1732 | dependencies: 1733 | commander: 8.3.0 1734 | dev: false 1735 | 1736 | /katex@0.16.8: 1737 | resolution: {integrity: sha512-ftuDnJbcbOckGY11OO+zg3OofESlbR5DRl2cmN8HeWeeFIV7wTXvAOx8kEjZjobhA+9wh2fbKeO6cdcA9Mnovg==} 1738 | hasBin: true 1739 | dependencies: 1740 | commander: 8.3.0 1741 | dev: false 1742 | 1743 | /khroma@2.0.0: 1744 | resolution: {integrity: sha512-2J8rDNlQWbtiNYThZRvmMv5yt44ZakX+Tz5ZIp/mN1pt4snn+m030Va5Z4v8xA0cQFDXBwO/8i42xL4QPsVk3g==} 1745 | dev: false 1746 | 1747 | /kind-of@6.0.3: 1748 | resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} 1749 | engines: {node: '>=0.10.0'} 1750 | dev: false 1751 | 1752 | /kleur@4.1.5: 1753 | resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} 1754 | engines: {node: '>=6'} 1755 | dev: false 1756 | 1757 | /layout-base@1.0.2: 1758 | resolution: {integrity: sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==} 1759 | dev: false 1760 | 1761 | /layout-base@2.0.1: 1762 | resolution: {integrity: sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==} 1763 | dev: false 1764 | 1765 | /lilconfig@2.1.0: 1766 | resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} 1767 | engines: {node: '>=10'} 1768 | dev: true 1769 | 1770 | /lines-and-columns@1.2.4: 1771 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 1772 | dev: true 1773 | 1774 | /lodash-es@4.17.21: 1775 | resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} 1776 | dev: false 1777 | 1778 | /lodash.get@4.4.2: 1779 | resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} 1780 | dev: false 1781 | 1782 | /lodash@4.17.21: 1783 | resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} 1784 | dev: false 1785 | 1786 | /longest-streak@3.1.0: 1787 | resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} 1788 | dev: false 1789 | 1790 | /loose-envify@1.4.0: 1791 | resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} 1792 | hasBin: true 1793 | dependencies: 1794 | js-tokens: 4.0.0 1795 | dev: false 1796 | 1797 | /lru-cache@4.1.5: 1798 | resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==} 1799 | dependencies: 1800 | pseudomap: 1.0.2 1801 | yallist: 2.1.2 1802 | dev: false 1803 | 1804 | /lucide-react@0.279.0(react@18.2.0): 1805 | resolution: {integrity: sha512-LJ8g66+Bxc3t3x9vKTeK3wn3xucrOQGfJ9ou9GsBwCt2offsrT2BB90XrTrIzE1noYYDe2O8jZaRHi6sAHXNxw==} 1806 | peerDependencies: 1807 | react: ^16.5.1 || ^17.0.0 || ^18.0.0 1808 | dependencies: 1809 | react: 18.2.0 1810 | dev: false 1811 | 1812 | /markdown-extensions@1.1.1: 1813 | resolution: {integrity: sha512-WWC0ZuMzCyDHYCasEGs4IPvLyTGftYwh6wIEOULOF0HXcqZlhwRzrK0w2VUlxWA98xnvb/jszw4ZSkJ6ADpM6Q==} 1814 | engines: {node: '>=0.10.0'} 1815 | dev: false 1816 | 1817 | /markdown-table@3.0.3: 1818 | resolution: {integrity: sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==} 1819 | dev: false 1820 | 1821 | /match-sorter@6.3.1: 1822 | resolution: {integrity: sha512-mxybbo3pPNuA+ZuCUhm5bwNkXrJTbsk5VWbR5wiwz/GC6LIiegBGn2w3O08UG/jdbYLinw51fSQ5xNU1U3MgBw==} 1823 | dependencies: 1824 | '@babel/runtime': 7.20.6 1825 | remove-accents: 0.4.2 1826 | dev: false 1827 | 1828 | /mdast-util-definitions@5.1.1: 1829 | resolution: {integrity: sha512-rQ+Gv7mHttxHOBx2dkF4HWTg+EE+UR78ptQWDylzPKaQuVGdG4HIoY3SrS/pCp80nZ04greFvXbVFHT+uf0JVQ==} 1830 | dependencies: 1831 | '@types/mdast': 3.0.10 1832 | '@types/unist': 2.0.6 1833 | unist-util-visit: 4.1.1 1834 | dev: false 1835 | 1836 | /mdast-util-find-and-replace@2.2.1: 1837 | resolution: {integrity: sha512-SobxkQXFAdd4b5WmEakmkVoh18icjQRxGy5OWTCzgsLRm1Fu/KCtwD1HIQSsmq5ZRjVH0Ehwg6/Fn3xIUk+nKw==} 1838 | dependencies: 1839 | escape-string-regexp: 5.0.0 1840 | unist-util-is: 5.1.1 1841 | unist-util-visit-parents: 5.1.1 1842 | dev: false 1843 | 1844 | /mdast-util-from-markdown@1.3.1: 1845 | resolution: {integrity: sha512-4xTO/M8c82qBcnQc1tgpNtubGUW/Y1tBQ1B0i5CtSoelOLKFYlElIr3bvgREYYO5iRqbMY1YuqZng0GVOI8Qww==} 1846 | dependencies: 1847 | '@types/mdast': 3.0.10 1848 | '@types/unist': 2.0.6 1849 | decode-named-character-reference: 1.0.2 1850 | mdast-util-to-string: 3.1.0 1851 | micromark: 3.1.0 1852 | micromark-util-decode-numeric-character-reference: 1.0.0 1853 | micromark-util-decode-string: 1.0.2 1854 | micromark-util-normalize-identifier: 1.0.0 1855 | micromark-util-symbol: 1.0.1 1856 | micromark-util-types: 1.0.2 1857 | unist-util-stringify-position: 3.0.2 1858 | uvu: 0.5.6 1859 | transitivePeerDependencies: 1860 | - supports-color 1861 | dev: false 1862 | 1863 | /mdast-util-gfm-autolink-literal@1.0.2: 1864 | resolution: {integrity: sha512-FzopkOd4xTTBeGXhXSBU0OCDDh5lUj2rd+HQqG92Ld+jL4lpUfgX2AT2OHAVP9aEeDKp7G92fuooSZcYJA3cRg==} 1865 | dependencies: 1866 | '@types/mdast': 3.0.10 1867 | ccount: 2.0.1 1868 | mdast-util-find-and-replace: 2.2.1 1869 | micromark-util-character: 1.1.0 1870 | dev: false 1871 | 1872 | /mdast-util-gfm-footnote@1.0.1: 1873 | resolution: {integrity: sha512-p+PrYlkw9DeCRkTVw1duWqPRHX6Ywh2BNKJQcZbCwAuP/59B0Lk9kakuAd7KbQprVO4GzdW8eS5++A9PUSqIyw==} 1874 | dependencies: 1875 | '@types/mdast': 3.0.10 1876 | mdast-util-to-markdown: 1.3.0 1877 | micromark-util-normalize-identifier: 1.0.0 1878 | dev: false 1879 | 1880 | /mdast-util-gfm-strikethrough@1.0.2: 1881 | resolution: {integrity: sha512-T/4DVHXcujH6jx1yqpcAYYwd+z5lAYMw4Ls6yhTfbMMtCt0PHY4gEfhW9+lKsLBtyhUGKRIzcUA2FATVqnvPDA==} 1882 | dependencies: 1883 | '@types/mdast': 3.0.10 1884 | mdast-util-to-markdown: 1.3.0 1885 | dev: false 1886 | 1887 | /mdast-util-gfm-table@1.0.6: 1888 | resolution: {integrity: sha512-uHR+fqFq3IvB3Rd4+kzXW8dmpxUhvgCQZep6KdjsLK4O6meK5dYZEayLtIxNus1XO3gfjfcIFe8a7L0HZRGgag==} 1889 | dependencies: 1890 | '@types/mdast': 3.0.10 1891 | markdown-table: 3.0.3 1892 | mdast-util-from-markdown: 1.3.1 1893 | mdast-util-to-markdown: 1.3.0 1894 | transitivePeerDependencies: 1895 | - supports-color 1896 | dev: false 1897 | 1898 | /mdast-util-gfm-task-list-item@1.0.1: 1899 | resolution: {integrity: sha512-KZ4KLmPdABXOsfnM6JHUIjxEvcx2ulk656Z/4Balw071/5qgnhz+H1uGtf2zIGnrnvDC8xR4Fj9uKbjAFGNIeA==} 1900 | dependencies: 1901 | '@types/mdast': 3.0.10 1902 | mdast-util-to-markdown: 1.3.0 1903 | dev: false 1904 | 1905 | /mdast-util-gfm@2.0.1: 1906 | resolution: {integrity: sha512-42yHBbfWIFisaAfV1eixlabbsa6q7vHeSPY+cg+BBjX51M8xhgMacqH9g6TftB/9+YkcI0ooV4ncfrJslzm/RQ==} 1907 | dependencies: 1908 | mdast-util-from-markdown: 1.3.1 1909 | mdast-util-gfm-autolink-literal: 1.0.2 1910 | mdast-util-gfm-footnote: 1.0.1 1911 | mdast-util-gfm-strikethrough: 1.0.2 1912 | mdast-util-gfm-table: 1.0.6 1913 | mdast-util-gfm-task-list-item: 1.0.1 1914 | mdast-util-to-markdown: 1.3.0 1915 | transitivePeerDependencies: 1916 | - supports-color 1917 | dev: false 1918 | 1919 | /mdast-util-math@2.0.2: 1920 | resolution: {integrity: sha512-8gmkKVp9v6+Tgjtq6SYx9kGPpTf6FVYRa53/DLh479aldR9AyP48qeVOgNZ5X7QUK7nOy4yw7vg6mbiGcs9jWQ==} 1921 | dependencies: 1922 | '@types/mdast': 3.0.10 1923 | longest-streak: 3.1.0 1924 | mdast-util-to-markdown: 1.3.0 1925 | dev: false 1926 | 1927 | /mdast-util-mdx-expression@1.3.1: 1928 | resolution: {integrity: sha512-TTb6cKyTA1RD+1su1iStZ5PAv3rFfOUKcoU5EstUpv/IZo63uDX03R8+jXjMEhcobXnNOiG6/ccekvVl4eV1zQ==} 1929 | dependencies: 1930 | '@types/estree-jsx': 1.0.0 1931 | '@types/hast': 2.3.4 1932 | '@types/mdast': 3.0.10 1933 | mdast-util-from-markdown: 1.3.1 1934 | mdast-util-to-markdown: 1.3.0 1935 | transitivePeerDependencies: 1936 | - supports-color 1937 | dev: false 1938 | 1939 | /mdast-util-mdx-jsx@2.1.0: 1940 | resolution: {integrity: sha512-KzgzfWMhdteDkrY4mQtyvTU5bc/W4ppxhe9SzelO6QUUiwLAM+Et2Dnjjprik74a336kHdo0zKm7Tp+n6FFeRg==} 1941 | dependencies: 1942 | '@types/estree-jsx': 1.0.0 1943 | '@types/hast': 2.3.4 1944 | '@types/mdast': 3.0.10 1945 | ccount: 2.0.1 1946 | mdast-util-to-markdown: 1.3.0 1947 | parse-entities: 4.0.0 1948 | stringify-entities: 4.0.3 1949 | unist-util-remove-position: 4.0.1 1950 | unist-util-stringify-position: 3.0.2 1951 | vfile-message: 3.1.3 1952 | dev: false 1953 | 1954 | /mdast-util-mdx@2.0.0: 1955 | resolution: {integrity: sha512-M09lW0CcBT1VrJUaF/PYxemxxHa7SLDHdSn94Q9FhxjCQfuW7nMAWKWimTmA3OyDMSTH981NN1csW1X+HPSluw==} 1956 | dependencies: 1957 | mdast-util-mdx-expression: 1.3.1 1958 | mdast-util-mdx-jsx: 2.1.0 1959 | mdast-util-mdxjs-esm: 1.3.0 1960 | transitivePeerDependencies: 1961 | - supports-color 1962 | dev: false 1963 | 1964 | /mdast-util-mdxjs-esm@1.3.0: 1965 | resolution: {integrity: sha512-7N5ihsOkAEGjFotIX9p/YPdl4TqUoMxL4ajNz7PbT89BqsdWJuBC9rvgt6wpbwTZqWWR0jKWqQbwsOWDBUZv4g==} 1966 | dependencies: 1967 | '@types/estree-jsx': 1.0.0 1968 | '@types/hast': 2.3.4 1969 | '@types/mdast': 3.0.10 1970 | mdast-util-from-markdown: 1.3.1 1971 | mdast-util-to-markdown: 1.3.0 1972 | transitivePeerDependencies: 1973 | - supports-color 1974 | dev: false 1975 | 1976 | /mdast-util-to-hast@12.2.4: 1977 | resolution: {integrity: sha512-a21xoxSef1l8VhHxS1Dnyioz6grrJkoaCUgGzMD/7dWHvboYX3VW53esRUfB5tgTyz4Yos1n25SPcj35dJqmAg==} 1978 | dependencies: 1979 | '@types/hast': 2.3.4 1980 | '@types/mdast': 3.0.10 1981 | mdast-util-definitions: 5.1.1 1982 | micromark-util-sanitize-uri: 1.1.0 1983 | trim-lines: 3.0.1 1984 | unist-builder: 3.0.0 1985 | unist-util-generated: 2.0.0 1986 | unist-util-position: 4.0.3 1987 | unist-util-visit: 4.1.1 1988 | dev: false 1989 | 1990 | /mdast-util-to-hast@13.0.2: 1991 | resolution: {integrity: sha512-U5I+500EOOw9e3ZrclN3Is3fRpw8c19SMyNZlZ2IS+7vLsNzb2Om11VpIVOR+/0137GhZsFEF6YiKD5+0Hr2Og==} 1992 | dependencies: 1993 | '@types/hast': 3.0.1 1994 | '@types/mdast': 4.0.0 1995 | '@ungap/structured-clone': 1.2.0 1996 | devlop: 1.1.0 1997 | micromark-util-sanitize-uri: 2.0.0 1998 | trim-lines: 3.0.1 1999 | unist-util-position: 5.0.0 2000 | unist-util-visit: 5.0.0 2001 | dev: false 2002 | 2003 | /mdast-util-to-markdown@1.3.0: 2004 | resolution: {integrity: sha512-6tUSs4r+KK4JGTTiQ7FfHmVOaDrLQJPmpjD6wPMlHGUVXoG9Vjc3jIeP+uyBWRf8clwB2blM+W7+KrlMYQnftA==} 2005 | dependencies: 2006 | '@types/mdast': 3.0.10 2007 | '@types/unist': 2.0.6 2008 | longest-streak: 3.1.0 2009 | mdast-util-to-string: 3.1.0 2010 | micromark-util-decode-string: 1.0.2 2011 | unist-util-visit: 4.1.1 2012 | zwitch: 2.0.4 2013 | dev: false 2014 | 2015 | /mdast-util-to-string@3.1.0: 2016 | resolution: {integrity: sha512-n4Vypz/DZgwo0iMHLQL49dJzlp7YtAJP+N07MZHpjPf/5XJuHUWstviF4Mn2jEiR/GNmtnRRqnwsXExk3igfFA==} 2017 | dev: false 2018 | 2019 | /merge2@1.4.1: 2020 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 2021 | engines: {node: '>= 8'} 2022 | dev: true 2023 | 2024 | /mermaid@10.4.0: 2025 | resolution: {integrity: sha512-4QCQLp79lvz7UZxow5HUX7uWTPJOaQBVExduo91tliXC7v78i6kssZOPHxLL+Xs30KU72cpPn3g3imw/xm/gaw==} 2026 | dependencies: 2027 | '@braintree/sanitize-url': 6.0.4 2028 | '@types/d3-scale': 4.0.5 2029 | '@types/d3-scale-chromatic': 3.0.0 2030 | cytoscape: 3.26.0 2031 | cytoscape-cose-bilkent: 4.1.0(cytoscape@3.26.0) 2032 | cytoscape-fcose: 2.2.0(cytoscape@3.26.0) 2033 | d3: 7.8.5 2034 | d3-sankey: 0.12.3 2035 | dagre-d3-es: 7.0.10 2036 | dayjs: 1.11.10 2037 | dompurify: 3.0.5 2038 | elkjs: 0.8.2 2039 | khroma: 2.0.0 2040 | lodash-es: 4.17.21 2041 | mdast-util-from-markdown: 1.3.1 2042 | non-layered-tidy-tree-layout: 2.0.2 2043 | stylis: 4.3.0 2044 | ts-dedent: 2.2.0 2045 | uuid: 9.0.1 2046 | web-worker: 1.2.0 2047 | transitivePeerDependencies: 2048 | - supports-color 2049 | dev: false 2050 | 2051 | /micromark-core-commonmark@1.0.6: 2052 | resolution: {integrity: sha512-K+PkJTxqjFfSNkfAhp4GB+cZPfQd6dxtTXnf+RjZOV7T4EEXnvgzOcnp+eSTmpGk9d1S9sL6/lqrgSNn/s0HZA==} 2053 | dependencies: 2054 | decode-named-character-reference: 1.0.2 2055 | micromark-factory-destination: 1.0.0 2056 | micromark-factory-label: 1.0.2 2057 | micromark-factory-space: 1.0.0 2058 | micromark-factory-title: 1.0.2 2059 | micromark-factory-whitespace: 1.0.0 2060 | micromark-util-character: 1.1.0 2061 | micromark-util-chunked: 1.0.0 2062 | micromark-util-classify-character: 1.0.0 2063 | micromark-util-html-tag-name: 1.1.0 2064 | micromark-util-normalize-identifier: 1.0.0 2065 | micromark-util-resolve-all: 1.0.0 2066 | micromark-util-subtokenize: 1.0.2 2067 | micromark-util-symbol: 1.0.1 2068 | micromark-util-types: 1.0.2 2069 | uvu: 0.5.6 2070 | dev: false 2071 | 2072 | /micromark-extension-gfm-autolink-literal@1.0.3: 2073 | resolution: {integrity: sha512-i3dmvU0htawfWED8aHMMAzAVp/F0Z+0bPh3YrbTPPL1v4YAlCZpy5rBO5p0LPYiZo0zFVkoYh7vDU7yQSiCMjg==} 2074 | dependencies: 2075 | micromark-util-character: 1.1.0 2076 | micromark-util-sanitize-uri: 1.1.0 2077 | micromark-util-symbol: 1.0.1 2078 | micromark-util-types: 1.0.2 2079 | uvu: 0.5.6 2080 | dev: false 2081 | 2082 | /micromark-extension-gfm-footnote@1.0.4: 2083 | resolution: {integrity: sha512-E/fmPmDqLiMUP8mLJ8NbJWJ4bTw6tS+FEQS8CcuDtZpILuOb2kjLqPEeAePF1djXROHXChM/wPJw0iS4kHCcIg==} 2084 | dependencies: 2085 | micromark-core-commonmark: 1.0.6 2086 | micromark-factory-space: 1.0.0 2087 | micromark-util-character: 1.1.0 2088 | micromark-util-normalize-identifier: 1.0.0 2089 | micromark-util-sanitize-uri: 1.1.0 2090 | micromark-util-symbol: 1.0.1 2091 | micromark-util-types: 1.0.2 2092 | uvu: 0.5.6 2093 | dev: false 2094 | 2095 | /micromark-extension-gfm-strikethrough@1.0.4: 2096 | resolution: {integrity: sha512-/vjHU/lalmjZCT5xt7CcHVJGq8sYRm80z24qAKXzaHzem/xsDYb2yLL+NNVbYvmpLx3O7SYPuGL5pzusL9CLIQ==} 2097 | dependencies: 2098 | micromark-util-chunked: 1.0.0 2099 | micromark-util-classify-character: 1.0.0 2100 | micromark-util-resolve-all: 1.0.0 2101 | micromark-util-symbol: 1.0.1 2102 | micromark-util-types: 1.0.2 2103 | uvu: 0.5.6 2104 | dev: false 2105 | 2106 | /micromark-extension-gfm-table@1.0.5: 2107 | resolution: {integrity: sha512-xAZ8J1X9W9K3JTJTUL7G6wSKhp2ZYHrFk5qJgY/4B33scJzE2kpfRL6oiw/veJTbt7jiM/1rngLlOKPWr1G+vg==} 2108 | dependencies: 2109 | micromark-factory-space: 1.0.0 2110 | micromark-util-character: 1.1.0 2111 | micromark-util-symbol: 1.0.1 2112 | micromark-util-types: 1.0.2 2113 | uvu: 0.5.6 2114 | dev: false 2115 | 2116 | /micromark-extension-gfm-tagfilter@1.0.1: 2117 | resolution: {integrity: sha512-Ty6psLAcAjboRa/UKUbbUcwjVAv5plxmpUTy2XC/3nJFL37eHej8jrHrRzkqcpipJliuBH30DTs7+3wqNcQUVA==} 2118 | dependencies: 2119 | micromark-util-types: 1.0.2 2120 | dev: false 2121 | 2122 | /micromark-extension-gfm-task-list-item@1.0.3: 2123 | resolution: {integrity: sha512-PpysK2S1Q/5VXi72IIapbi/jliaiOFzv7THH4amwXeYXLq3l1uo8/2Be0Ac1rEwK20MQEsGH2ltAZLNY2KI/0Q==} 2124 | dependencies: 2125 | micromark-factory-space: 1.0.0 2126 | micromark-util-character: 1.1.0 2127 | micromark-util-symbol: 1.0.1 2128 | micromark-util-types: 1.0.2 2129 | uvu: 0.5.6 2130 | dev: false 2131 | 2132 | /micromark-extension-gfm@2.0.1: 2133 | resolution: {integrity: sha512-p2sGjajLa0iYiGQdT0oelahRYtMWvLjy8J9LOCxzIQsllMCGLbsLW+Nc+N4vi02jcRJvedVJ68cjelKIO6bpDA==} 2134 | dependencies: 2135 | micromark-extension-gfm-autolink-literal: 1.0.3 2136 | micromark-extension-gfm-footnote: 1.0.4 2137 | micromark-extension-gfm-strikethrough: 1.0.4 2138 | micromark-extension-gfm-table: 1.0.5 2139 | micromark-extension-gfm-tagfilter: 1.0.1 2140 | micromark-extension-gfm-task-list-item: 1.0.3 2141 | micromark-util-combine-extensions: 1.0.0 2142 | micromark-util-types: 1.0.2 2143 | dev: false 2144 | 2145 | /micromark-extension-math@2.0.2: 2146 | resolution: {integrity: sha512-cFv2B/E4pFPBBFuGgLHkkNiFAIQv08iDgPH2HCuR2z3AUgMLecES5Cq7AVtwOtZeRrbA80QgMUk8VVW0Z+D2FA==} 2147 | dependencies: 2148 | '@types/katex': 0.11.1 2149 | katex: 0.13.24 2150 | micromark-factory-space: 1.0.0 2151 | micromark-util-character: 1.1.0 2152 | micromark-util-symbol: 1.0.1 2153 | micromark-util-types: 1.0.2 2154 | uvu: 0.5.6 2155 | dev: false 2156 | 2157 | /micromark-extension-mdx-expression@1.0.3: 2158 | resolution: {integrity: sha512-TjYtjEMszWze51NJCZmhv7MEBcgYRgb3tJeMAJ+HQCAaZHHRBaDCccqQzGizR/H4ODefP44wRTgOn2vE5I6nZA==} 2159 | dependencies: 2160 | micromark-factory-mdx-expression: 1.0.6 2161 | micromark-factory-space: 1.0.0 2162 | micromark-util-character: 1.1.0 2163 | micromark-util-events-to-acorn: 1.2.0 2164 | micromark-util-symbol: 1.0.1 2165 | micromark-util-types: 1.0.2 2166 | uvu: 0.5.6 2167 | dev: false 2168 | 2169 | /micromark-extension-mdx-jsx@1.0.3: 2170 | resolution: {integrity: sha512-VfA369RdqUISF0qGgv2FfV7gGjHDfn9+Qfiv5hEwpyr1xscRj/CiVRkU7rywGFCO7JwJ5L0e7CJz60lY52+qOA==} 2171 | dependencies: 2172 | '@types/acorn': 4.0.6 2173 | estree-util-is-identifier-name: 2.0.1 2174 | micromark-factory-mdx-expression: 1.0.6 2175 | micromark-factory-space: 1.0.0 2176 | micromark-util-character: 1.1.0 2177 | micromark-util-symbol: 1.0.1 2178 | micromark-util-types: 1.0.2 2179 | uvu: 0.5.6 2180 | vfile-message: 3.1.3 2181 | dev: false 2182 | 2183 | /micromark-extension-mdx-md@1.0.0: 2184 | resolution: {integrity: sha512-xaRAMoSkKdqZXDAoSgp20Azm0aRQKGOl0RrS81yGu8Hr/JhMsBmfs4wR7m9kgVUIO36cMUQjNyiyDKPrsv8gOw==} 2185 | dependencies: 2186 | micromark-util-types: 1.0.2 2187 | dev: false 2188 | 2189 | /micromark-extension-mdxjs-esm@1.0.3: 2190 | resolution: {integrity: sha512-2N13ol4KMoxb85rdDwTAC6uzs8lMX0zeqpcyx7FhS7PxXomOnLactu8WI8iBNXW8AVyea3KIJd/1CKnUmwrK9A==} 2191 | dependencies: 2192 | micromark-core-commonmark: 1.0.6 2193 | micromark-util-character: 1.1.0 2194 | micromark-util-events-to-acorn: 1.2.0 2195 | micromark-util-symbol: 1.0.1 2196 | micromark-util-types: 1.0.2 2197 | unist-util-position-from-estree: 1.1.1 2198 | uvu: 0.5.6 2199 | vfile-message: 3.1.3 2200 | dev: false 2201 | 2202 | /micromark-extension-mdxjs@1.0.0: 2203 | resolution: {integrity: sha512-TZZRZgeHvtgm+IhtgC2+uDMR7h8eTKF0QUX9YsgoL9+bADBpBY6SiLvWqnBlLbCEevITmTqmEuY3FoxMKVs1rQ==} 2204 | dependencies: 2205 | acorn: 8.8.1 2206 | acorn-jsx: 5.3.2(acorn@8.8.1) 2207 | micromark-extension-mdx-expression: 1.0.3 2208 | micromark-extension-mdx-jsx: 1.0.3 2209 | micromark-extension-mdx-md: 1.0.0 2210 | micromark-extension-mdxjs-esm: 1.0.3 2211 | micromark-util-combine-extensions: 1.0.0 2212 | micromark-util-types: 1.0.2 2213 | dev: false 2214 | 2215 | /micromark-factory-destination@1.0.0: 2216 | resolution: {integrity: sha512-eUBA7Rs1/xtTVun9TmV3gjfPz2wEwgK5R5xcbIM5ZYAtvGF6JkyaDsj0agx8urXnO31tEO6Ug83iVH3tdedLnw==} 2217 | dependencies: 2218 | micromark-util-character: 1.1.0 2219 | micromark-util-symbol: 1.0.1 2220 | micromark-util-types: 1.0.2 2221 | dev: false 2222 | 2223 | /micromark-factory-label@1.0.2: 2224 | resolution: {integrity: sha512-CTIwxlOnU7dEshXDQ+dsr2n+yxpP0+fn271pu0bwDIS8uqfFcumXpj5mLn3hSC8iw2MUr6Gx8EcKng1dD7i6hg==} 2225 | dependencies: 2226 | micromark-util-character: 1.1.0 2227 | micromark-util-symbol: 1.0.1 2228 | micromark-util-types: 1.0.2 2229 | uvu: 0.5.6 2230 | dev: false 2231 | 2232 | /micromark-factory-mdx-expression@1.0.6: 2233 | resolution: {integrity: sha512-WRQIc78FV7KrCfjsEf/sETopbYjElh3xAmNpLkd1ODPqxEngP42eVRGbiPEQWpRV27LzqW+XVTvQAMIIRLPnNA==} 2234 | dependencies: 2235 | micromark-factory-space: 1.0.0 2236 | micromark-util-character: 1.1.0 2237 | micromark-util-events-to-acorn: 1.2.0 2238 | micromark-util-symbol: 1.0.1 2239 | micromark-util-types: 1.0.2 2240 | unist-util-position-from-estree: 1.1.1 2241 | uvu: 0.5.6 2242 | vfile-message: 3.1.3 2243 | dev: false 2244 | 2245 | /micromark-factory-space@1.0.0: 2246 | resolution: {integrity: sha512-qUmqs4kj9a5yBnk3JMLyjtWYN6Mzfcx8uJfi5XAveBniDevmZasdGBba5b4QsvRcAkmvGo5ACmSUmyGiKTLZew==} 2247 | dependencies: 2248 | micromark-util-character: 1.1.0 2249 | micromark-util-types: 1.0.2 2250 | dev: false 2251 | 2252 | /micromark-factory-title@1.0.2: 2253 | resolution: {integrity: sha512-zily+Nr4yFqgMGRKLpTVsNl5L4PMu485fGFDOQJQBl2NFpjGte1e86zC0da93wf97jrc4+2G2GQudFMHn3IX+A==} 2254 | dependencies: 2255 | micromark-factory-space: 1.0.0 2256 | micromark-util-character: 1.1.0 2257 | micromark-util-symbol: 1.0.1 2258 | micromark-util-types: 1.0.2 2259 | uvu: 0.5.6 2260 | dev: false 2261 | 2262 | /micromark-factory-whitespace@1.0.0: 2263 | resolution: {integrity: sha512-Qx7uEyahU1lt1RnsECBiuEbfr9INjQTGa6Err+gF3g0Tx4YEviPbqqGKNv/NrBaE7dVHdn1bVZKM/n5I/Bak7A==} 2264 | dependencies: 2265 | micromark-factory-space: 1.0.0 2266 | micromark-util-character: 1.1.0 2267 | micromark-util-symbol: 1.0.1 2268 | micromark-util-types: 1.0.2 2269 | dev: false 2270 | 2271 | /micromark-util-character@1.1.0: 2272 | resolution: {integrity: sha512-agJ5B3unGNJ9rJvADMJ5ZiYjBRyDpzKAOk01Kpi1TKhlT1APx3XZk6eN7RtSz1erbWHC2L8T3xLZ81wdtGRZzg==} 2273 | dependencies: 2274 | micromark-util-symbol: 1.0.1 2275 | micromark-util-types: 1.0.2 2276 | dev: false 2277 | 2278 | /micromark-util-character@2.0.1: 2279 | resolution: {integrity: sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==} 2280 | dependencies: 2281 | micromark-util-symbol: 2.0.0 2282 | micromark-util-types: 2.0.0 2283 | dev: false 2284 | 2285 | /micromark-util-chunked@1.0.0: 2286 | resolution: {integrity: sha512-5e8xTis5tEZKgesfbQMKRCyzvffRRUX+lK/y+DvsMFdabAicPkkZV6gO+FEWi9RfuKKoxxPwNL+dFF0SMImc1g==} 2287 | dependencies: 2288 | micromark-util-symbol: 1.0.1 2289 | dev: false 2290 | 2291 | /micromark-util-classify-character@1.0.0: 2292 | resolution: {integrity: sha512-F8oW2KKrQRb3vS5ud5HIqBVkCqQi224Nm55o5wYLzY/9PwHGXC01tr3d7+TqHHz6zrKQ72Okwtvm/xQm6OVNZA==} 2293 | dependencies: 2294 | micromark-util-character: 1.1.0 2295 | micromark-util-symbol: 1.0.1 2296 | micromark-util-types: 1.0.2 2297 | dev: false 2298 | 2299 | /micromark-util-combine-extensions@1.0.0: 2300 | resolution: {integrity: sha512-J8H058vFBdo/6+AsjHp2NF7AJ02SZtWaVUjsayNFeAiydTxUwViQPxN0Hf8dp4FmCQi0UUFovFsEyRSUmFH3MA==} 2301 | dependencies: 2302 | micromark-util-chunked: 1.0.0 2303 | micromark-util-types: 1.0.2 2304 | dev: false 2305 | 2306 | /micromark-util-decode-numeric-character-reference@1.0.0: 2307 | resolution: {integrity: sha512-OzO9AI5VUtrTD7KSdagf4MWgHMtET17Ua1fIpXTpuhclCqD8egFWo85GxSGvxgkGS74bEahvtM0WP0HjvV0e4w==} 2308 | dependencies: 2309 | micromark-util-symbol: 1.0.1 2310 | dev: false 2311 | 2312 | /micromark-util-decode-string@1.0.2: 2313 | resolution: {integrity: sha512-DLT5Ho02qr6QWVNYbRZ3RYOSSWWFuH3tJexd3dgN1odEuPNxCngTCXJum7+ViRAd9BbdxCvMToPOD/IvVhzG6Q==} 2314 | dependencies: 2315 | decode-named-character-reference: 1.0.2 2316 | micromark-util-character: 1.1.0 2317 | micromark-util-decode-numeric-character-reference: 1.0.0 2318 | micromark-util-symbol: 1.0.1 2319 | dev: false 2320 | 2321 | /micromark-util-encode@1.0.1: 2322 | resolution: {integrity: sha512-U2s5YdnAYexjKDel31SVMPbfi+eF8y1U4pfiRW/Y8EFVCy/vgxk/2wWTxzcqE71LHtCuCzlBDRU2a5CQ5j+mQA==} 2323 | dev: false 2324 | 2325 | /micromark-util-encode@2.0.0: 2326 | resolution: {integrity: sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==} 2327 | dev: false 2328 | 2329 | /micromark-util-events-to-acorn@1.2.0: 2330 | resolution: {integrity: sha512-WWp3bf7xT9MppNuw3yPjpnOxa8cj5ACivEzXJKu0WwnjBYfzaBvIAT9KfeyI0Qkll+bfQtfftSwdgTH6QhTOKw==} 2331 | dependencies: 2332 | '@types/acorn': 4.0.6 2333 | '@types/estree': 1.0.0 2334 | estree-util-visit: 1.2.0 2335 | micromark-util-types: 1.0.2 2336 | uvu: 0.5.6 2337 | vfile-location: 4.0.1 2338 | vfile-message: 3.1.3 2339 | dev: false 2340 | 2341 | /micromark-util-html-tag-name@1.1.0: 2342 | resolution: {integrity: sha512-BKlClMmYROy9UiV03SwNmckkjn8QHVaWkqoAqzivabvdGcwNGMMMH/5szAnywmsTBUzDsU57/mFi0sp4BQO6dA==} 2343 | dev: false 2344 | 2345 | /micromark-util-normalize-identifier@1.0.0: 2346 | resolution: {integrity: sha512-yg+zrL14bBTFrQ7n35CmByWUTFsgst5JhA4gJYoty4Dqzj4Z4Fr/DHekSS5aLfH9bdlfnSvKAWsAgJhIbogyBg==} 2347 | dependencies: 2348 | micromark-util-symbol: 1.0.1 2349 | dev: false 2350 | 2351 | /micromark-util-resolve-all@1.0.0: 2352 | resolution: {integrity: sha512-CB/AGk98u50k42kvgaMM94wzBqozSzDDaonKU7P7jwQIuH2RU0TeBqGYJz2WY1UdihhjweivStrJ2JdkdEmcfw==} 2353 | dependencies: 2354 | micromark-util-types: 1.0.2 2355 | dev: false 2356 | 2357 | /micromark-util-sanitize-uri@1.1.0: 2358 | resolution: {integrity: sha512-RoxtuSCX6sUNtxhbmsEFQfWzs8VN7cTctmBPvYivo98xb/kDEoTCtJQX5wyzIYEmk/lvNFTat4hL8oW0KndFpg==} 2359 | dependencies: 2360 | micromark-util-character: 1.1.0 2361 | micromark-util-encode: 1.0.1 2362 | micromark-util-symbol: 1.0.1 2363 | dev: false 2364 | 2365 | /micromark-util-sanitize-uri@2.0.0: 2366 | resolution: {integrity: sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==} 2367 | dependencies: 2368 | micromark-util-character: 2.0.1 2369 | micromark-util-encode: 2.0.0 2370 | micromark-util-symbol: 2.0.0 2371 | dev: false 2372 | 2373 | /micromark-util-subtokenize@1.0.2: 2374 | resolution: {integrity: sha512-d90uqCnXp/cy4G881Ub4psE57Sf8YD0pim9QdjCRNjfas2M1u6Lbt+XZK9gnHL2XFhnozZiEdCa9CNfXSfQ6xA==} 2375 | dependencies: 2376 | micromark-util-chunked: 1.0.0 2377 | micromark-util-symbol: 1.0.1 2378 | micromark-util-types: 1.0.2 2379 | uvu: 0.5.6 2380 | dev: false 2381 | 2382 | /micromark-util-symbol@1.0.1: 2383 | resolution: {integrity: sha512-oKDEMK2u5qqAptasDAwWDXq0tG9AssVwAx3E9bBF3t/shRIGsWIRG+cGafs2p/SnDSOecnt6hZPCE2o6lHfFmQ==} 2384 | dev: false 2385 | 2386 | /micromark-util-symbol@2.0.0: 2387 | resolution: {integrity: sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==} 2388 | dev: false 2389 | 2390 | /micromark-util-types@1.0.2: 2391 | resolution: {integrity: sha512-DCfg/T8fcrhrRKTPjRrw/5LLvdGV7BHySf/1LOZx7TzWZdYRjogNtyNq885z3nNallwr3QUKARjqvHqX1/7t+w==} 2392 | dev: false 2393 | 2394 | /micromark-util-types@2.0.0: 2395 | resolution: {integrity: sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==} 2396 | dev: false 2397 | 2398 | /micromark@3.1.0: 2399 | resolution: {integrity: sha512-6Mj0yHLdUZjHnOPgr5xfWIMqMWS12zDN6iws9SLuSz76W8jTtAv24MN4/CL7gJrl5vtxGInkkqDv/JIoRsQOvA==} 2400 | dependencies: 2401 | '@types/debug': 4.1.7 2402 | debug: 4.3.4 2403 | decode-named-character-reference: 1.0.2 2404 | micromark-core-commonmark: 1.0.6 2405 | micromark-factory-space: 1.0.0 2406 | micromark-util-character: 1.1.0 2407 | micromark-util-chunked: 1.0.0 2408 | micromark-util-combine-extensions: 1.0.0 2409 | micromark-util-decode-numeric-character-reference: 1.0.0 2410 | micromark-util-encode: 1.0.1 2411 | micromark-util-normalize-identifier: 1.0.0 2412 | micromark-util-resolve-all: 1.0.0 2413 | micromark-util-sanitize-uri: 1.1.0 2414 | micromark-util-subtokenize: 1.0.2 2415 | micromark-util-symbol: 1.0.1 2416 | micromark-util-types: 1.0.2 2417 | uvu: 0.5.6 2418 | transitivePeerDependencies: 2419 | - supports-color 2420 | dev: false 2421 | 2422 | /micromatch@4.0.5: 2423 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} 2424 | engines: {node: '>=8.6'} 2425 | dependencies: 2426 | braces: 3.0.2 2427 | picomatch: 2.3.1 2428 | dev: true 2429 | 2430 | /minimatch@3.1.2: 2431 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 2432 | dependencies: 2433 | brace-expansion: 1.1.11 2434 | dev: true 2435 | 2436 | /mri@1.2.0: 2437 | resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} 2438 | engines: {node: '>=4'} 2439 | dev: false 2440 | 2441 | /ms@2.1.2: 2442 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 2443 | dev: false 2444 | 2445 | /mz@2.7.0: 2446 | resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} 2447 | dependencies: 2448 | any-promise: 1.3.0 2449 | object-assign: 4.1.1 2450 | thenify-all: 1.6.0 2451 | dev: true 2452 | 2453 | /nanoid@3.3.6: 2454 | resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==} 2455 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 2456 | hasBin: true 2457 | 2458 | /next-mdx-remote@4.3.0(react-dom@18.2.0)(react@18.2.0): 2459 | resolution: {integrity: sha512-fbxkY03pM2Wx5bDNTVKpYD5Hx3QVZGH+6xDtVIxlxXz4HTifP1yI2DrkDvxXbTz0SYGIbluRMIW81IOOa8pigA==} 2460 | engines: {node: '>=14', npm: '>=7'} 2461 | peerDependencies: 2462 | react: '>=16.x <=18.x' 2463 | react-dom: '>=16.x <=18.x' 2464 | dependencies: 2465 | '@mdx-js/mdx': 2.3.0 2466 | '@mdx-js/react': 2.3.0(react@18.2.0) 2467 | react: 18.2.0 2468 | react-dom: 18.2.0(react@18.2.0) 2469 | vfile: 5.3.6 2470 | vfile-matter: 3.0.1 2471 | transitivePeerDependencies: 2472 | - supports-color 2473 | dev: false 2474 | 2475 | /next-seo@6.1.0(next@13.0.6)(react-dom@18.2.0)(react@18.2.0): 2476 | resolution: {integrity: sha512-iMBpFoJsR5zWhguHJvsoBDxDSmdYTHtnVPB1ij+CD0NReQCP78ZxxbdL9qkKIf4oEuZEqZkrjAQLB0bkII7RYA==} 2477 | peerDependencies: 2478 | next: ^8.1.1-canary.54 || >=9.0.0 2479 | react: '>=16.0.0' 2480 | react-dom: '>=16.0.0' 2481 | dependencies: 2482 | next: 13.0.6(react-dom@18.2.0)(react@18.2.0) 2483 | react: 18.2.0 2484 | react-dom: 18.2.0(react@18.2.0) 2485 | dev: false 2486 | 2487 | /next-themes@0.2.1(next@13.0.6)(react-dom@18.2.0)(react@18.2.0): 2488 | resolution: {integrity: sha512-B+AKNfYNIzh0vqQQKqQItTS8evEouKD7H5Hj3kmuPERwddR2TxvDSFZuTj6T7Jfn1oyeUyJMydPl1Bkxkh0W7A==} 2489 | peerDependencies: 2490 | next: '*' 2491 | react: '*' 2492 | react-dom: '*' 2493 | dependencies: 2494 | next: 13.0.6(react-dom@18.2.0)(react@18.2.0) 2495 | react: 18.2.0 2496 | react-dom: 18.2.0(react@18.2.0) 2497 | dev: false 2498 | 2499 | /next@13.0.6(react-dom@18.2.0)(react@18.2.0): 2500 | resolution: {integrity: sha512-COvigvms2LRt1rrzfBQcMQ2GZd86Mvk1z+LOLY5pniFtL4VrTmhZ9salrbKfSiXbhsD01TrDdD68ec3ABDyscA==} 2501 | engines: {node: '>=14.6.0'} 2502 | hasBin: true 2503 | peerDependencies: 2504 | fibers: '>= 3.1.0' 2505 | node-sass: ^6.0.0 || ^7.0.0 2506 | react: ^18.2.0 2507 | react-dom: ^18.2.0 2508 | sass: ^1.3.0 2509 | peerDependenciesMeta: 2510 | fibers: 2511 | optional: true 2512 | node-sass: 2513 | optional: true 2514 | sass: 2515 | optional: true 2516 | dependencies: 2517 | '@next/env': 13.0.6 2518 | '@swc/helpers': 0.4.14 2519 | caniuse-lite: 1.0.30001435 2520 | postcss: 8.4.14 2521 | react: 18.2.0 2522 | react-dom: 18.2.0(react@18.2.0) 2523 | styled-jsx: 5.1.0(react@18.2.0) 2524 | optionalDependencies: 2525 | '@next/swc-android-arm-eabi': 13.0.6 2526 | '@next/swc-android-arm64': 13.0.6 2527 | '@next/swc-darwin-arm64': 13.0.6 2528 | '@next/swc-darwin-x64': 13.0.6 2529 | '@next/swc-freebsd-x64': 13.0.6 2530 | '@next/swc-linux-arm-gnueabihf': 13.0.6 2531 | '@next/swc-linux-arm64-gnu': 13.0.6 2532 | '@next/swc-linux-arm64-musl': 13.0.6 2533 | '@next/swc-linux-x64-gnu': 13.0.6 2534 | '@next/swc-linux-x64-musl': 13.0.6 2535 | '@next/swc-win32-arm64-msvc': 13.0.6 2536 | '@next/swc-win32-ia32-msvc': 13.0.6 2537 | '@next/swc-win32-x64-msvc': 13.0.6 2538 | transitivePeerDependencies: 2539 | - '@babel/core' 2540 | - babel-plugin-macros 2541 | dev: false 2542 | 2543 | /nextra-theme-docs@2.12.3(next@13.0.6)(nextra@2.12.3)(react-dom@18.2.0)(react@18.2.0): 2544 | resolution: {integrity: sha512-aZywZwokk/h5HrUTh/bsU981Sd2prZks7ci+HNG9wuMnm+drp3PBmRKIuQxBCiJurePVBJ2Qk2/wTV3VECGKnA==} 2545 | peerDependencies: 2546 | next: '>=9.5.3' 2547 | nextra: 2.12.3 2548 | react: '>=16.13.1' 2549 | react-dom: '>=16.13.1' 2550 | dependencies: 2551 | '@headlessui/react': 1.7.10(react-dom@18.2.0)(react@18.2.0) 2552 | '@popperjs/core': 2.11.6 2553 | clsx: 2.0.0 2554 | escape-string-regexp: 5.0.0 2555 | flexsearch: 0.7.31 2556 | focus-visible: 5.2.0 2557 | git-url-parse: 13.1.0 2558 | intersection-observer: 0.12.2 2559 | match-sorter: 6.3.1 2560 | next: 13.0.6(react-dom@18.2.0)(react@18.2.0) 2561 | next-seo: 6.1.0(next@13.0.6)(react-dom@18.2.0)(react@18.2.0) 2562 | next-themes: 0.2.1(next@13.0.6)(react-dom@18.2.0)(react@18.2.0) 2563 | nextra: 2.12.3(next@13.0.6)(react-dom@18.2.0)(react@18.2.0) 2564 | react: 18.2.0 2565 | react-dom: 18.2.0(react@18.2.0) 2566 | scroll-into-view-if-needed: 3.0.4 2567 | zod: 3.22.2 2568 | dev: false 2569 | 2570 | /nextra@2.12.3(next@13.0.6)(react-dom@18.2.0)(react@18.2.0): 2571 | resolution: {integrity: sha512-0d8wXpGAccFpMFZuxnlnN56MIZj+AWGYXW3Xk6ByXyr0Mb+B/C/0aGZV5YrBex0V1wEqMGQl4LLAJI+AfCbSXg==} 2572 | engines: {node: '>=16'} 2573 | peerDependencies: 2574 | next: '>=9.5.3' 2575 | react: '>=16.13.1' 2576 | react-dom: '>=16.13.1' 2577 | dependencies: 2578 | '@headlessui/react': 1.7.10(react-dom@18.2.0)(react@18.2.0) 2579 | '@mdx-js/mdx': 2.3.0 2580 | '@mdx-js/react': 2.3.0(react@18.2.0) 2581 | '@napi-rs/simple-git': 0.1.9 2582 | '@theguild/remark-mermaid': 0.0.4(react@18.2.0) 2583 | '@theguild/remark-npm2yarn': 0.1.1 2584 | clsx: 2.0.0 2585 | github-slugger: 2.0.0 2586 | graceful-fs: 4.2.11 2587 | gray-matter: 4.0.3 2588 | katex: 0.16.8 2589 | lodash.get: 4.4.2 2590 | next: 13.0.6(react-dom@18.2.0)(react@18.2.0) 2591 | next-mdx-remote: 4.3.0(react-dom@18.2.0)(react@18.2.0) 2592 | p-limit: 3.1.0 2593 | react: 18.2.0 2594 | react-dom: 18.2.0(react@18.2.0) 2595 | rehype-katex: 6.0.3 2596 | rehype-pretty-code: 0.9.11(shiki@0.14.4) 2597 | rehype-raw: 7.0.0 2598 | remark-gfm: 3.0.1 2599 | remark-math: 5.1.1 2600 | remark-reading-time: 2.0.1 2601 | shiki: 0.14.4 2602 | slash: 3.0.0 2603 | title: 3.5.3 2604 | unist-util-remove: 4.0.0 2605 | unist-util-visit: 5.0.0 2606 | zod: 3.22.2 2607 | transitivePeerDependencies: 2608 | - supports-color 2609 | dev: false 2610 | 2611 | /node-releases@2.0.13: 2612 | resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} 2613 | dev: true 2614 | 2615 | /non-layered-tidy-tree-layout@2.0.2: 2616 | resolution: {integrity: sha512-gkXMxRzUH+PB0ax9dUN0yYF0S25BqeAYqhgMaLUFmpXLEk7Fcu8f4emJuOAY0V8kjDICxROIKsTAKsV/v355xw==} 2617 | dev: false 2618 | 2619 | /normalize-path@3.0.0: 2620 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 2621 | engines: {node: '>=0.10.0'} 2622 | dev: true 2623 | 2624 | /normalize-range@0.1.2: 2625 | resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} 2626 | engines: {node: '>=0.10.0'} 2627 | dev: true 2628 | 2629 | /npm-run-path@2.0.2: 2630 | resolution: {integrity: sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==} 2631 | engines: {node: '>=4'} 2632 | dependencies: 2633 | path-key: 2.0.1 2634 | dev: false 2635 | 2636 | /npm-to-yarn@2.1.0: 2637 | resolution: {integrity: sha512-2C1IgJLdJngq1bSER7K7CGFszRr9s2rijEwvENPEgI0eK9xlD3tNwDc0UJnRj7FIT2aydWm72jB88uVswAhXHA==} 2638 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 2639 | dev: false 2640 | 2641 | /object-assign@4.1.1: 2642 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} 2643 | engines: {node: '>=0.10.0'} 2644 | dev: true 2645 | 2646 | /object-hash@3.0.0: 2647 | resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} 2648 | engines: {node: '>= 6'} 2649 | dev: true 2650 | 2651 | /once@1.4.0: 2652 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 2653 | dependencies: 2654 | wrappy: 1.0.2 2655 | dev: true 2656 | 2657 | /p-finally@1.0.0: 2658 | resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} 2659 | engines: {node: '>=4'} 2660 | dev: false 2661 | 2662 | /p-limit@3.1.0: 2663 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 2664 | engines: {node: '>=10'} 2665 | dependencies: 2666 | yocto-queue: 0.1.0 2667 | dev: false 2668 | 2669 | /parse-entities@4.0.0: 2670 | resolution: {integrity: sha512-5nk9Fn03x3rEhGaX1FU6IDwG/k+GxLXlFAkgrbM1asuAFl3BhdQWvASaIsmwWypRNcZKHPYnIuOSfIWEyEQnPQ==} 2671 | dependencies: 2672 | '@types/unist': 2.0.6 2673 | character-entities: 2.0.2 2674 | character-entities-legacy: 3.0.0 2675 | character-reference-invalid: 2.0.1 2676 | decode-named-character-reference: 1.0.2 2677 | is-alphanumerical: 2.0.1 2678 | is-decimal: 2.0.1 2679 | is-hexadecimal: 2.0.1 2680 | dev: false 2681 | 2682 | /parse-numeric-range@1.3.0: 2683 | resolution: {integrity: sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==} 2684 | dev: false 2685 | 2686 | /parse-path@7.0.0: 2687 | resolution: {integrity: sha512-Euf9GG8WT9CdqwuWJGdf3RkUcTBArppHABkO7Lm8IzRQp0e2r/kkFnmhu4TSK30Wcu5rVAZLmfPKSBBi9tWFog==} 2688 | dependencies: 2689 | protocols: 2.0.1 2690 | dev: false 2691 | 2692 | /parse-url@8.1.0: 2693 | resolution: {integrity: sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w==} 2694 | dependencies: 2695 | parse-path: 7.0.0 2696 | dev: false 2697 | 2698 | /parse5@7.1.2: 2699 | resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} 2700 | dependencies: 2701 | entities: 4.5.0 2702 | dev: false 2703 | 2704 | /path-is-absolute@1.0.1: 2705 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 2706 | engines: {node: '>=0.10.0'} 2707 | dev: true 2708 | 2709 | /path-key@2.0.1: 2710 | resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} 2711 | engines: {node: '>=4'} 2712 | dev: false 2713 | 2714 | /path-parse@1.0.7: 2715 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 2716 | dev: true 2717 | 2718 | /periscopic@3.0.4: 2719 | resolution: {integrity: sha512-SFx68DxCv0Iyo6APZuw/AKewkkThGwssmU0QWtTlvov3VAtPX+QJ4CadwSaz8nrT5jPIuxdvJWB4PnD2KNDxQg==} 2720 | dependencies: 2721 | estree-walker: 3.0.1 2722 | is-reference: 3.0.0 2723 | dev: false 2724 | 2725 | /picocolors@1.0.0: 2726 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 2727 | 2728 | /picomatch@2.3.1: 2729 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 2730 | engines: {node: '>=8.6'} 2731 | dev: true 2732 | 2733 | /pify@2.3.0: 2734 | resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} 2735 | engines: {node: '>=0.10.0'} 2736 | dev: true 2737 | 2738 | /pirates@4.0.6: 2739 | resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} 2740 | engines: {node: '>= 6'} 2741 | dev: true 2742 | 2743 | /postcss-import@15.1.0(postcss@8.4.30): 2744 | resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} 2745 | engines: {node: '>=14.0.0'} 2746 | peerDependencies: 2747 | postcss: ^8.0.0 2748 | dependencies: 2749 | postcss: 8.4.30 2750 | postcss-value-parser: 4.2.0 2751 | read-cache: 1.0.0 2752 | resolve: 1.22.6 2753 | dev: true 2754 | 2755 | /postcss-js@4.0.1(postcss@8.4.30): 2756 | resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} 2757 | engines: {node: ^12 || ^14 || >= 16} 2758 | peerDependencies: 2759 | postcss: ^8.4.21 2760 | dependencies: 2761 | camelcase-css: 2.0.1 2762 | postcss: 8.4.30 2763 | dev: true 2764 | 2765 | /postcss-load-config@4.0.1(postcss@8.4.30): 2766 | resolution: {integrity: sha512-vEJIc8RdiBRu3oRAI0ymerOn+7rPuMvRXslTvZUKZonDHFIczxztIyJ1urxM1x9JXEikvpWWTUUqal5j/8QgvA==} 2767 | engines: {node: '>= 14'} 2768 | peerDependencies: 2769 | postcss: '>=8.0.9' 2770 | ts-node: '>=9.0.0' 2771 | peerDependenciesMeta: 2772 | postcss: 2773 | optional: true 2774 | ts-node: 2775 | optional: true 2776 | dependencies: 2777 | lilconfig: 2.1.0 2778 | postcss: 8.4.30 2779 | yaml: 2.3.2 2780 | dev: true 2781 | 2782 | /postcss-nested@6.0.1(postcss@8.4.30): 2783 | resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} 2784 | engines: {node: '>=12.0'} 2785 | peerDependencies: 2786 | postcss: ^8.2.14 2787 | dependencies: 2788 | postcss: 8.4.30 2789 | postcss-selector-parser: 6.0.13 2790 | dev: true 2791 | 2792 | /postcss-selector-parser@6.0.13: 2793 | resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==} 2794 | engines: {node: '>=4'} 2795 | dependencies: 2796 | cssesc: 3.0.0 2797 | util-deprecate: 1.0.2 2798 | dev: true 2799 | 2800 | /postcss-value-parser@4.2.0: 2801 | resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} 2802 | dev: true 2803 | 2804 | /postcss@8.4.14: 2805 | resolution: {integrity: sha512-E398TUmfAYFPBSdzgeieK2Y1+1cpdxJx8yXbK/m57nRhKSmk1GB2tO4lbLBtlkfPQTDKfe4Xqv1ASWPpayPEig==} 2806 | engines: {node: ^10 || ^12 || >=14} 2807 | dependencies: 2808 | nanoid: 3.3.6 2809 | picocolors: 1.0.0 2810 | source-map-js: 1.0.2 2811 | dev: false 2812 | 2813 | /postcss@8.4.30: 2814 | resolution: {integrity: sha512-7ZEao1g4kd68l97aWG/etQKPKq07us0ieSZ2TnFDk11i0ZfDW2AwKHYU8qv4MZKqN2fdBfg+7q0ES06UA73C1g==} 2815 | engines: {node: ^10 || ^12 || >=14} 2816 | dependencies: 2817 | nanoid: 3.3.6 2818 | picocolors: 1.0.0 2819 | source-map-js: 1.0.2 2820 | dev: true 2821 | 2822 | /property-information@6.2.0: 2823 | resolution: {integrity: sha512-kma4U7AFCTwpqq5twzC1YVIDXSqg6qQK6JN0smOw8fgRy1OkMi0CYSzFmsy6dnqSenamAtj0CyXMUJ1Mf6oROg==} 2824 | dev: false 2825 | 2826 | /protocols@2.0.1: 2827 | resolution: {integrity: sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==} 2828 | dev: false 2829 | 2830 | /pseudomap@1.0.2: 2831 | resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} 2832 | dev: false 2833 | 2834 | /queue-microtask@1.2.3: 2835 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 2836 | dev: true 2837 | 2838 | /react-dom@18.2.0(react@18.2.0): 2839 | resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} 2840 | peerDependencies: 2841 | react: ^18.2.0 2842 | dependencies: 2843 | loose-envify: 1.4.0 2844 | react: 18.2.0 2845 | scheduler: 0.23.0 2846 | dev: false 2847 | 2848 | /react@18.2.0: 2849 | resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} 2850 | engines: {node: '>=0.10.0'} 2851 | dependencies: 2852 | loose-envify: 1.4.0 2853 | dev: false 2854 | 2855 | /read-cache@1.0.0: 2856 | resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} 2857 | dependencies: 2858 | pify: 2.3.0 2859 | dev: true 2860 | 2861 | /readdirp@3.6.0: 2862 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} 2863 | engines: {node: '>=8.10.0'} 2864 | dependencies: 2865 | picomatch: 2.3.1 2866 | dev: true 2867 | 2868 | /reading-time@1.5.0: 2869 | resolution: {integrity: sha512-onYyVhBNr4CmAxFsKS7bz+uTLRakypIe4R+5A824vBSkQy/hB3fZepoVEf8OVAxzLvK+H/jm9TzpI3ETSm64Kg==} 2870 | dev: false 2871 | 2872 | /regenerator-runtime@0.13.11: 2873 | resolution: {integrity: sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==} 2874 | dev: false 2875 | 2876 | /rehype-katex@6.0.3: 2877 | resolution: {integrity: sha512-ByZlRwRUcWegNbF70CVRm2h/7xy7jQ3R9LaY4VVSvjnoVWwWVhNL60DiZsBpC5tSzYQOCvDbzncIpIjPZWodZA==} 2878 | dependencies: 2879 | '@types/hast': 2.3.4 2880 | '@types/katex': 0.14.0 2881 | hast-util-from-html-isomorphic: 1.0.0 2882 | hast-util-to-text: 3.1.2 2883 | katex: 0.16.8 2884 | unist-util-visit: 4.1.1 2885 | dev: false 2886 | 2887 | /rehype-pretty-code@0.9.11(shiki@0.14.4): 2888 | resolution: {integrity: sha512-Eq90eCYXQJISktfRZ8PPtwc5SUyH6fJcxS8XOMnHPUQZBtC6RYo67gGlley9X2nR8vlniPj0/7oCDEYHKQa/oA==} 2889 | engines: {node: '>=16'} 2890 | peerDependencies: 2891 | shiki: '*' 2892 | dependencies: 2893 | '@types/hast': 2.3.4 2894 | hash-obj: 4.0.0 2895 | parse-numeric-range: 1.3.0 2896 | shiki: 0.14.4 2897 | dev: false 2898 | 2899 | /rehype-raw@7.0.0: 2900 | resolution: {integrity: sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==} 2901 | dependencies: 2902 | '@types/hast': 3.0.1 2903 | hast-util-raw: 9.0.1 2904 | vfile: 6.0.1 2905 | dev: false 2906 | 2907 | /remark-gfm@3.0.1: 2908 | resolution: {integrity: sha512-lEFDoi2PICJyNrACFOfDD3JlLkuSbOa5Wd8EPt06HUdptv8Gn0bxYTdbU/XXQ3swAPkEaGxxPN9cbnMHvVu1Ig==} 2909 | dependencies: 2910 | '@types/mdast': 3.0.10 2911 | mdast-util-gfm: 2.0.1 2912 | micromark-extension-gfm: 2.0.1 2913 | unified: 10.1.2 2914 | transitivePeerDependencies: 2915 | - supports-color 2916 | dev: false 2917 | 2918 | /remark-math@5.1.1: 2919 | resolution: {integrity: sha512-cE5T2R/xLVtfFI4cCePtiRn+e6jKMtFDR3P8V3qpv8wpKjwvHoBA4eJzvX+nVrnlNy0911bdGmuspCSwetfYHw==} 2920 | dependencies: 2921 | '@types/mdast': 3.0.10 2922 | mdast-util-math: 2.0.2 2923 | micromark-extension-math: 2.0.2 2924 | unified: 10.1.2 2925 | dev: false 2926 | 2927 | /remark-mdx@2.1.5: 2928 | resolution: {integrity: sha512-A8vw5s+BgOa968Irt8BO7DfWJTE0Fe7Ge3hX8zzDB1DnwMZTNdK6qF2IcFao+/7nzk1vSysKcFp+3ku4vhMpaQ==} 2929 | dependencies: 2930 | mdast-util-mdx: 2.0.0 2931 | micromark-extension-mdxjs: 1.0.0 2932 | transitivePeerDependencies: 2933 | - supports-color 2934 | dev: false 2935 | 2936 | /remark-parse@10.0.1: 2937 | resolution: {integrity: sha512-1fUyHr2jLsVOkhbvPRBJ5zTKZZyD6yZzYaWCS6BPBdQ8vEMBCH+9zNCDA6tET/zHCi/jLqjCWtlJZUPk+DbnFw==} 2938 | dependencies: 2939 | '@types/mdast': 3.0.10 2940 | mdast-util-from-markdown: 1.3.1 2941 | unified: 10.1.2 2942 | transitivePeerDependencies: 2943 | - supports-color 2944 | dev: false 2945 | 2946 | /remark-reading-time@2.0.1: 2947 | resolution: {integrity: sha512-fy4BKy9SRhtYbEHvp6AItbRTnrhiDGbqLQTSYVbQPGuRCncU1ubSsh9p/W5QZSxtYcUXv8KGL0xBgPLyNJA1xw==} 2948 | dependencies: 2949 | estree-util-is-identifier-name: 2.0.1 2950 | estree-util-value-to-estree: 1.3.0 2951 | reading-time: 1.5.0 2952 | unist-util-visit: 3.1.0 2953 | dev: false 2954 | 2955 | /remark-rehype@10.1.0: 2956 | resolution: {integrity: sha512-EFmR5zppdBp0WQeDVZ/b66CWJipB2q2VLNFMabzDSGR66Z2fQii83G5gTBbgGEnEEA0QRussvrFHxk1HWGJskw==} 2957 | dependencies: 2958 | '@types/hast': 2.3.4 2959 | '@types/mdast': 3.0.10 2960 | mdast-util-to-hast: 12.2.4 2961 | unified: 10.1.2 2962 | dev: false 2963 | 2964 | /remove-accents@0.4.2: 2965 | resolution: {integrity: sha512-7pXIJqJOq5tFgG1A2Zxti3Ht8jJF337m4sowbuHsW30ZnkQFnDzy9qBNhgzX8ZLW4+UBcXiiR7SwR6pokHsxiA==} 2966 | dev: false 2967 | 2968 | /resolve@1.22.6: 2969 | resolution: {integrity: sha512-njhxM7mV12JfufShqGy3Rz8j11RPdLy4xi15UurGJeoHLfJpVXKdh3ueuOqbYUcDZnffr6X739JBo5LzyahEsw==} 2970 | hasBin: true 2971 | dependencies: 2972 | is-core-module: 2.13.0 2973 | path-parse: 1.0.7 2974 | supports-preserve-symlinks-flag: 1.0.0 2975 | dev: true 2976 | 2977 | /reusify@1.0.4: 2978 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 2979 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 2980 | dev: true 2981 | 2982 | /robust-predicates@3.0.2: 2983 | resolution: {integrity: sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==} 2984 | dev: false 2985 | 2986 | /run-parallel@1.2.0: 2987 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 2988 | dependencies: 2989 | queue-microtask: 1.2.3 2990 | dev: true 2991 | 2992 | /rw@1.3.3: 2993 | resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==} 2994 | dev: false 2995 | 2996 | /sade@1.8.1: 2997 | resolution: {integrity: sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==} 2998 | engines: {node: '>=6'} 2999 | dependencies: 3000 | mri: 1.2.0 3001 | dev: false 3002 | 3003 | /safer-buffer@2.1.2: 3004 | resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} 3005 | dev: false 3006 | 3007 | /scheduler@0.23.0: 3008 | resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} 3009 | dependencies: 3010 | loose-envify: 1.4.0 3011 | dev: false 3012 | 3013 | /scroll-into-view-if-needed@3.0.4: 3014 | resolution: {integrity: sha512-s+/F50jwTOUt+u5oEIAzum9MN2lUQNvWBe/zfEsVQcbaERjGkKLq1s+2wCHkahMLC8nMLbzMVKivx9JhunXaZg==} 3015 | dependencies: 3016 | compute-scroll-into-view: 2.0.4 3017 | dev: false 3018 | 3019 | /section-matter@1.0.0: 3020 | resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==} 3021 | engines: {node: '>=4'} 3022 | dependencies: 3023 | extend-shallow: 2.0.1 3024 | kind-of: 6.0.3 3025 | dev: false 3026 | 3027 | /shebang-command@1.2.0: 3028 | resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} 3029 | engines: {node: '>=0.10.0'} 3030 | dependencies: 3031 | shebang-regex: 1.0.0 3032 | dev: false 3033 | 3034 | /shebang-regex@1.0.0: 3035 | resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} 3036 | engines: {node: '>=0.10.0'} 3037 | dev: false 3038 | 3039 | /shiki@0.14.4: 3040 | resolution: {integrity: sha512-IXCRip2IQzKwxArNNq1S+On4KPML3Yyn8Zzs/xRgcgOWIr8ntIK3IKzjFPfjy/7kt9ZMjc+FItfqHRBg8b6tNQ==} 3041 | dependencies: 3042 | ansi-sequence-parser: 1.1.1 3043 | jsonc-parser: 3.2.0 3044 | vscode-oniguruma: 1.7.0 3045 | vscode-textmate: 8.0.0 3046 | dev: false 3047 | 3048 | /signal-exit@3.0.7: 3049 | resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} 3050 | dev: false 3051 | 3052 | /slash@3.0.0: 3053 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} 3054 | engines: {node: '>=8'} 3055 | dev: false 3056 | 3057 | /sort-keys@5.0.0: 3058 | resolution: {integrity: sha512-Pdz01AvCAottHTPQGzndktFNdbRA75BgOfeT1hH+AMnJFv8lynkPi42rfeEhpx1saTEI3YNMWxfqu0sFD1G8pw==} 3059 | engines: {node: '>=12'} 3060 | dependencies: 3061 | is-plain-obj: 4.1.0 3062 | dev: false 3063 | 3064 | /source-map-js@1.0.2: 3065 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==} 3066 | engines: {node: '>=0.10.0'} 3067 | 3068 | /source-map@0.7.4: 3069 | resolution: {integrity: sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==} 3070 | engines: {node: '>= 8'} 3071 | dev: false 3072 | 3073 | /space-separated-tokens@2.0.2: 3074 | resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} 3075 | dev: false 3076 | 3077 | /sprintf-js@1.0.3: 3078 | resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} 3079 | dev: false 3080 | 3081 | /stringify-entities@4.0.3: 3082 | resolution: {integrity: sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g==} 3083 | dependencies: 3084 | character-entities-html4: 2.1.0 3085 | character-entities-legacy: 3.0.0 3086 | dev: false 3087 | 3088 | /strip-bom-string@1.0.0: 3089 | resolution: {integrity: sha512-uCC2VHvQRYu+lMh4My/sFNmF2klFymLX1wHJeXnbEJERpV/ZsVuonzerjfrGpIGF7LBVa1O7i9kjiWvJiFck8g==} 3090 | engines: {node: '>=0.10.0'} 3091 | dev: false 3092 | 3093 | /strip-eof@1.0.0: 3094 | resolution: {integrity: sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==} 3095 | engines: {node: '>=0.10.0'} 3096 | dev: false 3097 | 3098 | /style-to-object@0.3.0: 3099 | resolution: {integrity: sha512-CzFnRRXhzWIdItT3OmF8SQfWyahHhjq3HwcMNCNLn+N7klOOqPjMeG/4JSu77D7ypZdGvSzvkrbyeTMizz2VrA==} 3100 | dependencies: 3101 | inline-style-parser: 0.1.1 3102 | dev: false 3103 | 3104 | /styled-jsx@5.1.0(react@18.2.0): 3105 | resolution: {integrity: sha512-/iHaRJt9U7T+5tp6TRelLnqBqiaIT0HsO0+vgyj8hK2KUk7aejFqRrumqPUlAqDwAj8IbS/1hk3IhBAAK/FCUQ==} 3106 | engines: {node: '>= 12.0.0'} 3107 | peerDependencies: 3108 | '@babel/core': '*' 3109 | babel-plugin-macros: '*' 3110 | react: '>= 16.8.0 || 17.x.x || ^18.0.0-0' 3111 | peerDependenciesMeta: 3112 | '@babel/core': 3113 | optional: true 3114 | babel-plugin-macros: 3115 | optional: true 3116 | dependencies: 3117 | client-only: 0.0.1 3118 | react: 18.2.0 3119 | dev: false 3120 | 3121 | /stylis@4.3.0: 3122 | resolution: {integrity: sha512-E87pIogpwUsUwXw7dNyU4QDjdgVMy52m+XEOPEKUn161cCzWjjhPSQhByfd1CcNvrOLnXQ6OnnZDwnJrz/Z4YQ==} 3123 | dev: false 3124 | 3125 | /sucrase@3.34.0: 3126 | resolution: {integrity: sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==} 3127 | engines: {node: '>=8'} 3128 | hasBin: true 3129 | dependencies: 3130 | '@jridgewell/gen-mapping': 0.3.3 3131 | commander: 4.1.1 3132 | glob: 7.1.6 3133 | lines-and-columns: 1.2.4 3134 | mz: 2.7.0 3135 | pirates: 4.0.6 3136 | ts-interface-checker: 0.1.13 3137 | dev: true 3138 | 3139 | /supports-color@4.5.0: 3140 | resolution: {integrity: sha512-ycQR/UbvI9xIlEdQT1TQqwoXtEldExbCEAJgRo5YXlmSKjv6ThHnP9/vwGa1gr19Gfw+LkFd7KqYMhzrRC5JYw==} 3141 | engines: {node: '>=4'} 3142 | dependencies: 3143 | has-flag: 2.0.0 3144 | dev: false 3145 | 3146 | /supports-preserve-symlinks-flag@1.0.0: 3147 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 3148 | engines: {node: '>= 0.4'} 3149 | dev: true 3150 | 3151 | /tailwindcss@3.3.3: 3152 | resolution: {integrity: sha512-A0KgSkef7eE4Mf+nKJ83i75TMyq8HqY3qmFIJSWy8bNt0v1lG7jUcpGpoTFxAwYcWOphcTBLPPJg+bDfhDf52w==} 3153 | engines: {node: '>=14.0.0'} 3154 | hasBin: true 3155 | dependencies: 3156 | '@alloc/quick-lru': 5.2.0 3157 | arg: 5.0.2 3158 | chokidar: 3.5.3 3159 | didyoumean: 1.2.2 3160 | dlv: 1.1.3 3161 | fast-glob: 3.3.1 3162 | glob-parent: 6.0.2 3163 | is-glob: 4.0.3 3164 | jiti: 1.20.0 3165 | lilconfig: 2.1.0 3166 | micromatch: 4.0.5 3167 | normalize-path: 3.0.0 3168 | object-hash: 3.0.0 3169 | picocolors: 1.0.0 3170 | postcss: 8.4.30 3171 | postcss-import: 15.1.0(postcss@8.4.30) 3172 | postcss-js: 4.0.1(postcss@8.4.30) 3173 | postcss-load-config: 4.0.1(postcss@8.4.30) 3174 | postcss-nested: 6.0.1(postcss@8.4.30) 3175 | postcss-selector-parser: 6.0.13 3176 | resolve: 1.22.6 3177 | sucrase: 3.34.0 3178 | transitivePeerDependencies: 3179 | - ts-node 3180 | dev: true 3181 | 3182 | /thenify-all@1.6.0: 3183 | resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} 3184 | engines: {node: '>=0.8'} 3185 | dependencies: 3186 | thenify: 3.3.1 3187 | dev: true 3188 | 3189 | /thenify@3.3.1: 3190 | resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} 3191 | dependencies: 3192 | any-promise: 1.3.0 3193 | dev: true 3194 | 3195 | /title@3.5.3: 3196 | resolution: {integrity: sha512-20JyowYglSEeCvZv3EZ0nZ046vLarO37prvV0mbtQV7C8DJPGgN967r8SJkqd3XK3K3lD3/Iyfp3avjfil8Q2Q==} 3197 | hasBin: true 3198 | dependencies: 3199 | arg: 1.0.0 3200 | chalk: 2.3.0 3201 | clipboardy: 1.2.2 3202 | titleize: 1.0.0 3203 | dev: false 3204 | 3205 | /titleize@1.0.0: 3206 | resolution: {integrity: sha512-TARUb7z1pGvlLxgPk++7wJ6aycXF3GJ0sNSBTAsTuJrQG5QuZlkUQP+zl+nbjAh4gMX9yDw9ZYklMd7vAfJKEw==} 3207 | engines: {node: '>=0.10.0'} 3208 | dev: false 3209 | 3210 | /to-regex-range@5.0.1: 3211 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 3212 | engines: {node: '>=8.0'} 3213 | dependencies: 3214 | is-number: 7.0.0 3215 | dev: true 3216 | 3217 | /trim-lines@3.0.1: 3218 | resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} 3219 | dev: false 3220 | 3221 | /trough@2.1.0: 3222 | resolution: {integrity: sha512-AqTiAOLcj85xS7vQ8QkAV41hPDIJ71XJB4RCUrzo/1GM2CQwhkJGaf9Hgr7BOugMRpgGUrqRg/DrBDl4H40+8g==} 3223 | dev: false 3224 | 3225 | /ts-dedent@2.2.0: 3226 | resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==} 3227 | engines: {node: '>=6.10'} 3228 | dev: false 3229 | 3230 | /ts-interface-checker@0.1.13: 3231 | resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} 3232 | dev: true 3233 | 3234 | /tslib@2.4.1: 3235 | resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==} 3236 | dev: false 3237 | 3238 | /type-fest@1.4.0: 3239 | resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} 3240 | engines: {node: '>=10'} 3241 | dev: false 3242 | 3243 | /typescript@4.9.3: 3244 | resolution: {integrity: sha512-CIfGzTelbKNEnLpLdGFgdyKhG23CKdKgQPOBc+OUNrkJ2vr+KSzsSV5kq5iWhEQbok+quxgGzrAtGWCyU7tHnA==} 3245 | engines: {node: '>=4.2.0'} 3246 | hasBin: true 3247 | dev: true 3248 | 3249 | /unified@10.1.2: 3250 | resolution: {integrity: sha512-pUSWAi/RAnVy1Pif2kAoeWNBa3JVrx0MId2LASj8G+7AiHWoKZNTomq6LG326T68U7/e263X6fTdcXIy7XnF7Q==} 3251 | dependencies: 3252 | '@types/unist': 2.0.6 3253 | bail: 2.0.2 3254 | extend: 3.0.2 3255 | is-buffer: 2.0.5 3256 | is-plain-obj: 4.1.0 3257 | trough: 2.1.0 3258 | vfile: 5.3.6 3259 | dev: false 3260 | 3261 | /unist-builder@3.0.0: 3262 | resolution: {integrity: sha512-GFxmfEAa0vi9i5sd0R2kcrI9ks0r82NasRq5QHh2ysGngrc6GiqD5CDf1FjPenY4vApmFASBIIlk/jj5J5YbmQ==} 3263 | dependencies: 3264 | '@types/unist': 2.0.6 3265 | dev: false 3266 | 3267 | /unist-util-find-after@4.0.1: 3268 | resolution: {integrity: sha512-QO/PuPMm2ERxC6vFXEPtmAutOopy5PknD+Oq64gGwxKtk4xwo9Z97t9Av1obPmGU0IyTa6EKYUfTrK2QJS3Ozw==} 3269 | dependencies: 3270 | '@types/unist': 2.0.6 3271 | unist-util-is: 5.1.1 3272 | dev: false 3273 | 3274 | /unist-util-generated@2.0.0: 3275 | resolution: {integrity: sha512-TiWE6DVtVe7Ye2QxOVW9kqybs6cZexNwTwSMVgkfjEReqy/xwGpAXb99OxktoWwmL+Z+Epb0Dn8/GNDYP1wnUw==} 3276 | dev: false 3277 | 3278 | /unist-util-is@5.1.1: 3279 | resolution: {integrity: sha512-F5CZ68eYzuSvJjGhCLPL3cYx45IxkqXSetCcRgUXtbcm50X2L9oOWQlfUfDdAf+6Pd27YDblBfdtmsThXmwpbQ==} 3280 | dev: false 3281 | 3282 | /unist-util-is@6.0.0: 3283 | resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} 3284 | dependencies: 3285 | '@types/unist': 3.0.0 3286 | dev: false 3287 | 3288 | /unist-util-position-from-estree@1.1.1: 3289 | resolution: {integrity: sha512-xtoY50b5+7IH8tFbkw64gisG9tMSpxDjhX9TmaJJae/XuxQ9R/Kc8Nv1eOsf43Gt4KV/LkriMy9mptDr7XLcaw==} 3290 | dependencies: 3291 | '@types/unist': 2.0.6 3292 | dev: false 3293 | 3294 | /unist-util-position@4.0.3: 3295 | resolution: {integrity: sha512-p/5EMGIa1qwbXjA+QgcBXaPWjSnZfQ2Sc3yBEEfgPwsEmJd8Qh+DSk3LGnmOM4S1bY2C0AjmMnB8RuEYxpPwXQ==} 3296 | dependencies: 3297 | '@types/unist': 2.0.6 3298 | dev: false 3299 | 3300 | /unist-util-position@5.0.0: 3301 | resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} 3302 | dependencies: 3303 | '@types/unist': 3.0.0 3304 | dev: false 3305 | 3306 | /unist-util-remove-position@4.0.1: 3307 | resolution: {integrity: sha512-0yDkppiIhDlPrfHELgB+NLQD5mfjup3a8UYclHruTJWmY74je8g+CIFr79x5f6AkmzSwlvKLbs63hC0meOMowQ==} 3308 | dependencies: 3309 | '@types/unist': 2.0.6 3310 | unist-util-visit: 4.1.1 3311 | dev: false 3312 | 3313 | /unist-util-remove@4.0.0: 3314 | resolution: {integrity: sha512-b4gokeGId57UVRX/eVKej5gXqGlc9+trkORhFJpu9raqZkZhU0zm8Doi05+HaiBsMEIJowL+2WtQ5ItjsngPXg==} 3315 | dependencies: 3316 | '@types/unist': 3.0.0 3317 | unist-util-is: 6.0.0 3318 | unist-util-visit-parents: 6.0.1 3319 | dev: false 3320 | 3321 | /unist-util-stringify-position@3.0.2: 3322 | resolution: {integrity: sha512-7A6eiDCs9UtjcwZOcCpM4aPII3bAAGv13E96IkawkOAW0OhH+yRxtY0lzo8KiHpzEMfH7Q+FizUmwp8Iqy5EWg==} 3323 | dependencies: 3324 | '@types/unist': 2.0.6 3325 | dev: false 3326 | 3327 | /unist-util-stringify-position@4.0.0: 3328 | resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} 3329 | dependencies: 3330 | '@types/unist': 3.0.0 3331 | dev: false 3332 | 3333 | /unist-util-visit-parents@4.1.1: 3334 | resolution: {integrity: sha512-1xAFJXAKpnnJl8G7K5KgU7FY55y3GcLIXqkzUj5QF/QVP7biUm0K0O2oqVkYsdjzJKifYeWn9+o6piAK2hGSHw==} 3335 | dependencies: 3336 | '@types/unist': 2.0.6 3337 | unist-util-is: 5.1.1 3338 | dev: false 3339 | 3340 | /unist-util-visit-parents@5.1.1: 3341 | resolution: {integrity: sha512-gks4baapT/kNRaWxuGkl5BIhoanZo7sC/cUT/JToSRNL1dYoXRFl75d++NkjYk4TAu2uv2Px+l8guMajogeuiw==} 3342 | dependencies: 3343 | '@types/unist': 2.0.6 3344 | unist-util-is: 5.1.1 3345 | dev: false 3346 | 3347 | /unist-util-visit-parents@6.0.1: 3348 | resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} 3349 | dependencies: 3350 | '@types/unist': 3.0.0 3351 | unist-util-is: 6.0.0 3352 | dev: false 3353 | 3354 | /unist-util-visit@3.1.0: 3355 | resolution: {integrity: sha512-Szoh+R/Ll68QWAyQyZZpQzZQm2UPbxibDvaY8Xc9SUtYgPsDzx5AWSk++UUt2hJuow8mvwR+rG+LQLw+KsuAKA==} 3356 | dependencies: 3357 | '@types/unist': 2.0.6 3358 | unist-util-is: 5.1.1 3359 | unist-util-visit-parents: 4.1.1 3360 | dev: false 3361 | 3362 | /unist-util-visit@4.1.1: 3363 | resolution: {integrity: sha512-n9KN3WV9k4h1DxYR1LoajgN93wpEi/7ZplVe02IoB4gH5ctI1AaF2670BLHQYbwj+pY83gFtyeySFiyMHJklrg==} 3364 | dependencies: 3365 | '@types/unist': 2.0.6 3366 | unist-util-is: 5.1.1 3367 | unist-util-visit-parents: 5.1.1 3368 | dev: false 3369 | 3370 | /unist-util-visit@5.0.0: 3371 | resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} 3372 | dependencies: 3373 | '@types/unist': 3.0.0 3374 | unist-util-is: 6.0.0 3375 | unist-util-visit-parents: 6.0.1 3376 | dev: false 3377 | 3378 | /update-browserslist-db@1.0.13(browserslist@4.21.11): 3379 | resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==} 3380 | hasBin: true 3381 | peerDependencies: 3382 | browserslist: '>= 4.21.0' 3383 | dependencies: 3384 | browserslist: 4.21.11 3385 | escalade: 3.1.1 3386 | picocolors: 1.0.0 3387 | dev: true 3388 | 3389 | /use-sync-external-store@1.2.0(react@18.2.0): 3390 | resolution: {integrity: sha512-eEgnFxGQ1Ife9bzYs6VLi8/4X6CObHMw9Qr9tPY43iKwsPw8xE8+EFsf/2cFZ5S3esXgpWgtSCtLNS41F+sKPA==} 3391 | peerDependencies: 3392 | react: ^16.8.0 || ^17.0.0 || ^18.0.0 3393 | dependencies: 3394 | react: 18.2.0 3395 | dev: false 3396 | 3397 | /util-deprecate@1.0.2: 3398 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} 3399 | dev: true 3400 | 3401 | /uuid@9.0.1: 3402 | resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} 3403 | hasBin: true 3404 | dev: false 3405 | 3406 | /uvu@0.5.6: 3407 | resolution: {integrity: sha512-+g8ENReyr8YsOc6fv/NVJs2vFdHBnBNdfE49rshrTzDWOlUx4Gq7KOS2GD8eqhy2j+Ejq29+SbKH8yjkAqXqoA==} 3408 | engines: {node: '>=8'} 3409 | hasBin: true 3410 | dependencies: 3411 | dequal: 2.0.3 3412 | diff: 5.1.0 3413 | kleur: 4.1.5 3414 | sade: 1.8.1 3415 | dev: false 3416 | 3417 | /vfile-location@4.0.1: 3418 | resolution: {integrity: sha512-JDxPlTbZrZCQXogGheBHjbRWjESSPEak770XwWPfw5mTc1v1nWGLB/apzZxsx8a0SJVfF8HK8ql8RD308vXRUw==} 3419 | dependencies: 3420 | '@types/unist': 2.0.6 3421 | vfile: 5.3.6 3422 | dev: false 3423 | 3424 | /vfile-location@5.0.2: 3425 | resolution: {integrity: sha512-NXPYyxyBSH7zB5U6+3uDdd6Nybz6o6/od9rk8bp9H8GR3L+cm/fC0uUTbqBmUTnMCUDslAGBOIKNfvvb+gGlDg==} 3426 | dependencies: 3427 | '@types/unist': 3.0.0 3428 | vfile: 6.0.1 3429 | dev: false 3430 | 3431 | /vfile-matter@3.0.1: 3432 | resolution: {integrity: sha512-CAAIDwnh6ZdtrqAuxdElUqQRQDQgbbIrYtDYI8gCjXS1qQ+1XdLoK8FIZWxJwn0/I+BkSSZpar3SOgjemQz4fg==} 3433 | dependencies: 3434 | '@types/js-yaml': 4.0.5 3435 | is-buffer: 2.0.5 3436 | js-yaml: 4.1.0 3437 | dev: false 3438 | 3439 | /vfile-message@3.1.3: 3440 | resolution: {integrity: sha512-0yaU+rj2gKAyEk12ffdSbBfjnnj+b1zqTBv3OQCTn8yEB02bsPizwdBPrLJjHnK+cU9EMMcUnNv938XcZIkmdA==} 3441 | dependencies: 3442 | '@types/unist': 2.0.6 3443 | unist-util-stringify-position: 3.0.2 3444 | dev: false 3445 | 3446 | /vfile-message@4.0.2: 3447 | resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} 3448 | dependencies: 3449 | '@types/unist': 3.0.0 3450 | unist-util-stringify-position: 4.0.0 3451 | dev: false 3452 | 3453 | /vfile@5.3.6: 3454 | resolution: {integrity: sha512-ADBsmerdGBs2WYckrLBEmuETSPyTD4TuLxTrw0DvjirxW1ra4ZwkbzG8ndsv3Q57smvHxo677MHaQrY9yxH8cA==} 3455 | dependencies: 3456 | '@types/unist': 2.0.6 3457 | is-buffer: 2.0.5 3458 | unist-util-stringify-position: 3.0.2 3459 | vfile-message: 3.1.3 3460 | dev: false 3461 | 3462 | /vfile@6.0.1: 3463 | resolution: {integrity: sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==} 3464 | dependencies: 3465 | '@types/unist': 3.0.0 3466 | unist-util-stringify-position: 4.0.0 3467 | vfile-message: 4.0.2 3468 | dev: false 3469 | 3470 | /vscode-oniguruma@1.7.0: 3471 | resolution: {integrity: sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==} 3472 | dev: false 3473 | 3474 | /vscode-textmate@8.0.0: 3475 | resolution: {integrity: sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==} 3476 | dev: false 3477 | 3478 | /web-namespaces@2.0.1: 3479 | resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} 3480 | dev: false 3481 | 3482 | /web-worker@1.2.0: 3483 | resolution: {integrity: sha512-PgF341avzqyx60neE9DD+XS26MMNMoUQRz9NOZwW32nPQrF6p77f1htcnjBSEV8BGMKZ16choqUG4hyI0Hx7mA==} 3484 | dev: false 3485 | 3486 | /which@1.3.1: 3487 | resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} 3488 | hasBin: true 3489 | dependencies: 3490 | isexe: 2.0.0 3491 | dev: false 3492 | 3493 | /wrappy@1.0.2: 3494 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 3495 | dev: true 3496 | 3497 | /yallist@2.1.2: 3498 | resolution: {integrity: sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==} 3499 | dev: false 3500 | 3501 | /yaml@2.3.2: 3502 | resolution: {integrity: sha512-N/lyzTPaJasoDmfV7YTrYCI0G/3ivm/9wdG0aHuheKowWQwGTsK0Eoiw6utmzAnI6pkJa0DUVygvp3spqqEKXg==} 3503 | engines: {node: '>= 14'} 3504 | dev: true 3505 | 3506 | /yocto-queue@0.1.0: 3507 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 3508 | engines: {node: '>=10'} 3509 | dev: false 3510 | 3511 | /zod@3.22.2: 3512 | resolution: {integrity: sha512-wvWkphh5WQsJbVk1tbx1l1Ly4yg+XecD+Mq280uBGt9wa5BKSWf4Mhp6GmrkPixhMxmabYY7RbzlwVP32pbGCg==} 3513 | dev: false 3514 | 3515 | /zustand@4.4.1(react@18.2.0): 3516 | resolution: {integrity: sha512-QCPfstAS4EBiTQzlaGP1gmorkh/UL1Leaj2tdj+zZCZ/9bm0WS7sI2wnfD5lpOszFqWJ1DcPnGoY8RDL61uokw==} 3517 | engines: {node: '>=12.7.0'} 3518 | peerDependencies: 3519 | '@types/react': '>=16.8' 3520 | immer: '>=9.0' 3521 | react: '>=16.8' 3522 | peerDependenciesMeta: 3523 | '@types/react': 3524 | optional: true 3525 | immer: 3526 | optional: true 3527 | react: 3528 | optional: true 3529 | dependencies: 3530 | react: 18.2.0 3531 | use-sync-external-store: 1.2.0(react@18.2.0) 3532 | dev: false 3533 | 3534 | /zwitch@2.0.4: 3535 | resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} 3536 | dev: false 3537 | -------------------------------------------------------------------------------- /docs/postcss.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | plugins: { 3 | tailwindcss: {}, 4 | autoprefixer: {}, 5 | }, 6 | } 7 | -------------------------------------------------------------------------------- /docs/styles/globals.css: -------------------------------------------------------------------------------- 1 | @tailwind base; 2 | @tailwind components; 3 | @tailwind utilities; -------------------------------------------------------------------------------- /docs/tailwind.config.js: -------------------------------------------------------------------------------- 1 | /** @type {import('tailwindcss').Config} */ 2 | module.exports = { 3 | content: [ 4 | './pages/**/*.{js,jsx,ts,tsx,md,mdx}', 5 | './components/**/*.{js,jsx,ts,tsx,md,mdx}', 6 | ], 7 | plugins: [], 8 | theme: { 9 | extend: {} 10 | } 11 | } -------------------------------------------------------------------------------- /docs/theme.config.tsx: -------------------------------------------------------------------------------- 1 | import { useRouter } from 'next/router' 2 | import { DocsThemeConfig } from 'nextra-theme-docs' 3 | import React from 'react' 4 | 5 | const config: DocsThemeConfig = { 6 | docsRepositoryBase: 'https://github.com/mcnaveen/cart/tree/main/docs', 7 | footer: { 8 | text: '$npm install cart', 9 | }, 10 | logo: Cart, 11 | project: { 12 | link: 'https://github.com/mcnaveen/cart', 13 | }, 14 | useNextSeoProps() { 15 | const { asPath } = useRouter() 16 | if (asPath !== '/') { 17 | return { 18 | titleTemplate: '%s – Cart' 19 | } 20 | } 21 | }, 22 | head: ( 23 | <> 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | ) 42 | } 43 | 44 | export default config 45 | -------------------------------------------------------------------------------- /docs/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es5", 4 | "lib": ["dom", "dom.iterable", "esnext"], 5 | "allowJs": true, 6 | "skipLibCheck": true, 7 | "strict": false, 8 | "forceConsistentCasingInFileNames": true, 9 | "noEmit": true, 10 | "incremental": true, 11 | "esModuleInterop": true, 12 | "module": "esnext", 13 | "moduleResolution": "node", 14 | "resolveJsonModule": true, 15 | "isolatedModules": true, 16 | "jsx": "preserve" 17 | }, 18 | "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx"], 19 | "exclude": ["node_modules"] 20 | } 21 | -------------------------------------------------------------------------------- /image/cover.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/7angle/cart/93ca3e1e073db7c0c3bcce672113eefbc149bfcb/image/cover.png -------------------------------------------------------------------------------- /knip.jsonc: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://unpkg.com/knip@latest/schema.json", 3 | "entry": ["src/index.ts!"], 4 | "ignoreExportsUsedInFile": { "interface": true, "type": true }, 5 | "project": ["src/**/*.ts!"] 6 | } 7 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "cart", 3 | "version": "1.1.2", 4 | "description": "Headless cart management library", 5 | "keywords": [ 6 | "cart", 7 | "headless-cart", 8 | "cart-management", 9 | "react-cart" 10 | ], 11 | "repository": { 12 | "type": "git", 13 | "url": "https://github.com/mcnaveen/cart" 14 | }, 15 | "license": "MIT", 16 | "author": { 17 | "name": "mcnaveen", 18 | "email": "me@mcnaveen.com" 19 | }, 20 | "type": "module", 21 | "main": "./lib/index.js", 22 | "files": [ 23 | "lib/", 24 | "package.json", 25 | "LICENSE.md", 26 | "README.md" 27 | ], 28 | "scripts": { 29 | "build": "tsup", 30 | "format": "prettier \"**/*\" --ignore-unknown", 31 | "format:write": "pnpm format --write", 32 | "lint": "eslint . .*js --max-warnings 0 --report-unused-disable-directives", 33 | "lint:knip": "knip", 34 | "lint:md": "markdownlint \"**/*.md\" \".github/**/*.md\" --rules sentences-per-line", 35 | "lint:package-json": "npmPkgJsonLint .", 36 | "lint:packages": "pnpm dedupe --check", 37 | "lint:spelling": "cspell \"**\" \".github/**/*\"", 38 | "prepare": "husky install", 39 | "should-semantic-release": "should-semantic-release --verbose", 40 | "test": "vitest", 41 | "tsc": "tsc" 42 | }, 43 | "lint-staged": { 44 | "*": "prettier --ignore-unknown --write" 45 | }, 46 | "dependencies": { 47 | "@react-native-async-storage/async-storage": "^1.19.3", 48 | "zustand": "^4.4.1" 49 | }, 50 | "devDependencies": { 51 | "@release-it/conventional-changelog": "^7.0.2", 52 | "@types/eslint": "^8.44.2", 53 | "@types/react": "^18.2.22", 54 | "@typescript-eslint/eslint-plugin": "^6.7.2", 55 | "@typescript-eslint/parser": "^6.7.2", 56 | "@vitest/coverage-v8": "^0.34.5", 57 | "console-fail-test": "^0.2.3", 58 | "cspell": "^7.3.6", 59 | "eslint": "^8.49.0", 60 | "eslint-plugin-deprecation": "^2.0.0", 61 | "eslint-plugin-eslint-comments": "^3.2.0", 62 | "eslint-plugin-jsdoc": "^46.8.2", 63 | "eslint-plugin-jsonc": "^2.9.0", 64 | "eslint-plugin-markdown": "^3.0.1", 65 | "eslint-plugin-n": "^16.1.0", 66 | "eslint-plugin-no-only-tests": "^3.1.0", 67 | "eslint-plugin-perfectionist": "^2.1.0", 68 | "eslint-plugin-regexp": "^1.15.0", 69 | "eslint-plugin-vitest": "^0.3.1", 70 | "eslint-plugin-yml": "^1.9.0", 71 | "husky": "^8.0.3", 72 | "jsonc-eslint-parser": "^2.3.0", 73 | "knip": "^2.25.2", 74 | "lint-staged": "^14.0.1", 75 | "markdownlint": "^0.31.1", 76 | "markdownlint-cli": "^0.37.0", 77 | "npm-package-json-lint": "^7.0.0", 78 | "npm-package-json-lint-config-default": "^6.0.0", 79 | "prettier": "^3.0.3", 80 | "prettier-plugin-curly": "^0.1.3", 81 | "prettier-plugin-packagejson": "^2.4.5", 82 | "release-it": "^16.1.5", 83 | "sentences-per-line": "^0.2.1", 84 | "should-semantic-release": "^0.1.1", 85 | "tsup": "^7.2.0", 86 | "typescript": "^5.2.2", 87 | "vitest": "^0.34.5", 88 | "yaml-eslint-parser": "^1.2.2" 89 | }, 90 | "peerDependencies": { 91 | "react": "16.x || 17.x || 18.x" 92 | }, 93 | "packageManager": "pnpm@8.7.0", 94 | "engines": { 95 | "node": ">=16" 96 | }, 97 | "publishConfig": { 98 | "provenance": true 99 | } 100 | } 101 | -------------------------------------------------------------------------------- /src/cart.ts: -------------------------------------------------------------------------------- 1 | import AsyncStorage from '@react-native-async-storage/async-storage'; 2 | import { useEffect, useState } from "react"; 3 | import { create } from "zustand"; 4 | import { StateStorage, createJSONStorage, persist } from "zustand/middleware"; 5 | 6 | // check if we are in the browser and set storage type accordingly 7 | const isBrowser = typeof window.document !== 'undefined'; 8 | const storageType = isBrowser ? localStorage : AsyncStorage; 9 | 10 | interface CartItems { 11 | cartQuantity?: number; 12 | imagesrc?: string; 13 | inStock?: boolean; 14 | name: string; 15 | price?: number; 16 | productId: number | string | undefined; 17 | quantity: number; 18 | } 19 | 20 | interface CartState { 21 | /** 22 | * Adds an item to the shopping cart or updates its quantity if already in the cart. 23 | * 24 | * Example: 25 | * ```js 26 | * addToCart({ productId: 'product1', name: 'Product 1', price: 20 }); 27 | * ``` 28 | * @param {CartItems} item - The item to be added or updated in the cart. 29 | */ 30 | addToCart?: (item: CartItems) => void; 31 | 32 | /** 33 | * Array of Items in the Cart. 34 | */ 35 | cartItems?: CartItems[]; 36 | 37 | /** 38 | * Clears all items from the shopping cart. 39 | */ 40 | clearCart?: () => void; 41 | 42 | /** 43 | * Set cart open state to `false`. 44 | */ 45 | closeCart?: () => void; 46 | 47 | /** 48 | * Decreases the quantity of an item in the shopping cart or removes it if the quantity becomes zero. 49 | * 50 | * Example: 51 | * ```js 52 | * decreaseItem('product1', 1); 53 | * ``` 54 | * @param {string} productId - The ID of the product to decrease the quantity of. 55 | * @param {number} [quantity=1] - The quantity to decrease. Defaults to 1. 56 | */ 57 | decreaseItem?: (productId: string, quantity?: number) => void; 58 | 59 | /** 60 | * Indicates whether the cart is open or not. 61 | */ 62 | isCartOpen?: boolean; 63 | 64 | /** 65 | * Set cart open state to `true`. 66 | */ 67 | openCart?: () => void; 68 | 69 | /** 70 | * Removes an item from the shopping cart. 71 | * 72 | * Example: 73 | * ```js 74 | * removeFromCart('product1'); 75 | * ``` 76 | * @param {string} productId - The ID of the product to remove from the cart. 77 | */ 78 | removeFromCart?: (productId: string) => void; 79 | 80 | /** 81 | * Toggles the visibility of the shopping cart. 82 | */ 83 | toggleCart?: () => void; 84 | } 85 | 86 | /** 87 | * Sets the name of the cart store for persistence. 88 | * @param name - The name to be used for persistence. 89 | */ 90 | const setCartStoreName = (name: string) => { 91 | useCart.persist.setOptions({ 92 | name: name, 93 | }); 94 | }; 95 | 96 | /** 97 | * A higher-order function for server-side rendering (SSR) with Zustand state management. 98 | * @template T - The type of the state. 99 | * @template F - The type of the result returned by the callback. 100 | * @param store - A function that performs server-side state setup. 101 | * @param callback - A function that computes a result based on the state. 102 | * @returns The result of the callback function, or undefined if not available. 103 | */ 104 | const withSSR = ( 105 | store: (callback: (state: T) => unknown) => unknown, 106 | callback: (state: T) => F, 107 | ) => { 108 | const result = store(callback) as F; 109 | const [data, setData] = useState(); 110 | 111 | useEffect(() => { 112 | setData(result); 113 | }, [result]); 114 | 115 | return data; 116 | }; 117 | 118 | /** 119 | * Sets the type of storage for the cart store's persistence. 120 | * @param [storage] - The type of storage to be used for persistence (e.g., localStorage or sessionStorage). Defaults to localStorage if not provided. 121 | */ 122 | const setCartStoreType = (storage: StateStorage = localStorage) => { 123 | useCart.persist.setOptions({ 124 | storage: createJSONStorage(() => storage), 125 | }); 126 | }; 127 | 128 | /** 129 | * Custom hook for managing the shopping cart state. 130 | * @returns {CartState} The cart state object. 131 | */ 132 | const useCart = create()( 133 | persist( 134 | (set) => ({ 135 | addToCart: (item: CartItems) => { 136 | set((state) => { 137 | // Ensure cartItems is not undefined, or initialize it as an empty array 138 | const cartItems = state.cartItems ?? []; 139 | 140 | // Check if the item is already in the cart 141 | const itemInCart = cartItems.find( 142 | (i) => i.productId === item.productId, 143 | ); 144 | 145 | // If the item is in the cart, update its quantity 146 | if (itemInCart) { 147 | return { 148 | cartItems: cartItems.map((i) => { 149 | if (i.productId === item.productId) { 150 | return { ...i, quantity: i.quantity + 1 }; 151 | } 152 | 153 | return i; 154 | }), 155 | }; 156 | } else { 157 | // If the item is not in the cart, add it with a quantity of 1 158 | return { 159 | cartItems: [...cartItems, { ...item, quantity: 1 }], 160 | }; 161 | } 162 | }); 163 | }, 164 | cartItems: [], 165 | clearCart: () => { 166 | set({ cartItems: [] }); 167 | }, 168 | closeCart: () => { 169 | set({ isCartOpen: false }); 170 | }, 171 | decreaseItem: (productId, quantity) => { 172 | set((state) => { 173 | if (quantity === undefined) { 174 | // If quantity is not provided, remove the entire product from the cart 175 | return { 176 | cartItems: state.cartItems?.filter( 177 | (item) => item.productId !== productId, 178 | ), 179 | }; 180 | } 181 | 182 | // Update the quantity of the product in the cart 183 | const updatedCartItems = state.cartItems 184 | ?.map((item) => { 185 | if (item.productId === productId) { 186 | const newQuantity = item.quantity - quantity; 187 | if (newQuantity <= 0) { 188 | // Remove the item from the cart if the new quantity is zero or negative 189 | return null; 190 | } 191 | 192 | return { ...item, quantity: newQuantity }; 193 | } 194 | 195 | return item; 196 | }) 197 | .filter(Boolean) as CartItems[]; // Filter out null values and cast back to CartItem[] 198 | 199 | return { cartItems: updatedCartItems }; 200 | }); 201 | }, 202 | isCartOpen: false, 203 | openCart: () => { 204 | set({ isCartOpen: true }); 205 | }, 206 | removeFromCart: (productId) => { 207 | set((state) => ({ 208 | cartItems: state.cartItems?.filter( 209 | (item) => item.productId !== productId, 210 | ), 211 | })); 212 | }, 213 | toggleCart: () => { 214 | set((state) => ({ isCartOpen: !state.isCartOpen })); 215 | }, 216 | }), 217 | { 218 | name: "cart", 219 | storage: createJSONStorage(() => storageType as StateStorage), 220 | }, 221 | ), 222 | ); 223 | 224 | export { 225 | CartItems, 226 | CartState, 227 | setCartStoreName, 228 | setCartStoreType, 229 | useCart, 230 | withSSR, 231 | }; 232 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./cart.js"; 2 | -------------------------------------------------------------------------------- /tsconfig.eslint.json: -------------------------------------------------------------------------------- 1 | { "extends": "./tsconfig.json", "include": ["."] } 2 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "declaration": true, 4 | "declarationMap": true, 5 | "esModuleInterop": true, 6 | "module": "NodeNext", 7 | "moduleResolution": "NodeNext", 8 | "outDir": "lib", 9 | "resolveJsonModule": true, 10 | "skipLibCheck": true, 11 | "sourceMap": true, 12 | "strict": true, 13 | "target": "ES2022" 14 | }, 15 | "include": ["src"] 16 | } 17 | -------------------------------------------------------------------------------- /tsup.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from "tsup"; 2 | 3 | export default defineConfig({ 4 | bundle: false, 5 | clean: true, 6 | dts: true, 7 | entry: ["src/**/*.ts", "!src/**/*.test.*"], 8 | format: "esm", 9 | outDir: "lib", 10 | sourcemap: true, 11 | }); 12 | -------------------------------------------------------------------------------- /vitest.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from "vitest/config"; 2 | 3 | export default defineConfig({ 4 | test: { 5 | clearMocks: true, 6 | coverage: { 7 | all: true, 8 | exclude: ["lib"], 9 | include: ["src"], 10 | reporter: ["html", "lcov"], 11 | }, 12 | exclude: ["lib", "node_modules"], 13 | setupFiles: ["console-fail-test/setup"], 14 | }, 15 | }); 16 | --------------------------------------------------------------------------------