From f86301db4a2e49b54d63cec328c05d0e0e23b1d7 Mon Sep 17 00:00:00 2001 From: Michael Young Date: Wed, 26 Feb 2025 14:23:33 -0500 Subject: [PATCH 1/3] New Smithy Landing Page (#2) * landing page scaffolding * add base shadcn components and font * add simple navigation, primarily to test exporting the html snippet * enable static site generation for landing page and nav bar snippet * add card with gradient border * add smithy color palette * add storybook and stories * add story for top navigation * add svg spider connections * work on making svg connections easier to use * better svg implementations * updated svgs, ran prettier, proof of concept of core design elements * add service example and full diagram * add i18n support * add support for an svg wheel * support i18n in storybook * add simple test checking that the app can build * fix gradient collision * add section and pop gradient ui elements * example outline based on prelim design * mlp * update doc build process for landing page * add favicons and clean up public * switch to arial * implement a11y and i18n improvements * add non-cookie tracking scripts * add logo attributions * fix svg bug with scroll position * Bump version to 1.52.1 * Lower UnboundTestOperation to WARNING Consumers of this package using the `includeServices` transform may not also be running `removeUnusedShapes`, leaving behind operations that then trip this validation and cause an error. Lowering this to a warning still emits a message but doesn't block consumers until we find a better strategy for running this validation at Smithy-only build time. * Improve member target diff checks for maps This commit updates the ChangedMemberTarget diff evaluator to properly check changes to map keys and values the same way it checks changes to list members. * Update NullAndEmptyHeadersServer tests (#2433) The test now align with the similar tests for clients. They expect empty headers to be serialized as "" and null headers to not be serialized * Return Builders instead of SmithyBuilders This commit updates all instances where a generic SmithyBuilder<> was returned to return the specific implementing Builder. This means users of these methods can easily use the Builder's functionality without using a cast. * Use lowercase headers for prefix-header test HTTP headers are case-insensitive so using casing in prefix header tests adds unnecessary challenges when implementing rest-xml and rest-json protocol tests. Many HTTP implementations lowercase header names to make them case-insensitive (e.g., Go), and it's even a requirement of h2 (https://www.rfc-editor.org/rfc/rfc7540#section-8.1.2). This commit updates httpPrefixHeaders tests to use lowercase header names to avoid any kind of header casing issues when implementing these tests. * Add delimiter and reusable to arn trait This commit adds two fields to the aws.api#arn trait: * resourceDelimiter - used to define the delimiter for resource segments of absolute ARN templates. * reusable - indicates whether an ARN may be reused for different instances of a resource. * Fix for tagsProperty in CFN schema creation This value is expected to be a JSON pointer to a property, not just the name of the property. See: https://github.com/aws-cloudformation/cloudformation-cli/blob/master/src/rpdk/core/data/schema/provider.definition.schema.v1.json#L193-L197 * Use the correct CBOR type for blobs in RPCv2 CBOR protocol tests * Warn for service missing tagEnabled * Inject tagging operation permissions for CFN This commit updates the CFN resource schema generation to fill in the permissions field of the tagging configuration for resources. The AwsTagIndex is used to find the APIs and their relevant required actions to invoke. This also refactors the Tagging updates into a single Mapper so the updates aren't strewn about the general CfnConverter. * Defer scrubTraitDefinitions for JsonSchema * Add config for inline JSON Schema maps This commit adds the useInlineMaps setting to allow users to configure JSON Schema conversion to inline converted map shapes instead of creating references. * Add validator for xmlFlattened + xmlName (#2439) Adds a validator for the xmlFlattened trait that checks if the member's target is a list that has a member with xmlName, and that xmlName doesn't match the name of the xmlFlattened member. xmlFlattened causes the xmlName of the list member to be ignored. This is called out in our docs: https://smithy.io/2.0/spec/protocol-traits.html#flattened-list-serialization, but we were missing a validator for it. It is a warning because you might mean to do this, i.e. if the list is used in multiple places. I also added some suppressions to our protocol tests that are testing the behavior for models that would trip up this validator. * Downgrade noisy log statement in CreateDedicatedInputAndOutput transformer (#2451) * Infer defined condition key service This commit relaxes the pattern on the @defineConditionKeys trait's keys to enable inferring the service to be the service's arnNamespace. * Add pagination flattening transform (#2454) Adds a transform that flattens service-level pagination info into pagination traits on operations. * Fix broken README link Fixes #2456 * Fix typo in event stream content-type * Add transforms to remove deprecated shapes (#2452) Adds two transforms to smithy-model and directed codegen that allow users to filter out deprecated shapes by version and/or date. * Expand usage of title trait (#2461) Expands the usage of the `@title` trait to allow application to any non-member shape. * Add round-trip convertibility of resource schemas (#2445) * Converting existing gradle DSL from groovy to kotlin. (#2453) * Converting existing gradle DSL from groovy to kotlin. ** Why is this needed ? ** This is the first step in moving to a more consistent and composable experience for gradle configuration in the smithy repository. Writing it in kotlin to make it more expressive as compared to groovy. This commit just converts the existing gradle build from groovy to kotlin. ** Next steps: ** Once this change is merged, few other PRs will follow to introduce nice features such as `buildSrc` plugins to enhance configurability of how each sub project builds in this package. It will introduce flexibility in things such as allowing each subproject to compile with different JVM toolchain, and much more. * Converting extensions to extras. Other changes addressing comments. * Update IDL serializer to write metadata to a separate file to avoid duplication of data * Add transform to mark required idempotency tokens client optional (#2466) Add transform to make required `@idempotencyToken` members `@clientOptional` so that they can be left empty and injected. --------- Co-authored-by: Kevin Stich Co-authored-by: Michael Dowling * Update blob defaults for protocol tests (#2467) Updates blob defaults in protocol tests to use valid Base64 strings. Also updates the associated default documentation to make this requirement clear. * Bump version to 1.53.0 (#2465) * Add a tool to create and render changelog entries Writing changelog entries is not super fun. Writing them after the fact, especially when you didn't write the original feature, is even less fun. And merge conflicts because of synchronizing a changelog file are SUPER not-fun. This change solves those problems. It introduces a changelog tool similar to what many of the SDK teams use (and indeed cribs some code from them). > Why? Using distinct files for changelog entries solves a major problem: merge conflicts. These are horribly annoying to deal with during development, especially on a file that is essentially documentation and semantically has no reason to ever conflict. This problem is less bad for Smithy itself than it is for SDKs that have daily releases, but it's a problem for us too with our relatively large team. > What's different? This differs from what other SDKs do in a few ways. Firstly, and most notably, we aren't deriving a version number from these. We could! It would not be hard! But I elected not to do that in this PR since it's not as big a problem for us. We also have a habit of linking the PRs for all of our changes in the changelog. This is actually kinda annoying because it creates a bit of a chicken-egg scenario. This is why I added the github action to automatically add it. If the action is annoying we can always get rid of it and just stop relying on the links. But that would be a shame. Mechanically there's also a change in that I used modern python to write this, and updated any borrowed code to also be modern python. > Why not use jmeslog? jmeslog is a standalone tool derived from the python team's changelog tool (which started it all). It is essentially exactly what they do and want, but there's a few things that prevent us from using it. Notably, we need the current date and pr links. jmeslog doesn't have that and doesn't currently allow for easy extension in that way. It also has things we don't necessarily want, like a category. That's really mostly used in the sdks to indicate changes made for a particular service. With hundreds of services, that's an issue worthy of calling out. But smithy itself doesn't need it. But also, it's a dependency, and it has dependencies. I'd rather not have dependencies if I can avoid it. And what we need is ultimately not that complex. And doing it ourselves gives us some flexibility. > Why not derive changelogs from commits? The audience for changelogs and the audience for commit messages are two separate (though sometimes intersecting) audiences. Commits may contain conext about technical junk that only mattters to people working on the code itself. There is also not necessarily a 1-1 relationship between a changelog entry and a commit. Large features are often broken up into logical commits that make reviewing and code diving easier, but aren't important to the changelog. You might also have commits that make changes unimportant to the changelog audience, such as formatting changes or changes to CI configurations. Commits are also, critically, ***immutable***. Did you make a typo in your commit? Now it's preserved forever in your changelog. With JSON files, you can just change them. Those changes are now part of the commit record! Also, on a more subjective level, have you seen repos that have semantic commits? They're ugly. Having more than half your commits starting with `chore` just makes it look like your project is in maintenance mode and/or like you hate your job. And if you're following best practices for commit messages, that's eating into your 50 character limit for the title. > Any unfortunate bits? There's no line wrapping, so you better believe the changelog is gonna have some long lines. It doesn't really matter though, because it'll all be natural when you're seeing it fully rendered. The line boundary thing these days mostly helps with readability when you're editing a file, but you will never manually edit the file. > What's next? Provided this goes through, the next step will be to backfill all the current changelog entries. That'll certainly be a task. A github action to create the version bump pr would be sweet. We'd need to add the ability to derive a version number from the feature list, which isn't hard. Then the script could just aslo perform the version bump by writing that one file. Then it could be just a button press away in github. Maybe as a fully automated release? * Add GitHub action to validate staged changelogs This adds a GitHub action that checks for staged changelogs. If they aren't present, it posts a reminder comment to add them. It does *not* fail the build because there are valid cases where a changelog is not desired. If there are changelog entries present, it ensures that they have a pull request associated with them. If they don't, it posts a pr comment with a change suggestion that adds it in. It still does not fail the build because maybe there's a reason not to add it. * Revert "Add GitHub action to validate staged changelogs" (#2475) This reverts commit 50fa20e649980edf236513cfc8cc173a020e4f14. * fix: Convert blob default values to Base64 (#2474) Convert blob default values to Base64 in awsJson1_0 & restJson1 protocol tests. * Update smithy logo on readme and documentation site (#2478) * Update readme to use non-favicon (#2479) * css tweaks * updated section wording * updates from review * remove unnecessary code --------- Co-authored-by: Kevin Stich Co-authored-by: Landon James Co-authored-by: Michael Dowling Co-authored-by: Richard Hernandez Co-authored-by: Miles Ziemer <45497130+milesziemer@users.noreply.github.com> Co-authored-by: Hunter Mellema <124718352+hpmellema@users.noreply.github.com> Co-authored-by: Hayden Baker Co-authored-by: Yash Mewada <128434488+yasmewad@users.noreply.github.com> Co-authored-by: Hunter Mellema Co-authored-by: Michael Dowling Co-authored-by: Jordon Phillips Co-authored-by: Josh Elkins --- docs/Makefile | 9 +- docs/README.md | 5 +- docs/landing-page/.gitignore | 27 + docs/landing-page/.husky/pre-commit | 2 + docs/landing-page/.prettierrc.json | 1 + docs/landing-page/.storybook/main.ts | 19 + .../landing-page/.storybook/preview-head.html | 5 + docs/landing-page/.storybook/preview.tsx | 32 + docs/landing-page/README.md | 1 + docs/landing-page/components.json | 20 + docs/landing-page/eslint.config.js | 28 + docs/landing-page/index.html | 50 + docs/landing-page/package-lock.json | 9111 +++++++++++++++++ docs/landing-page/package.json | 77 + docs/landing-page/postcss.config.js | 6 + docs/landing-page/public/favicon-180x180.png | Bin 0 -> 1343 bytes docs/landing-page/public/favicon-192x192.png | Bin 0 -> 1460 bytes docs/landing-page/public/favicon-32x32.png | Bin 0 -> 349 bytes docs/landing-page/public/favicon-48-48.png | Bin 0 -> 470 bytes docs/landing-page/public/favicon-512x512.png | Bin 0 -> 4874 bytes docs/landing-page/public/favicon-64x64.png | Bin 0 -> 568 bytes docs/landing-page/public/favicon.ico | Bin 0 -> 238 bytes docs/landing-page/public/favicon.png | Bin 0 -> 238 bytes docs/landing-page/public/icons/dafny.svg | 10 + docs/landing-page/public/icons/dark/GO.svg | 1 + .../public/icons/dark/MSFT_net.svg | 1 + docs/landing-page/public/icons/dark/cPlus.svg | 1 + .../landing-page/public/icons/dark/codify.svg | 1 + .../landing-page/public/icons/dark/evolve.svg | 1 + docs/landing-page/public/icons/dark/java.svg | 1 + .../public/icons/dark/javaScript.svg | 1 + .../landing-page/public/icons/dark/kotlin.svg | 8 + docs/landing-page/public/icons/dark/php.svg | 1 + .../public/icons/dark/protocol.svg | 1 + .../public/icons/dark/pull_quote.svg | 1 + .../landing-page/public/icons/dark/python.svg | 1 + .../public/icons/dark/resource.svg | 1 + docs/landing-page/public/icons/dark/ruby.svg | 1 + docs/landing-page/public/icons/dark/rust.svg | 1 + docs/landing-page/public/icons/dark/scala.svg | 62 + docs/landing-page/public/icons/dark/swift.svg | 1 + docs/landing-page/public/icons/duke.svg | 50 + docs/landing-page/public/icons/go.svg | 60 + docs/landing-page/public/icons/kotlin.svg | 19 + docs/landing-page/public/icons/light/GO.svg | 1 + .../public/icons/light/MSFT_net.svg | 1 + .../landing-page/public/icons/light/cPlus.svg | 1 + .../public/icons/light/codify.svg | 1 + .../public/icons/light/evolve.svg | 1 + docs/landing-page/public/icons/light/java.svg | 1 + .../public/icons/light/javaScript.svg | 1 + docs/landing-page/public/icons/light/php.svg | 1 + .../public/icons/light/protocol.svg | 1 + .../public/icons/light/pull_quote.svg | 1 + .../public/icons/light/python.svg | 1 + .../public/icons/light/resource.svg | 1 + docs/landing-page/public/icons/light/ruby.svg | 1 + docs/landing-page/public/icons/light/rust.svg | 1 + .../landing-page/public/icons/light/swift.svg | 1 + docs/landing-page/public/icons/python.svg | 265 + docs/landing-page/public/icons/ruby.png | Bin 0 -> 196597 bytes docs/landing-page/public/icons/rust.svg | 61 + docs/landing-page/public/icons/scala.svg | 100 + docs/landing-page/public/icons/swift.svg | 22 + docs/landing-page/public/icons/ts.svg | 1 + .../public/locales/en/translation.json | 108 + .../public/logos/smithy_anvil_blk.svg | 1 + .../public/logos/smithy_anvil_red.svg | 1 + .../public/logos/smithy_anvil_wht.svg | 1 + .../public/logos/smithy_flavicon_blk.svg | 1 + .../public/logos/smithy_flavicon_red.svg | 1 + .../public/logos/smithy_flavicon_wht.svg | 1 + .../public/logos/smithy_logo_blk.svg | 1 + .../public/logos/smithy_logo_dk.svg | 1 + .../public/logos/smithy_logo_lt.svg | 1 + .../public/logos/smithy_logo_wht.svg | 1 + docs/landing-page/public/sparks/sparks.svg | 1 + docs/landing-page/scripts/insertRootHtml.tsx | 87 + .../scripts/renderTopNavigation.tsx | 67 + docs/landing-page/src/App.stories.tsx | 16 + docs/landing-page/src/App.tsx | 43 + .../landing-page/Features/index.stories.tsx | 21 + .../landing-page/Features/index.tsx | 56 + .../landing-page/Footer/index.stories.tsx | 16 + .../components/landing-page/Footer/index.tsx | 29 + .../landing-page/Heading/Diagram.tsx | 112 + .../landing-page/Heading/Tagline.tsx | 18 + .../components/landing-page/Heading/index.tsx | 38 + .../InformationCircles/index.stories.tsx | 19 + .../landing-page/InformationCircles/index.tsx | 26 + .../landing-page/Quote/index.stories.tsx | 21 + .../components/landing-page/Quote/index.tsx | 35 + .../landing-page/ServiceExample.tsx | 51 + .../landing-page/SubHeading/index.stories.tsx | 20 + .../landing-page/SubHeading/index.tsx | 78 + .../landing-page/SubHeading/web.stories.tsx | 20 + .../landing-page/SubHeading/web.tsx | 91 + .../src/components/landing-page/index.tsx | 6 + .../useSupportedLanguagesHook.tsx | 91 + .../components/navigation/HamburgerMenu.tsx | 50 + .../src/components/navigation/MenuLinks.tsx | 29 + .../src/components/navigation/index.tsx | 66 + .../navigation/navigation.stories.tsx | 18 + .../src/components/svg/arrow.stories.tsx | 50 + .../landing-page/src/components/svg/arrow.tsx | 108 + .../src/components/svg/line.stories.tsx | 51 + docs/landing-page/src/components/svg/line.tsx | 148 + .../src/components/svg/spider.stories.tsx | 75 + .../src/components/svg/spider.tsx | 99 + docs/landing-page/src/components/svg/svg.tsx | 29 + .../src/components/svg/useResizeObserver.tsx | 29 + .../src/components/svg/wheel.stories.tsx | 113 + .../landing-page/src/components/svg/wheel.tsx | 123 + .../components/ui/CircleSection.stories.tsx | 25 + .../src/components/ui/CircleSection.tsx | 37 + .../src/components/ui/Section.stories.tsx | 36 + .../src/components/ui/Section.tsx | 22 + .../src/components/ui/SmithyGlow.stories.tsx | 29 + .../src/components/ui/SmithyGlow.tsx | 12 + .../ui/SmithyPopGradient.stories.tsx | 33 + .../src/components/ui/SmithyPopGradient.tsx | 23 + .../src/components/ui/brand.stories.tsx | 16 + docs/landing-page/src/components/ui/brand.tsx | 39 + .../src/components/ui/button.stories.tsx | 84 + .../landing-page/src/components/ui/button.tsx | 89 + .../src/components/ui/card.stories.tsx | 60 + docs/landing-page/src/components/ui/card.tsx | 110 + .../src/components/ui/icons.stories.tsx | 39 + docs/landing-page/src/components/ui/icons.tsx | 42 + .../src/components/ui/ide-panel.stories.tsx | 21 + .../src/components/ui/ide-panel.tsx | 19 + .../src/components/ui/navigation-menu.tsx | 128 + docs/landing-page/src/components/ui/sheet.tsx | 137 + docs/landing-page/src/components/ui/sparks.md | 37 + docs/landing-page/src/i18n/client.tsx | 18 + docs/landing-page/src/i18n/index.tsx | 1 + docs/landing-page/src/i18n/ssr.tsx | 22 + docs/landing-page/src/index.css | 91 + docs/landing-page/src/lib/utils.ts | 6 + docs/landing-page/src/main.tsx | 17 + docs/landing-page/src/vite-env.d.ts | 1 + docs/landing-page/tailwind.config.js | 75 + docs/landing-page/tsconfig.app.json | 29 + docs/landing-page/tsconfig.app.tsbuildinfo | 1 + docs/landing-page/tsconfig.json | 17 + docs/landing-page/tsconfig.node.json | 27 + docs/landing-page/tsconfig.node.tsbuildinfo | 1 + docs/landing-page/vite.config.ts | 15 + docs/root/index.html | 3 - 149 files changed, 13504 insertions(+), 7 deletions(-) create mode 100644 docs/landing-page/.gitignore create mode 100644 docs/landing-page/.husky/pre-commit create mode 100644 docs/landing-page/.prettierrc.json create mode 100644 docs/landing-page/.storybook/main.ts create mode 100644 docs/landing-page/.storybook/preview-head.html create mode 100644 docs/landing-page/.storybook/preview.tsx create mode 100644 docs/landing-page/README.md create mode 100644 docs/landing-page/components.json create mode 100644 docs/landing-page/eslint.config.js create mode 100644 docs/landing-page/index.html create mode 100644 docs/landing-page/package-lock.json create mode 100644 docs/landing-page/package.json create mode 100644 docs/landing-page/postcss.config.js create mode 100644 docs/landing-page/public/favicon-180x180.png create mode 100644 docs/landing-page/public/favicon-192x192.png create mode 100644 docs/landing-page/public/favicon-32x32.png create mode 100644 docs/landing-page/public/favicon-48-48.png create mode 100644 docs/landing-page/public/favicon-512x512.png create mode 100644 docs/landing-page/public/favicon-64x64.png create mode 100644 docs/landing-page/public/favicon.ico create mode 100644 docs/landing-page/public/favicon.png create mode 100644 docs/landing-page/public/icons/dafny.svg create mode 100644 docs/landing-page/public/icons/dark/GO.svg create mode 100644 docs/landing-page/public/icons/dark/MSFT_net.svg create mode 100644 docs/landing-page/public/icons/dark/cPlus.svg create mode 100644 docs/landing-page/public/icons/dark/codify.svg create mode 100644 docs/landing-page/public/icons/dark/evolve.svg create mode 100644 docs/landing-page/public/icons/dark/java.svg create mode 100644 docs/landing-page/public/icons/dark/javaScript.svg create mode 100644 docs/landing-page/public/icons/dark/kotlin.svg create mode 100644 docs/landing-page/public/icons/dark/php.svg create mode 100644 docs/landing-page/public/icons/dark/protocol.svg create mode 100644 docs/landing-page/public/icons/dark/pull_quote.svg create mode 100644 docs/landing-page/public/icons/dark/python.svg create mode 100644 docs/landing-page/public/icons/dark/resource.svg create mode 100644 docs/landing-page/public/icons/dark/ruby.svg create mode 100644 docs/landing-page/public/icons/dark/rust.svg create mode 100644 docs/landing-page/public/icons/dark/scala.svg create mode 100644 docs/landing-page/public/icons/dark/swift.svg create mode 100644 docs/landing-page/public/icons/duke.svg create mode 100644 docs/landing-page/public/icons/go.svg create mode 100644 docs/landing-page/public/icons/kotlin.svg create mode 100644 docs/landing-page/public/icons/light/GO.svg create mode 100644 docs/landing-page/public/icons/light/MSFT_net.svg create mode 100644 docs/landing-page/public/icons/light/cPlus.svg create mode 100644 docs/landing-page/public/icons/light/codify.svg create mode 100644 docs/landing-page/public/icons/light/evolve.svg create mode 100644 docs/landing-page/public/icons/light/java.svg create mode 100644 docs/landing-page/public/icons/light/javaScript.svg create mode 100644 docs/landing-page/public/icons/light/php.svg create mode 100644 docs/landing-page/public/icons/light/protocol.svg create mode 100644 docs/landing-page/public/icons/light/pull_quote.svg create mode 100644 docs/landing-page/public/icons/light/python.svg create mode 100644 docs/landing-page/public/icons/light/resource.svg create mode 100644 docs/landing-page/public/icons/light/ruby.svg create mode 100644 docs/landing-page/public/icons/light/rust.svg create mode 100644 docs/landing-page/public/icons/light/swift.svg create mode 100644 docs/landing-page/public/icons/python.svg create mode 100644 docs/landing-page/public/icons/ruby.png create mode 100644 docs/landing-page/public/icons/rust.svg create mode 100644 docs/landing-page/public/icons/scala.svg create mode 100755 docs/landing-page/public/icons/swift.svg create mode 100644 docs/landing-page/public/icons/ts.svg create mode 100644 docs/landing-page/public/locales/en/translation.json create mode 100644 docs/landing-page/public/logos/smithy_anvil_blk.svg create mode 100644 docs/landing-page/public/logos/smithy_anvil_red.svg create mode 100644 docs/landing-page/public/logos/smithy_anvil_wht.svg create mode 100644 docs/landing-page/public/logos/smithy_flavicon_blk.svg create mode 100644 docs/landing-page/public/logos/smithy_flavicon_red.svg create mode 100644 docs/landing-page/public/logos/smithy_flavicon_wht.svg create mode 100644 docs/landing-page/public/logos/smithy_logo_blk.svg create mode 100644 docs/landing-page/public/logos/smithy_logo_dk.svg create mode 100644 docs/landing-page/public/logos/smithy_logo_lt.svg create mode 100644 docs/landing-page/public/logos/smithy_logo_wht.svg create mode 100644 docs/landing-page/public/sparks/sparks.svg create mode 100644 docs/landing-page/scripts/insertRootHtml.tsx create mode 100644 docs/landing-page/scripts/renderTopNavigation.tsx create mode 100644 docs/landing-page/src/App.stories.tsx create mode 100644 docs/landing-page/src/App.tsx create mode 100644 docs/landing-page/src/components/landing-page/Features/index.stories.tsx create mode 100644 docs/landing-page/src/components/landing-page/Features/index.tsx create mode 100644 docs/landing-page/src/components/landing-page/Footer/index.stories.tsx create mode 100644 docs/landing-page/src/components/landing-page/Footer/index.tsx create mode 100644 docs/landing-page/src/components/landing-page/Heading/Diagram.tsx create mode 100644 docs/landing-page/src/components/landing-page/Heading/Tagline.tsx create mode 100644 docs/landing-page/src/components/landing-page/Heading/index.tsx create mode 100644 docs/landing-page/src/components/landing-page/InformationCircles/index.stories.tsx create mode 100644 docs/landing-page/src/components/landing-page/InformationCircles/index.tsx create mode 100644 docs/landing-page/src/components/landing-page/Quote/index.stories.tsx create mode 100644 docs/landing-page/src/components/landing-page/Quote/index.tsx create mode 100644 docs/landing-page/src/components/landing-page/ServiceExample.tsx create mode 100644 docs/landing-page/src/components/landing-page/SubHeading/index.stories.tsx create mode 100644 docs/landing-page/src/components/landing-page/SubHeading/index.tsx create mode 100644 docs/landing-page/src/components/landing-page/SubHeading/web.stories.tsx create mode 100644 docs/landing-page/src/components/landing-page/SubHeading/web.tsx create mode 100644 docs/landing-page/src/components/landing-page/index.tsx create mode 100644 docs/landing-page/src/components/landing-page/useSupportedLanguagesHook.tsx create mode 100644 docs/landing-page/src/components/navigation/HamburgerMenu.tsx create mode 100644 docs/landing-page/src/components/navigation/MenuLinks.tsx create mode 100644 docs/landing-page/src/components/navigation/index.tsx create mode 100644 docs/landing-page/src/components/navigation/navigation.stories.tsx create mode 100644 docs/landing-page/src/components/svg/arrow.stories.tsx create mode 100644 docs/landing-page/src/components/svg/arrow.tsx create mode 100644 docs/landing-page/src/components/svg/line.stories.tsx create mode 100644 docs/landing-page/src/components/svg/line.tsx create mode 100644 docs/landing-page/src/components/svg/spider.stories.tsx create mode 100644 docs/landing-page/src/components/svg/spider.tsx create mode 100644 docs/landing-page/src/components/svg/svg.tsx create mode 100644 docs/landing-page/src/components/svg/useResizeObserver.tsx create mode 100644 docs/landing-page/src/components/svg/wheel.stories.tsx create mode 100644 docs/landing-page/src/components/svg/wheel.tsx create mode 100644 docs/landing-page/src/components/ui/CircleSection.stories.tsx create mode 100644 docs/landing-page/src/components/ui/CircleSection.tsx create mode 100644 docs/landing-page/src/components/ui/Section.stories.tsx create mode 100644 docs/landing-page/src/components/ui/Section.tsx create mode 100644 docs/landing-page/src/components/ui/SmithyGlow.stories.tsx create mode 100644 docs/landing-page/src/components/ui/SmithyGlow.tsx create mode 100644 docs/landing-page/src/components/ui/SmithyPopGradient.stories.tsx create mode 100644 docs/landing-page/src/components/ui/SmithyPopGradient.tsx create mode 100644 docs/landing-page/src/components/ui/brand.stories.tsx create mode 100644 docs/landing-page/src/components/ui/brand.tsx create mode 100644 docs/landing-page/src/components/ui/button.stories.tsx create mode 100644 docs/landing-page/src/components/ui/button.tsx create mode 100644 docs/landing-page/src/components/ui/card.stories.tsx create mode 100644 docs/landing-page/src/components/ui/card.tsx create mode 100644 docs/landing-page/src/components/ui/icons.stories.tsx create mode 100644 docs/landing-page/src/components/ui/icons.tsx create mode 100644 docs/landing-page/src/components/ui/ide-panel.stories.tsx create mode 100644 docs/landing-page/src/components/ui/ide-panel.tsx create mode 100644 docs/landing-page/src/components/ui/navigation-menu.tsx create mode 100644 docs/landing-page/src/components/ui/sheet.tsx create mode 100644 docs/landing-page/src/components/ui/sparks.md create mode 100644 docs/landing-page/src/i18n/client.tsx create mode 100644 docs/landing-page/src/i18n/index.tsx create mode 100644 docs/landing-page/src/i18n/ssr.tsx create mode 100644 docs/landing-page/src/index.css create mode 100644 docs/landing-page/src/lib/utils.ts create mode 100644 docs/landing-page/src/main.tsx create mode 100644 docs/landing-page/src/vite-env.d.ts create mode 100644 docs/landing-page/tailwind.config.js create mode 100644 docs/landing-page/tsconfig.app.json create mode 100644 docs/landing-page/tsconfig.app.tsbuildinfo create mode 100644 docs/landing-page/tsconfig.json create mode 100644 docs/landing-page/tsconfig.node.json create mode 100644 docs/landing-page/tsconfig.node.tsbuildinfo create mode 100644 docs/landing-page/vite.config.ts delete mode 100644 docs/root/index.html diff --git a/docs/Makefile b/docs/Makefile index e668e256d31..58768ef4773 100644 --- a/docs/Makefile +++ b/docs/Makefile @@ -17,13 +17,20 @@ html1: html2: @source build/venv/bin/activate && $(SPHINXBUILD) -M html "source-2.0" "build/2.0" $(SPHINXOPTS) -W --keep-going -n $(O) -html: html2 html1 merge-versions +build-landing-page: + cd landing-page && npm run build + +html: html2 html1 build-landing-page merge-versions + +serve: + npx http-server build/html merge-versions: mkdir -p build/html cp -R "build/1.0/html" "build/html/1.0" cp -R "build/2.0/html" "build/html/2.0" cp -R root/* "build/html" + cp -R "landing-page/dist/" "build/html/" openhtml: open "build/html/index.html" diff --git a/docs/README.md b/docs/README.md index d30c5f49a40..fe275796cd3 100644 --- a/docs/README.md +++ b/docs/README.md @@ -21,9 +21,8 @@ Then to build static output, run: make html ``` -To view the output, just open up `build/html/index.html` in your browser: +To view the output, run: ``` -open build/html/1.0/index.html -open build/html/2.0/index.html +make serve ``` diff --git a/docs/landing-page/.gitignore b/docs/landing-page/.gitignore new file mode 100644 index 00000000000..57423dee6a7 --- /dev/null +++ b/docs/landing-page/.gitignore @@ -0,0 +1,27 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local +.vite + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + +*storybook.log diff --git a/docs/landing-page/.husky/pre-commit b/docs/landing-page/.husky/pre-commit new file mode 100644 index 00000000000..e1040cb334f --- /dev/null +++ b/docs/landing-page/.husky/pre-commit @@ -0,0 +1,2 @@ +cd docs/landing-page +npm run build && npx lint-staged diff --git a/docs/landing-page/.prettierrc.json b/docs/landing-page/.prettierrc.json new file mode 100644 index 00000000000..0967ef424bc --- /dev/null +++ b/docs/landing-page/.prettierrc.json @@ -0,0 +1 @@ +{} diff --git a/docs/landing-page/.storybook/main.ts b/docs/landing-page/.storybook/main.ts new file mode 100644 index 00000000000..e38f577beda --- /dev/null +++ b/docs/landing-page/.storybook/main.ts @@ -0,0 +1,19 @@ +import type { StorybookConfig } from "@storybook/react-vite"; + +const config: StorybookConfig = { + stories: ["../src/**/*.mdx", "../src/**/*.stories.@(js|jsx|mjs|ts|tsx)"], + addons: [ + "@storybook/addon-onboarding", + "@storybook/addon-links", + "@storybook/addon-essentials", + "@chromatic-com/storybook", + "@storybook/addon-interactions", + "@storybook/addon-themes", + ], + framework: { + name: "@storybook/react-vite", + options: {}, + }, + staticDirs: ["../public"], +}; +export default config; diff --git a/docs/landing-page/.storybook/preview-head.html b/docs/landing-page/.storybook/preview-head.html new file mode 100644 index 00000000000..3295ef0eba8 --- /dev/null +++ b/docs/landing-page/.storybook/preview-head.html @@ -0,0 +1,5 @@ + diff --git a/docs/landing-page/.storybook/preview.tsx b/docs/landing-page/.storybook/preview.tsx new file mode 100644 index 00000000000..90878e763e5 --- /dev/null +++ b/docs/landing-page/.storybook/preview.tsx @@ -0,0 +1,32 @@ +import React from "react"; +import type { Preview } from "@storybook/react"; +import { withThemeByClassName } from "@storybook/addon-themes"; +import "../src/i18n/client.tsx"; +import "../src/index.css"; + +const preview: Preview = { + parameters: { + backgrounds: { disable: true }, + controls: { + matchers: { + color: /(background|color)$/i, + date: /Date$/i, + }, + }, + }, +}; + +export const decorators = [ + withThemeByClassName({ + themes: { + // light: "light", + dark: "dark", + }, + defaultTheme: "dark", + }), + // (Story) => + // + // , +]; + +export default preview; diff --git a/docs/landing-page/README.md b/docs/landing-page/README.md new file mode 100644 index 00000000000..c8af82e1b75 --- /dev/null +++ b/docs/landing-page/README.md @@ -0,0 +1 @@ +# Smithy Landing Page diff --git a/docs/landing-page/components.json b/docs/landing-page/components.json new file mode 100644 index 00000000000..330f415b38d --- /dev/null +++ b/docs/landing-page/components.json @@ -0,0 +1,20 @@ +{ + "$schema": "https://ui.shadcn.com/schema.json", + "style": "new-york", + "rsc": false, + "tsx": true, + "tailwind": { + "config": "tailwind.config.js", + "css": "src/index.css", + "baseColor": "zinc", + "cssVariables": true, + "prefix": "" + }, + "aliases": { + "components": "@/components", + "utils": "@/lib/utils", + "ui": "@/components/ui", + "lib": "@/lib", + "hooks": "@/hooks" + } +} diff --git a/docs/landing-page/eslint.config.js b/docs/landing-page/eslint.config.js new file mode 100644 index 00000000000..79a552ea9d4 --- /dev/null +++ b/docs/landing-page/eslint.config.js @@ -0,0 +1,28 @@ +import js from "@eslint/js"; +import globals from "globals"; +import reactHooks from "eslint-plugin-react-hooks"; +import reactRefresh from "eslint-plugin-react-refresh"; +import tseslint from "typescript-eslint"; + +export default tseslint.config( + { ignores: ["dist"] }, + { + extends: [js.configs.recommended, ...tseslint.configs.recommended], + files: ["**/*.{ts,tsx}"], + languageOptions: { + ecmaVersion: 2020, + globals: globals.browser, + }, + plugins: { + "react-hooks": reactHooks, + "react-refresh": reactRefresh, + }, + rules: { + ...reactHooks.configs.recommended.rules, + "react-refresh/only-export-components": [ + "warn", + { allowConstantExport: true }, + ], + }, + }, +); diff --git a/docs/landing-page/index.html b/docs/landing-page/index.html new file mode 100644 index 00000000000..e4252eb36aa --- /dev/null +++ b/docs/landing-page/index.html @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + Smithy + + +
+ + + + + + diff --git a/docs/landing-page/package-lock.json b/docs/landing-page/package-lock.json new file mode 100644 index 00000000000..e8cbd6bb29f --- /dev/null +++ b/docs/landing-page/package-lock.json @@ -0,0 +1,9111 @@ +{ + "name": "landing-page", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "landing-page", + "version": "0.0.0", + "dependencies": { + "@radix-ui/react-dialog": "^1.1.2", + "@radix-ui/react-icons": "^1.3.0", + "@radix-ui/react-navigation-menu": "^1.2.1", + "@radix-ui/react-slot": "^1.1.0", + "class-variance-authority": "^0.7.0", + "clsx": "^2.1.1", + "i18next": "^23.16.3", + "i18next-browser-languagedetector": "^8.0.0", + "i18next-http-backend": "^2.6.2", + "lucide-react": "^0.453.0", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "react-i18next": "^15.1.0", + "tailwind-merge": "^2.5.4", + "tailwindcss-animate": "^1.0.7" + }, + "devDependencies": { + "@chromatic-com/storybook": "^1.9.0", + "@eslint/js": "^9.11.1", + "@storybook/addon-essentials": "^8.3.6", + "@storybook/addon-interactions": "^8.3.6", + "@storybook/addon-links": "^8.3.6", + "@storybook/addon-onboarding": "^8.3.6", + "@storybook/addon-themes": "^8.3.6", + "@storybook/blocks": "^8.3.6", + "@storybook/react": "^8.3.6", + "@storybook/react-vite": "^8.3.6", + "@storybook/test": "^8.3.6", + "@types/node": "^22.7.7", + "@types/react": "^18.3.10", + "@types/react-dom": "^18.3.0", + "@vitejs/plugin-react": "^4.3.2", + "autoprefixer": "^10.4.20", + "eslint": "^9.11.1", + "eslint-plugin-react-hooks": "^5.1.0-rc.0", + "eslint-plugin-react-refresh": "^0.4.12", + "eslint-plugin-storybook": "^0.10.1", + "globals": "^15.9.0", + "husky": "^9.1.6", + "lint-staged": "^15.2.10", + "postcss": "^8.4.47", + "prettier": "^3.3.3", + "storybook": "^8.3.6", + "tailwindcss": "^3.4.14", + "tsx": "^4.19.1", + "typescript": "^5.5.3", + "typescript-eslint": "^8.7.0", + "vite": "^5.4.8" + } + }, + "node_modules/@adobe/css-tools": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.4.0.tgz", + "integrity": "sha512-Ff9+ksdQQB3rMncgqDK78uLznstjyfIf2Arnh22pW8kBpLs6rpKDwgnZT46hin5Hl1WzazzK64DOrhSwYpS7bQ==", + "dev": true + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.25.7.tgz", + "integrity": "sha512-0xZJFNE5XMpENsgfHYTw8FbX4kv53mFLn2i3XPoq69LyhYSCBJtitaHx9QnsVTrsogI4Z3+HtEfZ2/GFPOtf5g==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.25.7", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.25.8", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.25.8.tgz", + "integrity": "sha512-ZsysZyXY4Tlx+Q53XdnOFmqwfB9QDTHYxaZYajWRoBLuLEAwI2UIbtxOjWh/cFaa9IKUlcB+DDuoskLuKu56JA==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.25.8", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.25.8.tgz", + "integrity": "sha512-Oixnb+DzmRT30qu9d3tJSQkxuygWm32DFykT4bRoORPa9hZ/L4KhVB/XiRm6KG+roIEM7DBQlmg27kw2HZkdZg==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.25.7", + "@babel/generator": "^7.25.7", + "@babel/helper-compilation-targets": "^7.25.7", + "@babel/helper-module-transforms": "^7.25.7", + "@babel/helpers": "^7.25.7", + "@babel/parser": "^7.25.8", + "@babel/template": "^7.25.7", + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.8", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/generator": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.25.7.tgz", + "integrity": "sha512-5Dqpl5fyV9pIAD62yK9P7fcA768uVPUyrQmqpqstHWgMma4feF1x/oFysBCVZLY5wJ2GkMUCdsNDnGZrPoR6rA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.25.7", + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.25.7.tgz", + "integrity": "sha512-DniTEax0sv6isaw6qSQSfV4gVRNtw2rte8HHM45t9ZR0xILaufBRNkpMifCRiAPyvL4ACD6v0gfCwCmtOQaV4A==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.25.7", + "@babel/helper-validator-option": "^7.25.7", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.25.7.tgz", + "integrity": "sha512-o0xCgpNmRohmnoWKQ0Ij8IdddjyBFE4T2kagL/x6M3+4zUgc+4qTOUBoNe4XxDskt1HPKO007ZPiMgLDq2s7Kw==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.25.7.tgz", + "integrity": "sha512-k/6f8dKG3yDz/qCwSM+RKovjMix563SLxQFo0UhRNo239SP6n9u5/eLtKD6EAjwta2JHJ49CsD8pms2HdNiMMQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.25.7", + "@babel/helper-simple-access": "^7.25.7", + "@babel/helper-validator-identifier": "^7.25.7", + "@babel/traverse": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.25.7.tgz", + "integrity": "sha512-eaPZai0PiqCi09pPs3pAFfl/zYgGaE6IdXtYvmf0qlcDTd3WCtO7JWCcRd64e0EQrcYgiHibEZnOGsSY4QSgaw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.25.7.tgz", + "integrity": "sha512-FPGAkJmyoChQeM+ruBGIDyrT2tKfZJO8NcxdC+CWNJi7N8/rZpSxK7yvBJ5O/nF1gfu5KzN7VKG3YVSLFfRSxQ==", + "dev": true, + "dependencies": { + "@babel/traverse": "^7.25.7", + "@babel/types": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.7.tgz", + "integrity": "sha512-CbkjYdsJNHFk8uqpEkpCvRs3YRp9tY6FmFY7wLMSYuGYkrdUi7r2lc4/wqsvlHoMznX3WJ9IP8giGPq68T/Y6g==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.7.tgz", + "integrity": "sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.25.7.tgz", + "integrity": "sha512-ytbPLsm+GjArDYXJ8Ydr1c/KJuutjF2besPNbIZnZ6MKUxi/uTA22t2ymmA4WFjZFpjiAMO0xuuJPqK2nvDVfQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.25.7.tgz", + "integrity": "sha512-Sv6pASx7Esm38KQpF/U/OXLwPPrdGHNKoeblRxgZRLXnAtnkEe4ptJPDtAZM7fBLadbc1Q07kQpSiGQ0Jg6tRA==", + "dev": true, + "dependencies": { + "@babel/template": "^7.25.7", + "@babel/types": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.25.7.tgz", + "integrity": "sha512-iYyACpW3iW8Fw+ZybQK+drQre+ns/tKpXbNESfrhNnPLIklLbXr7MYJ6gPEd0iETGLOK+SxMjVvKb/ffmk+FEw==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.25.7", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.25.8", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.8.tgz", + "integrity": "sha512-HcttkxzdPucv3nNFmfOOMfFf64KgdJVqm1KaCm25dPGMLElo9nsLvXeJECQg8UzPuBGLyTSA0ZzqCtDSzKTEoQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.25.8" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-self": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.25.7.tgz", + "integrity": "sha512-JD9MUnLbPL0WdVK8AWC7F7tTG2OS6u/AKKnsK+NdRhUiVdnzyR1S3kKQCaRLOiaULvUiqK6Z4JQE635VgtCFeg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-react-jsx-source": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.25.7.tgz", + "integrity": "sha512-S/JXG/KrbIY06iyJPKfxr0qRxnhNOdkNXYBl/rmwgDd72cQLH9tEGkDm/yJPGvcSIUoikzfjMios9i+xT/uv9w==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.25.9.tgz", + "integrity": "sha512-4zpTHZ9Cm6L9L+uIqghQX8ZXg8HKFcjYO3qHoO8zTmRm6HQUJ8SSJ+KRvbMBZn0EGVlT4DRYeQ/6hjlyXBh+Kg==", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.25.7.tgz", + "integrity": "sha512-wRwtAgI3bAS+JGU2upWNL9lSlDcRCqD05BZ1n3X2ONLH1WilFP6O1otQjeMK/1g0pvYcXC7b/qVUB1keofjtZA==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.25.7", + "@babel/parser": "^7.25.7", + "@babel/types": "^7.25.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.25.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.7.tgz", + "integrity": "sha512-jatJPT1Zjqvh/1FyJs6qAHL+Dzb7sTb+xr7Q+gM1b+1oBsMsQQ4FkVKb6dFlJvLlVssqkRzV05Jzervt9yhnzg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.25.7", + "@babel/generator": "^7.25.7", + "@babel/parser": "^7.25.7", + "@babel/template": "^7.25.7", + "@babel/types": "^7.25.7", + "debug": "^4.3.1", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@babel/types": { + "version": "7.25.8", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.8.tgz", + "integrity": "sha512-JWtuCu8VQsMladxVz/P4HzHUGCAwpuqacmowgXFs5XjxIgKuNjnLokQzuVjlTvIzODaDmpjT3oxcC48vyk9EWg==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.25.7", + "@babel/helper-validator-identifier": "^7.25.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@base2/pretty-print-object": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@base2/pretty-print-object/-/pretty-print-object-1.0.1.tgz", + "integrity": "sha512-4iri8i1AqYHJE2DstZYkyEprg6Pq6sKx3xn5FpySk9sNhH7qN2LLlHJCfDTZRILNwQNPD7mATWM0TBui7uC1pA==", + "dev": true + }, + "node_modules/@chromatic-com/storybook": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@chromatic-com/storybook/-/storybook-1.9.0.tgz", + "integrity": "sha512-vYQ+TcfktEE3GHnLZXHCzXF/sN9dw+KivH8a5cmPyd9YtQs7fZtHrEgsIjWpYycXiweKMo1Lm1RZsjxk8DH3rA==", + "dev": true, + "dependencies": { + "chromatic": "^11.4.0", + "filesize": "^10.0.12", + "jsonfile": "^6.1.0", + "react-confetti": "^6.1.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=16.0.0", + "yarn": ">=1.22.18" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.1.tgz", + "integrity": "sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", + "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.11.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.1.tgz", + "integrity": "sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==", + "dev": true, + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.18.0.tgz", + "integrity": "sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==", + "dev": true, + "dependencies": { + "@eslint/object-schema": "^2.1.4", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.7.0.tgz", + "integrity": "sha512-xp5Jirz5DyPYlPiKat8jaq0EmYvDXKKpzTbxXMpT9eqlRJkRKIz9AGMdlvYjih+im+QlhWrpvVjl8IPC/lHlUw==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz", + "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/js": { + "version": "9.13.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.13.0.tgz", + "integrity": "sha512-IFLyoY4d72Z5y/6o/BazFBezupzI/taV8sGumxTAVw3lXG9A6md1Dc34T9s1FoD/an9pJH8RHbAxsaEbBed9lA==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.4.tgz", + "integrity": "sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.1.tgz", + "integrity": "sha512-HFZ4Mp26nbWk9d/BpvP0YNL6W4UoZF0VFcTw/aPPA8RpOxeFQgK+ClABGgAUXs9Y/RGX/l1vOmrqz1MQt9MNuw==", + "dev": true, + "dependencies": { + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.0.tgz", + "integrity": "sha512-2cbWIHbZVEweE853g8jymffCA+NCMiuqeECeBBLm8dg2oFdjuGJhgN4UAbI+6v0CKbbhvtXA4qV8YR5Ji86nmw==", + "dev": true, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.5", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.5.tgz", + "integrity": "sha512-KSPA4umqSG4LHYRodq31VDwKAvaTF4xmVlzM8Aeh4PlU1JQ3IG0wiA8C25d3RQ9nJyM3mBHyI53K06VVL/oFFg==", + "dev": true, + "dependencies": { + "@humanfs/core": "^0.19.0", + "@humanwhocodes/retry": "^0.3.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "dev": true, + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@joshwooding/vite-plugin-react-docgen-typescript": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@joshwooding/vite-plugin-react-docgen-typescript/-/vite-plugin-react-docgen-typescript-0.3.0.tgz", + "integrity": "sha512-2D6y7fNvFmsLmRt6UCOFJPvFoPMJGT0Uh1Wg0RaigUp7kdQPs6yYn8Dmx6GZkOH/NW0yMTwRz/p0SRMMRo50vA==", + "dev": true, + "dependencies": { + "glob": "^7.2.0", + "glob-promise": "^4.2.0", + "magic-string": "^0.27.0", + "react-docgen-typescript": "^2.2.2" + }, + "peerDependencies": { + "typescript": ">= 4.3.x", + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@joshwooding/vite-plugin-react-docgen-typescript/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@joshwooding/vite-plugin-react-docgen-typescript/node_modules/glob-promise": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/glob-promise/-/glob-promise-4.2.2.tgz", + "integrity": "sha512-xcUzJ8NWN5bktoTIX7eOclO1Npxd/dyVqUJxlLIDasT4C7KZyqlPIwkdJ0Ypiy3p2ZKahTjK4M9uC3sNSfNMzw==", + "dev": true, + "dependencies": { + "@types/glob": "^7.1.3" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "type": "individual", + "url": "https://github.com/sponsors/ahmadnassri" + }, + "peerDependencies": { + "glob": "^7.1.6" + } + }, + "node_modules/@joshwooding/vite-plugin-react-docgen-typescript/node_modules/magic-string": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz", + "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.13" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@mdx-js/react": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-3.1.0.tgz", + "integrity": "sha512-QjHtSaoameoalGnKDT3FoIl4+9RwyTmo9ZJGBdLOks/YOiWHoRDI3PUwEzOE7kEmGcV3AFcp9K6dYu9rEuKLAQ==", + "dev": true, + "dependencies": { + "@types/mdx": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "@types/react": ">=16", + "react": ">=16" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@radix-ui/primitive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.0.tgz", + "integrity": "sha512-4Z8dn6Upk0qk4P74xBhZ6Hd/w0mPEzOOLxy4xiPXOXqjF7jZS0VAKk7/x/H6FyY2zCkYJqePf1G5KmkmNJ4RBA==" + }, + "node_modules/@radix-ui/react-collection": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-collection/-/react-collection-1.1.0.tgz", + "integrity": "sha512-GZsZslMJEyo1VKm5L1ZJY8tGDxZNPAoUeQUIbKeJfoi7Q4kmig5AsgLMYYuyYbfjd8fBmFORAIwYAkXMnXZgZw==", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.0", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-slot": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-collection/node_modules/@radix-ui/react-context": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.0.tgz", + "integrity": "sha512-OKrckBy+sMEgYM/sMmqmErVn0kZqrHPJze+Ql3DzYsDDp0hl0L62nx/2122/Bvps1qz645jlcu2tD9lrRSdf8A==", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.0.tgz", + "integrity": "sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-context": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.1.tgz", + "integrity": "sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q==", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dialog": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dialog/-/react-dialog-1.1.2.tgz", + "integrity": "sha512-Yj4dZtqa2o+kG61fzB0H2qUvmwBA2oyQroGLyNtBj1beo1khoQ3q1a2AO8rrQYjd8256CO9+N8L9tvsS+bnIyA==", + "dependencies": { + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.1", + "@radix-ui/react-dismissable-layer": "1.1.1", + "@radix-ui/react-focus-guards": "1.1.1", + "@radix-ui/react-focus-scope": "1.1.0", + "@radix-ui/react-id": "1.1.0", + "@radix-ui/react-portal": "1.1.2", + "@radix-ui/react-presence": "1.1.1", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-slot": "1.1.0", + "@radix-ui/react-use-controllable-state": "1.1.0", + "aria-hidden": "^1.1.1", + "react-remove-scroll": "2.6.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-direction": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.0.tgz", + "integrity": "sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg==", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-dismissable-layer": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-dismissable-layer/-/react-dismissable-layer-1.1.1.tgz", + "integrity": "sha512-QSxg29lfr/xcev6kSz7MAlmDnzbP1eI/Dwn3Tp1ip0KT5CUELsxkekFEMVBEoykI3oV39hKT4TKZzBNMbcTZYQ==", + "dependencies": { + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-callback-ref": "1.1.0", + "@radix-ui/react-use-escape-keydown": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-focus-guards": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-guards/-/react-focus-guards-1.1.1.tgz", + "integrity": "sha512-pSIwfrT1a6sIoDASCSpFwOasEwKTZWDw/iBdtnqKO7v6FeOzYJ7U53cPzYFVR3geGGXgVHaH+CdngrrAzqUGxg==", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-focus-scope": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-focus-scope/-/react-focus-scope-1.1.0.tgz", + "integrity": "sha512-200UD8zylvEyL8Bx+z76RJnASR2gRMuxlgFCPAe/Q/679a/r0eK3MBVYMb7vZODZcffZBdob1EGnky78xmVvcA==", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-callback-ref": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-icons": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-icons/-/react-icons-1.3.0.tgz", + "integrity": "sha512-jQxj/0LKgp+j9BiTXz3O3sgs26RNet2iLWmsPyRz2SIcR4q/4SbazXfnYwbAr+vLYKSfc7qxzyGQA1HLlYiuNw==", + "peerDependencies": { + "react": "^16.x || ^17.x || ^18.x" + } + }, + "node_modules/@radix-ui/react-id": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-id/-/react-id-1.1.0.tgz", + "integrity": "sha512-EJUrI8yYh7WOjNOqpoJaf1jlFIH2LvtgAl+YcFqNCa+4hj64ZXmPkAKOFs/ukjz3byN6bdb/AVUqHkI8/uWWMA==", + "dependencies": { + "@radix-ui/react-use-layout-effect": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-navigation-menu": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-navigation-menu/-/react-navigation-menu-1.2.1.tgz", + "integrity": "sha512-egDo0yJD2IK8L17gC82vptkvW1jLeni1VuqCyzY727dSJdk5cDjINomouLoNk8RVF7g2aNIfENKWL4UzeU9c8Q==", + "dependencies": { + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-collection": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.1", + "@radix-ui/react-direction": "1.1.0", + "@radix-ui/react-dismissable-layer": "1.1.1", + "@radix-ui/react-id": "1.1.0", + "@radix-ui/react-presence": "1.1.1", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-callback-ref": "1.1.0", + "@radix-ui/react-use-controllable-state": "1.1.0", + "@radix-ui/react-use-layout-effect": "1.1.0", + "@radix-ui/react-use-previous": "1.1.0", + "@radix-ui/react-visually-hidden": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-portal": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-portal/-/react-portal-1.1.2.tgz", + "integrity": "sha512-WeDYLGPxJb/5EGBoedyJbT0MpoULmwnIPMJMSldkuiMsBAv7N1cRdsTWZWht9vpPOiN3qyiGAtbK2is47/uMFg==", + "dependencies": { + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-layout-effect": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-presence": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.1.tgz", + "integrity": "sha512-IeFXVi4YS1K0wVZzXNrbaaUvIJ3qdY+/Ih4eHFhWA9SwGR9UDX7Ck8abvL57C4cv3wwMvUE0OG69Qc3NCcTe/A==", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-use-layout-effect": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.0.0.tgz", + "integrity": "sha512-ZSpFm0/uHa8zTvKBDjLFWLo8dkr4MBsiDLz0g3gMUwqgLHz9rTaRRGYDgvZPtBJgYCBKXkS9fzmoySgr8CO6Cw==", + "dependencies": { + "@radix-ui/react-slot": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.0.tgz", + "integrity": "sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw==", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-callback-ref": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz", + "integrity": "sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-controllable-state": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-controllable-state/-/react-use-controllable-state-1.1.0.tgz", + "integrity": "sha512-MtfMVJiSr2NjzS0Aa90NPTnvTSg6C/JLCV7ma0W6+OMV78vd8OyRpID+Ng9LxzsPbLeuBnWBA1Nq30AtBIDChw==", + "dependencies": { + "@radix-ui/react-use-callback-ref": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-escape-keydown": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-escape-keydown/-/react-use-escape-keydown-1.1.0.tgz", + "integrity": "sha512-L7vwWlR1kTTQ3oh7g1O0CBF3YCyyTj8NmhLR+phShpyA50HCfBFKVJTpshm9PzLiKmehsrQzTYTpX9HvmC9rhw==", + "dependencies": { + "@radix-ui/react-use-callback-ref": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-layout-effect": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.0.tgz", + "integrity": "sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-previous": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-previous/-/react-use-previous-1.1.0.tgz", + "integrity": "sha512-Z/e78qg2YFnnXcW88A4JmTtm4ADckLno6F7OXotmkQfeuCVaKuYzqAATPhVzl3delXE7CxIV8shofPn3jPc5Og==", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-visually-hidden": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-visually-hidden/-/react-visually-hidden-1.1.0.tgz", + "integrity": "sha512-N8MDZqtgCgG5S3aV60INAB475osJousYpZ4cTJ2cFbMpdHS5Y6loLTH8LPtkj2QN0x93J30HT/M3qJXM0+lyeQ==", + "dependencies": { + "@radix-ui/react-primitive": "2.0.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.2.tgz", + "integrity": "sha512-/FIdS3PyZ39bjZlwqFnWqCOVnW7o963LtKMwQOD0NhQqw22gSr2YY1afu3FxRip4ZCZNsD5jq6Aaz6QV3D/Njw==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.24.0.tgz", + "integrity": "sha512-Q6HJd7Y6xdB48x8ZNVDOqsbh2uByBhgK8PiQgPhwkIw/HC/YX5Ghq2mQY5sRMZWHb3VsFkWooUVOZHKr7DmDIA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.24.0.tgz", + "integrity": "sha512-ijLnS1qFId8xhKjT81uBHuuJp2lU4x2yxa4ctFPtG+MqEE6+C5f/+X/bStmxapgmwLwiL3ih122xv8kVARNAZA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.24.0.tgz", + "integrity": "sha512-bIv+X9xeSs1XCk6DVvkO+S/z8/2AMt/2lMqdQbMrmVpgFvXlmde9mLcbQpztXm1tajC3raFDqegsH18HQPMYtA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.24.0.tgz", + "integrity": "sha512-X6/nOwoFN7RT2svEQWUsW/5C/fYMBe4fnLK9DQk4SX4mgVBiTA9h64kjUYPvGQ0F/9xwJ5U5UfTbl6BEjaQdBQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.24.0.tgz", + "integrity": "sha512-0KXvIJQMOImLCVCz9uvvdPgfyWo93aHHp8ui3FrtOP57svqrF/roSSR5pjqL2hcMp0ljeGlU4q9o/rQaAQ3AYA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.24.0.tgz", + "integrity": "sha512-it2BW6kKFVh8xk/BnHfakEeoLPv8STIISekpoF+nBgWM4d55CZKc7T4Dx1pEbTnYm/xEKMgy1MNtYuoA8RFIWw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.24.0.tgz", + "integrity": "sha512-i0xTLXjqap2eRfulFVlSnM5dEbTVque/3Pi4g2y7cxrs7+a9De42z4XxKLYJ7+OhE3IgxvfQM7vQc43bwTgPwA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.24.0.tgz", + "integrity": "sha512-9E6MKUJhDuDh604Qco5yP/3qn3y7SLXYuiC0Rpr89aMScS2UAmK1wHP2b7KAa1nSjWJc/f/Lc0Wl1L47qjiyQw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.24.0.tgz", + "integrity": "sha512-2XFFPJ2XMEiF5Zi2EBf4h73oR1V/lycirxZxHZNc93SqDN/IWhYYSYj8I9381ikUFXZrz2v7r2tOVk2NBwxrWw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.24.0.tgz", + "integrity": "sha512-M3Dg4hlwuntUCdzU7KjYqbbd+BLq3JMAOhCKdBE3TcMGMZbKkDdJ5ivNdehOssMCIokNHFOsv7DO4rlEOfyKpg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.24.0.tgz", + "integrity": "sha512-mjBaoo4ocxJppTorZVKWFpy1bfFj9FeCMJqzlMQGjpNPY9JwQi7OuS1axzNIk0nMX6jSgy6ZURDZ2w0QW6D56g==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.24.0.tgz", + "integrity": "sha512-ZXFk7M72R0YYFN5q13niV0B7G8/5dcQ9JDp8keJSfr3GoZeXEoMHP/HlvqROA3OMbMdfr19IjCeNAnPUG93b6A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.24.0.tgz", + "integrity": "sha512-w1i+L7kAXZNdYl+vFvzSZy8Y1arS7vMgIy8wusXJzRrPyof5LAb02KGr1PD2EkRcl73kHulIID0M501lN+vobQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.24.0.tgz", + "integrity": "sha512-VXBrnPWgBpVDCVY6XF3LEW0pOU51KbaHhccHw6AS6vBWIC60eqsH19DAeeObl+g8nKAz04QFdl/Cefta0xQtUQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.24.0.tgz", + "integrity": "sha512-xrNcGDU0OxVcPTH/8n/ShH4UevZxKIO6HJFK0e15XItZP2UcaiLFd5kiX7hJnqCbSztUF8Qot+JWBC/QXRPYWQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.24.0.tgz", + "integrity": "sha512-fbMkAF7fufku0N2dE5TBXcNlg0pt0cJue4xBRE2Qc5Vqikxr4VCgKj/ht6SMdFcOacVA9rqF70APJ8RN/4vMJw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@storybook/addon-actions": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-8.3.6.tgz", + "integrity": "sha512-nOqgl0WoZK2KwjaABaXMoIgrIHOQl9inOzJvqQau0HOtsvnXGXYfJXYnpjZenoZDoZXKbUDl0U2haDFx2a2fJw==", + "dev": true, + "dependencies": { + "@storybook/global": "^5.0.0", + "@types/uuid": "^9.0.1", + "dequal": "^2.0.2", + "polished": "^4.2.2", + "uuid": "^9.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "storybook": "^8.3.6" + } + }, + "node_modules/@storybook/addon-backgrounds": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/@storybook/addon-backgrounds/-/addon-backgrounds-8.3.6.tgz", + "integrity": "sha512-yBn+a8i5OJzJaX6Bx5MAkfei7c2nvq+RRmvuyvxw11rtDGR6Nz4OBBe56reWxo868wVUggpRTPJCMVe5tDYgVg==", + "dev": true, + "dependencies": { + "@storybook/global": "^5.0.0", + "memoizerific": "^1.11.3", + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "storybook": "^8.3.6" + } + }, + "node_modules/@storybook/addon-controls": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/@storybook/addon-controls/-/addon-controls-8.3.6.tgz", + "integrity": "sha512-9IMLHgtWPuFoRCt3hDsIk1FbkK5SlCMDW1DDwtTBIeWYYZLvptS42+vGVTeQ8v5SejmVzZkzuUdzu3p4sb3IcA==", + "dev": true, + "dependencies": { + "@storybook/global": "^5.0.0", + "dequal": "^2.0.2", + "lodash": "^4.17.21", + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "storybook": "^8.3.6" + } + }, + "node_modules/@storybook/addon-docs": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-8.3.6.tgz", + "integrity": "sha512-31Rk1TOhDIzGM2wNCUIB1xKuWtArW0D2Puua9warEXlQ3FtvwmxnPrwbIzw6ufYZDWPwl9phDYTcRh8WqZIoGg==", + "dev": true, + "dependencies": { + "@mdx-js/react": "^3.0.0", + "@storybook/blocks": "8.3.6", + "@storybook/csf-plugin": "8.3.6", + "@storybook/global": "^5.0.0", + "@storybook/react-dom-shim": "8.3.6", + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "fs-extra": "^11.1.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0", + "rehype-external-links": "^3.0.0", + "rehype-slug": "^6.0.0", + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "storybook": "^8.3.6" + } + }, + "node_modules/@storybook/addon-essentials": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/@storybook/addon-essentials/-/addon-essentials-8.3.6.tgz", + "integrity": "sha512-MQPFvThlGU7wlda1xhBPQCmDh90cSSZ31OsVs1uC5kJh0aLbY2gYXPurq1G54kzrYo8SMfBxsXrCplz8Ir6UTg==", + "dev": true, + "dependencies": { + "@storybook/addon-actions": "8.3.6", + "@storybook/addon-backgrounds": "8.3.6", + "@storybook/addon-controls": "8.3.6", + "@storybook/addon-docs": "8.3.6", + "@storybook/addon-highlight": "8.3.6", + "@storybook/addon-measure": "8.3.6", + "@storybook/addon-outline": "8.3.6", + "@storybook/addon-toolbars": "8.3.6", + "@storybook/addon-viewport": "8.3.6", + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "storybook": "^8.3.6" + } + }, + "node_modules/@storybook/addon-highlight": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/@storybook/addon-highlight/-/addon-highlight-8.3.6.tgz", + "integrity": "sha512-A7uU+1OPVXGpkklEUJjSl2VEEDLCSNvmffUJlvW1GjajsNFIHOW2CSD+KnfFlQyPxyVbnWAYLqUP4XJxoqrvDw==", + "dev": true, + "dependencies": { + "@storybook/global": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "storybook": "^8.3.6" + } + }, + "node_modules/@storybook/addon-interactions": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/@storybook/addon-interactions/-/addon-interactions-8.3.6.tgz", + "integrity": "sha512-Y0YUJj0oE1+6DFkaTPXM/8+dwTSoy0ltj2Sn2KOTJYzxKQYXBp8TlUv0QOQiGH7o/GKXIWek/VlTuvG/JEeiWw==", + "dev": true, + "dependencies": { + "@storybook/global": "^5.0.0", + "@storybook/instrumenter": "8.3.6", + "@storybook/test": "8.3.6", + "polished": "^4.2.2", + "ts-dedent": "^2.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "storybook": "^8.3.6" + } + }, + "node_modules/@storybook/addon-links": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/@storybook/addon-links/-/addon-links-8.3.6.tgz", + "integrity": "sha512-EGEH/kEjndEldbqyiJ8XSASkxqwzL/lgA/+6mHpa6Ljxhk1s5IMGcdA1ymJYJ2BpNdkUxRj/uxAa38eGcQiJ/g==", + "dev": true, + "dependencies": { + "@storybook/csf": "^0.1.11", + "@storybook/global": "^5.0.0", + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", + "storybook": "^8.3.6" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + } + } + }, + "node_modules/@storybook/addon-measure": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/@storybook/addon-measure/-/addon-measure-8.3.6.tgz", + "integrity": "sha512-VHWeGgYjhzhwb2WAqYW/qyEPqg5pwKR/XqFfd+3tEirUs/64olL1l3lzLwZ8Cm07cJ81T8Z4myywb9kObZfQlw==", + "dev": true, + "dependencies": { + "@storybook/global": "^5.0.0", + "tiny-invariant": "^1.3.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "storybook": "^8.3.6" + } + }, + "node_modules/@storybook/addon-onboarding": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/@storybook/addon-onboarding/-/addon-onboarding-8.3.6.tgz", + "integrity": "sha512-DvwtK3k5docaO7ZO0LRXL1myCwOnW2X+e9c383GEk9AykgL5otzkMjxRZ1rSAw39q/WIE9H0vBvUmzGVRpUm+A==", + "dev": true, + "dependencies": { + "react-confetti": "^6.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "storybook": "^8.3.6" + } + }, + "node_modules/@storybook/addon-outline": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/@storybook/addon-outline/-/addon-outline-8.3.6.tgz", + "integrity": "sha512-+VXpM8SIHX2cn30qLlMvER9/6iioFRSn2sAfLniqy4RrcQmcMP+qgE7ZzbzExt7cneJh3VFsYqBS/HElu14Vgg==", + "dev": true, + "dependencies": { + "@storybook/global": "^5.0.0", + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "storybook": "^8.3.6" + } + }, + "node_modules/@storybook/addon-themes": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/@storybook/addon-themes/-/addon-themes-8.3.6.tgz", + "integrity": "sha512-NX6zVWs0JVUg0xICL2v1zlb6eTAQYlE/vd6ATA4bNUNL5sabWGEd1w2ArQaHC9nTnfV60JuRQ8o3SvD7Gg0xMg==", + "dev": true, + "dependencies": { + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "storybook": "^8.3.6" + } + }, + "node_modules/@storybook/addon-toolbars": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/@storybook/addon-toolbars/-/addon-toolbars-8.3.6.tgz", + "integrity": "sha512-FJH+lRoZXENfpMR/G09ZqB0TmL/k6bv07GN1ysoVs420tKRgjfz6uXaZz5COrhcdISr5mTNmG+mw9x7xXTfX3Q==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "storybook": "^8.3.6" + } + }, + "node_modules/@storybook/addon-viewport": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-8.3.6.tgz", + "integrity": "sha512-bL51v837W1cng/+0pypkoLsWKWmvux96zLOzqLCpcWAQ4OSMhW3foIWpCiFwMG/KY+GanoOocTx6i7j5hLtuTA==", + "dev": true, + "dependencies": { + "memoizerific": "^1.11.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "storybook": "^8.3.6" + } + }, + "node_modules/@storybook/blocks": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/@storybook/blocks/-/blocks-8.3.6.tgz", + "integrity": "sha512-Oc5jU6EzfsENjrd91KcKyEKBh60RT+8uyLi1RIrymC2C/mzZMTEoNIrbnQt0eIqbjlHxn6y9JMJxHu4NJ4EmZg==", + "dev": true, + "dependencies": { + "@storybook/csf": "^0.1.11", + "@storybook/global": "^5.0.0", + "@storybook/icons": "^1.2.10", + "@types/lodash": "^4.14.167", + "color-convert": "^2.0.1", + "dequal": "^2.0.2", + "lodash": "^4.17.21", + "markdown-to-jsx": "^7.4.5", + "memoizerific": "^1.11.3", + "polished": "^4.2.2", + "react-colorful": "^5.1.2", + "telejson": "^7.2.0", + "ts-dedent": "^2.0.0", + "util-deprecate": "^1.0.2" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", + "storybook": "^8.3.6" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "react-dom": { + "optional": true + } + } + }, + "node_modules/@storybook/blocks/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@storybook/blocks/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@storybook/builder-vite": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/@storybook/builder-vite/-/builder-vite-8.3.6.tgz", + "integrity": "sha512-AF4+oFe1mvIHrLvaYsv8B0YSlXQtSlKTKwrXnUbcAbeGRwMmFKA1t3VyAcXV0yB9MtZ8YJsA/uKRkgGEaN7wJQ==", + "dev": true, + "dependencies": { + "@storybook/csf-plugin": "8.3.6", + "@types/find-cache-dir": "^3.2.1", + "browser-assert": "^1.2.1", + "es-module-lexer": "^1.5.0", + "express": "^4.19.2", + "find-cache-dir": "^3.0.0", + "fs-extra": "^11.1.0", + "magic-string": "^0.30.0", + "ts-dedent": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "@preact/preset-vite": "*", + "storybook": "^8.3.6", + "typescript": ">= 4.3.x", + "vite": "^4.0.0 || ^5.0.0", + "vite-plugin-glimmerx": "*" + }, + "peerDependenciesMeta": { + "@preact/preset-vite": { + "optional": true + }, + "typescript": { + "optional": true + }, + "vite-plugin-glimmerx": { + "optional": true + } + } + }, + "node_modules/@storybook/components": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/@storybook/components/-/components-8.3.6.tgz", + "integrity": "sha512-TXuoGZY7X3iixF45lXkYOFk8k2q9OHcqHyHyem1gATLLQXgyOvDgzm+VB7uKBNzssRQPEE+La70nfG8bq/viRw==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "storybook": "^8.3.6" + } + }, + "node_modules/@storybook/core": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/@storybook/core/-/core-8.3.6.tgz", + "integrity": "sha512-frwfgf0EJ7QL29DWZ5bla/g0eOOWqJGd14t+VUBlpP920zB6sdDfo7+p9JoCjD9u08lGeFDqbPNKayUk+0qDag==", + "dev": true, + "dependencies": { + "@storybook/csf": "^0.1.11", + "@types/express": "^4.17.21", + "better-opn": "^3.0.2", + "browser-assert": "^1.2.1", + "esbuild": "^0.18.0 || ^0.19.0 || ^0.20.0 || ^0.21.0 || ^0.22.0 || ^0.23.0", + "esbuild-register": "^3.5.0", + "express": "^4.19.2", + "jsdoc-type-pratt-parser": "^4.0.0", + "process": "^0.11.10", + "recast": "^0.23.5", + "semver": "^7.6.2", + "util": "^0.12.5", + "ws": "^8.2.3" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/@storybook/core/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@storybook/csf": { + "version": "0.1.11", + "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.1.11.tgz", + "integrity": "sha512-dHYFQH3mA+EtnCkHXzicbLgsvzYjcDJ1JWsogbItZogkPHgSJM/Wr71uMkcvw8v9mmCyP4NpXJuu6bPoVsOnzg==", + "dev": true, + "dependencies": { + "type-fest": "^2.19.0" + } + }, + "node_modules/@storybook/csf-plugin": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-8.3.6.tgz", + "integrity": "sha512-TJyJPFejO6Gyr3+bXqE/+LomQbivvfHEbee/GwtlRj0XF4KQlqnvuEdEdcK25JbD0NXT8AbyncEUmjoxE7ojQw==", + "dev": true, + "dependencies": { + "unplugin": "^1.3.1" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "storybook": "^8.3.6" + } + }, + "node_modules/@storybook/global": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@storybook/global/-/global-5.0.0.tgz", + "integrity": "sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==", + "dev": true + }, + "node_modules/@storybook/icons": { + "version": "1.2.12", + "resolved": "https://registry.npmjs.org/@storybook/icons/-/icons-1.2.12.tgz", + "integrity": "sha512-UxgyK5W3/UV4VrI3dl6ajGfHM4aOqMAkFLWe2KibeQudLf6NJpDrDMSHwZj+3iKC4jFU7dkKbbtH2h/al4sW3Q==", + "dev": true, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/@storybook/instrumenter": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/@storybook/instrumenter/-/instrumenter-8.3.6.tgz", + "integrity": "sha512-0RowbKwoB/s7rtymlnKNiyWN1Z3ZK5mwgzVjlRmzxDL8hrdi5KDjTNExuJTRR3ZaBP2RR0/I3m/n0p9JhHAZvg==", + "dev": true, + "dependencies": { + "@storybook/global": "^5.0.0", + "@vitest/utils": "^2.0.5", + "util": "^0.12.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "storybook": "^8.3.6" + } + }, + "node_modules/@storybook/manager-api": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/@storybook/manager-api/-/manager-api-8.3.6.tgz", + "integrity": "sha512-Xt5VFZcL+G/9uzaHjzWFhxRNrP+4rPhSRKEvCZorAbC9+Hv+ZDs1JSZS5wMb4WKpXBZ0rwDVOLwngqbVtfRHuQ==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "storybook": "^8.3.6" + } + }, + "node_modules/@storybook/preview-api": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-8.3.6.tgz", + "integrity": "sha512-/Wxvb7wbI2O2iH63arRQQyyojA630vibdshkFjuC/u1nYdptEV1jkxa0OYmbZbKCn4/ze6uH4hfsKOpDPV9SWg==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "storybook": "^8.3.6" + } + }, + "node_modules/@storybook/react": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/@storybook/react/-/react-8.3.6.tgz", + "integrity": "sha512-s3COryqIOYK7urgZaCPb77zlxGjPKr6dIsYmblQJcsFY2ZlG2x0Ysm8b5oRgD8Pv71hCJ0PKYA4RzDgBVYJS9A==", + "dev": true, + "dependencies": { + "@storybook/components": "^8.3.6", + "@storybook/global": "^5.0.0", + "@storybook/manager-api": "^8.3.6", + "@storybook/preview-api": "^8.3.6", + "@storybook/react-dom-shim": "8.3.6", + "@storybook/theming": "^8.3.6", + "@types/escodegen": "^0.0.6", + "@types/estree": "^0.0.51", + "@types/node": "^22.0.0", + "acorn": "^7.4.1", + "acorn-jsx": "^5.3.1", + "acorn-walk": "^7.2.0", + "escodegen": "^2.1.0", + "html-tags": "^3.1.0", + "prop-types": "^15.7.2", + "react-element-to-jsx-string": "^15.0.0", + "semver": "^7.3.7", + "ts-dedent": "^2.0.0", + "type-fest": "~2.19", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "@storybook/test": "8.3.6", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", + "storybook": "^8.3.6", + "typescript": ">= 4.2.x" + }, + "peerDependenciesMeta": { + "@storybook/test": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/@storybook/react-dom-shim": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-8.3.6.tgz", + "integrity": "sha512-9BO6VXIdli4GHSfiP/Z0gwAf7oQig3D/yWK2U1+91UWDV8nIAgnNBAi76U4ORC6MiK5MdkDfIikIxnLLeLnahA==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", + "storybook": "^8.3.6" + } + }, + "node_modules/@storybook/react-vite": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/@storybook/react-vite/-/react-vite-8.3.6.tgz", + "integrity": "sha512-KXi4ZT4X7DsB4OOIWeR1XMH/Oz6Rp4TlWBNx/TgSEDGYEkPooqZK/O0S+G+VIsrRGQUf/57YqO73mP6kNluxTA==", + "dev": true, + "dependencies": { + "@joshwooding/vite-plugin-react-docgen-typescript": "0.3.0", + "@rollup/pluginutils": "^5.0.2", + "@storybook/builder-vite": "8.3.6", + "@storybook/react": "8.3.6", + "find-up": "^5.0.0", + "magic-string": "^0.30.0", + "react-docgen": "^7.0.0", + "resolve": "^1.22.8", + "tsconfig-paths": "^4.2.0" + }, + "engines": { + "node": ">=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", + "storybook": "^8.3.6", + "vite": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/@storybook/react/node_modules/@types/estree": { + "version": "0.0.51", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.51.tgz", + "integrity": "sha512-CuPgU6f3eT/XgKKPqKd/gLZV1Xmvf1a2R5POBOGQa6uv82xpls89HU5zKeVoyR8XzHd1RGNOlQlvUe3CFkjWNQ==", + "dev": true + }, + "node_modules/@storybook/react/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/@storybook/react/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@storybook/test": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/@storybook/test/-/test-8.3.6.tgz", + "integrity": "sha512-WIc8LzK9jaEw+e3OiweEM2j3cppPzsWod59swuf6gDBf176EQLIyjtVc+Kh3qO4NNkcL+lwmqaLPjOxlBLaDbg==", + "dev": true, + "dependencies": { + "@storybook/csf": "^0.1.11", + "@storybook/global": "^5.0.0", + "@storybook/instrumenter": "8.3.6", + "@testing-library/dom": "10.4.0", + "@testing-library/jest-dom": "6.5.0", + "@testing-library/user-event": "14.5.2", + "@vitest/expect": "2.0.5", + "@vitest/spy": "2.0.5", + "util": "^0.12.4" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "storybook": "^8.3.6" + } + }, + "node_modules/@storybook/theming": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-8.3.6.tgz", + "integrity": "sha512-LQjUk6GXRW9ELkoBKuqzQKFUW+ajfGPfVELcfs3/VQX61VhthJ4olov4bGPc04wsmmFMgN/qODxT485IwOHfPQ==", + "dev": true, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + }, + "peerDependencies": { + "storybook": "^8.3.6" + } + }, + "node_modules/@testing-library/dom": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.0.tgz", + "integrity": "sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.3.0", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "pretty-format": "^27.0.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@testing-library/dom/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@testing-library/dom/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@testing-library/dom/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@testing-library/dom/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@testing-library/dom/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/dom/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/jest-dom": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.5.0.tgz", + "integrity": "sha512-xGGHpBXYSHUUr6XsKBfs85TWlYKpTc37cSBBVrXcib2MkHLboWlkClhWF37JKlDb9KEq3dHs+f2xR7XJEWGBxA==", + "dev": true, + "dependencies": { + "@adobe/css-tools": "^4.4.0", + "aria-query": "^5.0.0", + "chalk": "^3.0.0", + "css.escape": "^1.5.1", + "dom-accessibility-api": "^0.6.3", + "lodash": "^4.17.21", + "redent": "^3.0.0" + }, + "engines": { + "node": ">=14", + "npm": ">=6", + "yarn": ">=1" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@testing-library/jest-dom/node_modules/dom-accessibility-api": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz", + "integrity": "sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==", + "dev": true + }, + "node_modules/@testing-library/jest-dom/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/jest-dom/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@testing-library/user-event": { + "version": "14.5.2", + "resolved": "https://registry.npmjs.org/@testing-library/user-event/-/user-event-14.5.2.tgz", + "integrity": "sha512-YAh82Wh4TIrxYLmfGcixwD18oIjyC1pFQC2Y01F2lzV2HTMiYrI0nze0FD0ocB//CKS/7jIUgae+adPqxK5yCQ==", + "dev": true, + "engines": { + "node": ">=12", + "npm": ">=6" + }, + "peerDependencies": { + "@testing-library/dom": ">=7.21.4" + } + }, + "node_modules/@types/aria-query": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@types/aria-query/-/aria-query-5.0.4.tgz", + "integrity": "sha512-rfT93uj5s0PRL7EzccGMs3brplhcrghnDoV26NqKhCAS1hVo+WdNsPvE/yb6ilfr5hi2MEk6d5EWJTKdxg8jVw==", + "dev": true + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.6.8", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.8.tgz", + "integrity": "sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "dev": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.20.6", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.20.6.tgz", + "integrity": "sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.20.7" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.5", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.5.tgz", + "integrity": "sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==", + "dev": true, + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.38", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", + "integrity": "sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/doctrine": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.9.tgz", + "integrity": "sha512-eOIHzCUSH7SMfonMG1LsC2f8vxBFtho6NGBznK41R84YzPuvSBzrhEps33IsQiOW9+VL6NQ9DbjQJznk/S4uRA==", + "dev": true + }, + "node_modules/@types/escodegen": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/@types/escodegen/-/escodegen-0.0.6.tgz", + "integrity": "sha512-AjwI4MvWx3HAOaZqYsjKWyEObT9lcVV0Y0V8nXo6cXzN8ZiMxVhf6F3d/UNvXVGKrEzL/Dluc5p+y9GkzlTWig==", + "dev": true + }, + "node_modules/@types/estree": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "dev": true + }, + "node_modules/@types/express": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz", + "integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==", + "dev": true, + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.19.6", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz", + "integrity": "sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/find-cache-dir": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@types/find-cache-dir/-/find-cache-dir-3.2.1.tgz", + "integrity": "sha512-frsJrz2t/CeGifcu/6uRo4b+SzAwT4NYCVPu1GN8IB9XTzrpPkGuV0tmh9mN+/L0PklAlsC3u5Fxt0ju00LXIw==", + "dev": true + }, + "node_modules/@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "dev": true, + "dependencies": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "dev": true, + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/http-errors": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.4.tgz", + "integrity": "sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==", + "dev": true + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true + }, + "node_modules/@types/lodash": { + "version": "4.17.12", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.12.tgz", + "integrity": "sha512-sviUmCE8AYdaF/KIHLDJBQgeYzPBI0vf/17NaYehBJfYD1j6/L95Slh07NlyK2iNyBNaEkb3En2jRt+a8y3xZQ==", + "dev": true + }, + "node_modules/@types/mdx": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/@types/mdx/-/mdx-2.0.13.tgz", + "integrity": "sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==", + "dev": true + }, + "node_modules/@types/mime": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", + "integrity": "sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==", + "dev": true + }, + "node_modules/@types/minimatch": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.2.tgz", + "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==", + "dev": true + }, + "node_modules/@types/node": { + "version": "22.7.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.7.tgz", + "integrity": "sha512-SRxCrrg9CL/y54aiMCG3edPKdprgMVGDXjA3gB8UmmBW5TcXzRUYAh8EWzTnSJFAd1rgImPELza+A3bJ+qxz8Q==", + "dev": true, + "dependencies": { + "undici-types": "~6.19.2" + } + }, + "node_modules/@types/prop-types": { + "version": "15.7.13", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.13.tgz", + "integrity": "sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==", + "devOptional": true + }, + "node_modules/@types/qs": { + "version": "6.9.16", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.16.tgz", + "integrity": "sha512-7i+zxXdPD0T4cKDuxCUXJ4wHcsJLwENa6Z3dCu8cfCK743OGy5Nu1RmAGqDPsoTDINVEcdXKRvR/zre+P2Ku1A==", + "dev": true + }, + "node_modules/@types/range-parser": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.7.tgz", + "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==", + "dev": true + }, + "node_modules/@types/react": { + "version": "18.3.11", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.11.tgz", + "integrity": "sha512-r6QZ069rFTjrEYgFdOck1gK7FLVsgJE7tTz0pQBczlBNUhBNk0MQH4UbnFSwjpQLMkLzgqvBBa+qGpLje16eTQ==", + "devOptional": true, + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-qW1Mfv8taImTthu4KoXgDfLuk4bydU6Q/TkADnDWWHwi4NX4BR+LWfTp2sVmTqRrsHvyDDTelgelxJ+SsejKKQ==", + "devOptional": true, + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/resolve": { + "version": "1.20.6", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.6.tgz", + "integrity": "sha512-A4STmOXPhMUtHH+S6ymgE2GiBSMqf4oTvcQZMcHzokuTLVYzXTB8ttjcgxOVaAp2lGwEdzZ0J+cRbbeevQj1UQ==", + "dev": true + }, + "node_modules/@types/send": { + "version": "0.17.4", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz", + "integrity": "sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==", + "dev": true, + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.7", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.7.tgz", + "integrity": "sha512-W8Ym+h8nhuRwaKPaDw34QUkwsGi6Rc4yYqvKFo5rm2FUEhCFbzVWrxXUxuKK8TASjWsysJY0nsmNCGhCOIsrOw==", + "dev": true, + "dependencies": { + "@types/http-errors": "*", + "@types/node": "*", + "@types/send": "*" + } + }, + "node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "dev": true + }, + "node_modules/@types/uuid": { + "version": "9.0.8", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.8.tgz", + "integrity": "sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==", + "dev": true + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.11.0.tgz", + "integrity": "sha512-KhGn2LjW1PJT2A/GfDpiyOfS4a8xHQv2myUagTM5+zsormOmBlYsnQ6pobJ8XxJmh6hnHwa2Mbe3fPrDJoDhbA==", + "dev": true, + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.11.0", + "@typescript-eslint/type-utils": "8.11.0", + "@typescript-eslint/utils": "8.11.0", + "@typescript-eslint/visitor-keys": "8.11.0", + "graphemer": "^1.4.0", + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", + "eslint": "^8.57.0 || ^9.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.11.0.tgz", + "integrity": "sha512-lmt73NeHdy1Q/2ul295Qy3uninSqi6wQI18XwSpm8w0ZbQXUpjCAWP1Vlv/obudoBiIjJVjlztjQ+d/Md98Yxg==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "8.11.0", + "@typescript-eslint/types": "8.11.0", + "@typescript-eslint/typescript-estree": "8.11.0", + "@typescript-eslint/visitor-keys": "8.11.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.11.0.tgz", + "integrity": "sha512-Uholz7tWhXmA4r6epo+vaeV7yjdKy5QFCERMjs1kMVsLRKIrSdM6o21W2He9ftp5PP6aWOVpD5zvrvuHZC0bMQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "8.11.0", + "@typescript-eslint/visitor-keys": "8.11.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.11.0.tgz", + "integrity": "sha512-ItiMfJS6pQU0NIKAaybBKkuVzo6IdnAhPFZA/2Mba/uBjuPQPet/8+zh5GtLHwmuFRShZx+8lhIs7/QeDHflOg==", + "dev": true, + "dependencies": { + "@typescript-eslint/typescript-estree": "8.11.0", + "@typescript-eslint/utils": "8.11.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.11.0.tgz", + "integrity": "sha512-tn6sNMHf6EBAYMvmPUaKaVeYvhUsrE6x+bXQTxjQRp360h1giATU0WvgeEys1spbvb5R+VpNOZ+XJmjD8wOUHw==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.11.0.tgz", + "integrity": "sha512-yHC3s1z1RCHoCz5t06gf7jH24rr3vns08XXhfEqzYpd6Hll3z/3g23JRi0jM8A47UFKNc3u/y5KIMx8Ynbjohg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "8.11.0", + "@typescript-eslint/visitor-keys": "8.11.0", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.11.0.tgz", + "integrity": "sha512-CYiX6WZcbXNJV7UNB4PLDIBtSdRmRI/nb0FMyqHPTQD1rMjA0foPLaPUV39C/MxkTd/QKSeX+Gb34PPsDVC35g==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "8.11.0", + "@typescript-eslint/types": "8.11.0", + "@typescript-eslint/typescript-estree": "8.11.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.11.0.tgz", + "integrity": "sha512-EaewX6lxSjRJnc+99+dqzTeoDZUfyrA52d2/HRrkI830kgovWsmIiTfmr0NZorzqic7ga+1bS60lRBUgR3n/Bw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "8.11.0", + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "dev": true + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.3.tgz", + "integrity": "sha512-NooDe9GpHGqNns1i8XDERg0Vsg5SSYRhRxxyTGogUdkdNt47jal+fbuYi+Yfq6pzRCKXyoPcWisfxE6RIM3GKA==", + "dev": true, + "dependencies": { + "@babel/core": "^7.25.2", + "@babel/plugin-transform-react-jsx-self": "^7.24.7", + "@babel/plugin-transform-react-jsx-source": "^7.24.7", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.14.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0" + } + }, + "node_modules/@vitest/expect": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.0.5.tgz", + "integrity": "sha512-yHZtwuP7JZivj65Gxoi8upUN2OzHTi3zVfjwdpu2WrvCZPLwsJ2Ey5ILIPccoW23dd/zQBlJ4/dhi7DWNyXCpA==", + "dev": true, + "dependencies": { + "@vitest/spy": "2.0.5", + "@vitest/utils": "2.0.5", + "chai": "^5.1.1", + "tinyrainbow": "^1.2.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/expect/node_modules/@vitest/pretty-format": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.0.5.tgz", + "integrity": "sha512-h8k+1oWHfwTkyTkb9egzwNMfJAEx4veaPSnMeKbVSjp4euqGSbQlm5+6VHwTr7u4FJslVVsUG5nopCaAYdOmSQ==", + "dev": true, + "dependencies": { + "tinyrainbow": "^1.2.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/expect/node_modules/@vitest/utils": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.0.5.tgz", + "integrity": "sha512-d8HKbqIcya+GR67mkZbrzhS5kKhtp8dQLcmRZLGTscGVg7yImT82cIrhtn2L8+VujWcy6KZweApgNmPsTAO/UQ==", + "dev": true, + "dependencies": { + "@vitest/pretty-format": "2.0.5", + "estree-walker": "^3.0.3", + "loupe": "^3.1.1", + "tinyrainbow": "^1.2.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/expect/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/@vitest/pretty-format": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.3.tgz", + "integrity": "sha512-XH1XdtoLZCpqV59KRbPrIhFCOO0hErxrQCMcvnQete3Vibb9UeIOX02uFPfVn3Z9ZXsq78etlfyhnkmIZSzIwQ==", + "dev": true, + "dependencies": { + "tinyrainbow": "^1.2.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/spy": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.0.5.tgz", + "integrity": "sha512-c/jdthAhvJdpfVuaexSrnawxZz6pywlTPe84LUB2m/4t3rl2fTo9NFGBG4oWgaD+FTgDDV8hJ/nibT7IfH3JfA==", + "dev": true, + "dependencies": { + "tinyspy": "^3.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.3.tgz", + "integrity": "sha512-xpiVfDSg1RrYT0tX6czgerkpcKFmFOF/gCr30+Mve5V2kewCy4Prn1/NDMSRwaSmT7PRaOF83wu+bEtsY1wrvA==", + "dev": true, + "dependencies": { + "@vitest/pretty-format": "2.1.3", + "loupe": "^3.1.1", + "tinyrainbow": "^1.2.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.13.0.tgz", + "integrity": "sha512-8zSiw54Oxrdym50NlZ9sUusyO1Z1ZchgRLWRaK6c86XJFClyCgFKetdowBg5bKxyp/u+CDBJG4Mpp0m3HLZl9w==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-escapes": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-7.0.0.tgz", + "integrity": "sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==", + "dev": true, + "dependencies": { + "environment": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==" + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/aria-hidden": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/aria-hidden/-/aria-hidden-1.2.4.tgz", + "integrity": "sha512-y+CcFFwelSXpLZk/7fMB2mUbGtX9lKycf1MWJ7CaTIERyitVlyQx6C+sxcROU2BAJ24OiZyK+8wj2i8AlBoS3A==", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "dev": true, + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dev": true + }, + "node_modules/assertion-error": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", + "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/ast-types": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.16.1.tgz", + "integrity": "sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==", + "dev": true, + "dependencies": { + "tslib": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/autoprefixer": { + "version": "10.4.20", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.20.tgz", + "integrity": "sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "browserslist": "^4.23.3", + "caniuse-lite": "^1.0.30001646", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/better-opn": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/better-opn/-/better-opn-3.0.2.tgz", + "integrity": "sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==", + "dev": true, + "dependencies": { + "open": "^8.0.4" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/body-parser": { + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.13.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-assert": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/browser-assert/-/browser-assert-1.2.1.tgz", + "integrity": "sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ==", + "dev": true + }, + "node_modules/browserslist": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.0.tgz", + "integrity": "sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001663", + "electron-to-chromium": "^1.5.28", + "node-releases": "^2.0.18", + "update-browserslist-db": "^1.1.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001669", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001669.tgz", + "integrity": "sha512-DlWzFDJqstqtIVx1zeSpIMLjunf5SmwOw0N2Ck/QSQdS8PLS4+9HrLaYei4w8BIAL7IB/UEDu889d8vhCTPA0w==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chai": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.1.1.tgz", + "integrity": "sha512-pT1ZgP8rPNqUgieVaEY+ryQr6Q4HXNg8Ei9UnLUrjN4IA7dvQC5JB+/kxVcPNDHyBcc/26CXPkbNzq3qwrOEKA==", + "dev": true, + "dependencies": { + "assertion-error": "^2.0.1", + "check-error": "^2.1.1", + "deep-eql": "^5.0.1", + "loupe": "^3.1.0", + "pathval": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/check-error": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", + "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", + "dev": true, + "engines": { + "node": ">= 16" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/chromatic": { + "version": "11.14.0", + "resolved": "https://registry.npmjs.org/chromatic/-/chromatic-11.14.0.tgz", + "integrity": "sha512-qt7xXpdrwssBtXWv30aW46HAK10bF4Ep7SMjtMQhD61Fg4IS9aImT0WFeig7utpXYHOx0eSysjwhz0cgYz9SDg==", + "dev": true, + "bin": { + "chroma": "dist/bin.js", + "chromatic": "dist/bin.js", + "chromatic-cli": "dist/bin.js" + }, + "peerDependencies": { + "@chromatic-com/cypress": "^0.*.* || ^1.0.0", + "@chromatic-com/playwright": "^0.*.* || ^1.0.0" + }, + "peerDependenciesMeta": { + "@chromatic-com/cypress": { + "optional": true + }, + "@chromatic-com/playwright": { + "optional": true + } + } + }, + "node_modules/class-variance-authority": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.0.tgz", + "integrity": "sha512-jFI8IQw4hczaL4ALINxqLEXQbWcNjoSkloa4IaufXCJr6QawJyw7tuRysRsrE8w2p/4gGaxKIt/hX3qz/IbD1A==", + "dependencies": { + "clsx": "2.0.0" + }, + "funding": { + "url": "https://joebell.co.uk" + } + }, + "node_modules/class-variance-authority/node_modules/clsx": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.0.0.tgz", + "integrity": "sha512-rQ1+kcj+ttHG0MKVGBUXwayCCF1oh39BF5COIpRzuCEv8Mwjv0XucrI2ExNTOn9IlLifGClWQcU9BrZORvtw6Q==", + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-cursor": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", + "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", + "dev": true, + "dependencies": { + "restore-cursor": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-4.0.0.tgz", + "integrity": "sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==", + "dev": true, + "dependencies": { + "slice-ansi": "^5.0.0", + "string-width": "^7.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-truncate/node_modules/emoji-regex": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", + "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", + "dev": true + }, + "node_modules/cli-truncate/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, + "node_modules/cookie": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "dev": true + }, + "node_modules/cross-fetch": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz", + "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==", + "dependencies": { + "node-fetch": "^2.6.12" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css.escape": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/css.escape/-/css.escape-1.5.1.tgz", + "integrity": "sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==", + "dev": true + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "devOptional": true + }, + "node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-eql": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", + "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-node-es": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/detect-node-es/-/detect-node-es-1.1.0.tgz", + "integrity": "sha512-ypdmJU/TbBby2Dxibuv7ZLW3Bs1QEmM7nHjEANfohJLvE0XVujisn1qPJcZxg+qDucsr+bP6fLD1rPS3AhJ7EQ==" + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==" + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dom-accessibility-api": { + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.5.16.tgz", + "integrity": "sha512-X7BJ2yElsnOJ30pZF4uIIDfBEVgF4XEBxL9Bxhy6dnrm5hkzqmsWHGTiHqRiITNhMyFLyAiWndIJP7Z1NTteDg==", + "dev": true + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true + }, + "node_modules/electron-to-chromium": { + "version": "1.5.41", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.41.tgz", + "integrity": "sha512-dfdv/2xNjX0P8Vzme4cfzHqnPm5xsZXwsolTYr0eyW18IUmNyG08vL+fttvinTfhKfIKdRoqkDIC9e9iWQCNYQ==", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/environment": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/environment/-/environment-1.1.0.tgz", + "integrity": "sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.5.4.tgz", + "integrity": "sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==", + "dev": true + }, + "node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" + } + }, + "node_modules/esbuild-register": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/esbuild-register/-/esbuild-register-3.6.0.tgz", + "integrity": "sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==", + "dev": true, + "dependencies": { + "debug": "^4.3.4" + }, + "peerDependencies": { + "esbuild": ">=0.12 <1" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/escodegen": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", + "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", + "dev": true, + "dependencies": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" + }, + "engines": { + "node": ">=6.0" + }, + "optionalDependencies": { + "source-map": "~0.6.1" + } + }, + "node_modules/eslint": { + "version": "9.13.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.13.0.tgz", + "integrity": "sha512-EYZK6SX6zjFHST/HRytOdA/zE72Cq/bfw45LSyuwrdvcclb/gqV8RRQxywOBEWO2+WDpva6UZa4CcDeJKzUCFA==", + "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.11.0", + "@eslint/config-array": "^0.18.0", + "@eslint/core": "^0.7.0", + "@eslint/eslintrc": "^3.1.0", + "@eslint/js": "9.13.0", + "@eslint/plugin-kit": "^0.2.0", + "@humanfs/node": "^0.16.5", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.3.1", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.1.0", + "eslint-visitor-keys": "^4.1.0", + "espree": "^10.2.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "5.1.0-rc-fb9a90fa48-20240614", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.1.0-rc-fb9a90fa48-20240614.tgz", + "integrity": "sha512-xsiRwaDNF5wWNC4ZHLut+x/YcAxksUd9Rizt7LaEn3bV8VyYRpXnRJQlLOfYaVy9esk4DFP4zPPnoNVjq5Gc0w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" + } + }, + "node_modules/eslint-plugin-react-refresh": { + "version": "0.4.13", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.13.tgz", + "integrity": "sha512-f1EppwrpJRWmqDTyvAyomFVDYRtrS7iTEqv3nokETnMiMzs2SSTmKRTACce4O2p4jYyowiSMvpdwC/RLcMFhuQ==", + "dev": true, + "peerDependencies": { + "eslint": ">=7" + } + }, + "node_modules/eslint-plugin-storybook": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-storybook/-/eslint-plugin-storybook-0.10.1.tgz", + "integrity": "sha512-YpxkdqyiKpMIrRquuvBaCinsqmZJ86JvXRX/gtRa4Qctpk0ipFt2cWqEjkB1HHWWG0DVRXlUBKHjRogC2Ig1fg==", + "dev": true, + "dependencies": { + "@storybook/csf": "^0.1.11", + "@typescript-eslint/utils": "^8.8.1", + "ts-dedent": "^2.2.0" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "eslint": ">=6" + } + }, + "node_modules/eslint-scope": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.1.0.tgz", + "integrity": "sha512-14dSvlhaVhKKsa9Fx1l8A17s7ah7Ef7wCakJ10LYk6+GYmP9yDti2oq2SEwcyndt6knfcZyhyxwY3i9yL78EQw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.1.0.tgz", + "integrity": "sha512-Q7lok0mqMUSf5a/AdAZkA5a/gHcO6snwQClVNNvFKCAVlxXucdU8pKydU5ZVZjBx5xr37vGbFFWtLQYreLzrZg==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/eslint/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/eslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/eslint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/espree": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.2.0.tgz", + "integrity": "sha512-upbkBJbckcCNBDBDXEbuhjbP68n+scUd3k/U2EkyM9nw+I/jPiL4cLF/Al06CF96wRltFda16sxDFrxsI1v0/g==", + "dev": true, + "dependencies": { + "acorn": "^8.12.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.1.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "dev": true + }, + "node_modules/execa": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", + "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^8.0.1", + "human-signals": "^5.0.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^4.1.0", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": ">=16.17" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/express": { + "version": "4.21.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz", + "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==", + "dev": true, + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.3", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.7.1", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.3.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.10", + "proxy-addr": "~2.0.7", + "qs": "6.13.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.19.0", + "serve-static": "1.16.2", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/filesize": { + "version": "10.1.6", + "resolved": "https://registry.npmjs.org/filesize/-/filesize-10.1.6.tgz", + "integrity": "sha512-sJslQKU2uM33qH5nqewAwVB2QgR6w1aMNsYUp3aN5rMRyXEwJGmZvaWzeJFNTOXWlHQyBFCWrdj3fV/fsTOX8w==", + "dev": true, + "engines": { + "node": ">= 10.4.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "dev": true + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/foreground-child": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "dev": true, + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "11.2.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.2.0.tgz", + "integrity": "sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-east-asian-width": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-east-asian-width/-/get-east-asian-width-1.3.0.tgz", + "integrity": "sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dev": true, + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-nonce": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-nonce/-/get-nonce-1.0.1.tgz", + "integrity": "sha512-FJhYRoDaiatfEkUK8HKlicmu/3SGFD51q3itKDGoSTysQJBnfOcxU5GxnhE1E6soB76MbT0MBtnKJuXyAx+96Q==", + "engines": { + "node": ">=6" + } + }, + "node_modules/get-stream": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", + "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", + "dev": true, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-tsconfig": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.8.1.tgz", + "integrity": "sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==", + "dev": true, + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/github-slugger": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-2.0.0.tgz", + "integrity": "sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==", + "dev": true + }, + "node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/globals": { + "version": "15.11.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.11.0.tgz", + "integrity": "sha512-yeyNSjdbyVaWurlwCpcA6XNBrHTMIeDdj0/hnvX/OLJ9ekOXYbLsLinH/MucQyGvNnXhidTdNhTtJaffL2sMfw==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hast-util-heading-rank": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-heading-rank/-/hast-util-heading-rank-3.0.0.tgz", + "integrity": "sha512-EJKb8oMUXVHcWZTDepnr+WNbfnXKFNf9duMesmr4S8SXTJBJ9M4Yok08pu9vxdJwdlGRhVumk9mEhkEvKGifwA==", + "dev": true, + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-is-element": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-3.0.0.tgz", + "integrity": "sha512-Val9mnv2IWpLbNPqc/pUem+a7Ipj2aHacCwgNfTiK0vJKl0LF+4Ba4+v1oPHFpf3bLYmreq0/l3Gud9S5OH42g==", + "dev": true, + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-to-string": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/hast-util-to-string/-/hast-util-to-string-3.0.1.tgz", + "integrity": "sha512-XelQVTDWvqcl3axRfI0xSeoVKzyIFPwsAGSLIsKdJKQMXDYJS4WYrBNF/8J7RdhIcFI2BOHgAifggsvsxp/3+A==", + "dev": true, + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/html-parse-stringify": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/html-parse-stringify/-/html-parse-stringify-3.0.1.tgz", + "integrity": "sha512-KknJ50kTInJ7qIScF3jeaFRpMpE8/lfiTdzf/twXyPBLAGrLRTmkz3AdTnKeh40X8k9L2fdYwEp/42WGXIRGcg==", + "dependencies": { + "void-elements": "3.1.0" + } + }, + "node_modules/html-tags": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-3.3.1.tgz", + "integrity": "sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/human-signals": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", + "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", + "dev": true, + "engines": { + "node": ">=16.17.0" + } + }, + "node_modules/husky": { + "version": "9.1.6", + "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.6.tgz", + "integrity": "sha512-sqbjZKK7kf44hfdE94EoX8MZNk0n7HeW37O4YrVGCF4wzgQjp+akPAkfUK5LZ6KuR/6sqeAVuXHji+RzQgOn5A==", + "dev": true, + "bin": { + "husky": "bin.js" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/typicode" + } + }, + "node_modules/i18next": { + "version": "23.16.3", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-23.16.3.tgz", + "integrity": "sha512-e8q9gFyjrou5v/hBXgRwtWVK7Gp5So19Kf42spJlijGDfkin5abYFHlblonmD2GFYcsf9XIT7MpVuveJq/VCcA==", + "funding": [ + { + "type": "individual", + "url": "https://locize.com" + }, + { + "type": "individual", + "url": "https://locize.com/i18next.html" + }, + { + "type": "individual", + "url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project" + } + ], + "dependencies": { + "@babel/runtime": "^7.23.2" + } + }, + "node_modules/i18next-browser-languagedetector": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/i18next-browser-languagedetector/-/i18next-browser-languagedetector-8.0.0.tgz", + "integrity": "sha512-zhXdJXTTCoG39QsrOCiOabnWj2jecouOqbchu3EfhtSHxIB5Uugnm9JaizenOy39h7ne3+fLikIjeW88+rgszw==", + "dependencies": { + "@babel/runtime": "^7.23.2" + } + }, + "node_modules/i18next-http-backend": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/i18next-http-backend/-/i18next-http-backend-2.6.2.tgz", + "integrity": "sha512-Hp/kd8/VuoxIHmxsknJXjkTYYHzivAyAF15pzliKzk2TiXC25rZCEerb1pUFoxz4IVrG3fCvQSY51/Lu4ECV4A==", + "dependencies": { + "cross-fetch": "4.0.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-absolute-url": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-4.0.1.tgz", + "integrity": "sha512-/51/TKE88Lmm7Gc4/8btclNXWS+g50wXhYJq8HWIBAGUBnoAdRu1aXeh364t/O7wXDAcTJDP8PNuNKWUDWie+A==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "dev": true, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "dev": true, + "dependencies": { + "which-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jiti": { + "version": "1.21.6", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", + "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsdoc-type-pratt-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-4.1.0.tgz", + "integrity": "sha512-Hicd6JK5Njt2QB6XYFS7ok9e37O8AYk3jTcppG4YVQnYjOemymvTcmc7OWsmq/Qqj5TdRFO5/x/tIPmBeRtGHg==", + "dev": true, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/jsesc": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "engines": { + "node": ">=10" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + }, + "node_modules/lint-staged": { + "version": "15.2.10", + "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-15.2.10.tgz", + "integrity": "sha512-5dY5t743e1byO19P9I4b3x8HJwalIznL5E1FWYnU6OWw33KxNBSLAc6Cy7F2PsFEO8FKnLwjwm5hx7aMF0jzZg==", + "dev": true, + "dependencies": { + "chalk": "~5.3.0", + "commander": "~12.1.0", + "debug": "~4.3.6", + "execa": "~8.0.1", + "lilconfig": "~3.1.2", + "listr2": "~8.2.4", + "micromatch": "~4.0.8", + "pidtree": "~0.6.0", + "string-argv": "~0.3.2", + "yaml": "~2.5.0" + }, + "bin": { + "lint-staged": "bin/lint-staged.js" + }, + "engines": { + "node": ">=18.12.0" + }, + "funding": { + "url": "https://opencollective.com/lint-staged" + } + }, + "node_modules/lint-staged/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/lint-staged/node_modules/commander": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", + "dev": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/lint-staged/node_modules/lilconfig": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", + "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/lint-staged/node_modules/yaml": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.1.tgz", + "integrity": "sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==", + "dev": true, + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/listr2": { + "version": "8.2.5", + "resolved": "https://registry.npmjs.org/listr2/-/listr2-8.2.5.tgz", + "integrity": "sha512-iyAZCeyD+c1gPyE9qpFu8af0Y+MRtmKOncdGoA2S5EY8iFq99dmmvkNnHiWo+pj0s7yH7l3KPIgee77tKpXPWQ==", + "dev": true, + "dependencies": { + "cli-truncate": "^4.0.0", + "colorette": "^2.0.20", + "eventemitter3": "^5.0.1", + "log-update": "^6.1.0", + "rfdc": "^1.4.1", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/listr2/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/listr2/node_modules/emoji-regex": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", + "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", + "dev": true + }, + "node_modules/listr2/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/listr2/node_modules/wrap-ansi": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", + "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "node_modules/log-update": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-6.1.0.tgz", + "integrity": "sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==", + "dev": true, + "dependencies": { + "ansi-escapes": "^7.0.0", + "cli-cursor": "^5.0.0", + "slice-ansi": "^7.1.0", + "strip-ansi": "^7.1.0", + "wrap-ansi": "^9.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-update/node_modules/emoji-regex": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.4.0.tgz", + "integrity": "sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==", + "dev": true + }, + "node_modules/log-update/node_modules/is-fullwidth-code-point": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-5.0.0.tgz", + "integrity": "sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==", + "dev": true, + "dependencies": { + "get-east-asian-width": "^1.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/slice-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-7.1.0.tgz", + "integrity": "sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.2.1", + "is-fullwidth-code-point": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/log-update/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "dev": true, + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-update/node_modules/wrap-ansi": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-9.0.0.tgz", + "integrity": "sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.2.1", + "string-width": "^7.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/loupe": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.2.tgz", + "integrity": "sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg==", + "dev": true + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/lucide-react": { + "version": "0.453.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.453.0.tgz", + "integrity": "sha512-kL+RGZCcJi9BvJtzg2kshO192Ddy9hv3ij+cPrVPWSRzgCWCVazoQJxOjAwgK53NomL07HB7GPHW120FimjNhQ==", + "peerDependencies": { + "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0-rc" + } + }, + "node_modules/lz-string": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", + "integrity": "sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==", + "dev": true, + "bin": { + "lz-string": "bin/bin.js" + } + }, + "node_modules/magic-string": { + "version": "0.30.12", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.12.tgz", + "integrity": "sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/map-or-similar": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/map-or-similar/-/map-or-similar-1.5.0.tgz", + "integrity": "sha512-0aF7ZmVon1igznGI4VS30yugpduQW3y3GkcgGJOp7d8x8QrizhigUxjI/m2UojsXXto+jLAH3KSz+xOJTiORjg==", + "dev": true + }, + "node_modules/markdown-to-jsx": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/markdown-to-jsx/-/markdown-to-jsx-7.5.0.tgz", + "integrity": "sha512-RrBNcMHiFPcz/iqIj0n3wclzHXjwS7mzjBNWecKKVhNTIxQepIix6Il/wZCn2Cg5Y1ow2Qi84+eJrryFRWBEWw==", + "dev": true, + "engines": { + "node": ">= 10" + }, + "peerDependencies": { + "react": ">= 0.14.0" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memoizerific": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/memoizerific/-/memoizerific-1.11.3.tgz", + "integrity": "sha512-/EuHYwAPdLtXwAwSZkh/Gutery6pD2KYd44oQLhAvQp/50mpyduZh8Q7PYHXTCJ+wuXxt7oij2LXyIJOOYFPog==", + "dev": true, + "dependencies": { + "map-or-similar": "^1.5.0" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", + "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mimic-function": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/mimic-function/-/mimic-function-5.0.1.tgz", + "integrity": "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-releases": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", + "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "dev": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-path": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", + "dev": true, + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", + "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/object-inspect": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz", + "integrity": "sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dev": true, + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "dev": true, + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==" + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==" + }, + "node_modules/path-to-regexp": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", + "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==", + "dev": true + }, + "node_modules/pathval": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz", + "integrity": "sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==", + "dev": true, + "engines": { + "node": ">= 14.16" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pidtree": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.6.0.tgz", + "integrity": "sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==", + "dev": true, + "bin": { + "pidtree": "bin/pidtree.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/polished": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/polished/-/polished-4.3.1.tgz", + "integrity": "sha512-OBatVyC/N7SCW/FaDHrSd+vn0o5cS855TOmYi4OkdWUMSJCET/xip//ch8xGUvtr3i44X9LVyWwQlRMTN3pwSA==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.17.8" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss": { + "version": "8.4.47", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz", + "integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.1.0", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-load-config": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-load-config/node_modules/lilconfig": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", + "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/postcss-nested": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", + "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "postcss-selector-parser": "^6.1.1" + }, + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==" + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", + "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", + "dev": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/pretty-format": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-27.5.1.tgz", + "integrity": "sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" + }, + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "dev": true, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dev": true, + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/prop-types/node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-colorful": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/react-colorful/-/react-colorful-5.6.1.tgz", + "integrity": "sha512-1exovf0uGTGyq5mXQT0zgQ80uvj2PCwvF8zY1RN9/vbJVSjSo3fsB/4L3ObbF7u70NduSiK4xu4Y6q1MHoUGEw==", + "dev": true, + "peerDependencies": { + "react": ">=16.8.0", + "react-dom": ">=16.8.0" + } + }, + "node_modules/react-confetti": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/react-confetti/-/react-confetti-6.1.0.tgz", + "integrity": "sha512-7Ypx4vz0+g8ECVxr88W9zhcQpbeujJAVqL14ZnXJ3I23mOI9/oBVTQ3dkJhUmB0D6XOtCZEM6N0Gm9PMngkORw==", + "dev": true, + "dependencies": { + "tween-functions": "^1.2.0" + }, + "engines": { + "node": ">=10.18" + }, + "peerDependencies": { + "react": "^16.3.0 || ^17.0.1 || ^18.0.0" + } + }, + "node_modules/react-docgen": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/react-docgen/-/react-docgen-7.1.0.tgz", + "integrity": "sha512-APPU8HB2uZnpl6Vt/+0AFoVYgSRtfiP6FLrZgPPTDmqSb2R4qZRbgd0A3VzIFxDt5e+Fozjx79WjLWnF69DK8g==", + "dev": true, + "dependencies": { + "@babel/core": "^7.18.9", + "@babel/traverse": "^7.18.9", + "@babel/types": "^7.18.9", + "@types/babel__core": "^7.18.0", + "@types/babel__traverse": "^7.18.0", + "@types/doctrine": "^0.0.9", + "@types/resolve": "^1.20.2", + "doctrine": "^3.0.0", + "resolve": "^1.22.1", + "strip-indent": "^4.0.0" + }, + "engines": { + "node": ">=16.14.0" + } + }, + "node_modules/react-docgen-typescript": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/react-docgen-typescript/-/react-docgen-typescript-2.2.2.tgz", + "integrity": "sha512-tvg2ZtOpOi6QDwsb3GZhOjDkkX0h8Z2gipvTg6OVMUyoYoURhEiRNePT8NZItTVCDh39JJHnLdfCOkzoLbFnTg==", + "dev": true, + "peerDependencies": { + "typescript": ">= 4.3.x" + } + }, + "node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } + }, + "node_modules/react-element-to-jsx-string": { + "version": "15.0.0", + "resolved": "https://registry.npmjs.org/react-element-to-jsx-string/-/react-element-to-jsx-string-15.0.0.tgz", + "integrity": "sha512-UDg4lXB6BzlobN60P8fHWVPX3Kyw8ORrTeBtClmIlGdkOOE+GYQSFvmEU5iLLpwp/6v42DINwNcwOhOLfQ//FQ==", + "dev": true, + "dependencies": { + "@base2/pretty-print-object": "1.0.1", + "is-plain-object": "5.0.0", + "react-is": "18.1.0" + }, + "peerDependencies": { + "react": "^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1 || ^18.0.0", + "react-dom": "^0.14.8 || ^15.0.1 || ^16.0.0 || ^17.0.1 || ^18.0.0" + } + }, + "node_modules/react-element-to-jsx-string/node_modules/react-is": { + "version": "18.1.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.1.0.tgz", + "integrity": "sha512-Fl7FuabXsJnV5Q1qIOQwx/sagGF18kogb4gpfcG4gjLBWO0WDiiz1ko/ExayuxE7InyQkBLkxRFG5oxY6Uu3Kg==", + "dev": true + }, + "node_modules/react-i18next": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-15.1.0.tgz", + "integrity": "sha512-zj3nJynMnZsy2gPZiOTC7XctCY5eQGqT3tcKMmfJWC9FMvgd+960w/adq61j8iPzpwmsXejqID9qC3Mqu1Xu2Q==", + "dependencies": { + "@babel/runtime": "^7.25.0", + "html-parse-stringify": "^3.0.1" + }, + "peerDependencies": { + "i18next": ">= 23.2.3", + "react": ">= 16.8.0" + }, + "peerDependenciesMeta": { + "react-dom": { + "optional": true + }, + "react-native": { + "optional": true + } + } + }, + "node_modules/react-is": { + "version": "17.0.2", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-17.0.2.tgz", + "integrity": "sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==", + "dev": true + }, + "node_modules/react-refresh": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", + "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-remove-scroll": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.6.0.tgz", + "integrity": "sha512-I2U4JVEsQenxDAKaVa3VZ/JeJZe0/2DxPWL8Tj8yLKctQJQiZM52pn/GWFpSp8dftjM3pSAHVJZscAnC/y+ySQ==", + "dependencies": { + "react-remove-scroll-bar": "^2.3.6", + "react-style-singleton": "^2.2.1", + "tslib": "^2.1.0", + "use-callback-ref": "^1.3.0", + "use-sidecar": "^1.1.2" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-remove-scroll-bar": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.6.tgz", + "integrity": "sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==", + "dependencies": { + "react-style-singleton": "^2.2.1", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-style-singleton": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz", + "integrity": "sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==", + "dependencies": { + "get-nonce": "^1.0.0", + "invariant": "^2.2.4", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/recast": { + "version": "0.23.9", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.23.9.tgz", + "integrity": "sha512-Hx/BGIbwj+Des3+xy5uAtAbdCyqK9y9wbBcDFDYanLS9JnMqf7OeF87HQwUimE87OEc72mr6tkKUKMBBL+hF9Q==", + "dev": true, + "dependencies": { + "ast-types": "^0.16.1", + "esprima": "~4.0.0", + "source-map": "~0.6.1", + "tiny-invariant": "^1.3.3", + "tslib": "^2.0.1" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/redent/node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" + }, + "node_modules/rehype-external-links": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/rehype-external-links/-/rehype-external-links-3.0.0.tgz", + "integrity": "sha512-yp+e5N9V3C6bwBeAC4n796kc86M4gJCdlVhiMTxIrJG5UHDMh+PJANf9heqORJbt1nrCbDwIlAZKjANIaVBbvw==", + "dev": true, + "dependencies": { + "@types/hast": "^3.0.0", + "@ungap/structured-clone": "^1.0.0", + "hast-util-is-element": "^3.0.0", + "is-absolute-url": "^4.0.0", + "space-separated-tokens": "^2.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/rehype-slug": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/rehype-slug/-/rehype-slug-6.0.0.tgz", + "integrity": "sha512-lWyvf/jwu+oS5+hL5eClVd3hNdmwM1kAC0BUvEGD19pajQMIzcNUd/k9GsfQ+FfECvX+JE+e9/btsKH0EjJT6A==", + "dev": true, + "dependencies": { + "@types/hast": "^3.0.0", + "github-slugger": "^2.0.0", + "hast-util-heading-rank": "^3.0.0", + "hast-util-to-string": "^3.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/restore-cursor": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", + "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", + "dev": true, + "dependencies": { + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/restore-cursor/node_modules/onetime": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", + "dev": true, + "dependencies": { + "mimic-function": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rfdc": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.4.1.tgz", + "integrity": "sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==", + "dev": true + }, + "node_modules/rollup": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.24.0.tgz", + "integrity": "sha512-DOmrlGSXNk1DM0ljiQA+i+o0rSLhtii1je5wgk60j49d1jHT5YYttBv1iWOnYSTG+fZZESUOSNiAl89SIet+Cg==", + "dev": true, + "dependencies": { + "@types/estree": "1.0.6" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.24.0", + "@rollup/rollup-android-arm64": "4.24.0", + "@rollup/rollup-darwin-arm64": "4.24.0", + "@rollup/rollup-darwin-x64": "4.24.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.24.0", + "@rollup/rollup-linux-arm-musleabihf": "4.24.0", + "@rollup/rollup-linux-arm64-gnu": "4.24.0", + "@rollup/rollup-linux-arm64-musl": "4.24.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.24.0", + "@rollup/rollup-linux-riscv64-gnu": "4.24.0", + "@rollup/rollup-linux-s390x-gnu": "4.24.0", + "@rollup/rollup-linux-x64-gnu": "4.24.0", + "@rollup/rollup-linux-x64-musl": "4.24.0", + "@rollup/rollup-win32-arm64-msvc": "4.24.0", + "@rollup/rollup-win32-ia32-msvc": "4.24.0", + "@rollup/rollup-win32-x64-msvc": "4.24.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/send": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/send/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/serve-static": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "dev": true, + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.19.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/slice-ansi": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-5.0.0.tgz", + "integrity": "sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-4.0.0.tgz", + "integrity": "sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/storybook": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/storybook/-/storybook-8.3.6.tgz", + "integrity": "sha512-9GVbtej6ZzPRUM7KRQ7848506FfHrUiJGqPuIQdoSJd09EmuEoLjmLAgEOmrHBQKgGYMaM7Vh9GsTLim6vwZTQ==", + "dev": true, + "dependencies": { + "@storybook/core": "8.3.6" + }, + "bin": { + "getstorybook": "bin/index.cjs", + "sb": "bin/index.cjs", + "storybook": "bin/index.cjs" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/storybook" + } + }, + "node_modules/string-argv": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", + "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", + "dev": true, + "engines": { + "node": ">=0.6.19" + } + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-indent": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-4.0.0.tgz", + "integrity": "sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==", + "dev": true, + "dependencies": { + "min-indent": "^1.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/sucrase": { + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "^10.3.10", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tailwind-merge": { + "version": "2.5.4", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.5.4.tgz", + "integrity": "sha512-0q8cfZHMu9nuYP/b5Shb7Y7Sh1B7Nnl5GqNr1U+n2p6+mybvRtayrQ+0042Z5byvTA8ihjlP8Odo8/VnHbZu4Q==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/dcastil" + } + }, + "node_modules/tailwindcss": { + "version": "3.4.14", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.14.tgz", + "integrity": "sha512-IcSvOcTRcUtQQ7ILQL5quRDg7Xs93PdJEk1ZLbhhvJc7uj/OAhYOnruEiwnGgBvUtaUAJ8/mhSw1o8L2jCiENA==", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.0", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.21.0", + "lilconfig": "^2.1.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.23", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.1", + "postcss-nested": "^6.0.1", + "postcss-selector-parser": "^6.0.11", + "resolve": "^1.22.2", + "sucrase": "^3.32.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tailwindcss-animate": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/tailwindcss-animate/-/tailwindcss-animate-1.0.7.tgz", + "integrity": "sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==", + "peerDependencies": { + "tailwindcss": ">=3.0.0 || insiders" + } + }, + "node_modules/telejson": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/telejson/-/telejson-7.2.0.tgz", + "integrity": "sha512-1QTEcJkJEhc8OnStBx/ILRu5J2p0GjvWsBx56bmZRqnrkdBMUe+nX92jxV+p3dB4CP6PZCdJMQJwCggkNBMzkQ==", + "dev": true, + "dependencies": { + "memoizerific": "^1.11.3" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tiny-invariant": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", + "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==", + "dev": true + }, + "node_modules/tinyrainbow": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-1.2.0.tgz", + "integrity": "sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==", + "dev": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tinyspy": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.2.tgz", + "integrity": "sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==", + "dev": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/ts-api-utils": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", + "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", + "dev": true, + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, + "node_modules/ts-dedent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz", + "integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==", + "dev": true, + "engines": { + "node": ">=6.10" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==" + }, + "node_modules/tsconfig-paths": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", + "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", + "dev": true, + "dependencies": { + "json5": "^2.2.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tslib": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.0.tgz", + "integrity": "sha512-jWVzBLplnCmoaTr13V9dYbiQ99wvZRd0vNWaDRg+aVYRcjDF3nDksxFDE/+fkXnKhpnUUkmx5pK/v8mCtLVqZA==" + }, + "node_modules/tsx": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.19.1.tgz", + "integrity": "sha512-0flMz1lh74BR4wOvBjuh9olbnwqCPc35OOlfyzHba0Dc+QNUeWX/Gq2YTbnwcWPO3BMd8fkzRVrHcsR+a7z7rA==", + "dev": true, + "dependencies": { + "esbuild": "~0.23.0", + "get-tsconfig": "^4.7.5" + }, + "bin": { + "tsx": "dist/cli.mjs" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + } + }, + "node_modules/tsx/node_modules/@esbuild/aix-ppc64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.1.tgz", + "integrity": "sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/android-arm": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.23.1.tgz", + "integrity": "sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/android-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.23.1.tgz", + "integrity": "sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/android-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.23.1.tgz", + "integrity": "sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/darwin-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.23.1.tgz", + "integrity": "sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/darwin-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.23.1.tgz", + "integrity": "sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/freebsd-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.1.tgz", + "integrity": "sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/freebsd-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.23.1.tgz", + "integrity": "sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/linux-arm": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.23.1.tgz", + "integrity": "sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/linux-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.23.1.tgz", + "integrity": "sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/linux-ia32": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.23.1.tgz", + "integrity": "sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/linux-loong64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.23.1.tgz", + "integrity": "sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/linux-mips64el": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.23.1.tgz", + "integrity": "sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/linux-ppc64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.23.1.tgz", + "integrity": "sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/linux-riscv64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.23.1.tgz", + "integrity": "sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/linux-s390x": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.23.1.tgz", + "integrity": "sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/linux-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.1.tgz", + "integrity": "sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/netbsd-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.23.1.tgz", + "integrity": "sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/openbsd-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.23.1.tgz", + "integrity": "sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/sunos-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.23.1.tgz", + "integrity": "sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/win32-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.23.1.tgz", + "integrity": "sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/win32-ia32": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.23.1.tgz", + "integrity": "sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/win32-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.23.1.tgz", + "integrity": "sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/esbuild": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.1.tgz", + "integrity": "sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.23.1", + "@esbuild/android-arm": "0.23.1", + "@esbuild/android-arm64": "0.23.1", + "@esbuild/android-x64": "0.23.1", + "@esbuild/darwin-arm64": "0.23.1", + "@esbuild/darwin-x64": "0.23.1", + "@esbuild/freebsd-arm64": "0.23.1", + "@esbuild/freebsd-x64": "0.23.1", + "@esbuild/linux-arm": "0.23.1", + "@esbuild/linux-arm64": "0.23.1", + "@esbuild/linux-ia32": "0.23.1", + "@esbuild/linux-loong64": "0.23.1", + "@esbuild/linux-mips64el": "0.23.1", + "@esbuild/linux-ppc64": "0.23.1", + "@esbuild/linux-riscv64": "0.23.1", + "@esbuild/linux-s390x": "0.23.1", + "@esbuild/linux-x64": "0.23.1", + "@esbuild/netbsd-x64": "0.23.1", + "@esbuild/openbsd-arm64": "0.23.1", + "@esbuild/openbsd-x64": "0.23.1", + "@esbuild/sunos-x64": "0.23.1", + "@esbuild/win32-arm64": "0.23.1", + "@esbuild/win32-ia32": "0.23.1", + "@esbuild/win32-x64": "0.23.1" + } + }, + "node_modules/tween-functions": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/tween-functions/-/tween-functions-1.2.0.tgz", + "integrity": "sha512-PZBtLYcCLtEcjL14Fzb1gSxPBeL7nWvGhO5ZFPGqziCcr8uvHp0NDmdjBchp6KHL+tExcg0m3NISmKxhU394dA==", + "dev": true + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "2.19.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-2.19.0.tgz", + "integrity": "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==", + "dev": true, + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typescript": { + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz", + "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/typescript-eslint": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.11.0.tgz", + "integrity": "sha512-cBRGnW3FSlxaYwU8KfAewxFK5uzeOAp0l2KebIlPDOT5olVi65KDG/yjBooPBG0kGW/HLkoz1c/iuBFehcS3IA==", + "dev": true, + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.11.0", + "@typescript-eslint/parser": "8.11.0", + "@typescript-eslint/utils": "8.11.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "dev": true + }, + "node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "dev": true, + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/unplugin": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/unplugin/-/unplugin-1.14.1.tgz", + "integrity": "sha512-lBlHbfSFPToDYp9pjXlUEFVxYLaue9f9T1HC+4OHlmj+HnMDdz9oZY+erXfoCe/5V/7gKUSY2jpXPb9S7f0f/w==", + "dev": true, + "dependencies": { + "acorn": "^8.12.1", + "webpack-virtual-modules": "^0.6.2" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "webpack-sources": "^3" + }, + "peerDependenciesMeta": { + "webpack-sources": { + "optional": true + } + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", + "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/use-callback-ref": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.2.tgz", + "integrity": "sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/use-sidecar": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/use-sidecar/-/use-sidecar-1.1.2.tgz", + "integrity": "sha512-epTbsLuzZ7lPClpz2TyryBfztm7m+28DlEv2ZCQ3MDr5ssiwyOwGH/e5F9CkfWjJ1t4clvI58yF822/GUkjjhw==", + "dependencies": { + "detect-node-es": "^1.1.0", + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "@types/react": "^16.9.0 || ^17.0.0 || ^18.0.0", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "dev": true, + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vite": { + "version": "5.4.9", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.9.tgz", + "integrity": "sha512-20OVpJHh0PAM0oSOELa5GaZNWeDjcAvQjGXy2Uyr+Tp+/D2/Hdz6NLgpJLsarPTA2QJ6v8mX2P1ZfbsSKvdMkg==", + "dev": true, + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/void-elements": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz", + "integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/webpack-virtual-modules": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz", + "integrity": "sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==", + "dev": true + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "dev": true, + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/ws": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", + "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/yaml": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.0.tgz", + "integrity": "sha512-a6ae//JvKDEra2kdi1qzCyrJW/WZCgFi8ydDV+eXExl95t+5R+ijnqHJbz9tmMh8FUjx3iv2fCQ4dclAQlO2UQ==", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/docs/landing-page/package.json b/docs/landing-page/package.json new file mode 100644 index 00000000000..2df3b30daab --- /dev/null +++ b/docs/landing-page/package.json @@ -0,0 +1,77 @@ +{ + "name": "landing-page", + "private": true, + "version": "0.0.0", + "type": "module", + "engines": { + "node": ">=20.18.3" + }, + "scripts": { + "test": "npm run build", + "dev": "vite", + "build": "tsc -b && vite build && npx tsx scripts/renderTopNavigation.tsx && npx tsx scripts/insertRootHtml.tsx", + "lint": "eslint .", + "preview": "vite preview", + "prepare": "cd ../../ && husky docs/landing-page/.husky", + "storybook": "storybook dev -p 6006", + "build-storybook": "storybook build" + }, + "dependencies": { + "@radix-ui/react-dialog": "^1.1.2", + "@radix-ui/react-icons": "^1.3.0", + "@radix-ui/react-navigation-menu": "^1.2.1", + "@radix-ui/react-slot": "^1.1.0", + "class-variance-authority": "^0.7.0", + "clsx": "^2.1.1", + "i18next": "^23.16.3", + "i18next-browser-languagedetector": "^8.0.0", + "i18next-http-backend": "^2.6.2", + "lucide-react": "^0.453.0", + "react": "^18.3.1", + "react-dom": "^18.3.1", + "react-i18next": "^15.1.0", + "tailwind-merge": "^2.5.4", + "tailwindcss-animate": "^1.0.7" + }, + "devDependencies": { + "@chromatic-com/storybook": "^1.9.0", + "@eslint/js": "^9.11.1", + "@storybook/addon-essentials": "^8.3.6", + "@storybook/addon-interactions": "^8.3.6", + "@storybook/addon-links": "^8.3.6", + "@storybook/addon-onboarding": "^8.3.6", + "@storybook/addon-themes": "^8.3.6", + "@storybook/blocks": "^8.3.6", + "@storybook/react": "^8.3.6", + "@storybook/react-vite": "^8.3.6", + "@storybook/test": "^8.3.6", + "@types/node": "^22.7.7", + "@types/react": "^18.3.10", + "@types/react-dom": "^18.3.0", + "@vitejs/plugin-react": "^4.3.2", + "autoprefixer": "^10.4.20", + "eslint": "^9.11.1", + "eslint-plugin-react-hooks": "^5.1.0-rc.0", + "eslint-plugin-react-refresh": "^0.4.12", + "eslint-plugin-storybook": "^0.10.1", + "globals": "^15.9.0", + "husky": "^9.1.6", + "lint-staged": "^15.2.10", + "postcss": "^8.4.47", + "prettier": "^3.3.3", + "storybook": "^8.3.6", + "tailwindcss": "^3.4.14", + "tsx": "^4.19.1", + "typescript": "^5.5.3", + "typescript-eslint": "^8.7.0", + "vite": "^5.4.8" + }, + "lint-staged": { + "**/*": "prettier --write --ignore-unknown" + }, + "eslintConfig": { + "extends": [ + "plugin:storybook/recommended" + ] + } +} diff --git a/docs/landing-page/postcss.config.js b/docs/landing-page/postcss.config.js new file mode 100644 index 00000000000..2aa7205d4b4 --- /dev/null +++ b/docs/landing-page/postcss.config.js @@ -0,0 +1,6 @@ +export default { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +}; diff --git a/docs/landing-page/public/favicon-180x180.png b/docs/landing-page/public/favicon-180x180.png new file mode 100644 index 0000000000000000000000000000000000000000..b7aaae8fb156683813d608c9f2cfe9d19db54d18 GIT binary patch literal 1343 zcma)6`&ZHj6laA%h7V3F)TV+nsW9!~V`^gGq*5`oY3gFANkiswy`V7A%CC9SusW@& zWTDKR?Bo<`aP+81wR|;A5OZn-SRMsrnkHy!$ml=lp8NWo`}*bHTbf8d7yn z>6g!ZzUfbznw&$!@$Sr2t+1)K!OF#Fxe4c*?XA9?KEZd5G)81MbO+~Z0j{-)*%cSX zB7k)0VP(TS=*KvyguX;n3EhD`U;xfICF;F4GZO&%8J?IMdu%yo_DUVAHO|={U9Fp? zTfQNj-3hMxg;Vi7g|bZ8D>TtRL}R~Yw0)Ht_Q4H+YxuqA{dvOm;=5-&t0quV31zO+ zvDe3-GBxEV^?X3QzT^3E>h1)J^(cZ_QS=jv_4XXw8TWWE=u8*O?=^96+6?vAg(UGx zTt)|-S!OPb;1uv|vvFlYffvSVdHrhq=DmQlLt^o)w@!|dhNZz&5-c(UM#XWiLzVy7 z`Lsh(#{*nNM~qW$*+@f?`ol3brM1I>C0B*EtnAdN$*3zDrONdCfC)z=Dx(@%lW$mI zX;V{S@4HFx_}XS~R(?FR065j>J|;r|8TmTo9wh!;_XQLfP}E|c+g9gB-u={$p{x7jF3%$+t`RD|R#rFBPo)G479D zzmADFYUq>4?xC>;it4EUvnPY&eaS<61NSS7ht*y+S#OR&Em3x~aN~iWdv-D~t>C#z z2ivNhjt2o6yU#LOv|jpyXygrjqo-t17Ncy2MZBD zn!QEvnM67aNb8t7+Q2iw3?R`R0EkS@H;W`id!eSU84A>Ba2zS948ZHYZ zYruY&tex}32dV61N+XQ+VlBr-ok!gbYj2Y%4yc2nmU1t>hd|U9jlHDJHWnv<%bJWd zn8ue=P+DSpgw8n&cdT~WP)6Zswr~orp0;s}qlH5k3td9HLN0vlyCl$15?kQmWGa+< z%xEF4nI2R>tk{%{Jt4qzxM4>Y*b7A?x#aB(#r8wBvwj zyd#w19ofH8I%fJgJ2bxXPKjtsDj@`ol$m=Ty8TC%HAp5_av%z>(0-lf$uWb4_AW=Q z%?m*WtJryjk!`iZw_D69w;bBrTuxo?oY(fF1nGa13hTdPO2>3m4oOjoZ`Z~JZLAqA zceoVDiM*DUBT4902Dg9O0TOtLQ$b0S79kU)lf~ql!{tA^2H|Bh0q$7F!eM0Vl@nKl zquj{;c;6Nbqaq#io0>PZu1c`&2P|U~i}u0+kg#Uz_%Zs5GS?vPbaAW{yM$rTPbRRx zMzKO@#e>homw;04LGj{5aLTf1^giLsf08{@zLo~9FFzjWsQO$Mdw@(7?au`N2X_u? ASpWb4 literal 0 HcmV?d00001 diff --git a/docs/landing-page/public/favicon-192x192.png b/docs/landing-page/public/favicon-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..b4558101eb1167ef5a85498f1eb4b51dd07205b4 GIT binary patch literal 1460 zcmah}dpOez82)WW6AIOkIz|{>W=6Tx$$c!hxvg9}8)wl`nskH}M(R-L;*v{hVa(Qg z+oN7`y%q7e$9XMDPZma$>V(1~ z3BJ!o{&waBxO3hZa0NRW1KGGuRIK2$u;KvUMAi>XTkkj(5Rs)M!TU0vKdPqG_|?3F zP%Tv?J^dvmNcj%vkLp6{^Z|{P8*wA}p6II203l#LsA&_nvEGDN=R{n1Oa6A9@ zp;)AgU!*qGSM7R;xw0GUqy+EqymL(5UC#rM9)Hy5Sz{hD`+P8g!iqu}?==LG@HWF1 z1-gHDq{P}4jLn#mrGYo-8QP8k1N#xP&WWPAvbJ)FLy|G|alC1Be*V7j$szsths_jg zt_vU*);8ek8}g4%yL}j12ykYrYk?YaqFtLv;yQnr)hM?@X zVPdAgII;T3>L5o;yR(H-`UL6M$r&&(q5c&PGj<-eF`}vpW{0)Da5)2BDwa2Zds)To z)4syn8Q+s-Im}}~1!AO_qy&=XM5w{lQ`;&99@OLts8W%(zcOGP*(B0T=1g4n{H>X@{&>ivr6Sg*gA%; z0k5avBZn@4XI&Csq$gM0gP@MeQ@wh0WI6s7%fud_{XEJ2e<|c}2SM0ZrrFU`s z(08ZF7l9A{_xG6LT89wW?3n*Zd)HpcB$d|ZZi;1X@#M6?v0qD7FiL(L|xPL1dd2EavtWMI_BU6ndw-UrLH1s>$tw--2egM{-9IL0moA%FexQyHXO z11RHo!j}M)U6|q~788Oyr>g1L?Ou^H-58XXsMI+#n`Cqg+PxcyJkojsJ_n%UdEc$< z5SFE&>M4Q8%5Cgt4fPbUDwheV5JhS__J17_Lj#fD2v7iO7Q*;YZarwYX~equxIT3z GrvD414Tbjr literal 0 HcmV?d00001 diff --git a/docs/landing-page/public/favicon-32x32.png b/docs/landing-page/public/favicon-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..6aec60e09a84a25ba85fb6b1ccd005354eea0e7d GIT binary patch literal 349 zcmV-j0iyniP)r&xrq=Ei=G%f4UN@X@dX%{ zL+@DZkVg#8V+uIN)%P>UdY8U(YxJ@(&VJ(sa)Ui8!`W<67$-$OA_;T{L{sz=Za!OZ ztd1SyEtG&`y6vL+}1j0B9P(=Sw zpwA8X;_&TNRUl`zN#o+TK^TWcUPsu3cgM|D8il;2mV|K{pbs8zY*SHP#NZ-WD_ZpY v*BnQndb;%ltXgrb)|$N52@q$dv$M-8HH33A7Z8#;Sh??+yG3t% zl6~bQdO%4Mdgn{V;zX;(bCVZTW0FMv3bEkgrzsugYWN$ZoyRR}F@JM`N0F>vt zF-@54QX#yav4F={9S(xZI@_~n!*2_W5MItez|$}=L!df71Jn~|<_qEJbOP)%_ML`7 z4Sfr#!-P|r@MKZ}Lik*$Fan|$26i$N9*s4?;fpZ9(GaI1*^x}RJL&)?+{WIFg`|9Y zwK3tFr~b%7 M07*qoM6N<$g2|xSApigX literal 0 HcmV?d00001 diff --git a/docs/landing-page/public/favicon-512x512.png b/docs/landing-page/public/favicon-512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..bfab17a950694a716970394dd370fb333e376e65 GIT binary patch literal 4874 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 ozy{*yb( zGAayrm6Z5FrU3Ii0;~qyQ;|s_CMF&z%gw@S oz + + favicon + + + + + + + diff --git a/docs/landing-page/public/icons/dark/GO.svg b/docs/landing-page/public/icons/dark/GO.svg new file mode 100644 index 00000000000..c51bae59a07 --- /dev/null +++ b/docs/landing-page/public/icons/dark/GO.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/landing-page/public/icons/dark/MSFT_net.svg b/docs/landing-page/public/icons/dark/MSFT_net.svg new file mode 100644 index 00000000000..b29488cac45 --- /dev/null +++ b/docs/landing-page/public/icons/dark/MSFT_net.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/landing-page/public/icons/dark/cPlus.svg b/docs/landing-page/public/icons/dark/cPlus.svg new file mode 100644 index 00000000000..74a8528c5b7 --- /dev/null +++ b/docs/landing-page/public/icons/dark/cPlus.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/landing-page/public/icons/dark/codify.svg b/docs/landing-page/public/icons/dark/codify.svg new file mode 100644 index 00000000000..5fb29afc5a1 --- /dev/null +++ b/docs/landing-page/public/icons/dark/codify.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/landing-page/public/icons/dark/evolve.svg b/docs/landing-page/public/icons/dark/evolve.svg new file mode 100644 index 00000000000..31e038661cc --- /dev/null +++ b/docs/landing-page/public/icons/dark/evolve.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/landing-page/public/icons/dark/java.svg b/docs/landing-page/public/icons/dark/java.svg new file mode 100644 index 00000000000..d0673f85d40 --- /dev/null +++ b/docs/landing-page/public/icons/dark/java.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/landing-page/public/icons/dark/javaScript.svg b/docs/landing-page/public/icons/dark/javaScript.svg new file mode 100644 index 00000000000..c6969b23be8 --- /dev/null +++ b/docs/landing-page/public/icons/dark/javaScript.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/landing-page/public/icons/dark/kotlin.svg b/docs/landing-page/public/icons/dark/kotlin.svg new file mode 100644 index 00000000000..86bfebdea7d --- /dev/null +++ b/docs/landing-page/public/icons/dark/kotlin.svg @@ -0,0 +1,8 @@ + + + + + + + diff --git a/docs/landing-page/public/icons/dark/php.svg b/docs/landing-page/public/icons/dark/php.svg new file mode 100644 index 00000000000..b47489c434d --- /dev/null +++ b/docs/landing-page/public/icons/dark/php.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/landing-page/public/icons/dark/protocol.svg b/docs/landing-page/public/icons/dark/protocol.svg new file mode 100644 index 00000000000..76242bde726 --- /dev/null +++ b/docs/landing-page/public/icons/dark/protocol.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/landing-page/public/icons/dark/pull_quote.svg b/docs/landing-page/public/icons/dark/pull_quote.svg new file mode 100644 index 00000000000..28d93dca4b4 --- /dev/null +++ b/docs/landing-page/public/icons/dark/pull_quote.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/landing-page/public/icons/dark/python.svg b/docs/landing-page/public/icons/dark/python.svg new file mode 100644 index 00000000000..e68641c2388 --- /dev/null +++ b/docs/landing-page/public/icons/dark/python.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/landing-page/public/icons/dark/resource.svg b/docs/landing-page/public/icons/dark/resource.svg new file mode 100644 index 00000000000..1028f473107 --- /dev/null +++ b/docs/landing-page/public/icons/dark/resource.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/landing-page/public/icons/dark/ruby.svg b/docs/landing-page/public/icons/dark/ruby.svg new file mode 100644 index 00000000000..92438ecd5d0 --- /dev/null +++ b/docs/landing-page/public/icons/dark/ruby.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/landing-page/public/icons/dark/rust.svg b/docs/landing-page/public/icons/dark/rust.svg new file mode 100644 index 00000000000..d9c0a09f679 --- /dev/null +++ b/docs/landing-page/public/icons/dark/rust.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/landing-page/public/icons/dark/scala.svg b/docs/landing-page/public/icons/dark/scala.svg new file mode 100644 index 00000000000..3fa82c563ff --- /dev/null +++ b/docs/landing-page/public/icons/dark/scala.svg @@ -0,0 +1,62 @@ + + + Slice 1 + Created with Sketch (http://www.bohemiancoding.com/sketch) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/landing-page/public/icons/dark/swift.svg b/docs/landing-page/public/icons/dark/swift.svg new file mode 100644 index 00000000000..6b524aaf002 --- /dev/null +++ b/docs/landing-page/public/icons/dark/swift.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/landing-page/public/icons/duke.svg b/docs/landing-page/public/icons/duke.svg new file mode 100644 index 00000000000..88133dccf0a --- /dev/null +++ b/docs/landing-page/public/icons/duke.svg @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/landing-page/public/icons/go.svg b/docs/landing-page/public/icons/go.svg new file mode 100644 index 00000000000..2e03b907cb0 --- /dev/null +++ b/docs/landing-page/public/icons/go.svg @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/landing-page/public/icons/kotlin.svg b/docs/landing-page/public/icons/kotlin.svg new file mode 100644 index 00000000000..05c2515d93a --- /dev/null +++ b/docs/landing-page/public/icons/kotlin.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + diff --git a/docs/landing-page/public/icons/light/GO.svg b/docs/landing-page/public/icons/light/GO.svg new file mode 100644 index 00000000000..ab3a6718882 --- /dev/null +++ b/docs/landing-page/public/icons/light/GO.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/landing-page/public/icons/light/MSFT_net.svg b/docs/landing-page/public/icons/light/MSFT_net.svg new file mode 100644 index 00000000000..51842971d2a --- /dev/null +++ b/docs/landing-page/public/icons/light/MSFT_net.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/landing-page/public/icons/light/cPlus.svg b/docs/landing-page/public/icons/light/cPlus.svg new file mode 100644 index 00000000000..e836647a729 --- /dev/null +++ b/docs/landing-page/public/icons/light/cPlus.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/landing-page/public/icons/light/codify.svg b/docs/landing-page/public/icons/light/codify.svg new file mode 100644 index 00000000000..b878bf92d7c --- /dev/null +++ b/docs/landing-page/public/icons/light/codify.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/landing-page/public/icons/light/evolve.svg b/docs/landing-page/public/icons/light/evolve.svg new file mode 100644 index 00000000000..6b743dd61b9 --- /dev/null +++ b/docs/landing-page/public/icons/light/evolve.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/landing-page/public/icons/light/java.svg b/docs/landing-page/public/icons/light/java.svg new file mode 100644 index 00000000000..79851aedbb2 --- /dev/null +++ b/docs/landing-page/public/icons/light/java.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/landing-page/public/icons/light/javaScript.svg b/docs/landing-page/public/icons/light/javaScript.svg new file mode 100644 index 00000000000..2f1fda6ae08 --- /dev/null +++ b/docs/landing-page/public/icons/light/javaScript.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/landing-page/public/icons/light/php.svg b/docs/landing-page/public/icons/light/php.svg new file mode 100644 index 00000000000..f6dd84f1df1 --- /dev/null +++ b/docs/landing-page/public/icons/light/php.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/landing-page/public/icons/light/protocol.svg b/docs/landing-page/public/icons/light/protocol.svg new file mode 100644 index 00000000000..87bf188e1fa --- /dev/null +++ b/docs/landing-page/public/icons/light/protocol.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/landing-page/public/icons/light/pull_quote.svg b/docs/landing-page/public/icons/light/pull_quote.svg new file mode 100644 index 00000000000..00a08b3cf71 --- /dev/null +++ b/docs/landing-page/public/icons/light/pull_quote.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/landing-page/public/icons/light/python.svg b/docs/landing-page/public/icons/light/python.svg new file mode 100644 index 00000000000..4ed86d53fae --- /dev/null +++ b/docs/landing-page/public/icons/light/python.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/landing-page/public/icons/light/resource.svg b/docs/landing-page/public/icons/light/resource.svg new file mode 100644 index 00000000000..ddb968c74cc --- /dev/null +++ b/docs/landing-page/public/icons/light/resource.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/landing-page/public/icons/light/ruby.svg b/docs/landing-page/public/icons/light/ruby.svg new file mode 100644 index 00000000000..272b317079b --- /dev/null +++ b/docs/landing-page/public/icons/light/ruby.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/landing-page/public/icons/light/rust.svg b/docs/landing-page/public/icons/light/rust.svg new file mode 100644 index 00000000000..ba576ae0ca8 --- /dev/null +++ b/docs/landing-page/public/icons/light/rust.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/landing-page/public/icons/light/swift.svg b/docs/landing-page/public/icons/light/swift.svg new file mode 100644 index 00000000000..3b1eaacc668 --- /dev/null +++ b/docs/landing-page/public/icons/light/swift.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/landing-page/public/icons/python.svg b/docs/landing-page/public/icons/python.svg new file mode 100644 index 00000000000..467b07b265b --- /dev/null +++ b/docs/landing-page/public/icons/python.svg @@ -0,0 +1,265 @@ + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/landing-page/public/icons/ruby.png b/docs/landing-page/public/icons/ruby.png new file mode 100644 index 0000000000000000000000000000000000000000..797167a700a9749828fc1f60b01b2b50643b8e1b GIT binary patch literal 196597 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

*25NS?kx&FSTz#zYxOsDPi9SEz zm6l=pYLdxeP}dmtr^i~Fn58CtD&CCySN9E*eBq=v4(=86R2Tx+HF|C{+Wym|hwzEa zatU6y4?j{?WtU8{fC<(|`rW%F41+bY3uLK%o3Ks}<8 zjcJ7kuU@!_cx}c+cFRDR?vRrr`|q+Nx&$bp$8`wb@#QWyDfvEXeeF-Cx-m-UK@|?T z=$8F@lWZ=1=kv1nl15Ni!bBm5N8!wO$&0A@5n}bTu4yc3eZ_)fKw%@jbWr>qvxRC7 zT-ucMRUCaWs63@UUQf0^?gL%1v$5KF_=&bPSH0tO3a67`i8Tu^C}2Vi)&eh9wj#EW zYY_ruXJ@>V?`C25CcN$cb{oNVPb&{gQ`jrai3M(E0Ke!6+M- zTktD|49a#^d$(Om`GT3`?#O^DfXB6oCFgK77C)1rp+~^1Z;Qog1t<)P;Qv~{Z(%B+ zQs=CNmF}**JJC#B`tZxF5QoRA8@dq!HqLYZ7vHhE+{1ty>03&>3lqLxZzKQ|m8aMy zXyu7CXI(e116^}|=a3ab88ih$TPBIp1qL4vyA;=YXW&dj*WJm`Qa66^q$_xZRl9si z*i>!kr8d{RRT>vi(KaBQ5^D2_%>=?zqzjNe#K*O^XGJWG>A(% zQO&%r*>;)X^LNC2<|}nDtOYYh1I*y5+A*!I8o$#IjOh;>Uf(oy6;@K)EDM%B2pO8R zf5%^r7kS-~KBeV3FNy5S-%U{fr}or_|F!Q}saTb#YppNcn;9>z@fa=SN7JA-?9WzkbPyD0L)ge$%2xn_)UR z$Z~kBQ)HptF=<_7g7~H0bz$lV_P*_-uClZT;0^y0Ogl%6XC4jsJmZ zxnBnVAdaQeLuXxO)QYc5$gQ4kO#xgOIM1s+-ye9>hy8(pmc-eJw$d>neGe^?I0DQda{ z&&=bu#bs()v2dt2Dp^*%r^Z+3JBwi|TI0ZXVDy1*)Xn5HXp-uhmb;hYdyd%m{POO5 zx}72S9MQ~~_ytHF4R)Hqj}$}vJ|U*4=BtK!He z)6TP+>37z%ZJ_|#vdh+uD%AvNs#B0|OmsqI!DZ2Sgc+anb0fQFEy_KVR&>cY9YEpb zTbVBC_Ej8;FSzBV16yJ!)jKq2h)x2n+9%bqOOM5_QZS90#NKn_2^~*o{Kg#vue|^s z;y6VX3eGs~UW3czfoq4~cR7)p@-Bbz1?PvlsHWg650;nclmz4K5XWULOr#4_Rk0VX z)t_8XZLJ7z>M|lxI=2%JY1iKmn%sR??^TiitC`^V=lZ9pDF3pXpHf4{2vVdPcN9%{ zMoEMs+%t`WA2q6qJrq2s|WHi52kt4HrUUVpjp$Pi>2QXlrPOxs-C zFX`BTx|#$Mu8?>uRZ1I$qhae}|W^pn!=!2u3O4g!Kr{iN=)A7Sz2zTc>X@ZJI>4n42g>Jro5b zGTeG08^K?lw% zyPvuZx7(L$Hnk?qmYY0gTkPxC-EZGJOK6o%I)wEF3MC1=A;_!q(qKh}PVLxmI>?N4 zYC#ViH$Gd@XJ*9hm792=EAmM_dfwErrm4M^J=IHf8AH#F=>b<2sCxrTziN(4PFa05 zu#j0#R_Nw?i`L_jac6IRmd;#zDQm+)SalWAq9jmqIcu=6GA+PCWI(!XI5#h4eE3Ea zaaPi_wsB;lW-!iN&+4t^)O)6g53P?S=SO#&{cbsR9$$b8I0{045(D)!4EBXwKm4K< z;KQ4zO9b3iMX=QO9!8KW7l=J#k&Jk|)sM<5;UG0sjGwyVZ1Jg5CvupyEwLIz4sT2N zrGMzypsAj@;#mk@XqJq8Jct0y#eyZK_5dE=c5uHA3+(&3d*T5vIl*;_(B+4-cLYbyt0{v*Jy&rRm@xvE_=u{u zH$y+4wO9nb_2en>3bChFZu`&<(n#jF=BoWL+qWr&rzx9$nVUDHzc5NFu>B3}nEB@-8@q^TN6EnRX>mQ6 zI$Ae&PM$oJGG@B-9BWLH0{ha<^fQN2Z2pjEiU4%4|N2X_8o)Ry-GOR>Nw9 z`ZSN)Y3Eit2C~%(69{&kj?&9Bn7_lon%dLoelB!6opEkhWk0EIxJOY}{So^tKioRi zIg;pcfClN{OGPy^MYZXB`8c;FwQaC^vwZi|lOFMu-mJ_t`*rovBSm2RwOsn`sJ0aa z^n?xV)h6|eKlq(ZZ8LpN&T^0w7~-MS*c^~Q|LqnlnM88D&wfY-zEX~$)aVt{rgn+J_GA?j@Tr7>g zxpF=jwvl(z!+?ZgKta0OOq~lKDAl(gF9|F{A}Ob?kifO~E((eAwPhMjqAWW74Z?)2 z_tY(qYA>w6hH_z!{46v4$jU0x?cq@LzRB&#ialr4+ns}>Xu;~(`bg2@DuP}wId?iU zn76RgxFP(2zGO|sZ65r#A}58Osc-eQ&6n?aVEgXScwXK}P9oUJqmU3A>xycXnj9vC zFAKx&#GTu*@u%g7VR@YKXXWcTG8$S3LT2k0*fXaU(1feSfy<^ zB-)%}jQVg9EnfSj3bv&jym6%$?QyVv^a#>YCd~(O<6TtJ`sqwdW?JY*1~Vu7ULpbl zSpD$zR*KR0Lh5*nLR{C%A*q=5Gi@p+I7;2)mA|wMH*N!}YkHBpBdYNcOWphS!Z9u{ zd-zH3Qyw-2J@O}s&b4BA*Khn@MmbOn##jjo7y}Pt41Na!FB%dxl&9iS)NFOZ=bn8N z4!ZqG+!2#o$P1OF?+B(b-EUiw72W&H?tDr2!Vfu<(r`!QpOhNg6vRQXLG6gy2`g>6IFpj@pQfi@%z!9;ove>PDiEIyQWIs`c-6& zEA4&lq1{*IEwHv40XC+d*LP+OU+-?$i$RMeOxXe+Gvy`awR(5AmmQT6ALnjM(}@cn z=`M+e0D=(La^)%GN=BR+Crlr3>#s-{nzyQ9-CoUdx%;v0ESuOT=8FbM|Eh~GgqHR4 znpG?v%jeql<{6%~lal!cko0jTj?}NOeiMT@ZY^V69X1q9hUVn$GL#obI0#1&WBzg?2Q>q$x{uE@D zvHfpWIjD3B{6*n7&!lw=h4N_j?Q(J&*tcap*f@Pc%XpR%JtBl^$qjIA^>DNM`AzQs*t&+*Kb%b5Ppd zO6xj~W_R<+tfJ)db&tN}$*gLbFK+6f|4#A3xN7J9if8Cc7v}jTXdWJe_Lnhf@AAUn zt=qUe=G}fa>aWhWD_X`r&GhMqqbI4$`ldC9+hGFGQ3InDc@&s4$h2S=4w@`oGs4bx z!<2T{KsF?7bfz7?_k^nTrf>86W2jzSM{Wf~za=>}8k}J#wnpNV}Ag(nB&2P$`jJ4uxIw~&00g8g|=L9B9J2}c-55G{rFgQ0BIV6{f zt;--g^U_=+79!4VzD5+9N>)!|E{eQMmE>;QAMup&TPVQ5*XH&T8S(*9^{2A?u|TR= zG`enpCgTW=lpmW`l_}?Dzg%GpsXMseW#K>%ubRw%x?OFh4BD`1Ud_3*G#0J7OxS6b ziPog+xgpl$SE{QS4W|TJ%GFkBso83S^L3+CtmzZFWHQEmQea-;Ib1p2_m}jNC>WFuN+1jRi9TTbkKJ}RKxlE#Y`hl zME|yjuqSfKsm*RHb@D{HS@H0u`G}PNyp9ybC#?(~AFzn*@C1L4l$!vX`SW=O8?{b+ zPj1%1mv9F9{vXu274u%{n5UoS4(%SfH!dIXglDq-5x4!|Uy12ZZSb(`#FmYoKaQR+ zm_{rj*#MC72&Z0}nE!yU^uK5uuW3`HFTR#O4EN+gg;K*10K6*HHo0O!6hj6rXIgW> z0bW?Te%|h+32s>OX?jvRnyhbpaDXR5+d2NEZ$!|U7BM@@7FWemV{FKvY=}OQPVqXW z@(9P-pD&a-t9o`Y7s3|xU+r=Y&@~?&2@ow^L7WgzW@84Q`Bs}MlSVNrF3}VKhc)n~ z+YijQOM_GTWS>yxHXXu~;9Jy-!w9?mJR0axS&tmM#659ePP=ND6ZyI-1_MD#RCYfo{7y1wkZFArzM zcOcs+F*k5XW!U`LG4rm{{szx*1Eyd-K3GQ<&JPx?cMG0jKo6Z78HqgCmy9XGBmHCTnZD0ZovxGg8Z|FEGdq*6Z-scC9UY*e!?;y<&k1Qn))U#NEy>tTBFc%Idj zaxA%+aPk@L)}#MzdVKj#Y(Zkch{Y3C-a2Qe5@zb_1*)_%JoK}+A8!?;9W!E%1z>Hy z%&_jaHB+0~YB}i$SALnci@n<^`5s;MV-=4SlDDs#e>>iNy6E04HW4YZV@>ll_>|?* z|Dk*;6a#!>kK$q+#3Ffz>=RkX`|hK*NQb60j@rp2EGl(ROWE(9K?iF@4G%tWMuDbj zd;=7IR)yU`WFXhI%Y+9WJ9c46NG1$^H`d?B=&ybkuX);7ABkSpoMkc=9}cM522|#+ zUx4Xu7QUfz^h505hqKd}vq`P*MqEjJhkkf#{nto%N^(6h&?M!Yjx;v;L!fDdF0zd@ zMl03*!fOI6OG>fduk=ZE^eBFxb8!(CLW6jDsMgLCM;)>XU?4aCz&9A zrA^u|&nvAiPZ|&Zkh4g${w#tcxPxsrmoXI(7LA`bWpu&NKIS3V}e0T15EzFsyh#V^(w?E>B&QD4G@ zuT!gs^1^63K9~}8Sd*z;XaRc&3L==M)~4j~QpbGsNpQ=-C7&U%Ef3dvf+b-h4&@JZ zO4t20hix@*|0v|Ia3SGq(!k$EB3UIZbIuEm!vHE5nSHtBfJi>-Z8Jp^>cUFwSr2>e zl3+X9tG=CW(YHuV=v8&)tNat@Pl7at1f`L}`uS0S7awzjz?bZ-&L<1T4SQB1-1Ec| zq&32(k|TP6F*RhqFN=R!Xq^TIbuXI4{c>Yx`Gu{FM*!)Sum$0!KAQ-2SqAe*pz(waEq%b{*5DK1;=EUL^Ao)p-~UL1mQsIt3GC)12V3 z!$D}EMXk_fVii06siF;in9QU9K||=NUD)L;x3hut_Q~pVCxgnLJmU_r(4;s_BGy@} zMieZU<=Y^9>O<<^Wk}!Nx4wO{t8gdt%^eVgx2@dJ7t1T3>x8ea;L60cUTOx&a$bC_ ztk#{IT8W%8sv>Itbaz}*=~=j$7R)dF6i)IVDni<_Y*p?ZTx|4Cw|G0?dcl`j#K}b$ zMJKKs=uKXUrxX8_(k>)bSB-z+#KlXIvUzBLNR z{`@gb$sEJ}RUy^~JbwB-?B{#tWXtDu+T~^UsR_>QHeCM`#UahGi{Wh1QUM;EBohDh zRipKc`pu)-k>^bWv-6SPZYC?E2l{%Z8csoRu^{9Y>JlCJB< zrPb)l#@nI}Bj$hA_CP=wG|(5ZG}JE$pil5D7v}>*D8qqQJIeM(oZhTbO!B$v4siRo z+@pms&ohevhVE={%wwgA-->SRSKD(Y&cZy*7tbv+qf3g0!P|9Q$A<@oxP-dc*1R+R zq&cFKOv^}NGjf%|`5tG|7Xv2TwTZ^MkM-ndzS$MNQ^#J2fI}=HJ%$~tFkm~s#?Y_H zi@j${-s**gEApE*@+c+W%PGI2;AdGsRHK3^+#6AbLz`K=2v0cOO)+&PKdJY2gKg`&@5c5wvsn(olI>BK>@m7ovhUWW^IJ*V;!Rlwmy>-ccjHtGTCAv zCU35`K%A6S)2H*g% zB+?y|;m`Hagx9cpxM{=&p|mK)lvj3=*;;?EyhlX5`JurUUM0CuZNk^kbKZW)Pd8kb zF($vX!S&2{jgOZ;ejak=}31DzlzgTRP;g>i?22k%JUOtm)1x3};L= z9HPPoF|iHd{23m~%yI1f+albh@U3L~;h#E&H_qN!fhXQR-Z!v>Jo|PT#?hZ!tV+wj z8Kk`(7lArvh=KVOc851?6w^N+Hc$K zUcefgFH@Z}8ygd_mar0y72Lo@0^CW0a3~v_n z(-tcaJ?UIJn?RpAeL*m8-dN=Go?Dz1xnz;;hv1G8s~T(aq1&dMAg>TiO7`RSJj_y6 zF09ME9$)pZY}TnqMt#8@D>ReT!_r56kup#9%rZ|Al`{JkR?<&nVRbLiT0DNygP<0; z6B%5)_Oj}g>ooqmA@{A+uG-LSmEV;!<}aqg2Q>f+4CG!IKG`WGCkiR_Qmculy=Q4b zU-;WoL4C@te}|MmCt<3z8%uJXPkG(5jwPxtUtNz)+h@Wt$c3UaA7?S<+Bn*dChAa9 z3cZN|f8C7NwSZ-YK+J#LC0^w}SPlkXNOC0nl1p?-g>PrV%eVVaCY|+pK$H{&$G}USGP_iEyGz&mQh%=V7fWykI z3g2+9fT#wKojyIEf-;Mfi|4CMGV zbSH1u2n=M2q+;rR+C@fi<~|LtZQcc%iEx0{JLm6~XN|2CDHgxm)i=#25*|V)n#tzK z)gjI8CYfuME_>cve@bMZ{#gJNCJ3~KaIHSFc?M{^%2&)D^Z#%-me89Q8e;06u(wxH ziY%mXAG6Ck*~llZz{G!?q=2rzHP3k7*~1G)p<8OMu$0&QL!YCGfPj&s!rad*>(D67 zA|N<091bOHr@%LsRsCByy$YvV+UnYTkf>YIVAp6`^;yL}R%T}AxRDeGvk-C`vIynl z(Jm-#5U}co_tfm`b4;AmU4=h>o$n=Me3-a0!{v`8LQ2WrSXw^rja1~2IR*3TI2qjW zYL(X}8DX zPCA|cNR0dLU1NCA%cpvegQT)y6qPX6X=YdX+m}_6;LAR4;rCp1ssF$E;61FSc`7^b zTMRGN8lwNT)tf=mPI1!Yx`yG=;d_6Q@o}T$~>+T5eVJC|lN+ zk~CVso#u9T1)L&C=8fXrZWq21Sr@rvASNo0I9W{)17crx${&cn5KXXly37pzkBKaD zx^XFTTIe@_wVZ9c|2`}D_7z{tX9hcL`}bY63hJ zvd1sr9!wp8Z`Uy$m6E;QfSD4>aly9XW*{i}i?CVNG;tV(tyP!@RtxP>I6jP6p~GM7 z8sABi{&lA_frkUX*3cXQ&q(ceFc7NdAN)mhgkSC-52Cr(Vu@Jx1R7DP5}w5fx+~{# zRvuUBhwq#3g4WJ5qQj5mr*@!Hey73lBtmruz5MMKJ-0Ui2c4V;_4|=i`u4&#bSb`n zCXdUhc@iKK{Z=;1HU^~BYmuUZ1dAvFsB{ew6>l$F)j;D-LMw!mcY+q1#D-+flVi7*|aV`1WOB&A2XSpRmzlnjBmd-BB)LWNM5{6)Au_lm& za}l2qV8k}$bGq#(Xc555vaj_eO&393m#h22qjRR_O(Dc&>YNoC|H~TCYDv1eX~2c; zfXatcCa{S#dnio{N<7Q#U-g-!UeA9az08y`zMg2?P73aC+p$e7{E&v69$$9xKASiv zHe0jYWLLShFWq-p?m8cmGzJsUwcKqmD#V6df5Tm2_|*7;_yId9T^zvOf_>?{(HNw+ zk|WohF8rSCz3Nvoxy^Knr$5BzF^u(RFML)^Hclha`^Rf7`+RAZ~ha2AJiZ5!hBngYD060y;bKI~L%TQ3y9JbBL>F_C%4$CkN-s+0cq8#Bd? zlz@iTx_Eh~QlFl?bQHBb9r6#>`h96`jD*be)6re_J65Hd8fi0OnkX=Q z`L!hcu#nqrX7SQ?WS4uRiSa)8NWjU#t`S_jQc?~bot1M~J{-VakG0^d#u@Xxbr%;F z>tu3+LT2blJ%UdvkwzYnCoRboY@mP5l3)EkVn0HIP_+bfgCJ$gd(pk5jO}N|O%wUdQ-tzx2oYP71HMA` z2bXWlca#~-%u8LzQ`5rRhx?u9*`HBvH;KbSU{P^~!#zRfLk29eD`u3!b#KW{=fOnR)We1?vV&ZU=k0NX?yX&r&`w+yMVHD?Q)s zyO2Q~q!D?|pfW8MK{N@FOHQja)Fwh>G`RGv7P!5YfML6DHcbPw%s_coDz-B4e6D(c zzZZge53;wHBZ!|pdW=>*2@gXm^brp^(GtDeA~$zbe>@M2d|6gLThZ_~C67Z|F-ntZ$-r>S`Bld;Fy?8Jk%g*zG~c4_g$BtM=P7=*y`SVH-}-)h-uNL6Z7L#;ct|&SqOB+MXSy&i5^AVf zVuugX#~iaLpGqHhpF6asq2k^{s$H^MIFqB*8V8gnMjS_q?dmIbniDxT`fO(MZ>t)5 z;{04qHLV$}9*8bjdOqDd*Zaaxsb^lN4YpB_FU*o!7OEBQENj*Op^d3yy4SC$V6k_G56=oK=YJ#7uA$S_-q`A0GLoKiS_VuoliE_ED%%u5EK%hm$IZw9sc9 zQ=Ni?&2^SvA+kXD{g{F=C#2>Q<`T2D@TKo^IX4bf$I~(6tb9Vy1xIE6=BOM4*LR8u zmZM9t4N2B%Da9(ENg{N*_s&l0&LiV^JlAMty0pwr$4j-k!N*?R?DVj304Hpkz^r$z zCqzj2BN>PQblrO9xv+osaGfiBv4`|%rs%g;H5^nHBf)?C8_806awlcHAQNLuxUrkD&he;o-3sn;V z3f@y{YyvdscI)DI6r66sEBwz3FEm6d_xf9Owk^N z8s*_0KS_w)(G5OJ=uY)My7e$C_#7QVvHHrm2=XH0%sed>nG~g*=;ED@gbPke45`<1 zW%qURj^AsQS;y7HzOd5~bnR&*{$=#+*RbyPBcQ&5q%ydC1W8h&fp2}9!4tpQotV-T8+KFl;pMJ9arcju@x^R^HbuIuKb< zGJf(4V=L3*kpPF7x@`LrWZz}${sBcVgV@(nP>N&~jb}=kqiZmn7hdI3j5K({blBYB zs!(g_wN-Jh&pu8DC3UkESDye9wggGzn1+|^kR-Lsli9iasmrGCKR*x|wg029>&&IX zCE8})i&W_eu!Dx?5>Ou93-Eqc1H||GzH_qwRejO)WmYh$igRQ4YADls!i3rAGt~(J!p*pYkRtH8Egd>X? z4|e*7HdY7F#X93Ppi^FQGzF&43meTwjh9Y*8*(w4CEI@l_cTrXu!RxY#g5e>e2G=M zk>1?r{m(ndFn>#Iz{Qf+T7c_?PJumR{v*y8Z)TOwfN<47)^HxIi(v0ud8$Hj*a8d* z5~v}cE*C?KE@9r^yZ(iWtFy#=Jf4m^cDjucN4KwR8kI%r-=^f)evAN$__cHV-j5Tf z@Ee>KbZ*f2MF;BAVfJ(8>2wze+I#orFJF2hGRbf+>?^H*DUXgrdbqTJ4t7Hyi!V8x zv>&4(Cf{0#MSBRbm5}*R!Od+$Bm9j5qUL%J$NPe(%h9pEcRqfvr>F-)o;HhcUnh{Z z&Q!3V?wK~S69QbUGu^S=w1+l|^9P7u$3Gk9elQ}1qOhp35A(X6#o0^fIu*<~t&_&n z9(;)5QqIVIUmSwA z+c{0tW zioeCVI$iS(tLSJ^;=Y)z@%-jkVI9z9RB=Ycmnye|nRH8staBKNVW(lAaHau3Ps*5Z zQ?H0PwAb3-#M^OePg?67PLo}^v)3YU8tNq_-3xCRSfB4TqHkseH+Nsu?sxyiV}IM# zBlp-(%sr>*G!t=M+!34LN$^51JJ?D{?aXZGrg|JEnVnU^LOORtf3>IlU0swJ_o(LJ zD&Nbed3NR!=b?n#)~WNDd#xAw%GMoYyK(9?5#U+;8~RQV5K-AWN-j;JhdD=;h*05B zf#uOlcia5-xSS-zTzcD~jZ@(&?5Ra`ksQXLrook2lUidfw;B#?0_EzYrV1gpDGW|% zm-BDggm>Mt+R<{@$5dqb;grXSn=v;Q+H9Y6_e!Q3pXX5iRC;nosK(Qo!NoSz%Ghi1 z`yk5tzVdvSwVXjV`xhUc=zxHUbxY!Lqfs9uBXOXaLD$lV?UG|OM>8Yg#}I2F2W|sF zdDxb^cea;V7jO~%8U`=dXPx^;MzE`Tao>*URJ1WFliYVJkSO<`Sy7t(yt^-fX-AJgKvKEFqzMIp+PDsoYN~ znkim%ExS`O6QhX2BWb`RW5caJ2as;7>}J}=LEwI3a+a-FoH)UC z{R-vrsYdNSPa7cV9rF0}5At3*2$tfhBGUC|DQfpQLqXfJ7U9f8kXJyy# z-XH5Bf*EJwN%HNAM-Gj7C%XvP@lK1`_gsuM5&Qa=i(GU@S}0u7&vxFcO5hg+C~2dH z=q9IuXS?*UU2t;4)frtfZb_zF5ZVtqKdC+@+BPib00cKYfOXN$B6x+qsrMgsV6P#o z;~8-mPnvJe*40$^s9D7sj<2}YoHrX)RObCWI@z~U4{1VX+sDsjlI?-m6WnMx?Ezf_ z^6L~SmsT2ml&sm=tbNkd;tMEjfOQ_e8VXGXMbJ5Ji)=R-3jzZg{8Qu1ungZ zPqS^ij z5XSs9=po?{N>IOyjr&$j;djY+6FG32INcJS8SEFk)_N|5CYV<|#>6MQh}w4AU0fKn~#WZwd7OiM{tk zRDibPO0hNA1bWD(>|Aaf|8L$7zEc;V&SUw&dKMk>7#(Ofo%!+i&d&9p-vd4`6BhWN z^`r(=uS~)q?p29CgPNpljmvd5z<1(M~7w?7U+@uXb{y!~Pq)))C>)%Pmbj3-urNA{4*3 zT+<91QN{7x*r73*{~cH2M8&V5~iq%bB)=K^1|CE&})tY zK<%BO!AJ9BJ<9uBIWpLnuzQvbh1B`qk|=jW>mEKZPE#gR?Q%o_!XEoXi+X;P(>y#G zA5tr0aAu3wt&;Dr4nBOF3f5htakbuG4nr-0!p#o*Z(X!sr}h$4Jwoh1VR2<>Yz?Fr0do4(L6nQrKka|tD;zcc{g^M2T_VTG*Bys*NA2vF+^j=a z8%12M9>7L(4>0!at7sLK0GoAzK9^Cql|!3zKv4yWX9TVn%sxLP%a6FK4TB(iO&sr$ z{Q%CE>*{C+U)A3!im@nnw+a4I!g>kd%?PI09=@kK?##ZTq>Ld8(r(B}LyH{nRNXbe zr%Bd^E!W5*^@i84;|w=|e=m+6@}RxxGBw`!tuZkmY7K&slrgf|os=h#BYu1QWeHZ+ z*?>C8$3d7|!};lB#5Cnn*OqQ{Zg-)NRdsk-j*JnH3)+_H;Mkn+PRr|h^5#QUi}$@j z=bo1H+ocvJa-H923#uHOM85?_5FQNk^O6=wb_)fW#FAq5=~Fn|GWkW4_J33ZK??DZ z6|<5-&tg@?)s6<6Q2irsebZfeLG!=5VuG@ok`2dEr^uNU+Ye8nTmDd6A29_z0ICri z`1Q&YXZ;ydcLKZg0VbCo!z8Lob(SrKg?aspgUZtwH7zB6yX5IuIccn;PH|+lnnx2U zEgmp|HuhHuUI_uw#*+BbM$jjuG44&fmtfGjbb)dY*t@~88o9BA~;oQ(Xp6l~!-HVuMXF#&_XXPld3Fd|E$cjvh9x{~_p!bV1QlgYp(>@Y1_5`rx-jIj zdL0O<0Exz=TbJTm@3UqGcB~P#!Ky!}W}}zHnr|;1O;+m6VhwjODg91b}^Z*2-7O$_Yc;> zj>-qen#rC-7Y_~ zHJU~dl9=2z)2s0& z2AL5(nYsqC!DfGU6rMDf8fFR<#`47v=hj}NE7x?-65?$(CvsR{=9;o;D9Kal-^{|D z(G6HG2u=2eazilFD3I0GSSFzj+3#~HMtt|05Ug4C}Dpd{NE*z zO+|U|D>(?WB*dhh!7^vn%Q>E~m=*C!C{_J^nZ2hp%U!CKO;5?w zF>wvD0P30H7wAi}r+#|E?b_|a{mhnTE?{(}t zfWApwv45Pe1>1zaWpRP;e8k=AS=0YoJ%tyWc|eK-Dgsx-qm)Oke9a%> zNDYDCa%!_PPniKZ;xniezYLyQuwqf{Ec@-FcOCYIkG~rV zBY8YGJ-_f~1tpS-d)Yme3$$@)WXVgZua=r`TvOM)Ev5QC&28N5Pj^ASc?yw#{%rtJtyN@u5Va%3q%_D0qqlg>at&fSa=6M(&C}nbj!& zd9{94HxF+m`LbS=GA_{}K4&+3{XAxrPeZilMjt=hGTUQq5ywrjoB93PnPF{}f?9S} zsvWDyrYh7+D2f=_BVI09gB-!KRa-yfoVd+a+Cz^#z|+4s2H?Y3uSHMU(h0Z|jenmD zbWNn&O{v4fHdXb&rlb#b<$nU6#Zyxf+)kQR&iD1}{1l!F`O^mPR~h|@Sb0de?l$1M zT~YV`p1$MyivjRW)vo*EajoC>E=4OAsqSMMF7^`h3aa#g6FbhO`QV3#=$(lpNs3+S zN4R%7va4FVcX1n^!tlsqs6Ke>s1RpyLa|N>qURdtB%GW2KyUR~brB*JhS;jVT2Lil zYxdn>mOWV(`d+YjUi0aNu`O>Uj@T-LL+Wo{0iI2mBrN*u$8ecFBn9Dbx)M#G@h*f* zB$Gq&MyC_dxA_UksU3gT$rVn*KHL8HEcS-{va>AKXdfN&jir%yIwF!1+ES)2w+f%) z2a>#*P3WEoXKjxM(E(1ikyS)BdewfYr?)o46o*p#Bk^{=CoiRB9{d4+RJP^DD7S3X6sm#m?h^M4)B z^Gz>l?nmc*Kl1Q)+Sep!ZSzl*Q|^!BkZj-HT7n9-#~6k-6u_d=$d>nurgYLecfAhE z&0If;QU4&)yufF&3k!OMGJ;DeY)p`W(T$!r`5$NF?dLAon99)U>Px7Tfx^2E(@<0t z{?264$^OgU3@A)`1=&+CSoc)QZd^BqI1xe;alAVwhvn$Sz9N)5EoNKzx{lX-U7O`q z+bCG}xU6xa6^s3W-`d4V1}hmWjIwCl;BiK&3moeAu)0|wxvmw9^4af?5ViDkX4>gq z10A?6>qSuaw|iF?29>@u8p{l#82ASxia}}c^G5~IDfWDc7wB+Xp+)v-O$dsL-JruG zaV^)!&TmG-2>(#e@4)ur$fC%!(}HjV(Yd$$gCSX?-&7x5@6xEIQrO^HoVG)!7T=2` zwiPwJR2%zT%-rG&K;eF$@crV0SVtPIc`WLDpm%dzQabK&mJgiwsA`FVbs3K{TZCTc zV8ShtQA*;Rp6XiDr$wNCPvG9r(=9olY!W;^Dbe?fj2Cql5ndPGB8UdT zBGMT?8g5Kx=j@ zX3XTc$a-xQAVAls`(A!{(-3&lfxX9n0{7~7y8%CzQYiQ*s-xvr!)|5{;{yc>mb4-E z&mY8}Y|(7tOh2cYelCd?D)BP)Y@2SinNB|yzvB~jy+d;)zq5#qUHeJAwv3oQ`O`Iy z*7XzeI0Z^TZvxh=PQ_to#hoQkorj)^liJSM_!;|+oY2E=qvC#Z)Q!{V;Vpbb$75$) z1b~3m#mc%Lpgy z+^XPG3Atif6h~iC>?5pLU&&)}1><)n)Pt6lriB11wKauXN{zLCP;r0cDqxvE=^y}Y zmq6I!i{L_^l`G7Pi(GS@3jBc`sm%;~R)t6;9M#;|hkKxuV0`}~b(BWYN7o#3!%8`r zt!J$LxkIWD!I;DGZ+UMrlo6ifYjkaDS6|19gEINuMV`T?g!t?k$YoaH@Da9yBhS?6 zha3mu*wEwq4W`DxTDrpziy=3BFtj1?#HS)p@wKJiq!%QP@r|&_<&PJCD1Tnw-WOPT z7(E^dEsuQI4&f10b5n(7mDPm@k08RtvgWeZ2zR8>NRK$KzN5;!zP0yO&}FBP_6SFp z2Iz>s$n@KF!8^*6GVO<=?Rv%ixz@3vxh%|qea5iDhWxdyQZO}duW%y59n))Qu4K8I zU^!xCt9#w1uJXJ7m2|lO6p0shE1O!aA+0K;QD&Z8B2dap!m&;s$yHP77y21b$1b><7X)*o8a$^B#s6 zAc=th;^LEAwcpnY5C(aNTcPr6UXHs6jkRK%h2ViTmEVg3K|O zZ?|d65VnytultxKfcvPr*f)&XuL7U=ag(GiIs$bC8~saI7L3Ojf0_Qde$B^vKrn)r z-ilEE)E(L2Nygks@4=x1#O3XCjrUD=$8P9w=b4@F>CMt5@zqCXgaY|&XY>K9U#h6! z1^Il@tSb6n)8M!6$vDtG$rc$c2*rp=SS@f$?rh0vpSY}IVT*sdSK!}(O*eKYl3kp4$y^(5GW0k{V%~cjy zyL&c;tP~pKSs#_6mlo^4ekjAJ7t~y)!Iy$*YP^2`^p$VW^+zd|C?G_m>ner2A{qK& zWvF0Nt$&Za#|8MRs(wXzKb&4BmX>4$A<1m}*{Qp#%vKB1K~~!1W*Ouxau2Y}9Nmc# zdHl@o0~r>6aXa(5KotSDH{BR13l+%MklpN})b(rDU2S{4bYrI{3FvQcopa@m%aw zPwXR5`iVv?%-$_7MQ-ok0JnAM$yxec2bc~7qt6piV_W~K{X*DTu&ElCSPrLYbNlpp z;K+j*4*x@s9=G*|fo!mrou2TIvj~7$d|8zq%0L zj1Zz6DsU=Rpi47^d(+Jsf$pq_E2PX@!opU5kdtfHSu9@Vx65!u-swL{A~0pj#yd6r zP?rUD$28p+WQo?Oy6Rlu_33JP=WO29l2F6F+5Vw)0+rxucyNm3@*~<$(ssDS7>HE& zwaJoAP4&z4oZGsG&=rXoezAZdk|yVKerI2GV5=Sh{=fhrQnO zHBWDn5;9s@Tssv}5SJ1OtOMiahgYMP7R z1h*&X1duRnHNx^C=9Qno2h_>=>4@4kpbS}|%yZBM^L({|ySfk1{o110p@5-srm+{T zr2XeSTF;zyZX0P5@BS9vea+CJ{CilKAf)^aO#60q;`h|c^Vav$zusBez@SP?DN5q` zsz4kbv{re-gEg%bg|;M_AKK@J0wL{iMvfCqyw0I7VswNoLO?8aJnX&~^_=E_}PsqwXq~aL%KU3?PDY zoWl1d?x*Va+zT!jeW58r1@-#7uxm1Yw|P0u=Q&t@jiy0BLG zGe?Ls$}W0naS%j#irB*y`dKWJH;Pawy$HOfu>R5e-FG6EbUtjv%N%hx@3@c;>cZMV zCzICxAEZS-o-)K8a6dKTAjD9nAsWEHt3^rf=Vt0bev!?Qh%9OjA^OgUbZ$7HMyBe2 za>n=hZ_8mLO4w;S_3-lXU~2tJm~QVLx$BoquX}ZCMQ{BFdv324@#P5wf;!{oPK$A* zpCcX%IdEOuju_mwFO!@1bL1e`OieFZ0K&qr&w<&uMn`a9Qzcg?ETu_C(wm-l%(eX9 zauhL3s_IyK#o_wp>rx#iiR*=klGFb^M9Q;R1H~+tJ15WX!YjUYHt8fO`stYZJ?4Ac1JjKcJ^+RgNNdFk;iS3))Ue* zcfxLNz%q%6BW&MRQb21v84kRIIH|d3MaX#@K@+kneZ`x^s}$)kLFj37sfdzjmrWvU zgT2$q{YGO;v7^n_Qcm!$`Wrg?T+V-ll|e(&@Ne5Yha9P01#MV|FBl7~F1Yg{rQK5=&{)_YWz>2wV<0%w5i}IVomN^^c=N)@EX2YN0e%>d4BC>zW`7t91*0gKI_3)t- z*%*wakF$nm&LGm}_O2y#=n0RuIvWx>XAQ*41z<;}M*j z;g70P#93Sc_M6w->9}!n`G7{nI-Bu0#gEW9^nLU8*FF455T`nTxXVWD`FQBk;;$Rt z5^ZS9%N$FXGBL4B=E&zJ7;NV4h832j0X{#si4brd#1nZ)*nG4zc*-<*y31W%U-c!6 ztuTu$s192zw$0w%;23>pHI3xar)6qd5_0{|~w3b&rt z@Y-}iNzLzJCNw*LywqbzysL|)>4EboOGWzgeq#sGaj0T*m<wDDZ`6 z>TiU-bNGAr>n*^Yt@El~YNKyCv?C_xf}!Z9xbJ^j0F{FIflpE(MDX|Pqv7+N&ga(P zpRHNsYr z^RH~>pHK$^H&NMN_O4li(Ld97fK+uS2vWu8rJRN`rP~C4%6oY5|G3X7pxmz&lH+UQ z*Y%z()PH$4c)iPg8?fuV5zaYFXOXpnUfdsjbQJoNyK|unuE;3hy_7IfUFih0njP|g zZ~b?Ip9{`&O}IGWB9Y{NQ?cUa?S{~p6!Cts?(%DeKSdi#b^>bZG~29LHrHlqZYkuF z$JCdr7kv&V#$C2v7A1vsRx8z|jMDbZO8{VWvzG!d<8PQCJWVrVNRH|sXwm1U81ud* zTfjMHo@n1Ez4I_4mihj!1^xoW$##pYu^-D5zrDAI%w6g|;;~K!z(DWZi16hpVkg!2 z9a4Hdtnod=>An&;Th})5BaHl@+lB~ksuiV(34CRI=Wynw^1H0m-?K1z6U^n&NJQ{2 zU#8Q6Db2eOdBOi1xzdFz?N!AI)!^KRfHKH&>0mZb!qA)ICwNJ?b zQ>g4=W#fE1B#Q`*sO~i`p5BMmYI*UnMamu9aeTOOhr5zk@u1R7()WQ(35d{X6r$Mo zZgYsc@(=Rp4#|QN6sex8u#TyEdYHJj4KiIK15f_HUFZ~^U%7q!J2Z$30HQ$9D$7OK zMUu!}n2ruk$e9JHW6aIHjy@fW$W1Z3&)l7D`-x49-|-GRWNBC{=^GdhZ2r*(Z{Vbj z4h7tFc|wiFo->-f9zqo*_1m#0kds10bQa#mH3qYa9Z%J(c=?gg-b?OK08}7MjrS z+`Hca83l^~+yR1BzEulUB(Rr7JgZ|YSK-qsWDY-0zno(3^g9u=tZx8Tvo0z3o9geU z4DK#Gm#%fJ2_Sy==seHQ7vpSC=bNvix%#8s$V&|j`v1z8Xq*8BI3()uxiQsH1lSAk zb$rdP(yZH6x1z&8JORf-GN6Fk2n;RZglLa+Lx%lC*Kkpr9P-HQYw`U%tJ$VXyapl9 z_87;oAl2!IZM>%xduRGoB_eP(jDflyuG$GYYeb z=V1X>(Njx-M2rg`*(P~zuiYoiUY4NFD_n})`M4Xj#$-P5N@?)rJLdAUY%PRs0SrE~ zp+<%6wIZX3k@(#E3xoeh)qD7}{eEx2v9|;z)QTFds#SYORaNb3jao&O+KD3eDpK0g zQlnP2W)(&4RRpPBdym*#5PLjtpYQW~J+J3K$UFDB&$-TZUFY1W0U2dNWY8IYs;Ots z^xCKUkjl?up;cU8!wJO}CMed4@spw|v=|qE2hlYbFoJ4!(0cXW1+U5l__sxg{>0KT zEvEClg&B-mG~{p+`hMO5KqDPk-_WYJ7czuf#+gD{_`}OGVGSH9LMoHzeSvUhjT9OF zi!zwfxRpZp9?{-!klZ!$B@?Ij!FsQ?owX)cs-3WVULsLBQZaM7fSKMd+SK6j4aYqggP?(MA#C_|Xd>ztHqcaGGqQ}V!jr)r#M_ZehJI}a&W4{IWv!GKlU8q&- z4(<|t&%I9VM-cb@L0zY6?q;HMrdpTh5~K7f$p2BQ20(}|g5Hwj8i4xYF@I@$9O}aQ z{rH~Cvh=R?YC*2hX@pybeE!dbz`HRXUEo|$xajt0X-euBT68_l97)If(3=wb^gO;QhYM+lBAb1C!Xu=-c(d_&$=J$asc?6eah;4z zBFXXOq=Qo#+hx&wtjYu#x{YU9-*i0OP0M1rD4=;hXs%gH)Mvz48K0lKw=QHF|An^AXy!abC7Iiv=t3ygGb02RXa1|6^k~)t$RS&T z$aGTUdv28w$uFXV6(#9mRnoKpzx5~n+7ML^tem%qbLv|`jHC2I18LvX?j~Utb=p=m z2bu1-B(3$YEQUNGen^V+mc5lg8|b+r65A;mFMWFtMdVR#ZnUlVb;feom8hDsyB;S2 z99NeS6v4Edo{o2B?;QI4^M*yp_PON3B!_*8eO^mA)avZV^4Vat%4IS*aAmr_eon$P zUK`GudKcn7(gMbKa>^=Ak>GumnuDuWC&aY}3Ko2>Pyl_fBq>6$^Xy0>P?6ov&@``b zQl)MuG*PUm`FL&BIay9T;Th zq_&S;^y(`sI{KTo2ElU0iDbq-;&gJ6n>bOI?vT0)&*UBS z-ftU3B`rpfU^_%_$4g0ZO<#V&gwlJp>7HyBg`HJqi~uj_=kZ&a7pZX9{YjGKyg#%= z)eSY3I(pDx^T^?fkW?I}eb>cd&ZSbkkK!7fnwun+hN|ROO1iROM4rSd*)nW8j%zot zWTq$Z#@(^YGcxGZ!Lew=IR+fKBY&ZuT);06 zx(h@W^j=vwCk#@VlYAE<%J*MVP>qF&07+cy2yYo^9$6|FaU+4IJdKOUTb#opeAhYf z$g#nuCfIxCyd{&qG4Vzu-O97>Es{9cL%%y!N66S(QeW+`TR zm9=U)fmoAY@XuQCNi7yz(^&E{6lqMbI#1 zA_x?jJn5u(^)07QC}FOl$YUR}s}7?;Tsl%g0muZ57#dMj^+Pi`AmXB;!^eBl7mq90 zx4D&H+;=b_8{;*WYhQQ|CW_6b2S1AS5l_S4Z*+KGd?RF~4T_!E7mFlD8pd8AdCPBl zYxT)XQXn7xkw#K33OSJ=2LiqZhFkoJ(aD&|xD$Jm?45nfz~VO-Mr?FITfmD%mA!$c z9_(~H5Oibh&4)>mso$FvX!I@PX*CdFpHXHvS>y&*qY<@N2wwClqF~np)<82wsh ze0IKwbA)t=Io+C9fD%M7R1+B;29tT%#-*egBdwYhGQ4zVv z+EoE#63SVI6m76Id}=wYpq}Tzc$1+sRAd0UqHLK?X`zo(pAWsxXioxAU7u-TG74zH0^YdOcz8FCy+xzJ#vqxIE>3w_Xs zV|+FusAn6ZA|IyBiEynqT*u6JF}4k|Zoy55+nuvzWjpnkKrcVf0rc|gys<5OUV4_y*!k+ekt@2$hjC$x23vxTd$5C8k`FWm@kM(Za6r3Bu zjKE@tw}f#0I2n$D3>!VdLfozZrJHx52LpZ5gzxcOVSz2YDB`S;O^n+rbeJPcoIdy2=vXj-txFHJr`MGNDeSbIy-FHq3ysrr>q?l(fK2-L?vJY-< zo=a70V*cR2JNFO<2@+HZ%;4@3)-Gip7z!Vc;#p;Tr&U~4XUSQZByzxM40V+7f(X|; zJ<6TPa3D&3|JfuRm~~fXwi)c+>I^ZW!C%Ry$UJZfiFMP-KHrA7{4K&HJkOjB{nA~WB!@a z=ZSCULQ<)5%;yPR0+3uUnSZebFJaU<+B%k8073RHFzzVWlXTZn*7p9bZ3wUtBeHs8 zK9A&Y(ak$4k4ejTpl(8nI2)9&D9J8v$GpxZM&UFEJV`amLQi#B6n#X8MB zgtf1N_n?kt*4o^^=~3r#AmkkLc6V2T2gZ+vW~g-nMZ8x5{HqxApAM&Q5TG#y_j$i5CPhVSC{UhFF?W5n}^UdisUqN&Fb?FdIW#B>TGa z;lkg^VP!6)>+j+=qMfO7p5-A~{!RUuu%^p?EfN3j-MMVNse{jrjc?SZ2|vSZBEC8P z1Or`3p&VKbYhO%3ZW1yyXGV;uOaBonCaQifRCX?%SXBMN`2?Tu)n${W0^#mqOj;^; z=a*9tNYNg7JwUsa4?->0ndG^AElN_BR9b_0N|HT>Lq6(;M@n0lNJhj5#3Q{CAkUqUwJ)5dy7pP%&j z7qDdpWCKds*q?_zeOhSggZ(sue(lNF#le(Z){U!fm;(1K!tKpS%8S#!=H|WhgTb5A z$DfNY&NaNe4=u6sH(-)FZ0Oo`aaD-SU`S5xGsMfdK_2kp#%*7ZA!R5TMm?;3Y#-6yVFe6)HST_BVr!)8VwN=}ab_;LXE6 zx^g6WuHQy}N_VPFSIq;~j@p}u*OvyqE?>Hac0s^InxC6Uf)iWPPl`3rcc#?iI1z_` z&;*Y|qARI-t9AhVVXrpGM8ELaXPzs%a`TKg65+}0$uj_&L13%@DU+S~onP3dpQy=L z?jBao;BT_CFI)Bs++o1DWJ?e^lj42--62q(PB&|3kt@7t2zv-gBn~;cp>h$+tupu9 z*x90j7jAAE?;@#aVJ2=7d~`B~JiR`nTvDdy%1cd*F8Faz^&1sR{G>kknYeA|cBp$) z(H9$BX9VTK=#E#2d7Cx!@nBOP7f~7O`S&VUkQ{;k+WzE6czW8po=2`EDN>xYp7k5h zo^&p~vxi%Dv2733M6V9BOjIxX4fPO!SWLI-pR4Uu>mdog#J5{qu8d6kZJ!6do;e3c zeI8C6BYlwyqZfJel12dzbEOz1p}?7r9^6&9ensPb(1OKO9WnSrRniwrZ&m`&Ia(C> zw$NGP{ntxB(@p|d`1@UnXBneyBf2n+dsSZsM_On#lV|iO@c#?u`AV;#ak)zg$hlm*2W7(C~9;J>|5Zz0;*VxOQs)1bZB>zh9HE;n>_i43% zu-95MUoTRSeJ&L3ZS!Bu?UvKb2#;@B9rtz4pcZy^PaAzkyj>SY zj7!BIks|!4c+tk9Z6vs-g{!cub4g1e##lhMh!G{v=5@|crJd;@$LdIw-Ny>Un-4Mo zl&v<<%7x>=5O~5($JmN`*KpNe(#c`2hrj=kt@{iUB7@!I0<9=zR_}clB$m6aCI$mL ze0PDhhr%8_v2d&wgu9;ph^XluTu1{U#jVVpUkMyCCq`Fv3l-$k6wBgsTxJ3^sCo_M zW`O(B{+WsDLL(tDa7{DDZ^PK_G*V%kJ!e&7l$Dh9n;-xjt~%Y#W0OW@6l}|x8w}~~ z7`AQa1$e!FgDbg1w(%YJ_F}uIh@TDGr$XPXB=X3JeD;g6c~NRlhX68;$Eu1#R`O*WR{=(U)qVWD z84(tM<_3GS3LQeA9*wOW_`SBg+?a^X~@HdZ6ML(YoKbWNl;l)u>o}!71cscqW)|rIruz>LiR-qi}j^0 zE?9BG%$!zT6zXdBL~)*@UtJLqgfFaZNDlF`k4UvA0{OS|EWbPrnPqqAZ7tyP9b*TJ ziq!4-9jYAlqIO#E#Qx`*3W0Nwog0F1(}&*}4fKczy0sLzvqJ&9E0DJu<=}^|g>&q_ zqhW~7Ld)Txa4Wiun}&dSkI39?G4!h}Gmo6}=XuA`_O} zF50FJ%`vvc_H?Zjn15p92uN|HI;3)Kl@d+E)>hd4?fz;61kOS1ek{oH;8-Y-1Ifza zVj*w<#er{oP|+J(=8nrNgL1*p|4J z|MFJtDA%P${^(xtHo&mtOGx_59Quyz4n6oMh}e@T>kYu!7G3mgdIxRu*7~(T@9LG1 z{3Jt*SzkGOM)*|gj2ZyNf|KCy3W0v&du6Vp^eA34njDwogX?m4J-MdxBB(2dtUzh{ z?_aq2oxzHVPkw)fTskFhai^Nv0ew9Zj3}0OT<%d8B3^o}WVbvFzozrNm=2Qo>ega2 zszt}9O!ZZq2#K7u73E5C{a1t6hIGKaQhoK+>Rf&lE}<2Te=c!4)0;>01W;vO+)mMq zSq-%9w+;6V3MKXl%9%7)6l8JLV&RMRfM=xf_CjaQ+D255wl@5?Mf}ohRRF-(OFkno zQ8(bx&BR66iQYQP<*u8bTpI4Z`|UL+AOHYa`$_=Vlz@opzSSE81YXk5!LSSJz%wqD zpV67ll zz8xpubq=Yhw!v3~hyU|OAg-N8$1O#BP)?kjj64FV{8H-)Kl*c+)zsJ&>tR^)?3uz5 zcl|+Br{!VTfKbqG*yl3Qd7e&M9snWmlg@#y6+)}T?umGXM#>79k0vgniph{ni2hUN85DZBjD+j-xp(1yX&6qu(H zIaQF&?=Q3Iqa*j{c9B9C}S>0gj8r^T*YQ*(p>7Rk09|J> za{Sg$ifM@MVDb8oJJaN&J3iICwsCVkb zACLx@{DoU8{~ct8k3na4b~+nR-urQ(f~{22*s_EnGHPZXkjU6#DTvIz)uiu_OtC*U z`%jorVOL$pQP>q0KWrw&edVG-x06kNyPtf;K$pi5xR3BbH5+u^Ub{*dGIYVjX9Q@b zKO#4}brSQz8{V=VFbS_=u+w|1aT3lkEa|A8^N*Bv}@63+lQC39uEUvrp@_M9@-QvDr>NaO& zY5`(C%&mPeyjmzmxY63j^}yn=sOXXsT=Vmt&?S4?8xX?%qFne+C23Emlu2-7$leEY~`i2(|0C|@n22vb1w5#4>qj!g-c zePYDzhSDifS24{{ACJ)gzD2q4oV@;34e^35&x-LnE3veTdTF~O7qG1ryr4R+uc3WK zo;ADJB>7gPnQk!~S4wIrE=6aY;+7x4fS;bS$vfxQNGIq0nW@b64_UMa(7($e_bPSM zmHw)6K~*`1Lk7N=UuVQ@>a(d%E?e>;oXTz)j6-SA>taP25{v#HxwmocWfljdPiP=B zmKJ~Or;)d68uU|+%;nOAHw0!mEw~GVGvR=Xk^1KPZ3oyJjk@8#{PEr7xY)o?B3ZwQ zGIawOuVq-m7F1yBuJ5C5TqtwHWkkptD94+q+C<%=ivsX?$i1T} zMge0KXNo>rWfmoL!1G4Nf@&sL5y#`#J?Dp;)k~@o8`)MmtkH@ISpE=auToPf>V-KnXy;vaeDP} z=Y3kupT^H4=H7FeT9*iyy_lX&+Q1(68@%X5Cp>yRFg zO<+6--(J13nXc0AHEbk-oi-w>E4A@eR<`aRhQj@i zMSki$V#|jW-P|KIpRTk=rAKDnB(9b)TrDSi{hkK9z6O`*r#7J@2-H9IOz|16}9v=UE*{n+c1Zk_Y$z`{{v;cYQIZ-al=fAzovn(~? zn|jLMv-?y7I*qa^JN!T)Q(@WGxY}u_I8a(zQw6}_asURqn@B*4|6i1E1}j<@%ibeG z3?4>4-FCb>I^yV3eRk40RtPl1_{wU9ito%BWl}suXLKBZp)}<#X(+MU1dzz`+wD}- z?ueY|`u6&@+%$#LIIds(>WXg!E$yG)UJUI3LCDE4PnjzGb>QYYTN7L+=hLFhiu>^$ zH)72sJjt;CZ2tA4rT=`OV|-~L`fE`7$C;9?wVVL~WEbwt?mX%o0orw@tl4=7^=MtZ zz4qOud+DLs7djc~(WS~Qo35H{Q_xkwcE746y>M}Rn){bO+C#<9A?Nbrc2QaopPr|V z8O)M~h7>33KtuK4%*3RI9-9{kKItR+pI979&4|&NEj(l+3#NfIHrsi4+bWSDJVlO- zO7v4|98yf=EH

fCVZDDcTJcX%HeG@M^*!GHZ{Y_fa%^8VZOeiDyPiata1Bqy$D; z+>Pzjb{X4=rCcDm?+cec86T#i!<`fQ+@c8o^eQ&3Np_nR2#3BvIF7NrthTSKe0@uy zBYXm_HrP9Jz?`t<*mx6&&Y}r7&NBeAlm+nlPyAv3q*itgRbFaVvugBMoLoj7*eBG` zzT!p4FkXR5h@~jW3#S@*>gBnM`qijYEGoE)esR~FRuif=AX+{?uktln!<<&fSP?ho zxO#HW<;=q!psr=nxwW-{1P{zmja&L3LC;l7`eS?|_c`cBc4uxZ909AO0&N#4S*bSo}WwGgYuWQ&z9we|!W?^w5w1 zjwLaerO-@#XjO0hpWv!mdf_lsU^UYf=mOmXA>xe9&#y%TPbR3?l;4D#qcC#l<@6mU z=jHu;n-FQDCGdwLV_mz|`@R9UcxnQ%l5c(IUbPS3EN`{7B2U`AxvQd4Etuvy@4g!W zQ`Wsju|Au5lh}tu2_UFTK^RB&#W|Xk!5hhhk;0?3oA3G9NMa9PzBF}nO(#K>IHc@E zX|eVKEP?&2KD*H|>t(mbLee_e&Q`6u zazg1J8wrx4Q=+(3Q*&}@qhaY*LW%z+lUvki!vh8x@!^==d0<%Ld3k%tGYSOJEOSg1 z1)d#cLfaUD@@~Z>;Nm@Eftl1hF4Q zABcR=iPYEF*G7m=PTf4P@_94XF^?&@d8RTfizm$#Cx*4@4UCuHd$8KS5$^7pIq-I_ zve;<*H^j62B|!3jO|)=}w-SwJ`{d`ySx6KA)8TXDgG0P@pHC0|&Ef6Il0N(9Prh0X0y<%-Fig07(JIAR3vg6?0Vmel13( z#hdi6N_M_kqhR{D+>k=`XG(bAi4-I&zSE>wkQo1bmib<Ct&oh#lsLxrkR8b>_atlfD)%o`|R#Y6eBIIQnqh!fgrv1bCgvY%50X-?B4z=`) z;13+%(!1%bZr9@&vEl8hckibmAc}|OqRTrhtXHjyN5k-3Ew5V7D|yF~vCF;sX$iNg zoj&g^bEQlCl=X@KU9?%Ii#E)4#kiXAL`{JR_rY%qjO*Ucul80ng4k>MZFF2w&Zvh( zIGsZVXhtI@X2yMdVoF%m{GPX*Oxu>uBgOEX^QfklFhKYc z?&?1P4Z>NeLLqNz_iOjxkzfKecqKnlF3@>;l4339j0EqlRt~>x`If`Qb?v1_$=mD7 z)?hhJ72`oBvjjV#JRl7)7vuq}n_8Ved-g*J6K=MC_Px68fPAIQF$ff^V5QJ^Gz~ia zTBA}UoK`ja+`XxnaRk*9Uo(2e-#qYCQWt?2PGAfka4$XFDTC~CUj~xk z9D@T8jEkr`i{U}b)h*(QBFE_%>0BP39ZBUXQQ@3~78C5oa#=qW1y_**ji-bzMAXwM z{Kn-I`MVF#U4l{hH>K7y*Ni$1mpp@E<*X#5^luoU0g zi?n1Hro0}RD#Xaz0N#!DP`mTA9Vo^Lfd`o3Sv@Y<%Jauub{-YoQSM_5s5jSLjOuaqJRuy~0=`8NT_NwR$^jNR%&k#Y#= zn+MXDU$G*K+RN!@;z-;ox!OcblLF3>jfW*}8B=v%Zq~Os@Bp~HUk9SMo}a^oF}*;k zuwVWBED%gYg{=(mE|w=jFDA}VN*-tsf@s9%qOwLd#avveRzz`8K`6H#Zr%~ga2k)D zdC0u~G+~!0=@Hi~QLao?OrUM92}#p4#Zo10&H#OTI8~tnv5&$@3UReouWWEC5#lRp zp_)fYQ2mH#r+k{e{wc`dH4cR+U`)T~fq%AX{uy*@J7!&xzh7Le$)Tf#p zrOO@x{qlXzUw66>0?$t7wPxyU31@|Vf~OzDsBvDw?_pa(qF7iuRZvC7l^ucl9xZIE z%(2E@2_S1Mmr7+gXh)v|dPfxb>`iJ)6$5(HnI%|*5ZvEspxCwJ=8r}VQiPHjJ8b&N z{#{kLt2rB|0hd`?ZWFufC(4D*6*uAq$ANbwSO)cGO&IJ@72S!!d6<~Xs{Pf zzKdig*tp@RGZ)Wd)dr)(Zmeh24%JnnIFPOtF=UrLzV&6XaNiaAfVo<7xBQhV{t=6y zrp!3+G`Y*^!uox?yUAem`mFsU+gs|Sh?Js|kSfjfQB}qD#|MwS* zIFw(Jy}_r-aodX&G3v$d{|IhgzZA1?cy;-S-hgoO?<9;iwKx~st#;;DMN(SQ()xKD zvbT6FyJ&iiANRIk`d*iqOiUjbSz10=KO5(AY?ys3NRgfT1d==Mp8a?KH!Uuc2a)gzQf? zw6WXeerVO-jrd^H@wMff{|VUwJfT%oZHol{D=!b%a;e|&vrI^tlg}-hDg45P0Z-+HMQKH^X4!6>hJt>mtdD4j`<9!({Bm!yipTu(Rj3`3 zArql&P+bz_gWp6^Ee{OO<-4ShC*F)}j>GFA+KO9XMr_=LcJ*h|DIrT*gPQ;oaS`78 z>$O`k<1p}=S60&u$yHTK4GdCx%Bk_vKJY}m-Ph`9czo&bxbj4^rf@3+u<%sEC;bg` z=rAsgQbSH|kYa3C?9`Q4{+bRgOxNP4PM~E|%;C=bN0AhMba84Cou(+T;c7Wq!~Z)y z&h9w5o(X+UCqy76$A1Y7<8!{oOvfjFsu!@H3ASBO-Le8T7P7al`=5C zoFGMVvwww1z=JZRlla#whuO%HpXgwd3zcmvy)3T4+-2f})2L;*C8|{^BG1hq?=c?^ z(9)@QcxL^gB2wq2zO20O^cVFxA+#rMoiB|qX?RDrKnD#SMnFf&d!F2wfcZoqtJ}kTHU1?vMLxfl3vwsI8CN+|=W#uRh#t_0LY8TfhBgX>dmDEUU!-Lk#T7VnRwq ztV%k;b@@=PcnG}bj#V@q5U)3h<%ZNOMJ5wAg&R!h4SJQK(bYH%U^*cqcvJ@IloXe5 zT?4qUz051+5d4+Go;QAkz2A-T!q|P0uAN2nsGU&gozA&Y-$sF1x3-4YMSL`*#^snH zL8^5~;Xs)q!y}5T+ayQ|LX6nBoK(lQ@68JYnlF@^5+MQ{YU)^?Hz04DNm0YCDkF^;hv*ffQ(= zziV9X*&ip!i;M16-Dbc}l&B8z1`-AUhiS5e&NZyyV#yz*AodWVuONkwT^D^~;5iGm z5vkekmtU{6Qsn@Dcf>Ri;ZHaT#Q0})esxXKY-Vr8xEB9JTZ0jVIO6%<#r6z* z%c`rssv?QI=fj$s=P60N4Yz^BkfLfHMRqUZU0-7PSx!D@Qyv1-e3fXYKb^Eb4W95vNmET~wk&W+Hf!4l6`?baB188TnuX=D> z1yZ&_ui%Jslu*x7_Q%E z3LHrjrG7@d`zqAkLV!4v0ju@*%MIDsGT*2oP<8*5cmSQ47<EXY`tns1)k(ZkYp^WsuWmSp1EDAcMYtoJF`t}xwRnL&DBw|lN7rtz_i8=P(9r%LFA^nKHb`WJt?W+S54LTvOM;mJ}JOv|=jdi})D4YH?%Y z^Xs5bmJOl4()R=vYbJ^wbWsrLHxb+nTx(%JXU`LkLh{;3zL ziUu=$SjqEvyNMeBzkr<03U=oa0JV#Z3aDH%t6WGl-=f9c6(fD%)5r zB#7@lr)_is!nE;sk`h`S*>7=KF%dgZ1BPS*{HtgLZh)@8?UPlzR z94`EsD5S9eUbeG&{D~yxJw>kt!r{O(a@lwLw5P4Y1iJEAYM9bXM^&+PF@*4hMqC^i z7Z3+1^BU+$+22?ygPaadvB9uIMDN>Pplza$2ee>Y_$2v!V{?pE+vt$0IUHqo=}v~J z4A%hihABSMH6->CMNv~sLDx7rx>IscSBM#70T}OHhiunYdHK=MlCb{Y^i=LeYcen8 zXW^EwLIILLHj(Nr$d*YZjYS34bie>tr4rdOB#IR+fLe z6h9Hwg=Dl7%Vy4Xg~PpV?0bPDEjr&^2Ef=& zNrHQ&H1s4?cGVJXCGeH&Y_48J8Q}iq#J+{dz8rc@*%p2#pfdeNtmD9|!UK{BQ2&sN z=X97>LQnEgKkwFnLGf8;ZE)QjxKLF4xoWBnh0;cxzI~i-3g@p>Qr6c)wv8k{hHgAb zja3x!#b<#eNbQIKqJ{hCect!H9+doX_Vb}E|44@ou)O_(rt)olYipf5F#OYx6%r{r zMJh-%Pvhu1~w;W%d-#P|VE^^tcWim&H_f zW(-+Ubml5G+J20!(8KYpFa$2x8I^wjrF(YCXiJt%j>Ks83TE^b@xrL@1_cay z*NakTZHCDB@(!_&RI2H`0BGUIEjD0qjj?DA399B|X2j~)42UXD1NPY{|1SF&Xz+%fpWTQV0p<+IwJRhMm*~ zO41D1w?EK_z9PhrA4@GZt>DSPnmUbRyukYmtnUea z9kS!ifTr18Doh{RT|(@mc0OC%3HoDR^lh3YwzIw!%-K$MJBzr z4kkvY$DeT^r%g13rGx3~E@T%bQ~Q>sp?_J5<$mvsGfjkfPgTktQE^pmJZ4hmsIZ{Y z2&tmlZl}Thnsy{}K0XojgZl%LOlh$?5u)qIsx+$#CPrnhJqGr!bnf}hJ)~Q4QG8#T zo3&SIs^}Im{xN5nx2{1WcWEM(;`4hbJBzeQ0oWGMK%!d0Srz_KDhMdG)v>Vdm;AGX zxk-KszNHgvPWN&tFMwnrp4NhN_mS+kPovN~pZzkPv}Ds$bwPgBIzMUIgm3Lt8oJu& zh)fEAOG14s+$V_NpH%-0JaaQ~@{9KS?>Y@|N2ZQ2old_rE7e+hX<0t0<=Wt3yZk87 z$CDIccoss2e+GThxFz8gbLB<1o4NAwh>0x7s$9I|)>CCI>|&TPT7KhHkYfw4d(t`k z!GcnJb)-cs%^&hI7lg^q^K_urXp#fod{5#z`ARHD@;aOpdGF(F z4H;=5d8^oPw48at8I#oGAD&Z6meJW->C0B^C}%|vYE1J$mY4sf+7vo z*A~5*1}>x}4ZI=NoqQH~V$>e!v|gemalWj4fo-<9boV+U>bQpuOo`vyf|10X`KdG1owg!+oLL9Xxx95e z7G^p8_GztaR>q_9NU9f42&chSf-dZ^4}vkGXcRqp<|^hf=S>_S~NSL%P!CnoF9biHOq3z!Tm36I_$9c_5!;e9j^ zJ57B?MvCB8vKu7=T_N)(RmFVZMYU$G)1v>KmnISJw)6U4OUWLlc((oY2ru?-Diee! zlsVgbX0v`uSM#p0NS4=5n`I~-dhg?&nm$UjaQ7|1;Fj8#y4;G=OMT+9|3!uru@Zit z>0{09lN?s;#IGTBSfXZ@r6@bs-H#RSFWiX=r{fDrhNESEC{@+A;&IdrE2@ z2V6W0&jRbBxf5+S5@43jRu$QI2BnGjC^`c$0r0xtt&{;eD}tbXNrLWoH}0?dF!8FN zI&h9hOw^d{-}KdndnBPhssNh#ZJ5tG)O=Oo50cCzt_bxI~l|4{TR z0St2ph!s|87N;MXXRkKA_ZfJQ&)3^+b6D?vFp3*2C$pZp9xb4W0sB{h{SEMB4(VGRL~O@9}T8k&b5vF1(h{ht@Wl?0;qSz}%UI+<9xj<54@W!;!sK%JQ*_z}rT*q5sE zJJ-s^s)_Qrz|&b6dK#NRN5fpahP|I?&Be~yOn`^&Y2bxLqd_+#AOIWm z%6P(D%ZsTgcIFywoefhDIbH#dXKE@^91g{zGTnI#)?o1SOHuIAOMs%?iOApzIdT`< zDfm8rojd=b&8D{uIl>TeFRW@+mC`fspZvN&9VwkK(OVJ7NZf>2)|($Bn&8q>-`Y2~ zh4`3W(P#*;qgv+BmN8mj_n5D9@lVbx>|rJXHZ6}Qus<3{dwv$v>4{cK2(h@WcXtm^ z|6SaVoX%)^U1R(+%aVh*q0_d?_&xjW_GwG{+18IQeKaVHt`XFg2|ND`qSaRiJ!cE_ zhcZSoezaJ!ICK8wFUW^iMC(MB#XbJ58S>EG6jDLRdc*!wD)LT};LC;**LgybZ`7N$i10V4QRHA3^sy#JEMr{ZW6)pLDzLfpBv@ z7z0`Txf3z2p(bxt&}FXQX>f=Ee4GU`PZaRn8CI*JaO~H&3+H=n7TfSL7?G!a;I8JZ zf9|O%c7jk3Z80pHXG1vM<6E;&1 z&=acaXHM(jSw^K<0Kq^&RlJq@56iIV|97hw0{GR(iMW{lUhWq8PtJu$Hv|NpiVl;v z7?(QB2$=w>)V2dkjIj>hltz#A|0cm@sZd?0n8T=p_FHqLy*BsLuVqXx_&_|NCow;ap?QE3@h@ym1%P8w3M+oBC;v@fN>&d>^d>94~)fH~o~Ir*4{1 z+BcE)?DoqY6W$4osF|>R>z+f#!FFKbE<6A#|@ETI7wz7yjK_VT-w2 zZUd-*k&~pej~58+$9St>Ui@ep>@+Z~Wj0Zv-CVu%MGJCB#JQnY{E)(@(#2QEuC%J_ zv665W1j6}jUxsJ2u0|>9kUAU6BYm#yuJQ`(GXgS)Zk*HpXqS>U)w&%Q{(raUVWQF` zWW9fTu3q;mq zfAlq~BKj#=sYPA1O^A3F{i#c9CDp~cH3h2iq0%cUeD>bCF=x7_>+w=skJ|C#kaRh( zYs3T#$(ofd_)+^;-Yf;Aa zm5cZuUG@Oe=`5BLN|hhOj`A7M_R+sz(Nx;O8pLjZ$4+*ikTZy2i zkTGK1GsZ8Lp-KBPA*atfew~=gD9y!^`pT$|%>RRDc8pg9iYj4yXhk^Y(jBt6**+$H zfBcf(dt5;JCmr^^#na<6!+P8r^%`3&)DlltV{DFH>*ltP9bu=zdB%7?8`R*EeP!Dq zWBH)Qv)DW7c-r?E-)Am2OH-f=JQaTb#NX{Fz0+O2VsFRyZ-mD?LksoJGc?;D7awli z6cOb+=c`tKKdiHK^OX{iZ_zx3#Xekfxnf=?@g{lCD>nR^@DJe1IF{c->0QYRWM z0U#PUR(MuF9j(c{kproUuiEj_+?2jk{=T2@zff3K8{B(3c-k+~6OwlOiY!U)odMcY zfMRG%9Z+6KEuy$h1DdAflu+^_ypLSwt{mK+%F;+2A%fQpTMu9;FpHHSJ1aRvB5*<` zX2Al$mbx;oMOq7RT^HS$((cu$ZayOjV-YE0L-hW#Ek@@1CK599RP`*r#?w^!PC#w& zuD`=cvhz0LyGWw2b7n9`KTvA&FH{7kml9HyuRUDX5p$i4Pt!B~7wg0g_srU9a*a z5=^DOdpAejojQ|?3M}0eWsM1yB^^FOJMUefjldxf)OPq#uRT=dERsKNk%`?nvITe7 zpYs${?6Im4>_tKe#e!!lkoX))iE#bA zMbXy<%*h%%V-mk@QbSaNil}k@LPc9QuNd*vmkRd1gNit*G`Ol}0H|G!JJhnj&a}%g z8kWSfUa@=pC#!E}*i56GcWT_+vP+COdSxc;9JEkaUakW0n~bl)~u^=j{27p%))|m>)wn`x}w2OHvxX_257!kDY6Q z0jo{Kh&UrdP5~m^5cTu%^c#CV?8VsitJJ2`KgcU0&{rR40QZ-DQJb1o zcLvfoyK;%&G4Dhr#Zr)6Av@??hi4T&TSS87$r{T`bQCwa$Jf}UITaWKaDcDe*2~1x z<@7sW@ct>-6u`Nw4)w1OV#Mr0G{A1m$lbh8*^VN}2ttA@JK|YRr6^+2nvY764m}1*eha zL4o$_-~XdLVqKy`Jp*LK!I-^@>Ja9{JwOOltXK0kan6lPc?scT3J41M1;P>z17xYuu z{S`6dGx>4K{M{k=19yeLeXj)avD4Ja=xB^^+kz$_dg8f>%(?5fSopihi78KIy;y-6 zI`957G}F7Ar-Qe_EjPmsDQ%7~AihT2TU%FRreI^El_cT?Z}_oZ+G#6Bl8}OLURJPR z&p|KMr~#!^<^wLzfm8$1HOJA{WTl>C_Qi62nf;FfoKw;$GbLc*8wTiSO(rtQyXMYPC)_$HDTs zpY_MV3oXu~i5JPwa4Xtw-FR*h-Oid+?fJ4061$jL3KQFIs=pvvIgdUIU??b!BUiZT zx!(~efkG)`#dNm(M_b8yzZLTXS~N1235^jPwy?75Z3@SDSTRwYbxuidZvpH=D_KtZ zj#BTZt&&ICGL|Lh^jgrE61S3v^*Eaj*TxJcFD0kX!+s4N*z*(IOXKYTG)+^;$8Q%=U^_Y+T44T0S@EOkH2Nl; z&XrHPo0x>Rr&{~$tEO`Gux;}K>Spfbalc_K%Za{8Hj}uh-R2}dXaDeuv?7yr*plsa-5(f83mF07 zGH5j08waF8@Hy*Q{G$<;dKe8uUG13x4u8qL_@Q*A>Gv6Ee6+L6G*afoSjatH~ z54vd-5YMuXZC`VLy!4UP`3bInTa?WPv_?t0Swrihns>Hal)Dk1CcK_^GiX0%Yt$v? zs4Zc@<@{A4g&ol;t|-~7#&{*vOmH3l_fJ7Xuw-`<(eRBH@gPkzblF?0l(#8mZtVUP8MJ0hO%EJtJ+$CxpY=o-iMQJp(`SQN?`{`nM)e9b9Pzum_e`)VgfrN3w`Xz zO4-M_d4~)ya0o40%eRxnjsKp(e9|~IPSwA(P#WW3Rv>x#i|n3rvTburV21B=w+$N$ zdQAG|1M_R9l3`zHl=!mw%<;%Ab-=2o!t<2@1FakWs2`=1U6_3Vh04byHzW01n0;JC zwc@bY81aQ2(Pun6k*~|UUA}!)9cL4di8xn@?xoU_X-8%hJmJgWgRjXGYKmsl`Ojt_ zj6$P#z0#_t&k;=w;?4EXbk7j2|7kR{-k5o`3^Lgz5}g4}NwT~J{D&YM?zzRWLzxak zosXKjtKH0qF7Sse9=$OKH4#|SdcrnpmB=k5Btasim#V^K9|&~`6$3BB$YkW2k`+LG z)JO1FVT?xw?@jNdTbTVZL@vDtdY8Hr;HMD3;pA!s`Dre8d4yqI>N=L_4oJv{XzJSP z^aXksz0K42>O&5}sJ`tEYSesu)N`*nemJS0fg5Em%G`O~eWb^R5jYfG$Z>|RP;3GD zI>tJB6H2oYq#Y$!Hg4MZRxCpd=F*0(<6DO`JkK)re7WQNZ0comD#RT;ks~uXO*pWPmuE zCj(04R2Da}iZEBpU&r7Y16Y%4=YX)?8W7Cs0F>gXu5C^s}S!ja_4%EUP^&V zgUgipY~v|zW{DT=TD6u6{Gqxp>cj0Y$rIR0b6~Mocs3m3Ci`!0L`Ou%jANTXz_*|m zZ2jo`HQJ!;w+E0759*Y5BRkV5JBP!mvj6_ATXiNSHcf?{{%4SqHqM4Bd&lf{jeL9! zY$0fXTU`JsDU_K3r;;q)pdSfg*ZQrn+mM>0M$v;TQ%}zD{Nu*7mO-V8S zSJ8Z_x^(fX+k}RABB6N&>NOwjOg{NX&psg49b|siP~sVUfyS=AU*4b+jH4PeYF+7& z%K~H>s%#>ed!+}Ci_`?Katv?)C74{vVV6S)Lk#%2Zc_Wl+_YiHSB*#{H`ZX$TBCL{p!eXBmd$)1~DxUbRYUPtpSh?P}D$ef=deb=k&Sos+niVrI0|M>iH_gDNa9I z0|2;|58OCS*?$}F&dSvgyIb2^J+raKs*;ye2dNKtC^n&jo5bPv6&5{PW0V7-7_fWlJCxC|8t+p(Bxzv<6h-& zo`h(DdUZVc6UIG;5*lRJ-&cc)pS7}Vln5IPNwWTMd3*U= z-SsU+ySy;NdoSfbZWvF-RZUt+l?Kd9+|IX_+=@Qt+IChcILh`M0In~MeQZ$4v*t~g zQ4h-zr9t!DzhslK{+xeMONa4sEklXjTf1h*L6}xW^cO~@AjPq0nc@Xoh@M!C^&SP6 z&_z0`w>RZ2Yz$TpxKCjM{;mQ6DSVilcAz0`XIz}~dV!2x{nJnXYMo(Y;=C%aL83cq zh^I$(SfDNKKh5T%{zf6sqZ**WudDVz**vnSPoA4ROcu?189)qfiUp~MO+OstXKN_> z?wKD^{3%kD)O>bCY_6_E+qM(wED=3SH>bi`B~*ASDsG|1Ay2VlL0&~E1AlmjbZW7Y z*Hh#L-8sGNffi>njm4Vwb&@u=LWbr#uXnn|R&`qt);cC^za>4Pq>V{&X*=KAJ$?Ja zQn$)InE3s52Man|+Ht38^V-AXu}&+|8N{bRPDmP85evN^2f%cn;LZ%+(Z7KLhAS3;Btelj=c-DPdvo8L z;@TfXpn4BQf5VJ!Rj?7x{5Ls5-}zCi-{+=lpw*2nPQRXooHeG#0Z}oY+Rt5u7^WhL19C(Q;N~v zY&yGFTn&~Bd0r_xOm&8O%R&K(5fdObBs!CC+Z0vsy+z#rb(ovUt6D%;Bex#y@RIlr|$vlt>31?66X7EfI7P8)}xf)n)9^`Ew(i=?Ud?HQMk z)(U&hAGnIkQz@lPJ_uQsx6S<`;1)dj_t93 zUximk??%J|E;u=4y_~Tgh`2miI{04`7D&GM1Ab|aTw`i-q(J?Kx5ZGhmW#j(uextdcKgNFw@pL`7yzAB>VO-pm-; z>*!?l?OzdwHBxZp)@G$rHct5O?9_ukCOdPoaB&=0*eS~YEH3xQ5By|xMN+5P{(qhK z1NxHp*AK7Q@rfLwri=nRE*00qJihst#;VlbF8%F8S=QD8DplG5BAqld3P6vwnCZm* z2~222w7;=_k!m|sd?+c`^~vH(K_knjFDQ=UR^Zzf5uqZ1ly{$}L*KrlI0V`O`7&?v zvwzP}*0IphRzi5*0|5?}jwMcALK$Ae0z>i2!Z)Pgjf?ndVN1SUS`s|CWmGQ4t=R_W zh`x~wJi+}IU=<+0><3Rh4Z)`~%mL0;3A{X6tPla0dm?BEh8j8AtyKkLDqeMuIw7i7 zp3B0!vu_77tv~m?_+6G73i?#ju|Xd@^eDLJU(#sWVa0!!CZz9@YZ!=}eUCZVR-uX>F`jWmNF*VJ;l zHK+E~-ahecizkN=-*BM$_#v!4x!*it59Da%mL;U#VJ)NDN{^y<<%M9S z0!o&T#hm^{inlnNKiBycUQ@6D$yW%}BZG4rN%2qPnYu%-)uFYloHMehzqvPFOJ1AW zgyh(4mbOW~rp=pmLfhdf2()S}>1ZolUOgs1R6`1g1E?v z=Y3tOvarqj@&|j74qY7hsK(BnFMxp5m1aBfkpijc;^IG z?d|e)iUDmYLbU)+L3}-C!Oo7PH=g!3sd=tn>IzOXO~twGLc8jisVc~$*+GY@`u5Pm zZVbXzACZ;g;IW=onKJ!q&636IJ*JQcIb^8t=l3Oht~!MWlYeZDjxSvsK+qo5_(M0` zt{*uk^CVvIQuMvHHb-K~Pi|nN`PY{xIfD}IU#?tA3HRqX8FhA+;sz{-J+e|LwH^`^ zz9}m!9y&UXc_gt80YvoL`4~WWM_}M;hUTYIu?q7304kSO(xb&Tr*fIy&f6d93k9fk zxkvN-G3!1uKMmzY$V?C`mrY>I>LK@#HSVRq#f_NQYma3WhKqy{9$x?&sZh z1O4=yEPXe20vTuH*;Wf;myfL!%lq;JQeS_dycc;xfR?I%hB@S?5cDi`h^f9*T1?aDstH+HqHpZr@UDRn zn)Tkr@zjgJTam`866w}2;=a&}+m?MnGn~uN3u?Ej^3ZV|0Om+oQ-14V%iDJ`v2M>4 z3)yYRC^}?`-e!{w{9*P{JpG0wLQm30dZ3IC!B~^mm(t~!ekc`dho#!BErEDV4;tK@ z0eUI0g|o}dNUbK_LI7Jeb_!j3TCMHvJ!lT8xA_m2+d0d~Tx5GMG}l%y1xHgT85-sC z4pf@CM9&vYtCcPG8~h5D-`}lXqP^gDG6PhOg%_f9F){Ofrwelt4Sh1Vw}c5>yIQJ* zFYeLa5?G6c)O*;t2#Ls)U%`r4eQ}5Qz!cpu9w5mXp7Md`CFlPWQT&mYjEs;v;bSuWJMH(QQaaw-~EA^ zhHA?^`n7J`_J!^WJ^{UK3ks*^)Z5?oY>t*vrt-MsatzcWx>y{Z9>V0T#2_haZju9q z!ycHJ5W4&hCQC~U>wH%UlNV4{mtnsLW#9Zfz7D;d=M()dDy)t;Y+tHHXm)BVHeMj$ z^G1iefm#f#7K8Fg4FX&i9XEh6ni62F9TSk3e<-^n>Yk+|d!~36i{d1D?wNymk6}-zn#kY+Jo+vT&=FKj zH5IJ9+}mQm`mlt3cBAG=(!n@0XqG;!cs7U&t)waW-mv(aLy#`JmDA49d zG(zI}8v)qdap?K{uAz$E5w4zTg}1#g&tQxoCtfG56u^np-H4+EL{5kJl-!{-i!Xcf`m;oA zeUCkrArbqLBQactQ{l*GwoE?FOoZ(;O&==;15i6zieJ(w1t?`4@H9FLaE6YrUdg*X z|7~r{)mGfcI8}xJFElvBn544

9my;tP>IPiXd0v|Qt1b6*-CU_)#!g0s;Bst8x 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%0DjrU%r+OX0i-E!g7VahVK|SqKzKn7B6=>H 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

hVRZ4KR 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

b>R>$k+ET0X7$Wb-zGT_d}SkzV)*<+m)x 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 H_n-d{|G+e= literal 0 HcmV?d00001 diff --git a/docs/landing-page/public/icons/rust.svg b/docs/landing-page/public/icons/rust.svg new file mode 100644 index 00000000000..62424d8ffd7 --- /dev/null +++ b/docs/landing-page/public/icons/rust.svg @@ -0,0 +1,61 @@ + + + diff --git a/docs/landing-page/public/icons/scala.svg b/docs/landing-page/public/icons/scala.svg new file mode 100644 index 00000000000..1afa2fc9412 --- /dev/null +++ b/docs/landing-page/public/icons/scala.svg @@ -0,0 +1,100 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/landing-page/public/icons/swift.svg b/docs/landing-page/public/icons/swift.svg new file mode 100755 index 00000000000..9e97bfaa8cc --- /dev/null +++ b/docs/landing-page/public/icons/swift.svg @@ -0,0 +1,22 @@ + + + + + + + + diff --git a/docs/landing-page/public/icons/ts.svg b/docs/landing-page/public/icons/ts.svg new file mode 100644 index 00000000000..a46d53d49f3 --- /dev/null +++ b/docs/landing-page/public/icons/ts.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/landing-page/public/locales/en/translation.json b/docs/landing-page/public/locales/en/translation.json new file mode 100644 index 00000000000..7b4428eea6c --- /dev/null +++ b/docs/landing-page/public/locales/en/translation.json @@ -0,0 +1,108 @@ +{ + "navigation": { + "Get Started": "Quickstart", + "githubLabel": "Smithy's GitHub page", + "getStartedAlt": "Get started with Smithy", + "logoAlt": "Smithy's logo: A red anvil with white text 'Smithy'" + }, + "menu": { + "title": "Menu", + "Get Started": "Quickstart", + "items": [ + { + "title": "Quickstart", + "href": "/2.0/quickstart.html", + "className": "sm:hidden" + }, + { "title": "Documentation", "href": "/2.0/index.html" }, + { + "title": "Examples", + "href": "https://github.com/smithy-lang/smithy-examples" + }, + { + "title": "Ecosystem", + "href": "https://github.com/smithy-lang/awesome-smithy" + } + ] + }, + "title": { + "lineOne": "Build services.", + "lineTwo": "Build customers.", + "tagline": "Build with Smithy.", + "subtitle": "Modeling a service should be as easy, no matter the interface. Smithy is extensible, typesafe, protocol agnostic, and powers services at AWS." + }, + "subHeading": { + "model": "Model", + "build": "build", + "validate": "validate", + "transform": "transform", + "share": "share", + "section1": { + "title": "Model", + "description": "Build APIs your customers will love using the Smithy Interface Definition Language (IDL).\n\nThe Smithy IDL provides an intuitive syntax that codifies best practices learned from years of experience building services and SDKs in over a dozen programming languages.\n\nUse Smithy's extensible model validation tools to ensure the quality and consistency of your APIs. Customizable linting, validation, and backwards-compatibility checks integrate with your IDE and CI/CD pipelines so you catch API quality issues before your customers do." + }, + "section2": { + "title": "Build", + "description": "Smithy's build tool integrations and plugin system make it easy to get started generating code from a Smithy model. Use one of the many open-source plugins for Smithy or create your own to make everything from model diagrams to SDKs.\n\nWrite your API model once and generate clients, servers, and documentation for multiple programming languages with Smithy's CLI." + } + }, + "informationCircles": { + "clients": { "title": "Clients", "description": "" }, + "servers": { "title": "Servers", "description": "" } + }, + "heroQuote": { + "partOne": "Smithy is the cornerstone of cross-team collaboration in our organization.", + "partTwo": "The simplicity of the base language, rich extensibility options and the ease of writing correct tooling - all of these make it a must-try for organizations that want to evolve their APIs safely and efficiently.", + "author": "SiriusXM" + }, + "featuresList": { + "title": "Features", + "one": "Protocol-agnostic", + "two": "Codify and enforce API governance ", + "three": "Designed to evolve", + "four": "Resource based", + "oneDescription": "Smithy is designed to work with any programming language, describe services running in any environment, and work with any kind of transport or serialization format.", + "twoDescription": "Customizable API standards help to automatically ensure that APIs meet customer expectations. Validation rules can be shared and applied to all APIs in an organization.", + "threeDescription": "Smithy is extended through traits. Smithy's extensible meta-model can evolve and capture more information about services without breaking changes.", + "fourDescription": "Smithy models are defined by resources and operations. Defining services with resources helps lead to better APIs and provides rich information for model transformations." + }, + "supportedLanguages": { + "Source": "Source", + "java": { "alt": "Duke, the Java mascot", "trademark": "" }, + "ts": { "alt": "TypeScript Logo", "trademark": "" }, + "rust": { + "alt": "Rust logo", + "trademark": "Rust Logo by The Rust Foundation, used under CC-BY." + }, + "scala": { + "alt": "Scala logo", + "trademark": "The Scala logo is a trademark of EPFL." + }, + "go": { + "alt": "Go logo", + "trademark": "The Go Logo is a trademark of Google." + }, + "ruby": { + "alt": "Ruby logo", + "trademark": "The Ruby logo is Copyright © 2006, Yukihiro Matsumoto." + }, + "kotlin": { + "alt": "Kotlin logo", + "trademark": "The Kotlin logo is a trademark of The Kotlin Foundation." + }, + "swift": { + "alt": "Swift logo", + "trademark": "The Swift logo is a trademark of Apple Inc." + }, + "dafny": { "alt": "Dafny logo", "trademark": "" }, + "python": { + "alt": "Python logo", + "trademark": "The Python logo is a registered trademark of the Python Software Foundation." + } + }, + "footer": { + "Copyright Smithy": "Copyright Smithy", + "logoAlt": "Smithy's logo mark: A red anvil", + "disclaimer": "Full license details are available at the respective project websites." + } +} diff --git a/docs/landing-page/public/logos/smithy_anvil_blk.svg b/docs/landing-page/public/logos/smithy_anvil_blk.svg new file mode 100644 index 00000000000..8da861a796c --- /dev/null +++ b/docs/landing-page/public/logos/smithy_anvil_blk.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/landing-page/public/logos/smithy_anvil_red.svg b/docs/landing-page/public/logos/smithy_anvil_red.svg new file mode 100644 index 00000000000..7011eb7c392 --- /dev/null +++ b/docs/landing-page/public/logos/smithy_anvil_red.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/landing-page/public/logos/smithy_anvil_wht.svg b/docs/landing-page/public/logos/smithy_anvil_wht.svg new file mode 100644 index 00000000000..99dcda5762a --- /dev/null +++ b/docs/landing-page/public/logos/smithy_anvil_wht.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/landing-page/public/logos/smithy_flavicon_blk.svg b/docs/landing-page/public/logos/smithy_flavicon_blk.svg new file mode 100644 index 00000000000..a760c810f4e --- /dev/null +++ b/docs/landing-page/public/logos/smithy_flavicon_blk.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/landing-page/public/logos/smithy_flavicon_red.svg b/docs/landing-page/public/logos/smithy_flavicon_red.svg new file mode 100644 index 00000000000..47cce194fa3 --- /dev/null +++ b/docs/landing-page/public/logos/smithy_flavicon_red.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/landing-page/public/logos/smithy_flavicon_wht.svg b/docs/landing-page/public/logos/smithy_flavicon_wht.svg new file mode 100644 index 00000000000..6401d690446 --- /dev/null +++ b/docs/landing-page/public/logos/smithy_flavicon_wht.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/landing-page/public/logos/smithy_logo_blk.svg b/docs/landing-page/public/logos/smithy_logo_blk.svg new file mode 100644 index 00000000000..181ffa248b4 --- /dev/null +++ b/docs/landing-page/public/logos/smithy_logo_blk.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/landing-page/public/logos/smithy_logo_dk.svg b/docs/landing-page/public/logos/smithy_logo_dk.svg new file mode 100644 index 00000000000..fba319fe0c9 --- /dev/null +++ b/docs/landing-page/public/logos/smithy_logo_dk.svg @@ -0,0 +1 @@ + diff --git a/docs/landing-page/public/logos/smithy_logo_lt.svg b/docs/landing-page/public/logos/smithy_logo_lt.svg new file mode 100644 index 00000000000..176a8197611 --- /dev/null +++ b/docs/landing-page/public/logos/smithy_logo_lt.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/landing-page/public/logos/smithy_logo_wht.svg b/docs/landing-page/public/logos/smithy_logo_wht.svg new file mode 100644 index 00000000000..5440695cb5a --- /dev/null +++ b/docs/landing-page/public/logos/smithy_logo_wht.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/docs/landing-page/public/sparks/sparks.svg b/docs/landing-page/public/sparks/sparks.svg new file mode 100644 index 00000000000..f58cfc54674 --- /dev/null +++ b/docs/landing-page/public/sparks/sparks.svg @@ -0,0 +1 @@ + diff --git a/docs/landing-page/scripts/insertRootHtml.tsx b/docs/landing-page/scripts/insertRootHtml.tsx new file mode 100644 index 00000000000..68e6f569be7 --- /dev/null +++ b/docs/landing-page/scripts/insertRootHtml.tsx @@ -0,0 +1,87 @@ +import React from "react"; +import { useSSR, I18nextProvider } from "react-i18next"; +import i18n from "@/i18n/ssr"; +import path from "path"; +import fs from "node:fs/promises"; +import { renderToString } from "react-dom/server"; +import App from "@/App"; + +const red = "\x1b[31m"; +const green = "\x1b[32m"; +const yellow = "\x1b[33m"; +const lightGray = "\x1b[90m"; +const reset = "\x1b[0m"; + +// get app root directory +const root = path.dirname(import.meta.dirname); +const distDir = path.resolve(root, "dist"); +const indexhtml = path.resolve(distDir, "index.html"); + +console.log("Rendering the static html..."); + +await checkAssetsExist(); +const html = await fs.readFile(indexhtml, "utf8"); + +const ssgHtml = html.replace( + `

`, + `
${renderToString( + + + , + )}
`, +); + +// Write index.html for consumption +await fs.writeFile(path.resolve(distDir, "index.html"), ssgHtml); + +// Output filesizes to make it easier to see if the first load is too big +console.log("\nFile sizes:\n"); +let estimatedFirstloadSize: number = 0; + +const assets = await fs.readdir(path.resolve(distDir, "assets")); +const indexSize = await getFileSizeInkB(path.resolve(distDir, "index.html")); + +await Promise.all( + assets.map(async (asset) => { + const assetPath = path.resolve(distDir, "assets", asset); + const assetSize = await getFileSizeInkB(assetPath); + estimatedFirstloadSize += Number(assetSize); + let color = green; + if (assetSize > 100) { + color = yellow; + } + if (assetSize > 400) { + color = red; + } + console.log( + `${lightGray}dist/assets/${color}${asset} - ${assetSize}kB${reset}`, + ); + }), +); + +estimatedFirstloadSize += Number(indexSize); +console.log(`dist/index.html - ${indexSize}kB`); +if (estimatedFirstloadSize > 500) { + console.log( + `\n${yellow}WARNING: Estimated first load size is over 500kB. This may cause performance issues.${reset}`, + ); +} +console.log( + `\nEstimated first load size: ${estimatedFirstloadSize.toFixed(2)}kB`, +); + +async function getFileSizeInkB(string: string) { + const stats = await fs.stat(string); + return parseFloat((stats.size / 1000).toFixed(2)); // using 1000 mimics Vite's output size +} + +// throw a more useful error if the project hasn't been built +async function checkAssetsExist() { + try { + await fs.stat(indexhtml); + } catch (e) { + throw new Error( + `Index not found: ${indexhtml}, have you built the project yet?`, + ); + } +} diff --git a/docs/landing-page/scripts/renderTopNavigation.tsx b/docs/landing-page/scripts/renderTopNavigation.tsx new file mode 100644 index 00000000000..2c920b6330e --- /dev/null +++ b/docs/landing-page/scripts/renderTopNavigation.tsx @@ -0,0 +1,67 @@ +import React from "react"; +import path from "path"; +import fs from "node:fs/promises"; +import { I18nextProvider } from "react-i18next"; +import i18n from "../src/i18n/ssr"; +import { renderToString } from "react-dom/server"; + +import { TopNavigation } from "../src/components/navigation"; +// get app root directory +const root = path.dirname(import.meta.dirname); +const distDir = path.resolve(root, "dist"); +const indexhtml = path.resolve(distDir, "index.html"); + +console.log("Rendering the navigation-specific html..."); + +await checkAssetsExist(); +const html = await fs.readFile(indexhtml, "utf8"); +const { styles, scripts } = await getScriptAndStyleTagContents(html); + +// add the found styles and scripts to the top of the nav-specific output +const topNavigationHtmlString = + [...styles, ...scripts].join("\n") + + "\n" + + renderToString( + + + , + ); + +// Write the navbar file out for consumption +fs.writeFile(path.resolve(distDir, "nav.html"), topNavigationHtmlString); + +// throw a more useful error if the project hasn't been built +async function checkAssetsExist() { + try { + await fs.stat(indexhtml); + } catch (e) { + throw new Error( + `Index not found: ${indexhtml}, have you built the project yet?`, + ); + } +} + +// Extract the generated script and style tags, this should significantly +// improve page load speed on subsequent loads +function getScriptAndStyleTagContents(html: string): { + scripts: string[]; + styles: string[]; +} { + const scriptTagRegex = /]*>([\s\S]*?)<\/script>/gi; + const styleTagRegex = /]*rel="stylesheet"[^>]*href="([^"]*)"[^>]*>/gi; + + const scripts: string[] = []; + const styles: string[] = []; + + let match: RegExpExecArray | null; + + while ((match = scriptTagRegex.exec(html))) { + scripts.push(match[0].trim()); + } + + while ((match = styleTagRegex.exec(html))) { + styles.push(match[0].trim()); + } + + return { scripts, styles }; +} diff --git a/docs/landing-page/src/App.stories.tsx b/docs/landing-page/src/App.stories.tsx new file mode 100644 index 00000000000..b027492c81d --- /dev/null +++ b/docs/landing-page/src/App.stories.tsx @@ -0,0 +1,16 @@ +import type { Meta, StoryObj } from "@storybook/react"; + +import App from "./App"; + +const meta = { + title: "Smithy/App", + component: App, + parameters: { + layout: "fullscreen", + }, +} satisfies Meta; + +export default meta; +type Story = StoryObj; + +export const Default: Story = {}; diff --git a/docs/landing-page/src/App.tsx b/docs/landing-page/src/App.tsx new file mode 100644 index 00000000000..112749fc6cc --- /dev/null +++ b/docs/landing-page/src/App.tsx @@ -0,0 +1,43 @@ +import React, { useRef } from "react"; +import { TopNavigation } from "@/components/navigation"; +import { + Heading, + SubHeading, + Quote, + Features, + InformationCircles, + Footer, +} from "@/components/landing-page"; +import { LineConnector } from "./components/svg/line"; + +function App() { + const serviceExample = useRef(null); + const modelRef = useRef(null); + + return ( + <> + +
+ + + + + + + + + + +
+ + +
+ + ); +} + +export default App; diff --git a/docs/landing-page/src/components/landing-page/Features/index.stories.tsx b/docs/landing-page/src/components/landing-page/Features/index.stories.tsx new file mode 100644 index 00000000000..7a0b1ddb96a --- /dev/null +++ b/docs/landing-page/src/components/landing-page/Features/index.stories.tsx @@ -0,0 +1,21 @@ +import type { Meta, StoryObj } from "@storybook/react"; +import { fn } from "@storybook/test"; + +import { Features } from "."; + +const meta = { + title: "Smithy/LandingPage/Features", + component: Features, + parameters: { + layout: "full", + }, + tags: ["autodocs"], + args: { + onClick: fn(), + }, +} satisfies Meta; + +export default meta; +type Story = StoryObj; + +export const Primary: Story = {}; diff --git a/docs/landing-page/src/components/landing-page/Features/index.tsx b/docs/landing-page/src/components/landing-page/Features/index.tsx new file mode 100644 index 00000000000..d4ded628b89 --- /dev/null +++ b/docs/landing-page/src/components/landing-page/Features/index.tsx @@ -0,0 +1,56 @@ +import React, { useMemo } from "react"; +import { useTranslation } from "react-i18next"; + +export const Features = () => { + const { t } = useTranslation("translation", { keyPrefix: "featuresList" }); + const featuresList = useMemo( + () => [ + { + title: t("one"), + description: t("oneDescription"), + icon: "/icons/dark/protocol.svg", + altText: + "Simple drawing of a smiling robot face with a round antenna on top", + }, + { + title: t("two"), + description: t("twoDescription"), + icon: "/icons/dark/codify.svg", + altText: + "Minimalist illustration of a DNA double helix with red and black stripes", + }, + { + title: t("three"), + description: t("threeDescription"), + icon: "/icons/dark/evolve.svg", + altText: "Line drawing of a balance scale with red triangular pans", + }, + { + title: t("four"), + description: t("fourDescription"), + icon: "/icons/dark/resource.svg", + altText: "Stylized icon of a paperclip", + }, + ], + [t], + ); + return ( +
+

{t("title")}

+
+ {featuresList.map(({ title, description, icon, altText }) => ( +
+ {altText} +
+

{title}

+

{description}

+
+
+ ))} +
+
+ ); +}; diff --git a/docs/landing-page/src/components/landing-page/Footer/index.stories.tsx b/docs/landing-page/src/components/landing-page/Footer/index.stories.tsx new file mode 100644 index 00000000000..f98d3955815 --- /dev/null +++ b/docs/landing-page/src/components/landing-page/Footer/index.stories.tsx @@ -0,0 +1,16 @@ +import type { Meta, StoryObj } from "@storybook/react"; + +import { Footer } from "./"; + +const meta = { + title: "Smithy/LandingPage/Footer", + component: Footer, + parameters: { + layout: "fullscreen", + }, +} satisfies Meta; + +export default meta; +type Story = StoryObj; + +export const Default: Story = {}; diff --git a/docs/landing-page/src/components/landing-page/Footer/index.tsx b/docs/landing-page/src/components/landing-page/Footer/index.tsx new file mode 100644 index 00000000000..3d7715bf877 --- /dev/null +++ b/docs/landing-page/src/components/landing-page/Footer/index.tsx @@ -0,0 +1,29 @@ +import React, { useMemo } from "react"; +import { useTranslation } from "react-i18next"; + +const tmDivClasses = "text-smithy-light-gray text-xs text-right my-1"; + +export const Footer = () => { + const year = useMemo(() => new Date().getFullYear(), []); + const { t } = useTranslation("translation", { keyPrefix: "footer" }); + + return ( +
+
+ + {t("logoAlt")} + +
+
+
+
+ ©{t("Copyright Smithy")} {year} +
+
+
+ ); +}; diff --git a/docs/landing-page/src/components/landing-page/Heading/Diagram.tsx b/docs/landing-page/src/components/landing-page/Heading/Diagram.tsx new file mode 100644 index 00000000000..982e472094c --- /dev/null +++ b/docs/landing-page/src/components/landing-page/Heading/Diagram.tsx @@ -0,0 +1,112 @@ +import React, { useRef } from "react"; +import { + Card, + CardContent, + CardDescription, + CardFooter, + CardHeader, + CardTitle, +} from "@/components/ui/card"; +import { LineConnector } from "@/components/svg/line"; +import { Arrow } from "@/components/svg/arrow"; +import { Spider } from "@/components/svg/spider"; + +import { ServiceExample } from "../ServiceExample"; +import { SmithyGlow } from "@/components/ui/SmithyGlow"; +import { IdePanel } from "@/components/ui/ide-panel"; + +export const Diagram = () => { + const modelRef = useRef(null); + const serviceExampleRef = useRef(null); + const smithyBuildRef = useRef(null); + const sunRef = useRef(null); + const moonRef = useRef(null); + const earthRef = useRef(null); + const waterRef = useRef(null); + + return ( +
+ + +
+
+ Smithy Service Example +
+ + + +
+
+
+ + + + +
+
Model
+ +
Something else
+
+
+
+
+
+ +
+ + + + > smithy build + + + +
+ +
+ + + Sun + + + + + Moon + + + + + Earth + + + + + Water + + + + + + + + +
+
+ ); +}; diff --git a/docs/landing-page/src/components/landing-page/Heading/Tagline.tsx b/docs/landing-page/src/components/landing-page/Heading/Tagline.tsx new file mode 100644 index 00000000000..93e6f883c81 --- /dev/null +++ b/docs/landing-page/src/components/landing-page/Heading/Tagline.tsx @@ -0,0 +1,18 @@ +import React from "react"; +import { useTranslation } from "react-i18next"; + +export const Tagline = () => { + const { t } = useTranslation("translation", { keyPrefix: "title" }); + return ( +
+

+ {t("lineOne")} + {t("lineTwo")} + + {t("tagline")} + +

+

{t("subtitle")}

+
+ ); +}; diff --git a/docs/landing-page/src/components/landing-page/Heading/index.tsx b/docs/landing-page/src/components/landing-page/Heading/index.tsx new file mode 100644 index 00000000000..0207e354d84 --- /dev/null +++ b/docs/landing-page/src/components/landing-page/Heading/index.tsx @@ -0,0 +1,38 @@ +import React from "react"; +import { Tagline } from "./Tagline"; +import { SmithyPopGradient } from "@/components/ui/SmithyPopGradient"; + +import { Card, CardHeader } from "@/components/ui/card"; +import { IdePanel } from "@/components/ui/ide-panel"; +import { ServiceExample } from "../ServiceExample"; + +interface HeadingProps { + serviceExampleRef: React.RefObject; +} + +export const Heading = (props: HeadingProps) => { + return ( + +
+ + + + +
+
+ Smithy Service Example +
+ + + +
+
+
+
+
+ ); +}; diff --git a/docs/landing-page/src/components/landing-page/InformationCircles/index.stories.tsx b/docs/landing-page/src/components/landing-page/InformationCircles/index.stories.tsx new file mode 100644 index 00000000000..b6e5aaf613c --- /dev/null +++ b/docs/landing-page/src/components/landing-page/InformationCircles/index.stories.tsx @@ -0,0 +1,19 @@ +import type { Meta, StoryObj } from "@storybook/react"; + +import { InformationCircles } from "./index"; + +const meta = { + title: "Smithy/LandingPage/InformationCircles", + component: InformationCircles, + args: { + circleUrls: ["/icons/dark/swift.svg"], + }, + parameters: { + layout: "fullscreen", + }, +} satisfies Meta; + +export default meta; +type Story = StoryObj; + +export const Default: Story = {}; diff --git a/docs/landing-page/src/components/landing-page/InformationCircles/index.tsx b/docs/landing-page/src/components/landing-page/InformationCircles/index.tsx new file mode 100644 index 00000000000..6cfe07ba7c0 --- /dev/null +++ b/docs/landing-page/src/components/landing-page/InformationCircles/index.tsx @@ -0,0 +1,26 @@ +import React from "react"; +import { useTranslation } from "react-i18next"; +import { CircleSection } from "@/components/ui/CircleSection"; +import { useSupportedLanguages } from "@/components/landing-page/useSupportedLanguagesHook"; + +export const InformationCircles = () => { + const { t } = useTranslation("translation", { + keyPrefix: "informationCircles", + }); + const clients = useSupportedLanguages({ filter: "clients" }); + const servers = useSupportedLanguages({ filter: "servers" }); + return ( +
+ + +
+ ); +}; diff --git a/docs/landing-page/src/components/landing-page/Quote/index.stories.tsx b/docs/landing-page/src/components/landing-page/Quote/index.stories.tsx new file mode 100644 index 00000000000..1b5ebd8d05d --- /dev/null +++ b/docs/landing-page/src/components/landing-page/Quote/index.stories.tsx @@ -0,0 +1,21 @@ +import type { Meta, StoryObj } from "@storybook/react"; +import { fn } from "@storybook/test"; + +import { Quote } from "."; + +const meta = { + title: "Smithy/LandingPage/Quote", + component: Quote, + parameters: { + layout: "centered", + }, + tags: ["autodocs"], + args: { + onClick: fn(), + }, +} satisfies Meta; + +export default meta; +type Story = StoryObj; + +export const Primary: Story = {}; diff --git a/docs/landing-page/src/components/landing-page/Quote/index.tsx b/docs/landing-page/src/components/landing-page/Quote/index.tsx new file mode 100644 index 00000000000..feb93895202 --- /dev/null +++ b/docs/landing-page/src/components/landing-page/Quote/index.tsx @@ -0,0 +1,35 @@ +import React from "react"; +import { useTranslation } from "react-i18next"; + +import { SmithyGlow } from "@/components/ui/SmithyGlow"; + +const altText = "Two large quotation marks in red and pink neon style"; + +export const Quote = () => { + const { t } = useTranslation("translation", { keyPrefix: "heroQuote" }); + return ( + +
+
+ {altText} + {altText} +
+
+ {t("partOne")} +  {t("partTwo")} +
+
+ – {t("author")} +
+
+
+ ); +}; diff --git a/docs/landing-page/src/components/landing-page/ServiceExample.tsx b/docs/landing-page/src/components/landing-page/ServiceExample.tsx new file mode 100644 index 00000000000..fcac7ff637b --- /dev/null +++ b/docs/landing-page/src/components/landing-page/ServiceExample.tsx @@ -0,0 +1,51 @@ +import React from "react"; + +const lines: (string | React.ReactElement)[] = [ + <> + service CoffeeShop { + , + " operations: [", + " GetMenu", + " ]", + " resources: [", + " Order", + " ]", + "}", + "", + <> + operation GetMenu { + , + " output : = {", + " ...", + " }", + "}", + "", + <> + resource Order { + , + " identifiers: {", + " id: Uuid", + " }", + " ...", + "}", +]; + +export const ServiceExample = () => { + return ( +
+      
+        {lines.map((line, i) => (
+          
+ {/* + {i < 9 ? " " : ""} + {i + 1} + | + */} + {line === "" && <> } + {line} +
+ ))} +
+
+ ); +}; diff --git a/docs/landing-page/src/components/landing-page/SubHeading/index.stories.tsx b/docs/landing-page/src/components/landing-page/SubHeading/index.stories.tsx new file mode 100644 index 00000000000..666552330f8 --- /dev/null +++ b/docs/landing-page/src/components/landing-page/SubHeading/index.stories.tsx @@ -0,0 +1,20 @@ +import { useRef } from "react"; +import type { Meta, StoryObj } from "@storybook/react"; + +import { SubHeading } from "./index"; + +const meta = { + title: "Smithy/LandingPage/SubHeading", + component: () => { + const modelRef = useRef(null); + return ; + }, + parameters: { + layout: "fullscreen", + }, +} satisfies Meta; + +export default meta; +type Story = StoryObj; + +export const Default: Story = {}; diff --git a/docs/landing-page/src/components/landing-page/SubHeading/index.tsx b/docs/landing-page/src/components/landing-page/SubHeading/index.tsx new file mode 100644 index 00000000000..a96447d3d3a --- /dev/null +++ b/docs/landing-page/src/components/landing-page/SubHeading/index.tsx @@ -0,0 +1,78 @@ +import React, { RefObject, useRef } from "react"; +import { Section } from "@/components/ui/Section"; +import { SmithyGlow } from "@/components/ui/SmithyGlow"; +import { Card, CardHeader } from "@/components/ui/card"; +import { IdePanel } from "@/components/ui/ide-panel"; +import { LineConnector } from "@/components/svg/line"; +import { useTranslation } from "react-i18next"; +import { Web } from "./web"; + +interface SubHeadingProps { + modelRef: RefObject; +} + +const sectionClassOverrides = + "bg-smithy-black z-20 lg:bg-transparent lg:max-w-xl"; + +export const SubHeading = (props: SubHeadingProps) => { + const { t } = useTranslation("translation", { keyPrefix: "subHeading" }); + const buildRef = useRef(null); + + return ( +
+
+
+ + +
+ + +
+
+ {t("model")} +
+ +
+
/{t("build")}
+
/{t("validate")}
+
/{t("transform")}
+
/{t("share")}
+
+
+
+
+
+
+
+
+ +
+
+ +
+
+ +
+
+
+ + +
+ ); +}; diff --git a/docs/landing-page/src/components/landing-page/SubHeading/web.stories.tsx b/docs/landing-page/src/components/landing-page/SubHeading/web.stories.tsx new file mode 100644 index 00000000000..f9db8416c8b --- /dev/null +++ b/docs/landing-page/src/components/landing-page/SubHeading/web.stories.tsx @@ -0,0 +1,20 @@ +import React, { useRef } from "react"; +import type { Meta, StoryObj } from "@storybook/react"; + +import { Web } from "./web"; + +const meta = { + title: "Smithy/LandingPage/Web", + component: () => { + const centerRef = useRef(null); + return ; + }, + parameters: { + layout: "centered", + }, +} satisfies Meta; + +export default meta; +type Story = StoryObj; + +export const Default: Story = {}; diff --git a/docs/landing-page/src/components/landing-page/SubHeading/web.tsx b/docs/landing-page/src/components/landing-page/SubHeading/web.tsx new file mode 100644 index 00000000000..bd4830e1147 --- /dev/null +++ b/docs/landing-page/src/components/landing-page/SubHeading/web.tsx @@ -0,0 +1,91 @@ +import React, { useRef, RefObject } from "react"; +import { Card, CardHeader, CardTitle } from "@/components/ui/card"; +import { LineConnector } from "@/components/svg/line"; + +interface WebProps { + smithyBuildRef: RefObject; +} + +export const Web = (props: WebProps) => { + // const centerRef = useRef(null); + const leftRef = useRef(null); + const bottomLeftRef = useRef(null); + const bottomRightRef = useRef(null); + const rightRef = useRef(null); + + return ( +
+ {/* CENTER */} +
+ + + + smithy build + + + +
+ +
+ + + SDKs + + +
+ +
+ + + Docs + + +
+ +
+ + + Server Stubs + + +
+ + + + + +
+ ); +}; diff --git a/docs/landing-page/src/components/landing-page/index.tsx b/docs/landing-page/src/components/landing-page/index.tsx new file mode 100644 index 00000000000..9a4be1b14ab --- /dev/null +++ b/docs/landing-page/src/components/landing-page/index.tsx @@ -0,0 +1,6 @@ +export * from "./Heading"; +export * from "./SubHeading"; +export * from "./Quote"; +export * from "./Features"; +export * from "./InformationCircles"; +export * from "./Footer"; diff --git a/docs/landing-page/src/components/landing-page/useSupportedLanguagesHook.tsx b/docs/landing-page/src/components/landing-page/useSupportedLanguagesHook.tsx new file mode 100644 index 00000000000..397403a4824 --- /dev/null +++ b/docs/landing-page/src/components/landing-page/useSupportedLanguagesHook.tsx @@ -0,0 +1,91 @@ +import React, { useMemo } from "react"; +import { useTranslation, Trans } from "react-i18next"; + +interface useSupportedLanguagesProps { + filter?: "clients" | "servers"; +} + +export const useSupportedLanguages = (props?: useSupportedLanguagesProps) => { + const { t } = useTranslation("translation", { + keyPrefix: "supportedLanguages", + }); + return useMemo(() => { + const serverUrls = [ + { + src: "/icons/duke.svg", + alt: t("java.alt"), + trademark: t("java.trademark"), + location: "https://github.com/smithy-lang/smithy-java", + }, + { + src: "/icons/ts.svg", + alt: t("ts.alt"), + trademark: t("ts.trademark"), + location: "https://github.com/awslabs/smithy-typescript", + }, + { + src: "/icons/rust.svg", + alt: t("rust.alt"), + trademark: ( + <> + rust.trademark + + {t("Source")} + + + ), + location: "https://github.com/awslabs/smithy-rs", + }, + { + src: "/icons/scala.svg", + alt: t("scala.alt"), + trademark: t("scala.trademark"), + location: "https://github.com/disneystreaming/smithy4s", + }, + ]; + const clientUrls = [ + { + src: "/icons/python.svg", + alt: t("python.alt"), + trademark: t("python.trademark"), + location: "https://github.com/smithy-lang/smithy-python", + }, + { + src: "/icons/go.svg", + alt: t("go.alt"), + trademark: t("go.trademark"), + location: "https://github.com/aws/smithy-go", + }, + { + src: "/icons/kotlin.svg", + alt: t("kotlin.alt"), + trademark: t("kotlin.trademark"), + location: "https://github.com/awslabs/smithy-kotlin", + }, + { + src: "/icons/swift.svg", + alt: t("swift.alt"), + trademark: t("swift.trademark"), + location: "https://github.com/awslabs/smithy-swift", + }, + { + src: "/icons/ruby.png", + alt: t("ruby.alt"), + trademark: t("ruby.trademark"), + location: "https://github.com/awslabs/smithy-ruby", + }, + ]; + + switch (props?.filter) { + case "servers": + return serverUrls; + case "clients": + default: + return [...serverUrls, ...clientUrls]; + } + }, [props?.filter, t]); +}; diff --git a/docs/landing-page/src/components/navigation/HamburgerMenu.tsx b/docs/landing-page/src/components/navigation/HamburgerMenu.tsx new file mode 100644 index 00000000000..0bbe2f869cf --- /dev/null +++ b/docs/landing-page/src/components/navigation/HamburgerMenu.tsx @@ -0,0 +1,50 @@ +import React from "react"; +import { + Sheet, + SheetContent, + SheetHeader, + SheetTitle, + SheetTrigger, +} from "@/components/ui/sheet"; +import { HamburgerMenuIcon } from "@radix-ui/react-icons"; +import { + NavigationMenu, + NavigationMenuList, + NavigationMenuItem, +} from "@/components/ui/navigation-menu"; +import { MenuLinks } from "./MenuLinks"; +import { useTranslation } from "react-i18next"; + +export const HamburgerMenu = () => { + const { t } = useTranslation("translation", { keyPrefix: "menu" }); + return ( + + + + + + + + + {t("logoAlt")} + + + + + + + + + + + + + ); +}; diff --git a/docs/landing-page/src/components/navigation/MenuLinks.tsx b/docs/landing-page/src/components/navigation/MenuLinks.tsx new file mode 100644 index 00000000000..5638dbf8154 --- /dev/null +++ b/docs/landing-page/src/components/navigation/MenuLinks.tsx @@ -0,0 +1,29 @@ +import React from "react"; +import { NavigationMenuLink } from "@/components/ui/navigation-menu"; +import { cn } from "@/lib/utils"; +import { useTranslation } from "react-i18next"; + +type NavigationMenuLinkProps = Parameters[0]; + +export const MenuLinks = (props: NavigationMenuLinkProps) => { + const { t } = useTranslation("translation", { keyPrefix: "menu" }); + const CenterMenuLinks = t("items", { returnObjects: true }) as { + title: string; + href: string; + className?: string; + }[]; + return ( + <> + {CenterMenuLinks.map((itm) => ( + + {itm.title} + + ))} + + ); +}; diff --git a/docs/landing-page/src/components/navigation/index.tsx b/docs/landing-page/src/components/navigation/index.tsx new file mode 100644 index 00000000000..e90b8ca2ea2 --- /dev/null +++ b/docs/landing-page/src/components/navigation/index.tsx @@ -0,0 +1,66 @@ +import React from "react"; +import { useTranslation } from "react-i18next"; +import { Icons } from "@/components/ui/icons"; +import { Button } from "@/components/ui/button"; +import { + NavigationMenu, + NavigationMenuItem, + NavigationMenuList, +} from "@/components/ui/navigation-menu"; +import { HamburgerMenu } from "./HamburgerMenu"; +import { MenuLinks } from "./MenuLinks"; + +export const TopNavigation = () => { + const { t } = useTranslation("translation", { keyPrefix: "navigation" }); + const githubAlt = t("githubLabel"); + const getStartedAlt = t("getStartedLabel"); + return ( +
+ + + +
+ + {t("logoAlt")} + +
+
+ + + + + + + + + + + + +
+ +
+
+
+
+
+ ); +}; diff --git a/docs/landing-page/src/components/navigation/navigation.stories.tsx b/docs/landing-page/src/components/navigation/navigation.stories.tsx new file mode 100644 index 00000000000..75f6369526a --- /dev/null +++ b/docs/landing-page/src/components/navigation/navigation.stories.tsx @@ -0,0 +1,18 @@ +import type { Meta, StoryObj } from "@storybook/react"; + +import { TopNavigation } from "."; + +const meta = { + title: "Smithy/TopNavigation", + component: TopNavigation, + parameters: { + layout: "fullscreen", + }, +} satisfies Meta; + +export default meta; +type Story = StoryObj; + +export const Default: Story = { + args: {}, +}; diff --git a/docs/landing-page/src/components/svg/arrow.stories.tsx b/docs/landing-page/src/components/svg/arrow.stories.tsx new file mode 100644 index 00000000000..6910a2b4b03 --- /dev/null +++ b/docs/landing-page/src/components/svg/arrow.stories.tsx @@ -0,0 +1,50 @@ +import React, { useRef } from "react"; +import type { Meta, StoryObj } from "@storybook/react"; + +import { Arrow } from "./arrow"; +import { Card, CardHeader, CardTitle } from "../ui/card"; + +const MyComponent: React.FC = () => { + const startRef = useRef(null); + const endRef = useRef(null); + + return ( +
+ + {/*
Start Component
*/} + + + + Hello World + + + +
+
+
+
+ + + Goodbye World + + +
+ ); +}; + +const meta = { + title: "Smithy/svg/Arrow", + component: MyComponent, + parameters: { + layout: "centered", + }, +} satisfies Meta; + +export default meta; +type Story = StoryObj; + +export const Default: Story = {}; diff --git a/docs/landing-page/src/components/svg/arrow.tsx b/docs/landing-page/src/components/svg/arrow.tsx new file mode 100644 index 00000000000..fc1a15cb651 --- /dev/null +++ b/docs/landing-page/src/components/svg/arrow.tsx @@ -0,0 +1,108 @@ +import React, { useEffect, useRef } from "react"; + +import { SVG } from "./svg"; +import { useResizeObserver } from "./useResizeObserver"; + +export interface SVGArrow { + startComponent: React.RefObject; + endComponent: React.RefObject; +} + +export const Arrow = ({ startComponent, endComponent }: SVGArrow) => { + const svgRef = useRef(null); + const size = useResizeObserver(); + + useEffect(() => { + const startRect = startComponent.current?.getBoundingClientRect(); + const endRect = endComponent.current?.getBoundingClientRect(); + + if (!startRect || !endRect) { + return; + } + + // Calculate the start and end points of the line + const startX = startRect.left + startRect.width / 2 + window.scrollX; + const startY = startRect.bottom + window.scrollY; + const endX = endRect.left + endRect.width / 2 + window.scrollY; + const endY = endRect.top - 2 + window.scrollX; + + const arrowOffset = 20; + + // Update the vertical SVG line + const line = svgRef.current?.querySelector(".arrowVerticalLine"); + if (line) { + line.setAttribute("x1", startX.toString()); + line.setAttribute("y1", startY.toString()); + line.setAttribute("x2", endX.toString()); + line.setAttribute("y2", endY.toString()); + } + // Update the left SVG line + const leftLine = svgRef.current?.querySelector(".arrowLeftDiagonal"); + if (leftLine) { + leftLine.setAttribute("x1", endX.toString()); + leftLine.setAttribute("y1", endY.toString()); + leftLine.setAttribute("x2", (endX - arrowOffset).toString()); + leftLine.setAttribute("y2", (endY - arrowOffset).toString()); + } + // Update the right SVG line + const rightLine = svgRef.current?.querySelector(".arrowRightDiagonal"); + if (rightLine) { + rightLine.setAttribute("x1", endX.toString()); + rightLine.setAttribute("y1", endY.toString()); + rightLine.setAttribute("x2", (endX + arrowOffset).toString()); + rightLine.setAttribute("y2", (endY - arrowOffset).toString()); + } + }, [startComponent, endComponent, size]); + + return ( + + + + + + + + + + + + + + + + + ); +}; diff --git a/docs/landing-page/src/components/svg/line.stories.tsx b/docs/landing-page/src/components/svg/line.stories.tsx new file mode 100644 index 00000000000..a5d48885f15 --- /dev/null +++ b/docs/landing-page/src/components/svg/line.stories.tsx @@ -0,0 +1,51 @@ +import React, { useRef } from "react"; +import type { Meta, StoryObj } from "@storybook/react"; + +import { LineConnector } from "./line"; +import { Card, CardHeader, CardTitle } from "../ui/card"; + +const MyComponent: React.FC = () => { + const startRef = useRef(null); + const endRef = useRef(null); + + return ( +
+ + {/*
Start Component
*/} + + + + Hello World + + + +
+
+
+
+ + + Goodbye World + + +
+ ); +}; + +const meta = { + title: "Smithy/svg/line", + component: MyComponent, + parameters: { + layout: "centered", + }, + globals: { + theme: "dark", + }, +} satisfies Meta; + +export default meta; +type Story = StoryObj; + +export const Default: Story = { + args: {}, +}; diff --git a/docs/landing-page/src/components/svg/line.tsx b/docs/landing-page/src/components/svg/line.tsx new file mode 100644 index 00000000000..a7d06296c5e --- /dev/null +++ b/docs/landing-page/src/components/svg/line.tsx @@ -0,0 +1,148 @@ +import React, { useRef, useEffect, RefObject } from "react"; +import { SVG } from "./svg"; +import { useResizeObserver } from "./useResizeObserver"; + +type Coordinates = { + x: number; + y: number; +}; + +interface LineConnectorProps { + startComponent: RefObject; + endComponent: RefObject; + lineColor?: string; + className?: string; +} + +type LineDetails = { + start: Coordinates; + end: Coordinates; + color: string; +}; + +/** + * Calculates the coordinates and color for a line connecting two DOM elements + * @param startRect - The DOMRect of the starting element + * @param endRect - The DOMRect of the ending element + * @returns LineDetails object containing start/end coordinates and line color + */ +function getCoordinates( + startRect: DOMRect, + endRect: DOMRect, + window: Window, +): LineDetails { + // Calculate initial center points of the rectangles + const start = { + x: startRect.left + startRect.width / 2, + y: startRect.top + startRect.height / 2, + }; + + const end = { + x: endRect.left + endRect.width / 2, + y: endRect.top + endRect.height / 2, + }; + + let color = "hsl(var(--primary)"; + + // Adjust vertical positioning when elements don't overlap vertically + if (startRect.top > endRect.bottom) { + start.y = startRect.top; + end.y = endRect.bottom; + } + if (startRect.bottom < endRect.top) { + start.y = startRect.bottom; + end.y = endRect.top; + } + + // Adjust horizontal positioning when elements don't overlap horizontally + if (startRect.left > endRect.right) { + start.x = startRect.left; + end.x = endRect.right; + } + if (startRect.right < endRect.left) { + start.x = startRect.right; + end.x = endRect.left; + } + + // Add the scrolling position to get the correct location + start.x += window.scrollX; + start.y += window.scrollY; + end.x += window.scrollX; + end.y += window.scrollY; + + // Set color based on line orientation and direction + // For nearly vertical lines + if (Math.abs(start.x - end.x) < 10) { + color = "hsl(var(--smithy-gradient-midpoint))"; + } + + // For horizontal lines, apply gradient based on direction + if (start.x - end.x > 20) { + color = "url(#lineGradient)"; + } + if (end.x - start.x > 20) { + color = "url(#lineGradientTwo)"; + } + + return { + start, + end, + color, + }; +} + +export const LineConnector: React.FC = ({ + startComponent, + endComponent, + lineColor, + className, +}) => { + const svgRef = useRef(null); + const size = useResizeObserver(); + + useEffect(() => { + const startRect = startComponent.current?.getBoundingClientRect(); + const endRect = endComponent.current?.getBoundingClientRect(); + + if (!startRect || !endRect) { + return; + } + + const { start, end, color } = getCoordinates(startRect, endRect, window); + + // Update the SVG line + const line = svgRef.current?.querySelector("line"); + if (line) { + line.setAttribute("x1", start.x.toString()); + // the 0.001 allows a horizontal line to display a gradient + // see https://www.w3.org/TR/SVG11/coords.html#ObjectBoundingBox for the spec + line.setAttribute("y1", (start.y + 0.001).toString()); + line.setAttribute("x2", end.x.toString()); + line.setAttribute("y2", end.y.toString()); + line.setAttribute("stroke", lineColor || color); + } + }, [startComponent, endComponent, size]); + + return ( + + + + + + + + + + + + + + ); +}; diff --git a/docs/landing-page/src/components/svg/spider.stories.tsx b/docs/landing-page/src/components/svg/spider.stories.tsx new file mode 100644 index 00000000000..afc71757069 --- /dev/null +++ b/docs/landing-page/src/components/svg/spider.stories.tsx @@ -0,0 +1,75 @@ +import React, { useRef } from "react"; +import type { Meta, StoryObj } from "@storybook/react"; + +import { Spider } from "./spider"; +import { Card, CardHeader, CardTitle } from "../ui/card"; + +const MyComponent: React.FC = (props: { curveLevel?: number }) => { + const startRef = useRef(null); + const sunRef = useRef(null); + const moonRef = useRef(null); + const earthRef = useRef(null); + const waterRef = useRef(null); + + return ( +
+ + {/*
Start Component
*/} + + + + Universe + + + +
+
+
+
+
+ + + Sun + + + + + Moon + + + + + Earth + + + + + Water + + +
+
+ ); +}; + +const meta = { + title: "Smithy/svg/Spider", + component: MyComponent, + parameters: { + layout: "fullscreen", + }, +} satisfies Meta; + +export default meta; +type Story = StoryObj; + +export const Default: Story = {}; +export const CurveLevel: Story = { + args: { + curveLevel: 10, + }, +}; diff --git a/docs/landing-page/src/components/svg/spider.tsx b/docs/landing-page/src/components/svg/spider.tsx new file mode 100644 index 00000000000..ac2aefffe43 --- /dev/null +++ b/docs/landing-page/src/components/svg/spider.tsx @@ -0,0 +1,99 @@ +import React, { useCallback, useEffect, useMemo, useState } from "react"; + +import { SVG } from "./svg"; +import { useResizeObserver } from "./useResizeObserver"; + +type Coords = { + x: number; + y: number; +}; + +export interface SpiderProps { + startComponent: React.RefObject; + endComponents: React.RefObject[]; + curveLevel?: number; +} + +export const Spider = (props: SpiderProps) => { + const [paths, setPaths] = useState([]); + const rect = props.startComponent?.current?.getBoundingClientRect(); + const size = useResizeObserver(); + + useEffect(() => { + if (!rect) return; + const startingCoords: Coords = { + x: rect.left + rect.width / 2 + window.scrollX, + y: rect.bottom + window.scrollY, + }; + + const calculatedPaths = props.endComponents.map((endComponent) => { + const endRect = endComponent.current?.getBoundingClientRect(); + if (!endRect) return; + const endCoords: Coords = { + x: endRect.left + endRect.width / 2 + window.scrollX, + y: endRect.top + window.scrollY, + }; + return connect(startingCoords, endCoords, props.curveLevel || 100); + }); + + setPaths(calculatedPaths); + }, [props.startComponent, props.endComponents, size]); + + /** + * curveLevel is the amount of curve present in the line, 2 is roughly vertical + */ + const connect = useCallback( + (start: Coords, end: Coords, curveLevel: number = 2) => { + const calculatedPaths: React.ReactNode[] = []; + + const distanceBetweenPoints = Math.sqrt( + Math.pow(start.x - end.x, 2) + Math.pow(start.y - end.y, 2), + ); + + const midpoint = { + x: (start.x + end.x) / 2, + y: (start.y + end.y) / 2, + }; + const offset = distanceBetweenPoints / curveLevel; + + calculatedPaths.push( + , + ); + calculatedPaths.push( + , + ); + + return calculatedPaths; + }, + [], + ); + + return ( + + + + + + + + + + + + {paths} + + ); +}; diff --git a/docs/landing-page/src/components/svg/svg.tsx b/docs/landing-page/src/components/svg/svg.tsx new file mode 100644 index 00000000000..eb6f67169b1 --- /dev/null +++ b/docs/landing-page/src/components/svg/svg.tsx @@ -0,0 +1,29 @@ +import React, { Ref, forwardRef } from "react"; +import { useResizeObserver } from "./useResizeObserver"; + +interface SVGProps { + children?: React.ReactNode; + className?: string; +} + +export const SVG = forwardRef( + ({ children, className }, ref) => { + const size = useResizeObserver(); + return ( + + {children} + + ); + }, +); diff --git a/docs/landing-page/src/components/svg/useResizeObserver.tsx b/docs/landing-page/src/components/svg/useResizeObserver.tsx new file mode 100644 index 00000000000..0f6644b6eed --- /dev/null +++ b/docs/landing-page/src/components/svg/useResizeObserver.tsx @@ -0,0 +1,29 @@ +"use client"; +import React, { useState, useEffect } from "react"; + +export const useResizeObserver = () => { + const self = typeof window !== "undefined" ? window : null; + const [size, setSize] = useState({ width: 0, height: 0 }); + + useEffect(() => { + if (self === null) return; + const observer = new ResizeObserver((entries) => { + if (entries[0]) { + const { width, height } = entries[0].contentRect; + setSize({ width, height }); + } + }); + + if (self.document) { + observer.observe(self.document.body); + } + + return () => { + if (self.document) { + observer.unobserve(self.document.body); + } + }; + }, [self]); + + return size; +}; diff --git a/docs/landing-page/src/components/svg/wheel.stories.tsx b/docs/landing-page/src/components/svg/wheel.stories.tsx new file mode 100644 index 00000000000..2a0fa43b69a --- /dev/null +++ b/docs/landing-page/src/components/svg/wheel.stories.tsx @@ -0,0 +1,113 @@ +import React, { useRef } from "react"; +import type { Meta, StoryObj } from "@storybook/react"; + +import { Wheel } from "./wheel"; +import { Card, CardHeader, CardTitle } from "../ui/card"; +import { ServiceExample } from "@/components/landing-page/ServiceExample"; + +const MyComponent: React.FC<{ + planets: React.ReactNode[]; + lineColor?: string; +}> = (props) => { + return ( +
+ + + + } + endComponents={props.planets.map((planet, i) => ( + + + {planet} + + + ))} + /> +
+ ); +}; + +const meta = { + title: "Smithy/svg/wheel", + component: MyComponent, + parameters: { + layout: "centered", + }, + globals: { + theme: "dark", + }, +} satisfies Meta; + +export default meta; +type Story = StoryObj; + +export const Default: Story = { + args: { + planets: [ +
Server
, +
IDE
, +
SDK
, +
Lint
, +
Validate
, +
Lorem
, +
Ipsum
, +
Dolor
, + ], + }, +}; +export const LineColorOverride: Story = { + args: { + planets: ["Earth", "Mars"], + lineColor: "blue", + }, +}; +export const One: Story = { + args: { + planets: ["Earth"], + }, +}; +export const Two: Story = { + args: { + planets: ["Earth", "Mars"], + }, +}; +export const Three: Story = { + args: { + planets: ["Earth", "Mars", "Jupiter"], + }, +}; +export const Four: Story = { + args: { + planets: ["Earth", "Mars", "Jupiter", "Saturn"], + }, +}; +export const Five: Story = { + args: { + planets: ["Mercury", "Venus", "Earth", "Mars", "Jupiter"], + }, +}; +export const Six: Story = { + args: { + planets: ["Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn"], + }, +}; +export const Seven: Story = { + args: { + planets: [ + "Mercury", + "Venus", + "Earth", + "Mars", + "Jupiter", + "Saturn", + "Uranus", + ], + }, +}; diff --git a/docs/landing-page/src/components/svg/wheel.tsx b/docs/landing-page/src/components/svg/wheel.tsx new file mode 100644 index 00000000000..a1f29cdb15d --- /dev/null +++ b/docs/landing-page/src/components/svg/wheel.tsx @@ -0,0 +1,123 @@ +import React, { + useRef, + useCallback, + useEffect, + useMemo, + useState, + RefObject, +} from "react"; + +import { LineConnector } from "./line"; + +export interface WheelProps { + centerComponent: React.ReactElement<{ ref?: RefObject }>; + endComponents: React.ReactElement<{ ref?: RefObject }>[]; + lineColor?: string; +} + +const fillOrderByLength: { [key: string]: number[] } = { + "1": [6], + "2": [1, 6], + "3": [5, 6, 7], + "4": [0, 2, 5, 7], + "5": [0, 2, 5, 6, 7], + "6": [0, 1, 2, 5, 6, 7], + "7": [0, 1, 2, 4, 5, 6, 7], + "8": [0, 1, 2, 3, 4, 5, 6, 7], +}; + +const centerPosition = 4; + +export const Wheel = (props: WheelProps) => { + const centerRef = useRef(null); + const spotOneRef = useRef(null); + const spotTwoRef = useRef(null); + const spotThreeRef = useRef(null); + const spotFourRef = useRef(null); + const spotFiveRef = useRef(null); + const spotSixRef = useRef(null); + const spotSevenRef = useRef(null); + const spotEightRef = useRef(null); + const refs = [ + spotOneRef, + spotTwoRef, + spotThreeRef, + spotFourRef, + spotFiveRef, + spotSixRef, + spotSevenRef, + spotEightRef, + ]; + + const centerComponent = useMemo(() => { + return ( +
+ {React.cloneElement(props.centerComponent, { + ref: centerRef, + })} +
+ ); + }, [props.centerComponent]); + + const [beforeCenter, afterCenter] = useMemo(() => { + if (!props.endComponents) return [[], []]; + if (props.endComponents.length === 0) return [[], []]; + + const beforeCenter: React.ReactNode[] = []; + const afterCenter: React.ReactNode[] = []; + const fillOrder = fillOrderByLength[props.endComponents.length.toString()]; + let currentEndComponent = 0; + + for (let i = 0; i < 8; i++) { + if (fillOrder.includes(i)) { + const component: React.ReactElement<{ ref?: RefObject }> = + props.endComponents[currentEndComponent]; + + const wrappedComponent = ( +
+ {React.cloneElement(component, { + ref: refs[i], + })} +
+ ); + + // const element = props.endComponents[currentEndComponent]; + if (i < centerPosition) { + beforeCenter.push(wrappedComponent); + } else { + afterCenter.push(wrappedComponent); + } + currentEndComponent++; + } else { + if (i < centerPosition) { + beforeCenter.push(
); + } else { + afterCenter.push(
); + } + } + } + return [beforeCenter, afterCenter]; + }, [props.endComponents]); + + return ( +
+ {refs.map((ref, index) => { + if (!ref) return ""; + return ( + + ); + })} + + {beforeCenter} + + {centerComponent} + + {afterCenter} +
+ ); +}; diff --git a/docs/landing-page/src/components/ui/CircleSection.stories.tsx b/docs/landing-page/src/components/ui/CircleSection.stories.tsx new file mode 100644 index 00000000000..c27408c16b9 --- /dev/null +++ b/docs/landing-page/src/components/ui/CircleSection.stories.tsx @@ -0,0 +1,25 @@ +import type { Meta, StoryObj } from "@storybook/react"; + +import { CircleSection } from "./CircleSection"; + +const meta = { + title: "Smithy/ui/CircleSection", + component: CircleSection, + args: { + title: "hello world", + description: "some random text", + circleUrls: [ + { src: "/icons/dark/swift.svg" }, + { src: "/icons/dark/javaScript.svg" }, + { src: "/icons/dark/rust.svg" }, + ], + }, + parameters: { + layout: "fullscreen", + }, +} satisfies Meta; + +export default meta; +type Story = StoryObj; + +export const Default: Story = {}; diff --git a/docs/landing-page/src/components/ui/CircleSection.tsx b/docs/landing-page/src/components/ui/CircleSection.tsx new file mode 100644 index 00000000000..82189e54a39 --- /dev/null +++ b/docs/landing-page/src/components/ui/CircleSection.tsx @@ -0,0 +1,37 @@ +import React from "react"; +import { cn } from "@/lib/utils"; +import { Section, type SectionProps } from "@/components/ui/Section"; + +export interface CircleSectionProps extends SectionProps { + circleUrls: (React.ImgHTMLAttributes & { + location?: string; + })[]; +} + +export const CircleSection = (props: CircleSectionProps) => { + return ( +
+
+ {props.circleUrls.map((imgProps) => ( + +
+ +
+
+ ))} +
+ {props.action} +
+ ); +}; diff --git a/docs/landing-page/src/components/ui/Section.stories.tsx b/docs/landing-page/src/components/ui/Section.stories.tsx new file mode 100644 index 00000000000..67ebf12a93c --- /dev/null +++ b/docs/landing-page/src/components/ui/Section.stories.tsx @@ -0,0 +1,36 @@ +import React from "react"; +import type { Meta, StoryObj } from "@storybook/react"; + +import { Section } from "./Section"; +import { Button } from "./button"; + +const meta = { + title: "Smithy/ui/Section", + component: Section, + args: { + title: "Section Title", + description: + "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vestibulum elit nulla, elementum pellentesque mattis sit amet, consectetur nec diam. Curabitur maximus vulputate est maximus suscipit. Suspendisse vehicula volutpat dolor non dapibus. Nullam malesuada vulputate tortor sed euismod. Donec quis lacus egestas orci pharetra eleifend ut consequat lorem. Sed quis metus eu justo iaculis sodales. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia curae; Nullam eget nulla ultrices, condimentum mi eu, auctor nunc. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Mauris rutrum id velit eu molestie. Phasellus nulla justo, semper vel massa vel, faucibus molestie purus. Cras auctor iaculis sodales. Donec vestibulum venenatis felis, condimentum venenatis dolor pharetra et. Ut non commodo enim. Pellentesque consequat nibh eget tempus iaculis. Ut ac dignissim ligula.", + }, + parameters: { + layout: "fullscreen", + }, + tags: ["autodocs"], +} satisfies Meta; + +export default meta; +type Story = StoryObj; + +export const Default: Story = { + args: {}, +}; +export const WithAction: Story = { + args: { + action: , + }, +}; +export const WithChildren: Story = { + args: { + children:
hello world
, + }, +}; diff --git a/docs/landing-page/src/components/ui/Section.tsx b/docs/landing-page/src/components/ui/Section.tsx new file mode 100644 index 00000000000..45fb83816b9 --- /dev/null +++ b/docs/landing-page/src/components/ui/Section.tsx @@ -0,0 +1,22 @@ +import React from "react"; + +import { cn } from "@/lib/utils"; + +const gradientPopClasses = ""; + +export interface SectionProps extends React.HTMLAttributes { + title: string; + description: string; + action?: React.ReactNode; +} + +export const Section = (props: SectionProps) => { + return ( +
+

{props.title}

+

{props.description}

+ {props.children} + {props.action} +
+ ); +}; diff --git a/docs/landing-page/src/components/ui/SmithyGlow.stories.tsx b/docs/landing-page/src/components/ui/SmithyGlow.stories.tsx new file mode 100644 index 00000000000..e140f0a0bc1 --- /dev/null +++ b/docs/landing-page/src/components/ui/SmithyGlow.stories.tsx @@ -0,0 +1,29 @@ +import React from "react"; +import type { Meta, StoryObj } from "@storybook/react"; + +import { SmithyGlow } from "./SmithyGlow"; +import { Tagline } from "../landing-page/Heading/Tagline"; + +const meta = { + title: "Smithy/ui/SmithyGlow", + component: () => { + return ( + +
+ +
+
+ ); + }, + parameters: { + layout: "fullscreen", + }, + tags: ["autodocs"], +} satisfies Meta; + +export default meta; +type Story = StoryObj; + +export const Default: Story = { + args: {}, +}; diff --git a/docs/landing-page/src/components/ui/SmithyGlow.tsx b/docs/landing-page/src/components/ui/SmithyGlow.tsx new file mode 100644 index 00000000000..265809f86de --- /dev/null +++ b/docs/landing-page/src/components/ui/SmithyGlow.tsx @@ -0,0 +1,12 @@ +import React from "react"; + +import { cn } from "@/lib/utils"; + +const glowClasses = + "text-white bg-smithy-black bg-radial-gradient from-primary/50 to-smithy-black to-65% bg-no-repeat bg-[size:150%_200%] bg-[position:center_-25%]"; + +export const SmithyGlow = (props: React.HTMLAttributes) => { + return ( +
{props.children}
+ ); +}; diff --git a/docs/landing-page/src/components/ui/SmithyPopGradient.stories.tsx b/docs/landing-page/src/components/ui/SmithyPopGradient.stories.tsx new file mode 100644 index 00000000000..0f8edd258e6 --- /dev/null +++ b/docs/landing-page/src/components/ui/SmithyPopGradient.stories.tsx @@ -0,0 +1,33 @@ +import React from "react"; +import type { Meta, StoryObj } from "@storybook/react"; + +import { SmithyPopGradient } from "./SmithyPopGradient"; +import { Tagline } from "../landing-page/Heading/Tagline"; + +const meta = { + title: "Smithy/ui/SmithyPopGradient", + component: (props) => { + return ( + +
+ +
+
+ ); + }, + parameters: { + layout: "fullscreen", + }, +} satisfies Meta; + +export default meta; +type Story = StoryObj; + +export const Default: Story = { + args: {}, +}; +export const WithSparks: Story = { + args: { + withSparks: true, + }, +}; diff --git a/docs/landing-page/src/components/ui/SmithyPopGradient.tsx b/docs/landing-page/src/components/ui/SmithyPopGradient.tsx new file mode 100644 index 00000000000..c534dc6e736 --- /dev/null +++ b/docs/landing-page/src/components/ui/SmithyPopGradient.tsx @@ -0,0 +1,23 @@ +import React, { PropsWithChildren } from "react"; +import { renderToString } from "react-dom/server"; + +import { cn } from "@/lib/utils"; + +interface SmithyPopGradientProps + extends PropsWithChildren> { + withSparks?: boolean; +} + +// from is bottom right +// to is top left +const gradientPopClasses = `from-smithy-plum via-smithy-purple to-smithy-rose from-20% via-30% bg-[url("/sparks/sparks.svg"),linear-gradient(115deg,var(--tw-gradient-stops))] bg-[position:100%_100%,center] bg-[size:150%,100%] md:bg-[size:85%,100%] lg:bg-[size:65%,100%] bg-no-repeat relative overflow-hidden`; + +export const SmithyPopGradient = (props: SmithyPopGradientProps) => { + return ( + <> +
+
{props.children}
+
+ + ); +}; diff --git a/docs/landing-page/src/components/ui/brand.stories.tsx b/docs/landing-page/src/components/ui/brand.stories.tsx new file mode 100644 index 00000000000..c56d48dad35 --- /dev/null +++ b/docs/landing-page/src/components/ui/brand.stories.tsx @@ -0,0 +1,16 @@ +import type { Meta, StoryObj } from "@storybook/react"; + +import { Brand } from "./brand"; + +const meta = { + title: "Smithy/Brand", + component: Brand, + parameters: { + layout: "fullscreen", + }, +} satisfies Meta; + +export default meta; +type Story = StoryObj; + +export const Default: Story = {}; diff --git a/docs/landing-page/src/components/ui/brand.tsx b/docs/landing-page/src/components/ui/brand.tsx new file mode 100644 index 00000000000..09d26f9d642 --- /dev/null +++ b/docs/landing-page/src/components/ui/brand.tsx @@ -0,0 +1,39 @@ +import React from "react"; + +import { SmithyPopGradient } from "./SmithyPopGradient"; + +export const Brand = () => { + return ( +
+

Colors

+
+
+ Smithy Black +
+
+ Smithy Red +
+ +
+ Smithy Light Gray +
+
+ Smithy Dark Gray +
+
+
Red 33%
+
Red 15%
+
+ +
Plum
+
Rose
+
Purple
+
Purple 50%
+ + + Smithy Gradient + +
+
+ ); +}; diff --git a/docs/landing-page/src/components/ui/button.stories.tsx b/docs/landing-page/src/components/ui/button.stories.tsx new file mode 100644 index 00000000000..e37db48bb31 --- /dev/null +++ b/docs/landing-page/src/components/ui/button.stories.tsx @@ -0,0 +1,84 @@ +import type { Meta, StoryObj } from "@storybook/react"; +import { fn } from "@storybook/test"; + +import { Button } from "./button"; + +const meta = { + title: "Smithy/ui/Button", + component: Button, + parameters: { + layout: "centered", + }, + tags: ["autodocs"], + args: { + variant: "default", + onClick: fn(), + }, + argTypes: { + variant: { + control: "select", + options: [ + "default", + "gradient", + "destructive", + "outline", + "gradient-outline", + "secondary", + "ghost", + "link", + ], + }, + }, +} satisfies Meta; + +export default meta; +type Story = StoryObj; + +export const Primary: Story = { + args: { + variant: "default", + children: "Click Me!", + }, +}; +export const Gradient: Story = { + args: { + variant: "gradient", + children: "Click Me!", + }, +}; +export const Destructive: Story = { + args: { + variant: "destructive", + children: "Click Me!", + }, +}; +export const outline: Story = { + args: { + variant: "outline", + children: "Click Me!", + }, +}; +export const GradientOutline: Story = { + args: { + variant: "gradient-outline", + children: "Click Me!", + }, +}; +export const secondary: Story = { + args: { + variant: "secondary", + children: "Click Me!", + }, +}; +export const ghost: Story = { + args: { + variant: "ghost", + children: "Click Me!", + }, +}; +export const link: Story = { + args: { + variant: "link", + children: "Click Me!", + }, +}; diff --git a/docs/landing-page/src/components/ui/button.tsx b/docs/landing-page/src/components/ui/button.tsx new file mode 100644 index 00000000000..3923bddc900 --- /dev/null +++ b/docs/landing-page/src/components/ui/button.tsx @@ -0,0 +1,89 @@ +import * as React from "react"; +import { Slot } from "@radix-ui/react-slot"; +import { cva, type VariantProps } from "class-variance-authority"; + +import { cn } from "@/lib/utils"; + +const buttonVariants = cva( + "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-3xl text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0", + { + variants: { + variant: { + default: + "bg-primary text-primary-foreground shadow hover:bg-primary/90", + gradient: + "border border-input bg-gradient-to-r from-secondary to-primary shadow-sm hover:bg-accent hover:text-accent-foreground", + destructive: + "bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90", + outline: + "border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground", + "gradient-outline": + "bg-gradient-to-r from-secondary to-primary text-primary-foreground shadow hover:bg-background/90", + secondary: + "bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80", + ghost: "hover:bg-accent hover:text-accent-foreground", + link: "text-primary underline-offset-4 hover:underline", + }, + size: { + default: "h-9 px-6 py-2", + sm: "h-8 rounded-md px-4 text-xs", + lg: "h-10 rounded-md px-9", + icon: "h-9 w-9", + "gradient-outline": "", + }, + }, + defaultVariants: { + variant: "default", + size: "default", + }, + }, +); + +export interface ButtonProps + extends React.ButtonHTMLAttributes, + VariantProps { + asChild?: boolean; + darkBg?: boolean; +} + +const Button = React.forwardRef( + ( + { + className, + variant, + size, + asChild = false, + children, + darkBg = false, + ...props + }, + ref, + ) => { + const Comp = asChild ? Slot : "button"; + + let renderedChildren = children; + if (variant === "gradient-outline") { + size = "gradient-outline"; + renderedChildren = ( + + {children} + + ); + } + + return ( + + {renderedChildren} + + ); + }, +); +Button.displayName = "Button"; + +export { Button, buttonVariants }; diff --git a/docs/landing-page/src/components/ui/card.stories.tsx b/docs/landing-page/src/components/ui/card.stories.tsx new file mode 100644 index 00000000000..b4505b22469 --- /dev/null +++ b/docs/landing-page/src/components/ui/card.stories.tsx @@ -0,0 +1,60 @@ +import type { Meta, StoryObj } from "@storybook/react"; + +import { + Card, + CardHeader, + CardTitle, + CardDescription, + CardContent, + CardFooter, + type CardProps, +} from "./card"; + +const meta = { + title: "Smithy/ui/Card", + component: (props) => { + return ( + + + Card Title + Card Description + + +
+
+
+
+
+
+ + +

Card Footer

+
+ + ); + }, + parameters: { + layout: "centered", + }, + tags: ["autodocs"], + argTypes: { + variant: { + control: "select", + options: ["default", "gradient-border"], + }, + }, +} satisfies Meta; + +export default meta; +type Story = StoryObj; + +export const Default: Story = { + args: { + variant: "default", + }, +}; +export const OutlineGradient: Story = { + args: { + variant: "gradient-border", + }, +}; diff --git a/docs/landing-page/src/components/ui/card.tsx b/docs/landing-page/src/components/ui/card.tsx new file mode 100644 index 00000000000..7c70fb862f0 --- /dev/null +++ b/docs/landing-page/src/components/ui/card.tsx @@ -0,0 +1,110 @@ +import * as React from "react"; + +import { cn } from "@/lib/utils"; +import { cva, type VariantProps } from "class-variance-authority"; + +const cardVariants = cva("rounded-xl bg-card text-card-foreground", { + variants: { + variant: { + default: "shadow border", + "gradient-border": "", + }, + }, + defaultVariants: { + variant: "default", + }, +}); + +export interface CardProps + extends React.HTMLAttributes, + VariantProps {} + +const Card = React.forwardRef( + ({ className, variant, children, ...props }, ref) => { + let renderedChildren = children; + if (variant === "gradient-border") { + renderedChildren = ( +
+
+ {children} +
+
+ ); + } + return ( +
+ {renderedChildren} +
+ ); + }, +); +Card.displayName = "Card"; + +const CardHeader = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)); +CardHeader.displayName = "CardHeader"; + +const CardTitle = React.forwardRef< + HTMLParagraphElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +

+)); +CardTitle.displayName = "CardTitle"; + +const CardDescription = React.forwardRef< + HTMLParagraphElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +

+)); +CardDescription.displayName = "CardDescription"; + +const CardContent = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +

+)); +CardContent.displayName = "CardContent"; + +const CardFooter = React.forwardRef< + HTMLDivElement, + React.HTMLAttributes +>(({ className, ...props }, ref) => ( +
+)); +CardFooter.displayName = "CardFooter"; + +export { + Card, + CardHeader, + CardFooter, + CardTitle, + CardDescription, + CardContent, +}; diff --git a/docs/landing-page/src/components/ui/icons.stories.tsx b/docs/landing-page/src/components/ui/icons.stories.tsx new file mode 100644 index 00000000000..b5baebc7d05 --- /dev/null +++ b/docs/landing-page/src/components/ui/icons.stories.tsx @@ -0,0 +1,39 @@ +import type { Meta, StoryObj } from "@storybook/react"; +import { fn } from "@storybook/test"; + +import { Button } from "./button"; +import { Icons } from "./icons"; + +const meta = { + title: "Smithy/ui/Icons", + component: ({ children }) => { + return ( + + ); + }, + parameters: { + layout: "centered", + }, + tags: ["autodocs"], +} satisfies Meta; + +export default meta; +type Story = StoryObj; + +export const GitHub: Story = { + args: { + children: , + }, +}; +export const React: Story = { + args: { + children: , + }, +}; +export const Spinner: Story = { + args: { + children: , + }, +}; diff --git a/docs/landing-page/src/components/ui/icons.tsx b/docs/landing-page/src/components/ui/icons.tsx new file mode 100644 index 00000000000..9939fcff4a2 --- /dev/null +++ b/docs/landing-page/src/components/ui/icons.tsx @@ -0,0 +1,42 @@ +import React from "react"; +type IconProps = React.HTMLAttributes; + +export const Icons = { + gitHub: (props: IconProps) => ( + + + + ), + aria: (props: IconProps) => ( + + + + ), + react: (props: IconProps) => ( + + + + ), + spinner: (props: IconProps) => ( + + + + ), +}; diff --git a/docs/landing-page/src/components/ui/ide-panel.stories.tsx b/docs/landing-page/src/components/ui/ide-panel.stories.tsx new file mode 100644 index 00000000000..572a3627c0d --- /dev/null +++ b/docs/landing-page/src/components/ui/ide-panel.stories.tsx @@ -0,0 +1,21 @@ +import type { Meta, StoryObj } from "@storybook/react"; + +import { IdePanel } from "./ide-panel"; +import { ServiceExample } from "@/components/landing-page/ServiceExample"; + +const meta = { + title: "Smithy/ui/IdePanel", + component: () => ( + + + + ), + parameters: { + layout: "fullscreen", + }, +} satisfies Meta; + +export default meta; +type Story = StoryObj; + +export const Default: Story = {}; diff --git a/docs/landing-page/src/components/ui/ide-panel.tsx b/docs/landing-page/src/components/ui/ide-panel.tsx new file mode 100644 index 00000000000..c3abd3afa7d --- /dev/null +++ b/docs/landing-page/src/components/ui/ide-panel.tsx @@ -0,0 +1,19 @@ +import React from "react"; + +import { cn } from "@/lib/utils"; + +const idePanelClasses = + "relative inline-block w-fit border border-smithy-dark-gray rounded-xl before:content-['_'] before:block before:w-full before:h-6 before:border-b before:border-smithy-dark-gray"; + +export const IdePanel = (props: React.HTMLAttributes) => { + return ( +
+
+
+
+
+
+ {props.children} +
+ ); +}; diff --git a/docs/landing-page/src/components/ui/navigation-menu.tsx b/docs/landing-page/src/components/ui/navigation-menu.tsx new file mode 100644 index 00000000000..6e00b3d8dab --- /dev/null +++ b/docs/landing-page/src/components/ui/navigation-menu.tsx @@ -0,0 +1,128 @@ +import * as React from "react"; +import { ChevronDownIcon } from "@radix-ui/react-icons"; +import * as NavigationMenuPrimitive from "@radix-ui/react-navigation-menu"; +import { cva } from "class-variance-authority"; + +import { cn } from "@/lib/utils"; + +const NavigationMenu = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, ...props }, ref) => ( + + {children} + + +)); +NavigationMenu.displayName = NavigationMenuPrimitive.Root.displayName; + +const NavigationMenuList = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +NavigationMenuList.displayName = NavigationMenuPrimitive.List.displayName; + +const NavigationMenuItem = NavigationMenuPrimitive.Item; + +const navigationMenuTriggerStyle = cva( + "group inline-flex h-9 w-max items-center justify-center rounded-md bg-background px-4 py-2 text-sm font-medium transition-colors hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground focus:outline-none disabled:pointer-events-none disabled:opacity-50 data-[active]:bg-accent/50 data-[state=open]:bg-accent/50", +); + +const NavigationMenuTrigger = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, ...props }, ref) => ( + + {children}{" "} + +)); +NavigationMenuTrigger.displayName = NavigationMenuPrimitive.Trigger.displayName; + +const NavigationMenuContent = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +NavigationMenuContent.displayName = NavigationMenuPrimitive.Content.displayName; + +const NavigationMenuLink = NavigationMenuPrimitive.Link; + +const NavigationMenuViewport = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( +
+ +
+)); +NavigationMenuViewport.displayName = + NavigationMenuPrimitive.Viewport.displayName; + +const NavigationMenuIndicator = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +
+ +)); +NavigationMenuIndicator.displayName = + NavigationMenuPrimitive.Indicator.displayName; + +export { + navigationMenuTriggerStyle, + NavigationMenu, + NavigationMenuList, + NavigationMenuItem, + NavigationMenuContent, + NavigationMenuTrigger, + NavigationMenuLink, + NavigationMenuIndicator, + NavigationMenuViewport, +}; diff --git a/docs/landing-page/src/components/ui/sheet.tsx b/docs/landing-page/src/components/ui/sheet.tsx new file mode 100644 index 00000000000..15f893033af --- /dev/null +++ b/docs/landing-page/src/components/ui/sheet.tsx @@ -0,0 +1,137 @@ +import * as React from "react"; +import * as SheetPrimitive from "@radix-ui/react-dialog"; +import { cva, type VariantProps } from "class-variance-authority"; +import { cn } from "@/lib/utils"; +import { Cross2Icon } from "@radix-ui/react-icons"; + +const Sheet = SheetPrimitive.Root; + +const SheetTrigger = SheetPrimitive.Trigger; + +const SheetClose = SheetPrimitive.Close; + +const SheetPortal = SheetPrimitive.Portal; + +const SheetOverlay = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +SheetOverlay.displayName = SheetPrimitive.Overlay.displayName; + +const sheetVariants = cva( + "fixed z-50 gap-4 bg-background p-6 shadow-lg transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500 data-[state=open]:animate-in data-[state=closed]:animate-out", + { + variants: { + side: { + top: "inset-x-0 top-0 border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top", + bottom: + "inset-x-0 bottom-0 border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom", + left: "inset-y-0 left-0 h-full w-3/4 border-r data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm", + right: + "inset-y-0 right-0 h-full w-3/4 border-l data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-sm", + }, + }, + defaultVariants: { + side: "right", + }, + }, +); + +interface SheetContentProps + extends React.ComponentPropsWithoutRef, + VariantProps {} + +const SheetContent = React.forwardRef< + React.ElementRef, + SheetContentProps +>(({ side = "right", className, children, ...props }, ref) => ( + + + + + + Close + + {children} + + +)); +SheetContent.displayName = SheetPrimitive.Content.displayName; + +const SheetHeader = ({ + className, + ...props +}: React.HTMLAttributes) => ( +
+); +SheetHeader.displayName = "SheetHeader"; + +const SheetFooter = ({ + className, + ...props +}: React.HTMLAttributes) => ( +
+); +SheetFooter.displayName = "SheetFooter"; + +const SheetTitle = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +SheetTitle.displayName = SheetPrimitive.Title.displayName; + +const SheetDescription = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)); +SheetDescription.displayName = SheetPrimitive.Description.displayName; + +export { + Sheet, + SheetPortal, + SheetOverlay, + SheetTrigger, + SheetClose, + SheetContent, + SheetHeader, + SheetFooter, + SheetTitle, + SheetDescription, +}; diff --git a/docs/landing-page/src/components/ui/sparks.md b/docs/landing-page/src/components/ui/sparks.md new file mode 100644 index 00000000000..197151797d7 --- /dev/null +++ b/docs/landing-page/src/components/ui/sparks.md @@ -0,0 +1,37 @@ +To generate the sparks svg: + +``` +import React, { PropsWithChildren } from "react"; +import { renderToString } from "react-dom/server"; +const circles = [ + { r: 175, fillOpacity: 0, strokeWidth: 20, strokeDasharray: "1 26", strokeDashoffset: "15", strokeOpacity: .65 }, + { r: 155, fillOpacity: 0, strokeWidth: 20, strokeDasharray: "1 26", strokeDashoffset: "16", strokeOpacity: .55 }, + { r: 135, fillOpacity: 0, strokeWidth: 20, strokeDasharray: "1 22", strokeDashoffset: "14", strokeOpacity: .45 }, + { r: 115, fillOpacity: 0, strokeWidth: 20, strokeDasharray: "1 18", strokeDashoffset: "25", strokeOpacity: .35 }, + { r: 95, fillOpacity: 0, strokeWidth: 20, strokeDasharray: "1 16", strokeDashoffset: "15", strokeOpacity: .15 }, + { r: 75, fillOpacity: 0, strokeWidth: 20, strokeDasharray: "1 12", strokeDashoffset: "17", strokeOpacity: .15 }, + { r: 55, fillOpacity: 0, strokeWidth: 20, strokeDasharray: "1 12", strokeDashoffset: "13", strokeOpacity: .15 }, + { r: 35, fillOpacity: 0, strokeWidth: 20, strokeDasharray: "1 10", strokeDashoffset: "21", strokeOpacity: .15 }, + { r: 15, fillOpacity: 0, strokeWidth: 20, strokeDasharray: "1 7", strokeDashoffset: "17", strokeOpacity: .15 }, +] + +const sparks = renderToString(<> + {``} + + { + circles.map((circleProps) => { + return ( + + ) + }) + } + + +) +``` diff --git a/docs/landing-page/src/i18n/client.tsx b/docs/landing-page/src/i18n/client.tsx new file mode 100644 index 00000000000..32cb5e51c59 --- /dev/null +++ b/docs/landing-page/src/i18n/client.tsx @@ -0,0 +1,18 @@ +import i18n from "i18next"; +import { initReactI18next } from "react-i18next"; +import Backend from "i18next-http-backend"; +import LanguageDetector from "i18next-browser-languagedetector"; + +i18n + .use(Backend) + .use(LanguageDetector) + .use(initReactI18next) + .init({ + load: "languageOnly", + fallbackLng: "en", + interpolation: { + escapeValue: false, // not needed for react as it escapes by default + }, + }); + +export default i18n; diff --git a/docs/landing-page/src/i18n/index.tsx b/docs/landing-page/src/i18n/index.tsx new file mode 100644 index 00000000000..5ec76921e18 --- /dev/null +++ b/docs/landing-page/src/i18n/index.tsx @@ -0,0 +1 @@ +export * from "./client"; diff --git a/docs/landing-page/src/i18n/ssr.tsx b/docs/landing-page/src/i18n/ssr.tsx new file mode 100644 index 00000000000..2230b1a695e --- /dev/null +++ b/docs/landing-page/src/i18n/ssr.tsx @@ -0,0 +1,22 @@ +import i18n from "i18next"; +import { initReactI18next } from "react-i18next"; +import LanguageDetector from "i18next-browser-languagedetector"; +import enTranslation from "../../public/locales/en/translation.json"; + +i18n + .use(LanguageDetector) + .use(initReactI18next) + .init({ + resources: { + en: { + translation: enTranslation, + }, + }, + fallbackLng: "en", + preload: ["en"], + react: { + useSuspense: false, + }, + }); + +export default i18n; diff --git a/docs/landing-page/src/index.css b/docs/landing-page/src/index.css new file mode 100644 index 00000000000..d44592d4982 --- /dev/null +++ b/docs/landing-page/src/index.css @@ -0,0 +1,91 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +@layer base { + html { + font-family: Arial, Helvetica, sans-serif; + } + :root { + --smithy-red: 357 78.4% 45.3%; + --smithy-red-33: 3 76% 83%; + --smithy-red-15: 2 74% 92%; + --smithy-black: 0 0% 9.4%; + --smithy-light-gray: 0 0% 85%; + --smithy-dark-gray: 0 0% 37%; + --smithy-purple: 318 80.6% 30.4%; + --smithy-purple-50: 313 46% 66%; + --smithy-rose: 329 100% 42%; + --smithy-plum: 330 59% 27%; + + /* TODO recalculate this */ + --smithy-gradient-midpoint: 354 61.5% 68.4%; + + --background: 0 0% 100%; + --foreground: 240 10% 3.9%; + --card: 0 0% 100%; + --card-foreground: 240 10% 3.9%; + --popover: 0 0% 100%; + --popover-foreground: 240 10% 3.9%; + --primary: var(--smithy-red); + --primary-foreground: 0 0% 98%; + --secondary: var(--smithy-red-15); + --secondary-foreground: 240 5.9% 10%; + --muted: 240 4.8% 95.9%; + --muted-foreground: 240 3.8% 46.1%; + --accent: 240 4.8% 95.9%; + --accent-foreground: 240 5.9% 10%; + --destructive: 0 84.2% 60.2%; + --destructive-foreground: 0 0% 98%; + --border: 240 5.9% 90%; + --input: 240 5.9% 90%; + --ring: 240 10% 3.9%; + --chart-1: 12 76% 61%; + --chart-2: 173 58% 39%; + --chart-3: 197 37% 24%; + --chart-4: 43 74% 66%; + --chart-5: 27 87% 67%; + --radius: 0.5rem; + --nav-offset: 5rem; + } + .dark { + --background: var(--smithy-black); + --foreground: 0 0% 98%; + --card: 240 10% 3.9%; + --card-foreground: 0 0% 98%; + --popover: 240 10% 3.9%; + --popover-foreground: 0 0% 98%; + --muted: 240 3.7% 15.9%; + --muted-foreground: 240 5% 64.9%; + --accent: 240 3.7% 15.9%; + --accent-foreground: 0 0% 98%; + --destructive: 0 62.8% 30.6%; + --destructive-foreground: 0 0% 98%; + --border: 240 3.7% 15.9%; + --input: 240 3.7% 15.9%; + --ring: 240 4.9% 83.9%; + --chart-1: 220 70% 50%; + --chart-2: 160 60% 45%; + --chart-3: 30 80% 55%; + --chart-4: 280 65% 60%; + --chart-5: 340 75% 55%; + } +} +@layer base { + * { + @apply border-border; + } + body { + @apply bg-background text-foreground; + } +} + +.smithy-highlight-rose { + @apply text-smithy-rose saturate-200; +} +.smithy-highlight-plum { + @apply text-smithy-plum saturate-200; +} +.smithy-highlight-purple { + @apply text-smithy-purple saturate-200; +} diff --git a/docs/landing-page/src/lib/utils.ts b/docs/landing-page/src/lib/utils.ts new file mode 100644 index 00000000000..a5ef193506d --- /dev/null +++ b/docs/landing-page/src/lib/utils.ts @@ -0,0 +1,6 @@ +import { clsx, type ClassValue } from "clsx"; +import { twMerge } from "tailwind-merge"; + +export function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)); +} diff --git a/docs/landing-page/src/main.tsx b/docs/landing-page/src/main.tsx new file mode 100644 index 00000000000..eec0f98b0a4 --- /dev/null +++ b/docs/landing-page/src/main.tsx @@ -0,0 +1,17 @@ +import { StrictMode } from "react"; +import { createRoot, hydrateRoot } from "react-dom/client"; +import App from "./App.tsx"; +import "./i18n/client.tsx"; +import "./index.css"; + +if (window === undefined) { + // static site generation + hydrateRoot(document.getElementById("root")!, ); +} else { + // development + createRoot(document.getElementById("root")!).render( + + + , + ); +} diff --git a/docs/landing-page/src/vite-env.d.ts b/docs/landing-page/src/vite-env.d.ts new file mode 100644 index 00000000000..11f02fe2a00 --- /dev/null +++ b/docs/landing-page/src/vite-env.d.ts @@ -0,0 +1 @@ +/// diff --git a/docs/landing-page/tailwind.config.js b/docs/landing-page/tailwind.config.js new file mode 100644 index 00000000000..5098f92e118 --- /dev/null +++ b/docs/landing-page/tailwind.config.js @@ -0,0 +1,75 @@ +/** @type {import('tailwindcss').Config} */ +export default { + darkMode: ["class"], + content: ["./index.html", "./src/**/*.{html,ts,tsx}"], + theme: { + extend: { + fontFamily: { + ember: ["sans-serif"], + }, + borderRadius: { + lg: "var(--radius)", + md: "calc(var(--radius) - 2px)", + sm: "calc(var(--radius) - 4px)", + }, + colors: { + background: "hsl(var(--background))", + foreground: "hsl(var(--foreground))", + "smithy-red": "hsl(var(--smithy-red))", + "smithy-red-33": "hsl(var(--smithy-red-33))", + "smithy-red-15": "hsl(var(--smithy-red-15))", + "smithy-black": "hsl(var(--smithy-black))", + "smithy-light-gray": "hsl(var(--smithy-light-gray))", + "smithy-dark-gray": "hsl(var(--smithy-dark-gray))", + "smithy-purple": "hsl(var(--smithy-purple))", + "smithy-purple-50": "hsl(var(--smithy-purple-50))", + "smithy-rose": "hsl(var(--smithy-rose))", + "smithy-plum": "hsl(var(--smithy-plum))", + "smithy-gradient-midpoint": "hsl(var(--smithy-gradient-midpoint))", + card: { + DEFAULT: "hsl(var(--card))", + foreground: "hsl(var(--card-foreground))", + }, + popover: { + DEFAULT: "hsl(var(--popover))", + foreground: "hsl(var(--popover-foreground))", + }, + primary: { + DEFAULT: "hsl(var(--primary))", + foreground: "hsl(var(--primary-foreground))", + }, + secondary: { + DEFAULT: "hsl(var(--secondary))", + foreground: "hsl(var(--secondary-foreground))", + }, + muted: { + DEFAULT: "hsl(var(--muted))", + foreground: "hsl(var(--muted-foreground))", + }, + accent: { + DEFAULT: "hsl(var(--accent))", + foreground: "hsl(var(--accent-foreground))", + }, + destructive: { + DEFAULT: "hsl(var(--destructive))", + foreground: "hsl(var(--destructive-foreground))", + }, + border: "hsl(var(--border))", + input: "hsl(var(--input))", + ring: "hsl(var(--ring))", + chart: { + 1: "hsl(var(--chart-1))", + 2: "hsl(var(--chart-2))", + 3: "hsl(var(--chart-3))", + 4: "hsl(var(--chart-4))", + 5: "hsl(var(--chart-5))", + }, + }, + backgroundImage: { + "radial-gradient": "radial-gradient(var(--tw-gradient-stops))", + }, + }, + }, + plugins: [require("tailwindcss-animate")], + safelist: ["sm:hidden"], +}; diff --git a/docs/landing-page/tsconfig.app.json b/docs/landing-page/tsconfig.app.json new file mode 100644 index 00000000000..e7e492d699a --- /dev/null +++ b/docs/landing-page/tsconfig.app.json @@ -0,0 +1,29 @@ +{ + "compilerOptions": { + "target": "ES2020", + "useDefineForClassFields": true, + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "isolatedModules": true, + "moduleDetection": "force", + "noEmit": true, + "jsx": "react-jsx", + + /* Linting */ + "strict": true, + "noUnusedLocals": false, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + + "baseUrl": ".", + "paths": { + "@/*": ["src/*"] + } + }, + "include": ["src", "plugins"] +} diff --git a/docs/landing-page/tsconfig.app.tsbuildinfo b/docs/landing-page/tsconfig.app.tsbuildinfo new file mode 100644 index 00000000000..a70ac72dc7d --- /dev/null +++ b/docs/landing-page/tsconfig.app.tsbuildinfo @@ -0,0 +1 @@ +{"root":["./src/App.stories.tsx","./src/App.tsx","./src/main.tsx","./src/vite-env.d.ts","./src/components/landing-page/ServiceExample.tsx","./src/components/landing-page/index.tsx","./src/components/landing-page/useSupportedLanguagesHook.tsx","./src/components/landing-page/Features/index.stories.tsx","./src/components/landing-page/Features/index.tsx","./src/components/landing-page/Footer/index.stories.tsx","./src/components/landing-page/Footer/index.tsx","./src/components/landing-page/Heading/Diagram.tsx","./src/components/landing-page/Heading/Tagline.tsx","./src/components/landing-page/Heading/index.tsx","./src/components/landing-page/InformationCircles/index.stories.tsx","./src/components/landing-page/InformationCircles/index.tsx","./src/components/landing-page/Quote/index.stories.tsx","./src/components/landing-page/Quote/index.tsx","./src/components/landing-page/SubHeading/index.stories.tsx","./src/components/landing-page/SubHeading/index.tsx","./src/components/landing-page/SubHeading/web.stories.tsx","./src/components/landing-page/SubHeading/web.tsx","./src/components/navigation/HamburgerMenu.tsx","./src/components/navigation/MenuLinks.tsx","./src/components/navigation/index.tsx","./src/components/navigation/navigation.stories.tsx","./src/components/svg/arrow.stories.tsx","./src/components/svg/arrow.tsx","./src/components/svg/line.stories.tsx","./src/components/svg/line.tsx","./src/components/svg/spider.stories.tsx","./src/components/svg/spider.tsx","./src/components/svg/svg.tsx","./src/components/svg/useResizeObserver.tsx","./src/components/svg/wheel.stories.tsx","./src/components/svg/wheel.tsx","./src/components/ui/CircleSection.stories.tsx","./src/components/ui/CircleSection.tsx","./src/components/ui/Section.stories.tsx","./src/components/ui/Section.tsx","./src/components/ui/SmithyGlow.stories.tsx","./src/components/ui/SmithyGlow.tsx","./src/components/ui/SmithyPopGradient.stories.tsx","./src/components/ui/SmithyPopGradient.tsx","./src/components/ui/brand.stories.tsx","./src/components/ui/brand.tsx","./src/components/ui/button.stories.tsx","./src/components/ui/button.tsx","./src/components/ui/card.stories.tsx","./src/components/ui/card.tsx","./src/components/ui/icons.stories.tsx","./src/components/ui/icons.tsx","./src/components/ui/ide-panel.stories.tsx","./src/components/ui/ide-panel.tsx","./src/components/ui/navigation-menu.tsx","./src/components/ui/sheet.tsx","./src/i18n/client.tsx","./src/i18n/index.tsx","./src/i18n/ssr.tsx","./src/lib/utils.ts"],"version":"5.6.3"} \ No newline at end of file diff --git a/docs/landing-page/tsconfig.json b/docs/landing-page/tsconfig.json new file mode 100644 index 00000000000..1e1739310f4 --- /dev/null +++ b/docs/landing-page/tsconfig.json @@ -0,0 +1,17 @@ +{ + "files": [], + "references": [ + { + "path": "./tsconfig.app.json" + }, + { + "path": "./tsconfig.node.json" + } + ], + "compilerOptions": { + "baseUrl": ".", + "paths": { + "@/*": ["./src/*"] + } + } +} diff --git a/docs/landing-page/tsconfig.node.json b/docs/landing-page/tsconfig.node.json new file mode 100644 index 00000000000..722306ab963 --- /dev/null +++ b/docs/landing-page/tsconfig.node.json @@ -0,0 +1,27 @@ +{ + "compilerOptions": { + "target": "ES2022", + "lib": ["ES2023"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "isolatedModules": true, + "moduleDetection": "force", + "noEmit": true, + + /* Linting */ + "strict": true, + "noUnusedLocals": false, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + + "baseUrl": ".", + "paths": { + "@/*": ["./src/*"] + } + }, + "include": ["vite.config.ts"] +} diff --git a/docs/landing-page/tsconfig.node.tsbuildinfo b/docs/landing-page/tsconfig.node.tsbuildinfo new file mode 100644 index 00000000000..75ea0011dff --- /dev/null +++ b/docs/landing-page/tsconfig.node.tsbuildinfo @@ -0,0 +1 @@ +{"root":["./vite.config.ts"],"version":"5.6.3"} \ No newline at end of file diff --git a/docs/landing-page/vite.config.ts b/docs/landing-page/vite.config.ts new file mode 100644 index 00000000000..c859925c824 --- /dev/null +++ b/docs/landing-page/vite.config.ts @@ -0,0 +1,15 @@ +import path from "path"; +import react from "@vitejs/plugin-react"; +import { defineConfig } from "vite"; + +export default defineConfig({ + plugins: [react()], + build: { + cssCodeSplit: false, + }, + resolve: { + alias: { + "@": path.resolve(__dirname, "./src"), + }, + }, +}); diff --git a/docs/root/index.html b/docs/root/index.html deleted file mode 100644 index cbbfe33fa7d..00000000000 --- a/docs/root/index.html +++ /dev/null @@ -1,3 +0,0 @@ - - - From 208fe13275164fe31a9788e9dfaff216621b34df Mon Sep 17 00:00:00 2001 From: Michael Young Date: Wed, 26 Feb 2025 14:59:59 -0500 Subject: [PATCH 2/3] add node to gh action setup and install npm dependencies --- .github/workflows/make-docs.yml | 5 +++++ docs/Makefile | 1 + 2 files changed, 6 insertions(+) diff --git a/.github/workflows/make-docs.yml b/.github/workflows/make-docs.yml index b15260fa498..e67ee1f3b76 100644 --- a/.github/workflows/make-docs.yml +++ b/.github/workflows/make-docs.yml @@ -26,6 +26,11 @@ jobs: java-version: 17 distribution: 'corretto' + - name: Setup Node + uses: actions/setup-node@v4 + with: + node-version: latest + - name: Checkout repo uses: actions/checkout@v4 - name: Setup diff --git a/docs/Makefile b/docs/Makefile index 58768ef4773..90f59ffa6ee 100644 --- a/docs/Makefile +++ b/docs/Makefile @@ -7,6 +7,7 @@ SHELL := /bin/bash install: requirements.txt python3 -m venv build/venv source build/venv/bin/activate && pip3 install -r requirements.txt . && pip3 install -e . + (cd landing-page && npm install) clean: -rm -rf build/* install From 5d64c4e61ae4a270b80fbccea95c95e03d858fc6 Mon Sep 17 00:00:00 2001 From: Michael Young Date: Thu, 27 Feb 2025 12:38:22 -0500 Subject: [PATCH 3/3] update landing page copy command --- docs/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/Makefile b/docs/Makefile index 90f59ffa6ee..4c2b9290e55 100644 --- a/docs/Makefile +++ b/docs/Makefile @@ -31,7 +31,7 @@ merge-versions: cp -R "build/1.0/html" "build/html/1.0" cp -R "build/2.0/html" "build/html/2.0" cp -R root/* "build/html" - cp -R "landing-page/dist/" "build/html/" + cp -R landing-page/dist/* "build/html/" openhtml: open "build/html/index.html"